/* * Copyright (C) 2007-2013 Xagasoft, All rights reserved. * * This file is part of the libgats library and is released under the * terms of the license contained in the file LICENSE. */ #include #include #include #include #include #include #include #include "gats/types.h" #include "gats/gatsstream.h" using namespace Bu; class Options : public OptParser { public: Options( int argc, char *argv[] ) : bCompile( true ), bCompress( false ), bHex( false ) { addHelpBanner("Gats Compiler\nUsage: gatsc [options] [input]\n"); addOption( sInput, 'i', "input", "Specify input file."); addOption( sOutput, 'o', "output", "Specify output file."); addOption( bCompile, 'd', "decompile", "Convert binary gats to text gats."); addOption( bCompress, 'z', "compress", "Compress with deflate."); addOption( bHex, 'x', "hex", "Encode output as hex."); addHelpOption('h', "help", "This Help"); setNonOption( slot( this, &Options::setInput ) ); setOverride("decompile", false ); setOverride("compress", true ); setOverride("hex", true ); parse( argc, argv ); } int setInput( StrArray aParam ) { sInput = aParam[0]; return 0; } bool bCompile; bool bCompress; bool bHex; String sInput; String sOutput; }; int main( int argc, char *argv[] ) { Options opt( argc, argv ); if( opt.sInput.isEmpty() ) { sio << "You must specify an input." << sio.nl << sio.nl; return 1; } if( opt.sOutput.isEmpty() ) { opt.sOutput.set( opt.sInput.begin(), opt.sInput.find('.') ); if( opt.bCompress ) opt.sOutput += ".gatz"; else opt.sOutput += ".gats"; } if( opt.bCompile ) { File fIn( opt.sInput, File::Read ); StreamStack ssOut( new File( opt.sOutput, File::WriteNew ) ); if( opt.bCompress ) { ssOut.pushFilter(); } if( opt.bHex ) { ssOut.pushFilter(); } Gats::GatsStream gs( ssOut ); Gats::Object *pObj = Gats::Object::strToGats( fIn.readAll() ); gs.writeObject( pObj ); delete pObj; } return 0; }