diff options
author | Matthew Newhook <matthew@zeroc.com> | 2002-03-13 03:55:22 +0000 |
---|---|---|
committer | Matthew Newhook <matthew@zeroc.com> | 2002-03-13 03:55:22 +0000 |
commit | 0ac325172b7608a2fa0c366a7665940ef14c562f (patch) | |
tree | 47e65b54c6e4e870a7b3e78f032bcb88f65f96be /cpp/demo/Freeze/library/RunParser.cpp | |
parent | bug fix (diff) | |
download | ice-0ac325172b7608a2fa0c366a7665940ef14c562f.tar.bz2 ice-0ac325172b7608a2fa0c366a7665940ef14c562f.tar.xz ice-0ac325172b7608a2fa0c366a7665940ef14c562f.zip |
Initial version of library demo.
Diffstat (limited to 'cpp/demo/Freeze/library/RunParser.cpp')
-rw-r--r-- | cpp/demo/Freeze/library/RunParser.cpp | 156 |
1 files changed, 156 insertions, 0 deletions
diff --git a/cpp/demo/Freeze/library/RunParser.cpp b/cpp/demo/Freeze/library/RunParser.cpp new file mode 100644 index 00000000000..816753bb4a2 --- /dev/null +++ b/cpp/demo/Freeze/library/RunParser.cpp @@ -0,0 +1,156 @@ +// ********************************************************************** +// +// Copyright (c) 2001 +// MutableRealms, Inc. +// Huntsville, AL, USA +// +// All Rights Reserved +// +// ********************************************************************** + +#include <Ice/Ice.h> +#include <Parser.h> + +using namespace std; + +void +usage(const char* appName) +{ + cerr << "Usage: " << appName << " [options] [file...]\n"; + cerr << + "Options:\n" + "-h, --help Show this message.\n" + "-v, --version Display the Ice version.\n" + "-e COMMANDS Execute COMMANDS.\n" + "-d, --debug Print debug messages.\n" + ; +} + +int +runParser(int argc, char* argv[], const Ice::CommunicatorPtr& communicator) +{ + string commands; + bool debug = false; + + int idx = 1; + while (idx < argc) + { + if (strcmp(argv[idx], "-h") == 0 || strcmp(argv[idx], "--help") == 0) + { + usage(argv[0]); + return EXIT_SUCCESS; + } + else if (strcmp(argv[idx], "-v") == 0 || strcmp(argv[idx], "--version") == 0) + { + cout << ICE_STRING_VERSION << endl; + return EXIT_SUCCESS; + } + else if (strcmp(argv[idx], "-e") == 0) + { + if (idx + 1 >= argc) + { + cerr << argv[0] << ": argument expected for`" << argv[idx] << "'" << endl; + usage(argv[0]); + return EXIT_FAILURE; + } + + commands += argv[idx + 1]; + commands += ';'; + + for (int i = idx ; i + 2 < argc ; ++i) + { + argv[i] = argv[i + 2]; + } + argc -= 2; + } + else if (strcmp(argv[idx], "-d") == 0 || strcmp(argv[idx], "--debug") == 0) + { + debug = true; + for (int i = idx ; i + 1 < argc ; ++i) + { + argv[i] = argv[i + 1]; + } + --argc; + } + else if (argv[idx][0] == '-') + { + cerr << argv[0] << ": unknown option `" << argv[idx] << "'" << endl; + usage(argv[0]); + return EXIT_FAILURE; + } + else + { + ++idx; + } + } + + if (argc >= 2 && !commands.empty()) + { + cerr << argv[0] << ": `-e' option cannot be used if input files are given" << endl; + usage(argv[0]); + return EXIT_FAILURE; + } + + Ice::PropertiesPtr properties = communicator->getProperties(); + const char* refProperty = "Library.Library"; + string ref = properties->getProperty(refProperty); + if (ref.empty()) + { + cerr << argv[0] << ": property `" << refProperty << "' not set" << endl; + return EXIT_FAILURE; + } + + Ice::ObjectPrx base = communicator->stringToProxy(ref); + LibraryPrx phoneBook = LibraryPrx::checkedCast(base); + if (!phoneBook) + { + cerr << argv[0] << ": invalid object reference" << endl; + return EXIT_FAILURE; + } + + ParserPtr parser = Parser::createParser(communicator, phoneBook); + int status = EXIT_SUCCESS; + + if (argc < 2) // No files given + { + if (!commands.empty()) // Commands were given + { + int parseStatus = parser->parse(commands, debug); + if (parseStatus == EXIT_FAILURE) + { + status = EXIT_FAILURE; + } + } + else // No commands, let's use standard input + { + int parseStatus = parser->parse(stdin, debug); + if (parseStatus == EXIT_FAILURE) + { + status = EXIT_FAILURE; + } + } + } + else // Process files given on the command line + { + for (idx = 1 ; idx < argc ; ++idx) + { + FILE* file = fopen(argv[idx], "r"); + if (file == NULL) + { + cerr << argv[0] << ": can't open file `" << argv[idx] << "': " << strerror(errno) << endl; + return EXIT_FAILURE; + } + + int parseStatus = parser->parse(file, debug); + + fclose(file); + + if (parseStatus == EXIT_FAILURE) + { + status = EXIT_FAILURE; + } + } + } + + return status; +} |