72 lines
1.3 KiB
C
72 lines
1.3 KiB
C
#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",
|
|
Xrdwr, "Xrdwr",
|
|
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",
|
|
Xpopredir, "Xpopredir",
|
|
Xrdcmds, "Xrdcmds",
|
|
(void (*)(void))Xerror, "Xerror",
|
|
Xbackq, "Xbackq",
|
|
Xpipefd, "Xpipefd",
|
|
Xsubshell, "Xsubshell",
|
|
Xdelhere, "Xdelhere",
|
|
Xfor, "Xfor",
|
|
Xglob, "Xglob",
|
|
Xglobs, "Xglobs",
|
|
Xrdfn, "Xrdfn",
|
|
Xsimple, "Xsimple",
|
|
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);
|
|
}
|