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