sig
  type input = {
    pos_in : unit -> int;
    seek_in : int -> unit;
    input_char : unit -> char option;
    input_byte : unit -> int;
    in_channel_length : int;
    set_offset : int -> unit;
    caml_channel : Stdlib.in_channel option;
    source : string;
  }
  type output = {
    pos_out : unit -> int;
    seek_out : int -> unit;
    output_char : char -> unit;
    output_byte : int -> unit;
    output_string : string -> unit;
    out_caml_channel : Stdlib.out_channel option;
    out_channel_length : unit -> int;
  }
  val no_more : int
  type caml_bytes = bytes
  type bytes
  val input_of_channel : ?source:string -> Stdlib.in_channel -> Pdfio.input
  val input_of_bytes : ?source:string -> Pdfio.bytes -> Pdfio.input
  val input_of_string : ?source:string -> string -> Pdfio.input
  val output_of_channel : Stdlib.out_channel -> Pdfio.output
  val input_output_of_bytes : int -> Pdfio.output * Pdfio.bytes Stdlib.ref
  val extract_bytes_from_input_output :
    Pdfio.output -> Pdfio.bytes Stdlib.ref -> Pdfio.bytes
  val nudge : Pdfio.input -> unit
  val rewind : Pdfio.input -> unit
  val peek_char : Pdfio.input -> char option
  val peek_byte : Pdfio.input -> int
  val read_char_back : Pdfio.input -> char option
  val read_line : Pdfio.input -> string
  val read_lines : Pdfio.input -> string list
  type rawbytes =
      (int, Stdlib.Bigarray.int8_unsigned_elt, Stdlib.Bigarray.c_layout)
      Stdlib.Bigarray.Array1.t
  val raw_of_bytes : Pdfio.bytes -> Pdfio.rawbytes
  val bytes_of_raw : Pdfio.rawbytes -> Pdfio.bytes
  val mkbytes : int -> Pdfio.bytes
  val bytes_size : Pdfio.bytes -> int
  val fillbytes : int -> Pdfio.bytes -> unit
  val print_bytes : Pdfio.bytes -> unit
  val bget : Pdfio.bytes -> int -> int
  val bget_unsafe : Pdfio.bytes -> int -> int
  val getinit : Pdfio.output -> Pdfio.bytes -> int -> int -> unit
  val bset : Pdfio.bytes -> int -> int -> unit
  val bset_unsafe : Pdfio.bytes -> int -> int -> unit
  val setinit : Pdfio.input -> Pdfio.bytes -> int -> int -> unit
  val setinit_string : Pdfio.input -> Pdfio.caml_bytes -> int -> int -> unit
  val bytes_of_input : Pdfio.input -> int -> int -> Pdfio.bytes
  val string_of_input : Pdfio.input -> string
  val bytes_of_string : string -> Pdfio.bytes
  val bytes_of_caml_bytes : Pdfio.caml_bytes -> Pdfio.bytes
  val bytes_of_list : int list -> Pdfio.bytes
  val bytes_of_charlist : char list -> Pdfio.bytes
  val bytes_of_arraylist : int array list -> Pdfio.bytes
  val bytes_of_int_array : int array -> Pdfio.bytes
  val int_array_of_bytes : Pdfio.bytes -> int array
  val int_array_of_string : string -> int array
  val string_of_int_arrays : int array list -> string
  val string_of_int_array : int array -> string
  val bytes_selfmap : (int -> int) -> Pdfio.bytes -> unit
  val string_of_bytes : Pdfio.bytes -> string
  val charlist_of_bytes : Pdfio.bytes -> char list
  val copybytes : Pdfio.bytes -> Pdfio.bytes
  val bytes_to_output_channel : Stdlib.out_channel -> Pdfio.bytes -> unit
  val bytes_of_input_channel : Stdlib.in_channel -> Pdfio.bytes
  type bitstream = {
    input : Pdfio.input;
    mutable currbyte : int;
    mutable bit : int;
    mutable bitsread : int;
  }
  val bitbytes_of_input : Pdfio.input -> Pdfio.bitstream
  type bitstream_position
  val bitstream_pos : Pdfio.bitstream -> Pdfio.bitstream_position
  val bitstream_seek : Pdfio.bitstream -> Pdfio.bitstream_position -> unit
  val getbit : Pdfio.bitstream -> bool
  val getbitint : Pdfio.bitstream -> int
  val align : Pdfio.bitstream -> unit
  val getval_32 : Pdfio.bitstream -> int -> int32
  val getval_31 : Pdfio.bitstream -> int -> int
  type bitstream_write
  val make_write_bitstream : unit -> Pdfio.bitstream_write
  val putbit : Pdfio.bitstream_write -> int -> unit
  val putval : Pdfio.bitstream_write -> int -> int32 -> unit
  val align_write : Pdfio.bitstream_write -> unit
  val write_bitstream_append_aligned :
    Pdfio.bitstream_write -> Pdfio.bitstream_write -> Pdfio.bitstream_write
  val bytes_of_write_bitstream : Pdfio.bitstream_write -> Pdfio.bytes
  val debug_next_n_chars : int -> Pdfio.input -> unit
end