Change command line options:
[tatoo.git] / src / tatoo.ml
index 1dff2a4..4d7e693 100644 (file)
@@ -27,9 +27,13 @@ let time f arg msg =
 let main () =
   let () = Options.parse () in
   let doc =
-    let fd = open_in !Options.input_file in
+    let fd, close_fd = match !Options.input_file with
+      None -> stdin, ignore
+    | Some input ->
+        let fd = open_in input in fd, fun () -> close_in fd
+    in
     let d = time Naive_tree.load_xml_file fd "parsing xml document" in
-    close_in fd; d
+    close_fd (); d
   in
   let query =
     time
@@ -78,6 +82,10 @@ let () =
   with
     Arg.Bad msg -> eprintf "Error: %s\n%!" msg; Options.usage (); exit 1
   | Sys_error msg -> eprintf "Error: %s\n%!" msg; exit 2
-  | Tree.Parse_error msg -> eprintf "Error: file %s, %s\n%!" !Options.input_file msg; exit 3
+  | Tree.Parse_error msg ->
+      eprintf "Error: %s, %s\n%!"
+        (match !Options.input_file with
+          Some s -> ("file " ^ s)
+        | None -> "[stdin]") msg; exit 3
   | Xpath.Ulexer.Error (s, e, msg) -> eprintf "Error: character %i-%i: %s\n%!" s e msg; exit 4
   | e -> eprintf "FATAL ERROR: %s\n%!" (Printexc.to_string e); exit 128