]> git.tdb.fi Git - libs/datafile.git/blobdiff - tool/tool.cpp
Add a compile mode to mspdatatool
[libs/datafile.git] / tool / tool.cpp
index ca415d30a0d9dc7d996d84b62021be90bc054f9e..36ee5c4abd6e760162934417a8d8ae4b1f355333 100644 (file)
@@ -12,6 +12,7 @@ Distributed under the LGPL
 #include <msp/datafile/parser.h>
 #include <msp/datafile/statement.h>
 #include <msp/datafile/writer.h>
+#include "compiler.h"
 #include "tool.h"
 
 using namespace std;
@@ -19,11 +20,14 @@ using namespace Msp;
 
 DataTool::DataTool(int argc, char **argv):
        in_fn("-"),
-       out_fn("-")
+       out_fn("-"),
+       binary(false),
+       compile(false)
 {
        GetOpt getopt;
-       getopt.add_option('o', "output", out_fn, GetOpt::REQUIRED_ARG);
        getopt.add_option('b', "binary", binary, GetOpt::NO_ARG);
+       getopt.add_option('c', "compile", compile, GetOpt::NO_ARG);
+       getopt.add_option('o', "output", out_fn, GetOpt::REQUIRED_ARG);
        getopt(argc, argv);
 
        const vector<string> &args=getopt.get_args();
@@ -53,13 +57,21 @@ int DataTool::main()
                if(binary)
                        writer.set_binary(true);
 
-               while(parser)
+               if(compile)
+               {
+                       Compiler compiler(writer);
+                       compiler.load(parser);
+               }
+               else
                {
-                       DataFile::Statement st=parser.parse();
-                       if(st.valid)
+                       while(parser)
                        {
-                               writer.write(st);
-                               out_buf.flush();
+                               DataFile::Statement st=parser.parse();
+                               if(st.valid)
+                               {
+                                       writer.write(st);
+                                       out_buf.flush();
+                               }
                        }
                }
        }