sig
  type read_handler = string -> int -> int -> int
  val read_raw_byte : string -> Dfm.Reader.read_handler -> int
  val read_raw_int8 : Dfm.Reader.read_handler -> int
  val read_raw_int16 : Dfm.Reader.read_handler -> int
  val read_raw_int32 : Dfm.Reader.read_handler -> int32
  val read_raw_int64 : Dfm.Reader.read_handler -> int64
  val read_raw_extended : Dfm.Reader.read_handler -> float * (int64 * int)
  val read_raw_date : Dfm.Reader.read_handler -> float
  val read_raw_short_string : Dfm.Reader.read_handler -> string
  val read_raw_zero_terminated_string : Dfm.Reader.read_handler -> string
  val read_raw_long_string : Dfm.Reader.read_handler -> string
  val read_raw_wide_string : Dfm.Reader.read_handler -> Unicode.utf16_string
  val read_raw_binary : Dfm.Reader.read_handler -> Dfm.byte_array
  val read_value : Dfm.Reader.read_handler -> Dfm.value_type
  val read_int : Dfm.Reader.read_handler -> int64
  val read_set_element :
    Dfm.Reader.read_handler ->
    [ `char of char | `int of int | `tag of string | `wchar of int ] option
  val read_list : Dfm.Reader.read_handler -> int option
  val read_variant :
    Dfm.Reader.read_handler ->
    [ `binary of Dfm.byte_array
    | `bool of bool
    | `char of char
    | `collection
    | `currency of float
    | `efloat of float * (int64 * int)
    | `float of float
    | `int of int
    | `int32 of int32
    | `int64 of int64
    | `list
    | `nil
    | `null
    | `set
    | `sfloat of float
    | `string of string
    | `tag of string
    | `time of float
    | `wchar of int
    | `wstring of Unicode.utf16_string ]
  val read_property_name : Dfm.Reader.read_handler -> string option
  val read_resource_header : Dfm.Reader.read_handler -> string
  val read_signature : Dfm.Reader.read_handler -> unit
  val read_component :
    Dfm.Reader.read_handler ->
    (Dfm.filer_flags * int * string * string) option
  val create :
    ?resource_header:bool ->
    string ->
    Pervasives.in_channel ->
    [> `reading of
         string Pervasives.ref *
         [> `binary of Dfm.byte_array
          | `bool of bool
          | `char of char
          | `end_of_list
          | `end_of_record
          | `float of float
          | `int of int
          | `int32 of int32
          | `int64 of int64
          | `list of [> `any ]
          | `nil
          | `null
          | `record
          | `string of string
          | `tag of string
          | `time of float ]
         Pervasives.ref * (unit -> unit) * (float -> float) ]
end