10 initfilt(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf, char *type, char *cmd, int docopy)
16 char template[] = "/tmp/pagecvtXXXXXXXXX";
19 fprint(2, "can only view one %s file at a time\n", type);
23 fprint(2, "converting from %s to postscript...\n", type);
27 fprint(2, "pipe fails: %r\n");
31 p[0] = open("/dev/null", ORDWR);
32 p[1] = open("/dev/null", ORDWR);
35 ofd = opentemp(template);
38 fprint(2, "fork fails: %r\n");
43 write(p[1], buf, nbuf);
45 while((n = Bread(b, xbuf, sizeof xbuf)) > 0)
48 while((n = read(stdinfd, xbuf, sizeof xbuf)) > 0)
58 /* stderr shines through */
60 fprint(2, "Execing '%s'\n", cmd);
61 execlp("rc", "rc", "-c", cmd, nil);
68 b = emalloc(sizeof(Biobuf));
71 return initps(b, argc, argv, nil, 0);
75 initdvi(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf)
83 * Stupid DVIPS won't take standard input.
85 if(b == nil){ /* standard input; spool to disk (ouch) */
86 fd = spooltodisk(buf, nbuf, &name);
87 sprint(fdbuf, "/dev/fd/%d", fd);
88 b = Bopen(fdbuf, OREAD);
90 fprint(2, "cannot open disk spool file\n");
97 snprint(cmd, sizeof cmd, "dvips -Pps -r0 -q1 -f1 '%s'", argv[0]);
98 return initfilt(b, argc, argv, buf, nbuf, "dvi", cmd, 0);
102 inittroff(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf)
104 return initfilt(b, argc, argv, buf, nbuf, "troff", "9 tr2post | 9 psfonts", 1);
108 initmsdoc(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf)
110 return initfilt(b, argc, argv, buf, nbuf, "microsoft office", "doc2ps", 1);