Ejemplo n.º 1
0
static void history_playlist_push(content_playlist_t *playlist,
      const char *path, const char *core_path,
      struct retro_system_info *info)
{
   char tmp[PATH_MAX_LENGTH]             = {0};
   global_t                    *global   = global_get_ptr();
   rarch_system_info_t *system           = rarch_system_info_get_ptr();

   if (!playlist || (global->core_type == CORE_TYPE_DUMMY) || !info)
      return;

   /* Path can be relative here.
    * Ensure we're pushing absolute path. */

   strlcpy(tmp, path, sizeof(tmp));

   if (*tmp)
      path_resolve_realpath(tmp, sizeof(tmp));

   if (system->no_content || *tmp)
      content_playlist_push(playlist,
            *tmp ? tmp : NULL,
            NULL,
            core_path,
            info->library_name,
            NULL,
            NULL);
}
Ejemplo n.º 2
0
static void callback_sysutil_exit(uint64_t status,
      uint64_t param, void *userdata)
{

   (void)param;
   (void)userdata;
   (void)status;

#ifndef IS_SALAMANDER

   switch (status)
   {
      case CELL_SYSUTIL_REQUEST_EXITGAME:
         {
            frontend_ctx_driver_t *frontend = frontend_get_ptr();
            rarch_system_info_t *system = rarch_system_info_get_ptr();

            if (system)
               system->shutdown = true;
            if (frontend)
               frontend->shutdown = frontend_ps3_shutdown;
         }
         break;
   }
#endif
}
Ejemplo n.º 3
0
void init_camera(void)
{
   driver_t *driver     = driver_get_ptr();
   settings_t *settings = config_get_ptr();
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   /* Resource leaks will follow if camera is initialized twice. */
   if (driver->camera_data)
      return;

   find_camera_driver();

   driver->camera_data = driver->camera->init(
         *settings->camera.device ? settings->camera.device : NULL,
         system->camera_callback.caps,
         settings->camera.width ?
         settings->camera.width : system->camera_callback.width,
         settings->camera.height ?
         settings->camera.height : system->camera_callback.height);

   if (!driver->camera_data)
   {
      RARCH_ERR("Failed to initialize camera driver. Will continue without camera.\n");
      driver->camera_active = false;
   }

   if (system->camera_callback.initialized)
      system->camera_callback.initialized();
}
Ejemplo n.º 4
0
/**
 * main_exit_save_config:
 *
 * Saves configuration file to disk, and (optionally)
 * autosave state.
 **/
void main_exit_save_config(void)
{
   settings_t *settings = config_get_ptr();
   global_t   *global   = global_get_ptr();
   rarch_system_info_t *info = rarch_system_info_get_ptr();

   if (settings->config_save_on_exit && *global->config_path)
   {
      /* restore original paths in case per-core organization is enabled */
      if (settings->sort_savefiles_enable && orig_savefile_dir[0] != '\0')
         strlcpy(global->savefile_dir,orig_savefile_dir,sizeof(global->savefile_dir));
      if (settings->sort_savestates_enable && orig_savestate_dir[0] != '\0')
         strlcpy(global->savestate_dir,orig_savestate_dir,sizeof(global->savestate_dir));

      /* restore system directory if it was set to <content dir> */
      if(settings->system_in_content_dir && !strcmp(info->info.library_name,"No Core"))
         settings->system_directory[0] = '\0';

      /* Save last core-specific config to the default config location,
       * needed on consoles for core switching and reusing last good 
       * config for new cores.
       */
      config_save_file(global->config_path);

      /* Flush out the core specific config. */
      if (*global->core_specific_config_path &&
            settings->core_specific_config)
         config_save_file(global->core_specific_config_path);
   }

   event_command(EVENT_CMD_AUTOSAVE_STATE);
}
Ejemplo n.º 5
0
/**
 * implementation_magic_value:
 *
 * Not really a hash, but should be enough to differentiate 
 * implementations from each other.
 *
 * Subtle differences in the implementation will not be possible to spot.
 * The alternative would have been checking serialization sizes, but it 
 * was troublesome for cross platform compat.
 **/
