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