1 #include "rc.h" 2 #include "exec.h" 3 #include "io.h" 4 #include "fns.h" 5 6 struct{ 7 void (*f)(void); 8 char *name; 9 } fname[] = { 10 Xappend, "Xappend", 11 Xassign, "Xassign", 12 Xasync, "Xasync", 13 Xbackq, "Xbackq", 14 Xbang, "Xbang", 15 Xcase, "Xcase", 16 Xclose, "Xclose", 17 Xconc, "Xconc", 18 Xcount, "Xcount", 19 Xdelfn, "Xdelfn", 20 Xdelhere, "Xdelhere", 21 Xdol, "Xdol", 22 Xdup, "Xdup", 23 Xeflag, "Xeflag", 24 (void (*)(void))Xerror, "Xerror", 25 Xexit, "Xexit", 26 Xfalse, "Xfalse", 27 Xfn, "Xfn", 28 Xfor, "Xfor", 29 Xglob, "Xglob", 30 Xif, "Xif", 31 Xifnot, "Xifnot", 32 Xjump, "Xjump", 33 Xlocal, "Xlocal", 34 Xmark, "Xmark", 35 Xmatch, "Xmatch", 36 Xpipe, "Xpipe", 37 Xpipefd, "Xpipefd", 38 Xpipewait, "Xpipewait", 39 Xpopm, "Xpopm", 40 Xpopredir, "Xpopredir", 41 Xqdol, "Xqdol", 42 Xrdcmds, "Xrdcmds", 43 Xrdfn, "Xrdfn", 44 Xrdwr, "Xrdwr", 45 Xread, "Xread", 46 Xreturn, "Xreturn", 47 Xsimple, "Xsimple", 48 Xsub, "Xsub", 49 Xsubshell, "Xsubshell", 50 Xtrue, "Xtrue", 51 Xunlocal, "Xunlocal", 52 Xwastrue, "Xwastrue", 53 Xword, "Xword", 54 Xwrite, "Xwrite", 55 0 56 }; 57 58 void 59 pfnc(io *fd, thread *t) 60 { 61 int i; 62 void (*fn)(void) = t->code[t->pc].f; 63 list *a; 64 65 pfmt(fd, "pid %d cycle %p %d ", getpid(), t->code, t->pc); 66 for (i = 0; fname[i].f; i++) 67 if (fname[i].f == fn) { 68 pstr(fd, fname[i].name); 69 break; 70 } 71 if (!fname[i].f) 72 pfmt(fd, "%p", fn); 73 for (a = t->argv; a; a = a->next) 74 pfmt(fd, " (%v)", a->words); 75 pchr(fd, '\n'); 76 flush(fd); 77 } 78