Allow tag <type> in module-description
This commit is contained in:
@@ -2,9 +2,9 @@
|
||||
*
|
||||
* $RCSfile: syshelp.cxx,v $
|
||||
*
|
||||
* $Revision: 1.3 $
|
||||
* $Revision: 1.4 $
|
||||
*
|
||||
* last change: $Author: np $ $Date: 2001-03-12 19:24:51 $
|
||||
* last change: $Author: np $ $Date: 2001-03-23 13:23:17 $
|
||||
*
|
||||
* The Contents of this file are made available subject to the terms of
|
||||
* either of the following licenses
|
||||
@@ -66,13 +66,26 @@
|
||||
// NOT FULLY DEFINED SERVICES
|
||||
#include <string.h>
|
||||
#include "sistr.hxx"
|
||||
#include "list.hxx"
|
||||
|
||||
#ifdef WNT
|
||||
#include <io.h>
|
||||
#elif defined(UNX)
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
#include <dirent.h>
|
||||
#define stricmp strcasecmp
|
||||
#else
|
||||
#error Must run under unix or windows, please define UNX or WNT.
|
||||
#endif
|
||||
|
||||
|
||||
using namespace std;
|
||||
|
||||
char C_sSpaceInName[] = " ";
|
||||
|
||||
void
|
||||
WriteName( std::ofstream & o_rFile,
|
||||
WriteName( ofstream & o_rFile,
|
||||
const Simstr & i_rIdlDocuBaseDir,
|
||||
const Simstr & i_rName,
|
||||
E_LinkType i_eLinkType )
|
||||
@@ -89,7 +102,7 @@ WriteName( std::ofstream & o_rFile,
|
||||
if ( pNameEnd != 0 )
|
||||
{
|
||||
const char * pStart = i_rName.str();
|
||||
o_rFile.write( pStart, pNameEnd -1 - pStart );
|
||||
o_rFile.write( pStart, pNameEnd - pStart );
|
||||
WriteStr( o_rFile, C_sSpaceInName );
|
||||
WriteStr( o_rFile, pNameEnd );
|
||||
}
|
||||
@@ -189,3 +202,150 @@ WriteStr( std::ofstream & o_rFile,
|
||||
o_rFile.write( i_sStr.str(), i_sStr.l() );
|
||||
}
|
||||
|
||||
|
||||
const char C_sXML_END[] = "\\*.xml";
|
||||
|
||||
void
|
||||
GatherFileNames( List<Simstr> & o_sFiles,
|
||||
const char * i_sSrcDirectory )
|
||||
{
|
||||
static int nAliveCounter = 0;
|
||||
|
||||
char * sNextDir = 0;
|
||||
Simstr sNew = 0;
|
||||
|
||||
#ifdef WNT
|
||||
struct _finddata_t aEntry;
|
||||
long hFile = 0;
|
||||
int bFindMore = 0;
|
||||
char * sFilter = new char[ strlen(i_sSrcDirectory) + sizeof C_sXML_END ];
|
||||
|
||||
// Stayingalive sign
|
||||
if (++nAliveCounter % 100 == 1)
|
||||
cout << "." << flush;
|
||||
|
||||
strcpy(sFilter, i_sSrcDirectory);
|
||||
strcat(sFilter,C_sXML_END);
|
||||
|
||||
hFile = _findfirst( sFilter, &aEntry );
|
||||
for ( bFindMore = hFile == -1;
|
||||
bFindMore == 0;
|
||||
bFindMore = _findnext( hFile, &aEntry ) )
|
||||
{
|
||||
sNew = i_sSrcDirectory;
|
||||
sNew += "\\";
|
||||
sNew += aEntry.name;
|
||||
o_sFiles.push_back(sNew);
|
||||
} // end for
|
||||
|
||||
_findclose(hFile);
|
||||
delete [] sFilter;
|
||||
#elif defined(UNX)
|
||||
DIR * pDir = opendir( i_sSrcDirectory );
|
||||
dirent * pEntry = 0;
|
||||
char * sEnding;
|
||||
|
||||
// Stayingalive sign
|
||||
if (++nAliveCounter % 100 == 1)
|
||||
cout << "." << flush;
|
||||
|
||||
while ( (pEntry = readdir(pDir)) != 0 )
|
||||
{
|
||||
sEnding = strrchr(pEntry->d_name,'.');
|
||||
if (sEnding != 0 ? stricmp(sEnding,".xml") == 0 : 0 )
|
||||
{
|
||||
sNew = i_sSrcDirectory;
|
||||
sNew += "/";
|
||||
sNew += pEntry->d_name;
|
||||
o_sFiles.push_back(sNew);
|
||||
}
|
||||
} // end while
|
||||
|
||||
closedir( pDir );
|
||||
#else
|
||||
#error Must run on unix or windows, please define UNX or WNT.
|
||||
#endif
|
||||
|
||||
// gathering from subdirectories:
|
||||
List<Simstr> aSubDirectories;
|
||||
GatherSubDirectories( aSubDirectories, i_sSrcDirectory );
|
||||
|
||||
unsigned d_max = aSubDirectories.size();
|
||||
for ( unsigned d = 0; d < d_max; ++d )
|
||||
{
|
||||
sNextDir = new char[ strlen(i_sSrcDirectory) + 2 + aSubDirectories[d].l() ];
|
||||
|
||||
strcpy(sNextDir, i_sSrcDirectory);
|
||||
strcat(sNextDir, C_sSLASH);
|
||||
strcat(sNextDir, aSubDirectories[d].str());
|
||||
GatherFileNames(o_sFiles, sNextDir);
|
||||
|
||||
delete [] sNextDir;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
const char * C_sANYDIR = "\\*.*";
|
||||
|
||||
void
|
||||
GatherSubDirectories( List<Simstr> & o_sSubDirectories,
|
||||
const char * i_sParentdDirectory )
|
||||
{
|
||||
Simstr sNew;
|
||||
|
||||
#ifdef WNT
|
||||
struct _finddata_t aEntry;
|
||||
long hFile = 0;
|
||||
int bFindMore = 0;
|
||||
char * sFilter = new char[strlen(i_sParentdDirectory) + sizeof C_sANYDIR];
|
||||
|
||||
strcpy(sFilter, i_sParentdDirectory);
|
||||
strcat(sFilter,C_sANYDIR);
|
||||
|
||||
hFile = _findfirst( sFilter, &aEntry );
|
||||
for ( bFindMore = hFile == -1;
|
||||
bFindMore == 0;
|
||||
bFindMore = _findnext( hFile, &aEntry ) )
|
||||
{
|
||||
if (aEntry.attrib == _A_SUBDIR)
|
||||
{
|
||||
// Do not gather . .. and outputtree directories
|
||||
if ( strchr(aEntry.name,'.') == 0
|
||||
&& strncmp(aEntry.name, "wnt", 3) != 0
|
||||
&& strncmp(aEntry.name, "unx", 3) != 0 )
|
||||
{
|
||||
sNew = aEntry.name;
|
||||
o_sSubDirectories.push_back(sNew);
|
||||
}
|
||||
} // endif (aEntry.attrib == _A_SUBDIR)
|
||||
} // end for
|
||||
_findclose(hFile);
|
||||
delete [] sFilter;
|
||||
|
||||
#elif defined(UNX)
|
||||
DIR * pDir = opendir( i_sParentdDirectory );
|
||||
dirent * pEntry = 0;
|
||||
struct stat aEntryStatus;
|
||||
char * sEnding;
|
||||
|
||||
while ( ( pEntry = readdir(pDir) ) != 0 )
|
||||
{
|
||||
stat(pEntry->d_name, &aEntryStatus);
|
||||
if ( ( aEntryStatus.st_mode & S_IFDIR ) == S_IFDIR )
|
||||
{
|
||||
// Do not gather . .. and outputtree directories
|
||||
if ( strchr(pEntry->d_name,'.') == 0
|
||||
&& strncmp(pEntry->d_name, "wnt", 3) != 0
|
||||
&& strncmp(pEntry->d_name, "unx", 3) != 0 )
|
||||
{
|
||||
sNew = pEntry->d_name;
|
||||
o_sSubDirectories.push_back(sNew);
|
||||
}
|
||||
} // endif (aEntry.attrib == _A_SUBDIR)
|
||||
} // end while
|
||||
closedir( pDir );
|
||||
#else
|
||||
#error Must run on unix or windows, please define UNX or WNT.
|
||||
#endif
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user