/* $Id: main.c,v 1.1 2019/03/26 18:32:07 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 #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 fname = argc > 0 ? argv[0] : "-"; fd = strcmp(fname, "-") == 0 ? STDIN_FILENO : open(fname, O_RDONLY, 0); if (fd == -1) { perror(fname); return 1; } /* Parse and format. */ rc = 1; if ((parser = parse_alloc(warn)) != NULL) { if ((tree = parse_file(parser, fd, fname)) != NULL) { if ((tree->flags & TREE_FAIL) == 0) rc = 0; ptree_print(tree); pnode_unlink(tree->root); tree->root = NULL; } parse_free(parser); } else perror(NULL); if (fd != STDIN_FILENO) close(fd); return rc; usage: fprintf(stderr, "usage: %s [-W] [input_filename]\n", progname); return 1; }