Source code for libretro.api.environment
r"""
Types for interfacing between a :class:`.Core`
and libretro.py's :mod:`driver implementations <libretro.drivers>`.
.. seealso::
:class:`.EnvironmentDriver`
The :class:`~typing.Protocol` that defines the layer
between :class:`.Core`\s and libretro.py's drivers.
:mod:`libretro.drivers.environment`
libretro.py's included :class:`.EnvironmentDriver` implementations.
"""
from ctypes import c_bool, c_uint
from enum import IntEnum, unique
from libretro.ctypes import CIntArg, TypedFunctionPointer, c_void_ptr
RETRO_ENVIRONMENT_EXPERIMENTAL = 0x10000
RETRO_ENVIRONMENT_PRIVATE = 0x20000
RETRO_ENVIRONMENT_SET_ROTATION = 1
RETRO_ENVIRONMENT_GET_OVERSCAN = 2
RETRO_ENVIRONMENT_GET_CAN_DUPE = 3
RETRO_ENVIRONMENT_SET_MESSAGE = 6
RETRO_ENVIRONMENT_SHUTDOWN = 7
RETRO_ENVIRONMENT_SET_PERFORMANCE_LEVEL = 8
RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY = 9
RETRO_ENVIRONMENT_SET_PIXEL_FORMAT = 10
RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS = 11
RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK = 12
RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE = 13
RETRO_ENVIRONMENT_SET_HW_RENDER = 14
RETRO_ENVIRONMENT_GET_VARIABLE = 15
RETRO_ENVIRONMENT_SET_VARIABLES = 16
RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE = 17
RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME = 18
RETRO_ENVIRONMENT_GET_LIBRETRO_PATH = 19
RETRO_ENVIRONMENT_SET_FRAME_TIME_CALLBACK = 21
RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK = 22
RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE = 23
RETRO_ENVIRONMENT_GET_INPUT_DEVICE_CAPABILITIES = 24
RETRO_ENVIRONMENT_GET_SENSOR_INTERFACE = 25 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_CAMERA_INTERFACE = 26 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_LOG_INTERFACE = 27
RETRO_ENVIRONMENT_GET_PERF_INTERFACE = 28
RETRO_ENVIRONMENT_GET_LOCATION_INTERFACE = 29
RETRO_ENVIRONMENT_GET_CONTENT_DIRECTORY = 30
RETRO_ENVIRONMENT_GET_CORE_ASSETS_DIRECTORY = 30
RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY = 31
RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO = 32
RETRO_ENVIRONMENT_SET_PROC_ADDRESS_CALLBACK = 33
RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO = 34
RETRO_ENVIRONMENT_SET_CONTROLLER_INFO = 35
RETRO_ENVIRONMENT_SET_MEMORY_MAPS = 36 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_SET_GEOMETRY = 37
RETRO_ENVIRONMENT_GET_USERNAME = 38
RETRO_ENVIRONMENT_GET_LANGUAGE = 39
RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER = 40 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE = 41 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS = 42 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_SET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE = 43 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_SET_SERIALIZATION_QUIRKS = 44
RETRO_ENVIRONMENT_SET_HW_SHARED_CONTEXT = 44 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_VFS_INTERFACE = 45 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_LED_INTERFACE = 46 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE = 47 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_MIDI_INTERFACE = 48 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_FASTFORWARDING = 49 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_TARGET_REFRESH_RATE = 50 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_INPUT_BITMASKS = 51 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION = 52
RETRO_ENVIRONMENT_SET_CORE_OPTIONS = 53
RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL = 54
RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY = 55
RETRO_ENVIRONMENT_GET_PREFERRED_HW_RENDER = 56
RETRO_ENVIRONMENT_GET_DISK_CONTROL_INTERFACE_VERSION = 57
RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE = 58
RETRO_ENVIRONMENT_GET_MESSAGE_INTERFACE_VERSION = 59
RETRO_ENVIRONMENT_SET_MESSAGE_EXT = 60
RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS = 61
RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK = 62
RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY = 63
RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE = 64
RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE = 65
RETRO_ENVIRONMENT_GET_GAME_INFO_EXT = 66
RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2 = 67
RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL = 68
RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK = 69
RETRO_ENVIRONMENT_SET_VARIABLE = 70
RETRO_ENVIRONMENT_GET_THROTTLE_STATE = 71 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_SAVESTATE_CONTEXT = 72 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_SUPPORT = (
73 | RETRO_ENVIRONMENT_EXPERIMENTAL
)
RETRO_ENVIRONMENT_GET_JIT_CAPABLE = 74
RETRO_ENVIRONMENT_GET_MICROPHONE_INTERFACE = 75 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_SET_NETPACKET_INTERFACE = 76
RETRO_ENVIRONMENT_GET_DEVICE_POWER = 77 | RETRO_ENVIRONMENT_EXPERIMENTAL
RETRO_ENVIRONMENT_GET_PLAYLIST_DIRECTORY = 79
RETRO_ENVIRONMENT_GET_FILE_BROWSER_START_DIRECTORY = 80
RETRO_API_VERSION = 1
API_VERSION = RETRO_API_VERSION
"""The version of the libretro API that this library implements."""
[docs]
@unique
class EnvironmentCall(IntEnum):
"""
Enumeration of all :c:macro:`RETRO_ENVIRONMENT` callback identifiers.
Each member corresponds to a ``RETRO_ENVIRONMENT_*`` constant in ``libretro.h``.
Passed as the ``cmd`` argument to :func:`retro_environment_t`.
>>> from libretro.api import EnvironmentCall
>>> EnvironmentCall.SHUTDOWN
<EnvironmentCall.SHUTDOWN: 7>
"""
SET_ROTATION = RETRO_ENVIRONMENT_SET_ROTATION
"""
.. seealso:: :attr:`.VideoDriver.rotation`
"""
GET_OVERSCAN = RETRO_ENVIRONMENT_GET_OVERSCAN
GET_CAN_DUPE = RETRO_ENVIRONMENT_GET_CAN_DUPE
"""
.. seealso:: :attr:`.VideoDriver.can_dupe`
"""
SET_MESSAGE = RETRO_ENVIRONMENT_SET_MESSAGE
"""
.. seealso:: :meth:`.MessageDriver.set_message`
"""
SHUTDOWN = RETRO_ENVIRONMENT_SHUTDOWN
SET_PERFORMANCE_LEVEL = RETRO_ENVIRONMENT_SET_PERFORMANCE_LEVEL
GET_SYSTEM_DIRECTORY = RETRO_ENVIRONMENT_GET_SYSTEM_DIRECTORY
"""
.. seealso:: :meth:`.PathDriver.system_dir`
"""
SET_PIXEL_FORMAT = RETRO_ENVIRONMENT_SET_PIXEL_FORMAT
"""
.. seealso:: :attr:`.VideoDriver.pixel_format`
"""
SET_INPUT_DESCRIPTORS = RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS
"""
.. seealso:: :attr:`.InputDriver.descriptors`
"""
SET_KEYBOARD_CALLBACK = RETRO_ENVIRONMENT_SET_KEYBOARD_CALLBACK
"""
.. seealso:: :attr:`.InputDriver.keyboard_callback`
"""
SET_DISK_CONTROL_INTERFACE = RETRO_ENVIRONMENT_SET_DISK_CONTROL_INTERFACE
"""
.. seealso:: :class:`.DiskDriver`
"""
SET_HW_RENDER = RETRO_ENVIRONMENT_SET_HW_RENDER
"""
.. seealso:: :attr:`.VideoDriver.set_context`
"""
SET_HW_RENDER_EXPERIMENTAL = RETRO_ENVIRONMENT_SET_HW_RENDER | RETRO_ENVIRONMENT_EXPERIMENTAL
"""
.. seealso:: :attr:`.VideoDriver.set_context`
"""
GET_VARIABLE = RETRO_ENVIRONMENT_GET_VARIABLE
"""
.. seealso:: :attr:`.OptionDriver.variables`
"""
SET_VARIABLES = RETRO_ENVIRONMENT_SET_VARIABLES
"""
.. seealso:: :attr:`.OptionDriver.set_variables`
"""
GET_VARIABLE_UPDATE = RETRO_ENVIRONMENT_GET_VARIABLE_UPDATE
"""
.. seealso:: :attr:`.OptionDriver.variable_updated`
"""
SET_SUPPORT_NO_GAME = RETRO_ENVIRONMENT_SET_SUPPORT_NO_GAME
GET_LIBRETRO_PATH = RETRO_ENVIRONMENT_GET_LIBRETRO_PATH
"""
.. seealso:: :meth:`.PathDriver.libretro_path`
"""
SET_FRAME_TIME_CALLBACK = RETRO_ENVIRONMENT_SET_FRAME_TIME_CALLBACK
"""
.. seealso:: :attr:`.TimingDriver.frame_time_callback`
"""
SET_AUDIO_CALLBACK = RETRO_ENVIRONMENT_SET_AUDIO_CALLBACK
"""
.. seealso:: :attr:`.AudioDriver.callbacks`
"""
GET_RUMBLE_INTERFACE = RETRO_ENVIRONMENT_GET_RUMBLE_INTERFACE
"""
.. seealso:: :class:`.RumbleDriver`
"""
GET_INPUT_DEVICE_CAPABILITIES = RETRO_ENVIRONMENT_GET_INPUT_DEVICE_CAPABILITIES
"""
.. seealso:: :attr:`.InputDriver.device_capabilities`
"""
GET_SENSOR_INTERFACE = RETRO_ENVIRONMENT_GET_SENSOR_INTERFACE
"""
.. seealso:: :class:`.SensorDriver`
"""
GET_CAMERA_INTERFACE = RETRO_ENVIRONMENT_GET_CAMERA_INTERFACE
"""
.. seealso:: :class:`.CameraDriver`
"""
GET_LOG_INTERFACE = RETRO_ENVIRONMENT_GET_LOG_INTERFACE
"""
.. seealso:: :class:`.LogDriver`
"""
GET_PERF_INTERFACE = RETRO_ENVIRONMENT_GET_PERF_INTERFACE
"""
.. seealso:: :class:`.PerfDriver`
"""
GET_LOCATION_INTERFACE = RETRO_ENVIRONMENT_GET_LOCATION_INTERFACE
"""
.. seealso:: :class:`.LocationDriver`
"""
GET_CORE_ASSETS_DIRECTORY = RETRO_ENVIRONMENT_GET_CORE_ASSETS_DIRECTORY
"""
.. seealso:: :attr:`.PathDriver.core_assets_dir`
"""
GET_SAVE_DIRECTORY = RETRO_ENVIRONMENT_GET_SAVE_DIRECTORY
"""
.. seealso:: :attr:`.PathDriver.save_dir`
"""
SET_SYSTEM_AV_INFO = RETRO_ENVIRONMENT_SET_SYSTEM_AV_INFO
"""
.. seealso:: :attr:`.AudioDriver.system_av_info`
"""
SET_PROC_ADDRESS_CALLBACK = RETRO_ENVIRONMENT_SET_PROC_ADDRESS_CALLBACK
"""
.. seealso:: :class:`.retro_get_proc_address_interface`
"""
SET_SUBSYSTEM_INFO = RETRO_ENVIRONMENT_SET_SUBSYSTEM_INFO
"""
.. seealso:: :attr:`.ContentDriver.subsystem_info`
"""
SET_CONTROLLER_INFO = RETRO_ENVIRONMENT_SET_CONTROLLER_INFO
"""
.. seealso:: :attr:`.InputDriver.controller_info`
"""
SET_MEMORY_MAPS = RETRO_ENVIRONMENT_SET_MEMORY_MAPS
"""
.. seealso:: :class:`.retro_memory_map`
"""
SET_GEOMETRY = RETRO_ENVIRONMENT_SET_GEOMETRY
"""
.. seealso:: :attr:`.VideoDriver.geometry`
"""
GET_USERNAME = RETRO_ENVIRONMENT_GET_USERNAME
"""
.. seealso:: :attr:`.UserDriver.username`
"""
GET_LANGUAGE = RETRO_ENVIRONMENT_GET_LANGUAGE
"""
.. seealso:: :attr:`.UserDriver.language`
"""
GET_CURRENT_SOFTWARE_FRAMEBUFFER = RETRO_ENVIRONMENT_GET_CURRENT_SOFTWARE_FRAMEBUFFER
"""
.. seealso:: :meth:`.VideoDriver.get_software_framebuffer`
"""
GET_HW_RENDER_INTERFACE = RETRO_ENVIRONMENT_GET_HW_RENDER_INTERFACE
"""
.. seealso:: :attr:`.VideoDriver.hw_render_interface`
"""
SET_SUPPORT_ACHIEVEMENTS = RETRO_ENVIRONMENT_SET_SUPPORT_ACHIEVEMENTS
SET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE = (
RETRO_ENVIRONMENT_SET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE
)
"""
.. seealso:: :class:`.retro_hw_render_context_negotiation_interface`
"""
SET_SERIALIZATION_QUIRKS = RETRO_ENVIRONMENT_SET_SERIALIZATION_QUIRKS
"""
.. seealso:: :class:`.SerializationQuirks`
"""
SET_HW_SHARED_CONTEXT = RETRO_ENVIRONMENT_SET_HW_SHARED_CONTEXT
"""
.. seealso:: :attr:`.VideoDriver.shared_context`
"""
GET_VFS_INTERFACE = RETRO_ENVIRONMENT_GET_VFS_INTERFACE
"""
.. seealso:: :class:`.FileSystemDriver`
"""
GET_LED_INTERFACE = RETRO_ENVIRONMENT_GET_LED_INTERFACE
"""
.. seealso:: :class:`.LedDriver`
"""
GET_AUDIO_VIDEO_ENABLE = RETRO_ENVIRONMENT_GET_AUDIO_VIDEO_ENABLE
"""
.. seealso:: :class:`.AvEnableFlags`
"""
GET_MIDI_INTERFACE = RETRO_ENVIRONMENT_GET_MIDI_INTERFACE
"""
.. seealso:: :class:`.MidiDriver`
"""
GET_FASTFORWARDING = RETRO_ENVIRONMENT_GET_FASTFORWARDING
"""
.. seealso:: :attr:`.TimingDriver.throttle_state`
"""
GET_TARGET_REFRESH_RATE = RETRO_ENVIRONMENT_GET_TARGET_REFRESH_RATE
"""
.. seealso:: :attr:`.TimingDriver.target_refresh_rate`
"""
GET_INPUT_BITMASKS = RETRO_ENVIRONMENT_GET_INPUT_BITMASKS
"""
.. seealso:: :attr:`.InputDriver.bitmasks_supported`
"""
GET_CORE_OPTIONS_VERSION = RETRO_ENVIRONMENT_GET_CORE_OPTIONS_VERSION
"""
.. seealso:: :attr:`.OptionDriver.version`
"""
SET_CORE_OPTIONS = RETRO_ENVIRONMENT_SET_CORE_OPTIONS
"""
.. seealso:: :attr:`.OptionDriver.set_options`
"""
SET_CORE_OPTIONS_INTL = RETRO_ENVIRONMENT_SET_CORE_OPTIONS_INTL
"""
.. seealso:: :attr:`.OptionDriver.set_options_intl`
"""
SET_CORE_OPTIONS_DISPLAY = RETRO_ENVIRONMENT_SET_CORE_OPTIONS_DISPLAY
"""
.. seealso:: :attr:`.OptionDriver.set_display`
"""
GET_PREFERRED_HW_RENDER = RETRO_ENVIRONMENT_GET_PREFERRED_HW_RENDER
"""
.. seealso:: :attr:`.VideoDriver.preferred_context`
"""
GET_DISK_CONTROL_INTERFACE_VERSION = RETRO_ENVIRONMENT_GET_DISK_CONTROL_INTERFACE_VERSION
SET_DISK_CONTROL_EXT_INTERFACE = RETRO_ENVIRONMENT_SET_DISK_CONTROL_EXT_INTERFACE
GET_MESSAGE_INTERFACE_VERSION = RETRO_ENVIRONMENT_GET_MESSAGE_INTERFACE_VERSION
"""
.. seealso:: :attr:`.MessageDriver.version`
"""
SET_MESSAGE_EXT = RETRO_ENVIRONMENT_SET_MESSAGE_EXT
"""
.. seealso:: :meth:`.MessageDriver.set_message`
"""
GET_INPUT_MAX_USERS = RETRO_ENVIRONMENT_GET_INPUT_MAX_USERS
"""
.. seealso:: :attr:`.InputDriver.max_users`
"""
SET_AUDIO_BUFFER_STATUS_CALLBACK = RETRO_ENVIRONMENT_SET_AUDIO_BUFFER_STATUS_CALLBACK
"""
.. seealso:: :attr:`.AudioDriver.buffer_status`
"""
SET_MINIMUM_AUDIO_LATENCY = RETRO_ENVIRONMENT_SET_MINIMUM_AUDIO_LATENCY
"""
.. seealso:: :attr:`.AudioDriver.minimum_latency`
"""
SET_FASTFORWARDING_OVERRIDE = RETRO_ENVIRONMENT_SET_FASTFORWARDING_OVERRIDE
"""
.. seealso:: :attr:`.TimingDriver.fastforwarding_override`
"""
SET_CONTENT_INFO_OVERRIDE = RETRO_ENVIRONMENT_SET_CONTENT_INFO_OVERRIDE
"""
.. seealso:: :attr:`.ContentDriver.overrides`
"""
GET_GAME_INFO_EXT = RETRO_ENVIRONMENT_GET_GAME_INFO_EXT
"""
.. seealso:: :attr:`.ContentDriver.game_info_ext`
"""
SET_CORE_OPTIONS_V2 = RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2
"""
.. seealso:: :attr:`.OptionDriver.set_options_v2`
"""
SET_CORE_OPTIONS_V2_INTL = RETRO_ENVIRONMENT_SET_CORE_OPTIONS_V2_INTL
"""
.. seealso:: :attr:`.OptionDriver.set_options_v2_intl`
"""
SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK = (
RETRO_ENVIRONMENT_SET_CORE_OPTIONS_UPDATE_DISPLAY_CALLBACK
)
"""
.. seealso:: :attr:`.OptionDriver.update_display_callback`
"""
SET_VARIABLE = RETRO_ENVIRONMENT_SET_VARIABLE
"""
.. seealso:: :attr:`.OptionDriver.set_variable`
"""
GET_THROTTLE_STATE = RETRO_ENVIRONMENT_GET_THROTTLE_STATE
"""
.. seealso:: :attr:`.TimingDriver.throttle_state`
"""
GET_SAVESTATE_CONTEXT = RETRO_ENVIRONMENT_GET_SAVESTATE_CONTEXT
"""
.. seealso:: :class:`.SavestateContext`
"""
GET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_SUPPORT = (
RETRO_ENVIRONMENT_GET_HW_RENDER_CONTEXT_NEGOTIATION_INTERFACE_SUPPORT
)
GET_JIT_CAPABLE = RETRO_ENVIRONMENT_GET_JIT_CAPABLE
GET_MICROPHONE_INTERFACE = RETRO_ENVIRONMENT_GET_MICROPHONE_INTERFACE
"""
.. seealso:: :class:`.MicrophoneDriver`
"""
SET_NETPACKET_INTERFACE = RETRO_ENVIRONMENT_SET_NETPACKET_INTERFACE
GET_DEVICE_POWER = RETRO_ENVIRONMENT_GET_DEVICE_POWER
"""
.. seealso:: :class:`.PowerDriver`
"""
GET_PLAYLIST_DIRECTORY = RETRO_ENVIRONMENT_GET_PLAYLIST_DIRECTORY
"""
.. seealso:: :attr:`.PathDriver.playlist_dir`
"""
GET_FILE_BROWSER_START_DIRECTORY = RETRO_ENVIRONMENT_GET_FILE_BROWSER_START_DIRECTORY
"""
.. seealso:: :attr:`.PathDriver.file_browser_start_dir`
"""
retro_environment_t = TypedFunctionPointer[c_bool, [CIntArg[c_uint], c_void_ptr]]
"""
Dispatch an environment call from the core to the frontend.
Registered by the :term:`frontend` and called by the :term:`core`
to perform tasks that don't have a dedicated entry point in libretro,
such as querying frontend capabilities or registering structured data.
:param cmd: One of the :class:`.EnvironmentCall` constants (possibly OR'd
with :data:`~libretro.api.environment.RETRO_ENVIRONMENT_EXPERIMENTAL`
or :data:`~libretro.api.environment.RETRO_ENVIRONMENT_PRIVATE`).
:param data: A :class:`~libretro.ctypes.c_void_ptr` to the environment-call-specific input or output buffer,
or :obj:`None` if the call doesn't take any data.
:return: :obj:`True` if the environment call was recognized and (where applicable) succeeded,
:obj:`False` if the frontend doesn't recognize ``cmd`` or rejected the request.
Corresponds to :c:type:`retro_environment_t` in ``libretro.h``.
"""
__all__ = [
"EnvironmentCall",
"retro_environment_t",
"API_VERSION",
]