Added argument management, fixed bug for prg files with sdhc card

This commit is contained in:
fabio.olimpieri 2013-01-13 18:48:15 +00:00
parent 434971987f
commit 706fc918dd
6 changed files with 99 additions and 21 deletions

View File

@ -224,7 +224,7 @@ uint8 ArchDrive::open_file(int channel, const uint8 *name, int name_len)
// Open temporary file
if ((file[channel] =
#if defined(GEKKO)
fopen("/frodo/tmp/a", "w+")
fopen("/frodo/tmp/ab", "w+")
#else
tmpfile()
#endif

View File

@ -112,10 +112,32 @@ void C64::startFakeKeySequence(const char *str)
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
*/
extern char *floppy8;
void C64::Run(void)
{
// Reset chips
@ -131,6 +153,9 @@ void C64::Run(void)
PatchKernal(ThePrefs.FastReset, ThePrefs.Emul1541Proc);
quit_thyself = false;
if (floppy8) new StartGameListener();
thread_func();
}

View File

@ -10,7 +10,7 @@
static const char *game_exts[] = {".d64", ".D64", ".t64", ".T64",
".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;
@ -120,7 +120,7 @@ public:
FILE *src, *dst;
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) */
unlink(tmp_filename);

View File

@ -20,22 +20,6 @@
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 char buf[255];

View File

@ -13,6 +13,22 @@
#include <main.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 StatusBar;
class NetworkServerMessages;

View File

@ -224,6 +224,9 @@ extern "C" int main(int argc, char **argv)
dir_tmp = opendir("/frodo/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
@ -261,11 +264,12 @@ Frodo::Frodo()
* Process command line arguments
*/
char *network_server_connect = 0;
char *floppy8 = 0;
void Frodo::ArgvReceived(int argc, char **argv)
{
if (argc == 2)
network_server_connect = argv[1];
if (argc == 2) floppy8 = argv[1];
else if (argc == 3) network_server_connect = argv[2];
}
const char *try_path(const char *path, const char *file)
@ -348,6 +352,9 @@ void Frodo::LoadFrodorc()
* Arguments processed, run emulation
*/
extern const char *prg_exts[];
void Frodo::ReadyToRun(void)
{
if (getcwd(AppDirPath, 256) == NULL)
@ -357,6 +364,52 @@ void Frodo::ReadyToRun(void)
if (network_server_connect)
strncpy(ThePrefs.NetworkServer, network_server_connect,
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(),
"Can't initialize graphics!\n");