sig
  val get_acp : unit -> int
  val get_console_cp : unit -> int
  val set_console_cp : int -> unit
  val get_console_output_cp : unit -> int
  val set_console_output_cp : int -> unit
  type input = Resize | Key of LTerm_key.t | Mouse of LTerm_mouse.t
  val read_console_input : Lwt_unix.file_descr -> LTerm_windows.input Lwt.t
  type text_attributes = { foreground : int; background : int; }
  type console_screen_buffer_info = {
    size : LTerm_geom.size;
    cursor_position : LTerm_geom.coord;
    attributes : LTerm_windows.text_attributes;
    window : LTerm_geom.rect;
    maximum_window_size : LTerm_geom.size;
  }
  val get_console_screen_buffer_info :
    Lwt_unix.file_descr -> LTerm_windows.console_screen_buffer_info
  type console_mode = {
    cm_echo_input : bool;
    cm_insert_mode : bool;
    cm_line_input : bool;
    cm_mouse_input : bool;
    cm_processed_input : bool;
    cm_quick_edit_mode : bool;
    cm_window_input : bool;
  }
  val get_console_mode : Lwt_unix.file_descr -> LTerm_windows.console_mode
  val set_console_mode :
    Lwt_unix.file_descr -> LTerm_windows.console_mode -> unit
  val get_console_cursor_info : Lwt_unix.file_descr -> int * bool
  val set_console_cursor_info : Lwt_unix.file_descr -> int -> bool -> unit
  val set_console_cursor_position :
    Lwt_unix.file_descr -> LTerm_geom.coord -> unit
  val set_console_text_attribute :
    Lwt_unix.file_descr -> LTerm_windows.text_attributes -> unit
  type char_info = {
    ci_char : CamomileLibrary.UChar.t;
    ci_foreground : int;
    ci_background : int;
  }
  val write_console_output :
    Lwt_unix.file_descr ->
    LTerm_windows.char_info array array ->
    LTerm_geom.size -> LTerm_geom.coord -> LTerm_geom.rect -> LTerm_geom.rect
  val fill_console_output_character :
    Lwt_unix.file_descr ->
    CamomileLibrary.UChar.t -> int -> LTerm_geom.coord -> int
end