main.cpp
00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 #include <qdom.h>
00024 #include <qfile.h>
00025 #include <qtextstream.h>
00026 #include <qstring.h>
00027 
00028 #include <string.h>
00029 #include <stdlib.h>
00030 #include <stdio.h>
00031 #include <unistd.h>
00032 #include "main.h"
00033 
00034 
00035 
00036 void usage()
00037 {
00038     fprintf( stderr, "Usage: dcopidl2cpp [ --no-skel | --no-stub ] [--c++-suffix <suffix>] file\n" );
00039 }
00040 
00041 int main( int argc, char** argv )
00042 {
00043 
00044     if ( *qVersion() == '1' ) {
00045         fprintf( stderr, "dcopidl2cpp appears to be linked to Qt 1 instead of Qt >= 2 ! Aborting.\n" );
00046         exit(1);
00047     }
00048     int argpos = 1;
00049     bool generate_skel    = true;
00050     bool generate_stub    = true;
00051 
00052     QString suffix = "cpp";
00053 
00054     while (argc > 2) {
00055 
00056     if ( strcmp( argv[argpos], "--no-skel" ) == 0 )
00057     {
00058         generate_skel = false;
00059         for (int i = argpos; i < argc - 1; i++) argv[i] = argv[i+1];
00060         argc--;
00061     }
00062     else if ( strcmp( argv[argpos], "--no-stub" ) == 0 )
00063     {
00064         generate_stub = false;
00065         for (int i = argpos; i < argc - 1; i++) argv[i] = argv[i+1];
00066         argc--;
00067     }
00068     else if ( strcmp( argv[argpos], "--no-signals" ) == 0 )
00069     {
00070         
00071         
00072         for (int i = argpos; i < argc - 1; i++) argv[i] = argv[i+1];
00073         argc--;
00074     }
00075     else if ( strcmp( argv[argpos], "--c++-suffix" ) == 0)
00076     {
00077         if (argc - 1 < argpos) {
00078         usage();
00079         exit(1);
00080         }
00081         suffix = argv[argpos+1];
00082         for (int i = argpos; i < argc - 2; i++) argv[i] = argv[i+2];
00083         argc -= 2;
00084     } else {
00085         usage();
00086         exit(1);
00087 
00088     }
00089     }
00090 
00091     QFile in( QFile::decodeName(argv[argpos]) );
00092     if ( !in.open( IO_ReadOnly ) )
00093     qFatal("Could not read %s", argv[argpos] );
00094 
00095     QDomDocument doc;
00096     doc.setContent( &in );
00097 
00098     QDomElement de = doc.documentElement();
00099     Q_ASSERT( de.tagName() == "DCOP-IDL" );
00100 
00101     QString base( argv[argpos] );
00102     QString idl = base;
00103 
00104     int pos = base.findRev( '.' );
00105     if ( pos != -1 )
00106     base = base.left( pos );
00107 
00108     pos = idl.findRev('/');
00109     if ( pos != -1 )
00110     idl = idl.mid( pos+1 );
00111 
00112     if ( generate_skel )
00113     generateSkel( idl, base + "_skel." + suffix, de );
00114 
00115     if ( generate_stub ) {
00116     QString header = base;
00117     generateStub( idl, header + "_stub.h", de );
00118     pos = header.findRev('/');
00119     if ( pos != -1 )
00120         header = header.mid( pos+1 );
00121     generateStubImpl( idl, header + "_stub.h", base+".h", base + "_stub." + suffix, de);
00122     }
00123 
00124     return 0;
00125 }
 
This file is part of the documentation for dcop Library Version 3.2.0.