mirror of
https://github.com/Oibaf66/frodo-wii.git
synced 2024-11-28 14:35:27 +01:00
Added argument management, fixed bug for prg files with sdhc card
This commit is contained in:
parent
434971987f
commit
706fc918dd
@ -224,7 +224,7 @@ uint8 ArchDrive::open_file(int channel, const uint8 *name, int name_len)
|
|||||||
// Open temporary file
|
// Open temporary file
|
||||||
if ((file[channel] =
|
if ((file[channel] =
|
||||||
#if defined(GEKKO)
|
#if defined(GEKKO)
|
||||||
fopen("/frodo/tmp/a", "w+")
|
fopen("/frodo/tmp/ab", "w+")
|
||||||
#else
|
#else
|
||||||
tmpfile()
|
tmpfile()
|
||||||
#endif
|
#endif
|
||||||
|
@ -112,10 +112,32 @@ void C64::startFakeKeySequence(const char *str)
|
|||||||
this->fake_key_sequence = true;
|
this->fake_key_sequence = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Class already defined in disck_menu.cpp
|
||||||
|
class StartGameListener : public TimeoutHandler
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
StartGameListener()
|
||||||
|
{
|
||||||
|
|
||||||
|
Gui::gui->status_bar->queueMessage("Resetting the C64");
|
||||||
|
TheC64->Reset();
|
||||||
|
TimerController::controller->arm(this, 4500);
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void timeoutCallback()
|
||||||
|
{
|
||||||
|
Gui::gui->status_bar->queueMessage("Invoking the load sequence");
|
||||||
|
TheC64->startFakeKeySequence("\nLOAD \"*\",8,1\nRUN\n");
|
||||||
|
delete this;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Start main emulation thread
|
* Start main emulation thread
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
extern char *floppy8;
|
||||||
|
|
||||||
void C64::Run(void)
|
void C64::Run(void)
|
||||||
{
|
{
|
||||||
// Reset chips
|
// Reset chips
|
||||||
@ -131,6 +153,9 @@ void C64::Run(void)
|
|||||||
PatchKernal(ThePrefs.FastReset, ThePrefs.Emul1541Proc);
|
PatchKernal(ThePrefs.FastReset, ThePrefs.Emul1541Proc);
|
||||||
|
|
||||||
quit_thyself = false;
|
quit_thyself = false;
|
||||||
|
|
||||||
|
if (floppy8) new StartGameListener();
|
||||||
|
|
||||||
thread_func();
|
thread_func();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
static const char *game_exts[] = {".d64", ".D64", ".t64", ".T64",
|
static const char *game_exts[] = {".d64", ".D64", ".t64", ".T64",
|
||||||
".prg",".PRG", ".p00", ".P00", NULL};
|
".prg",".PRG", ".p00", ".P00", NULL};
|
||||||
static const char *prg_exts[] = {".prg",".PRG", ".p00", ".P00", NULL};
|
const char *prg_exts[] = {".prg",".PRG", ".p00", ".P00", NULL};
|
||||||
|
|
||||||
class DiscMenu;
|
class DiscMenu;
|
||||||
|
|
||||||
@ -120,7 +120,7 @@ public:
|
|||||||
FILE *src, *dst;
|
FILE *src, *dst;
|
||||||
|
|
||||||
tmp_filename = (char *)xmalloc(strlen(Gui::gui->tmp_path) + 4);
|
tmp_filename = (char *)xmalloc(strlen(Gui::gui->tmp_path) + 4);
|
||||||
sprintf(tmp_filename, "%s/a", Gui::gui->tmp_path);
|
sprintf(tmp_filename, "%s/ab", Gui::gui->tmp_path);
|
||||||
|
|
||||||
/* Clean temp dir first (we only want one file) */
|
/* Clean temp dir first (we only want one file) */
|
||||||
unlink(tmp_filename);
|
unlink(tmp_filename);
|
||||||
|
@ -20,22 +20,6 @@
|
|||||||
|
|
||||||
extern SDL_Surface *screen;
|
extern SDL_Surface *screen;
|
||||||
|
|
||||||
#if defined(GEKKO)
|
|
||||||
#define THEME_ROOT_PATH "/frodo/themes"
|
|
||||||
#define METADATA_ROOT_PATH "/frodo/metadata"
|
|
||||||
#define GAME_ROOT_PATH "/frodo/images"
|
|
||||||
#define GAME_ROOT_PATH_USB "usb:/"
|
|
||||||
#define GAME_ROOT_PATH_SMB "smb:/"
|
|
||||||
#define TMP_ROOT_PATH "/frodo/tmp"
|
|
||||||
#define SAVE_GAME_ROOT_PATH "/frodo/saves"
|
|
||||||
#else
|
|
||||||
#define THEME_ROOT_PATH "themes"
|
|
||||||
#define METADATA_ROOT_PATH "metadata"
|
|
||||||
#define GAME_ROOT_PATH "images"
|
|
||||||
#define TMP_ROOT_PATH "tmp"
|
|
||||||
#define SAVE_GAME_ROOT_PATH "saves"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static const char *get_theme_path(const char *dir, const char *what)
|
static const char *get_theme_path(const char *dir, const char *what)
|
||||||
{
|
{
|
||||||
static char buf[255];
|
static char buf[255];
|
||||||
|
@ -13,6 +13,22 @@
|
|||||||
#include <main.h>
|
#include <main.h>
|
||||||
#include <Prefs.h>
|
#include <Prefs.h>
|
||||||
|
|
||||||
|
#if defined(GEKKO)
|
||||||
|
#define THEME_ROOT_PATH "/frodo/themes"
|
||||||
|
#define METADATA_ROOT_PATH "/frodo/metadata"
|
||||||
|
#define GAME_ROOT_PATH "/frodo/images"
|
||||||
|
#define GAME_ROOT_PATH_USB "usb:/"
|
||||||
|
#define GAME_ROOT_PATH_SMB "smb:/"
|
||||||
|
#define TMP_ROOT_PATH "/frodo/tmp"
|
||||||
|
#define SAVE_GAME_ROOT_PATH "/frodo/saves"
|
||||||
|
#else
|
||||||
|
#define THEME_ROOT_PATH "themes"
|
||||||
|
#define METADATA_ROOT_PATH "metadata"
|
||||||
|
#define GAME_ROOT_PATH "images"
|
||||||
|
#define TMP_ROOT_PATH "tmp"
|
||||||
|
#define SAVE_GAME_ROOT_PATH "saves"
|
||||||
|
#endif
|
||||||
|
|
||||||
class DialogueBox;
|
class DialogueBox;
|
||||||
class StatusBar;
|
class StatusBar;
|
||||||
class NetworkServerMessages;
|
class NetworkServerMessages;
|
||||||
|
57
Src/main.cpp
57
Src/main.cpp
@ -224,6 +224,9 @@ extern "C" int main(int argc, char **argv)
|
|||||||
dir_tmp = opendir("/frodo/tmp");
|
dir_tmp = opendir("/frodo/tmp");
|
||||||
if (!dir_tmp) {mkdir("/frodo/tmp",0777);printf("Making tmp directory\n");sleep(2);} else closedir(dir_tmp);
|
if (!dir_tmp) {mkdir("/frodo/tmp",0777);printf("Making tmp directory\n");sleep(2);} else closedir(dir_tmp);
|
||||||
|
|
||||||
|
//Cancel the old a file
|
||||||
|
unlink ("/frodo/tmp/a");
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@ -261,11 +264,12 @@ Frodo::Frodo()
|
|||||||
* Process command line arguments
|
* Process command line arguments
|
||||||
*/
|
*/
|
||||||
char *network_server_connect = 0;
|
char *network_server_connect = 0;
|
||||||
|
char *floppy8 = 0;
|
||||||
|
|
||||||
void Frodo::ArgvReceived(int argc, char **argv)
|
void Frodo::ArgvReceived(int argc, char **argv)
|
||||||
{
|
{
|
||||||
if (argc == 2)
|
if (argc == 2) floppy8 = argv[1];
|
||||||
network_server_connect = argv[1];
|
else if (argc == 3) network_server_connect = argv[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
const char *try_path(const char *path, const char *file)
|
const char *try_path(const char *path, const char *file)
|
||||||
@ -348,6 +352,9 @@ void Frodo::LoadFrodorc()
|
|||||||
* Arguments processed, run emulation
|
* Arguments processed, run emulation
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
extern const char *prg_exts[];
|
||||||
|
|
||||||
void Frodo::ReadyToRun(void)
|
void Frodo::ReadyToRun(void)
|
||||||
{
|
{
|
||||||
if (getcwd(AppDirPath, 256) == NULL)
|
if (getcwd(AppDirPath, 256) == NULL)
|
||||||
@ -357,6 +364,52 @@ void Frodo::ReadyToRun(void)
|
|||||||
if (network_server_connect)
|
if (network_server_connect)
|
||||||
strncpy(ThePrefs.NetworkServer, network_server_connect,
|
strncpy(ThePrefs.NetworkServer, network_server_connect,
|
||||||
sizeof(ThePrefs.NetworkServer));
|
sizeof(ThePrefs.NetworkServer));
|
||||||
|
|
||||||
|
//Mount the floppy if passed as argument
|
||||||
|
if (floppy8)
|
||||||
|
{
|
||||||
|
strncpy(ThePrefs.DrivePath[0], floppy8, sizeof(ThePrefs.DrivePath[0]));
|
||||||
|
|
||||||
|
char *filename;
|
||||||
|
filename = strrchr(floppy8, '/');
|
||||||
|
if (!filename) filename++;
|
||||||
|
|
||||||
|
if (ext_matches_list(filename, prg_exts)) {
|
||||||
|
char *tmp_filename;
|
||||||
|
FILE *src, *dst;
|
||||||
|
|
||||||
|
tmp_filename = (char *)xmalloc(strlen(TMP_ROOT_PATH) + 4);
|
||||||
|
sprintf(tmp_filename, "%s/ab", TMP_ROOT_PATH);
|
||||||
|
|
||||||
|
/* Clean temp dir first (we only want one file) */
|
||||||
|
unlink(tmp_filename);
|
||||||
|
|
||||||
|
src = fopen(ThePrefs.DrivePath[0], "r");
|
||||||
|
if (src != NULL)
|
||||||
|
{
|
||||||
|
snprintf(ThePrefs.DrivePath[0], sizeof(ThePrefs.DrivePath[0]),
|
||||||
|
"%s", TMP_ROOT_PATH);
|
||||||
|
|
||||||
|
/* Special handling of .prg: Copy to TMP_PATH and
|
||||||
|
* load that as a dir */
|
||||||
|
dst = fopen(tmp_filename, "w");
|
||||||
|
if (dst)
|
||||||
|
{
|
||||||
|
Uint8 buf[1024];
|
||||||
|
size_t v;
|
||||||
|
|
||||||
|
do {
|
||||||
|
v = fread(buf, 1, sizeof(buf), src);
|
||||||
|
fwrite(buf, 1, v, dst);
|
||||||
|
} while (v > 0);
|
||||||
|
fclose(dst);
|
||||||
|
}
|
||||||
|
fclose(src);
|
||||||
|
}
|
||||||
|
free(tmp_filename);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
panic_if (!init_graphics(),
|
panic_if (!init_graphics(),
|
||||||
"Can't initialize graphics!\n");
|
"Can't initialize graphics!\n");
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user