static uint32_t implementation_magic_value(void)
{
   size_t i, len;
   uint32_t res                        = 0;
   const char *ver                     = PACKAGE_VERSION;
   unsigned api                        = core.retro_api_version();
   rarch_system_info_t *info           = rarch_system_info_get_ptr();
   const char *lib                     = info ? info->info.library_name : NULL;

   res |= api;

   len = strlen(lib);
   for (i = 0; i < len; i++)
      res ^= lib[i] << (i & 0xf);

   lib = info->info.library_version;
   len = strlen(lib);

   for (i = 0; i < len; i++)
      res ^= lib[i] << (i & 0xf);

   len = strlen(ver);
   for (i = 0; i < len; i++)
      res ^= ver[i] << ((i & 0xf) + 16);

   return res;
}
Ejemplo n.º 6
0
/* Sets 's' to the name of the current core 
 * (shown at the top of the UI). */
int menu_entries_get_core_title(char *s, size_t len)
{
   const char *core_name          = NULL;
   const char *core_version       = NULL;
   global_t *global               = global_get_ptr();
   settings_t *settings           = config_get_ptr();
   rarch_system_info_t      *info = rarch_system_info_get_ptr();

   if (!settings->menu.core_enable)
      return -1; 

   if (global)
   {
      core_name    = global->menu.info.library_name;
      core_version = global->menu.info.library_version;
   }

   if (!core_name || core_name[0] == '\0')
      core_name = info->info.library_name;
   if (!core_name || core_name[0] == '\0')
      core_name = menu_hash_to_str(MENU_VALUE_NO_CORE);

   if (!core_version)
      core_version = info->info.library_version;
   if (!core_version)
      core_version = "";

   snprintf(s, len, "%s - %s %s", PACKAGE_VERSION,
         core_name, core_version);

   return 0;
}
Ejemplo n.º 7
0
/**
 * event_disk_control_set_eject:
 * @new_state            : Eject or close the virtual drive tray.
 *                         false (0) : Close
 *                         true  (1) : Eject
 * @print_log            : Show message onscreen.
 *
 * Ejects/closes of the virtual drive tray.
 **/
static void event_disk_control_set_eject(bool new_state, bool print_log)
{
   char msg[PATH_MAX_LENGTH] = {0};
   bool error                = false;
   rarch_system_info_t *info = rarch_system_info_get_ptr();
   const struct retro_disk_control_callback *control = 
      info ? (const struct retro_disk_control_callback*)&info->disk_control : NULL;

   if (!control || !control->get_num_images)
      return;

   *msg = '\0';

   if (control->set_eject_state(new_state))
      snprintf(msg, sizeof(msg), "%s virtual disk tray.",
            new_state ? "Ejected" : "Closed");
   else
   {
      error = true;
      snprintf(msg, sizeof(msg), "Failed to %s virtual disk tray.",
            new_state ? "eject" : "close");
   }

   if (*msg)
   {
      if (error)
         RARCH_ERR("%s\n", msg);
      else
         RARCH_LOG("%s\n", msg);

      /* Only noise in menu. */
      if (print_log)
         rarch_main_msg_queue_push(msg, 1, 180, true);
   }
}
Ejemplo n.º 8
0
/**
 * driver_camera_poll:
 *
 * Call camera driver's poll function.
 * Used by RETRO_ENVIRONMENT_GET_CAMERA_INTERFACE.
 *
 * Returns: true (1) if successful, otherwise false (0).
 **/
void driver_camera_poll(void)
{
   driver_t            *driver = driver_get_ptr();
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   if (driver->camera && driver->camera->poll && driver->camera_data)
      driver->camera->poll(driver->camera_data,
            system->camera_callback.frame_raw_framebuffer,
            system->camera_callback.frame_opengl_texture);
}
Ejemplo n.º 9
0
/**
 * event_init_controllers:
 *
 * Initialize libretro controllers.
 **/
