#include "rc.h" #include "exec.h" #include "io.h" #include "fns.h" struct{ void (*f)(void); char *name; } fname[] = { Xappend, "Xappend", Xassign, "Xassign", Xasync, "Xasync", Xbackq, "Xbackq", Xbang, "Xbang", Xcase, "Xcase", Xclose, "Xclose", Xconc, "Xconc", Xcount, "Xcount", Xdelfn, "Xdelfn", Xdelhere, "Xdelhere", Xdol, "Xdol", Xdup, "Xdup", Xeflag, "Xeflag", (void (*)(void))Xerror, "Xerror", Xexit, "Xexit", Xfalse, "Xfalse", Xfn, "Xfn", Xfor, "Xfor", Xglob, "Xglob", Xif, "Xif", Xifnot, "Xifnot", Xjump, "Xjump", Xlocal, "Xlocal", Xmark, "Xmark", Xmatch, "Xmatch", Xpipe, "Xpipe", Xpipefd, "Xpipefd", Xpipewait, "Xpipewait", Xpopm, "Xpopm", Xpopredir, "Xpopredir", Xqdol, "Xqdol", Xrdcmds, "Xrdcmds", Xrdfn, "Xrdfn", Xrdwr, "Xrdwr", Xread, "Xread", Xreturn, "Xreturn", Xsimple, "Xsimple", Xsub, "Xsub", Xsubshell, "Xsubshell", Xtrue, "Xtrue", Xunlocal, "Xunlocal", Xwastrue, "Xwastrue", Xword, "Xword", Xwrite, "Xwrite", 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); }