sig
  exception Graphic_failure of string
  val open_graph : string -> unit
  val close_graph : unit -> unit
  val set_window_title : string -> unit
  val resize_window : int -> int -> unit
  val clear_graph : unit -> unit
  val size_x : unit -> int
  val size_y : unit -> int
  type color = int
  val rgb : int -> int -> int -> Graphics.color
  val set_color : Graphics.color -> unit
  val background : Graphics.color
  val foreground : Graphics.color
  val black : Graphics.color
  val white : Graphics.color
  val red : Graphics.color
  val green : Graphics.color
  val blue : Graphics.color
  val yellow : Graphics.color
  val cyan : Graphics.color
  val magenta : Graphics.color
  val plot : int -> int -> unit
  val plots : (int * int) array -> unit
  val point_color : int -> int -> Graphics.color
  val moveto : int -> int -> unit
  val rmoveto : int -> int -> unit
  val current_x : unit -> int
  val current_y : unit -> int
  val current_point : unit -> int * int
  val lineto : int -> int -> unit
  val rlineto : int -> int -> unit
  val curveto : int * int -> int * int -> int * int -> unit
  val draw_rect : int -> int -> int -> int -> unit
  val draw_poly_line : (int * int) array -> unit
  val draw_poly : (int * int) array -> unit
  val draw_segments : (int * int * int * int) array -> unit
  val draw_arc : int -> int -> int -> int -> int -> int -> unit
  val draw_ellipse : int -> int -> int -> int -> unit
  val draw_circle : int -> int -> int -> unit
  val set_line_width : int -> unit
  val draw_char : char -> unit
  val draw_string : string -> unit
  val set_font : string -> unit
  val set_text_size : int -> unit
  val text_size : string -> int * int
  val fill_rect : int -> int -> int -> int -> unit
  val fill_poly : (int * int) array -> unit
  val fill_arc : int -> int -> int -> int -> int -> int -> unit
  val fill_ellipse : int -> int -> int -> int -> unit
  val fill_circle : int -> int -> int -> unit
  type image
  val transp : Graphics.color
  val make_image : Graphics.color array array -> Graphics.image
  val dump_image : Graphics.image -> Graphics.color array array
  val draw_image : Graphics.image -> int -> int -> unit
  val get_image : int -> int -> int -> int -> Graphics.image
  val create_image : int -> int -> Graphics.image
  val blit_image : Graphics.image -> int -> int -> unit
  type status = {
    mouse_x : int;
    mouse_y : int;
    button : bool;
    keypressed : bool;
    key : char;
  }
  type event = Button_down | Button_up | Key_pressed | Mouse_motion | Poll
  val wait_next_event : Graphics.event list -> Graphics.status
  val mouse_pos : unit -> int * int
  val button_down : unit -> bool
  val read_key : unit -> char
  val key_pressed : unit -> bool
  val sound : int -> int -> unit
  val auto_synchronize : bool -> unit
  val synchronize : unit -> unit
  val display_mode : bool -> unit
  val remember_mode : bool -> unit
end