sig
  type command = string array -> unit
  type command_desc = {
    com_name : string;
    com_args : string array;
    com_more_args : string option;
    com_f : Cam_commands.command;
  }
  val register :
    ?table:(string, Cam_commands.command_desc) Hashtbl.t ->
    ?replace:bool -> Cam_commands.command_desc -> unit
  val register_before :
    ?table:(string, Cam_commands.command_desc) Hashtbl.t ->
    Cam_commands.command_desc -> unit
  val register_after :
    ?table:(string, Cam_commands.command_desc) Hashtbl.t ->
    Cam_commands.command_desc -> unit
  val get_com :
    ?table:(string, Cam_commands.command_desc) Hashtbl.t ->
    string -> Cam_commands.command_desc
  val get_com_or_fail :
    ?table:(string, Cam_commands.command_desc) Hashtbl.t ->
    string -> Cam_commands.command_desc
  val string_to_argv : string -> string array
  val argv_to_string : string array -> string
  val launch_command :
    ?history:bool ->
    ?table:(string, Cam_commands.command_desc) Hashtbl.t ->
    string -> string array -> unit
  val same_previous_command : unit -> bool
  val ask_launch_command :
    ?history:bool ->
    ?table:(string, Cam_commands.command_desc) Hashtbl.t ->
    ?width:int -> string -> string array -> unit
  val eval_command :
    ?history:bool ->
    ?table:(string, Cam_commands.command_desc) Hashtbl.t -> string -> unit
  val available_command_names :
    ?table:(string, Cam_commands.command_desc) Hashtbl.t ->
    unit -> string list
  val unit_com : string -> (unit -> unit) -> Cam_commands.command_desc
  val create_com :
    string ->
    ?more:string ->
    string array -> Cam_commands.command -> Cam_commands.command_desc
  val set_global : string -> string -> unit
  val get_global : string -> string
  val safe_get_global : string -> string
end