summaryrefslogtreecommitdiff
path: root/xml2cmp/source/xcd/main.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'xml2cmp/source/xcd/main.cxx')
-rw-r--r--xml2cmp/source/xcd/main.cxx281
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: */