xref: /plan9/sys/src/cmd/rc/pfnc.c (revision 4e3613ab15c331a9ada113286cc0f2a35bc0373d)
1 #include "rc.h"
2 #include "exec.h"
3 #include "io.h"
4 #include "fns.h"
5 
6 struct{
7 	void	(*f)(void);
8 	char	*name;
9 } fname[] = {
10 	Xappend, "Xappend",
11 	Xassign, "Xassign",
12 	Xasync, "Xasync",
13 	Xbackq, "Xbackq",
14 	Xbang, "Xbang",
15 	Xcase, "Xcase",
16 	Xclose, "Xclose",
17 	Xconc, "Xconc",
18 	Xcount, "Xcount",
19 	Xdelfn, "Xdelfn",
20 	Xdelhere, "Xdelhere",
21 	Xdol, "Xdol",
22 	Xdup, "Xdup",
23 	Xeflag, "Xeflag",
24 	(void (*)(void))Xerror, "Xerror",
25 	Xexit, "Xexit",
26 	Xfalse, "Xfalse",
27 	Xfn, "Xfn",
28 	Xfor, "Xfor",
29 	Xglob, "Xglob",
30 	Xif, "Xif",
31 	Xifnot, "Xifnot",
32 	Xjump, "Xjump",
33 	Xlocal, "Xlocal",
34 	Xmark, "Xmark",
35 	Xmatch, "Xmatch",
36 	Xpipe, "Xpipe",
37 	Xpipefd, "Xpipefd",
38 	Xpipewait, "Xpipewait",
39 	Xpopm, "Xpopm",
40 	Xpopredir, "Xpopredir",
41 	Xqdol, "Xqdol",
42 	Xrdcmds, "Xrdcmds",
43 	Xrdfn, "Xrdfn",
44 	Xrdwr, "Xrdwr",
45 	Xread, "Xread",
46 	Xreturn, "Xreturn",
47 	Xsimple, "Xsimple",
48 	Xsub, "Xsub",
49 	Xsubshell, "Xsubshell",
50 	Xtrue, "Xtrue",
51 	Xunlocal, "Xunlocal",
52 	Xwastrue, "Xwastrue",
53 	Xword, "Xword",
54 	Xwrite, "Xwrite",
55 	0
56 };
57 
58 void
pfnc(io * fd,thread * t)59 pfnc(io *fd, thread *t)
60 {
61 	int i;
62 	void (*fn)(void) = t->code[t->pc].f;
63 	list *a;
64 
65 	pfmt(fd, "pid %d cycle %p %d ", getpid(), t->code, t->pc);
66 	for (i = 0; fname[i].f; i++)
67 		if (fname[i].f == fn) {
68 			pstr(fd, fname[i].name);
69 			break;
70 		}
71 	if (!fname[i].f)
72 		pfmt(fd, "%p", fn);
73 	for (a = t->argv; a; a = a->next)
74 		pfmt(fd, " (%v)", a->words);
75 	pchr(fd, '\n');
76 	flush(fd);
77 }
78