sig
  type plotter
  type plotter_format =
      X
    | PNG
    | PNM
    | GIF
    | SVG
    | AI
    | PS
    | CGM
    | FIG
    | PCL
    | HPGL
    | REGIS
    | TEK
    | META
    | XDRAWABLE
  type plotter_parameter =
      DISPLAY of string
    | BITMAPSIZE of string
    | PAGESIZE of string
    | ROTATION of string
    | BG_COLOR of string
    | EMULATE_COLOR of bool
    | MAX_LINE_LENGTH of int
    | INTERLACE of bool
    | TRANSPARENT_COLOR of string
    | CGM_ENCODING of string
    | CGM_MAX_VERSION of string
    | GIF_ANIMATION of bool
    | GIF_DELAY of int
    | GIF_ITERATIONS of int
    | HPGL_ASSIGN_COLORS of bool
    | HPGL_OPAQUE_MODE of bool
    | HPGL_PENS of string
    | HPGL_ROTATE of string
    | HPGL_VERSION of string
    | META_PORTABLE of bool
    | PCL_ASSIGN_COLORS of bool
    | PCL_BEZIERS of bool
    | PNM_PORTABLE of bool
    | TERM of string
    | USE_DOUBLE_BUFFERING of bool
    | VANISH_ON_DELETE of bool
    | X_AUTO_FLUSH of bool
  exception Error of string
  exception Deleted_plotter
  exception Undeleted_plotter
  val warnings : (string -> unit) -> unit
  val warnings_as_errors : unit -> unit
  val version : string
  val format_of_string : string -> Plot.plotter_format
  val string_of_format : Plot.plotter_format -> string
  val makepl :
    Plot.plotter_format ->
    Pervasives.out_channel ->
    ?err_channel:Pervasives.out_channel ->
    Plot.plotter_parameter list -> Plot.plotter
  external deletepl : Plot.plotter -> unit = "wrap_pl_deletepl_r"
  type point = { x : float; y : float; }
  val pi : float
  val twopi : float
  type color = Colorname of string | RGB of int * int * int
  external openpl : Plot.plotter -> unit = "stub_pl_openpl_r"
  external bgcolor : Plot.plotter -> Plot.color -> unit = "stub_pl_bgcolor_r"
  external erase : Plot.plotter -> unit = "stub_pl_erase_r"
  val space : Plot.plotter -> p0:Plot.point -> p1:Plot.point -> unit
  external fspace :
    Plot.plotter -> x0:float -> y0:float -> x1:float -> y1:float -> unit
    = "stub_pl_fspace_r"
  val space2 :
    Plot.plotter -> p0:Plot.point -> p1:Plot.point -> p2:Plot.point -> unit
  external fspace2 :
    Plot.plotter ->
    x0:float ->
    y0:float -> x1:float -> y1:float -> x2:float -> y2:float -> unit
    = "stub_pl_fspace2_r_bytecode" "stub_pl_fspace2_r"
  external havecap : Plot.plotter -> s:string -> unit = "stub_pl_havecap_r"
  external flushpl : Plot.plotter -> unit = "stub_pl_flushpl_r"
  external closepl : Plot.plotter -> unit = "stub_pl_closepl_r"
  type h_justify = Left | Center_h | Right
  type v_justify = Bottom | Baseline | Center_v | Cap_line | Top
  external alabel :
    Plot.plotter -> Plot.h_justify -> Plot.v_justify -> string -> unit
    = "stub_pl_alabel_r"
  val arc :
    Plot.plotter -> pc:Plot.point -> p0:Plot.point -> p1:Plot.point -> unit
  external farc :
    Plot.plotter ->
    xc:float ->
    yc:float -> x0:float -> y0:float -> x1:float -> y1:float -> unit
    = "stub_pl_farc_r_bytecode" "stub_pl_farc_r"
  val arcrel :
    Plot.plotter ->
    dpc:Plot.point -> dp0:Plot.point -> dp1:Plot.point -> unit
  external farcrel :
    Plot.plotter ->
    dxc:float ->
    dyc:float -> dx0:float -> dy0:float -> dx1:float -> dy1:float -> unit
    = "stub_pl_farcrel_r_bytecode" "stub_pl_farcrel_r"
  val bezier2 :
    Plot.plotter -> p0:Plot.point -> p1:Plot.point -> p2:Plot.point -> unit
  external fbezier2 :
    Plot.plotter ->
    x0:float ->
    y0:float -> x1:float -> y1:float -> x2:float -> y2:float -> unit
    = "stub_pl_fbezier2_r_bytecode" "stub_pl_fbezier2_r"
  val bezier2rel :
    Plot.plotter ->
    dp0:Plot.point -> dp1:Plot.point -> dp2:Plot.point -> unit
  external fbezier2rel :
    Plot.plotter ->
    dx0:float ->
    dy0:float -> dx1:float -> dy1:float -> dx2:float -> dy2:float -> unit
    = "stub_pl_fbezier2rel_r_bytecode" "stub_pl_fbezier2rel_r"
  val bezier3 :
    Plot.plotter ->
    p0:Plot.point -> p1:Plot.point -> p2:Plot.point -> p3:Plot.point -> unit
  external fbezier3 :
    Plot.plotter ->
    x0:float ->
    y0:float ->
    x1:float ->
    y1:float -> x2:float -> y2:float -> x3:float -> y3:float -> unit
    = "stub_pl_fbezier3_r_bytecode" "stub_pl_fbezier3_r"
  val bezier3rel :
    Plot.plotter ->
    dp0:Plot.point ->
    dp1:Plot.point -> dp2:Plot.point -> dp3:Plot.point -> unit
  external fbezier3rel :
    Plot.plotter ->
    dx0:float ->
    dy0:float ->
    dx1:float ->
    dy1:float -> dx2:float -> dy2:float -> dx3:float -> dy3:float -> unit
    = "stub_pl_fbezier3rel_r_bytecode" "stub_pl_fbezier3rel_r"
  val box : Plot.plotter -> p0:Plot.point -> p1:Plot.point -> unit
  external fbox :
    Plot.plotter -> x0:float -> y0:float -> x1:float -> y1:float -> unit
    = "stub_pl_fbox_r"
  val boxrel : Plot.plotter -> dp0:Plot.point -> dp1:Plot.point -> unit
  external fboxrel :
    Plot.plotter -> dx0:float -> dy0:float -> dx1:float -> dy1:float -> unit
    = "stub_pl_fboxrel_r"
  val circle : Plot.plotter -> p:Plot.point -> r:float -> unit
  external fcircle : Plot.plotter -> x:float -> y:float -> r:float -> unit
    = "stub_pl_fcircle_r"
  val circlerel : Plot.plotter -> dp:Plot.point -> r:float -> unit
  external fcirclerel :
    Plot.plotter -> dx:float -> dy:float -> r:float -> unit
    = "stub_pl_fcirclerel_r"
  val cont : Plot.plotter -> p:Plot.point -> unit
  external fcont : Plot.plotter -> x:float -> y:float -> unit
    = "stub_pl_fcont_r"
  val contrel : Plot.plotter -> p:Plot.point -> unit
  external fcontrel : Plot.plotter -> dx:float -> dy:float -> unit
    = "stub_pl_fcontrel_r"
  val ellarc :
    Plot.plotter -> pc:Plot.point -> p0:Plot.point -> p1:Plot.point -> unit
  external fellarc :
    Plot.plotter ->
    xc:float ->
    yc:float -> x0:float -> y0:float -> x1:float -> y1:float -> unit
    = "stub_pl_fellarc_r_bytecode" "stub_pl_fellarc_r"
  val ellarcrel :
    Plot.plotter ->
    dpc:Plot.point -> dp0:Plot.point -> dp1:Plot.point -> unit
  external fellarcrel :
    Plot.plotter ->
    dxc:float ->
    dyc:float -> dx0:float -> dy0:float -> dx1:float -> dy1:float -> unit
    = "stub_pl_fellarcrel_r_bytecode" "stub_pl_fellarcrel_r"
  val ellipse :
    Plot.plotter ->
    pc:Plot.point -> rx:float -> ry:float -> angle:float -> unit
  external fellipse :
    Plot.plotter ->
    x:float -> y:float -> rx:float -> ry:float -> angle:float -> unit
    = "stub_pl_fellipse_r_bytecode" "stub_pl_fellipse_r"
  val ellipserel :
    Plot.plotter ->
    dpc:Plot.point -> rx:float -> ry:float -> angle:float -> unit
  external fellipserel :
    Plot.plotter ->
    dx:float -> dy:float -> rx:float -> ry:float -> angle:float -> unit
    = "stub_pl_fellipserel_r_bytecode" "stub_pl_fellipserel_r"
  external endpath : Plot.plotter -> unit = "stub_pl_endpath_r"
  external endsubpath : Plot.plotter -> unit = "stub_pl_endsubpath_r"
  external closepath : Plot.plotter -> unit = "stub_pl_closepath_r"
  external label : Plot.plotter -> s:string -> unit = "stub_pl_label_r"
  external labelwidth : Plot.plotter -> string -> float
    = "stub_pl_flabelwidth_r"
  external flabelwidth : Plot.plotter -> string -> float
    = "stub_pl_flabelwidth_r"
  val line : Plot.plotter -> p0:Plot.point -> p1:Plot.point -> unit
  external fline :
    Plot.plotter -> x0:float -> y0:float -> x1:float -> y1:float -> unit
    = "stub_pl_fline_r"
  val linerel : Plot.plotter -> dp0:Plot.point -> dp1:Plot.point -> unit
  external flinerel :
    Plot.plotter -> dx0:float -> dy0:float -> dx1:float -> dy1:float -> unit
    = "stub_pl_flinerel_r"
  type marker =
      No_marker
    | Dot
    | Plus
    | Asterisk
    | Circle
    | Cross
    | Square
    | Triangle
    | Diamont
    | Star
    | Inv_triangle
    | Starburst
    | Marker of int
  val marker :
    Plot.plotter -> Plot.point -> Plot.marker -> size:float -> unit
  external fmarker :
    Plot.plotter -> x:float -> y:float -> Plot.marker -> size:float -> unit
    = "stub_pl_fmarker_r"
  val markerrel :
    Plot.plotter -> Plot.point -> Plot.marker -> size:float -> unit
  external fmarkerrel :
    Plot.plotter -> x:float -> y:float -> Plot.marker -> size:float -> unit
    = "stub_pl_fmarkerrel_r"
  val point : Plot.plotter -> p:Plot.point -> unit
  external fpoint : Plot.plotter -> x:float -> y:float -> unit
    = "stub_pl_fpoint_r"
  val pointrel : Plot.plotter -> dp:Plot.point -> unit
  external fpointrel : Plot.plotter -> dx:float -> dy:float -> unit
    = "stub_pl_fpointrel_r"
  type capmod = Butt | Round_c | Projecting | Triangular
  external capmod : Plot.plotter -> Plot.capmod -> unit = "stub_pl_capmod_r"
  external color : Plot.plotter -> Plot.color -> unit = "stub_pl_color_r"
  external fillcolor : Plot.plotter -> Plot.color -> unit
    = "stub_pl_fillcolor_r"
  external pencolor : Plot.plotter -> Plot.color -> unit
    = "stub_pl_pencolor_r"
  type fillmod = Alternate | Winding
  external fillmod : Plot.plotter -> Plot.fillmod -> unit
    = "stub_pl_fillmod_r"
  external filltype : Plot.plotter -> level:int -> unit
    = "stub_pl_filltype_r"
  external fmiterlimit : Plot.plotter -> limit:float -> unit
    = "stub_pl_fmiterlimit_r"
  external fontname : Plot.plotter -> string -> float = "stub_pl_ffontname_r"
  external ffontname : Plot.plotter -> string -> float
    = "stub_pl_ffontname_r"
  external fontsize : Plot.plotter -> float -> float = "stub_pl_ffontsize_r"
  external ffontsize : Plot.plotter -> float -> float = "stub_pl_ffontsize_r"
  type joinmod = Miter | Round_j | Bevel
  external joinmod : Plot.plotter -> Plot.joinmod -> unit
    = "stub_pl_joinmod_r"
  external linedash : Plot.plotter -> dashes:int array -> offset:int -> unit
    = "stub_pl_linedash_r"
  external flinedash :
    Plot.plotter -> dashes:float array -> offset:float -> unit
    = "stub_pl_flinedash_r"
  type linemod =
      Solid
    | Dotted
    | Dotdashed
    | Shortdashed
    | Longdashed
    | Dotdotdashed
    | Dotdotdotdashed
    | Disconnected
  external linemod : Plot.plotter -> Plot.linemod -> unit
    = "stub_pl_linemod_r"
  external linewidth : Plot.plotter -> size:float -> unit
    = "stub_pl_flinewidth_r"
  external flinewidth : Plot.plotter -> size:float -> unit
    = "stub_pl_flinewidth_r"
  val move : Plot.plotter -> p:Plot.point -> unit
  val moverel : Plot.plotter -> p:Plot.point -> unit
  external fmove : Plot.plotter -> x:float -> y:float -> unit
    = "stub_pl_fmove_r"
  external fmoverel : Plot.plotter -> dx:float -> dy:float -> unit
    = "stub_pl_fmoverel_r"
  type direction = Clockwise | Counterclockwise
  external orientation : Plot.plotter -> Plot.direction -> unit
    = "stub_pl_orientation_r"
  external textangle : Plot.plotter -> float -> float
    = "stub_pl_ftextangle_r"
  external ftextangle : Plot.plotter -> float -> float
    = "stub_pl_ftextangle_r"
  external pentype : Plot.plotter -> level:int -> unit = "stub_pl_pentype_r"
  external restorestate : Plot.plotter -> unit = "stub_pl_restorestate_r"
  external savestate : Plot.plotter -> unit = "stub_pl_savestate_r"
  external fsetmatrix :
    Plot.plotter ->
    m0:float ->
    m1:float -> m2:float -> m3:float -> m4:float -> m5:float -> unit
    = "stub_pl_fsetmatrix_r_bytecode" "stub_pl_fsetmatrix_r"
  external fconcat :
    Plot.plotter ->
    m0:float ->
    m1:float -> m2:float -> m3:float -> m4:float -> m5:float -> unit
    = "stub_pl_fconcat_r_bytecode" "stub_pl_fconcat_r"
  external frotate : Plot.plotter -> theta:float -> unit
    = "stub_pl_frotate_r"
  external fscale : Plot.plotter -> x:float -> y:float -> unit
    = "stub_pl_fscale_r"
  external ftranslate : Plot.plotter -> x:float -> y:float -> unit
    = "stub_pl_ftranslate_r"
  type plotter_params
  external newplparams : unit -> Plot.plotter_params = "wrap_pl_newplparams"
  external deleteplparams : Plot.plotter_params -> unit
    = "wrap_pl_deleteplparams"
  external setplparam : Plot.plotter_params -> Plot.plotter_parameter -> unit
    = "wrap_pl_setplparam"
  external newpl :
    Plot.plotter_format ->
    Pervasives.in_channel option ->
    Pervasives.out_channel option ->
    Pervasives.out_channel option -> Plot.plotter_params -> Plot.plotter
    = "wrap_pl_newpl_r"
end