main.cpp
Go to the documentation of this file.00001 /*************************************************************************** 00002 file : $URL: https://frepple.svn.sourceforge.net/svnroot/frepple/trunk/src/main.cpp $ 00003 version : $LastChangedRevision: 1315 $ $LastChangedBy: jdetaeye $ 00004 date : $LastChangedDate: 2010-07-17 18:08:53 +0200 (Sat, 17 Jul 2010) $ 00005 ***************************************************************************/ 00006 00007 /*************************************************************************** 00008 * * 00009 * Copyright (C) 2007-2010 by Johan De Taeye * 00010 * * 00011 * This library is free software; you can redistribute it and/or modify it * 00012 * under the terms of the GNU Lesser General Public License as published * 00013 * by the Free Software Foundation; either version 2.1 of the License, or * 00014 * (at your option) any later version. * 00015 * * 00016 * This library is distributed in the hope that it will be useful, * 00017 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 00018 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser * 00019 * General Public License for more details. * 00020 * * 00021 * You should have received a copy of the GNU Lesser General Public * 00022 * License along with this library; if not, write to the Free Software * 00023 * Foundation Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 * 00024 * USA * 00025 * * 00026 ***************************************************************************/ 00027 00028 #include "freppleinterface.h" 00029 #include <iostream> 00030 #include <sstream> 00031 #include <cstring> 00032 #include <cstdlib> 00033 using namespace std; 00034 00035 00036 void usage() 00037 { 00038 cout << "\nfrePPLe v" << FreppleVersion() << " command line application\n" 00039 "\nUsage:\n" 00040 " frepple [options] [files | directories]\n" 00041 "\nThis program reads XML input data, and executes the modeling and\n" 00042 "planning commands included in them.\n" 00043 "The XML input can be provided in the following ways:\n" 00044 " - Passing one or more XML files and/or directories as arguments.\n" 00045 " When a directory is specified, the application will process\n" 00046 " all files with the extension '.xml'.\n" 00047 " - When passing no file or directory arguments, input will be read\n" 00048 " from the standard input. XML data can be piped to the application.\n" 00049 "\nOptions:\n" 00050 " -validate -v Validate the XML input for correctness.\n" 00051 " -check -c Only validate the input, without executing the content.\n" 00052 " -? -h -help Show these instructions.\n" 00053 "\nEnvironment: The variable FREPPLE_HOME optionally points to a\n" 00054 " directory where the initialization files init.xml, init.py,\n" 00055 " frepple.xsd and module libraries will be searched.\n" 00056 "\nReturn codes: 0 when succesfull, non-zero in case of errors\n" 00057 "\nMore information on this program: http://www.frepple.com\n\n" 00058 << endl; 00059 } 00060 00061 00062 int main (int argc, char *argv[]) 00063 { 00064 00065 // Storing the chosen options... 00066 bool validate = false; 00067 bool validate_only = false; 00068 bool input = false; 00069 00070 try 00071 { 00072 // Analyze the command line arguments. 00073 for (int i = 1; i < argc; ++i) 00074 { 00075 if (argv[i][0] == '-') 00076 { 00077 // An option on the command line 00078 if (!strcmp(argv[i],"-validate") || !strcmp(argv[i],"-v")) 00079 validate = true; 00080 else if (!strcmp(argv[i],"-check") || !strcmp(argv[i],"-c")) 00081 validate_only = true; 00082 else 00083 { 00084 if (strcmp(argv[i],"-?") 00085 && strcmp(argv[i],"-h") 00086 && strcmp(argv[i],"-help")) 00087 cout << "\nError: Option '" << argv[i] 00088 << "' not recognized." << endl; 00089 usage(); 00090 return EXIT_FAILURE; 00091 } 00092 } 00093 else 00094 { 00095 // A file or directory name on the command line 00096 if (!input) 00097 { 00098 // Initialize the library if this wasn't done before 00099 FreppleInitialize(); 00100 input = true; 00101 } 00102 FreppleReadXMLFile(argv[i], validate, validate_only); 00103 } 00104 } 00105 00106 // When no filenames are specified, we read the standard input 00107 if (!input) 00108 { 00109 FreppleInitialize(); 00110 FreppleReadXMLFile(NULL, validate, validate_only); 00111 } 00112 } 00113 catch (exception& e) 00114 { 00115 ostringstream ch; 00116 ch << "Error: " << e.what(); 00117 FreppleLog(ch.str()); 00118 return EXIT_FAILURE; 00119 } 00120 catch (...) 00121 { 00122 FreppleLog("Error: Unknown exception type"); 00123 return EXIT_FAILURE; 00124 } 00125 return EXIT_SUCCESS; 00126 }
Documentation generated for frePPLe by
