coccinelle release 0.2.5
[bpt/coccinelle.git] / commons / common_extra.ml
1 (* I put those functions here and not in common.ml to try to avoid
2 * as much as possible dependencies in common.ml so I can more easily
3 * make ocaml script that just do a load common.ml without the need
4 * to load many other files (like dumper.ml, or ANSITerminal.ml and
5 * other recursive dependencies).
6 *
7 * Note that you can still use the functions below from an open Common.
8 * You don't need to do a 'open Common_extra'; loading the commons.cma is
9 * enough to make the connexions.
10 *)
11
12
13 (* how to use it ? ex in LFS:
14 * Common.execute_and_show_progress (w.prop_iprop#length) (fun k ->
15 * w.prop_iprop#iter (fun (p, ip) ->
16 * k ();
17 * ...
18 * ));
19 *
20 *)
21
22 let execute_and_show_progress len f =
23 let _count = ref 0 in
24 (* kind of continuation passed to f *)
25 let continue_pourcentage () =
26 incr _count;
27 ANSITerminal.set_cursor 1 (-1);
28 ANSITerminal.printf [] "%d / %d" !_count len; flush stdout;
29 in
30 let nothing () = () in
31
32 ANSITerminal.printf [] "0 / %d" len; flush stdout;
33 if !Common._batch_mode
34 then f nothing
35 else f continue_pourcentage
36 ;
37 Common.pr2 ""
38
39
40 let set_link () =
41 Common._execute_and_show_progress_func := execute_and_show_progress
42
43
44 let _init_execute =
45 set_link ()