123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118openCommon(*****************************************************************************)(* Purpose *)(*****************************************************************************)(*
*)(*****************************************************************************)(* Flags *)(*****************************************************************************)letverbose=reffalse(* action mode *)letaction=ref""letversion="0.3"(*****************************************************************************)(* Helpers *)(*****************************************************************************)(*****************************************************************************)(* Main action *)(*****************************************************************************)letmain_action_xs=raiseTodo(*****************************************************************************)(* Extra actions *)(*****************************************************************************)(*****************************************************************************)(* The options *)(*****************************************************************************)letall_actions()=Test_version_control.actions()@[]letoptions()=["-verbose",Arg.Setverbose," ";]@Common.options_of_actionsaction(all_actions())@Common2.cmdline_flags_devel()@Common2.cmdline_flags_verbose()@Common2.cmdline_flags_other()@["-version",Arg.Unit(fun()->pr2(spf"vcs version: %s"version);exit0;)," guess what";(* this can not be factorized in Common *)"-date",Arg.Unit(fun()->pr2"version: $Date: 2008/10/26 00:44:57 $";raise(Common2.UnixExit0))," guess what";]@[](*****************************************************************************)(* Main entry point *)(*****************************************************************************)letmain()=letusage_msg="Usage: "^Common2.basenameSys.argv.(0)^" [options] <file or dir> "^"\n"^"Options are:"in(* does side effect on many global flags *)letargs=Common.parse_options(options())usage_msgSys.argvin(* must be done after Arg.parse, because Common.profile is set by it *)Common.profile_code"Main total"(fun()->(matchargswith(* --------------------------------------------------------- *)(* actions, useful to debug subpart *)(* --------------------------------------------------------- *)|xswhenList.mem!action(Common.action_list(all_actions()))->Common.do_action!actionxs(all_actions())|_whennot(Common.null_string!action)->failwith("unrecognized action or wrong params: "^!action)(* --------------------------------------------------------- *)(* main entry *)(* --------------------------------------------------------- *)|x::xs->main_action(x::xs)(* --------------------------------------------------------- *)(* empty entry *)(* --------------------------------------------------------- *)|[]->Common.usageusage_msg(options());failwith"too few arguments"))(*****************************************************************************)let_=Common.main_boilerplate(fun()->main();)