From 74eeba5c3501477e4be5104dab90818ccdaa4e5d Mon Sep 17 00:00:00 2001 From: PGGB Date: Sun, 14 Jul 2013 19:37:45 +0200 Subject: [PATCH] MAME feature patch: Add post-save callbacks --- mame/src/emu/save.c | 27 +++++++++++++++++++++++++++ mame/src/emu/save.h | 2 ++ 2 files changed, 29 insertions(+) diff --git a/mame/src/emu/save.c b/mame/src/emu/save.c index 7a60aaa..89ae385 100755 --- a/mame/src/emu/save.c +++ b/mame/src/emu/save.c @@ -94,6 +94,7 @@ save_manager::save_manager(running_machine &machine) m_illegal_regs(0), m_entry_list(machine.respool()), m_presave_list(machine.respool()), + m_postsave_list(machine.respool()), m_postload_list(machine.respool()) { } @@ -153,6 +154,27 @@ void save_manager::register_presave(save_prepost_delegate func) } +//------------------------------------------------- +// register_postsave - register a post-save +// function callback +//------------------------------------------------- + +void save_manager::register_postsave(save_prepost_delegate func) +{ + // check for invalid timing + if (!m_reg_allowed) + fatalerror("Attempt to register callback function after state registration is closed!\n"); + + // scan for duplicates and push through to the end + for (state_callback *cb = m_postsave_list.first(); cb != NULL; cb = cb->next()) + if (cb->m_func == func) + fatalerror("Duplicate save state function (%s/%s)\n", cb->m_func.name(), func.name()); + + // allocate a new entry + m_postsave_list.append(*auto_alloc(machine(), state_callback(func))); +} + + //------------------------------------------------- // state_save_register_postload - // register a post-load function callback @@ -329,6 +351,11 @@ save_error save_manager::write_file(emu_file &file) if (file.write(entry->m_data, totalsize) != totalsize) return STATERR_WRITE_ERROR; } + + // call the post-save functions + for (state_callback *func = m_postsave_list.first(); func != NULL; func = func->next()) + func->m_func(); + return STATERR_NONE; } diff --git a/mame/src/emu/save.h b/mame/src/emu/save.h index 09eb01c..2dcf66e 100755 --- a/mame/src/emu/save.h +++ b/mame/src/emu/save.h @@ -121,6 +121,7 @@ public: // function registration void register_presave(save_prepost_delegate func); + void register_postsave(save_prepost_delegate func); void register_postload(save_prepost_delegate func); // generic memory registration @@ -219,6 +220,7 @@ private: simple_list m_entry_list; // list of reigstered entries simple_list m_presave_list; // list of pre-save functions + simple_list m_postsave_list; // list of post-save functions simple_list m_postload_list; // list of post-load functions };