static void event_init_controllers(void)
{
   unsigned i;
   settings_t *settings = config_get_ptr();
   rarch_system_info_t *info = rarch_system_info_get_ptr();

   for (i = 0; i < MAX_USERS; i++)
   {
      const char *ident = NULL;
      const struct retro_controller_description *desc = NULL;
      unsigned device = settings->input.libretro_device[i];

      if (i < info->num_ports)
         desc = libretro_find_controller_description(
               &info->ports[i], device);

      if (desc)
         ident = desc->desc;

      if (!ident)
      {
         /* If we're trying to connect a completely unknown device,
          * revert back to JOYPAD. */

         if (device != RETRO_DEVICE_JOYPAD && device != RETRO_DEVICE_NONE)
         {
            /* Do not fix settings->input.libretro_device[i],
             * because any use of dummy core will reset this,
             * which is not a good idea. */
            RARCH_WARN("Input device ID %u is unknown to this libretro implementation. Using RETRO_DEVICE_JOYPAD.\n", device);
            device = RETRO_DEVICE_JOYPAD;
         }
         ident = "Joypad";
      }

      switch (device)
      {
         case RETRO_DEVICE_NONE:
            RARCH_LOG("Disconnecting device from port %u.\n", i + 1);
            pretro_set_controller_port_device(i, device);
            break;
         case RETRO_DEVICE_JOYPAD:
            break;
         default:
            /* Some cores do not properly range check port argument.
             * This is broken behavior of course, but avoid breaking
             * cores needlessly. */
            RARCH_LOG("Connecting %s (ID: %u) to port %u.\n", ident,
                  device, i + 1);
            pretro_set_controller_port_device(i, device);
            break;
      }
   }
}
Ejemplo n.º 10
0
static void menu_driver_toggle(bool latch)
{
   const menu_ctx_driver_t *menu_driver = menu_ctx_driver_get_ptr();
   settings_t                 *settings = config_get_ptr();
   global_t                   *global   = global_get_ptr();
   rarch_system_info_t          *system = rarch_system_info_get_ptr();

   if (menu_driver->toggle)
      menu_driver->toggle(latch);

   if (latch)
      menu_driver_ctl(RARCH_MENU_CTL_SET_ALIVE, NULL);
   else
      menu_driver_ctl(RARCH_MENU_CTL_UNSET_ALIVE, NULL);

   if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL))
   {
      menu_entries_set_refresh(false);

      /* Menu should always run with vsync on. */
      event_command(EVENT_CMD_VIDEO_SET_BLOCKING_STATE);
      /* Stop all rumbling before entering the menu. */
      event_command(EVENT_CMD_RUMBLE_STOP);

      if (settings->menu.pause_libretro)
         event_command(EVENT_CMD_AUDIO_STOP);

      /* Override keyboard callback to redirect to menu instead.
       * We'll use this later for something ...
       * FIXME: This should probably be moved to menu_common somehow. */
      if (global)
      {
         global->frontend_key_event = system->key_event;
         system->key_event          = menu_input_key_event;

         runloop_ctl(RUNLOOP_CTL_SET_FRAME_TIME_LAST, NULL);
      }
   }
   else
   {
      if (!runloop_ctl(RUNLOOP_CTL_IS_SHUTDOWN, NULL))
         driver_set_nonblock_state();

      if (settings && settings->menu.pause_libretro)
         event_command(EVENT_CMD_AUDIO_START);

      /* Prevent stray input from going to libretro core */
      input_driver_ctl(RARCH_INPUT_CTL_SET_FLUSHING_INPUT, NULL);

      /* Restore libretro keyboard callback. */
      if (global)
         system->key_event = global->frontend_key_event;
   }
}
Ejemplo n.º 11
0
static int playlist_association_left(unsigned type, const char *label,
      bool wraparound)
{
   unsigned idx     = type - MENU_SETTINGS_PLAYLIST_ASSOCIATION_START;
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   (void)idx;
   (void)system;

   return 0;
}
Ejemplo n.º 12
0
static int core_setting_left(unsigned type, const char *label,
      bool wraparound)
{
   unsigned idx     = type - MENU_SETTINGS_CORE_OPTION_START;
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   (void)label;

   core_option_prev(system->core_options, idx);

   return 0;
}
Ejemplo n.º 13
0
static void qnx_handle_navigator_event(
      qnx_input_t *qnx, bps_event_t *event)
{
   int rc;
   navigator_window_state_t state;
   bps_event_t *event_pause = NULL;
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   (void)rc;

   switch (bps_event_get_code(event))
   {
      case NAVIGATOR_SWIPE_DOWN:
         qnx->lifecycle_state ^= (UINT64_C(1) << RARCH_MENU_TOGGLE);
         break;
      case NAVIGATOR_EXIT:
         /* Catch this in thumbnail loop. */
         break;
      case NAVIGATOR_WINDOW_STATE:
         state = navigator_event_get_window_state(event);

         switch(state)
         {
            case NAVIGATOR_WINDOW_THUMBNAIL:
               for(;;)
               {
                  /* Block until we get a resume or exit event. */
                  rc = bps_get_event(&event_pause, -1);

                  if(bps_event_get_code(event_pause) == NAVIGATOR_WINDOW_STATE)
                  {
                     state = navigator_event_get_window_state(event_pause);
                     if(state == NAVIGATOR_WINDOW_FULLSCREEN)
                        break;
                  }
                  else if (bps_event_get_code(event_pause) == NAVIGATOR_EXIT)
                  {
                     system->shutdown = true;
                     break;
                  }
               }
               break;
            case NAVIGATOR_WINDOW_FULLSCREEN:
               break;
            case NAVIGATOR_WINDOW_INVISIBLE:
               break;
         }
         break;
      default:
         break;
   }
}
Ejemplo n.º 14
0
static int action_start_core_setting(unsigned type,
      const char *label)
{
   unsigned idx           = type - MENU_SETTINGS_CORE_OPTION_START;
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   (void)label;

   if (system)
      core_option_set_default(system->core_options, idx);

   return 0;
}
Ejemplo n.º 15
0
/**
 * input_keyboard_event:
 * @down                     : Keycode was pressed down?
 * @code                     : Keycode.
 * @character                : Character inputted.
 * @mod                      : TODO/FIXME: ???
 *
 * Keyboard event utils. Called by drivers when keyboard events are fired.
 * This interfaces with the global system driver struct and libretro callbacks.
 **/
