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