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