123 lines
1.5 KiB
C
123 lines
1.5 KiB
C
|
|
||
|
|
||
|
|
||
|
|
||
|
#include "rockmacros.h"
|
||
|
|
||
|
#include "defs.h"
|
||
|
#include "rc.h"
|
||
|
#include "hw.h"
|
||
|
#include "emu.h"
|
||
|
#include "save.h"
|
||
|
#include "split.h"
|
||
|
|
||
|
/*
|
||
|
* the set command is used to set rc-exported variables.
|
||
|
*/
|
||
|
|
||
|
static int cmd_set(int argc, char **argv)
|
||
|
{
|
||
|
if (argc < 3)
|
||
|
return -1;
|
||
|
return rc_setvar(argv[1], argc-2, argv+2);
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
* the following commands allow keys to be bound to perform rc commands.
|
||
|
*/
|
||
|
|
||
|
static int cmd_reset(int argc, char **argv)
|
||
|
{
|
||
|
(void)argc;
|
||
|
(void)argv;
|
||
|
emu_reset();
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int cmd_savestate(int argc, char **argv)
|
||
|
{
|
||
|
state_save(argc > 1 ? atoi(argv[1]) : -1);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
static int cmd_loadstate(int argc, char **argv)
|
||
|
{
|
||
|
state_load(argc > 1 ? atoi(argv[1]) : -1);
|
||
|
return 0;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
* table of command names and the corresponding functions to be called
|
||
|
*/
|
||
|
|
||
|
rccmd_t rccmds[] =
|
||
|
{
|
||
|
RCC("set", cmd_set),
|
||
|
RCC("reset", cmd_reset),
|
||
|
RCC("savestate", cmd_savestate),
|
||
|
RCC("loadstate", cmd_loadstate),
|
||
|
RCC_END
|
||
|
};
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
int rc_command(char *line)
|
||
|
{
|
||
|
int i, argc, ret;
|
||
|
char *argv[128], linecopy[500];
|
||
|
|
||
|
// linecopy = malloc(strlen(line)+1);
|
||
|
strcpy(linecopy, line);
|
||
|
|
||
|
argc = splitline(argv, (sizeof argv)/(sizeof argv[0]), linecopy);
|
||
|
if (!argc)
|
||
|
{
|
||
|
// free(linecopy);
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
for (i = 0; rccmds[i].name; i++)
|
||
|
{
|
||
|
if (!strcmp(argv[0], rccmds[i].name))
|
||
|
{
|
||
|
ret = rccmds[i].func(argc, argv);
|
||
|
// free(linecopy);
|
||
|
return ret;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/* printf("unknown command: %s\n", argv[0]); */
|
||
|
// free(linecopy);
|
||
|
|
||
|
return -1;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|