void input_keyboard_event(bool down, unsigned code,
      uint32_t character, uint16_t mod, unsigned device)
{
   static bool deferred_wait_keys;
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   if (deferred_wait_keys)
   {
      if (down)
         return;

      input_keyboard_wait_keys_cancel();
      deferred_wait_keys = false;
   }
   else if (g_keyboard_press_cb)
   {
      if (!down)
         return;
      if (code == RETROK_UNKNOWN)
         return;
      if (g_keyboard_press_cb(g_keyboard_press_data, code))
         return;
      deferred_wait_keys = true;
   }
   else if (g_keyboard_line)
   {
      if (!down)
         return;

      switch (device)
      {
         case RETRO_DEVICE_POINTER:
            if (!input_keyboard_line_event(g_keyboard_line, (code != 0x12d) ? (char)code : character))
               return;
            break;
         default:
            if (!input_keyboard_line_event(g_keyboard_line, character))
               return;
            break;
      }

      /* Line is complete, can free it now. */
      input_keyboard_line_free(g_keyboard_line);
      g_keyboard_line = NULL;

      /* Unblock all hotkeys. */
      input_driver_keyboard_mapping_set_block(false);
   }
   else if (system->key_event)
      system->key_event(down, code, character, mod);
}
Ejemplo n.º 16
0
/**
 * rarch_game_specific_options:
 * @cmd                          : Output variable with path to core options file.
 *
 * Environment callback function implementation.
 *
 * Returns: true (1) if a game specific core options path has been found,
 * otherwise false (0).
 **/
