Serious-Engine/Sources/Depend/UtilityDepend.cpp

170 lines
5.0 KiB
C++
Raw Normal View History

2016-03-12 01:20:51 +01:00
/* Copyright (c) 2002-2012 Croteam Ltd.
This program is free software; you can redistribute it and/or modify
it under the terms of version 2 of the GNU General Public License as published by
the Free Software Foundation
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
2016-03-11 14:57:17 +01:00
#include "StdH.h"
#include "Dependency.h"
// Depend - extract dependencies and create group file utility
#define ACHR_OPTION argv[1]
#define ACHR_APP_DIR argv[2]
void PrintUsage()
{
printf(
"\nUSAGE:\n"
"Depend d <application dir> <file 1> <file 2> <output file>\n"
" make difference beetween two dependency files (result = file 1 - file 2)\n"
"Depend i <application dir> <lst file> <dep file>\n"
" create dependencies for files listed in given list file\n"
"Depend u <application dir> <in dep file> <out dep file>\n"
" remove updated files from dependency file\n"
"Depend e <application dir> <dep file> <lst file>\n"
" export dependency file to ascii list file\n"
"Depend t <application dir> <lst file> <translation file>\n"
" export strings for translation\n"
"\n");
exit( EXIT_FAILURE);
}
void SubMain( int argc, char *argv[]);
int main( int argc, char *argv[])
{
CTSTREAM_BEGIN {
SubMain(argc, argv);
} CTSTREAM_END;
return 0;
}
void SubMain( int argc, char *argv[])
{
// there must be 4 or 6 parameters (first is depend.exe file name)
if( (argc < 4) || (argc > 6) )
{
PrintUsage();
}
// initialize engine
SE_InitEngine(argv[0], "");
2016-03-11 14:57:17 +01:00
// get application path from cmd line
_fnmApplicationPath = CTString(ACHR_APP_DIR);
// if not ending with backslash
if (_fnmApplicationPath[strlen(_fnmApplicationPath)-1]!='\\') {
_fnmApplicationPath += "\\";
}
// get all filenames from command line
CTFileName afnFiles[3];
INDEX ctFiles = argc-3;
if (ctFiles>ARRAYCOUNT(afnFiles)) {
PrintUsage();
}
for (INDEX iFile=0; iFile<ctFiles; iFile++) {
afnFiles[iFile] = CTString(argv[iFile+3]);
}
// lenght of options string must be 1
if( strlen( ACHR_OPTION) != 1) {
printf( "First argument must be letter representing wanted option.\n\n");
PrintUsage();
}
// try to
try {
// remove application paths
for (INDEX iFile=0; iFile<ctFiles; iFile++) {
AdjustFilePath_t(afnFiles[iFile]);
}
// see what option was requested
switch( tolower(ACHR_OPTION[0]) ) {
case 'i': {
if( ctFiles != 2) PrintUsage();
CDependencyList dl;
CTFileStream strmDep;
// import files into dependency list from given ascii file
dl.ImportASCII( afnFiles[0]);
// extract dependencies
dl.ExtractDependencies();
// write dependency list
strmDep.Create_t( afnFiles[1], CTStream::CM_BINARY);
dl.Write_t( &strmDep);
} break;
case 'e': {
if( ctFiles != 2) PrintUsage();
CDependencyList dl;
CTFileStream strmDepIn;
// read dependency list
strmDepIn.Open_t( afnFiles[0], CTStream::OM_READ);
dl.Read_t( &strmDepIn);
strmDepIn.Close();
// export file suitable for archivers
dl.ExportASCII_t( afnFiles[1]);
} break;
case 'u': {
if( ctFiles != 2) PrintUsage();
CDependencyList dl;
CTFileStream strmDepIn, strmDepOut;
// read dependency list
strmDepIn.Open_t( afnFiles[0], CTStream::OM_READ);
dl.Read_t( &strmDepIn);
strmDepIn.Close();
// remove updated files from list
dl.RemoveUpdatedFiles();
// write dependency list
strmDepOut.Create_t( afnFiles[1], CTStream::CM_BINARY);
dl.Write_t( &strmDepOut);
} break;
case 'd': { // UNTESTED!!!!
if( ctFiles != 3) PrintUsage();
// load dependency lists
CDependencyList dl1, dl2;
CTFileStream strmDep1, strmDep2, strmDepDiff;
strmDep1.Open_t( afnFiles[0], CTStream::OM_READ);
strmDep2.Open_t( afnFiles[1], CTStream::OM_READ);
dl1.Read_t( &strmDep1);
dl2.Read_t( &strmDep2);
strmDep1.Close();
strmDep2.Close();
// calculate difference dependency 1 and 2 (res = 1-2)
dl1.Substract( dl2);
// save the difference dependency list
strmDepDiff.Create_t( afnFiles[2], CTStream::CM_BINARY);
dl1.Write_t( &strmDepDiff);
} break;
case 't': {
if( ctFiles != 2) PrintUsage();
CDependencyList dl;
// read file list
dl.ImportASCII( afnFiles[0]);
// extract translations
dl.ExtractTranslations_t( afnFiles[1]);
} break;
default: {
printf( "Unrecognizable option requested.\n\n");
PrintUsage();
}
}
}
catch( char *pError)
{
printf( "Error occured.\n%s\n", pError);
}
}