diff options
| author | rsc <devnull@localhost> | 2003-11-23 18:04:08 +0000 |
|---|---|---|
| committer | rsc <devnull@localhost> | 2003-11-23 18:04:08 +0000 |
| commit | f08fdedcee12c06e3ce9ac9bec363915978e8289 (patch) | |
| tree | d67a27473be1e8f98d3694028104d9ddf915345b /src/cmd/rc/pfnc.c | |
| parent | 5993a8f2756bc455101a8c9ce95347d5050e7883 (diff) | |
| download | plan9port-f08fdedcee12c06e3ce9ac9bec363915978e8289.tar.gz plan9port-f08fdedcee12c06e3ce9ac9bec363915978e8289.zip | |
Plan 9's rc.
not a clear win over byron's,
but at least it has the right syntax.
Diffstat (limited to 'src/cmd/rc/pfnc.c')
| -rw-r--r-- | src/cmd/rc/pfnc.c | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/src/cmd/rc/pfnc.c b/src/cmd/rc/pfnc.c new file mode 100644 index 00000000..a4606e7c --- /dev/null +++ b/src/cmd/rc/pfnc.c @@ -0,0 +1,67 @@ +#include "rc.h" +#include "exec.h" +#include "io.h" +#include "fns.h" +struct{ + void (*f)(void); + char *name; +}fname[]={ + Xappend, "Xappend", + Xasync, "Xasync", + Xbang, "Xbang", + Xclose, "Xclose", + Xdup, "Xdup", + Xeflag, "Xeflag", + Xexit, "Xexit", + Xfalse, "Xfalse", + Xifnot, "Xifnot", + Xjump, "Xjump", + Xmark, "Xmark", + Xpopm, "Xpopm", + Xread, "Xread", + Xreturn, "Xreturn", + Xtrue, "Xtrue", + Xif, "Xif", + Xwastrue, "Xwastrue", + Xword, "Xword", + Xwrite, "Xwrite", + Xmatch, "Xmatch", + Xcase, "Xcase", + Xconc, "Xconc", + Xassign, "Xassign", + Xdol, "Xdol", + Xcount, "Xcount", + Xlocal, "Xlocal", + Xunlocal, "Xunlocal", + Xfn, "Xfn", + Xdelfn, "Xdelfn", + Xpipe, "Xpipe", + Xpipewait, "Xpipewait", + Xrdcmds, "Xrdcmds", + (void (*)(void))Xerror, "Xerror", + Xbackq, "Xbackq", + Xpipefd, "Xpipefd", + Xsubshell, "Xsubshell", + Xdelhere, "Xdelhere", + Xfor, "Xfor", + Xglob, "Xglob", + Xrdfn, "Xrdfn", + Xsimple, "Xsimple", + Xrdfn, "Xrdfn", + Xqdol, "Xqdol", +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); +} |
