sig
  type button =
      BUTTON_LEFT
    | BUTTON_MIDDLE
    | BUTTON_RIGHT
    | BUTTON_WHEELUP
    | BUTTON_WHEELDOWN
    | BUTTON_X of int
  val get_state : ?relative:bool -> unit -> int * int * Sdlmouse.button list
  val warp : int -> int -> unit
  type cursor
  type cursor_data = {
    data :
      (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array2.t;
    mask :
      (int, Bigarray.int8_unsigned_elt, Bigarray.c_layout) Bigarray.Array2.t;
    w : int;
    h : int;
    hot_x : int;
    hot_y : int;
  }
  val make_cursor :
    data:(int, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
         Bigarray.Array2.t ->
    mask:(int, Bigarray.int8_unsigned_elt, Bigarray.c_layout)
         Bigarray.Array2.t ->
    hot_x:int -> hot_y:int -> Sdlmouse.cursor
  val free_cursor : Sdlmouse.cursor -> unit
  val set_cursor : Sdlmouse.cursor -> unit
  val get_cursor : unit -> Sdlmouse.cursor
  val cursor_visible : unit -> bool
  val show_cursor : bool -> unit
  val cursor_data : Sdlmouse.cursor -> Sdlmouse.cursor_data
  val pprint_cursor : Sdlmouse.cursor -> unit
  val convert_to_cursor :
    data:int array ->
    mask:int array ->
    w:int -> h:int -> hot_x:int -> hot_y:int -> Sdlmouse.cursor
end