static bool rarch_game_specific_options(char **output)
{
   settings_t *settings = config_get_ptr();
   global_t *global     = global_get_ptr();
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   const char *core_name                  = NULL;
   const char *game_name                  = NULL;
   config_file_t *option_file             = NULL;
   char game_path[PATH_MAX_LENGTH]        = {0};
   char config_directory[PATH_MAX_LENGTH] = {0};

   core_name = system ? system->info.library_name : NULL;
   game_name = global ? path_basename(global->name.base) : NULL;

   if (!core_name || !game_name)
      return false;
   if (core_name[0] == '\0' || game_name[0] == '\0')
      return false;

   RARCH_LOG("Per-Game Options: core name: %s\n", core_name);
   RARCH_LOG("Per-Game Options: game name: %s\n", game_name);

   /* Config directory: config_directory.
   * Try config directory setting first,
   * fallback to the location of the current configuration file. */
   if (settings->menu_config_directory[0] != '\0')
      strlcpy(config_directory, settings->menu_config_directory, PATH_MAX_LENGTH);
   else if (global->path.config[0] != '\0')
      fill_pathname_basedir(config_directory, global->path.config, PATH_MAX_LENGTH);
   else
   {
      RARCH_WARN("Per-Game Options: no config directory set\n");
      return false;
   }

   /* Concatenate strings into full paths for game_path */
   fill_pathname_join(game_path, config_directory, core_name, PATH_MAX_LENGTH);
   fill_pathname_join(game_path, game_path, game_name, PATH_MAX_LENGTH);
   strlcat(game_path, ".opt", PATH_MAX_LENGTH);

   option_file = config_file_new(game_path);
   if (!option_file)
      return false;

   config_file_free(option_file);
   
   RARCH_LOG("Per-Game Options: game-specific core options found at %s\n", game_path);
   *output = strdup(game_path);
   return true;
}
Ejemplo n.º 17
0
void menu_driver_toggle(bool latch)
{
   driver_t                     *driver = driver_get_ptr();
   const menu_ctx_driver_t *menu_driver = menu_ctx_driver_get_ptr();
   settings_t                 *settings = config_get_ptr();
   global_t                   *global   = global_get_ptr();
   rarch_system_info_t          *system = rarch_system_info_get_ptr();

   if (menu_driver->toggle)
      menu_driver->toggle(latch);

   menu_alive = latch;

   if (menu_alive == true)
   {
      menu_entries_set_refresh(false);

      /* Menu should always run with vsync on. */
      event_command(EVENT_CMD_VIDEO_SET_BLOCKING_STATE);
      /* Stop all rumbling before entering the menu. */
      event_command(EVENT_CMD_RUMBLE_STOP);

      if (settings->menu.pause_libretro)
         event_command(EVENT_CMD_AUDIO_STOP);

      /* Override keyboard callback to redirect to menu instead.
       * We'll use this later for something ...
       * FIXME: This should probably be moved to menu_common somehow. */
      if (global)
      {
         global->frontend_key_event = system->key_event;
         system->key_event          = menu_input_key_event;
         system->frame_time_last    = 0;
      }
   }
   else
   {
      driver_set_nonblock_state(driver->nonblock_state);

      if (settings && settings->menu.pause_libretro)
         event_command(EVENT_CMD_AUDIO_START);

      /* Prevent stray input from going to libretro core */
      driver->flushing_input = true;

      /* Restore libretro keyboard callback. */
      if (global)
         system->key_event = global->frontend_key_event;
   }
}
Ejemplo n.º 18
0
void uninit_location(void)
{
   driver_t            *driver = driver_get_ptr();
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   if (driver->location_data && driver->location)
   {
      if (system->location_callback.deinitialized)
         system->location_callback.deinitialized();

      if (driver->location->free)
         driver->location->free(driver->location_data);
   }
   driver->location_data = NULL;
}
Ejemplo n.º 19
0
void uninit_camera(void)
{
   driver_t *driver = driver_get_ptr();
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   if (driver->camera_data && driver->camera)
   {
      if (system->camera_callback.deinitialized)
         system->camera_callback.deinitialized();

      if (driver->camera->free)
         driver->camera->free(driver->camera_data);
   }
   driver->camera_data = NULL;
}
Ejemplo n.º 20
0
static void driver_adjust_system_rates(void)
{
   rarch_system_info_t *system = rarch_system_info_get_ptr();
   driver_t            *driver = driver_get_ptr();

   audio_monitor_adjust_system_rates();
   video_monitor_adjust_system_rates();

   if (!driver->video_data)
      return;

   if (system->force_nonblock)
      event_command(EVENT_CMD_VIDEO_SET_NONBLOCKING_STATE);
   else
      driver_set_nonblock_state(driver->nonblock_state);
}
Ejemplo n.º 21
0
bool video_monitor_get_fps(char *buf, size_t size,
      char *buf_fps, size_t size_fps)
{
   static float last_fps;
   retro_time_t        new_time;
   static retro_time_t curr_time;
   static retro_time_t fps_time;
   uint64_t frame_count = video_driver_get_frame_count();
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   *buf = '\0';

   new_time = rarch_get_time_usec();

   if (frame_count)
   {
      bool ret = false;
      unsigned write_index = video_state.frame_time_samples_count++ &
         (MEASURE_FRAME_TIME_SAMPLES_COUNT - 1);

      video_state.frame_time_samples[write_index] = new_time - fps_time;
      fps_time = new_time;

      if ((frame_count % FPS_UPDATE_INTERVAL) == 0)
      {
         last_fps = TIME_TO_FPS(curr_time, new_time, FPS_UPDATE_INTERVAL);
         curr_time = new_time;

         snprintf(buf, size, "%s || FPS: %6.1f || Frames: " U64_SIGN,
               system->title_buf, last_fps, (unsigned long long)frame_count);
         ret = true;
      }

      if (buf_fps)
         snprintf(buf_fps, size_fps, "FPS: %6.1f || Frames: " U64_SIGN,
               last_fps, (unsigned long long)frame_count);

      return ret;
   }

   curr_time = fps_time = new_time;
   strlcpy(buf, system->title_buf, size);
   if (buf_fps)
      strlcpy(buf_fps, "N/A", size_fps);

   return true;
}
Ejemplo n.º 22
0
/**
 * event_disk_control_set_index:
 * @idx                : Index of disk to set as current.
 *
 * Sets current disk to @index.
 **/
