xref: /plan9/sys/src/cmd/rc/pfnc.c (revision 4e3613ab15c331a9ada113286cc0f2a35bc0373d)
13e12c5d1SDavid du Colombier #include "rc.h"
23e12c5d1SDavid du Colombier #include "exec.h"
33e12c5d1SDavid du Colombier #include "io.h"
43e12c5d1SDavid du Colombier #include "fns.h"
5*4e3613abSDavid du Colombier 
63e12c5d1SDavid du Colombier struct{
73e12c5d1SDavid du Colombier 	void	(*f)(void);
83e12c5d1SDavid du Colombier 	char	*name;
93e12c5d1SDavid du Colombier } fname[] = {
103e12c5d1SDavid du Colombier 	Xappend, "Xappend",
11*4e3613abSDavid du Colombier 	Xassign, "Xassign",
123e12c5d1SDavid du Colombier 	Xasync, "Xasync",
13*4e3613abSDavid du Colombier 	Xbackq, "Xbackq",
143e12c5d1SDavid du Colombier 	Xbang, "Xbang",
15*4e3613abSDavid du Colombier 	Xcase, "Xcase",
163e12c5d1SDavid du Colombier 	Xclose, "Xclose",
17*4e3613abSDavid du Colombier 	Xconc, "Xconc",
18*4e3613abSDavid du Colombier 	Xcount, "Xcount",
19*4e3613abSDavid du Colombier 	Xdelfn, "Xdelfn",
20*4e3613abSDavid du Colombier 	Xdelhere, "Xdelhere",
21*4e3613abSDavid du Colombier 	Xdol, "Xdol",
223e12c5d1SDavid du Colombier 	Xdup, "Xdup",
23219b2ee8SDavid du Colombier 	Xeflag, "Xeflag",
24*4e3613abSDavid du Colombier 	(void (*)(void))Xerror, "Xerror",
253e12c5d1SDavid du Colombier 	Xexit, "Xexit",
263e12c5d1SDavid du Colombier 	Xfalse, "Xfalse",
27*4e3613abSDavid du Colombier 	Xfn, "Xfn",
28*4e3613abSDavid du Colombier 	Xfor, "Xfor",
29*4e3613abSDavid du Colombier 	Xglob, "Xglob",
30*4e3613abSDavid du Colombier 	Xif, "Xif",
313e12c5d1SDavid du Colombier 	Xifnot, "Xifnot",
323e12c5d1SDavid du Colombier 	Xjump, "Xjump",
33*4e3613abSDavid du Colombier 	Xlocal, "Xlocal",
343e12c5d1SDavid du Colombier 	Xmark, "Xmark",
35*4e3613abSDavid du Colombier 	Xmatch, "Xmatch",
36*4e3613abSDavid du Colombier 	Xpipe, "Xpipe",
37*4e3613abSDavid du Colombier 	Xpipefd, "Xpipefd",
38*4e3613abSDavid du Colombier 	Xpipewait, "Xpipewait",
393e12c5d1SDavid du Colombier 	Xpopm, "Xpopm",
40*4e3613abSDavid du Colombier 	Xpopredir, "Xpopredir",
41*4e3613abSDavid du Colombier 	Xqdol, "Xqdol",
42*4e3613abSDavid du Colombier 	Xrdcmds, "Xrdcmds",
43*4e3613abSDavid du Colombier 	Xrdfn, "Xrdfn",
44119a69faSDavid du Colombier 	Xrdwr, "Xrdwr",
453e12c5d1SDavid du Colombier 	Xread, "Xread",
463e12c5d1SDavid du Colombier 	Xreturn, "Xreturn",
47*4e3613abSDavid du Colombier 	Xsimple, "Xsimple",
48*4e3613abSDavid du Colombier 	Xsub, "Xsub",
49*4e3613abSDavid du Colombier 	Xsubshell, "Xsubshell",
503e12c5d1SDavid du Colombier 	Xtrue, "Xtrue",
51*4e3613abSDavid du Colombier 	Xunlocal, "Xunlocal",
523e12c5d1SDavid du Colombier 	Xwastrue, "Xwastrue",
533e12c5d1SDavid du Colombier 	Xword, "Xword",
543e12c5d1SDavid du Colombier 	Xwrite, "Xwrite",
55*4e3613abSDavid du Colombier 	0
56*4e3613abSDavid du Colombier };
57dc5a79c1SDavid du Colombier 
58dc5a79c1SDavid du Colombier void
pfnc(io * fd,thread * t)59dc5a79c1SDavid du Colombier pfnc(io *fd, thread *t)
603e12c5d1SDavid du Colombier {
613e12c5d1SDavid du Colombier 	int i;
623e12c5d1SDavid du Colombier 	void (*fn)(void) = t->code[t->pc].f;
633e12c5d1SDavid du Colombier 	list *a;
64*4e3613abSDavid du Colombier 
653e12c5d1SDavid du Colombier 	pfmt(fd, "pid %d cycle %p %d ", getpid(), t->code, t->pc);
66*4e3613abSDavid du Colombier 	for (i = 0; fname[i].f; i++)
67*4e3613abSDavid du Colombier 		if (fname[i].f == fn) {
683e12c5d1SDavid du Colombier 			pstr(fd, fname[i].name);
693e12c5d1SDavid du Colombier 			break;
703e12c5d1SDavid du Colombier 		}
71dc5a79c1SDavid du Colombier 	if (!fname[i].f)
72dc5a79c1SDavid du Colombier 		pfmt(fd, "%p", fn);
73*4e3613abSDavid du Colombier 	for (a = t->argv; a; a = a->next)
74*4e3613abSDavid du Colombier 		pfmt(fd, " (%v)", a->words);
753e12c5d1SDavid du Colombier 	pchr(fd, '\n');
763e12c5d1SDavid du Colombier 	flush(fd);
773e12c5d1SDavid du Colombier }
78