Skip to content

Commit

Permalink
Add frontend_context.c - use for all console platform ports
Browse files Browse the repository at this point in the history
(and other possible ports in future)
  • Loading branch information
inactive123 committed Jul 26, 2013
1 parent 1549866 commit 69381c2
Show file tree
Hide file tree
Showing 8 changed files with 171 additions and 12 deletions.
2 changes: 1 addition & 1 deletion Makefile.ps3.salamander
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ endif
STRIP = $(CELL_SDK)/host-win32/ppu/bin/ppu-lv2-strip.exe

PPU_CFLAGS += -I. -D__CELLOS_LV2__ -DIS_SALAMANDER -DRARCH_CONSOLE -DHAVE_SYSUTILS -DHAVE_SYSMODULES -DHAVE_RARCH_EXEC
PPU_SRCS = frontend/frontend_salamander.c file_path.c compat/compat.c conf/config_file.c
PPU_SRCS = frontend/frontend_salamander.c frontend/frontend_context.c file_path.c compat/compat.c conf/config_file.c

ifeq ($(HAVE_LOGGER), 1)
PPU_CFLAGS += -DHAVE_LOGGER -Iconsole/logger
Expand Down
30 changes: 24 additions & 6 deletions frontend/frontend.c
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,11 @@
#include "menu/rmenu.h"
#endif

#if defined(RARCH_CONSOLE)
#include "frontend_context.h"
frontend_ctx_driver_t *frontend_ctx;
#endif

#if defined(__QNX__)
#include <bps/bps.h>
#elif defined(__CELLOS_LV2__)
Expand Down Expand Up @@ -108,13 +113,13 @@ static bool libretro_install_core(const char *path_prefix,
}
#endif

static void rarch_preinit(void)
static void system_preinit(void)
{
#if defined(__QNX__) && !defined(HAVE_BB10)
//Initialize BPS libraries
bps_initialize();
#elif defined(RARCH_CONSOLE)
system_init();
frontend_ctx->init();
#endif
}

Expand Down Expand Up @@ -196,6 +201,16 @@ static void system_shutdown(void)
#endif
}

static int system_ctx_init(void)
{
#ifdef RARCH_CONSOLE
if ((frontend_ctx = (frontend_ctx_driver_t*)frontend_ctx_init_first()) == NULL)
return -1;
#endif

return 0;
}

#if defined(__APPLE__)
static pthread_mutex_t apple_event_queue_lock = PTHREAD_MUTEX_INITIALIZER;

