sig
  type command = string
  val rc_dir : string
  val display_message : string -> unit
  class type embedded_app =
    object
      method box : GPack.box
      method close : unit
      method init_window : GWindow.window -> unit
    end
  val add_embedded_app :
    Cam_plug.command -> (unit -> Cam_plug.embedded_app) -> unit
  val add_command :
    Cam_plug.command -> string -> (string list -> unit) -> unit
  val available_commands : unit -> Cam_plug.command list
  val add_config_box : (unit -> Configwin.configuration_structure) -> unit
  val selected_dir : unit -> string option
  type cvs_status =
      Up_to_date
    | Locally_modified
    | Locally_added
    | Locally_removed
    | Needs_checkout
    | Needs_Patch
    | Needs_Merge
    | Conflicts_on_merge
    | Unknown
  type editor =
      Efuns
    | Dbforge
    | Emacs
    | XEmacs
    | Report
    | Zoggy
    | Custom_editor of string
  type file_type = {
    mutable ft_regexp_string : string;
    mutable ft_regexp : Str.regexp;
    mutable ft_name : string;
    mutable ft_color : string option;
    mutable ft_edit : Cam_plug.editor;
    mutable ft_templates : string list;
    mutable ft_binary : bool;
  }
  type file = {
    f_name : string;
    f_abs_name : string;
    f_date : float;
    f_date_string : string;
    f_work_rev : string;
    f_rep_rev : string;
    f_status : Cam_plug.cvs_status;
    mutable f_type : Cam_plug.file_type;
  }
  val selected_files : unit -> Cam_plug.file list
  val eval : string -> unit -> unit
  val background_execute :
    ?width:int -> ?height:int -> Cam_plug.command -> unit -> unit
  val background_execute_with_subst :
    ?width:int -> ?height:int -> Cam_plug.command -> unit -> unit
  class type editor_app =
    object
      method changed : bool
      method close : unit
      method reload : unit
      method save : unit
    end
  val add_editor :
    string ->
    (?char:int -> Cam_plug.file -> Cam_plug.editor_app option) -> unit
  val close_file : Cam_plug.file -> unit
  module Options :
    sig
      type 'a option_class
      type 'a option_record
      type options_file
      val create_options_file : string -> Cam_plug.Options.options_file
      val set_options_file : Cam_plug.Options.options_file -> string -> unit
      val prune_file : Cam_plug.Options.options_file -> unit
      val load : Cam_plug.Options.options_file -> unit
      val append : Cam_plug.Options.options_file -> string -> unit
      val save : Cam_plug.Options.options_file -> unit
      val save_with_help : Cam_plug.Options.options_file -> unit
      val define_option :
        Cam_plug.Options.options_file ->
        string list ->
        string ->
        'Cam_plug.Options.option_class ->
        '-> 'Cam_plug.Options.option_record
      val option_hook :
        'Cam_plug.Options.option_record -> (unit -> unit) -> unit
      val string_option : string Cam_plug.Options.option_class
      val color_option : string Cam_plug.Options.option_class
      val font_option : string Cam_plug.Options.option_class
      val int_option : int Cam_plug.Options.option_class
      val bool_option : bool Cam_plug.Options.option_class
      val float_option : float Cam_plug.Options.option_class
      val string2_option : (string * string) Cam_plug.Options.option_class
      val list_option :
        'Cam_plug.Options.option_class ->
        'a list Cam_plug.Options.option_class
      val smalllist_option :
        'Cam_plug.Options.option_class ->
        'a list Cam_plug.Options.option_class
      val sum_option : (string * 'a) list -> 'Cam_plug.Options.option_class
      val tuple2_option :
        'Cam_plug.Options.option_class * 'Cam_plug.Options.option_class ->
        ('a * 'b) Cam_plug.Options.option_class
      val tuple3_option :
        'Cam_plug.Options.option_class * 'Cam_plug.Options.option_class *
        'Cam_plug.Options.option_class ->
        ('a * 'b * 'c) Cam_plug.Options.option_class
      val ( !! ) : 'Cam_plug.Options.option_record -> 'a
      val ( =:= ) : 'Cam_plug.Options.option_record -> '-> unit
      val shortname : 'Cam_plug.Options.option_record -> string
      val get_help : 'Cam_plug.Options.option_record -> string
      val get_class :
        'Cam_plug.Options.option_record -> 'Cam_plug.Options.option_class
      val class_hook :
        'Cam_plug.Options.option_class ->
        ('Cam_plug.Options.option_record -> unit) -> unit
      type option_value =
          Module of Cam_plug.Options.option_module
        | StringValue of string
        | IntValue of int
        | FloatValue of float
        | List of Cam_plug.Options.option_value list
        | SmallList of Cam_plug.Options.option_value list
      and option_module = (string * Cam_plug.Options.option_value) list
      val define_option_class :
        string ->
        (Cam_plug.Options.option_value -> 'a) ->
        ('-> Cam_plug.Options.option_value) ->
        'Cam_plug.Options.option_class
      val to_value :
        'Cam_plug.Options.option_class ->
        '-> Cam_plug.Options.option_value
      val from_value :
        'Cam_plug.Options.option_class ->
        Cam_plug.Options.option_value -> 'a
      val value_to_string : Cam_plug.Options.option_value -> string
      val string_to_value : string -> Cam_plug.Options.option_value
      val value_to_int : Cam_plug.Options.option_value -> int
      val int_to_value : int -> Cam_plug.Options.option_value
      val bool_of_string : string -> bool
      val value_to_bool : Cam_plug.Options.option_value -> bool
      val bool_to_value : bool -> Cam_plug.Options.option_value
      val value_to_float : Cam_plug.Options.option_value -> float
      val float_to_value : float -> Cam_plug.Options.option_value
      val value_to_string2 : Cam_plug.Options.option_value -> string * string
      val string2_to_value : string * string -> Cam_plug.Options.option_value
      val value_to_list :
        (Cam_plug.Options.option_value -> 'a) ->
        Cam_plug.Options.option_value -> 'a list
      val list_to_value :
        ('-> Cam_plug.Options.option_value) ->
        'a list -> Cam_plug.Options.option_value
      val smalllist_to_value :
        ('-> Cam_plug.Options.option_value) ->
        'a list -> Cam_plug.Options.option_value
      val set_simple_option :
        Cam_plug.Options.options_file -> string -> string -> unit
      val simple_options :
        Cam_plug.Options.options_file -> (string * string) list
      val get_simple_option :
        Cam_plug.Options.options_file -> string -> string
      val set_option_hook :
        Cam_plug.Options.options_file -> string -> (unit -> unit) -> unit
      val set_string_wrappers :
        'Cam_plug.Options.option_record ->
        ('-> string) -> (string -> 'a) -> unit
      val simple_args :
        Cam_plug.Options.options_file -> (string * Arg.spec * string) list
    end
  module View :
    sig
      class type view =
        object
          method coerce : GObj.widget
          method display_dir : string option -> unit
        end
      val add_view : Cam_plug.View.view -> string -> unit
    end
end