static void event_disk_control_set_index(unsigned idx)
{
   unsigned num_disks;
   char msg[PATH_MAX_LENGTH] = {0};
   rarch_system_info_t                      *info    = rarch_system_info_get_ptr();
   const struct retro_disk_control_callback *control =
      info ? (const struct retro_disk_control_callback*)&info->disk_control : NULL;
   bool error = false;

   if (!control || !control->get_num_images)
      return;

   *msg = '\0';

   num_disks = control->get_num_images();

   if (control->set_image_index(idx))
   {
      if (idx < num_disks)
         snprintf(msg, sizeof(msg), "Setting disk %u of %u in tray.",
               idx + 1, num_disks);
      else
         strlcpy(msg,
               msg_hash_to_str(MSG_REMOVED_DISK_FROM_TRAY),
               sizeof(msg));
   }
   else
   {
      if (idx < num_disks)
         snprintf(msg, sizeof(msg), "Failed to set disk %u of %u.",
               idx + 1, num_disks);
      else
         strlcpy(msg,
               msg_hash_to_str(MSG_FAILED_TO_REMOVE_DISK_FROM_TRAY),
               sizeof(msg));
      error = true;
   }

   if (*msg)
   {
      if (error)
         RARCH_ERR("%s\n", msg);
      else
         RARCH_LOG("%s\n", msg);
      rarch_main_msg_queue_push(msg, 1, 180, true);
   }
}
Ejemplo n.º 23
0
/**
 * event_disk_control_append_image:
 * @path                 : Path to disk image. 
 *
 * Appends disk image to disk image list.
 **/
