Annotation of docbook2mdoc/main.c, Revision 1.5
1.5 ! schwarze 1: /* $Id: main.c,v 1.4 2019/04/08 22:47:34 schwarze Exp $ */
1.1 schwarze 2: /*
3: * Copyright (c) 2014 Kristaps Dzonsons <kristaps@bsd.lv>
4: * Copyright (c) 2019 Ingo Schwarze <schwarze@openbsd.org>
5: *
6: * Permission to use, copy, modify, and distribute this software for any
7: * purpose with or without fee is hereby granted, provided that the above
8: * copyright notice and this permission notice appear in all copies.
9: *
10: * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES
11: * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
12: * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR
13: * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
14: * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
15: * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
16: * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
17: */
18: #include <getopt.h>
19: #include <stdio.h>
20: #include <string.h>
21: #include <unistd.h>
22:
23: #include "node.h"
24: #include "parse.h"
25: #include "format.h"
26:
27: /*
28: * The steering function of the docbook2mdoc(1) program.
29: */
30:
31: int
32: main(int argc, char *argv[])
33: {
34: struct parse *parser;
35: struct ptree *tree;
36: const char *progname;
37: const char *fname;
38: int ch, fd, rc, warn;
39:
40: if ((progname = strrchr(argv[0], '/')) == NULL)
41: progname = argv[0];
42: else
43: progname++;
44:
45: warn = 0;
46: while ((ch = getopt(argc, argv, "W")) != -1) {
47: switch (ch) {
48: case 'W':
49: warn = 1;
50: break;
51: default:
52: goto usage;
53: }
54: }
55: argc -= optind;
56: argv += optind;
57:
58: /*
59: * Argument processing:
60: * Open file or use standard input.
61: */
62:
63: if (argc > 1) {
64: fprintf(stderr, "%s: Too many arguments\n", argv[1]);
65: goto usage;
1.4 schwarze 66: } else if (argc == 1) {
67: fname = argv[0];
68: fd = -1;
69: } else {
70: fname = "<stdin>";
71: fd = STDIN_FILENO;
72: }
1.1 schwarze 73:
1.4 schwarze 74: /* Parse. */
1.1 schwarze 75:
1.4 schwarze 76: if ((parser = parse_alloc(warn)) == NULL) {
77: perror(NULL);
1.5 ! schwarze 78: return 6;
1.1 schwarze 79: }
1.4 schwarze 80: tree = parse_file(parser, fd, fname);
1.5 ! schwarze 81: rc = tree->flags & TREE_ERROR ? 3 : tree->flags & TREE_WARN ? 2 : 0;
1.1 schwarze 82:
1.4 schwarze 83: /* Format. */
1.1 schwarze 84:
1.4 schwarze 85: if (tree->root != NULL) {
1.5 ! schwarze 86: if (rc > 2)
1.4 schwarze 87: fputc('\n', stderr);
88: ptree_print(tree);
1.5 ! schwarze 89: if (rc > 2)
1.4 schwarze 90: fputs("\nThe output may be incomplete, see the "
91: "parse error reported above.\n\n", stderr);
92: }
93: parse_free(parser);
1.1 schwarze 94: return rc;
95:
96: usage:
97: fprintf(stderr, "usage: %s [-W] [input_filename]\n", progname);
1.5 ! schwarze 98: return 5;
1.1 schwarze 99: }
CVSweb