sig
  module O :
    sig
      module Raw :
        sig
          type cp =
            Config_file.Raw.cp =
              String of string
            | Int of int
            | Float of float
            | List of Cam_plug.Cam_files.O.Raw.cp list
            | Tuple of Cam_plug.Cam_files.O.Raw.cp list
            | Section of (string * Cam_plug.Cam_files.O.Raw.cp) list
          val of_string : string -> Cam_plug.Cam_files.O.Raw.cp
          val to_channel :
            Pervasives.out_channel -> Cam_plug.Cam_files.O.Raw.cp -> unit
        end
      type 'a wrappers =
        'Config_file.wrappers = {
        to_raw : '-> Cam_plug.Cam_files.O.Raw.cp;
        of_raw : Cam_plug.Cam_files.O.Raw.cp -> 'a;
      }
      exception Wrong_type of (Pervasives.out_channel -> unit)
      class type ['a] cp =
        object
          method add_hook : ('-> '-> unit) -> unit
          method get : 'a
          method get_default : 'a
          method get_default_formatted : Format.formatter -> unit
          method get_formatted : Format.formatter -> unit
          method get_help : string
          method get_help_formatted : Format.formatter -> unit
          method get_name : string list
          method get_short_name : string option
          method get_spec : Arg.spec
          method reset : unit
          method set : '-> unit
          method set_raw : Cam_plug.Cam_files.O.Raw.cp -> unit
          method set_short_name : string -> unit
        end
      type groupable_cp =
          < get_default_formatted : Format.formatter -> unit;
            get_formatted : Format.formatter -> unit; get_help : string;
            get_help_formatted : Format.formatter -> unit;
            get_name : string list; get_short_name : string option;
            get_spec : Arg.spec; reset : unit;
            set_raw : Cam_plug.Cam_files.O.Raw.cp -> unit >
      exception Double_name
      exception Missing_cp of Cam_plug.Cam_files.O.groupable_cp
      class group :
        object
          method add : 'Cam_plug.Cam_files.O.cp -> unit
          method command_line_args :
            section_separator:string -> (string * Arg.spec * string) list
          method read :
            ?obsoletes:string ->
            ?no_default:bool ->
            ?on_type_error:(Cam_plug.Cam_files.O.groupable_cp ->
                            Cam_plug.Cam_files.O.Raw.cp ->
                            (Pervasives.out_channel -> unit) ->
                            string -> Pervasives.in_channel -> unit) ->
            string -> unit
          method write : ?with_help:bool -> string -> unit
        end
      class int_cp :
        ?group:Cam_plug.Cam_files.O.group ->
        string list -> ?short_name:string -> int -> string -> [int] cp
      class float_cp :
        ?group:Cam_plug.Cam_files.O.group ->
        string list -> ?short_name:string -> float -> string -> [float] cp
      class bool_cp :
        ?group:Cam_plug.Cam_files.O.group ->
        string list -> ?short_name:string -> bool -> string -> [bool] cp
      class string_cp :
        ?group:Cam_plug.Cam_files.O.group ->
        string list -> ?short_name:string -> string -> string -> [string] cp
      class ['a] list_cp :
        'Cam_plug.Cam_files.O.wrappers ->
        ?group:Cam_plug.Cam_files.O.group ->
        string list ->
        ?short_name:string -> 'a list -> string -> ['a list] cp
      class ['a] option_cp :
        'Cam_plug.Cam_files.O.wrappers ->
        ?group:Cam_plug.Cam_files.O.group ->
        string list ->
        ?short_name:string -> 'a option -> string -> ['a option] cp
      class ['a] enumeration_cp :
        (string * 'a) list ->
        ?group:Cam_plug.Cam_files.O.group ->
        string list -> ?short_name:string -> '-> string -> ['a] cp
      class ['a, 'b] tuple2_cp :
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        ?group:Cam_plug.Cam_files.O.group ->
        string list ->
        ?short_name:string -> 'a * '-> string -> ['a * 'b] cp
      class ['a, 'b, 'c] tuple3_cp :
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        ?group:Cam_plug.Cam_files.O.group ->
        string list ->
        ?short_name:string -> 'a * 'b * '-> string -> ['a * 'b * 'c] cp
      class ['a, 'b, 'c, 'd] tuple4_cp :
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        ?group:Cam_plug.Cam_files.O.group ->
        string list ->
        ?short_name:string ->
        'a * 'b * 'c * '-> string -> ['a * 'b * 'c * 'd] cp
      class string2_cp :
        ?group:Cam_plug.Cam_files.O.group ->
        string list ->
        ?short_name:string ->
        string * string -> string -> [string, string] tuple2_cp
      class font_cp :
        ?group:Cam_plug.Cam_files.O.group ->
        string list -> ?short_name:string -> string -> string -> string_cp
      class filename_cp :
        ?group:Cam_plug.Cam_files.O.group ->
        string list -> ?short_name:string -> string -> string -> string_cp
      val int_wrappers : int Cam_plug.Cam_files.O.wrappers
      val float_wrappers : float Cam_plug.Cam_files.O.wrappers
      val bool_wrappers : bool Cam_plug.Cam_files.O.wrappers
      val string_wrappers : string Cam_plug.Cam_files.O.wrappers
      val list_wrappers :
        'Cam_plug.Cam_files.O.wrappers ->
        'a list Cam_plug.Cam_files.O.wrappers
      val option_wrappers :
        'Cam_plug.Cam_files.O.wrappers ->
        'a option Cam_plug.Cam_files.O.wrappers
      val enumeration_wrappers :
        (string * 'a) list -> 'Cam_plug.Cam_files.O.wrappers
      val tuple2_wrappers :
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        ('a * 'b) Cam_plug.Cam_files.O.wrappers
      val tuple3_wrappers :
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        ('a * 'b * 'c) Cam_plug.Cam_files.O.wrappers
      val tuple4_wrappers :
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        'Cam_plug.Cam_files.O.wrappers ->
        ('a * 'b * 'c * 'd) Cam_plug.Cam_files.O.wrappers
      class ['a] cp_custom_type :
        'Cam_plug.Cam_files.O.wrappers ->
        ?group:Cam_plug.Cam_files.O.group ->
        string list -> ?short_name:string -> '-> string -> ['a] cp
      type 'a option_class = 'Config_file.option_class
      type 'a option_record = 'Config_file.option_record
      type options_file = Config_file.options_file
      val create_options_file : string -> Cam_plug.Cam_files.O.options_file
      val set_options_file :
        Cam_plug.Cam_files.O.options_file -> string -> unit
      val load : Cam_plug.Cam_files.O.options_file -> unit
      val append : Cam_plug.Cam_files.O.options_file -> string -> unit
      val save : Cam_plug.Cam_files.O.options_file -> unit
      val save_with_help : Cam_plug.Cam_files.O.options_file -> unit
      val option_hook :
        'Cam_plug.Cam_files.O.option_record -> (unit -> unit) -> unit
      val string_option : string Cam_plug.Cam_files.O.option_class
      val color_option : string Cam_plug.Cam_files.O.option_class
      val font_option : string Cam_plug.Cam_files.O.option_class
      val int_option : int Cam_plug.Cam_files.O.option_class
      val bool_option : bool Cam_plug.Cam_files.O.option_class
      val float_option : float Cam_plug.Cam_files.O.option_class
      val string2_option :
        (string * string) Cam_plug.Cam_files.O.option_class
      val option_option :
        'Cam_plug.Cam_files.O.option_class ->
        'a option Cam_plug.Cam_files.O.option_class
      val list_option :
        'Cam_plug.Cam_files.O.option_class ->
        'a list Cam_plug.Cam_files.O.option_class
      val sum_option :
        (string * 'a) list -> 'Cam_plug.Cam_files.O.option_class
      val tuple2_option :
        'Cam_plug.Cam_files.O.option_class *
        'Cam_plug.Cam_files.O.option_class ->
        ('a * 'b) Cam_plug.Cam_files.O.option_class
      val tuple3_option :
        'Cam_plug.Cam_files.O.option_class *
        'Cam_plug.Cam_files.O.option_class *
        'Cam_plug.Cam_files.O.option_class ->
        ('a * 'b * 'c) Cam_plug.Cam_files.O.option_class
      val tuple4_option :
        'Cam_plug.Cam_files.O.option_class *
        'Cam_plug.Cam_files.O.option_class *
        'Cam_plug.Cam_files.O.option_class *
        'Cam_plug.Cam_files.O.option_class ->
        ('a * 'b * 'c * 'd) Cam_plug.Cam_files.O.option_class
      val ( !! ) : 'Cam_plug.Cam_files.O.option_record -> 'a
      val ( =:= ) : 'Cam_plug.Cam_files.O.option_record -> '-> unit
      val shortname : 'Cam_plug.Cam_files.O.option_record -> string
      val get_help : 'Cam_plug.Cam_files.O.option_record -> string
      type option_value =
        Config_file.option_value =
          Module of Cam_plug.Cam_files.O.option_module
        | StringValue of string
        | IntValue of int
        | FloatValue of float
        | List of Cam_plug.Cam_files.O.option_value list
        | SmallList of Cam_plug.Cam_files.O.option_value list
      and option_module = (string * Cam_plug.Cam_files.O.option_value) list
      val define_option_class :
        string ->
        (Cam_plug.Cam_files.O.option_value -> 'a) ->
        ('-> Cam_plug.Cam_files.O.option_value) ->
        'Cam_plug.Cam_files.O.option_class
      val to_value :
        'Cam_plug.Cam_files.O.option_class ->
        '-> Cam_plug.Cam_files.O.option_value
      val from_value :
        'Cam_plug.Cam_files.O.option_class ->
        Cam_plug.Cam_files.O.option_value -> 'a
      val value_to_string : Cam_plug.Cam_files.O.option_value -> string
      val string_to_value : string -> Cam_plug.Cam_files.O.option_value
      val value_to_int : Cam_plug.Cam_files.O.option_value -> int
      val int_to_value : int -> Cam_plug.Cam_files.O.option_value
      val bool_of_string : string -> bool
      val value_to_bool : Cam_plug.Cam_files.O.option_value -> bool
      val bool_to_value : bool -> Cam_plug.Cam_files.O.option_value
      val value_to_float : Cam_plug.Cam_files.O.option_value -> float
      val float_to_value : float -> Cam_plug.Cam_files.O.option_value
      val value_to_string2 :
        Cam_plug.Cam_files.O.option_value -> string * string
      val string2_to_value :
        string * string -> Cam_plug.Cam_files.O.option_value
      val value_to_list :
        (Cam_plug.Cam_files.O.option_value -> 'a) ->
        Cam_plug.Cam_files.O.option_value -> 'a list
      val list_to_value :
        ('-> Cam_plug.Cam_files.O.option_value) ->
        'a list -> Cam_plug.Cam_files.O.option_value
    end
  type file_type = string
  type rule =
    Cam_files.rule = {
    rule_name : string;
    rule_f : string array -> string -> bool;
  }
  val ft_unknown : string
  val rc_ft : string
  val ft_ini : Cam_plug.Cam_files.O.group
  val save_ft : unit -> unit
  val load_ft : unit -> unit
  val value_to_ft_handler :
    Cam_plug.Cam_files.O.Raw.cp -> string * string list
  val ft_handler_to_value :
    string * string list -> Cam_plug.Cam_files.O.Raw.cp
  val ft_handler_cp_wrapper :
    (string * string list) Cam_plug.Cam_files.O.wrappers
  val value_to_rule : Cam_plug.Cam_files.O.Raw.cp -> string * string
  val rule_to_value : string * string -> Cam_plug.Cam_files.O.Raw.cp
  val rule_cp_wrapper : (string * string) Cam_plug.Cam_files.O.wrappers
  val default_editor_command : string
  val default_ft_rules_and_handlers : (string * string * string list) list
  val default_ft_rules : (string * string) list
  val default_ft_handlers : (string * string list) list
  val ft_rules :
    (Cam_plug.Cam_files.file_type * string) Cam_plug.Cam_files.O.list_cp
  val ft_handlers :
    (Cam_plug.Cam_files.file_type * string list) Cam_plug.Cam_files.O.list_cp
  val default_open_file_command : Cam_plug.Cam_files.O.string_cp
  module C :
    sig
      type parameter_kind = Configwin.parameter_kind
      type configuration_structure =
        Configwin.configuration_structure =
          Section of string * Cam_plug.Cam_files.C.parameter_kind list
        | Section_list of string *
            Cam_plug.Cam_files.C.configuration_structure list
      type return_button =
        Configwin.return_button =
          Return_apply
        | Return_ok
        | Return_cancel
      val string_to_key : string -> Gdk.Tags.modifier list * int
      val key_to_string : Gdk.Tags.modifier list * int -> string
      val key_cp_wrapper :
        (Gdk.Tags.modifier list * int) Config_file.wrappers
      class key_cp :
        ?group:Config_file.group ->
        string list ->
        ?short_name:string ->
        Gdk.Tags.modifier list * int ->
        string -> [Gdk.Tags.modifier list * int] Config_file.cp_custom_type
      val string :
        ?editable:bool ->
        ?expand:bool ->
        ?help:string ->
        ?f:(string -> unit) ->
        string -> string -> Cam_plug.Cam_files.C.parameter_kind
      val custom_string :
        ?editable:bool ->
        ?expand:bool ->
        ?help:string ->
        ?f:('-> unit) ->
        to_string:('-> string) ->
        of_string:(string -> 'a) ->
        string -> '-> Cam_plug.Cam_files.C.parameter_kind
      val bool :
        ?editable:bool ->
        ?help:string ->
        ?f:(bool -> unit) ->
        string -> bool -> Cam_plug.Cam_files.C.parameter_kind
      val strings :
        ?editable:bool ->
        ?help:string ->
        ?f:(string list -> unit) ->
        ?eq:(string -> string -> bool) ->
        ?add:(unit -> string list) ->
        string -> string list -> Cam_plug.Cam_files.C.parameter_kind
      val list :
        ?editable:bool ->
        ?help:string ->
        ?f:('a list -> unit) ->
        ?eq:('-> '-> bool) ->
        ?edit:('-> 'a) ->
        ?add:(unit -> 'a list) ->
        ?titles:string list ->
        ?color:('-> string option) ->
        string ->
        ('-> string list) -> 'a list -> Cam_plug.Cam_files.C.parameter_kind
      val color :
        ?editable:bool ->
        ?expand:bool ->
        ?help:string ->
        ?f:(string -> unit) ->
        string -> string -> Cam_plug.Cam_files.C.parameter_kind
      val font :
        ?editable:bool ->
        ?expand:bool ->
        ?help:string ->
        ?f:(string -> unit) ->
        string -> string -> Cam_plug.Cam_files.C.parameter_kind
      val combo :
        ?editable:bool ->
        ?expand:bool ->
        ?help:string ->
        ?f:(string -> unit) ->
        ?new_allowed:bool ->
        ?blank_allowed:bool ->
        string ->
        string list -> string -> Cam_plug.Cam_files.C.parameter_kind
      val text :
        ?editable:bool ->
        ?expand:bool ->
        ?help:string ->
        ?f:(string -> unit) ->
        string -> string -> Cam_plug.Cam_files.C.parameter_kind
      val custom_text :
        ?editable:bool ->
        ?expand:bool ->
        ?help:string ->
        ?f:('-> unit) ->
        to_string:('-> string) ->
        of_string:(string -> 'a) ->
        string -> '-> Cam_plug.Cam_files.C.parameter_kind
      val html :
        ?editable:bool ->
        ?expand:bool ->
        ?help:string ->
        ?f:(string -> unit) ->
        string -> string -> Cam_plug.Cam_files.C.parameter_kind
      val filename :
        ?editable:bool ->
        ?expand:bool ->
        ?help:string ->
        ?f:(string -> unit) ->
        string -> string -> Cam_plug.Cam_files.C.parameter_kind
      val filenames :
        ?editable:bool ->
        ?help:string ->
        ?f:(string list -> unit) ->
        ?eq:(string -> string -> bool) ->
        string -> string list -> Cam_plug.Cam_files.C.parameter_kind
      val date :
        ?editable:bool ->
        ?expand:bool ->
        ?help:string ->
        ?f:(int * int * int -> unit) ->
        ?f_string:(int * int * int -> string) ->
        string -> int * int * int -> Cam_plug.Cam_files.C.parameter_kind
      val hotkey :
        ?editable:bool ->
        ?expand:bool ->
        ?help:string ->
        ?f:(Gdk.Tags.modifier list * int -> unit) ->
        string ->
        Gdk.Tags.modifier list * int -> Cam_plug.Cam_files.C.parameter_kind
      val custom :
        ?label:string ->
        GPack.box ->
        (unit -> unit) -> bool -> Cam_plug.Cam_files.C.parameter_kind
      val edit :
        ?apply:(unit -> unit) ->
        string ->
        ?width:int ->
        ?height:int ->
        Cam_plug.Cam_files.C.configuration_structure list ->
        Cam_plug.Cam_files.C.return_button
      val get :
        string ->
        ?width:int ->
        ?height:int ->
        Cam_plug.Cam_files.C.configuration_structure list ->
        Cam_plug.Cam_files.C.return_button
      val simple_edit :
        ?apply:(unit -> unit) ->
        string ->
        ?width:int ->
        ?height:int ->
        Cam_plug.Cam_files.C.parameter_kind list ->
        Cam_plug.Cam_files.C.return_button
      val simple_get :
        string ->
        ?width:int ->
        ?height:int ->
        Cam_plug.Cam_files.C.parameter_kind list ->
        Cam_plug.Cam_files.C.return_button
      val box :
        Cam_plug.Cam_files.C.parameter_kind list ->
        GData.tooltips -> GPack.box * (unit -> unit)
      val tabbed_box :
        Cam_plug.Cam_files.C.configuration_structure list ->
        (string * (unit -> unit)) list -> GData.tooltips -> GPack.box
    end
  val file_type_choices : unit -> Cam_plug.Cam_files.file_type list
  type conf_ft =
    Cam_files.conf_ft = {
    mutable conf_ft : string;
    mutable conf_rule : string;
  }
  val params_for_ft_rule :
    Cam_plug.Cam_files.rule list ->
    Cam_plug.Cam_files.conf_ft -> Cam_plug.Cam_files.C.parameter_kind list
  val edit_ft_rules : Cam_plug.Cam_files.rule list -> unit
  type conf_fth =
    Cam_files.conf_fth = {
    mutable conf_ft : string;
    mutable conf_hdls : string list;
  }
  val params_for_ft :
    Cam_plug.Cam_files.conf_fth -> Cam_plug.Cam_files.C.parameter_kind list
  val edit_ft_handlers : unit -> unit
  val rules : (string, Cam_plug.Cam_files.rule) Hashtbl.t
  val register_rule : Cam_plug.Cam_files.rule -> unit
  val file_types : unit -> Cam_plug.Cam_files.file_type list
  val file_type_of_file : string -> Cam_plug.Cam_files.file_type
  val _regexp_rule : string array -> string -> bool
  val file_type_handlers :
    (Cam_plug.Cam_files.file_type, string list) Hashtbl.t
  val associate_handler : Cam_plug.Cam_files.file_type -> string -> unit
  val command_on_files : string -> string list -> unit
  val edition_commands_menu_entries :
    ?line:int -> string -> GToolbox.menu_entry list
  val popup_file_commands_menu : string -> unit
  val _configure_ft_rules : '-> unit
  val _configure_ft_handlers : '-> unit
end