diff options
Diffstat (limited to 'server/src/macrotool.cc')
-rw-r--r-- | server/src/macrotool.cc | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/server/src/macrotool.cc b/server/src/macrotool.cc new file mode 100644 index 0000000..46fbc24 --- /dev/null +++ b/server/src/macrotool.cc @@ -0,0 +1,157 @@ +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ +/* vim: set et sw=2 ts=2: */ +/*************************************************************************** + * macrotool.cc + * + * Mon Jul 6 08:25:28 CEST 2009 + * Copyright 2009 Bent Bisballe Nyeng + * deva@aasimon.org + ****************************************************************************/ + +/* + * This file is part of Pracro. + * + * Pracro is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * Pracro is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Pracro; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. + */ +// For ETC +#include <config.h> + +// For getopt_long and friends +#include <getopt.h> + +#include "configurationparser.h" +#include "configuration.h" + +#include "debug.h" + +#include "macrotool_dump.h" + +static const char version_str[] = +"Pracro server v" VERSION "\n" +; + +static const char copyright_str[] = +"Copyright (C) 2006-2009 Bent Bisballe Nyeng - Aasimon.org.\n" +"This is free software. You may redistribute copies of it under the terms of\n" +"the GNU General Public License <http://www.gnu.org/licenses/gpl.html>.\n" +"There is NO WARRANTY, to the extent permitted by law.\n" +"\n" +"Written by Bent Bisballe Nyeng (deva@aasimon.org)\n" +; + +static const char usage_str[] = +"Usage: %s [options] command\n" +"Options:\n" +" -c, --config file Read configfile from 'file'\n" +" -x, --xml-basedir d Use 'd' as basedir for finding template- and macro-files (default "XML").\n" +" -v, --version Print version information and exit.\n" +" -h, --help Print this message and exit.\n" +" -D, --debug ddd Enable debug messages on 'ddd'; see documentation for details\n" +"\n" +"Commands:\n" +" dump entity Dumps 'entity' to screen ('dump help' to see list of entities).\n" +; + +ConfigurationParser *configparser = NULL; + +int main(int argc, char *argv[]) +{ + int c; + char *configfile = NULL; + char *xml_basedir = NULL; + char *debugstr = NULL; + + pracro_debug_init(); + + int option_index = 0; + while(1) { + static struct option long_options[] = { + {"config", required_argument, 0, 'c'}, + {"help", no_argument, 0, 'h'}, + {"version", no_argument, 0, 'v'}, + {"xml-basedir", required_argument, 0, 'x'}, + {"debug", required_argument, 0, 'D'}, + {0, 0, 0, 0} + }; + + c = getopt_long (argc, argv, "D:hvc:x:", long_options, &option_index); + + if (c == -1) + break; + + switch(c) { + case 'c': + configfile = strdup(optarg); + break; + + case 'x': + xml_basedir = strdup(optarg); + break; + + case 'D': + debugstr = strdup(optarg); + break; + + case '?': + case 'h': + printf(version_str); + printf(usage_str, argv[0]); + return 0; + + case 'v': + printf(version_str); + printf(copyright_str); + return 0; + + default: + break; + } + } + + if(optind >= argc) { + fprintf(stderr, "Missing command\n"); + printf(usage_str, argv[0]); + exit(EXIT_FAILURE); + } + + std::string command = argv[optind]; + + if(debugstr) { + pracro_debug_parse(debugstr); + } + + // Load config + if(configfile) configparser = new ConfigurationParser(configfile); + else configparser = new ConfigurationParser(ETC"/pracrod.conf"); + + if(xml_basedir) { + Conf::xml_basedir = xml_basedir; + } + + if(command == "dump") { + optind++; + if(optind >= argc) { + fprintf(stderr, "Missing command parameter\n"); + printf(usage_str, argv[0]); + exit(EXIT_FAILURE); + } + macrotool_dump(argv[optind]); + } + + // Clean up + if(configfile) free(configfile); + + return 0; +} |