summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/dislot.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/dislot.cpp')
-rw-r--r--src/emu/dislot.cpp50
1 files changed, 43 insertions, 7 deletions
diff --git a/src/emu/dislot.cpp b/src/emu/dislot.cpp
index e30cd41d46f..43d2ed96cdd 100644
--- a/src/emu/dislot.cpp
+++ b/src/emu/dislot.cpp
@@ -8,9 +8,10 @@
#include "emu.h"
#include "emuopts.h"
+
+#include "corestr.h"
+#include "path.h"
#include "zippath.h"
-#include <algorithm>
-#include <cctype>
device_slot_interface::device_slot_interface(const machine_config &mconfig, device_t &device) :
@@ -27,7 +28,7 @@ device_slot_interface::~device_slot_interface()
}
-device_slot_interface::slot_option::slot_option(const char *name, const device_type &devtype, bool selectable) :
+device_slot_interface::slot_option::slot_option(const char *name, device_type devtype, bool selectable) :
m_name(name),
m_devtype(devtype),
m_selectable(selectable),
@@ -46,7 +47,7 @@ void device_slot_interface::interface_validity_check(validity_checker &valid) co
}
-device_slot_interface::slot_option &device_slot_interface::option_add(const char *name, const device_type &devtype)
+device_slot_interface::slot_option &device_slot_interface::option_add(const char *name, device_type devtype)
{
if (!name || !*name)
throw emu_fatalerror("slot '%s' attempt to add option without name\n", device().tag());
@@ -59,7 +60,7 @@ device_slot_interface::slot_option &device_slot_interface::option_add(const char
}
-device_slot_interface::slot_option &device_slot_interface::option_add_internal(const char *name, const device_type &devtype)
+device_slot_interface::slot_option &device_slot_interface::option_add_internal(const char *name, device_type devtype)
{
if (!name || !*name)
throw emu_fatalerror("slot '%s' attempt to add option without name\n", device().tag());
@@ -72,6 +73,42 @@ device_slot_interface::slot_option &device_slot_interface::option_add_internal(c
}
+device_slot_interface::slot_option &device_slot_interface::option_replace(const char *name, device_type devtype)
+{
+ if (!name || !*name)
+ throw emu_fatalerror("slot '%s' attempt to replace option without name\n", device().tag());
+
+ auto search = m_options.find(name);
+ if (search == m_options.end())
+ throw emu_fatalerror("slot '%s' attempt to replace nonexistent option '%s'\n", device().tag(), name);
+
+ return (search->second = std::make_unique<slot_option>(name, devtype, true))->clock(m_default_clock);
+}
+
+
+device_slot_interface::slot_option &device_slot_interface::option_replace_internal(const char *name, device_type devtype)
+{
+ if (!name || !*name)
+ throw emu_fatalerror("slot '%s' attempt to replace option without name\n", device().tag());
+
+ auto search = m_options.find(name);
+ if (search == m_options.end())
+ throw emu_fatalerror("slot '%s' attempt to replace nonexistent option '%s'\n", device().tag(), name);
+
+ return (search->second = std::make_unique<slot_option>(name, devtype, false))->clock(m_default_clock);
+}
+
+
+void device_slot_interface::option_remove(const char *name)
+{
+ if (!name || !*name)
+ throw emu_fatalerror("slot '%s' attempt to remove option without name\n", device().tag());
+
+ if (m_options.erase(name) == 0)
+ throw emu_fatalerror("slot '%s' attempt to remove nonexistent option '%s'\n", device().tag(), name);
+}
+
+
device_slot_interface::slot_option *device_slot_interface::config_option(const char *name)
{
auto const search = m_options.find(name);
@@ -134,6 +171,5 @@ bool get_default_card_software_hook::hashfile_extrainfo(std::string &extrainfo)
bool get_default_card_software_hook::is_filetype(std::string_view candidate_filetype) const
{
- return std::equal(m_file_type.begin(), m_file_type.end(), candidate_filetype.begin(), candidate_filetype.end(),
- [] (unsigned char c1, unsigned char c2) { return std::tolower(c1) == c2; });
+ return util::streqlower(m_file_type, candidate_filetype);
}