Blob


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