8 char buf[128], lastcmd[128];
15 char* term(char*, ulong*);
20 while(*p && (*p == ' ' || *p == '\t') && *p != '\n')
30 numsym(char *addr, ulong *val)
33 static char *delim = "`'<>/\\@*|-~+-/=?\n";
46 if(strcmp(tsym, ".") == 0) {
51 if(lookup(0, tsym, &s))
55 *val = strtoul(tsym+1, 0, 16);
57 *val = strtoul(tsym, 0, 0);
71 addr = numsym(addr, &t);
81 Bprint(bioout, "expr syntax\n");
104 buildargv(char *str, char **args, int max)
109 while((*str == ' ' || *str == '\t' || *str == '\n') && *str != '\0')
116 while(!(*str == ' ' || *str == '\t'|| *str == '\n') && *str != '\0')
131 colon(char *addr, char *cp)
140 Bprint(bioout, "?\n");
143 breakpoint(addr, cp+1);
150 /* These fall through to print the stopped address */
153 argc = buildargv(cp+1, argv, 100);
168 count = strtoul(cp, 0, 0);
177 Bprint(bioout, "%s at #%lux ", atbpt? "breakpoint": "stopped", dot);
178 symoff(tbuf, sizeof(tbuf), dot, CTEXT);
179 Bprint(bioout, tbuf);
183 Bprint(bioout, "\n");
193 Bprint(bioout, "?\n");
237 Bprint(bioout, ":t[0sic]\n");
263 Bprint(bioout, "$i[itsa]\n");
288 pfmt(char fmt, int mem, ulong val)
292 char *p, ch, str[1024];
297 Bprint(bioout, "bad modifier\n");
300 c = Bprint(bioout, "%-4lo ", mem? (ushort)getmem_2(dot): val);
305 c = Bprint(bioout, "%-8lo ", mem? getmem_4(dot): val);
310 c = Bprint(bioout, "%-4lo ", mem? (short)getmem_2(dot): val);
315 c = Bprint(bioout, "%-8lo ", mem? (long)getmem_4(dot): val);
320 c = Bprint(bioout, "%-5ld ", mem? (short)getmem_2(dot): val);
326 c = Bprint(bioout, "%-8ld ", mem? (long)getmem_4(dot): val);
331 c = Bprint(bioout, "#%-4lux ", mem? (long)getmem_2(dot): val);
336 c = Bprint(bioout, "#%-8lux ", mem? (long)getmem_4(dot): val);
341 c = Bprint(bioout, "%-5ld ", mem? (ushort)getmem_2(dot): val);
346 c = Bprint(bioout, "%-8ld ", mem? (ulong)getmem_4(dot): val);
351 c = Bprint(bioout, "%-3ld ", mem? getmem_b(dot): val);
356 c = Bprint(bioout, "%c ", (int)(mem? getmem_b(dot): val));
361 ch = mem? getmem_b(dot): val;
363 c = Bprint(bioout, "%c ", ch);
365 c = Bprint(bioout, "\\x%.2x ", ch);
371 while(ch = getmem_b(dot+i))
375 c = Bprint(bioout, "%s", str);
381 while(ch = getmem_b(dot+i))
385 for(p = str; *p; p++)
387 c += Bprint(bioout, "%c", *p);
389 c += Bprint(bioout, "\\x%.2ux", *p);
394 p = ctime(mem? getmem_b(dot): val);
396 c = Bprint(bioout, "%s", p);
401 symoff(str, sizeof(str), dot, CTEXT);
402 c = Bprint(bioout, str);
407 for(i = 0; globalsym(&s, i); i++)
408 Bprint(bioout, "%-15s #%lux\n", s.name, getmem_4(s.value));
414 inc = machdata->das(symmap, dot, fmt, str, sizeof(str));
416 Bprint(bioout, "5i: %r\n");
419 c = Bprint(bioout, "\t%s", str);
444 if(findsym(dot, CTEXT, &s))
445 Bprint(bioout, " %s() ", s.name);
454 eval(char *addr, char *p)
465 Bprint(bioout, "\n");
475 symoff(tbuf, sizeof(tbuf), dot, CTEXT);
476 Bprint(bioout, "%s?\t", tbuf);
481 for(p++; *p && *p != '"'; p++) {
490 while(*p >= '0' && *p <= '9')
491 count = count*10 + (*p++ - '0');
499 for(i = 0; i < count; i++) {
503 Bprint(bioout, "\n");
504 symoff(tbuf, sizeof(tbuf), dot, CTEXT);
505 Bprint(bioout, "%s?\t", tbuf);
512 Bprint(bioout, "\n");
516 catcher(void *a, char *msg)
524 if(strcmp(msg, "interrupt") != 0)
533 setreg(char *addr, char *cp)
539 if(strcmp(cp, "pc") == 0) {
543 if(strcmp(cp, "sp") == 0) {
548 rn = strtoul(cp, 0, 10);
549 if(rn > 0 && rn < 16) {
554 Bprint(bioout, "bad register\n");
560 char *p, *a, *cp, *gotint;
562 static char *cmdlet = ":$?/=>";
574 while(n < sizeof(buf)) {
585 strcpy(buf, lastcmd);
588 strcpy(lastcmd, buf);
595 if(*p == 0 || strchr(cmdlet, *p))
602 cp = strchr(addr, ',');
605 cmdcount = strtoul(cp+2, &gotint, 16);
607 cmdcount = strtoul(cp+1, &gotint, 0);
621 for(i = 0; i < cmdcount; i++)
631 Bprint(bioout, "?\n");