9 char buf[128], lastcmd[128];
16 char* term(char*, ulong*);
21 while(*p && (*p == ' ' || *p == '\t') && *p != '\n')
31 numsym(char *addr, ulong *val)
34 static char *delim = "`'<>/\\@*|-~+-/=?\n";
47 if(strcmp(tsym, ".") == 0) {
52 if(lookup(0, tsym, &s))
56 *val = strtoul(tsym+1, 0, 16);
58 *val = strtoul(tsym, 0, 0);
72 addr = numsym(addr, &t);
82 Bprint(bioout, "expr syntax\n");
105 buildargv(char *str, char **args, int max)
110 while((*str == ' ' || *str == '\t' || *str == '\n') && *str != '\0')
117 while(!(*str == ' ' || *str == '\t'|| *str == '\n') && *str != '\0')
132 colon(char *addr, char *cp)
141 Bprint(bioout, "?\n");
144 breakpoint(addr, cp+1);
151 /* These fall through to print the stopped address */
154 argc = buildargv(cp+1, argv, 100);
169 count = strtoul(cp, 0, 0);
178 Bprint(bioout, "%s at #%lux ", atbpt ? "breakpoint" : "stopped", dot);
179 symoff(tbuf, sizeof(tbuf), dot, CTEXT);
180 Bprint(bioout, tbuf);
184 Bprint(bioout, "\n");
196 Bprint(bioout, "?\n");
240 Bprint(bioout, "$t[0sicr#]\n");
261 if(nr < 0 || nr > 31) {
262 print("bad register\n");
266 print("%.8ux\n", rtrace);
275 Bprint(bioout, "$i[itsa]\n");
300 pfmt(char fmt, int mem, ulong val)
304 char *p, ch, str[1024];
309 Bprint(bioout, "bad modifier\n");
312 c = Bprint(bioout, "%-4lo ", mem ? (ushort)getmem_2(dot) : val);
317 c = Bprint(bioout, "%-8lo ", mem ? getmem_4(dot) : val);
322 c = Bprint(bioout, "%-4lo ", mem ? (short)getmem_2(dot) : val);
327 c = Bprint(bioout, "%-8lo ", mem ? (long)getmem_4(dot) : val);
332 c = Bprint(bioout, "%-5ld ", mem ? (short)getmem_2(dot) : val);
338 c = Bprint(bioout, "%-8ld ", mem ? (long)getmem_4(dot) : val);
343 c = Bprint(bioout, "#%-4lux ", mem ? (long)getmem_2(dot) : val);
348 c = Bprint(bioout, "#%-8lux ", mem ? (long)getmem_4(dot) : val);
353 c = Bprint(bioout, "%-5ld ", mem ? (ushort)getmem_2(dot) : val);
358 c = Bprint(bioout, "%-8ld ", mem ? (ulong)getmem_4(dot) : val);
363 c = Bprint(bioout, "%-3ld ", mem ? getmem_b(dot) : val);
368 c = Bprint(bioout, "%c ", (int)(mem ? getmem_b(dot) : val));
373 ch = mem ? getmem_b(dot) : val;
375 c = Bprint(bioout, "%c ", ch);
377 c = Bprint(bioout, "\\x%.2x ", ch);
383 while(ch = getmem_b(dot+i))
387 c = Bprint(bioout, "%s", str);
393 while(ch = getmem_b(dot+i))
397 for(p = str; *p; p++)
399 c += Bprint(bioout, "%c", *p);
401 c += Bprint(bioout, "\\x%.2ux", *p);
406 p = ctime(mem ? getmem_b(dot) : val);
408 c = Bprint(bioout, "%s", p);
413 symoff(str, sizeof(str), dot, CTEXT);
414 c = Bprint(bioout, str);
419 for (i = 0; globalsym(&s, i); i++)
420 Bprint(bioout, "%-15s #%lux\n", s.name, getmem_4(s.value));
425 inc = _mipscoinst(symmap, dot, str, sizeof(str));
427 Bprint(bioout, "vi: %r\n");
430 c = Bprint(bioout, str);
455 if (findsym(dot, CTEXT, &s))
456 Bprint(bioout, " %s() ", s.name);
465 eval(char *addr, char *p)
476 Bprint(bioout, "\n");
486 symoff(tbuf, sizeof(tbuf), dot, CTEXT);
487 Bprint(bioout, "%s?\t", tbuf);
492 for(p++; *p && *p != '"'; p++) {
501 while(*p >= '0' && *p <= '9')
502 count = count*10 + (*p++ - '0');
510 for(i = 0; i < count; i++) {
514 Bprint(bioout, "\n");
515 symoff(tbuf, sizeof(tbuf), dot, CTEXT);
516 Bprint(bioout, "%s?\t", tbuf);
523 Bprint(bioout, "\n");
527 catcher(void *a, char *msg)
530 if(strcmp(msg, "interrupt") != 0)
539 setreg(char *addr, char *cp)
545 if(strcmp(cp, "pc") == 0) {
549 if(strcmp(cp, "sp") == 0) {
553 if(strcmp(cp, "mh") == 0) {
557 if(strcmp(cp, "ml") == 0) {
562 rn = strtoul(cp, 0, 10);
563 if(rn > 0 && rn < 32) {
568 Bprint(bioout, "bad register\n");
574 char *p, *a, *cp, *gotint;
576 static char *cmdlet = ":$?/=>";
599 strcpy(buf, lastcmd);
602 strcpy(lastcmd, buf);
609 if(*p == 0 || strchr(cmdlet, *p))
616 cp = strchr(addr, ',');
619 cmdcount = strtoul(cp+2, &gotint, 16);
621 cmdcount = strtoul(cp+1, &gotint, 0);
635 for(i = 0; i < cmdcount; i++)
645 Bprint(bioout, "?\n");