@@ -6,11 +6,9 @@ open Ext
66open Params
77
88
9- let show_config = ref false
10- let show_version () =
11- print_endline (rawversion () ) ;
12- exit 0
13-
9+ let show_version formatter terminate =
10+ Format. fprintf formatter " %s\n " (rawversion () );
11+ terminate 0
1412
1513let set_debug_flags flgs =
1614 let flgs = Ext. split flgs ',' in
@@ -52,24 +50,23 @@ let set_default_method meth =
5250 with Failure msg -> raise (Arg. Bad (" --method: " ^ msg))
5351
5452
55- (* FIXME use Arg.parse instead *)
56- let parse_args args opts mods usage_fmt =
53+ let parse_args executable_name args opts mods usage_fmt err terminate =
5754 try
58- Arg. parse_argv (Array. of_list args) opts (fun mfile -> mods := mfile :: ! mods)
59- (Printf. sprintf usage_fmt (Filename. basename Sys. executable_name))
55+ Arg. current := 0 ;
56+ Arg. parse_argv args opts (fun mfile -> mods := mfile :: ! mods)
57+ (Printf. sprintf usage_fmt (Filename. basename executable_name))
6058 with Arg. Bad msg ->
61- print_endline msg ;
62- flush stdout ;
63- exit 2
59+ Format. fprintf err " %s\n " msg;
60+ terminate 2
6461
65- let show_where () =
62+ let show_where out terminate =
6663 match stdlib_path with
6764 | Some path ->
68- Printf. printf " %s\n " path;
69- exit 0
65+ Format. fprintf out " %s\n " path;
66+ terminate 0
7067 | None ->
71- Printf. printf " N/A\n " ;
72- exit 1
68+ Format. fprintf out " N/A\n " ;
69+ terminate 1
7370
7471let set_nofp_start s =
7572 nofp_sl := s
@@ -134,7 +131,8 @@ let quote_if_needed s =
134131 end
135132
136133
137- let init () =
134+ let init ?(out =Format. std_formatter) ?(err =Format. err_formatter) ?(terminate =exit) (executable_name : string ) (args : string array ) =
135+ let show_config = ref false in
138136 let mods = ref [] in
139137 let helpfn = ref (fun () -> () ) in
140138 let show_help () = ! helpfn () in
@@ -147,11 +145,11 @@ let init () =
147145 blank;
148146 " --help" , Arg. Unit show_help, " show this help message and exit" ;
149147 " -help" , Arg. Unit show_help, " (same as --help)" ;
150- " --version" , Arg. Unit show_version, " show version number and exit" ;
148+ " --version" , Arg. Unit ( fun () -> show_version out terminate) , " show version number and exit" ;
151149 " --verbose" , Arg. Set verbose, " produce verbose messages" ;
152150 " -v" , Arg. Set verbose, " (same as --verbose)" ;
153151 blank;
154- " --where" , Arg. Unit show_where,
152+ " --where" , Arg. Unit ( fun () -> show_where out terminate) ,
155153 " show location of standard library and exit" ;
156154 " --config" , Arg. Set show_config, " show configuration and exit" ;
157155 " --summary" , Arg. Set summary,
@@ -245,44 +243,44 @@ let init () =
245243 format_of_string " Usage: %s <options> FILE ...\n options are:"
246244 in
247245 helpfn := begin fun () ->
248- Arg. usage opts
249- (Printf. sprintf usage_fmt (Filename. basename Sys. executable_name)) ;
250- exit 0
246+ Arg. usage_string opts
247+ (Printf. sprintf usage_fmt (Filename. basename executable_name))
248+ |> Format. fprintf err " %s" ;
249+ terminate 0
251250 end ;
252- let args = Array. to_list Sys. argv in
253- parse_args args opts mods usage_fmt ;
251+ parse_args executable_name args opts mods usage_fmt err terminate;
254252 if ! show_config || ! verbose then begin
255- print_endline (printconfig true ) ;
256- flush stdout
253+ Format. fprintf out " %s\n " (printconfig err true );
257254 end ;
258- if ! show_config then exit 0 ;
255+ if ! show_config then terminate 0 ;
259256 if ! mods = [] then begin
260- Arg. usage opts
257+ Arg. usage_string opts
261258 (Printf. sprintf " Need at least one module file.\n\n \
262259 Usage: %s <options> FILE ...\n options are:"
263- (Filename. basename Sys. executable_name)) ;
264- exit 2
260+ (Filename. basename executable_name))
261+ |> Format. fprintf err " %s" ;
262+ terminate 2
265263 end ;
266264 if ! summary then begin
267265 suppress_all := true ;
268266 check := false ;
269267 end ;
270268 check_zenon_ver () ;
271269 if ! Params. toolbox then begin
272- Printf. printf " \n\\ * TLAPM version %s\n "
270+ Format. fprintf out " \n\\ * TLAPM version %s\n "
273271 (Params. rawversion () );
274272 let tm = Unix. localtime (Unix. gettimeofday () ) in
275- Printf. printf " \\ * launched at %04d-%02d-%02d %02d:%02d:%02d"
273+ Format. fprintf out " \\ * launched at %04d-%02d-%02d %02d:%02d:%02d"
276274 (tm.Unix. tm_year + 1900 ) (tm.Unix. tm_mon + 1 ) tm.Unix. tm_mday
277275 tm.Unix. tm_hour tm.Unix. tm_min tm.Unix. tm_sec;
278- Printf. printf " with command line:\n\\ *" ;
279- Array. iter (fun s -> Printf. printf " %s" (quote_if_needed s)) Sys. argv ;
280- Printf. printf " \n\n %!"
276+ Format. fprintf out " with command line:\n\\ *" ;
277+ Array. iter (fun s -> Format. fprintf out " %s" (quote_if_needed s)) args ;
278+ Format. fprintf out " \n\n %!"
281279 end ;
282280 if ! use_stdin && (List. length ! mods) <> 1 then begin
283281 Arg. usage opts
284282 " Exactly 1 module has to be specified if TLAPM is invoked with\
285283 the --stdin option." ;
286- exit 2
284+ terminate 2
287285 end ;
288286 ! mods
0 commit comments