diff options
author | Marc Laukien <marc@zeroc.com> | 2001-07-19 22:14:34 +0000 |
---|---|---|
committer | Marc Laukien <marc@zeroc.com> | 2001-07-19 22:14:34 +0000 |
commit | 032f424df7f4dec8ab18cc21f865bddad38c4f50 (patch) | |
tree | 2f6e777d7cd3ee28df8e02e8dc23118110fba70d /cpp/src/slice2docbook/Main.cpp | |
parent | error checking (diff) | |
download | ice-032f424df7f4dec8ab18cc21f865bddad38c4f50.tar.bz2 ice-032f424df7f4dec8ab18cc21f865bddad38c4f50.tar.xz ice-032f424df7f4dec8ab18cc21f865bddad38c4f50.zip |
started with slice2docbook; removed slice2html
Diffstat (limited to 'cpp/src/slice2docbook/Main.cpp')
-rw-r--r-- | cpp/src/slice2docbook/Main.cpp | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/cpp/src/slice2docbook/Main.cpp b/cpp/src/slice2docbook/Main.cpp new file mode 100644 index 00000000000..559e0d99bfb --- /dev/null +++ b/cpp/src/slice2docbook/Main.cpp @@ -0,0 +1,164 @@ +// ********************************************************************** +// +// Copyright (c) 2001 +// MutableRealms, Inc. +// Huntsville, AL, USA +// +// All Rights Reserved +// +// ********************************************************************** + +#include <Gen.h> +#include <fstream> + +using namespace std; +using namespace Slice; + +void +usage(const char* n) +{ + cerr << "Usage: " << n << " [options] slice-files ...\n"; + cerr << +"Options:\n" +"-h, --help Show this message.\n" +"-DNAME Define NAME as 1.\n" +"-DNAME=DEF Define NAME as DEF.\n" +"-UNAME Remove any definition for NAME.\n" +"-IDIR Put DIR in the include file search path.\n" +"-d, --debug Print debug messages.\n" + ; +} + +int +main(int argc, char* argv[]) +{ + string cpp("cpp -C"); + vector<string> includePaths; + bool debug = false; + + int idx = 1; + while(idx < argc) + { + if(strncmp(argv[idx], "-I", 2) == 0) + { + cpp += ' '; + cpp += argv[idx]; + + string path = argv[idx] + 2; + if(path.length()) + includePaths.push_back(path); + + for(int i = idx ; i + 1 < argc ; ++i) + argv[i] = argv[i + 1]; + --argc; + } + else if(strncmp(argv[idx], "-D", 2) == 0 || + strncmp(argv[idx], "-U", 2) == 0) + { + cpp += ' '; + cpp += argv[idx]; + + for(int i = idx ; i + 1 < argc ; ++i) + argv[i] = argv[i + 1]; + --argc; + } + else if(strcmp(argv[idx], "-h") == 0 || + strcmp(argv[idx], "--help") == 0) + { + usage(argv[0]); + return EXIT_SUCCESS; + } + 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] << ": error: unknown option `" << argv[idx] << "'" + << endl; + usage(argv[0]); + return EXIT_FAILURE; + } + else + ++idx; + } + + if(argc < 2) + { + cerr << argv[0] << ": error: no input file" << endl; + usage(argv[0]); + return EXIT_FAILURE; + } + + int status = EXIT_SUCCESS; + + for(idx = 1 ; idx < argc ; ++idx) + { + string base(argv[idx]); + string suffix; + string::size_type pos = base.rfind('.'); + if(pos != string::npos) + { + suffix = base.substr(pos); + transform(suffix.begin(), suffix.end(), suffix.begin(), tolower); + } + if(suffix != ".ice") + { + cerr << argv[0] << ": input files must end with `.ice'" + << endl; + return EXIT_FAILURE; + } + base.erase(pos); + + ifstream test(argv[idx]); + if(!test) + { + cerr << argv[0] << ": can't open `" << argv[idx] + << "' for reading: " << strerror(errno) << endl; + return EXIT_FAILURE; + } + test.close(); + + string cmd = cpp + " " + argv[idx]; +#ifdef WIN32 + FILE* cppHandle = _popen(cmd.c_str(), "r"); +#else + FILE* cppHandle = popen(cmd.c_str(), "r"); +#endif + if(cppHandle == NULL) + { + cerr << argv[0] << ": can't run C++ preprocessor: " + << strerror(errno) << endl; + return EXIT_FAILURE; + } + + Unit_ptr unit = Unit::createUnit(true, true); + int parseStatus = unit -> parse(cppHandle, debug); + +#ifdef WIN32 + _pclose(cppHandle); +#else + pclose(cppHandle); +#endif + + if(parseStatus == EXIT_FAILURE) + { + status = EXIT_FAILURE; + } + else + { + Gen gen(argv[0]); + if(!gen) + return EXIT_FAILURE; + gen.generate(unit); + } + + unit -> destroy(); + } + + return status; +} |