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