#include #include #include #include #include // ------------------------------------------------------------------------- std::string GetFileName( const std::string& path ) { // Extract filename char* buffer = new char[ path.size( ) + 1 ]; std::memcpy( buffer, path.c_str( ), path.size( ) ); buffer[ path.size( ) ] = '\0'; char* tok = std::strtok( buffer, "/\\" ); char* ptr_fname = tok; while( tok != NULL ) { ptr_fname = tok; tok = std::strtok( NULL, "/\\" ); } // elihw std::string fname( ptr_fname ); delete [] buffer; // Delete extension std::size_t pos = fname.find_last_of( "." ); if( pos != std::string::npos ) fname = fname.substr( 0, pos ); return( fname ); } // ------------------------------------------------------------------------- int main( int argc, char* argv[] ) { // Open file if( argc < 4 ) { std::cerr << "Usage: " << argv[ 0 ] << " output_code namespace filter1 filter2 ..." << std::endl; return( 1 ); } // fi std::ofstream output_code( argv[ 1 ] ); if( !output_code ) { std::cerr << "Could not open file \"" << argv[ 1 ] << "\" for writing" << std::endl; return( 1 ); } // fi output_code << "#include " << std::endl; output_code << "#include " << std::endl; for( int i = 3; i < argc; ++i ) output_code << "#include \"" << argv[ i ] << "\"" << std::endl; output_code << std::endl; std::istringstream nspaces( argv[ 2 ] ); std::string nspace; unsigned int number_of_nspaces = 0; while( std::getline( nspaces, nspace, ':' ) ) { if( nspace != "" ) { output_code << "namespace " << nspace << std::endl << "{" << std::endl; number_of_nspaces++; } // fi } // elihw for( int i = 3; i < argc; ++i ) output_code << "CPPLUGINS_INHERIT_PROVIDER( " << GetFileName( argv[ i ] ) << " );" << std::endl; for( unsigned int i = 0; i < number_of_nspaces; ++i ) output_code << "}" << std::endl; output_code << std::endl; output_code << "PLUMA_CONNECTOR" << std::endl << "bool connect( pluma::Host& host )" << std::endl << "{" << std::endl; for( int i = 3; i < argc; ++i ) output_code << " host.add( new " << argv[ 2 ] << "::" << GetFileName( argv[ i ] ) << "Provider( ) );" << std::endl; output_code << " return( true );" << std::endl << "}" << std::endl; output_code << std::endl << "// eof - $RCSfile$" << std::endl << std::endl; // Finish output_code.close( ); return( 0 ); } // eof - $RCSfile$