sig
  exception SDL_init_exception of string
  type subsystem = [ `AUDIO | `CDROM | `JOYSTICK | `TIMER | `VIDEO ]
  val init :
    ?auto_clean:bool ->
    [< `AUDIO
     | `CDROM
     | `EVENTTHREAD
     | `EVERYTHING
     | `JOYSTICK
     | `NOPARACHUTE
     | `TIMER
     | `VIDEO ]
    list -> unit
  external init_subsystem : Sdl.subsystem list -> unit = "sdl_init_subsystem"
  external was_init : unit -> Sdl.subsystem list = "sdl_was_init"
  external quit : unit -> unit = "sdl_quit"
  external quit_subsystem : Sdl.subsystem list -> unit = "sdl_quit_subsystem"
  type version = { major : int; minor : int; patch : int; }
  external version : unit -> Sdl.version = "sdl_version"
  val string_of_version : Sdl.version -> string
  val getenv : string -> string
  val putenv : string -> string -> unit
  type rwops_in
  val rwops_from_mem : string -> Sdl.rwops_in
  external rwops_in_close : Sdl.rwops_in -> unit = "mlsdl_rwops_close"
end