/* $Id: main.c,v 1.4 2019/04/08 22:47:34 schwarze Exp $ */ /* * Copyright (c) 2014 Kristaps Dzonsons * Copyright (c) 2019 Ingo Schwarze * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above * copyright notice and this permission notice appear in all copies. * * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHORS DISCLAIM ALL WARRANTIES * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ #include #include #include #include #include "node.h" #include "parse.h" #include "format.h" /* * The steering function of the docbook2mdoc(1) program. */ int main(int argc, char *argv[]) { struct parse *parser; struct ptree *tree; const char *progname; const char *fname; int ch, fd, rc, warn; if ((progname = strrchr(argv[0], '/')) == NULL) progname = argv[0]; else progname++; warn = 0; while ((ch = getopt(argc, argv, "W")) != -1) { switch (ch) { case 'W': warn = 1; break; default: goto usage; } } argc -= optind; argv += optind; /* * Argument processing: * Open file or use standard input. */ if (argc > 1) { fprintf(stderr, "%s: Too many arguments\n", argv[1]); goto usage; } else if (argc == 1) { fname = argv[0]; fd = -1; } else { fname = ""; fd = STDIN_FILENO; } /* Parse. */ if ((parser = parse_alloc(warn)) == NULL) { perror(NULL); return 1; } tree = parse_file(parser, fd, fname); rc = tree->flags & TREE_FAIL ? 1 : 0; /* Format. */ if (tree->root != NULL) { if (rc) fputc('\n', stderr); ptree_print(tree); if (rc) fputs("\nThe output may be incomplete, see the " "parse error reported above.\n\n", stderr); } parse_free(parser); return rc; usage: fprintf(stderr, "usage: %s [-W] [input_filename]\n", progname); return 1; }