sig
  type pos = int * int
  type state = {
    mutable window : Curses.window;
    mutable window_cave : Curses.window;
    mutable cave : PathVisual.Cave.wall_types array array;
    mutable cursor : PathVisual.UI.pos;
    mutable src : PathVisual.UI.pos;
    mutable dst : PathVisual.UI.pos;
    mutable path : (int * int) list;
    mutable alg : int;
    mutable auto_path : bool;
    mutable dist_alg : int;
    mutable path_opt_alg : int;
    mutable map_type : int;
    mutable cave_x : int;
    mutable cave_y : int;
  }
  val printf : ('a, Pervasives.out_channel, unit) Pervasives.format -> 'a
  val sprintf : ('a, unit, string) Pervasives.format -> 'a
  val string_of_char : char -> string
  val getch' : int -> string
  val getch : unit -> string
  val get_pathfinding :
    int ->
    PathVisual.Cave.t ->
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.pos ->
    PathVisual.PathFinding.distance_function -> PathVisual.PathFinding.path
  val get_pathfinding_name : int -> string
  val get_dist_alg :
    int -> PathVisual.PathFinding.pos -> PathVisual.PathFinding.pos -> float
  val get_dist_alg_name : int -> string
  val get_path_opt_alg :
    int ->
    PathVisual.Cave.t ->
    PathVisual.PathFinding.path -> PathVisual.PathFinding.path
  val get_path_opt_alg_name : int -> string
  val get_map_type : int -> int -> int -> PathVisual.Cave.t
  val get_map_type_name : int -> string
  val printcave : Curses.window -> PathVisual.Cave.t -> unit
  val set_cursor_ifvalid : PathVisual.UI.state -> int * int -> unit
  val waddstr : Curses.window -> int -> int -> string -> unit
  val refresh : PathVisual.UI.state -> unit
  val draw_path : PathVisual.UI.state -> unit
  val my_draw : PathVisual.UI.state -> unit
  val debug_path_legend : PathVisual.UI.state -> unit
  val debug_path : PathVisual.UI.state -> unit
  val set_path : PathVisual.UI.state -> unit
  val debug_opt_legend : PathVisual.UI.state -> unit
  val debug_opt : PathVisual.UI.state -> unit
  val new_map : PathVisual.UI.state -> unit
  val loop : PathVisual.UI.state -> unit
  val main : unit -> unit
  val curses_keys : unit -> 'a
end