13e12c5d1SDavid du Colombier #include "rc.h" 23e12c5d1SDavid du Colombier #include "exec.h" 33e12c5d1SDavid du Colombier #include "io.h" 43e12c5d1SDavid du Colombier #include "fns.h" 53e12c5d1SDavid du Colombier struct{ 63e12c5d1SDavid du Colombier void (*f)(void); 73e12c5d1SDavid du Colombier char *name; 83e12c5d1SDavid du Colombier }fname[]={ 93e12c5d1SDavid du Colombier Xappend, "Xappend", 103e12c5d1SDavid du Colombier Xasync, "Xasync", 113e12c5d1SDavid du Colombier Xbang, "Xbang", 123e12c5d1SDavid du Colombier Xclose, "Xclose", 133e12c5d1SDavid du Colombier Xdup, "Xdup", 14*219b2ee8SDavid du Colombier Xeflag, "Xeflag", 153e12c5d1SDavid du Colombier Xexit, "Xexit", 163e12c5d1SDavid du Colombier Xfalse, "Xfalse", 173e12c5d1SDavid du Colombier Xifnot, "Xifnot", 183e12c5d1SDavid du Colombier Xjump, "Xjump", 193e12c5d1SDavid du Colombier Xmark, "Xmark", 203e12c5d1SDavid du Colombier Xpopm, "Xpopm", 213e12c5d1SDavid du Colombier Xread, "Xread", 223e12c5d1SDavid du Colombier Xreturn, "Xreturn", 233e12c5d1SDavid du Colombier Xtrue, "Xtrue", 243e12c5d1SDavid du Colombier Xif, "Xif", 253e12c5d1SDavid du Colombier Xwastrue, "Xwastrue", 263e12c5d1SDavid du Colombier Xword, "Xword", 273e12c5d1SDavid du Colombier Xwrite, "Xwrite", 283e12c5d1SDavid du Colombier Xmatch, "Xmatch", 293e12c5d1SDavid du Colombier Xcase, "Xcase", 303e12c5d1SDavid du Colombier Xconc, "Xconc", 313e12c5d1SDavid du Colombier Xassign, "Xassign", 323e12c5d1SDavid du Colombier Xdol, "Xdol", 333e12c5d1SDavid du Colombier Xcount, "Xcount", 343e12c5d1SDavid du Colombier Xlocal, "Xlocal", 353e12c5d1SDavid du Colombier Xunlocal, "Xunlocal", 363e12c5d1SDavid du Colombier Xfn, "Xfn", 373e12c5d1SDavid du Colombier Xdelfn, "Xdelfn", 383e12c5d1SDavid du Colombier Xpipe, "Xpipe", 393e12c5d1SDavid du Colombier Xpipewait, "Xpipewait", 403e12c5d1SDavid du Colombier Xrdcmds, "Xrdcmds", 413e12c5d1SDavid du Colombier (void (*)(void))Xerror, "Xerror", 423e12c5d1SDavid du Colombier Xbackq, "Xbackq", 433e12c5d1SDavid du Colombier Xpipefd, "Xpipefd", 443e12c5d1SDavid du Colombier Xsubshell, "Xsubshell", 453e12c5d1SDavid du Colombier Xdelhere, "Xdelhere", 463e12c5d1SDavid du Colombier Xfor, "Xfor", 473e12c5d1SDavid du Colombier Xglob, "Xglob", 483e12c5d1SDavid du Colombier Xrdfn, "Xrdfn", 493e12c5d1SDavid du Colombier Xsimple, "Xsimple", 503e12c5d1SDavid du Colombier Xrdfn, "Xrdfn", 513e12c5d1SDavid du Colombier Xqdol, "Xqdol", 523e12c5d1SDavid du Colombier 0}; 533e12c5d1SDavid du Colombier void pfnc(io *fd, thread *t) 543e12c5d1SDavid du Colombier { 553e12c5d1SDavid du Colombier int i; 563e12c5d1SDavid du Colombier void (*fn)(void)=t->code[t->pc].f; 573e12c5d1SDavid du Colombier list *a; 583e12c5d1SDavid du Colombier pfmt(fd, "pid %d cycle %p %d ", getpid(), t->code, t->pc); 593e12c5d1SDavid du Colombier for(i=0;fname[i].f;i++) if(fname[i].f==fn){ 603e12c5d1SDavid du Colombier pstr(fd, fname[i].name); 613e12c5d1SDavid du Colombier break; 623e12c5d1SDavid du Colombier } 633e12c5d1SDavid du Colombier if(!fname[i].f) pfmt(fd, "%p", fn); 643e12c5d1SDavid du Colombier for(a=t->argv;a;a=a->next) pfmt(fd, " (%v)", a->words); 653e12c5d1SDavid du Colombier pchr(fd, '\n'); 663e12c5d1SDavid du Colombier flush(fd); 673e12c5d1SDavid du Colombier } 68