X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=tool%2Ftool.cpp;h=a82d5875f2a40630cfc1252f5a99ac920bdfc60c;hb=29fafaa2c570b0cf92f41eeb534cfb65a841a892;hp=5469106f50322b7497ea9626c5a4b2400187aa1c;hpb=38c35631217316e2fd0453a8ef7a1eea9e47c5dc;p=libs%2Fdatafile.git diff --git a/tool/tool.cpp b/tool/tool.cpp index 5469106..a82d587 100644 --- a/tool/tool.cpp +++ b/tool/tool.cpp @@ -5,6 +5,7 @@ #include #include #include "compiler.h" +#include "packer.h" #include "tool.h" using namespace std; @@ -16,6 +17,7 @@ DataTool::DataTool(int argc, char **argv): compile(false), float_size(0), compress(false), + pack(false), debug(false) { GetOpt getopt; @@ -24,17 +26,23 @@ DataTool::DataTool(int argc, char **argv): getopt.add_option('f', "float-size", float_size, GetOpt::REQUIRED_ARG); getopt.add_option('g', "debug", debug, GetOpt::NO_ARG); getopt.add_option('o', "output", out_fn, GetOpt::REQUIRED_ARG); + getopt.add_option('p', "pack", pack, GetOpt::NO_ARG); getopt.add_option('z', "compress", compress, GetOpt::NO_ARG); getopt(argc, argv); in_fns = getopt.get_args(); if(in_fns.empty()) in_fns.push_back("-"); + + if(pack && out_fn=="-") + throw usage_error("Can't write pack to stdout"); } int DataTool::main() { - if(compile) + if(pack) + do_pack(); + else if(compile) do_compile(); else do_transfer(); @@ -55,7 +63,7 @@ void DataTool::do_transfer() while(parser) { DataFile::Statement st = parser.parse(true); - if(st.valid && (st.keyword.compare(0, 2, "__") || st.keyword=="__src" || debug)) + if(st.valid && (!st.control || st.keyword=="__src" || debug)) writer->write(st); } @@ -84,6 +92,14 @@ void DataTool::do_compile() delete out; } +void DataTool::do_pack() +{ + Packer packer(*this); + for(vector::const_iterator i=in_fns.begin(); i!=in_fns.end(); ++i) + packer.pack_file(*i); + packer.create_pack(out_fn); +} + IO::Base *DataTool::open_output(const string &fn) { if(fn=="-")