#include "rc.h" | |
#include "exec.h" | |
#include "io.h" | |
#include "fns.h" | |
struct{ | |
void (*f)(void); | |
char *name; | |
}fname[] = { | |
Xappend, "Xappend", | |
Xasync, "Xasync", | |
Xbang, "Xbang", | |
Xclose, "Xclose", | |
Xdup, "Xdup", | |
Xeflag, "Xeflag", | |
Xexit, "Xexit", | |
Xfalse, "Xfalse", | |
Xifnot, "Xifnot", | |
Xjump, "Xjump", | |
Xmark, "Xmark", | |
Xpopm, "Xpopm", | |
Xrdwr, "Xrdwr", | |
Xread, "Xread", | |
Xreturn, "Xreturn", | |
Xtrue, "Xtrue", | |
Xif, "Xif", | |
Xwastrue, "Xwastrue", | |
Xword, "Xword", | |
Xwrite, "Xwrite", | |
Xmatch, "Xmatch", | |
Xcase, "Xcase", | |
Xconc, "Xconc", | |
Xassign, "Xassign", | |
Xdol, "Xdol", | |
Xcount, "Xcount", | |
Xlocal, "Xlocal", | |
Xunlocal, "Xunlocal", | |
Xfn, "Xfn", | |
Xdelfn, "Xdelfn", | |
Xpipe, "Xpipe", | |
Xpipewait, "Xpipewait", | |
Xrdcmds, "Xrdcmds", | |
(void (*)(void))Xerror, "Xerror", | |
Xbackq, "Xbackq", | |
Xpipefd, "Xpipefd", | |
Xsubshell, "Xsubshell", | |
Xdelhere, "Xdelhere", | |
Xfor, "Xfor", | |
Xglob, "Xglob", | |
Xrdfn, "Xrdfn", | |
Xsimple, "Xsimple", | |
Xrdfn, "Xrdfn", | |
Xqdol, "Xqdol", | |
0}; | |
void | |
pfnc(io *fd, thread *t) | |
{ | |
int i; | |
void (*fn)(void) = t->code[t->pc].f; | |
list *a; | |
pfmt(fd, "pid %d cycle %p %d ", getpid(), t->code, t->pc); | |
for(i = 0;fname[i].f;i++) if(fname[i].f==fn){ | |
pstr(fd, fname[i].name); | |
break; | |
} | |
if(!fname[i].f) | |
pfmt(fd, "%p", fn); | |
for(a = t->argv;a;a = a->next) pfmt(fd, " (%v)", a->words); | |
pchr(fd, '\n'); | |
flush(fd); | |
} |