sig
  type t =
    Unix.terminal_io = {
    mutable c_ignbrk : bool;
    mutable c_brkint : bool;
    mutable c_ignpar : bool;
    mutable c_parmrk : bool;
    mutable c_inpck : bool;
    mutable c_istrip : bool;
    mutable c_inlcr : bool;
    mutable c_igncr : bool;
    mutable c_icrnl : bool;
    mutable c_ixon : bool;
    mutable c_ixoff : bool;
    mutable c_opost : bool;
    mutable c_obaud : int;
    mutable c_ibaud : int;
    mutable c_csize : int;
    mutable c_cstopb : int;
    mutable c_cread : bool;
    mutable c_parenb : bool;
    mutable c_parodd : bool;
    mutable c_hupcl : bool;
    mutable c_clocal : bool;
    mutable c_isig : bool;
    mutable c_icanon : bool;
    mutable c_noflsh : bool;
    mutable c_echo : bool;
    mutable c_echoe : bool;
    mutable c_echok : bool;
    mutable c_echonl : bool;
    mutable c_vintr : char;
    mutable c_vquit : char;
    mutable c_verase : char;
    mutable c_vkill : char;
    mutable c_veof : char;
    mutable c_veol : char;
    mutable c_vmin : int;
    mutable c_vtime : int;
    mutable c_vstart : char;
    mutable c_vstop : char;
  }
  type setattr_when = Unix.setattr_when = TCSANOW | TCSADRAIN | TCSAFLUSH
  val tcgetattr : Unix.File_descr.t -> Unix.Terminal_io.t
  val tcsetattr :
    Unix.Terminal_io.t ->
    Unix.File_descr.t -> mode:Unix.Terminal_io.setattr_when -> unit
  val tcsendbreak : Unix.File_descr.t -> duration:int -> unit
  val tcdrain : Unix.File_descr.t -> unit
  type flush_queue = Unix.flush_queue = TCIFLUSH | TCOFLUSH | TCIOFLUSH
  val tcflush :
    Unix.File_descr.t -> mode:Unix.Terminal_io.flush_queue -> unit
  type flow_action = Unix.flow_action = TCOOFF | TCOON | TCIOFF | TCION
  val tcflow :
    Unix.File_descr.t -> mode:Unix.Terminal_io.flow_action -> unit
  val setsid : unit -> int
  val sexp_of_t : Unix.Terminal_io.t -> Sexplib.Sexp.t
  val sexp_of_setattr_when :
    Unix.Terminal_io.setattr_when -> Sexplib.Sexp.t
  val flush_queue_of_sexp :
    Sexplib.Sexp.t -> Unix.Terminal_io.flush_queue
  val sexp_of_flush_queue :
    Unix.Terminal_io.flush_queue -> Sexplib.Sexp.t
  val flow_action_of_sexp :
    Sexplib.Sexp.t -> Unix.Terminal_io.flow_action
  val sexp_of_flow_action :
    Unix.Terminal_io.flow_action -> Sexplib.Sexp.t
end