void event_disk_control_append_image(const char *path)
{
   unsigned new_idx;
   char msg[PATH_MAX_LENGTH]                         = {0};
   struct retro_game_info info                       = {0};
   global_t                                  *global = global_get_ptr();
   rarch_system_info_t                       *sysinfo = rarch_system_info_get_ptr();
   const struct retro_disk_control_callback *control = 
      sysinfo ? (const struct retro_disk_control_callback*)&sysinfo->disk_control
      : NULL;

   if (!control)
      return;

   event_disk_control_set_eject(true, false);

   control->add_image_index();
   new_idx = control->get_num_images();
   if (!new_idx)
      return;
   new_idx--;

   info.path = path;
   control->replace_image_index(new_idx, &info);

   strlcpy(msg, "Appended disk: ", sizeof(msg));
   strlcat(msg, path, sizeof(msg));
   RARCH_LOG("%s\n", msg);
   rarch_main_msg_queue_push(msg, 0, 180, true);

   event_command(EVENT_CMD_AUTOSAVE_DEINIT);

   /* TODO: Need to figure out what to do with subsystems case. */
   if (!*global->subsystem)
   {
      /* Update paths for our new image.
       * If we actually use append_image, we assume that we
       * started out in a single disk case, and that this way
       * of doing it makes the most sense. */
      rarch_set_paths(path);
      rarch_fill_pathnames();
   }

   event_command(EVENT_CMD_AUTOSAVE_INIT);

   event_disk_control_set_eject(false, false);
}
Ejemplo n.º 24
0
static int deferred_push_default(menu_displaylist_info_t *info)
{
    settings_t        *settings = config_get_ptr();
    global_t            *global = global_get_ptr();
    rarch_system_info_t *system = rarch_system_info_get_ptr();

    info->type_default = MENU_FILE_PLAIN;
    info->setting      = menu_setting_find(info->label);

    if (info->setting && info->setting->browser_selection_type == ST_DIR) {}
    else if (global->menu.info.valid_extensions)
    {
        if (*global->menu.info.valid_extensions)
            strlcpy(info->exts, global->menu.info.valid_extensions,
                    sizeof(info->exts));
    }
    else
        strlcpy(info->exts, system->valid_extensions, sizeof(info->exts));

    (void)settings;

    if (settings->multimedia.builtin_mediaplayer_enable ||
            settings->multimedia.builtin_imageviewer_enable)
    {
        struct retro_system_info sysinfo = {0};

        (void)sysinfo;
#ifdef HAVE_FFMPEG
        if (settings->multimedia.builtin_mediaplayer_enable)
        {
            libretro_ffmpeg_retro_get_system_info(&sysinfo);
            strlcat(info->exts, "|", sizeof(info->exts));
            strlcat(info->exts, sysinfo.valid_extensions, sizeof(info->exts));
        }
#endif
#ifdef HAVE_IMAGEVIEWER
        if (settings->multimedia.builtin_imageviewer_enable)
        {
            libretro_imageviewer_retro_get_system_info(&sysinfo);
            strlcat(info->exts, "|", sizeof(info->exts));
            strlcat(info->exts, sysinfo.valid_extensions, sizeof(info->exts));
        }
#endif
    }

    return menu_displaylist_push_list(info, DISPLAYLIST_DEFAULT);
}
Ejemplo n.º 25
0
/**
 * time_to_exit:
 *
 * rarch_main_iterate() checks this to see if it's time to
 * exit out of the main loop.
 *
 * Reasons for exiting:
 * a) Shutdown environment callback was invoked.
 * b) Quit key was pressed.
 * c) Frame count exceeds or equals maximum amount of frames to run.
 * d) Video driver no longer alive.
 * e) End of BSV movie and BSV EOF exit is true. (TODO/FIXME - explain better)
 *
 * Returns: 1 if any of the above conditions are true, otherwise 0.
 **/
static INLINE int time_to_exit(driver_t *driver, global_t *global,
      runloop_t *runloop, event_cmd_state_t *cmd)
{
   const video_driver_t *video   = driver ? (const video_driver_t*)driver->video : NULL;
   rarch_system_info_t *system   = rarch_system_info_get_ptr();
   bool shutdown_pressed         = system->shutdown;
   bool video_alive              = video->alive(driver->video_data);
   bool movie_end                = (global->bsv.movie_end && global->bsv.eof_exit);
   uint64_t frame_count          = video_driver_get_frame_count();
   bool frame_count_end          = (runloop->frames.video.max && 
         frame_count >= runloop->frames.video.max);

   if (shutdown_pressed || cmd->quit_key_pressed || frame_count_end || movie_end
         || !video_alive)
      return 1;
   return 0;
}
Ejemplo n.º 26
0
int core_setting_right(unsigned type, const char *label,
      bool wraparound)
{
   driver_t * driver = driver_get_ptr();
   const ui_companion_driver_t *ui = ui_companion_get_ptr();
   unsigned idx     = type - MENU_SETTINGS_CORE_OPTION_START;
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   (void)label;

   core_option_next(system->core_options, idx);

   if (ui->notify_refresh && ui_companion_is_on_foreground())
      ui->notify_refresh(driver->ui_companion_data);

   return 0;
}
Ejemplo n.º 27
0
/**
 * rarch_main_load_dummy_core:
 *
 * Quits out of RetroArch main loop.
 *
 * On special case, loads dummy core 
 * instead of exiting RetroArch completely.
 * Aborts core shutdown if invoked.
 *
 * Returns: -1 if we are about to quit, otherwise 0.
 **/
