| 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 () |