sig
  type window
  type screen
  type terminal
  type chtype = int
  type attr_t = int
  type err = bool
  val initscr : unit -> Curses.window
  val endwin : unit -> unit
  val isendwin : unit -> bool
  val newterm : string -> Unix.file_descr -> Unix.file_descr -> Curses.screen
  val set_term : Curses.screen -> unit
  val delscreen : Curses.screen -> unit
  val stdscr : unit -> Curses.window
  val getyx : Curses.window -> int * int
  val getparyx : Curses.window -> int * int
  val getbegyx : Curses.window -> int * int
  val getmaxyx : Curses.window -> int * int
  val move : int -> int -> Curses.err
  val wmove : Curses.window -> int -> int -> Curses.err
  module Acs :
    sig
      type acs = {
        ulcorner : Curses.chtype;
        llcorner : Curses.chtype;
        urcorner : Curses.chtype;
        lrcorner : Curses.chtype;
        ltee : Curses.chtype;
        rtee : Curses.chtype;
        btee : Curses.chtype;
        ttee : Curses.chtype;
        hline : Curses.chtype;
        vline : Curses.chtype;
        plus : Curses.chtype;
        s1 : Curses.chtype;
        s9 : Curses.chtype;
        diamond : Curses.chtype;
        ckboard : Curses.chtype;
        degree : Curses.chtype;
        plminus : Curses.chtype;
        bullet : Curses.chtype;
        larrow : Curses.chtype;
        rarrow : Curses.chtype;
        darrow : Curses.chtype;
        uarrow : Curses.chtype;
        board : Curses.chtype;
        lantern : Curses.chtype;
        block : Curses.chtype;
        s3 : Curses.chtype;
        s7 : Curses.chtype;
        lequal : Curses.chtype;
        gequal : Curses.chtype;
        pi : Curses.chtype;
        nequal : Curses.chtype;
        sterling : Curses.chtype;
      }
      val bssb : Curses.Acs.acs -> Curses.chtype
      val ssbb : Curses.Acs.acs -> Curses.chtype
      val bbss : Curses.Acs.acs -> Curses.chtype
      val sbbs : Curses.Acs.acs -> Curses.chtype
      val sbss : Curses.Acs.acs -> Curses.chtype
      val sssb : Curses.Acs.acs -> Curses.chtype
      val ssbs : Curses.Acs.acs -> Curses.chtype
      val bsss : Curses.Acs.acs -> Curses.chtype
      val bsbs : Curses.Acs.acs -> Curses.chtype
      val sbsb : Curses.Acs.acs -> Curses.chtype
      val ssss : Curses.Acs.acs -> Curses.chtype
    end
  val get_acs_codes : unit -> Curses.Acs.acs
  val addch : Curses.chtype -> Curses.err
  val waddch : Curses.window -> Curses.chtype -> Curses.err
  val mvaddch : int -> int -> Curses.chtype -> Curses.err
  val mvwaddch : Curses.window -> int -> int -> Curses.chtype -> Curses.err
  val echochar : Curses.chtype -> Curses.err
  val wechochar : Curses.window -> Curses.chtype -> Curses.err
  val addchstr : Curses.chtype array -> Curses.err
  val waddchstr : Curses.window -> Curses.chtype array -> Curses.err
  val mvaddchstr : int -> int -> Curses.chtype array -> Curses.err
  val mvwaddchstr :
    Curses.window -> int -> int -> Curses.chtype array -> Curses.err
  val addchnstr : Curses.chtype array -> int -> int -> Curses.err
  val waddchnstr :
    Curses.window -> Curses.chtype array -> int -> int -> Curses.err
  val mvaddchnstr :
    int -> int -> Curses.chtype array -> int -> int -> Curses.err
  val mvwaddchnstr :
    Curses.window ->
    int -> int -> Curses.chtype array -> int -> int -> Curses.err
  val addstr : string -> Curses.err
  val waddstr : Curses.window -> string -> Curses.err
  val mvaddstr : int -> int -> string -> Curses.err
  val mvwaddstr : Curses.window -> int -> int -> string -> Curses.err
  val addnstr : string -> int -> int -> Curses.err
  val waddnstr : Curses.window -> string -> int -> int -> Curses.err
  val mvaddnstr : int -> int -> string -> int -> int -> Curses.err
  val mvwaddnstr :
    Curses.window -> int -> int -> string -> int -> int -> Curses.err
  val insch : Curses.chtype -> Curses.err
  val winsch : Curses.window -> Curses.chtype -> Curses.err
  val mvinsch : int -> int -> Curses.chtype -> Curses.err
  val mvwinsch : Curses.window -> int -> int -> Curses.chtype -> Curses.err
  val insstr : string -> Curses.err
  val winsstr : Curses.window -> string -> Curses.err
  val mvinsstr : int -> int -> string -> Curses.err
  val mvwinsstr : Curses.window -> int -> int -> string -> Curses.err
  val insnstr : string -> int -> int -> Curses.err
  val winsnstr : Curses.window -> string -> int -> int -> Curses.err
  val mvinsnstr : int -> int -> string -> int -> int -> Curses.err
  val mvwinsnstr :
    Curses.window -> int -> int -> string -> int -> int -> Curses.err
  val delch : unit -> Curses.err
  val wdelch : Curses.window -> Curses.err
  val mvdelch : int -> int -> Curses.err
  val mvwdelch : Curses.window -> int -> int -> Curses.err
  module A :
    sig
      val normal : int
      val attributes : int
      val chartext : int
      val color : int
      val standout : int
      val underline : int
      val reverse : int
      val blink : int
      val dim : int
      val bold : int
      val altcharset : int
      val invis : int
      val protect : int
      val horizontal : int
      val left : int
      val low : int
      val right : int
      val top : int
      val vertical : int
      val combine : int list -> int
      val color_pair : int -> int
      val pair_number : int -> int
    end
  module WA :
    sig
      val normal : int
      val attributes : int
      val chartext : int
      val color : int
      val standout : int
      val underline : int
      val reverse : int
      val blink : int
      val dim : int
      val bold : int
      val altcharset : int
      val invis : int
      val protect : int
      val horizontal : int
      val left : int
      val low : int
      val right : int
      val top : int
      val vertical : int
      val combine : int list -> int
      val color_pair : int -> int
      val pair_number : int -> int
    end
  val attroff : int -> unit
  val wattroff : Curses.window -> int -> unit
  val attron : int -> unit
  val wattron : Curses.window -> int -> unit
  val attrset : int -> unit
  val wattrset : Curses.window -> int -> unit
  val standend : unit -> unit
  val wstandend : Curses.window -> unit
  val standout : unit -> unit
  val wstandout : Curses.window -> unit
  val attr_off : Curses.attr_t -> unit
  val wattr_off : Curses.window -> Curses.attr_t -> unit
  val attr_on : Curses.attr_t -> unit
  val wattr_on : Curses.window -> Curses.attr_t -> unit
  val attr_set : Curses.attr_t -> int -> unit
  val wattr_set : Curses.window -> Curses.attr_t -> int -> unit
  val chgat : int -> Curses.attr_t -> int -> unit
  val wchgat : Curses.window -> int -> Curses.attr_t -> int -> unit
  val mvchgat : int -> int -> int -> Curses.attr_t -> int -> unit
  val mvwchgat :
    Curses.window -> int -> int -> int -> Curses.attr_t -> int -> unit
  val inch : unit -> Curses.chtype
  val winch : Curses.window -> Curses.chtype
  val mvinch : int -> int -> Curses.chtype
  val mvwinch : Curses.window -> int -> int -> Curses.chtype
  val inchstr : Curses.chtype array -> Curses.err
  val winchstr : Curses.window -> Curses.chtype array -> Curses.err
  val mvinchstr : int -> int -> Curses.chtype array -> Curses.err
  val mvwinchstr :
    Curses.window -> int -> int -> Curses.chtype array -> Curses.err
  val inchnstr : Curses.chtype array -> int -> int -> Curses.err
  val winchnstr :
    Curses.window -> Curses.chtype array -> int -> int -> Curses.err
  val mvinchnstr :
    int -> int -> Curses.chtype array -> int -> int -> Curses.err
  val mvwinchnstr :
    Curses.window ->
    int -> int -> Curses.chtype array -> int -> int -> Curses.err
  val instr : string -> Curses.err
  val winstr : Curses.window -> string -> Curses.err
  val mvinstr : int -> int -> string -> Curses.err
  val mvwinstr : Curses.window -> int -> int -> string -> Curses.err
  val innstr : string -> int -> int -> Curses.err
  val winnstr : Curses.window -> string -> int -> int -> Curses.err
  val mvinnstr : int -> int -> string -> int -> int -> Curses.err
  val mvwinnstr :
    Curses.window -> int -> int -> string -> int -> int -> Curses.err
  val bkgdset : Curses.chtype -> unit
  val wbkgdset : Curses.window -> Curses.chtype -> unit
  val bkgd : Curses.chtype -> unit
  val wbkgd : Curses.window -> Curses.chtype -> unit
  val getbkgd : Curses.window -> Curses.chtype
  val deleteln : unit -> Curses.err
  val wdeleteln : Curses.window -> Curses.err
  val insdelln : int -> Curses.err
  val winsdelln : Curses.window -> int -> Curses.err
  val insertln : unit -> Curses.err
  val winsertln : Curses.window -> Curses.err
  module Key :
    sig
      val code_yes : int
      val min : int
      val break : int
      val down : int
      val up : int
      val left : int
      val right : int
      val home : int
      val backspace : int
      val f0 : int
      val dl : int
      val il : int
      val dc : int
      val ic : int
      val eic : int
      val clear : int
      val eos : int
      val eol : int
      val sf : int
      val sr : int
      val npage : int
      val ppage : int
      val stab : int
      val ctab : int
      val catab : int
      val enter : int
      val sreset : int
      val reset : int
      val print : int
      val ll : int
      val a1 : int
      val a3 : int
      val b2 : int
      val c1 : int
      val c3 : int
      val btab : int
      val beg : int
      val cancel : int
      val close : int
      val command : int
      val copy : int
      val create : int
      val end_ : int
      val exit : int
      val find : int
      val help : int
      val mark : int
      val message : int
      val move : int
      val next : int
      val open_ : int
      val options : int
      val previous : int
      val redo : int
      val reference : int
      val refresh : int
      val replace : int
      val restart : int
      val resume : int
      val save : int
      val sbeg : int
      val scancel : int
      val scommand : int
      val scopy : int
      val screate : int
      val sdc : int
      val sdl : int
      val select : int
      val send : int
      val seol : int
      val sexit : int
      val sfind : int
      val shelp : int
      val shome : int
      val sic : int
      val sleft : int
      val smessage : int
      val smove : int
      val snext : int
      val soptions : int
      val sprevious : int
      val sprint : int
      val sredo : int
      val sreplace : int
      val sright : int
      val srsume : int
      val ssave : int
      val ssuspend : int
      val sundo : int
      val suspend : int
      val undo : int
      val mouse : int
      val resize : int
      val max : int
      val f : int -> int
    end
  val getch : unit -> int
  val wgetch : Curses.window -> int
  val mvgetch : int -> int -> int
  val mvwgetch : Curses.window -> int -> int -> int
  val ungetch : int -> Curses.err
  val getstr : string -> Curses.err
  val wgetstr : Curses.window -> string -> Curses.err
  val mvgetstr : int -> int -> string -> Curses.err
  val mvwgetstr : Curses.window -> int -> int -> string -> Curses.err
  val getnstr : string -> int -> int -> Curses.err
  val wgetnstr : Curses.window -> string -> int -> int -> Curses.err
  val mvgetnstr : int -> int -> string -> int -> int -> Curses.err
  val mvwgetnstr :
    Curses.window -> int -> int -> string -> int -> int -> Curses.err
  val newwin : int -> int -> int -> int -> Curses.window
  val delwin : Curses.window -> Curses.err
  val mvwin : Curses.window -> int -> int -> Curses.err
  val subwin : Curses.window -> int -> int -> int -> int -> Curses.window
  val derwin : Curses.window -> int -> int -> int -> int -> Curses.window
  val mvderwin : Curses.window -> int -> int -> Curses.err
  val dupwin : Curses.window -> Curses.window
  val wsyncup : Curses.window -> unit
  val syncok : Curses.window -> bool -> Curses.err
  val wcursyncup : Curses.window -> unit
  val wsyncdown : Curses.window -> unit
  val winch_handler_on : unit -> unit
  val winch_handler_off : unit -> unit
  val get_size : unit -> int * int
  val get_size_fd : Unix.file_descr -> int * int
  val null_window : Curses.window
  val refresh : unit -> Curses.err
  val wrefresh : Curses.window -> Curses.err
  val wnoutrefresh : Curses.window -> Curses.err
  val doupdate : unit -> Curses.err
  val redrawwin : Curses.window -> Curses.err
  val wredrawln : Curses.window -> int -> int -> Curses.err
  val wresize : Curses.window -> int -> int -> Curses.err
  val resizeterm : int -> int -> Curses.err
  val scroll : Curses.window -> Curses.err
  val scrl : int -> Curses.err
  val wscrl : Curses.window -> int -> Curses.err
  val touchwin : Curses.window -> Curses.err
  val touchline : Curses.window -> int -> int -> Curses.err
  val untouchwin : Curses.window -> Curses.err
  val wtouchln : Curses.window -> int -> int -> bool -> Curses.err
  val is_linetouched : Curses.window -> int -> int
  val is_wintouched : Curses.window -> bool
  val erase : unit -> unit
  val werase : Curses.window -> unit
  val clear : unit -> unit
  val wclear : Curses.window -> unit
  val clrtobot : unit -> unit
  val wclrtobot : Curses.window -> unit
  val clrtoeol : unit -> unit
  val wclrtoeol : Curses.window -> unit
  val overlay : Curses.window -> Curses.window -> Curses.err
  val overwrite : Curses.window -> Curses.window -> Curses.err
  val copywin :
    Curses.window ->
    Curses.window ->
    int -> int -> int -> int -> int -> int -> bool -> Curses.err
  val border :
    Curses.chtype ->
    Curses.chtype ->
    Curses.chtype ->
    Curses.chtype ->
    Curses.chtype -> Curses.chtype -> Curses.chtype -> Curses.chtype -> unit
  val wborder :
    Curses.window ->
    Curses.chtype ->
    Curses.chtype ->
    Curses.chtype ->
    Curses.chtype ->
    Curses.chtype -> Curses.chtype -> Curses.chtype -> Curses.chtype -> unit
  val box : Curses.window -> Curses.chtype -> Curses.chtype -> unit
  val hline : Curses.chtype -> int -> unit
  val whline : Curses.window -> Curses.chtype -> int -> unit
  val mvhline : int -> int -> Curses.chtype -> int -> unit
  val mvwhline : Curses.window -> int -> int -> Curses.chtype -> int -> unit
  val vline : Curses.chtype -> int -> unit
  val wvline : Curses.window -> Curses.chtype -> int -> unit
  val mvvline : int -> int -> Curses.chtype -> int -> unit
  val mvwvline : Curses.window -> int -> int -> Curses.chtype -> int -> unit
  val newpad : int -> int -> Curses.window
  val subpad : Curses.window -> int -> int -> int -> int -> Curses.window
  val prefresh :
    Curses.window -> int -> int -> int -> int -> int -> int -> Curses.err
  val pnoutrefresh :
    Curses.window -> int -> int -> int -> int -> int -> int -> Curses.err
  val pechochar : Curses.window -> Curses.chtype -> Curses.err
  module Color :
    sig
      val black : int
      val red : int
      val green : int
      val yellow : int
      val blue : int
      val magenta : int
      val cyan : int
      val white : int
    end
  val start_color : unit -> Curses.err
  val use_default_colors : unit -> Curses.err
  val init_pair : int -> int -> int -> Curses.err
  val init_color : int -> int -> int -> int -> Curses.err
  val has_colors : unit -> bool
  val can_change_color : unit -> bool
  val color_content : int -> int * int * int
  val pair_content : int -> int * int
  val colors : unit -> int
  val color_pairs : unit -> int
  val cbreak : unit -> Curses.err
  val halfdelay : int -> Curses.err
  val nocbreak : unit -> Curses.err
  val echo : unit -> Curses.err
  val noecho : unit -> Curses.err
  val intrflush : Curses.window -> bool -> Curses.err
  val keypad : Curses.window -> bool -> Curses.err
  val meta : Curses.window -> bool -> Curses.err
  val nodelay : Curses.window -> bool -> Curses.err
  val raw : unit -> Curses.err
  val noraw : unit -> Curses.err
  val noqiflush : unit -> unit
  val qiflush : unit -> unit
  val notimeout : Curses.window -> bool -> Curses.err
  val timeout : int -> unit
  val wtimeout : Curses.window -> int -> unit
  val typeahead : Unix.file_descr -> Curses.err
  val notypeahead : unit -> Curses.err
  val clearok : Curses.window -> bool -> unit
  val idlok : Curses.window -> bool -> unit
  val idcok : Curses.window -> bool -> unit
  val immedok : Curses.window -> bool -> unit
  val leaveok : Curses.window -> bool -> unit
  val setscrreg : int -> int -> Curses.err
  val wsetscrreg : Curses.window -> int -> int -> Curses.err
  val scrollok : Curses.window -> bool -> unit
  val nl : unit -> unit
  val nonl : unit -> unit
  val slk_init : int -> Curses.err
  val slk_set : int -> string -> int -> Curses.err
  val slk_refresh : unit -> Curses.err
  val slk_noutrefresh : unit -> Curses.err
  val slk_label : int -> string
  val slk_clear : unit -> Curses.err
  val slk_restore : unit -> Curses.err
  val slk_touch : unit -> Curses.err
  val slk_attron : Curses.attr_t -> Curses.err
  val slk_attroff : Curses.attr_t -> Curses.err
  val slk_attrset : Curses.attr_t -> Curses.err
  val mousemask : int -> int * int
  val beep : unit -> Curses.err
  val flash : unit -> Curses.err
  val unctrl : Curses.chtype -> string
  val keyname : int -> string
  val filter : unit -> unit
  val use_env : bool -> unit
  val putwin : Curses.window -> Unix.file_descr -> Curses.err
  val getwin : Unix.file_descr -> Curses.window
  val delay_output : int -> Curses.err
  val flushinp : unit -> unit
  val scr_dump : string -> Curses.err
  val scr_restore : string -> Curses.err
  val scr_init : string -> Curses.err
  val scr_set : string -> Curses.err
  val baudrate : unit -> int
  val erasechar : unit -> char
  val has_ic : unit -> bool
  val has_il : unit -> bool
  val killchar : unit -> char
  val longname : unit -> string
  val termattrs : unit -> Curses.attr_t
  val termname : unit -> string
  val tgetent : string -> bool
  val tgetflag : string -> bool
  val tgetnum : string -> int
  val tgetstr : string -> bool
  val tgoto : string -> int -> int -> string
  val setupterm : string -> Unix.file_descr -> Curses.err
  val setterm : string -> Curses.err
  val cur_term : unit -> Curses.terminal
  val set_curterm : Curses.terminal -> Curses.terminal
  val del_curterm : Curses.terminal -> Curses.err
  val restartterm : string -> Unix.file_descr -> Curses.err
  val putp : string -> Curses.err
  val vidattr : Curses.chtype -> Curses.err
  val mvcur : int -> int -> int -> int -> Curses.err
  val tigetflag : string -> bool
  val tigetnum : string -> int
  val tigetstr : string -> string
  val tputs : string -> int -> (char -> unit) -> Curses.err
  val vidputs : Curses.chtype -> (char -> unit) -> Curses.err
  val tparm : string -> int array -> string
  val bool_terminfo_variable : int -> string * string * string
  val num_terminfo_variable : int -> string * string * string
  val str_terminfo_variable : int -> string * string * string
  val bool_terminfo_variables : (string, string * string) Hashtbl.t
  val num_terminfo_variables : (string, string * string) Hashtbl.t
  val str_terminfo_variables : (string, string * string) Hashtbl.t
  val def_prog_mode : unit -> unit
  val def_shell_mode : unit -> unit
  val reset_prog_mode : unit -> unit
  val reset_shell_mode : unit -> unit
  val resetty : unit -> unit
  val savetty : unit -> unit
  val getsyx : unit -> int * int
  val setsyx : int -> int -> unit
  val curs_set : int -> Curses.err
  val napms : int -> unit
  val ripoffline : bool -> unit
  val get_ripoff : unit -> Curses.window * int
end