Commit | Line | Data |
---|---|---|
34e49164 C |
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 | ||
91eba41f C |
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 | *) | |
34e49164 C |
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 | |
91eba41f C |
30 | let nothing () = () in |
31 | ||
34e49164 | 32 | ANSITerminal.printf [] "0 / %d" len; flush stdout; |
91eba41f C |
33 | if !Common._batch_mode |
34 | then f nothing | |
35 | else f continue_pourcentage | |
36 | ; | |
34e49164 C |
37 | Common.pr2 "" |
38 | ||
91eba41f | 39 | |
34e49164 C |
40 | let set_link () = |
41 | Common._execute_and_show_progress_func := execute_and_show_progress | |
42 | ||
43 | ||
44 | let _init_execute = | |
45 | set_link () |