mirror of
https://github.com/libretro/scummvm.git
synced 2025-02-09 04:16:34 +00:00
SCI: Change kSave() to be a kernel function with subops
This commit is contained in:
parent
5a17ea0585
commit
944a774e6a
@ -461,6 +461,7 @@ reg_t kMakeSaveFileName(EngineState *s, int argc, reg_t *argv);
|
||||
// SCI2.1 Kernel Functions
|
||||
reg_t kText(EngineState *s, int argc, reg_t *argv);
|
||||
reg_t kSave(EngineState *s, int argc, reg_t *argv);
|
||||
reg_t kAutoSave(EngineState *s, int argc, reg_t *argv);
|
||||
reg_t kList(EngineState *s, int argc, reg_t *argv);
|
||||
reg_t kRobot(EngineState *s, int argc, reg_t *argv);
|
||||
reg_t kPlayVMD(EngineState *s, int argc, reg_t *argv);
|
||||
|
@ -245,6 +245,18 @@ static const SciKernelMapSubEntry kFileIO_subops[] = {
|
||||
SCI_SUBOPENTRY_TERMINATOR
|
||||
};
|
||||
|
||||
static const SciKernelMapSubEntry kSave_subops[] = {
|
||||
{ SIG_SCI32, 0, MAP_CALL(SaveGame), "[r0]i[r0](r)", NULL },
|
||||
{ SIG_SCI32, 1, MAP_CALL(RestoreGame), "[r0]i[r0]", NULL },
|
||||
{ SIG_SCI32, 2, MAP_CALL(GetSaveDir), "(r*)", NULL },
|
||||
{ SIG_SCI32, 3, MAP_CALL(CheckSaveGame), ".*", NULL },
|
||||
// Subop 4 hasn't been encountered yet
|
||||
{ SIG_SCI32, 5, MAP_CALL(GetSaveFiles), "rrr", NULL },
|
||||
{ SIG_SCI32, 6, MAP_CALL(MakeSaveCatName), "rr", NULL },
|
||||
{ SIG_SCI32, 7, MAP_CALL(MakeSaveFileName), "rri", NULL },
|
||||
{ SIG_SCI32, 8, MAP_CALL(AutoSave), "[o0]", NULL },
|
||||
};
|
||||
|
||||
#ifdef ENABLE_SCI32
|
||||
// version, subId, function-mapping, signature, workarounds
|
||||
static const SciKernelMapSubEntry kList_subops[] = {
|
||||
@ -555,7 +567,7 @@ static SciKernelMapEntry s_kernelMap[] = {
|
||||
{ MAP_CALL(MulDiv), SIG_EVERYWHERE, "iii", NULL, NULL },
|
||||
{ MAP_CALL(PlayVMD), SIG_EVERYWHERE, "(.*)", NULL, NULL },
|
||||
{ MAP_CALL(Robot), SIG_EVERYWHERE, "(.*)", NULL, NULL },
|
||||
{ MAP_CALL(Save), SIG_EVERYWHERE, "(.*)", NULL, NULL },
|
||||
{ MAP_CALL(Save), SIG_EVERYWHERE, "i(.*)", kSave_subops, NULL },
|
||||
{ MAP_CALL(Text), SIG_EVERYWHERE, "(.*)", NULL, NULL },
|
||||
{ MAP_CALL(AddPicAt), SIG_EVERYWHERE, "oiii", NULL, NULL },
|
||||
{ MAP_CALL(GetWindowsOption), SIG_EVERYWHERE, "i", NULL, NULL },
|
||||
|
@ -946,35 +946,21 @@ reg_t kMakeSaveFileName(EngineState *s, int argc, reg_t *argv) {
|
||||
return argv[0];
|
||||
}
|
||||
|
||||
reg_t kSave(EngineState *s, int argc, reg_t *argv) {
|
||||
switch (argv[0].toUint16()) {
|
||||
case 0:
|
||||
return kSaveGame(s, argc - 1,argv + 1);
|
||||
case 1:
|
||||
return kRestoreGame(s, argc - 1,argv + 1);
|
||||
case 2:
|
||||
return kGetSaveDir(s, argc - 1, argv + 1);
|
||||
case 3:
|
||||
return kCheckSaveGame(s, argc - 1, argv + 1);
|
||||
case 5:
|
||||
return kGetSaveFiles(s, argc - 1, argv + 1);
|
||||
case 6:
|
||||
return kMakeSaveCatName(s, argc - 1, argv + 1);
|
||||
case 7:
|
||||
return kMakeSaveFileName(s, argc - 1, argv + 1);
|
||||
case 8:
|
||||
// TODO
|
||||
// This is a timer callback, with 1 parameter: the timer object
|
||||
// (e.g. "timers").
|
||||
// It's used for auto-saving (i.e. save every X minutes, by checking
|
||||
// the elapsed time from the timer object)
|
||||
reg_t kAutoSave(EngineState *s, int argc, reg_t *argv) {
|
||||
// TODO
|
||||
// This is a timer callback, with 1 parameter: the timer object
|
||||
// (e.g. "timers").
|
||||
// It's used for auto-saving (i.e. save every X minutes, by checking
|
||||
// the elapsed time from the timer object)
|
||||
|
||||
// This function has to return something other than 0 to proceed
|
||||
return s->r_acc;
|
||||
default:
|
||||
kStub(s, argc, argv);
|
||||
return NULL_REG;
|
||||
}
|
||||
// This function has to return something other than 0 to proceed
|
||||
return s->r_acc;
|
||||
}
|
||||
|
||||
reg_t kSave(EngineState *s, int argc, reg_t *argv) {
|
||||
if (!s)
|
||||
return make_reg(0, getSciVersion());
|
||||
error("not supposed to call this");
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
x
Reference in New Issue
Block a user