xref: /plan9/sys/src/cmd/htmlroff/main.c (revision 426d2b71458df9b491ba6c167f699b3f1f7b0428)
1*426d2b71SDavid du Colombier /*
2*426d2b71SDavid du Colombier  * Convert troff -ms input to HTML.
3*426d2b71SDavid du Colombier  */
4*426d2b71SDavid du Colombier 
5*426d2b71SDavid du Colombier #include "a.h"
6*426d2b71SDavid du Colombier 
7*426d2b71SDavid du Colombier Biobuf	bout;
8*426d2b71SDavid du Colombier char*	tmacdir;
9*426d2b71SDavid du Colombier int		verbose;
10*426d2b71SDavid du Colombier int		utf8 = 0;
11*426d2b71SDavid du Colombier 
12*426d2b71SDavid du Colombier void
usage(void)13*426d2b71SDavid du Colombier usage(void)
14*426d2b71SDavid du Colombier {
15*426d2b71SDavid du Colombier 	fprint(2, "usage: htmlroff [-iuv] [-m mac] [-r an] [file...]\n");
16*426d2b71SDavid du Colombier 	exits("usage");
17*426d2b71SDavid du Colombier }
18*426d2b71SDavid du Colombier 
19*426d2b71SDavid du Colombier void
main(int argc,char ** argv)20*426d2b71SDavid du Colombier main(int argc, char **argv)
21*426d2b71SDavid du Colombier {
22*426d2b71SDavid du Colombier 	int i, dostdin;
23*426d2b71SDavid du Colombier 	char *p;
24*426d2b71SDavid du Colombier 	Rune *r;
25*426d2b71SDavid du Colombier 	Rune buf[2];
26*426d2b71SDavid du Colombier 
27*426d2b71SDavid du Colombier 	Binit(&bout, 1, OWRITE);
28*426d2b71SDavid du Colombier 	fmtinstall('L', linefmt);
29*426d2b71SDavid du Colombier 	quotefmtinstall();
30*426d2b71SDavid du Colombier 
31*426d2b71SDavid du Colombier 	tmacdir = "/sys/lib/tmac";
32*426d2b71SDavid du Colombier 	dostdin = 0;
33*426d2b71SDavid du Colombier 	ARGBEGIN{
34*426d2b71SDavid du Colombier 	case 'i':
35*426d2b71SDavid du Colombier 		dostdin = 1;
36*426d2b71SDavid du Colombier 		break;
37*426d2b71SDavid du Colombier 	case 'm':
38*426d2b71SDavid du Colombier 		r = erunesmprint("%s/tmac.%s", tmacdir, EARGF(usage()));
39*426d2b71SDavid du Colombier 		if(queueinputfile(r) < 0)
40*426d2b71SDavid du Colombier 			fprint(2, "%S: %r\n", r);
41*426d2b71SDavid du Colombier 		break;
42*426d2b71SDavid du Colombier 	case 'r':
43*426d2b71SDavid du Colombier 		p = EARGF(usage());
44*426d2b71SDavid du Colombier 		p += chartorune(buf, p);
45*426d2b71SDavid du Colombier 		buf[1] = 0;
46*426d2b71SDavid du Colombier 		_nr(buf, erunesmprint("%s", p+1));
47*426d2b71SDavid du Colombier 		break;
48*426d2b71SDavid du Colombier 	case 'u':
49*426d2b71SDavid du Colombier 		utf8 = 1;
50*426d2b71SDavid du Colombier 		break;
51*426d2b71SDavid du Colombier 	case 'v':
52*426d2b71SDavid du Colombier 		verbose = 1;
53*426d2b71SDavid du Colombier 		break;
54*426d2b71SDavid du Colombier 	default:
55*426d2b71SDavid du Colombier 		usage();
56*426d2b71SDavid du Colombier 	}ARGEND
57*426d2b71SDavid du Colombier 
58*426d2b71SDavid du Colombier 	for(i=0; i<argc; i++){
59*426d2b71SDavid du Colombier 		if(strcmp(argv[i], "-") == 0)
60*426d2b71SDavid du Colombier 			queuestdin();
61*426d2b71SDavid du Colombier 		else
62*426d2b71SDavid du Colombier 			queueinputfile(erunesmprint("%s", argv[i]));
63*426d2b71SDavid du Colombier 	}
64*426d2b71SDavid du Colombier 	if(argc == 0 || dostdin)
65*426d2b71SDavid du Colombier 		queuestdin();
66*426d2b71SDavid du Colombier 
67*426d2b71SDavid du Colombier 	run();
68*426d2b71SDavid du Colombier 	Bprint(&bout, "\n");
69*426d2b71SDavid du Colombier 	Bterm(&bout);
70*426d2b71SDavid du Colombier 	exits(nil);
71*426d2b71SDavid du Colombier }
72*426d2b71SDavid du Colombier 
73