open Types open Stringify let main () = let usage status = prerr_endline ("usage: " ^ Sys.argv.(0) ^ " command [args]"); prerr_endline "command:"; prerr_endline " help show this help page"; prerr_endline " echo TERM pretty-print a program"; prerr_endline "input program syntax:"; prerr_endline " - write star (*) instead of omega sign"; prerr_endline " - write dollar sign ($) instead of pound sign"; prerr_endline ""; prerr_endline "A TERM argument may also be omitted and passed on stdin"; prerr_endline "instead for convenient use of UNIX pipes"; exit status in let argc = Array.length Sys.argv in if argc = 1 then usage 1; let input_term i = let lexbuf = if argc > i then Lexing.from_string Sys.argv.(i) else Lexing.from_channel stdin in Parse.parse_with_error lexbuf in begin try match Sys.argv.(1) with | "help" -> usage 0 | "echo" -> print_endline (string_of_program (input_term 2)) | _ -> usage 1 with | FatalError msg -> prerr_endline msg; exit 1 end; exit 0 let () = main ()