9base

revived minimalist port of Plan 9 userland to Unix
git clone git://git.suckless.org/9base
Log | Files | Refs | README | 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 }