Annotation of docbook2mdoc/main.c, Revision 1.4
1.4 ! schwarze 1: /* $Id: main.c,v 1.3 2019/03/28 12:21:10 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.1 schwarze 78: return 1;
79: }
1.4 ! schwarze 80: tree = parse_file(parser, fd, fname);
! 81: rc = tree->flags & TREE_FAIL ? 1 : 0;
1.1 schwarze 82:
1.4 ! schwarze 83: /* Format. */
1.1 schwarze 84:
1.4 ! schwarze 85: if (tree->root != NULL) {
! 86: if (rc)
! 87: fputc('\n', stderr);
! 88: ptree_print(tree);
! 89: if (rc)
! 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);
98: return 1;
99: }
CVSweb