b8c5730ab4380b9b7443c6d4d323afc7efc360b4
[tatoo.git] / src / options.ml
1 open Arg
2
3 let count = ref false
4 let input_file : string option ref = ref None
5 let output_file : string option ref = ref None
6 let queries = ref []
7 let stats = ref false
8 let compose = ref false
9 let parallel = ref false
10
11 let set_string_option r s = r := Some s
12
13 let specs = align [
14   "-c", Set count,
15         " write the number of results only";
16   "--count", Set count, " ";
17   "-s", Set stats,
18         " display timing and various statistics";
19   "--stats", Set stats, " ";
20   "-d", String (set_string_option input_file),
21         " specify the input document file [default stdin]";
22   "--doc", String (set_string_option input_file), " ";
23   "-o", String (set_string_option output_file),
24         " specify the output file [default stdout]";
25   "--out", String (set_string_option output_file), " ";
26   "-C", Set compose,
27         " compose queries: each query is applied to the results of the \
28 previous one [default run all queries from the root node]";
29   "--compose", Set compose, " ";
30   "-p", Set parallel,
31         " run all queries in parallel [default run all queries \
32 sequentially]";
33   "--parallel", Set parallel, " ";
34 ]
35
36 let usage_msg =
37   Printf.sprintf "usage: %s [options] query [query ... query]" Sys.argv.(0)
38
39 let usage () = usage specs usage_msg
40
41 let parse () =
42   parse specs (fun q -> queries := q :: !queries ) usage_msg;
43   match !queries with
44     [] -> raise (Arg.Bad "missing query")
45   | l -> queries := List.rev l