Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#include "rc.h"
#include "exec.h"
#include "io.h"
#include "fns.h"

struct{
        void    (*f)(void);
        char    *name;
} fname[] = {
        Xappend, "Xappend",
        Xassign, "Xassign",
        Xasync, "Xasync",
        Xbackq, "Xbackq",
        Xbang, "Xbang",
        Xcase, "Xcase",
        Xclose, "Xclose",
        Xconc, "Xconc",
        Xcount, "Xcount",
        Xdelfn, "Xdelfn",
        Xdelhere, "Xdelhere",
        Xdol, "Xdol",
        Xdup, "Xdup",
        Xeflag, "Xeflag",
        (void (*)(void))Xerror, "Xerror",
        Xexit, "Xexit",
        Xfalse, "Xfalse",
        Xfn, "Xfn",
        Xfor, "Xfor",
        Xglob, "Xglob",
        Xif, "Xif",
        Xifnot, "Xifnot",
        Xjump, "Xjump",
        Xlocal, "Xlocal",
        Xmark, "Xmark",
        Xmatch, "Xmatch",
        Xpipe, "Xpipe",
        Xpipefd, "Xpipefd",
        Xpipewait, "Xpipewait",
        Xpopm, "Xpopm",
        Xpopredir, "Xpopredir",
        Xqdol, "Xqdol",
        Xrdcmds, "Xrdcmds",
        Xrdfn, "Xrdfn",
        Xrdwr, "Xrdwr",
        Xread, "Xread",
        Xreturn, "Xreturn",
        Xsimple, "Xsimple",
        Xsub, "Xsub",
        Xsubshell, "Xsubshell",
        Xtrue, "Xtrue",
        Xunlocal, "Xunlocal",
        Xwastrue, "Xwastrue",
        Xword, "Xword",
        Xwrite, "Xwrite",
        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);
}