diff options
author | Norbert Thiebaud <nthiebaud@gmail.com> | 2011-09-14 10:10:34 -0500 |
---|---|---|
committer | Norbert Thiebaud <nthiebaud@gmail.com> | 2011-09-14 10:10:49 -0500 |
commit | 0a97ece91e8a87724230f39276f0a7537b1566c3 (patch) | |
tree | 7008ee761af3294548978c3a0421608000f60781 /xml2cmp/source/xcd/main.cxx | |
parent | Related: fdo#40599 add a initial basic test for deleting graphics (diff) | |
download | core-0a97ece91e8a87724230f39276f0a7537b1566c3.tar.gz core-0a97ece91e8a87724230f39276f0a7537b1566c3.zip |
merge srvdepy functions into xml2cmp and simplify xml2cmp gbuild
Diffstat (limited to 'xml2cmp/source/xcd/main.cxx')
-rw-r--r-- | xml2cmp/source/xcd/main.cxx | 281 |
1 files changed, 153 insertions, 128 deletions
diff --git a/xml2cmp/source/xcd/main.cxx b/xml2cmp/source/xcd/main.cxx index 5a42d51db90b..ea6b140904ba 100644 --- a/xml2cmp/source/xcd/main.cxx +++ b/xml2cmp/source/xcd/main.cxx @@ -41,46 +41,151 @@ #include "parse.hxx" #include "../support/syshelp.hxx" #include "../support/heap.hxx" +#include "dependy.hxx" -int Do_IndexCommandLine( - const CommandLine & i_rCommandLine ); -int Do_SingleFileCommandLine( - const CommandLine & i_rCommandLine ); -void Create_TypeInfo( - const char * o_sOutputFile, - ModuleDescription & i_rData ); +void StreamOut_TypeInfo( std::ostream& o_rOut, ModuleDescription& i_rData, + const char* i_sSeparator ) +{ + Heap aTypesHeap(12); + // Gather types: + List< const MultipleTextElement * > aTypes; + i_rData.Get_Types(aTypes); -int -#ifdef WNT -_cdecl -#endif -main( int argc, - char * argv[] ) + for ( unsigned t = 0; t < aTypes.size(); ++t ) + { + unsigned i_max = aTypes[t]->Size(); + for ( unsigned i = 0; i < i_max; ++i ) + { + aTypesHeap.InsertValue( aTypes[t]->Data(i), "" ); + } // end for + } + + // Write types: + HeapItem * pLastHeapTop = 0; + for ( HeapItem * pHeapTop = aTypesHeap.ReleaseTop(); pHeapTop != 0; pHeapTop = aTypesHeap.ReleaseTop() ) + { + if (pLastHeapTop != 0) + { + if ( 0 == strcmp(pHeapTop->Key(), pLastHeapTop->Key()) ) + continue; + delete pLastHeapTop; + } + pLastHeapTop = pHeapTop; + + WriteStr( o_rOut, i_sSeparator ); + + const char * sEnd = strchr( pHeapTop->Key(), ' ' ); + if (sEnd != 0) + { + const char * sQuali = strrchr( pHeapTop->Key(), ' ' ) + 1; + WriteStr( o_rOut, sQuali ); + WriteStr( o_rOut, "." ); + o_rOut.write( pHeapTop->Key(), sEnd - pHeapTop->Key() ); + } + else + { + WriteStr( o_rOut, pHeapTop->Key() ); + } + } // end for + + if (pLastHeapTop != 0) + { + delete pLastHeapTop; + pLastHeapTop = 0; + } +} + +void Put2StdOut_TypeInfo( ModuleDescription& i_rData ) { - // Variables - CommandLine aCommandLine(argc, argv); - int ret = 0; + StreamOut_TypeInfo(std::cout, i_rData, " "); +} - if (! aCommandLine.IsOk()) +void Put2File_TypeInfo( const char* i_sOutputFile, ModuleDescription& i_rData ) +{ + std::ofstream aOut(i_sOutputFile, std::ios::out +#if defined(WNT) + | std::ios::binary +#endif + ); + if ( !aOut ) { - std::cerr << aCommandLine.ErrorText() << std::endl ; - return 1; + std::cerr << "Error: " << i_sOutputFile << " could not be created." << std::endl; + return; } - if ( aCommandLine.IsIndexCommand() ) - ret = Do_IndexCommandLine(aCommandLine); - else - ret = Do_SingleFileCommandLine(aCommandLine); + Simstr sLibPrefix = i_rData.ModuleName(); + WriteStr( aOut, sLibPrefix ); + WriteStr( aOut, "_XML2CMPTYPES= "); - return ret; + StreamOut_TypeInfo(aOut, i_rData, "\t\\\n\t\t"); + + aOut.close(); } +void Create_TypeInfo( const char* o_sOutputFile, ModuleDescription& i_rData ) +{ + if ( strcmp(o_sOutputFile, "stdout") == 0 ) + { + Put2StdOut_TypeInfo(i_rData); + } + else + { + Put2File_TypeInfo(o_sOutputFile,i_rData); + } +} -int -Do_SingleFileCommandLine(const CommandLine & i_rCommandLine) +int Do_DepCommandLine(const CommandLine & i_rCommandLine) +{ +DependencyFinder aDependencies; + + aDependencies.GatherData(i_rCommandLine.DepPath()); + char sInput[500] = ""; + std::vector<Simstr> aLibs; + std::vector<Simstr> aServs; + + + std::cout + << "\nNow you can start to put in Service names.\n" + << "Please use correct case, but don't use namespaces.\n" + << "Just the Service's own name.\n\n" + << "To stop the program, put in a hashmark \"#\" + ENTER.\n" + << std::endl; + + do + { + sInput[0] = 0; + std::cin >> sInput; + Simstr sImplService(sInput); + if (*sInput != '#') + { + aLibs.erase( aLibs.begin(), aLibs.end() ); + aServs.erase( aServs.begin(), aServs.end() ); + + aDependencies.FindNeededServices( aLibs, aServs, sImplService ); + + std::cout << "\n\n\nNeeded libraries: " << std::endl; + for ( unsigned i = 0; i < aLibs.size(); ++i ) + { + std::cout << " " << aLibs[i].str() << std::endl; + } + std::cout << "\nNeeded services: " << std::endl; + for ( unsigned s= 0; s < aServs.size(); ++s ) + { + std::cout << " " << aServs[s].str() << std::endl; + } + std::cout << "\n\n" << std::endl; + } + } + while (*sInput != '#'); + + return 0; + +} + +int Do_SingleFileCommandLine(const CommandLine & i_rCommandLine) { ModuleDescription aDescr; X2CParser aParser(aDescr); @@ -95,8 +200,7 @@ Do_SingleFileCommandLine(const CommandLine & i_rCommandLine) if ( strlen(i_rCommandLine.FuncFile()) > 0 ) { - Create_AccessMethod( i_rCommandLine.FuncFile(), - aParser.PureText() ); + Create_AccessMethod( i_rCommandLine.FuncFile(), aParser.PureText() ); std::cout << "File " << i_rCommandLine.FuncFile() @@ -118,15 +222,13 @@ Do_SingleFileCommandLine(const CommandLine & i_rCommandLine) if (strlen(i_rCommandLine.TypeInfoFile()) > 0) { - Create_TypeInfo( i_rCommandLine.TypeInfoFile(), - aDescr ); + Create_TypeInfo( i_rCommandLine.TypeInfoFile(), aDescr ); } return 0; }; -int -Do_IndexCommandLine(const CommandLine & i_rCommandLine) +int Do_IndexCommandLine(const CommandLine & i_rCommandLine) { // Parse files: List<Simstr> aFiles; @@ -148,113 +250,36 @@ Do_IndexCommandLine(const CommandLine & i_rCommandLine) -//******************** Creating of typeinfo ********************// - - -void Put2StdOut_TypeInfo( - ModuleDescription & i_rData ); -void Put2File_TypeInfo( - const char * i_sOutputFile, - ModuleDescription & i_rData ); -void StreamOut_TypeInfo( - std::ostream & o_rOut, - ModuleDescription & i_rData, - const char * i_sSeparator ); - - - -void -Create_TypeInfo( const char * o_sOutputFile, - ModuleDescription & i_rData ) -{ - if ( strcmp(o_sOutputFile, "stdout") == 0 ) - Put2StdOut_TypeInfo(i_rData); - else - Put2File_TypeInfo(o_sOutputFile,i_rData); -} - -void -Put2StdOut_TypeInfo( ModuleDescription & i_rData ) +int +#ifdef WNT +_cdecl +#endif +main( int argc, char* argv[] ) { - StreamOut_TypeInfo(std::cout, i_rData, " "); -} + // Variables + CommandLine aCommandLine(argc, argv); + int ret = 0; -void -Put2File_TypeInfo( const char * i_sOutputFile, - ModuleDescription & i_rData ) -{ - std::ofstream aOut(i_sOutputFile, std::ios::out -#if defined(WNT) - | std::ios::binary -#endif - ); - if ( !aOut ) + if (! aCommandLine.IsOk()) { - std::cerr << "Error: " << i_sOutputFile << " could not be created." << std::endl; - return; + std::cerr << aCommandLine.ErrorText() << std::endl ; + return 1; } - Simstr sLibPrefix = i_rData.ModuleName(); - WriteStr( aOut, sLibPrefix ); - WriteStr( aOut, "_XML2CMPTYPES= "); - - StreamOut_TypeInfo(aOut, i_rData, "\t\\\n\t\t"); - - aOut.close(); -} - -void -StreamOut_TypeInfo( std::ostream & o_rOut, - ModuleDescription & i_rData, - const char * i_sSeparator ) -{ - Heap aTypesHeap(12); - - // Gather types: - List< const MultipleTextElement * > aTypes; - i_rData.Get_Types(aTypes); - - for ( unsigned t = 0; t < aTypes.size(); ++t ) + if ( aCommandLine.IsIndexCommand() ) { - unsigned i_max = aTypes[t]->Size(); - for ( unsigned i = 0; i < i_max; ++i ) - { - aTypesHeap.InsertValue( aTypes[t]->Data(i), "" ); - } // end for + ret = Do_IndexCommandLine(aCommandLine); } - - // Write types: - HeapItem * pLastHeapTop = 0; - for ( HeapItem * pHeapTop = aTypesHeap.ReleaseTop(); pHeapTop != 0; pHeapTop = aTypesHeap.ReleaseTop() ) + else if ( aCommandLine.IsDepCommand() ) { - if (pLastHeapTop != 0) - { - if ( 0 == strcmp(pHeapTop->Key(), pLastHeapTop->Key()) ) - continue; - delete pLastHeapTop; - } - pLastHeapTop = pHeapTop; - - WriteStr( o_rOut, i_sSeparator ); - - const char * sEnd = strchr( pHeapTop->Key(), ' ' ); - if (sEnd != 0) - { - const char * sQuali = strrchr( pHeapTop->Key(), ' ' ) + 1; - WriteStr( o_rOut, sQuali ); - WriteStr( o_rOut, "." ); - o_rOut.write( pHeapTop->Key(), sEnd - pHeapTop->Key() ); - } - else - WriteStr( o_rOut, pHeapTop->Key() ); - } // end for - - if (pLastHeapTop != 0) + ret = Do_DepCommandLine(aCommandLine); + } + else { - delete pLastHeapTop; - pLastHeapTop = 0; + ret = Do_SingleFileCommandLine(aCommandLine); } + return ret; } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |