pfnc.c - 9base - revived minimalist port of Plan 9 userland to Unix
 (HTM) git clone git://git.suckless.org/9base
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
       pfnc.c (1320B)
       ---
            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         Xrdwr, "Xrdwr",
           22         Xread, "Xread",
           23         Xreturn, "Xreturn",
           24         Xtrue, "Xtrue",
           25         Xif, "Xif",
           26         Xwastrue, "Xwastrue",
           27         Xword, "Xword",
           28         Xwrite, "Xwrite",
           29         Xmatch, "Xmatch",
           30         Xcase, "Xcase",
           31         Xconc, "Xconc",
           32         Xassign, "Xassign",
           33         Xdol, "Xdol",
           34         Xcount, "Xcount",
           35         Xlocal, "Xlocal",
           36         Xunlocal, "Xunlocal",
           37         Xfn, "Xfn",
           38         Xdelfn, "Xdelfn",
           39         Xpipe, "Xpipe",
           40         Xpipewait, "Xpipewait",
           41         Xrdcmds, "Xrdcmds",
           42         (void (*)(void))Xerror, "Xerror",
           43         Xbackq, "Xbackq",
           44         Xpipefd, "Xpipefd",
           45         Xsubshell, "Xsubshell",
           46         Xdelhere, "Xdelhere",
           47         Xfor, "Xfor",
           48         Xglob, "Xglob",
           49         Xrdfn, "Xrdfn",
           50         Xsimple, "Xsimple",
           51         Xrdfn, "Xrdfn",
           52         Xqdol, "Xqdol",
           53 0};
           54 
           55 void
           56 pfnc(io *fd, thread *t)
           57 {
           58         int i;
           59         void (*fn)(void) = t->code[t->pc].f;
           60         list *a;
           61         pfmt(fd, "pid %d cycle %p %d ", getpid(), t->code, t->pc);
           62         for(i = 0;fname[i].f;i++) if(fname[i].f==fn){
           63                 pstr(fd, fname[i].name);
           64                 break;
           65         }
           66         if(!fname[i].f)
           67                 pfmt(fd, "%p", fn);
           68         for(a = t->argv;a;a = a->next) pfmt(fd, " (%v)", a->words);
           69         pchr(fd, '\n');
           70         flush(fd);
           71 }