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 }