Rev 60 | Rev 196 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#include <spk.h>void Error(){#ifdef _DEBUGchar pause;scanf ( "%s", &pause );#endifexit(1);}/*Main entry point to program*/int main ( int argc, char **argv ){printf ( "XModDiff V1.00 (SPK Library Version %.2f) 01/04/2011 Created by Cycrow\n\n", (float)GetLibraryVersion() );// parse the cmd nameCyString cmd (argv[0]);CyString dir = CFileIO(cmd).dir();cmd = CFileIO(cmd).filename();bool verbose = false;if ( argc < 3 ){printf ( "Syntax: %s [-v] <modfile.cat> <diff file> [gamedirectory]\n", cmd.c_str() );printf ( "\t<modfile.cat>:\t\tThe mod file you want to generate the diff for\n" );printf ( "\t<diff file>:\t\tThe file to save the diff to\n" );printf ( "\t[gamedirectory]:\tThe game directory to compare the mod against, without this will assume current directory\n" );}else{// check for switchesint startPos = 1;for ( startPos = 1; startPos < argc; startPos++ ){CyString checkFlags(argv[startPos]);if ( !checkFlags.Left(1).Compare("-") )break;if ( checkFlags.Left(2) != "--" ) // not a single long flag (compare each character{checkFlags.ToLower();for ( unsigned int i = 1; i < checkFlags.Length(); i++ ){switch (checkFlags[i]){case 'v':verbose = true;break;}}}else if ( checkFlags.Compare("--verbose") )verbose = true;}CyString modfile(argv[startPos]);CyString difffile(argv[startPos + 1]);CyString gamedir;if ( argc > (startPos + 2) ) gamedir = argv[startPos + 2];if ( gamedir.Empty() ) gamedir = ".";gamedir = CFileIO(gamedir).fullFilename();CModDiff Diff(gamedir.ToString(), "addon");if ( !Diff.IsLoaded() ){printf ("Error: Unable to load game directory, %s\n", gamedir.c_str());Error();}if ( gamedir.Compare(".") )printf ( "Game Directory: 'CURRENT' loaded\n");elseprintf ( "Game Directory: '%s' loaded\n", gamedir.c_str());if ( !Diff.CreateDiff(modfile.ToString()) ){printf("Error: Unable to create diff for mod file, %s (%d)\n", modfile.c_str(), Diff.Error());Error();}if ( Diff.GetDiffFiles().empty() ){printf("No diff entries found\n" );Error();}printf("Diff generated\n");if ( verbose ){for ( SDiffFile *d = Diff.GetDiffFiles().First(); d; d = Diff.GetDiffFiles().Next() ){printf("Changes to File: %s\n", d->sFile.c_str() );for ( SDiffEntry *e = d->m_lEntries.First(); e; e = d->m_lEntries.Next() ){switch(e->iType){case DIFFTYPE_CHANGE:printf( "\tPosition(%d) Entry(%d) %s => %s\n", e->iID, ((SDiffEntryChange *)e)->iPos, ((SDiffEntryChange *)e)->sFrom.c_str(), ((SDiffEntryChange *)e)->sEntry.c_str());break;case DIFFTYPE_ADDITION:printf( "\tPosition(%d) Add Entry: ...%s\n", e->iID, ((SDiffEntryAddition *)e)->sEntry.token(";", -2).c_str());break;}}}}if ( Diff.WriteDiff(difffile.ToString()) )printf("Diff file: %s, written\n", difffile.c_str());elseprintf("Error: Unable to write diff file: %s\n", difffile.c_str());}#ifdef _DEBUGchar pause;scanf ( "%s", &pause );#endifreturn 0;}