main.cpp00001
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 if ( argc < 2 ) {
00049 usage();
00050 return 1;
00051 }
00052 int argpos = 1;
00053 bool generate_skel = true;
00054 bool generate_stub = true;
00055
00056 QString suffix = "cpp";
00057
00058 while (argc > 2) {
00059
00060 if ( strcmp( argv[argpos], "--no-skel" ) == 0 )
00061 {
00062 generate_skel = false;
00063 for (int i = argpos; i < argc - 1; i++) argv[i] = argv[i+1];
00064 argc--;
00065 }
00066 else if ( strcmp( argv[argpos], "--no-stub" ) == 0 )
00067 {
00068 generate_stub = false;
00069 for (int i = argpos; i < argc - 1; i++) argv[i] = argv[i+1];
00070 argc--;
00071 }
00072 else if ( strcmp( argv[argpos], "--no-signals" ) == 0 )
00073 {
00074
00075
00076 for (int i = argpos; i < argc - 1; i++) argv[i] = argv[i+1];
00077 argc--;
00078 }
00079 else if ( strcmp( argv[argpos], "--c++-suffix" ) == 0)
00080 {
00081 if (argc - 1 < argpos) {
00082 usage();
00083 exit(1);
00084 }
00085 suffix = argv[argpos+1];
00086 for (int i = argpos; i < argc - 2; i++) argv[i] = argv[i+2];
00087 argc -= 2;
00088 } else {
00089 usage();
00090 exit(1);
00091 }
00092 }
00093
00094 QFile in( QFile::decodeName(argv[argpos]) );
00095 if ( !in.open( IO_ReadOnly ) )
00096 qFatal("Could not read %s", argv[argpos] );
00097
00098 QDomDocument doc;
00099 doc.setContent( &in );
00100
00101 QDomElement de = doc.documentElement();
00102 Q_ASSERT( de.tagName() == "DCOP-IDL" );
00103
00104 QString base( argv[argpos] );
00105 QString idl = base;
00106
00107 int pos = base.findRev( '.' );
00108 if ( pos != -1 )
00109 base = base.left( pos );
00110
00111 pos = idl.findRev('/');
00112 if ( pos != -1 )
00113 idl = idl.mid( pos+1 );
00114
00115 if ( generate_skel )
00116 generateSkel( idl, base + "_skel." + suffix, de );
00117
00118 if ( generate_stub ) {
00119 QString header = base;
00120 generateStub( idl, header + "_stub.h", de );
00121 pos = header.findRev('/');
00122 if ( pos != -1 )
00123 header = header.mid( pos+1 );
00124 generateStubImpl( idl, header + "_stub.h", base+".h", base + "_stub." + suffix, de);
00125 }
00126
00127 return 0;
00128 }
|