    sig
      exception Graphic_failure of string
      val open_graph : string -> unit
      val close_graph : unit -> unit
      val set_window_title : string -> unit
      external clear_graph : unit -> unit = "gr_clear_graph"
      external size_x : unit -> int = "gr_size_x"
      external size_y : unit -> int = "gr_size_y"
      type color = int
      val rgb : int -> int -> int -> Graphics.color
      external set_color : Graphics.color -> unit = "gr_set_color"
      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
      external plot : int -> int -> unit = "gr_plot"
      val plots : (int * int) array -> unit
      external point_color : int -> int -> Graphics.color = "gr_point_color"
      external moveto : int -> int -> unit = "gr_moveto"
      val rmoveto : int -> int -> unit
      external current_x : unit -> int = "gr_current_x"
      external current_y : unit -> int = "gr_current_y"
      val current_point : unit -> int * int
      external lineto : int -> int -> unit = "gr_lineto"
      val rlineto : int -> int -> unit
      val curveto : int * int -> int * int -> int * int -> unit
      external draw_rect : int -> int -> int -> int -> unit = "gr_draw_rect"
      val draw_poly_line : (int * int) array -> unit
      val draw_poly : (int * int) array -> unit
      val draw_segments : (int * int * int * int) array -> unit
      external draw_arc : int -> int -> int -> int -> int -> int -> unit
        = "gr_draw_arc" "gr_draw_arc_nat"
      val draw_ellipse : int -> int -> int -> int -> unit
      val draw_circle : int -> int -> int -> unit
      external set_line_width : int -> unit = "gr_set_line_width"
      external draw_char : char -> unit = "gr_draw_char"
      external draw_string : string -> unit = "gr_draw_string"
      external set_font : string -> unit = "gr_set_font"
      val set_text_size : int -> unit
      external text_size : string -> int * int = "gr_text_size"
      external fill_rect : int -> int -> int -> int -> unit = "gr_fill_rect"
      external fill_poly : (int * int) array -> unit = "gr_fill_poly"
      external fill_arc : int -> int -> int -> int -> int -> int -> unit
        = "gr_fill_arc" "gr_fill_arc_nat"
      val fill_ellipse : int -> int -> int -> int -> unit
      val fill_circle : int -> int -> int -> unit
      type image
      val transp : Graphics.color
      external make_image : Graphics.color array array -> Graphics.image
        = "gr_make_image"
      external dump_image : Graphics.image -> Graphics.color array array
        = "gr_dump_image"
      external draw_image : Graphics.image -> int -> int -> unit
        = "gr_draw_image"
      val get_image : int -> int -> int -> int -> Graphics.image
      external create_image : int -> int -> Graphics.image = "gr_create_image"
      external blit_image : Graphics.image -> int -> int -> unit
        = "gr_blit_image"
      type status = {
        mouse_x : int;
        mouse_y : int;
        button : bool;
        keypressed : bool;
        key : char;
      }
      and event = Button_down | Button_up | Key_pressed | Mouse_motion | Poll
      external wait_next_event : Graphics.event list -> Graphics.status
        = "gr_wait_event"
      val mouse_pos : unit -> int * int
      val button_down : unit -> bool
      val read_key : unit -> char
      val key_pressed : unit -> bool
      external sound : int -> int -> unit = "gr_sound"
      val auto_synchronize : bool -> unit
      external synchronize : unit -> unit = "gr_synchronize"
      external display_mode : bool -> unit = "gr_display_mode"
      external remember_mode : bool -> unit = "gr_remember_mode"
    end