10 initfilt(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf, char *type, char *cmd, int docopy)
18 fprint(2, "can only view one %s file at a time\n", type);
22 fprint(2, "converting from %s to postscript...\n", type);
26 fprint(2, "pipe fails: %r\n");
30 p[0] = open("/dev/null", ORDWR);
31 p[1] = open("/dev/null", ORDWR);
34 ofd = opentemp("/tmp/pagecvtXXXXXXXXX");
37 fprint(2, "fork fails: %r\n");
42 write(p[1], buf, nbuf);
44 while((n = Bread(b, xbuf, sizeof xbuf)) > 0)
47 while((n = read(stdinfd, xbuf, sizeof xbuf)) > 0)
57 /* stderr shines through */
59 fprint(2, "Execing '%s'\n", cmd);
60 execlp("rc", "rc", "-c", cmd, nil);
67 b = emalloc(sizeof(Biobuf));
70 return initps(b, argc, argv, nil, 0);
74 initdvi(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf)
82 * Stupid DVIPS won't take standard input.
84 if(b == nil){ /* standard input; spool to disk (ouch) */
85 fd = spooltodisk(buf, nbuf, &name);
86 sprint(fdbuf, "/dev/fd/%d", fd);
87 b = Bopen(fdbuf, OREAD);
89 fprint(2, "cannot open disk spool file\n");
96 snprint(cmd, sizeof cmd, "dvips -Pps -r0 -q1 -f1 '%s'", argv[0]);
97 return initfilt(b, argc, argv, buf, nbuf, "dvi", cmd, 0);
101 inittroff(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf)
103 return initfilt(b, argc, argv, buf, nbuf, "troff", "lp -dstdout", 1);
107 initmsdoc(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf)
109 return initfilt(b, argc, argv, buf, nbuf, "microsoft office", "doc2ps", 1);