static int rarch_main_iterate_quit(settings_t *settings, global_t *global)
{
   rarch_system_info_t *system = rarch_system_info_get_ptr();

   if (global->core_shutdown_initiated
         && settings->load_dummy_on_core_shutdown)
   {
      if (!event_command(EVENT_CMD_PREPARE_DUMMY))
         return -1;

      system->shutdown = false;
      global->core_shutdown_initiated = false;

      return 0;
   }

   return -1;
}
Ejemplo n.º 28
0
/**
 * driver_set_nonblock_state:
 * @enable             : Enable nonblock state?
 *
 * Sets audio and video drivers to nonblock state.
 *
 * If @enable is false, sets blocking state for both
 * audio and video drivers instead.
 **/
void driver_set_nonblock_state(bool enable)
{
   settings_t *settings = config_get_ptr();
   rarch_system_info_t *system = rarch_system_info_get_ptr();
   driver_t *driver     = driver_get_ptr();

   /* Only apply non-block-state for video if we're using vsync. */
   if (driver->video_active && driver->video_data)
   {
      bool video_nonblock = enable;

      if (!settings->video.vsync || system->force_nonblock)
         video_nonblock = true;
      video_driver_set_nonblock_state(video_nonblock);
   }

   audio_driver_set_nonblocking_state(enable);
}
Ejemplo n.º 29
0
static void menu_action_setting_disp_set_label(file_list_t* list,
      unsigned *w, unsigned type, unsigned i,
      const char *label,
      char *s, size_t len,
      const char *entry_label,
      const char *path,
      char *s2, size_t len2)
{
   rarch_system_info_t *system = rarch_system_info_get_ptr();
   uint32_t hash_label  = menu_hash_calculate(label);

   *s = '\0';
   *w = 19;

   switch (hash_label)
   {
      case MENU_LABEL_LOAD_CONTENT_HISTORY:
         *w = strlen(label);
         break;
      case MENU_LABEL_SYSTEM_INFORMATION:
         *w = 2;
         break;
      case MENU_LABEL_DEBUG_INFORMATION:
         *w = 2;
         break;
   }

   if (type >= MENU_SETTINGS_CORE_OPTION_START)
   {
      const char *core_opt = NULL;
      if (!system)
         return;

      core_opt = core_option_get_val(system->core_options,
               type - MENU_SETTINGS_CORE_OPTION_START);

      strlcpy(s, core_opt ? core_opt : "", len);
   }
   else
      setting_get_label(list, s,
            len, w, type, label, entry_label, i);

   strlcpy(s2, path, len2);
}
Ejemplo n.º 30
0
/* Time to exit out of the main loop?
 * Reasons for exiting:
 * a) Shutdown environment callback was invoked.
 * b) Quit key was pressed.
 * c) Frame count exceeds or equals maximum amount of frames to run.
 * d) Video driver no longer alive.
 * e) End of BSV movie and BSV EOF exit is true. (TODO/FIXME - explain better)
 */
static INLINE int rarch_main_iterate_time_to_exit(event_cmd_state_t *cmd)
{
   settings_t *settings          = config_get_ptr();
   global_t   *global            = global_get_ptr();
   driver_t *driver              = driver_get_ptr();
   rarch_system_info_t *system   = rarch_system_info_get_ptr();
   video_driver_t *video         = driver ? (video_driver_t*)driver->video : NULL;
   bool shutdown_pressed         = (system && system->shutdown) || cmd->quit_key_pressed;
   bool video_alive              = video && video->alive(driver->video_data);
   bool movie_end                = (global->bsv.movie_end && global->bsv.eof_exit);
   uint64_t *frame_count         = video_driver_get_frame_count();
   bool frame_count_end          = main_max_frames && (*frame_count >= main_max_frames);

   if (shutdown_pressed || frame_count_end || movie_end || !video_alive || global->exec)
   {
      if (global->exec)
         global->exec = false;

      /* Quits out of RetroArch main loop.
       * On special case, loads dummy core
       * instead of exiting RetroArch completely.
       * Aborts core shutdown if invoked.
       */
      if (global->core_shutdown_initiated
            && settings->load_dummy_on_core_shutdown)
      {
         if (!event_command(EVENT_CMD_PREPARE_DUMMY))
            return -1;

         system->shutdown = false;
         global->core_shutdown_initiated = false;

         return 0;
      }

      return -1;
   }

   return 1;
}