From f29300c556e541f2bf1b63ed8c6399a6c2044c8d Mon Sep 17 00:00:00 2001 From: Jan Darmochwal Date: Tue, 13 Jul 2010 17:55:06 +0200 Subject: qmake -> cmake; (mostly) cosmetic changes Switched to cmake: CMakeLists.txt in base directory use ./build.sh to build vmchooser (or mkdir -p build; cd build cmake .. && make) updated README removed fltk/ removed libxml2/ removed mesgdisp/ renamed vmchooser/ to src/ moved all header files (.h) from vmchooser/inc/ to src/ added files to repository that must have slipped the last time --- src/main.cpp | 214 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 214 insertions(+) create mode 100644 src/main.cpp (limited to 'src/main.cpp') diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000..452bb89 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,214 @@ +#include +#include "dialog.h" + +#include +#include +#include "DataEntry.h" +#include "functions.h" +#include "anyoption.h" +#include "paths.h" + +#include +#include +#include + +#include + +namespace bfs=boost::filesystem; + +using namespace std; + +// defined in readXmlDir.h +extern DataEntry* get_entry(xmlDoc * doc); + +int main(int argc, char *argv[]) { + string version = "0.0.13"; + AnyOption* opt = new AnyOption(); + char* xmlpath = NULL; + char* lsesspath = NULL; + char* dsession = NULL; + int width=0, height=0; + + //opt->setVerbose(); + opt->autoUsagePrint(false); + + opt->addUsage(""); + opt->addUsage("SessionChooser Usage: vmchooser [OPTS|image.xml]"); + opt->addUsage("\t{-d |--default=} name of session to select (part of)"); + opt->addUsage("\t{-p |--path=} path to vmware (.xml) files"); + opt->addUsage("\t{-l |--lpath=} path to linux session (.desktop) files"); + opt->addUsage("\t{-s |--size=} [widthxheight]"); + opt->addUsage("\t{-v |--version} print out version"); + opt->addUsage("\t{-h |--help} prints help"); + opt->addUsage(""); + opt->addUsage("Run with xml-file as additional argument to start image at once."); + + opt->setFlag("help",'h'); + opt->setFlag("version",'v'); + opt->setOption("default", 'd'); + opt->setOption("path", 'p'); + opt->setOption("lpath", 'l'); + opt->setOption("size",'s'); + + opt->processCommandArgs(argc, argv); + + /** HELP */ + if(opt->getFlag("help") || opt->getFlag('h')) { + opt->printUsage(); + return 0; + } + + /** + * XML - PATH + * + * 1. read from stage3.conf + * 2. option -p + * 3. option --path + * 4. default value "/var/lib/virt/vmware/" + * + **/ + + ifstream ifs ( + string(VMCHOOSER_ETC_BASE_PATH).append("vmchooser.conf").c_str(), + ifstream::in + ); + if(ifs) { + int n = 255; + char buf[n]; + string s = ""; + while(!ifs.eof()) { + ifs.getline(buf, n); + s = buf; + if(s.substr(0,17) == "vmchooser_xmlpath") { + xmlpath = (char*)strdup(s.substr(19,s.length()-20).append("/").c_str()); + } + } + + } + + if(opt->getValue('d')!=NULL) { + dsession = opt->getValue('d'); + } + + if(opt->getValue("default")!= NULL) { + dsession = opt->getValue("default"); + } + + if(opt->getValue('p')!=NULL) { + xmlpath = opt->getValue('p'); + } + + if(opt->getValue("path")!= NULL) { + xmlpath = opt->getValue("path"); + } + + if (xmlpath == NULL) { + // Default Path comes here + xmlpath = (char *) VMCHOOSER_VMPATH; + } + + /* VERSION */ + if(opt->getFlag('v') || opt->getFlag("version")) { + // just print out version information - helps testing + cout << "virtual machine chooser " << version << endl; + delete opt; + return 0; + + } + + /** LINUX SESSION PATH */ + if(opt->getValue('l')!=NULL) { + lsesspath = opt->getValue('l'); + } + if(opt->getValue("lpath")!= NULL) { + lsesspath = opt->getValue("lpath"); + } + if (lsesspath == NULL) { + lsesspath = (char *) "/usr/share/xsessions/"; + } + + /** Size of Window */ + string size; + unsigned int i; + + if(opt->getValue('s')!=NULL) { + size = opt->getValue('s'); + } + if(opt->getValue("size")!= NULL) { + size = opt->getValue("size"); + } + + if (size.empty()) { + width = 500; + height = 550; + } + else { + i = size.find_first_of("x"); + if( i == string::npos) { + cerr << "Please write x as argument for -s|--size." << endl; + return 1; + } + height = atoi(size.substr(i+1).c_str()); + width = atoi(size.substr(0, size.size()-i).c_str()); + } + + + // additional xml argument -> start image directly + if(opt->getArgc() > 0) { + string single_arg = opt->getArgv(0); + if(bfs::is_directory(single_arg)) { + fprintf(stderr, "Only argument is a folder, should be a valid xml file!\n"); + return 1; + } + // read xml image + xmlDoc* doc = xmlReadFile(single_arg.c_str(), NULL, XML_PARSE_RECOVER); + if (doc == NULL) { + fprintf(stderr, "Error: could not parse file %s\n", single_arg.c_str()); + return 1; + } + + DataEntry* result = get_entry(doc); + if(result) { + runImage(*result, single_arg ); + } + else { + fprintf(stderr, "Error: can not start image from xml\n\tcheck your setting!\n"); + return 1; + } + } + + delete opt; + + /* read xml files */ + std::vector sessions; + std::vector lsessions; +printf("dummy\n"); + sessions = readXmlDir(xmlpath); +printf("dummy2\n"); + lsessions = readLinSess(lsesspath); +printf("dummy3\n"); + +printf ("%d sessions\n", sessions.size()); +printf ("%d lsessions\n", lsessions.size()); + + bool lin_entries=false; + bool vm_entries=false; + + if(lsessions.size()) { + //win.set_lin_entries(lsessions); + lin_entries = true; + } + if (sessions.size()) { + //win.set_entries(sessions); + vm_entries = true; + } + + sessions.insert(sessions.begin(), lsessions.begin(), lsessions.end()); + + QApplication a(argc, argv); + Dialog w; + w.addItems(sessions); + w.show(); + return a.exec(); +} + -- cgit v1.2.3-55-g7522