xref: /plan9/sys/src/cmd/rc/pfnc.c (revision 219b2ee8daee37f4aad58d63f21287faa8e4ffdc)
13e12c5d1SDavid du Colombier #include "rc.h"
23e12c5d1SDavid du Colombier #include "exec.h"
33e12c5d1SDavid du Colombier #include "io.h"
43e12c5d1SDavid du Colombier #include "fns.h"
53e12c5d1SDavid du Colombier struct{
63e12c5d1SDavid du Colombier 	void (*f)(void);
73e12c5d1SDavid du Colombier 	char *name;
83e12c5d1SDavid du Colombier }fname[]={
93e12c5d1SDavid du Colombier 	Xappend, "Xappend",
103e12c5d1SDavid du Colombier 	Xasync, "Xasync",
113e12c5d1SDavid du Colombier 	Xbang, "Xbang",
123e12c5d1SDavid du Colombier 	Xclose, "Xclose",
133e12c5d1SDavid du Colombier 	Xdup, "Xdup",
14*219b2ee8SDavid du Colombier 	Xeflag, "Xeflag",
153e12c5d1SDavid du Colombier 	Xexit, "Xexit",
163e12c5d1SDavid du Colombier 	Xfalse, "Xfalse",
173e12c5d1SDavid du Colombier 	Xifnot, "Xifnot",
183e12c5d1SDavid du Colombier 	Xjump, "Xjump",
193e12c5d1SDavid du Colombier 	Xmark, "Xmark",
203e12c5d1SDavid du Colombier 	Xpopm, "Xpopm",
213e12c5d1SDavid du Colombier 	Xread, "Xread",
223e12c5d1SDavid du Colombier 	Xreturn, "Xreturn",
233e12c5d1SDavid du Colombier 	Xtrue, "Xtrue",
243e12c5d1SDavid du Colombier 	Xif, "Xif",
253e12c5d1SDavid du Colombier 	Xwastrue, "Xwastrue",
263e12c5d1SDavid du Colombier 	Xword, "Xword",
273e12c5d1SDavid du Colombier 	Xwrite, "Xwrite",
283e12c5d1SDavid du Colombier 	Xmatch, "Xmatch",
293e12c5d1SDavid du Colombier 	Xcase, "Xcase",
303e12c5d1SDavid du Colombier 	Xconc, "Xconc",
313e12c5d1SDavid du Colombier 	Xassign, "Xassign",
323e12c5d1SDavid du Colombier 	Xdol, "Xdol",
333e12c5d1SDavid du Colombier 	Xcount, "Xcount",
343e12c5d1SDavid du Colombier 	Xlocal, "Xlocal",
353e12c5d1SDavid du Colombier 	Xunlocal, "Xunlocal",
363e12c5d1SDavid du Colombier 	Xfn, "Xfn",
373e12c5d1SDavid du Colombier 	Xdelfn, "Xdelfn",
383e12c5d1SDavid du Colombier 	Xpipe, "Xpipe",
393e12c5d1SDavid du Colombier 	Xpipewait, "Xpipewait",
403e12c5d1SDavid du Colombier 	Xrdcmds, "Xrdcmds",
413e12c5d1SDavid du Colombier 	(void (*)(void))Xerror, "Xerror",
423e12c5d1SDavid du Colombier 	Xbackq, "Xbackq",
433e12c5d1SDavid du Colombier 	Xpipefd, "Xpipefd",
443e12c5d1SDavid du Colombier 	Xsubshell, "Xsubshell",
453e12c5d1SDavid du Colombier 	Xdelhere, "Xdelhere",
463e12c5d1SDavid du Colombier 	Xfor, "Xfor",
473e12c5d1SDavid du Colombier 	Xglob, "Xglob",
483e12c5d1SDavid du Colombier 	Xrdfn, "Xrdfn",
493e12c5d1SDavid du Colombier 	Xsimple, "Xsimple",
503e12c5d1SDavid du Colombier 	Xrdfn, "Xrdfn",
513e12c5d1SDavid du Colombier 	Xqdol, "Xqdol",
523e12c5d1SDavid du Colombier 0};
533e12c5d1SDavid du Colombier void pfnc(io *fd, thread *t)
543e12c5d1SDavid du Colombier {
553e12c5d1SDavid du Colombier 	int i;
563e12c5d1SDavid du Colombier 	void (*fn)(void)=t->code[t->pc].f;
573e12c5d1SDavid du Colombier 	list *a;
583e12c5d1SDavid du Colombier 	pfmt(fd, "pid %d cycle %p %d ", getpid(), t->code, t->pc);
593e12c5d1SDavid du Colombier 	for(i=0;fname[i].f;i++) if(fname[i].f==fn){
603e12c5d1SDavid du Colombier 		pstr(fd, fname[i].name);
613e12c5d1SDavid du Colombier 		break;
623e12c5d1SDavid du Colombier 	}
633e12c5d1SDavid du Colombier 	if(!fname[i].f) pfmt(fd, "%p", fn);
643e12c5d1SDavid du Colombier 	for(a=t->argv;a;a=a->next) pfmt(fd, " (%v)", a->words);
653e12c5d1SDavid du Colombier 	pchr(fd, '\n');
663e12c5d1SDavid du Colombier 	flush(fd);
673e12c5d1SDavid du Colombier }
68