Implement the multiple-starters feature:
[tatoo.git] / src / options.ml
index 70c2b4d..3c2239a 100644 (file)
@@ -3,8 +3,10 @@ open Arg
 let count = ref false
 let input_file : string option ref = ref None
 let output_file : string option ref = ref None
-let query = ref ""
+let queries = ref []
 let stats = ref false
+let compose = ref false
+let parallel = ref false
 
 let set_string_option r s = r := Some s
 
@@ -17,12 +19,20 @@ let specs = align [
   "--doc", String (set_string_option input_file), " ";
   "-o", String (set_string_option output_file), " specify the output file [default stdout]";
   "--out", String (set_string_option output_file), " ";
+  "-C", Set compose, " compose queries: each query is applied to the results of the previous one [default run all queries
+from the root node]";
+  "--compose", Set compose, " ";
+  "-p", Set parallel, " run all queries in parallel [default run all queries sequentially]";
+  "--parallel", Set parallel, " ";
 ]
 
-let usage_msg = Printf.sprintf "usage: %s [options] query" Sys.argv.(0)
+let usage_msg = Printf.sprintf "usage: %s [options] query [query ... query]" Sys.argv.(0)
 
 let usage () = usage specs usage_msg
 
 let parse () =
-  parse specs (fun q -> query := q) usage_msg
+  parse specs (fun q -> queries := q :: !queries ) usage_msg;
+  match !queries with
+    [] -> raise (Arg.Bad "missing query")
+  | l -> queries := List.rev l