00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <barry/barry.h>
00025 #include <barry/barryalx.h>
00026 #include <iostream>
00027 #include <iomanip>
00028 #include <fstream>
00029 #include <getopt.h>
00030 #include "i18n.h"
00031
00032 using namespace std;
00033 using namespace Barry;
00034
00035 struct Languages {
00036 const char *code;
00037 const char *alxid;
00038 const char *description;
00039 };
00040
00041
00042 const static struct Languages langs[] = {
00043 { "en", OS_LANG_ENGLISH, "English" },
00044 { "ar", OS_LANG_ARABIC, "Arabic" },
00045 { "ca", OS_LANG_CATALAN, "Catalan" },
00046 { "cs", OS_LANG_CZECH, "Czech" },
00047 { "de", OS_LANG_GERMAN, "German" },
00048 { "sp", OS_LANG_SPANISH, "Spanish" },
00049 { "fr", OS_LANG_FRENCH, "French" },
00050 { "he", OS_LANG_HEBREW, "Hebrew" },
00051 { "hu", OS_LANG_HUNGARIAN, "Hungarian" },
00052 { "it", OS_LANG_ITALIAN, "Italian" },
00053 { "ja", OS_LANG_JAPANESE, "Japanese" },
00054 { "ko", OS_LANG_KOREAN, "Korean" },
00055 { NULL }
00056 };
00057
00058 void Usage()
00059 {
00060 int major, minor;
00061 const char *Version = Barry::Version(major, minor);
00062
00063 cerr
00064 << "balxparse - Command line ALX parser\n"
00065 << " Copyright 2009-2010, Nicolas VIVIEN.\n"
00066 << " Copyright 2005-2011, Net Direct Inc. (http://www.netdirect.ca/)\n"
00067 << " Using: " << Version << "\n"
00068 << "\n"
00069 << " -h This help\n"
00070 << " -i lang Internationalization language\n"
00071 << " -d path OS path with all ALX files\n"
00072 << " -o file OS ALX filename (Platform.alx)\n"
00073 << "\n"
00074 << " <ALX file> ...\n"
00075 << " Parse one or several ALX files.\n"
00076 << "\n"
00077 << " Language supported :\n"
00078 << "\t";
00079
00080 for (int i=0; langs[i].code!=NULL; i++) {
00081 string s = (string) langs[i].code + " : " + (string) langs[i].description;
00082
00083 cerr << left << setfill(' ') << setw(18) << s;
00084
00085 if (((i+1) % 4) == 0)
00086 cerr << endl << "\t";
00087 }
00088
00089 cerr << endl;
00090 }
00091
00092
00093 int main(int argc, char *argv[], char *envp[])
00094 {
00095 INIT_I18N(PACKAGE);
00096
00097 try {
00098
00099 string lang;
00100 string pathname;
00101 string filename;
00102 string osfilename;
00103 vector<string> filenames;
00104
00105
00106 for(;;) {
00107 int cmd = getopt(argc, argv, "hi:d:o:");
00108 if( cmd == -1 )
00109 break;
00110
00111 switch( cmd )
00112 {
00113 case 'd':
00114 pathname = optarg;
00115 break;
00116
00117 case 'o':
00118 osfilename = optarg;
00119 break;
00120
00121 case 'i':
00122 lang = optarg;
00123 break;
00124
00125 case 'h':
00126 default:
00127 Usage();
00128 return 0;
00129 }
00130 }
00131
00132 argc -= optind;
00133 argv += optind;
00134
00135
00136 for (; argc > 0; argc --, argv ++) {
00137 filenames.push_back(string(argv[0]));
00138 }
00139
00140
00141
00142 ALX::OSLoader os;
00143
00144 os.AddProperties("_vendorID", "");
00145
00146
00147 if (lang.length() > 0) {
00148 for (int i=0; langs[i].code!=NULL; i++) {
00149 string code = langs[i].code;
00150
00151 if (code == lang)
00152 os.AddProperties("langid", langs[i].alxid);
00153 }
00154 }
00155
00156 if (osfilename.length() > 0)
00157 os.LoadALXFile(osfilename, false);
00158
00159 if (pathname.length() > 0)
00160 os.Load(pathname);
00161
00162 if (!filenames.empty()) {
00163 vector<string>::iterator i = filenames.begin(), end = filenames.end();
00164 for( ; i != end; ++i ) {
00165 os.LoadALXFile((*i), true);
00166 }
00167 }
00168
00169 cout << os << endl;
00170
00171
00172 } catch( std::exception &e ) {
00173 cout << e.what() << endl;
00174 return 1;
00175 }
00176
00177 return 0;
00178 }
00179