Blame


1 84114f06 2004-04-19 devnull /*
2 84114f06 2004-04-19 devnull *
3 84114f06 2004-04-19 devnull * debugger
4 84114f06 2004-04-19 devnull *
5 84114f06 2004-04-19 devnull */
6 84114f06 2004-04-19 devnull
7 84114f06 2004-04-19 devnull #include "defs.h"
8 84114f06 2004-04-19 devnull #include "fns.h"
9 84114f06 2004-04-19 devnull
10 84114f06 2004-04-19 devnull int printcol = 0;
11 84114f06 2004-04-19 devnull int infile = STDIN;
12 84114f06 2004-04-19 devnull int maxpos = MAXPOS;
13 84114f06 2004-04-19 devnull
14 84114f06 2004-04-19 devnull Biobuf bstdout;
15 84114f06 2004-04-19 devnull
16 84114f06 2004-04-19 devnull void
17 84114f06 2004-04-19 devnull printc(int c)
18 84114f06 2004-04-19 devnull {
19 84114f06 2004-04-19 devnull dprint("%c", c);
20 84114f06 2004-04-19 devnull }
21 84114f06 2004-04-19 devnull
22 84114f06 2004-04-19 devnull /* was move to next f1-sized tab stop; now just print a tab */
23 84114f06 2004-04-19 devnull int
24 84114f06 2004-04-19 devnull tconv(Fmt *f)
25 84114f06 2004-04-19 devnull {
26 84114f06 2004-04-19 devnull return fmtstrcpy(f, "\t");
27 84114f06 2004-04-19 devnull }
28 84114f06 2004-04-19 devnull
29 84114f06 2004-04-19 devnull void
30 84114f06 2004-04-19 devnull flushbuf(void)
31 84114f06 2004-04-19 devnull {
32 84114f06 2004-04-19 devnull if (printcol != 0)
33 84114f06 2004-04-19 devnull printc(EOR);
34 84114f06 2004-04-19 devnull }
35 84114f06 2004-04-19 devnull
36 84114f06 2004-04-19 devnull void
37 84114f06 2004-04-19 devnull prints(char *s)
38 84114f06 2004-04-19 devnull {
39 84114f06 2004-04-19 devnull dprint("%s",s);
40 84114f06 2004-04-19 devnull }
41 84114f06 2004-04-19 devnull
42 84114f06 2004-04-19 devnull void
43 84114f06 2004-04-19 devnull newline(void)
44 84114f06 2004-04-19 devnull {
45 84114f06 2004-04-19 devnull printc(EOR);
46 84114f06 2004-04-19 devnull }
47 84114f06 2004-04-19 devnull
48 84114f06 2004-04-19 devnull #define MAXIFD 5
49 84114f06 2004-04-19 devnull struct {
50 84114f06 2004-04-19 devnull int fd;
51 84114f06 2004-04-19 devnull int r9;
52 84114f06 2004-04-19 devnull } istack[MAXIFD];
53 84114f06 2004-04-19 devnull int ifiledepth;
54 84114f06 2004-04-19 devnull
55 84114f06 2004-04-19 devnull void
56 84114f06 2004-04-19 devnull iclose(int stack, int err)
57 84114f06 2004-04-19 devnull {
58 84114f06 2004-04-19 devnull if (err) {
59 84114f06 2004-04-19 devnull if (infile) {
60 84114f06 2004-04-19 devnull close(infile);
61 84114f06 2004-04-19 devnull infile=STDIN;
62 84114f06 2004-04-19 devnull }
63 84114f06 2004-04-19 devnull while (--ifiledepth >= 0)
64 84114f06 2004-04-19 devnull if (istack[ifiledepth].fd)
65 84114f06 2004-04-19 devnull close(istack[ifiledepth].fd);
66 84114f06 2004-04-19 devnull ifiledepth = 0;
67 84114f06 2004-04-19 devnull } else if (stack == 0) {
68 84114f06 2004-04-19 devnull if (infile) {
69 84114f06 2004-04-19 devnull close(infile);
70 84114f06 2004-04-19 devnull infile=STDIN;
71 84114f06 2004-04-19 devnull }
72 84114f06 2004-04-19 devnull } else if (stack > 0) {
73 84114f06 2004-04-19 devnull if (ifiledepth >= MAXIFD)
74 84114f06 2004-04-19 devnull error("$<< nested too deeply");
75 84114f06 2004-04-19 devnull istack[ifiledepth].fd = infile;
76 84114f06 2004-04-19 devnull ifiledepth++;
77 84114f06 2004-04-19 devnull infile = STDIN;
78 84114f06 2004-04-19 devnull } else {
79 84114f06 2004-04-19 devnull if (infile) {
80 fa325e9b 2020-01-10 cross close(infile);
81 84114f06 2004-04-19 devnull infile=STDIN;
82 84114f06 2004-04-19 devnull }
83 84114f06 2004-04-19 devnull if (ifiledepth > 0) {
84 84114f06 2004-04-19 devnull infile = istack[--ifiledepth].fd;
85 84114f06 2004-04-19 devnull }
86 84114f06 2004-04-19 devnull }
87 84114f06 2004-04-19 devnull }
88 84114f06 2004-04-19 devnull
89 84114f06 2004-04-19 devnull void
90 84114f06 2004-04-19 devnull oclose(void)
91 84114f06 2004-04-19 devnull {
92 84114f06 2004-04-19 devnull flushbuf();
93 84114f06 2004-04-19 devnull Bterm(&bstdout);
94 84114f06 2004-04-19 devnull Binit(&bstdout, 1, OWRITE);
95 84114f06 2004-04-19 devnull }
96 84114f06 2004-04-19 devnull
97 84114f06 2004-04-19 devnull void
98 84114f06 2004-04-19 devnull redirout(char *file)
99 84114f06 2004-04-19 devnull {
100 84114f06 2004-04-19 devnull int fd;
101 84114f06 2004-04-19 devnull
102 84114f06 2004-04-19 devnull if (file == 0){
103 84114f06 2004-04-19 devnull oclose();
104 84114f06 2004-04-19 devnull return;
105 84114f06 2004-04-19 devnull }
106 84114f06 2004-04-19 devnull flushbuf();
107 84114f06 2004-04-19 devnull if ((fd = open(file, 1)) >= 0)
108 84114f06 2004-04-19 devnull seek(fd, 0L, 2);
109 84114f06 2004-04-19 devnull else if ((fd = create(file, 1, 0666)) < 0)
110 84114f06 2004-04-19 devnull error("cannot create");
111 84114f06 2004-04-19 devnull Bterm(&bstdout);
112 84114f06 2004-04-19 devnull Binit(&bstdout, fd, OWRITE);
113 84114f06 2004-04-19 devnull }
114 84114f06 2004-04-19 devnull
115 84114f06 2004-04-19 devnull void
116 84114f06 2004-04-19 devnull endline(void)
117 84114f06 2004-04-19 devnull {
118 84114f06 2004-04-19 devnull
119 84114f06 2004-04-19 devnull if (maxpos <= printcol)
120 84114f06 2004-04-19 devnull newline();
121 84114f06 2004-04-19 devnull }
122 84114f06 2004-04-19 devnull
123 84114f06 2004-04-19 devnull void
124 84114f06 2004-04-19 devnull flush(void)
125 84114f06 2004-04-19 devnull {
126 84114f06 2004-04-19 devnull Bflush(&bstdout);
127 84114f06 2004-04-19 devnull }
128 84114f06 2004-04-19 devnull
129 84114f06 2004-04-19 devnull int
130 84114f06 2004-04-19 devnull dprint(char *fmt, ...)
131 84114f06 2004-04-19 devnull {
132 84114f06 2004-04-19 devnull int n, w;
133 84114f06 2004-04-19 devnull char *p;
134 84114f06 2004-04-19 devnull char buf[4096];
135 84114f06 2004-04-19 devnull Rune r;
136 84114f06 2004-04-19 devnull va_list arg;
137 84114f06 2004-04-19 devnull
138 84114f06 2004-04-19 devnull if(mkfault)
139 84114f06 2004-04-19 devnull return -1;
140 84114f06 2004-04-19 devnull va_start(arg, fmt);
141 84114f06 2004-04-19 devnull n = vseprint(buf, buf+sizeof buf, fmt, arg) - buf;
142 84114f06 2004-04-19 devnull va_end(arg);
143 84114f06 2004-04-19 devnull Bwrite(&bstdout, buf, n);
144 84114f06 2004-04-19 devnull for(p=buf; *p; p+=w){
145 84114f06 2004-04-19 devnull w = chartorune(&r, p);
146 84114f06 2004-04-19 devnull if(r == '\n')
147 84114f06 2004-04-19 devnull printcol = 0;
148 84114f06 2004-04-19 devnull else
149 84114f06 2004-04-19 devnull printcol++;
150 84114f06 2004-04-19 devnull }
151 84114f06 2004-04-19 devnull return n;
152 84114f06 2004-04-19 devnull }
153 84114f06 2004-04-19 devnull
154 84114f06 2004-04-19 devnull void
155 84114f06 2004-04-19 devnull outputinit(void)
156 84114f06 2004-04-19 devnull {
157 84114f06 2004-04-19 devnull Binit(&bstdout, 1, OWRITE);
158 84114f06 2004-04-19 devnull fmtinstall('t', tconv);
159 84114f06 2004-04-19 devnull }