- let _ = Arg.parse spec argument usage_msg in
- match !args with
- [] -> Arg.usage spec usage_msg; exit 1
- | l -> Array.of_list (List.rev l)
+ try
+ let idash = find_dash Sys.argv in
+ let argv = Array.sub Sys.argv 0 idash in
+ let cmd = Array.sub Sys.argv (idash+1) (Array.length Sys.argv - idash - 1) in
+ let () =
+ Arg.parse_argv argv spec ignore usage_msg
+ in
+ if Array.length cmd = 0 then (Arg.usage spec usage_msg; exit 1);
+ cmd
+ with
+ Arg.Bad(s) -> Printf.eprintf "%s\n" s; exit 1
+ | Arg.Help(s) -> Printf.printf "%s\n" s; exit 0
+ | Not_found -> Arg.usage spec usage_msg; exit 1