]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/htmlfmt/main.c
webfs(4): document -d and -D flags
[plan9front.git] / sys / src / cmd / htmlfmt / main.c
1 #include <u.h>
2 #include <libc.h>
3 #include <bio.h>
4 #include <draw.h>
5 #include <html.h>
6 #include "dat.h"
7
8 char *url = "";
9 int aflag;
10 int width = 70;
11 char *defcharset = "latin1";
12
13 int
14 uhtml(int fd)
15 {
16         int p[2];
17
18         if(pipe(p) < 0)
19                 return fd;
20         switch(fork()){
21         case -1:
22                 break;
23         case 0:
24                 dup(fd, 0);
25                 dup(p[1], 1);
26                 close(p[1]);
27                 close(p[0]);
28                 execl("/bin/uhtml", "uhtml", "-c", defcharset, nil);
29                 execl("/bin/cat", "cat", nil);
30                 exits("exec");
31         default:
32                 dup(p[0], fd);
33                 break;
34         }
35         close(p[0]);
36         close(p[1]);
37         return fd;
38 }
39
40 void
41 usage(void)
42 {
43         fprint(2, "usage: htmlfmt [-c charset] [-u URL] [-a] [-l length] [file ...]\n");
44         exits("usage");
45 }
46
47 void
48 main(int argc, char *argv[])
49 {
50         int i, fd;
51         char *err, *file;
52         char errbuf[ERRMAX];
53
54         ARGBEGIN{
55         case 'a':
56                 aflag++;
57                 break;
58         case 'c':
59                 defcharset = EARGF(usage());
60                 break;
61         case 'l': case 'w':
62                 err = EARGF(usage());
63                 width = atoi(err);
64                 if(width <= 0)
65                         usage();
66                 break;
67         case 'u':
68                 url = EARGF(usage());
69                 aflag++;
70                 break;
71         default:
72                 usage();
73         }ARGEND
74
75         err = nil;
76         file = "<stdin>";
77         if(argc == 0)
78                 err = loadhtml(uhtml(0));
79         else
80                 for(i=0; err==nil && i<argc; i++){
81                         file = argv[i];
82                         fd = open(file, OREAD);
83                         if(fd < 0){
84                                 errstr(errbuf, sizeof errbuf);
85                                 err = errbuf;
86                                 break;
87                         }
88                         err = loadhtml(uhtml(fd));
89                         close(fd);
90                         if(err)
91                                 break;
92                 }
93         if(err)
94                 fprint(2, "htmlfmt: processing %s: %s\n", file, err);
95         exits(err);
96 }