diff options
| author | Mike Buland <eichlan@xagasoft.com> | 2012-02-09 15:59:43 +0000 |
|---|---|---|
| committer | Mike Buland <eichlan@xagasoft.com> | 2012-02-09 15:59:43 +0000 |
| commit | 7d7bd049ed6815d3d2bac03331ff56102d224580 (patch) | |
| tree | 93e2d4e91d743029bc93f1579f78345d90d9e75a | |
| parent | 10747b4fb6ff74fa83384859b09ba695378aea60 (diff) | |
| download | libbu++-7d7bd049ed6815d3d2bac03331ff56102d224580.tar.gz libbu++-7d7bd049ed6815d3d2bac03331ff56102d224580.tar.bz2 libbu++-7d7bd049ed6815d3d2bac03331ff56102d224580.tar.xz libbu++-7d7bd049ed6815d3d2bac03331ff56102d224580.zip | |
May as well involve all the filters. No point in including lzma until we can
link it in in windows though.
Diffstat (limited to '')
| -rw-r--r-- | src/tools/bin2cpp.cpp | 54 |
1 files changed, 40 insertions, 14 deletions
diff --git a/src/tools/bin2cpp.cpp b/src/tools/bin2cpp.cpp index 2c227f5..53da0b5 100644 --- a/src/tools/bin2cpp.cpp +++ b/src/tools/bin2cpp.cpp | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | #include <bu/deflate.h> | 4 | #include <bu/deflate.h> |
| 5 | #include <bu/bzip2.h> | 5 | #include <bu/bzip2.h> |
| 6 | #include <bu/base64.h> | 6 | #include <bu/base64.h> |
| 7 | #include <bu/hex.h> | ||
| 7 | #include <bu/streamstack.h> | 8 | #include <bu/streamstack.h> |
| 8 | 9 | ||
| 9 | #include <bu/strfilter.h> | 10 | #include <bu/strfilter.h> |
| @@ -18,7 +19,8 @@ public: | |||
| 18 | { | 19 | { |
| 19 | addOption( sClass, 'c', "Class name [default=\"Datafiles\"]"); | 20 | addOption( sClass, 'c', "Class name [default=\"Datafiles\"]"); |
| 20 | addOption( sOutBase, 'o', "Output base filename [defaults to classname]"); | 21 | addOption( sOutBase, 'o', "Output base filename [defaults to classname]"); |
| 21 | addOption( slot(this, &Options::addFilter), 'f', "Add filter: deflate, bzip2, base64"); | 22 | addOption( sOutDir, 'd', "Output directory [defaults to current dir]"); |
| 23 | addOption( slot(this, &Options::addFilter), 'f', "Add filter: deflate, bzip2, base64, hex"); | ||
| 22 | setNonOption( slot(this, &Options::addInput) ); | 24 | setNonOption( slot(this, &Options::addInput) ); |
| 23 | addHelpOption(); | 25 | addHelpOption(); |
| 24 | 26 | ||
| @@ -26,6 +28,8 @@ public: | |||
| 26 | 28 | ||
| 27 | if( !sOutBase.isSet() ) | 29 | if( !sOutBase.isSet() ) |
| 28 | sOutBase = sClass.toLower(); | 30 | sOutBase = sClass.toLower(); |
| 31 | if( sOutDir.isSet() ) | ||
| 32 | sOutDir += "/"; | ||
| 29 | } | 33 | } |
| 30 | 34 | ||
| 31 | virtual ~Options() | 35 | virtual ~Options() |
| @@ -46,6 +50,7 @@ public: | |||
| 46 | 50 | ||
| 47 | Bu::String sClass; | 51 | Bu::String sClass; |
| 48 | Bu::String sOutBase; | 52 | Bu::String sOutBase; |
| 53 | Bu::String sOutDir; | ||
| 49 | Bu::StringList slInput; | 54 | Bu::StringList slInput; |
| 50 | Bu::StringList slFilter; | 55 | Bu::StringList slFilter; |
| 51 | }; | 56 | }; |
| @@ -54,8 +59,10 @@ int main( int argc, char *argv[] ) | |||
| 54 | { | 59 | { |
| 55 | Options opt( argc, argv ); | 60 | Options opt( argc, argv ); |
| 56 | 61 | ||
| 57 | File fHdrOut( opt.sOutBase + ".h", File::WriteNew ); | 62 | File fHdrOut( opt.sOutDir + opt.sOutBase + ".h", File::WriteNew ); |
| 58 | File fSrcOut( opt.sOutBase + ".cpp", File::WriteNew ); | 63 | File fSrcOut( opt.sOutDir + opt.sOutBase + ".cpp", File::WriteNew ); |
| 64 | |||
| 65 | Bu::Hash<char, bool> hFilters; | ||
| 59 | 66 | ||
| 60 | Formatter fHdr( fHdrOut ); | 67 | Formatter fHdr( fHdrOut ); |
| 61 | Formatter fSrc( fSrcOut ); | 68 | Formatter fSrc( fSrcOut ); |
| @@ -83,6 +90,7 @@ int main( int argc, char *argv[] ) | |||
| 83 | << "#include <bu/deflate.h>" << fSrc.nl | 90 | << "#include <bu/deflate.h>" << fSrc.nl |
| 84 | << "#include <bu/bzip2.h>" << fSrc.nl | 91 | << "#include <bu/bzip2.h>" << fSrc.nl |
| 85 | << "#include <bu/base64.h>" << fSrc.nl | 92 | << "#include <bu/base64.h>" << fSrc.nl |
| 93 | << "#include <bu/hex.h>" << fSrc.nl | ||
| 86 | << "#include <bu/strfilter.h>" << fSrc.nl | 94 | << "#include <bu/strfilter.h>" << fSrc.nl |
| 87 | << "#include <bu/staticmembuf.h>" << fSrc.nl << fSrc.nl | 95 | << "#include <bu/staticmembuf.h>" << fSrc.nl << fSrc.nl |
| 88 | << "const " << opt.sClass << "::File " << opt.sClass << "::aFile[] = {" << fSrc.nl; | 96 | << "const " << opt.sClass << "::File " << opt.sClass << "::aFile[] = {" << fSrc.nl; |
| @@ -104,16 +112,25 @@ int main( int argc, char *argv[] ) | |||
| 104 | { | 112 | { |
| 105 | sDat = encodeStr<Deflate>( sDat ); | 113 | sDat = encodeStr<Deflate>( sDat ); |
| 106 | sFltDesc.prepend("d"); | 114 | sFltDesc.prepend("d"); |
| 115 | hFilters.insert('d', true ); | ||
| 107 | } | 116 | } |
| 108 | else if( *f == "bzip2" ) | 117 | else if( *f == "bzip2" ) |
| 109 | { | 118 | { |
| 110 | sDat = encodeStr<BZip2>( sDat ); | 119 | sDat = encodeStr<BZip2>( sDat ); |
| 111 | sFltDesc.prepend("b"); | 120 | sFltDesc.prepend("b"); |
| 121 | hFilters.insert('b', true ); | ||
| 112 | } | 122 | } |
| 113 | else if( *f == "base64" ) | 123 | else if( *f == "base64" ) |
| 114 | { | 124 | { |
| 115 | sDat = encodeStr<Base64>( sDat ); | 125 | sDat = encodeStr<Base64>( sDat ); |
| 116 | sFltDesc.prepend("6"); | 126 | sFltDesc.prepend("6"); |
| 127 | hFilters.insert('6', true ); | ||
| 128 | } | ||
| 129 | else if( *f == "hex" ) | ||
| 130 | { | ||
| 131 | sDat = encodeStr<Hex>( sDat ); | ||
| 132 | sFltDesc.prepend("h"); | ||
| 133 | hFilters.insert('h', true ); | ||
| 117 | } | 134 | } |
| 118 | else | 135 | else |
| 119 | { | 136 | { |
| @@ -152,17 +169,26 @@ int main( int argc, char *argv[] ) | |||
| 152 | fSrc << "Bu::StreamStack *" << opt.sClass << "::open( const Bu::String &sName )" << fSrc.nl | 169 | fSrc << "Bu::StreamStack *" << opt.sClass << "::open( const Bu::String &sName )" << fSrc.nl |
| 153 | << "{" << fSrc.nl | 170 | << "{" << fSrc.nl |
| 154 | << "\tconst File &f = getFile( sName );" << fSrc.nl | 171 | << "\tconst File &f = getFile( sName );" << fSrc.nl |
| 155 | << "\tBu::StreamStack *s = new Bu::StreamStack( new Bu::StaticMemBuf( f.data, f.iSize ) );" << fSrc.nl | 172 | << "\tBu::StreamStack *s = new Bu::StreamStack( new Bu::StaticMemBuf( f.data, f.iSize ) );" << fSrc.nl; |
| 156 | << "\tfor( const char *t = f.flt; *t; t++ )" << fSrc.nl | 173 | |
| 157 | << "\t{" << fSrc.nl | 174 | if( !hFilters.isEmpty() ) |
| 158 | << "\t\tswitch( *t )" << fSrc.nl | 175 | { |
| 159 | << "\t\t{" << fSrc.nl | 176 | fSrc << "\tfor( const char *t = f.flt; *t; t++ )" << fSrc.nl |
| 160 | << "\t\t\tcase 'd': s->pushFilter<Bu::Deflate>(); break;" << fSrc.nl | 177 | << "\t{" << fSrc.nl |
| 161 | << "\t\t\tcase 'b': s->pushFilter<Bu::BZip2>(); break;" << fSrc.nl | 178 | << "\t\tswitch( *t )" << fSrc.nl |
| 162 | << "\t\t\tcase '6': s->pushFilter<Bu::Base64>(); break;" << fSrc.nl | 179 | << "\t\t{" << fSrc.nl; |
| 163 | << "\t\t}" << fSrc.nl | 180 | if( hFilters.has('d') ) |
| 164 | << "\t}" << fSrc.nl | 181 | fSrc << "\t\t\tcase 'd': s->pushFilter<Bu::Deflate>(); break;" << fSrc.nl; |
| 165 | << "\treturn s;" << fSrc.nl | 182 | if( hFilters.has('b') ) |
| 183 | fSrc << "\t\t\tcase 'b': s->pushFilter<Bu::BZip2>(); break;" << fSrc.nl; | ||
| 184 | if( hFilters.has('6') ) | ||
| 185 | fSrc << "\t\t\tcase '6': s->pushFilter<Bu::Base64>(); break;" << fSrc.nl; | ||
| 186 | if( hFilters.has('h') ) | ||
| 187 | fSrc << "\t\t\tcase 'h': s->pushFilter<Bu::Hex>(); break;" << fSrc.nl; | ||
| 188 | fSrc << "\t\t}" << fSrc.nl | ||
| 189 | << "\t}" << fSrc.nl; | ||
| 190 | } | ||
| 191 | fSrc << "\treturn s;" << fSrc.nl | ||
| 166 | << "}" << fSrc.nl << fSrc.nl; | 192 | << "}" << fSrc.nl << fSrc.nl; |
| 167 | 193 | ||
| 168 | fSrc << "Bu::StreamStack *" << opt.sClass << "::openRaw( const Bu::String &sName )" << fSrc.nl | 194 | fSrc << "Bu::StreamStack *" << opt.sClass << "::openRaw( const Bu::String &sName )" << fSrc.nl |