Expand Down Expand Up @@ -252,7 +267,10 @@ void* rarch_main(void* args)
int rarch_main(int argc, char *argv[])
#endif
{
rarch_preinit();
if (system_ctx_init() != 0)
return 0;

system_preinit();

#if !defined(__APPLE__)
rarch_main_clear_state();
Expand Down Expand Up @@ -290,7 +308,7 @@ int rarch_main(int argc, char *argv[])
menu_init();

#ifdef RARCH_CONSOLE
system_process_args(argc, argv);
frontend_ctx->process_args(argc, argv);
g_extern.lifecycle_mode_state |= 1ULL << MODE_LOAD_GAME;
#else
g_extern.lifecycle_mode_state |= 1ULL << MODE_GAME;
Expand Down Expand Up @@ -419,10 +437,10 @@ int rarch_main(int argc, char *argv[])
fclose(g_extern.log_file);
g_extern.log_file = NULL;
#endif
system_deinit();
frontend_ctx->deinit();

if (g_extern.lifecycle_mode_state & (1ULL << MODE_EXITSPAWN))
system_exitspawn();
frontend_ctx->exitspawn();
#endif

rarch_main_clear_state();
Expand Down
52 changes: 52 additions & 0 deletions frontend/frontend_context.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2013 - Hans-Kristian Arntzen
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/

#include "frontend_context.h"
#include <string.h>

#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif

static const frontend_ctx_driver_t *frontend_ctx_drivers[] = {
#if defined(__CELLOS_LV2__)
&frontend_ctx_ps3,
#endif
#if defined(_XBOX)
&frontend_ctx_xdk,
#endif
#if defined(GEKKO)
&frontend_ctx_gx,
#endif
};

const frontend_ctx_driver_t *frontend_ctx_find_driver(const char *ident)
{
for (unsigned i = 0; i < sizeof(frontend_ctx_drivers) / sizeof(frontend_ctx_drivers[0]); i++)
{
if (strcmp(frontend_ctx_drivers[i]->ident, ident) == 0)
return frontend_ctx_drivers[i];
}

return NULL;
}

const frontend_ctx_driver_t *frontend_ctx_init_first(void)
{
for (unsigned i = 0; i < sizeof(frontend_ctx_drivers) / sizeof(frontend_ctx_drivers[0]); i++)
return frontend_ctx_drivers[i];

return NULL;
}
48 changes: 48 additions & 0 deletions frontend/frontend_context.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
/* RetroArch - A frontend for libretro.
* Copyright (C) 2010-2013 - Hans-Kristian Arntzen
* Copyright (C) 2011-2013 - Daniel De Matteis
*
* RetroArch is free software: you can redistribute it and/or modify it under the terms
* of the GNU General Public License as published by the Free Software Found-
* ation, either version 3 of the License, or (at your option) any later version.
*
* RetroArch is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
* PURPOSE. See the GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License along with RetroArch.
* If not, see <http://www.gnu.org/licenses/>.
*/

#ifndef __FRONTEND_CONTEXT_H
#define __FRONTEND_CONTEXT_H

#include "../boolean.h"
#include "../driver.h"

#ifdef HAVE_CONFIG_H
#include "../config.h"
#endif

typedef struct frontend_ctx_driver
{
void (*get_environment_settings)(int argc, char *argv[]);

void (*init)(void);
void (*deinit)(void);
void (*exitspawn)(void);

int (*process_args)(int argc, char *argv[]);

// Human readable string.
const char *ident;
} frontend_ctx_driver_t;

extern const frontend_ctx_driver_t frontend_ctx_gx;
extern const frontend_ctx_driver_t frontend_ctx_ps3;
extern const frontend_ctx_driver_t frontend_ctx_xdk;

const frontend_ctx_driver_t *frontend_ctx_find_driver(const char *ident); // Finds driver with ident. Does not initialize.
const frontend_ctx_driver_t *frontend_ctx_init_first(void); // Finds first suitable driver and initializes.

#endif
24 changes: 21 additions & 3 deletions frontend/frontend_salamander.c
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@
#include "../file_ext.h"
#include "frontend_salamander.h"

#if defined(RARCH_CONSOLE)
#include "frontend_context.h"
frontend_ctx_driver_t *frontend_ctx;
#endif

#if defined(__CELLOS_LV2__)
#include "platform/platform_ps3_exec.c"
#include "platform/platform_ps3.c"
Expand Down Expand Up @@ -86,13 +91,26 @@ static void find_first_libretro_core(char *first_file,
dir_list_free(list);
}

static int system_ctx_init(void)
{
#ifdef RARCH_CONSOLE
if ((frontend_ctx = (frontend_ctx_driver_t*)frontend_ctx_init_first()) == NULL)
return -1;
#endif

return 0;
}

int main(int argc, char *argv[])
{
system_init();
if (system_ctx_init() != 0)
return 0;

frontend_ctx->init();
get_environment_settings(argc, argv);
salamander_init_settings();
system_deinit();
system_exitspawn();
frontend_ctx->deinit();
frontend_ctx->exitspawn();

return 1;
}
12 changes: 10 additions & 2 deletions frontend/platform/platform_gx.c
Original file line number Diff line number Diff line change
Expand Up @@ -338,11 +338,11 @@ static void system_deinit(void)
#endif
}

#ifndef IS_SALAMANDER
static int system_process_args(int argc, char *argv[])
{
int ret = 0;

#ifndef IS_SALAMANDER
// a big hack: sometimes salamander doesn't save the new core it loads on first boot,
// so we make sure g_settings.libretro is set here
if (!g_settings.libretro[0] && argc >= 1 && strrchr(argv[0], '/'))
Expand All @@ -354,8 +354,16 @@ static int system_process_args(int argc, char *argv[])
"%s%s", argv[1], argv[2]);
ret = 1;
}
#endif

return ret;
}

#endif
const frontend_ctx_driver_t frontend_ctx_gx = {
get_environment_settings,
system_init,
system_deinit,
system_exitspawn,
system_process_args,
"gx",
};
11 changes: 11 additions & 0 deletions frontend/platform/platform_ps3.c
Original file line number Diff line number Diff line change
Expand Up @@ -342,12 +342,14 @@ static void system_init(void)

static int system_process_args(int argc, char *argv[])
{
#ifndef IS_SALAMANDER
if (argc > 1)
{
RARCH_LOG("Auto-start game %s.\n", argv[1]);
strlcpy(g_extern.fullpath, argv[1], sizeof(g_extern.fullpath));
return 1;
}
#endif

return 0;
}
Expand Down Expand Up @@ -414,3 +416,12 @@ static void system_exitspawn(void)
#endif

}

const frontend_ctx_driver_t frontend_ctx_ps3 = {
get_environment_settings,
system_init,
system_deinit,
system_exitspawn,
system_process_args,
"ps3",
};
4 changes: 4 additions & 0 deletions griffin/griffin.c
Original file line number Diff line number Diff line change
Expand Up @@ -440,6 +440,10 @@ REWIND
============================================================ */
#include "../rewind.c"

#if defined(RARCH_CONSOLE)
#include "../frontend/frontend_context.c"
#endif

/*============================================================
MAIN
============================================================ */
Expand Down

0 comments on commit 69381c2

Please sign in to comment.