123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /*
- *
- * debugger
- *
- */
- #include "defs.h"
- #include "fns.h"
- int printcol = 0;
- int infile = STDIN;
- int maxpos = MAXPOS;
- Biobuf stdout;
- void
- printc(int c)
- {
- dprint("%c", c);
- }
- /* was move to next f1-sized tab stop; now just print a tab */
- int
- tconv(Fmt *f)
- {
- return fmtstrcpy(f, "\t");
- }
- void
- flushbuf(void)
- {
- if (printcol != 0)
- printc(EOR);
- }
- void
- prints(char *s)
- {
- dprint("%s",s);
- }
- void
- newline(void)
- {
- printc(EOR);
- }
- #define MAXIFD 5
- struct {
- int fd;
- int r9;
- } istack[MAXIFD];
- int ifiledepth;
- void
- iclose(int stack, int err)
- {
- if (err) {
- if (infile) {
- close(infile);
- infile=STDIN;
- }
- while (--ifiledepth >= 0)
- if (istack[ifiledepth].fd)
- close(istack[ifiledepth].fd);
- ifiledepth = 0;
- } else if (stack == 0) {
- if (infile) {
- close(infile);
- infile=STDIN;
- }
- } else if (stack > 0) {
- if (ifiledepth >= MAXIFD)
- error("$<< nested too deeply");
- istack[ifiledepth].fd = infile;
- ifiledepth++;
- infile = STDIN;
- } else {
- if (infile) {
- close(infile);
- infile=STDIN;
- }
- if (ifiledepth > 0) {
- infile = istack[--ifiledepth].fd;
- }
- }
- }
- void
- oclose(void)
- {
- flushbuf();
- Bterm(&stdout);
- Binit(&stdout, 1, OWRITE);
- }
- void
- redirout(char *file)
- {
- int fd;
- if (file == 0){
- oclose();
- return;
- }
- flushbuf();
- if ((fd = open(file, 1)) >= 0)
- seek(fd, 0L, 2);
- else if ((fd = create(file, 1, 0666)) < 0)
- error("cannot create");
- Bterm(&stdout);
- Binit(&stdout, fd, OWRITE);
- }
- void
- endline(void)
- {
- if (maxpos <= printcol)
- newline();
- }
- void
- flush(void)
- {
- Bflush(&stdout);
- }
- int
- dprint(char *fmt, ...)
- {
- int n, w;
- char *p;
- char buf[4096];
- Rune r;
- va_list arg;
- if(mkfault)
- return -1;
- va_start(arg, fmt);
- n = vseprint(buf, buf+sizeof buf, fmt, arg) - buf;
- va_end(arg);
- //Bprint(&stdout, "[%s]", fmt);
- Bwrite(&stdout, buf, n);
- for(p=buf; *p; p+=w){
- w = chartorune(&r, p);
- if(r == '\n')
- printcol = 0;
- else
- printcol++;
- }
- return n;
- }
- void
- outputinit(void)
- {
- Binit(&stdout, 1, OWRITE);
- fmtinstall('t', tconv);
- }
|