diff --git a/src/frontend/mame/ui/cheatopt.cpp b/src/frontend/mame/ui/cheatopt.cpp index b194510e1c9..fdcf26ea0ea 100644 --- a/src/frontend/mame/ui/cheatopt.cpp +++ b/src/frontend/mame/ui/cheatopt.cpp @@ -145,7 +145,10 @@ void menu_cheat::populate() { UINT32 flags; curcheat->menu_text(text, subtext, flags); - item_append(text.c_str(), subtext.c_str(), flags, curcheat.get()); + if (text == MENU_SEPARATOR_ITEM) + item_append(menu_item_type::SEPARATOR); + else + item_append(text.c_str(), subtext.c_str(), flags, curcheat.get()); } /* add a separator */ diff --git a/src/frontend/mame/ui/datfile.cpp b/src/frontend/mame/ui/datfile.cpp index 51b0289e75f..400e290ce01 100644 --- a/src/frontend/mame/ui/datfile.cpp +++ b/src/frontend/mame/ui/datfile.cpp @@ -55,55 +55,25 @@ std::string datfile_manager::m_story_rev; std::string datfile_manager::m_ginit_rev; bool datfile_manager::first_run = true; +#define opendatsfile(f) if (parseopen(#f".dat")) { init_##f(); parseclose(); } + //------------------------------------------------- // ctor //------------------------------------------------- -datfile_manager::datfile_manager(running_machine &machine, ui_options &moptions) : m_machine(machine), m_options(moptions) +datfile_manager::datfile_manager(running_machine &machine, ui_options &moptions) + : m_machine(machine) + , m_options(moptions) { if (m_options.enabled_dats() && first_run) { first_run = false; - if (parseopen("mameinfo.dat")) - { - init_mameinfo(); - parseclose(); - } - - if (parseopen("command.dat")) - { - init_command(); - parseclose(); - } - - if (parseopen("story.dat")) - { - init_storyinfo(); - parseclose(); - } - - if (parseopen("messinfo.dat")) - { - init_messinfo(); - parseclose(); - } - - if (parseopen("sysinfo.dat")) - { - init_sysinfo(); - parseclose(); - } - - if (parseopen("history.dat")) - { - init_history(); - parseclose(); - } - - if (parseopen("gameinit.dat")) - { - init_gameinit(); - parseclose(); - } + opendatsfile(mameinfo); + opendatsfile(command); + opendatsfile(story); + opendatsfile(messinfo); + opendatsfile(sysinfo); + opendatsfile(history); + opendatsfile(gameinit); } } @@ -113,7 +83,7 @@ datfile_manager::datfile_manager(running_machine &machine, ui_options &moptions) void datfile_manager::init_sysinfo() { int swcount = 0; - int count = index_datafile(m_sysidx, swcount); + auto count = index_datafile(m_sysidx, swcount); osd_printf_verbose("Sysinfo.dat games found = %i\n", count); osd_printf_verbose("Rev = %s\n", m_sysinfo_rev.c_str()); } @@ -121,10 +91,10 @@ void datfile_manager::init_sysinfo() //------------------------------------------------- // initialize story.dat index //------------------------------------------------- -void datfile_manager::init_storyinfo() +void datfile_manager::init_story() { int swcount = 0; - int count = index_datafile(m_storyidx, swcount); + auto count = index_datafile(m_storyidx, swcount); osd_printf_verbose("Story.dat games found = %i\n", count); } @@ -134,7 +104,7 @@ void datfile_manager::init_storyinfo() void datfile_manager::init_history() { int swcount = 0; - int count = index_datafile(m_histidx, swcount); + auto count = index_datafile(m_histidx, swcount); osd_printf_verbose("History.dat systems found = %i\n", count); osd_printf_verbose("History.dat software packages found = %i\n", swcount); osd_printf_verbose("Rev = %s\n", m_history_rev.c_str()); @@ -147,7 +117,7 @@ void datfile_manager::init_gameinit() { int swcount = 0; drvindex tmp; - int count = index_mame_mess_info(m_ginitidx, tmp, swcount); + auto count = index_mame_mess_info(m_ginitidx, tmp, swcount); osd_printf_verbose("Gameinit.dat games found = %i\n", count); osd_printf_verbose("Rev = %s\n", m_ginit_rev.c_str()); } @@ -158,7 +128,7 @@ void datfile_manager::init_gameinit() void datfile_manager::init_mameinfo() { int drvcount = 0; - int count = index_mame_mess_info(m_mameidx, m_drvidx, drvcount); + auto count = index_mame_mess_info(m_mameidx, m_drvidx, drvcount); osd_printf_verbose("Mameinfo.dat games found = %i\n", count); osd_printf_verbose("Mameinfo.dat drivers found = %d\n", drvcount); osd_printf_verbose("Rev = %s\n", m_mame_rev.c_str()); @@ -170,7 +140,7 @@ void datfile_manager::init_mameinfo() void datfile_manager::init_messinfo() { int drvcount = 0; - int count = index_mame_mess_info(m_messidx, m_messdrvidx, drvcount); + auto count = index_mame_mess_info(m_messidx, m_messdrvidx, drvcount); osd_printf_verbose("Messinfo.dat games found = %i\n", count); osd_printf_verbose("Messinfo.dat drivers found = %d\n", drvcount); osd_printf_verbose("Rev = %s\n", m_mess_rev.c_str()); @@ -182,7 +152,7 @@ void datfile_manager::init_messinfo() void datfile_manager::init_command() { int swcount = 0; - int count = index_datafile(m_cmdidx, swcount); + auto count = index_datafile(m_cmdidx, swcount); osd_printf_verbose("Command.dat games found = %i\n", count); } @@ -213,7 +183,7 @@ void datfile_manager::load_software_info(std::string &softlist, std::string &buf if (!has_software(softlist, softname, parentname)) return; - long s_offset = (*m_itemsiter).second; + auto s_offset = m_itemsiter->second; char rbuf[64 * 1024]; fseek(fp, s_offset, SEEK_SET); std::string readbuf; @@ -302,19 +272,19 @@ void datfile_manager::load_data_text(const game_driver *drv, std::string &buffer dataindex::iterator itemsiter = idx.find(drv); if (itemsiter == idx.end()) { - int cloneof = driver_list::non_bios_clone(*drv); + auto cloneof = driver_list::non_bios_clone(*drv); if (cloneof == -1) return; else { - const game_driver *c_drv = &driver_list::driver(cloneof); + auto c_drv = &driver_list::driver(cloneof); itemsiter = idx.find(c_drv); if (itemsiter == idx.end()) return; } } - long s_offset = (*itemsiter).second; + auto s_offset = itemsiter->second; fseek(fp, s_offset, SEEK_SET); char rbuf[64 * 1024]; std::string readbuf; @@ -349,7 +319,7 @@ void datfile_manager::load_driver_text(const game_driver *drv, std::string &buff return; buffer.append("\n--- DRIVER INFO ---\n").append("Driver: ").append(s).append("\n\n"); - long s_offset = (*index).second; + auto s_offset = index->second; fseek(fp, s_offset, SEEK_SET); char rbuf[64 * 1024]; std::string readbuf; @@ -378,10 +348,10 @@ int datfile_manager::index_mame_mess_info(dataindex &index, drvindex &index_drv, { std::string name; size_t foundtag; - size_t t_mame = TAG_MAMEINFO_R.size(); - size_t t_mess = TAG_MESSINFO_R.size(); - size_t t_ginit = TAG_GAMEINIT_R.size(); - size_t t_info = TAG_INFO.size(); + auto t_mame = TAG_MAMEINFO_R.size(); + auto t_mess = TAG_MESSINFO_R.size(); + auto t_ginit = TAG_GAMEINIT_R.size(); + auto t_info = TAG_INFO.size(); char rbuf[64 * 1024]; std::string readbuf, xid; @@ -390,17 +360,17 @@ int datfile_manager::index_mame_mess_info(dataindex &index, drvindex &index_drv, readbuf = chartrimcarriage(rbuf); if (m_mame_rev.empty() && readbuf.compare(0, t_mame, TAG_MAMEINFO_R) == 0) { - size_t found = readbuf.find(" ", t_mame + 1); + auto found = readbuf.find(" ", t_mame + 1); m_mame_rev = readbuf.substr(t_mame + 1, found - t_mame); } else if (m_mess_rev.empty() && (foundtag = readbuf.find(TAG_MESSINFO_R)) != std::string::npos) { - size_t found = readbuf.find(" ", foundtag + t_mess + 1); + auto found = readbuf.find(" ", foundtag + t_mess + 1); m_mess_rev = readbuf.substr(foundtag + t_mess + 1, found - t_mess - foundtag); } else if (m_ginit_rev.empty() && readbuf.compare(0, t_ginit, TAG_GAMEINIT_R) == 0) { - size_t found = readbuf.find(" ", t_ginit + 1); + auto found = readbuf.find(" ", t_ginit + 1); m_ginit_rev = readbuf.substr(t_ginit + 1, found - t_ginit); } else if (readbuf.compare(0, t_info, TAG_INFO) == 0) @@ -412,7 +382,7 @@ int datfile_manager::index_mame_mess_info(dataindex &index, drvindex &index_drv, if (xid == TAG_MAME) { // validate driver - int game_index = driver_list::find(name.c_str()); + auto game_index = driver_list::find(name.c_str()); if (game_index != -1) index.emplace(&driver_list::driver(game_index), ftell(fp)); } @@ -432,12 +402,12 @@ int datfile_manager::index_mame_mess_info(dataindex &index, drvindex &index_drv, //------------------------------------------------- int datfile_manager::index_datafile(dataindex &index, int &swcount) { - std::string readbuf, name; - size_t t_hist = TAG_HISTORY_R.size(); - size_t t_story = TAG_STORY_R.size(); - size_t t_sysinfo = TAG_SYSINFO_R.size(); - size_t t_info = TAG_INFO.size(); - size_t t_bio = TAG_BIO.size(); + std::string readbuf; + auto t_hist = TAG_HISTORY_R.size(); + auto t_story = TAG_STORY_R.size(); + auto t_sysinfo = TAG_SYSINFO_R.size(); + auto t_info = TAG_INFO.size(); + auto t_bio = TAG_BIO.size(); char rbuf[64 * 1024]; while (fgets(rbuf, 64 * 1024, fp) != nullptr) { @@ -445,124 +415,43 @@ int datfile_manager::index_datafile(dataindex &index, int &swcount) if (m_history_rev.empty() && readbuf.compare(0, t_hist, TAG_HISTORY_R) == 0) { - size_t found = readbuf.find(" ", t_hist + 1); + auto found = readbuf.find(" ", t_hist + 1); m_history_rev = readbuf.substr(t_hist + 1, found - t_hist); } else if (m_sysinfo_rev.empty() && readbuf.compare(0, t_sysinfo, TAG_SYSINFO_R) == 0) { - size_t found = readbuf.find(".", t_sysinfo + 1); + auto found = readbuf.find(".", t_sysinfo + 1); m_sysinfo_rev = readbuf.substr(t_sysinfo + 1, found - t_sysinfo); } else if (m_story_rev.empty() && readbuf.compare(0, t_story, TAG_STORY_R) == 0) m_story_rev = readbuf.substr(t_story + 1); else if (readbuf.compare(0, t_info, TAG_INFO) == 0) { - int curpoint = t_info + 1; - int ends = readbuf.size(); - while (curpoint < ends) + // search for game info + auto rd = readbuf.substr(t_info + 1); + std::vector gamelist = tokenize(rd, ','); + for (auto & e : gamelist) { - // search for comma - size_t found = readbuf.find(",", curpoint); - - // found it - if (found != std::string::npos) - { - // copy data and validate driver - name = readbuf.substr(curpoint, found - curpoint); - - // validate driver - int game_index = driver_list::find(name.c_str()); - if (game_index != -1) - index.emplace(&driver_list::driver(game_index), ftell(fp)); - - // update current point - curpoint = ++found; - } - // if comma not found, copy data while until reach the end of string - else if (curpoint < ends) - { - name = readbuf.substr(curpoint); - int game_index = driver_list::find(name.c_str()); - if (game_index != -1) - index.emplace(&driver_list::driver(game_index), ftell(fp)); - - // update current point - curpoint = ends; - } + auto game_index = driver_list::find(e.c_str()); + if (game_index != -1) + index.emplace(&driver_list::driver(game_index), ftell(fp)); } } - // search for software info else if (!readbuf.empty() && readbuf[0] == DATAFILE_TAG[0]) { + // search for software info fgets(rbuf, 64 * 1024, fp); std::string readbuf_2(chartrimcarriage(rbuf)); - - // TAG_BIO identifies software list if (readbuf_2.compare(0, t_bio, TAG_BIO) == 0) { - size_t eq_sign = readbuf.find("="); + auto eq_sign = readbuf.find('='); std::string s_list(readbuf.substr(1, eq_sign - 1)); std::string s_roms(readbuf.substr(eq_sign + 1)); - int ends = s_list.size(); - int curpoint = 0; - - while (curpoint < ends) - { - size_t found = s_list.find(",", curpoint); - - // found it - if (found != std::string::npos) - { - name = s_list.substr(curpoint, found - curpoint); - curpoint = ++found; - } - else - { - name = s_list.substr(curpoint); - curpoint = ends; - } - - // search for a software list in the index, if not found then allocates - std::string lname(name); - int cpoint = 0; - int cends = s_roms.size(); - - while (cpoint < cends) - { - // search for comma - size_t comma_found = s_roms.find(",", cpoint); - - // found it - if (comma_found != std::string::npos) - { - // copy data - name = s_roms.substr(cpoint, comma_found - cpoint); - - // add a SoftwareItem - m_swindex[lname].emplace(name, ftell(fp)); - - // update current point - cpoint = ++comma_found; - swcount++; - } - else - { - // if reach the end, bail out - if (s_roms[cpoint] == '\r' || s_roms[cpoint] == '\n') - break; - - // copy data - name = s_roms.substr(cpoint); - - // add a SoftwareItem - m_swindex[lname].emplace(name, ftell(fp)); - - // update current point - cpoint = cends; - swcount++; - } - } - } + std::vector token_list = tokenize(s_list, ','); + std::vector token_roms = tokenize(s_roms, ','); + for (auto & li : token_list) + for (auto & ro : token_roms) + m_swindex[li].emplace(ro, ftell(fp)); } } } @@ -574,9 +463,6 @@ int datfile_manager::index_datafile(dataindex &index, int &swcount) //--------------------------------------------------------- bool datfile_manager::parseopen(const char *filename) { - // MAME core file parsing functions fail in recognizing UNICODE chars in UTF-8 without BOM, - // so it's better and faster use standard C fileio functions. - emu_file file(m_options.history_path(), OPEN_FLAG_READ); if (file.open(filename) != osd_file::error::NONE) return false; @@ -598,22 +484,21 @@ void datfile_manager::index_menuidx(const game_driver *drv, dataindex &idx, drvi dataindex::iterator itemsiter = idx.find(drv); if (itemsiter == idx.end()) { - int cloneof = driver_list::non_bios_clone(*drv); + auto cloneof = driver_list::non_bios_clone(*drv); if (cloneof == -1) return; else { - const game_driver *c_drv = &driver_list::driver(cloneof); - itemsiter = idx.find(c_drv); - if (itemsiter == idx.end()) + auto c_drv = &driver_list::driver(cloneof); + if ((itemsiter = idx.find(c_drv)) == idx.end()) return; } } // seek to correct point in datafile - long s_offset = (*itemsiter).second; + auto s_offset = itemsiter->second; fseek(fp, s_offset, SEEK_SET); - size_t tinfo = TAG_INFO.size(); + auto tinfo = TAG_INFO.size(); char rbuf[64 * 1024]; std::string readbuf; while (fgets(rbuf, 64 * 1024, fp) != nullptr) @@ -641,7 +526,7 @@ void datfile_manager::load_command_info(std::string &buffer, std::string &sel) if (parseopen("command.dat")) { // open and seek to correct point in datafile - long offset = m_menuidx.at(sel); + auto offset = m_menuidx.at(sel); fseek(fp, offset, SEEK_SET); char rbuf[64 * 1024]; std::string readbuf; diff --git a/src/frontend/mame/ui/datfile.h b/src/frontend/mame/ui/datfile.h index dca01570375..f76c9c7720e 100644 --- a/src/frontend/mame/ui/datfile.h +++ b/src/frontend/mame/ui/datfile.h @@ -71,7 +71,7 @@ private: void init_messinfo(); void init_command(); void init_sysinfo(); - void init_storyinfo(); + void init_story(); void init_gameinit(); // file open/close/seek diff --git a/src/frontend/mame/ui/datmenu.cpp b/src/frontend/mame/ui/datmenu.cpp index fe3fc622699..e53e8dc8ab8 100644 --- a/src/frontend/mame/ui/datmenu.cpp +++ b/src/frontend/mame/ui/datmenu.cpp @@ -111,7 +111,7 @@ void menu_dats_view::populate() (m_issoft == true) ? get_data_sw() : get_data(); - item_append(MENU_SEPARATOR_ITEM, nullptr, (FLAG_UI_DATS | FLAG_LEFT_ARROW | FLAG_RIGHT_ARROW), nullptr); + item_append(menu_item_type::SEPARATOR); customtop = 2.0f * ui().get_line_height() + 4.0f * UI_BOX_TB_BORDER; custombottom = ui().get_line_height() + 3.0f * UI_BOX_TB_BORDER; diff --git a/src/frontend/mame/ui/filesel.cpp b/src/frontend/mame/ui/filesel.cpp index 03e9f5c5dd4..871c098d5e4 100644 --- a/src/frontend/mame/ui/filesel.cpp +++ b/src/frontend/mame/ui/filesel.cpp @@ -108,7 +108,7 @@ menu_confirm_save_as::~menu_confirm_save_as() void menu_confirm_save_as::populate() { item_append(_("File Already Exists - Override?"), nullptr, FLAG_DISABLE, nullptr); - item_append(MENU_SEPARATOR_ITEM, nullptr, FLAG_DISABLE, nullptr); + item_append(menu_item_type::SEPARATOR); item_append(_("No"), nullptr, 0, ITEMREF_NO); item_append(_("Yes"), nullptr, 0, ITEMREF_YES); } diff --git a/src/frontend/mame/ui/inifile.cpp b/src/frontend/mame/ui/inifile.cpp index f176073786d..d9f5cbeef8a 100644 --- a/src/frontend/mame/ui/inifile.cpp +++ b/src/frontend/mame/ui/inifile.cpp @@ -25,7 +25,8 @@ UINT16 inifile_manager::c_file = 0; //------------------------------------------------- inifile_manager::inifile_manager(running_machine &machine, ui_options &moptions) - : m_machine(machine), m_options(moptions) + : m_machine(machine) + , m_options(moptions) { ini_index.clear(); directory_scan(); @@ -37,28 +38,15 @@ inifile_manager::inifile_manager(running_machine &machine, ui_options &moptions) void inifile_manager::directory_scan() { - // open extra INIs folder file_enumerator path(m_options.extraini_path()); const osd_directory_entry *dir; - // loop into folder's file while ((dir = path.next()) != nullptr) - { - int length = strlen(dir->name); - std::string filename(dir->name); - - // check .ini file ending - if ((length > 4) && dir->name[length - 4] == '.' && tolower((UINT8)dir->name[length - 3]) == 'i' && - tolower((UINT8)dir->name[length - 2]) == 'n' && tolower((UINT8)dir->name[length - 1]) == 'i') + if (core_filename_ends_with(dir->name, ".ini") && parseopen(dir->name)) { - // try to open file and indexing - if (parseopen(filename.c_str())) - { - init_category(filename); - parseclose(); - } + init_category(std::string(dir->name)); + parseclose(); } - } // sort std::stable_sort(ini_index.begin(), ini_index.end()); @@ -68,30 +56,25 @@ void inifile_manager::directory_scan() // initialize category //------------------------------------------------- -void inifile_manager::init_category(std::string &filename) +void inifile_manager::init_category(std::string filename) { categoryindex index; char rbuf[MAX_CHAR_INFO]; - std::string readbuf, name; + std::string readbuf; while (fgets(rbuf, MAX_CHAR_INFO, fp) != nullptr) - { - readbuf = rbuf; - if (readbuf[0] == '[') + if (rbuf[0] == '[') { - size_t found = readbuf.find("]"); - name = readbuf.substr(1, found - 1); - if (name == "FOLDER_SETTINGS" || name == "ROOT_FOLDER") - continue; - else - index.emplace_back(name, ftell(fp)); + readbuf = rbuf; + auto name = readbuf.substr(1, readbuf.find("]") - 1); + if (name == "FOLDER_SETTINGS") continue; + index.emplace_back(name, ftell(fp)); } - } // sort std::stable_sort(index.begin(), index.end()); if (!index.empty()) - ini_index.emplace_back(filename, index); + ini_index.emplace_back(strmakelower(filename), index); } //------------------------------------------------- @@ -103,17 +86,16 @@ void inifile_manager::load_ini_category(std::vector &temp_filter) if (ini_index.empty()) return; - bool search_clones = false; + auto search_clones = false; std::string filename(ini_index[c_file].first); - long offset = ini_index[c_file].second[c_cat].second; + auto offset = ini_index[c_file].second[c_cat].second; - if (!core_stricmp(filename.c_str(), "category.ini") || !core_stricmp(filename.c_str(), "alltime.ini")) + if (filename == "category.ini" || filename == "alltime.ini") search_clones = true; if (parseopen(filename.c_str())) { fseek(fp, offset, SEEK_SET); - int num_game = driver_list::total(); char rbuf[MAX_CHAR_INFO]; std::string readbuf; while (fgets(rbuf, MAX_CHAR_INFO, fp) != nullptr) @@ -123,20 +105,15 @@ void inifile_manager::load_ini_category(std::vector &temp_filter) if (readbuf.empty() || readbuf[0] == '[') break; - int dfind = driver_list::find(readbuf.c_str()); - if (dfind != -1 && search_clones) + auto dfind = driver_list::find(readbuf.c_str()); + if (dfind != -1) { temp_filter.push_back(dfind); - int clone_of = driver_list::non_bios_clone(dfind); - if (clone_of == -1) - { - for (int x = 0; x < num_game; x++) + if (search_clones && driver_list::non_bios_clone(dfind) == -1) + for (int x = 0; x < driver_list::total(); x++) if (readbuf == driver_list::driver(x).parent && readbuf != driver_list::driver(x).name) temp_filter.push_back(x); - } } - else if (dfind != -1) - temp_filter.push_back(dfind); } parseclose(); } @@ -148,9 +125,6 @@ void inifile_manager::load_ini_category(std::vector &temp_filter) bool inifile_manager::parseopen(const char *filename) { - // MAME core file parsing functions fail in recognizing UNICODE chars in UTF-8 without BOM, - // so it's better and faster use standard C fileio functions. - emu_file file(m_options.extraini_path(), OPEN_FLAG_READ); if (file.open(filename) != osd_file::error::NONE) return false; @@ -173,7 +147,8 @@ bool inifile_manager::parseopen(const char *filename) //------------------------------------------------- favorite_manager::favorite_manager(running_machine &machine, ui_options &moptions) - : m_machine(machine), m_options(moptions) + : m_machine(machine) + , m_options(moptions) { m_current = -1; parse_favorite(); @@ -211,13 +186,13 @@ void favorite_manager::add_favorite_game() return; } - bool software_avail = false; + auto software_avail = false; for (device_image_interface &image : image_interface_iterator(machine().root_device())) { if (image.exists() && image.software_entry()) { - const software_info *swinfo = image.software_entry(); - const software_part *part = image.part_entry(); + auto swinfo = image.software_entry(); + auto part = image.part_entry(); ui_software_info tmpmatches; tmpmatches.shortname = strensure(swinfo->shortname()); tmpmatches.longname = strensure(image.longname()); @@ -234,7 +209,7 @@ void favorite_manager::add_favorite_game() tmpmatches.parentlongname.clear(); if (swinfo->parentname()) { - software_list_device *swlist = software_list_device::find_by_name(machine().config(), image.software_list_name()); + auto swlist = software_list_device::find_by_name(machine().config(), image.software_list_name()); for (software_info &c_swinfo : swlist->get_info()) { std::string c_parent(c_swinfo.parentname()); @@ -292,7 +267,7 @@ bool favorite_manager::isgame_favorite() if ((machine().system().flags & MACHINE_TYPE_ARCADE) != 0) return isgame_favorite(&machine().system()); - bool image_loaded = false; + auto image_loaded = false; for (device_image_interface &image : image_interface_iterator(machine().root_device())) { @@ -384,7 +359,7 @@ void favorite_manager::parse_favorite() tmpmatches.part = chartrimcarriage(readbuf); file.gets(readbuf, 1024); chartrimcarriage(readbuf); - int dx = driver_list::find(readbuf); + auto dx = driver_list::find(readbuf); if (dx == -1) continue; tmpmatches.driver = &driver_list::driver(dx); file.gets(readbuf, 1024); diff --git a/src/frontend/mame/ui/inifile.h b/src/frontend/mame/ui/inifile.h index b8ba87addae..654241e6913 100644 --- a/src/frontend/mame/ui/inifile.h +++ b/src/frontend/mame/ui/inifile.h @@ -55,7 +55,7 @@ private: std::vector> ini_index; // init category index - void init_category(std::string &filename); + void init_category(std::string filename); // init file index void directory_scan(); diff --git a/src/frontend/mame/ui/menu.cpp b/src/frontend/mame/ui/menu.cpp index 35e325a35e7..9795b2bb4e9 100644 --- a/src/frontend/mame/ui/menu.cpp +++ b/src/frontend/mame/ui/menu.cpp @@ -37,12 +37,7 @@ namespace ui { #define UI_MENU_POOL_SIZE 65536 #define MAX_ICONS_RENDER 40 -struct arts_info -{ - const char *title, *path; -}; - -static const arts_info arts_info[] = +static std::vector> arts_info = { { __("Snapshots"), OPTION_SNAPSHOT_DIRECTORY }, { __("Cabinets"), OPTION_CABINETS_PATH }, @@ -61,7 +56,6 @@ static const arts_info arts_info[] = { __("Select"), OPTION_SELECT_PATH }, { __("Marquees"), OPTION_MARQUEES_PATH }, { __("Covers"), OPTION_COVER_PATH }, - { nullptr } }; static const char *hover_msg[] = { @@ -90,10 +84,10 @@ std::unique_ptr menu::snapx_bitmap; std::unique_ptr menu::no_avail_bitmap; std::unique_ptr menu::star_bitmap; std::unique_ptr menu::bgrnd_bitmap; -bitmap_argb32 *menu::icons_bitmap[MAX_ICONS_RENDER]; +std::vector> menu::icons_bitmap; std::unique_ptr menu::hilight_main_bitmap; -bitmap_argb32 *menu::toolbar_bitmap[UI_TOOLBAR_BUTTONS]; -bitmap_argb32 *menu::sw_toolbar_bitmap[UI_TOOLBAR_BUTTONS]; +std::vector> menu::toolbar_bitmap; +std::vector> menu::sw_toolbar_bitmap; /*************************************************************************** INLINE FUNCTIONS @@ -106,7 +100,7 @@ bitmap_argb32 *menu::sw_toolbar_bitmap[UI_TOOLBAR_BUTTONS]; inline bool is_selectable(menu_item const &item) { - return ((item.flags & (menu::FLAG_MULTILINE | menu::FLAG_DISABLE)) == 0 && strcmp(item.text, MENU_SEPARATOR_ITEM) != 0); + return ((item.flags & (menu::FLAG_MULTILINE | menu::FLAG_DISABLE)) == 0 && item.type != menu_item_type::SEPARATOR); } @@ -322,7 +316,7 @@ void menu::item_append(menu_item item) void menu::item_append(menu_item_type type) { if (type == menu_item_type::SEPARATOR) - item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr); + item_append(MENU_SEPARATOR_ITEM, nullptr, 0, nullptr, menu_item_type::SEPARATOR); } //------------------------------------------------- @@ -725,7 +719,7 @@ void menu::draw(UINT32 flags, float origx0, float origy0) } // if we're just a divider, draw a line - else if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + else if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // if we don't have a subitem, just draw the string centered @@ -1409,7 +1403,7 @@ void menu::init_ui(running_machine &machine, ui_options &mopt) // allocate icons for (int i = 0; i < MAX_ICONS_RENDER; i++) { - icons_bitmap[i] = auto_alloc(machine, bitmap_argb32); + icons_bitmap.emplace_back(std::make_unique()); icons_texture[i] = mrender.texture_alloc(); } @@ -1436,28 +1430,28 @@ void menu::init_ui(running_machine &machine, ui_options &mopt) // create a texture for toolbar for (int x = 0; x < UI_TOOLBAR_BUTTONS; ++x) { - toolbar_bitmap[x] = auto_alloc(machine, bitmap_argb32(32, 32)); - sw_toolbar_bitmap[x] = auto_alloc(machine, bitmap_argb32(32, 32)); + toolbar_bitmap.emplace_back(std::make_shared(32, 32)); + sw_toolbar_bitmap.emplace_back(std::make_shared(32, 32)); toolbar_texture[x] = mrender.texture_alloc(); sw_toolbar_texture[x] = mrender.texture_alloc(); - UINT32 *texture_dst = &toolbar_bitmap[x]->pix32(0); + UINT32 *texture_dst = &toolbar_bitmap.back()->pix32(0); memcpy(texture_dst, toolbar_bitmap_bmp[x], 32 * 32 * sizeof(UINT32)); - if (toolbar_bitmap[x]->valid()) - toolbar_texture[x]->set_bitmap(*toolbar_bitmap[x], toolbar_bitmap[x]->cliprect(), TEXFORMAT_ARGB32); + if (toolbar_bitmap.back()->valid()) + toolbar_texture[x]->set_bitmap(*toolbar_bitmap.back(), toolbar_bitmap.back()->cliprect(), TEXFORMAT_ARGB32); else - toolbar_bitmap[x]->reset(); + toolbar_bitmap.back()->reset(); if (x == 0 || x == 2) { texture_dst = &sw_toolbar_bitmap[x]->pix32(0); memcpy(texture_dst, toolbar_bitmap_bmp[x], 32 * 32 * sizeof(UINT32)); - if (sw_toolbar_bitmap[x]->valid()) - sw_toolbar_texture[x]->set_bitmap(*sw_toolbar_bitmap[x], sw_toolbar_bitmap[x]->cliprect(), TEXFORMAT_ARGB32); + if (sw_toolbar_bitmap.back()->valid()) + sw_toolbar_texture[x]->set_bitmap(*sw_toolbar_bitmap.back(), sw_toolbar_bitmap.back()->cliprect(), TEXFORMAT_ARGB32); else - sw_toolbar_bitmap[x]->reset(); + sw_toolbar_bitmap.back()->reset(); } else - sw_toolbar_bitmap[x]->reset(); + sw_toolbar_bitmap.back()->reset(); } } @@ -1610,9 +1604,10 @@ void menu::draw_select_game(UINT32 flags) hover = HOVER_ARROW_DOWN; } // if we're just a divider, draw a line - else if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + else if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); + // draw the item centered else if (pitem.subtext == nullptr) { @@ -1686,7 +1681,7 @@ void menu::draw_select_game(UINT32 flags) highlight(container, line_x0, line_y0, line_x1, line_y1, bgcolor); } - if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line + 0.5f * line_height, visible_left + visible_width, line + 0.5f * line_height, UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); else @@ -1731,21 +1726,21 @@ void menu::draw_select_game(UINT32 flags) void menu::get_title_search(std::string &snaptext, std::string &searchstr) { // get arts title text - snaptext.assign(_(arts_info[ui_globals::curimage_view].title)); + snaptext.assign(_(arts_info[ui_globals::curimage_view].first)); // get search path std::string addpath; if (ui_globals::curimage_view == SNAPSHOT_VIEW) { emu_options moptions; - searchstr = machine().options().value(arts_info[ui_globals::curimage_view].path); - addpath = moptions.value(arts_info[ui_globals::curimage_view].path); + searchstr = machine().options().value(arts_info[ui_globals::curimage_view].second); + addpath = moptions.value(arts_info[ui_globals::curimage_view].second); } else { ui_options moptions; - searchstr = ui().options().value(arts_info[ui_globals::curimage_view].path); - addpath = moptions.value(arts_info[ui_globals::curimage_view].path); + searchstr = ui().options().value(arts_info[ui_globals::curimage_view].second); + addpath = moptions.value(arts_info[ui_globals::curimage_view].second); } std::string tmp(searchstr); @@ -2266,7 +2261,7 @@ std::string menu::arts_render_common(float origx1, float origy1, float origx2, f // apply title to right panel for (int x = FIRST_VIEW; x < LAST_VIEW; x++) { - ui().draw_text_full(container, _(arts_info[x].title), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, + ui().draw_text_full(container, _(arts_info[x].first), origx1, origy1, origx2 - origx1, JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NONE, rgb_t::white, rgb_t::black, &txt_lenght, nullptr); txt_lenght += 0.01f; title_size = MAX(txt_lenght, title_size); @@ -2320,16 +2315,11 @@ void menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software) y2 -= UI_BOX_TB_BORDER; render_texture **t_texture = (software) ? sw_toolbar_texture : toolbar_texture; - bitmap_argb32 **t_bitmap = (software) ? sw_toolbar_bitmap : toolbar_bitmap; + auto t_bitmap = (software) ? sw_toolbar_bitmap : toolbar_bitmap; int m_valid = 0; - for (int x = 0; x < UI_TOOLBAR_BUTTONS; ++x) - { - if (t_bitmap[x]->valid()) - { - m_valid++; - } - } + for (auto & e : t_bitmap) + if (e->valid()) m_valid++; float space_x = (y2 - y1) * container->manager().ui_aspect(); float total = (m_valid * space_x) + ((m_valid - 1) * 0.001f); @@ -2337,7 +2327,6 @@ void menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software) x2 = x1 + space_x; for (int z = 0; z < UI_TOOLBAR_BUTTONS; ++z) - { if (t_bitmap[z]->valid()) { rgb_t color(0xEFEFEFEF); @@ -2353,7 +2342,6 @@ void menu::draw_toolbar(float x1, float y1, float x2, float y2, bool software) x1 += space_x + ((z < UI_TOOLBAR_BUTTONS - 1) ? 0.001f : 0.0f); x2 = x1 + space_x; } - } } @@ -2390,11 +2378,11 @@ void menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float ori int panel_height_pixel = panel_height * screen_height; // Calculate resize ratios for resizing - float ratioW = (float)panel_width_pixel / tmp_bitmap->width(); - float ratioH = (float)panel_height_pixel / tmp_bitmap->height(); - float ratioI = (float)tmp_bitmap->height() / tmp_bitmap->width(); - int dest_xPixel = tmp_bitmap->width(); - int dest_yPixel = tmp_bitmap->height(); + auto ratioW = (float)panel_width_pixel / tmp_bitmap->width(); + auto ratioH = (float)panel_height_pixel / tmp_bitmap->height(); + auto ratioI = (float)tmp_bitmap->height() / tmp_bitmap->width(); + auto dest_xPixel = tmp_bitmap->width(); + auto dest_yPixel = tmp_bitmap->height(); // force 4:3 ratio min if (ui().options().forced_4x3_snapshot() && ratioI < 0.75f && ui_globals::curimage_view == SNAPSHOT_VIEW) @@ -2451,9 +2439,9 @@ void menu::arts_render_images(bitmap_argb32 *tmp_bitmap, float origx1, float ori void menu::draw_common_arrow(float origx1, float origy1, float origx2, float origy2, int current, int dmin, int dmax, float title_size) { - float line_height = ui().get_line_height(); - float lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); - float gutter_width = lr_arrow_width * 1.3f; + auto line_height = ui().get_line_height(); + auto lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); + auto gutter_width = lr_arrow_width * 1.3f; // set left-right arrows dimension float ar_x0 = 0.5f * (origx2 + origx1) + 0.5f * title_size + gutter_width - lr_arrow_width; @@ -2504,9 +2492,9 @@ void menu::draw_common_arrow(float origx1, float origy1, float origx2, float ori void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) { static const game_driver *olddriver[MAX_ICONS_RENDER] = { nullptr }; - float x1 = x0 + ui().get_line_height() * container->manager().ui_aspect(container); - float y1 = y0 + ui().get_line_height(); - const game_driver *driver = (const game_driver *)selectedref; + auto x1 = x0 + ui().get_line_height() * container->manager().ui_aspect(container); + auto y1 = y0 + ui().get_line_height(); + auto driver = (const game_driver *)selectedref; if (olddriver[linenum] != driver || ui_globals::redraw_icon) { @@ -2516,7 +2504,7 @@ void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) bool cloneof = strcmp(driver->parent, "0"); if (cloneof) { - int cx = driver_list::find(driver->parent); + auto cx = driver_list::find(driver->parent); if (cx != -1 && ((driver_list::driver(cx).flags & MACHINE_IS_BIOS_ROOT) != 0)) cloneof = false; } @@ -2545,8 +2533,8 @@ void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) { float panel_width = x1 - x0; float panel_height = y1 - y0; - int screen_width = machine().render().ui_target().width(); - int screen_height = machine().render().ui_target().height(); + auto screen_width = machine().render().ui_target().width(); + auto screen_height = machine().render().ui_target().height(); if (machine().render().ui_target().orientation() & ORIENTATION_SWAP_XY) std::swap(screen_height, screen_width); @@ -2555,10 +2543,10 @@ void menu::draw_icon(int linenum, void *selectedref, float x0, float y0) int panel_height_pixel = panel_height * screen_height; // Calculate resize ratios for resizing - float ratioW = (float)panel_width_pixel / tmp->width(); - float ratioH = (float)panel_height_pixel / tmp->height(); - int dest_xPixel = tmp->width(); - int dest_yPixel = tmp->height(); + auto ratioW = (float)panel_width_pixel / tmp->width(); + auto ratioH = (float)panel_height_pixel / tmp->height(); + auto dest_xPixel = tmp->width(); + auto dest_yPixel = tmp->height(); if (ratioW < 1 || ratioH < 1) { @@ -2629,24 +2617,22 @@ void menu::info_arrow(int ub, float origx1, float origx2, float oy1, float line_ void menu::draw_palette_menu() { - float line_height = ui().get_line_height(); - float lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); - float ud_arrow_width = line_height * machine().render().ui_aspect(); - float gutter_width = lr_arrow_width * 1.3f; + auto line_height = ui().get_line_height(); + auto lr_arrow_width = 0.4f * line_height * machine().render().ui_aspect(); + auto ud_arrow_width = line_height * machine().render().ui_aspect(); + auto gutter_width = lr_arrow_width * 1.3f; int itemnum, linenum; if (ui().options().use_background_image() && &machine().system() == &GAME_NAME(___empty) && bgrnd_bitmap->valid()) container->add_quad(0.0f, 0.0f, 1.0f, 1.0f, rgb_t::white, bgrnd_texture, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // compute the width and height of the full menu - float visible_width = 0; - float visible_main_menu_height = 0; - for (itemnum = 0; itemnum < item.size(); itemnum++) + auto visible_width = 0.0f; + auto visible_main_menu_height = 0.0f; + for (auto & pitem : item) { - const menu_item &pitem = item[itemnum]; - // compute width of left hand side - float total_width = gutter_width + ui().get_string_width(pitem.text) + gutter_width; + auto total_width = gutter_width + ui().get_string_width(pitem.text) + gutter_width; // add in width of right hand side if (pitem.subtext) @@ -2661,7 +2647,7 @@ void menu::draw_palette_menu() } // account for extra space at the top and bottom - float visible_extra_menu_height = customtop + custombottom; + auto visible_extra_menu_height = customtop + custombottom; // add a little bit of slop for rounding visible_width += 0.01f; @@ -2778,13 +2764,13 @@ void menu::draw_palette_menu() } // if we're just a divider, draw a line - else if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + else if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line_y + 0.5f * line_height, visible_left + visible_width, line_y + 0.5f * line_height, UI_LINE_WIDTH, UI_BORDER_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); // if we don't have a subitem, just draw the string centered else if (pitem.subtext == nullptr) ui().draw_text_full(container, itemtext, effective_left, line_y, effective_width, - JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); + JUSTIFY_CENTER, WRAP_TRUNCATE, DRAW_NORMAL, fgcolor, bgcolor, nullptr, nullptr); // otherwise, draw the item on the left and the subitem text on the right else @@ -2817,9 +2803,9 @@ void menu::draw_palette_menu() void menu::draw_dats_menu() { - float line_height = ui().get_line_height(); - float ud_arrow_width = line_height * machine().render().ui_aspect(); - float gutter_width = 0.52f * line_height * machine().render().ui_aspect(); + auto line_height = ui().get_line_height(); + auto ud_arrow_width = line_height * machine().render().ui_aspect(); + auto gutter_width = 0.52f * line_height * machine().render().ui_aspect(); mouse_x = -1, mouse_y = -1; float visible_width = 1.0f - 2.0f * UI_BOX_LR_BORDER; float visible_left = (1.0f - visible_width) * 0.5f; @@ -2938,7 +2924,7 @@ void menu::draw_dats_menu() if (mouse_hit && line_x0 <= mouse_x && line_x1 > mouse_x && line_y0 <= mouse_y && line_y1 > mouse_y && is_selectable(pitem)) hover = count; - if (strcmp(itemtext, MENU_SEPARATOR_ITEM) == 0) + if (pitem.type == menu_item_type::SEPARATOR) container->add_line(visible_left, line + 0.5f * line_height, visible_left + visible_width, line + 0.5f * line_height, UI_LINE_WIDTH, UI_TEXT_COLOR, PRIMFLAG_BLENDMODE(BLENDMODE_ALPHA)); else @@ -2973,7 +2959,7 @@ void menu::extra_text_draw_box(float origx1, float origx2, float origy, float ys { float text_width, text_height; float width, maxwidth; - float x1, y1, x2, y2, temp; + float x1, y1, x2, y2; // get the size of the text ui().draw_text_full(container,text, 0.0f, 0.0f, 1.0f, JUSTIFY_LEFT, WRAP_WORD, @@ -2988,11 +2974,7 @@ void menu::extra_text_draw_box(float origx1, float origx2, float origy, float ys y2 = origy + (UI_BOX_TB_BORDER * direction); if (y1 > y2) - { - temp = y1; - y1 = y2; - y2 = temp; - } + std::swap(y1, y2); // draw a box ui().draw_outlined_box(container,x1, y1, x2, y2, UI_BACKGROUND_COLOR); @@ -3003,7 +2985,7 @@ void menu::extra_text_draw_box(float origx1, float origx2, float origy, float ys // draw the text within it ui().draw_text_full(container,text, x1, y1, text_width, JUSTIFY_LEFT, WRAP_WORD, - DRAW_NORMAL, rgb_t::white, rgb_t::black, nullptr, nullptr); + DRAW_NORMAL, rgb_t::white, rgb_t::black, nullptr, nullptr); } @@ -3012,9 +2994,7 @@ void menu::extra_text_draw_box(float origx1, float origx2, float origy, float ys // and footer text //------------------------------------------------- -void menu::extra_text_render(float top, float bottom, - float origx1, float origy1, float origx2, float origy2, - const char *header, const char *footer) +void menu::extra_text_render(float top, float bottom, float origx1, float origy1, float origx2, float origy2, const char *header, const char *footer) { header = ((header != nullptr) && (header[0] != '\0')) ? header : nullptr; footer = ((footer != nullptr) && (footer[0] != '\0')) ? footer : nullptr; diff --git a/src/frontend/mame/ui/menu.h b/src/frontend/mame/ui/menu.h index e450cf7399b..88ece1b55ff 100644 --- a/src/frontend/mame/ui/menu.h +++ b/src/frontend/mame/ui/menu.h @@ -312,7 +312,7 @@ private: static std::unique_ptr no_avail_bitmap, bgrnd_bitmap, star_bitmap; static render_texture *bgrnd_texture, *star_texture; - static bitmap_argb32 *icons_bitmap[]; + static std::vector> icons_bitmap; static render_texture *icons_texture[]; // request the specific handling of the game selection main menu @@ -322,7 +322,7 @@ private: static void stack_push(std::unique_ptr &&menu); // toolbar - static bitmap_argb32 *toolbar_bitmap[], *sw_toolbar_bitmap[]; + static std::vector> toolbar_bitmap, sw_toolbar_bitmap; static render_texture *toolbar_texture[], *sw_toolbar_texture[]; // draw game list diff --git a/src/frontend/mame/ui/miscmenu.cpp b/src/frontend/mame/ui/miscmenu.cpp index 3158055febd..a5da1ec9d6b 100644 --- a/src/frontend/mame/ui/miscmenu.cpp +++ b/src/frontend/mame/ui/miscmenu.cpp @@ -450,12 +450,7 @@ void menu_crosshair::populate() int length = strlen(dir->name); /* look for files ending in .png with a name not larger then 9 chars*/ - if ((length > 4) && (length <= CROSSHAIR_PIC_NAME_LENGTH + 4) && - dir->name[length - 4] == '.' && - tolower((UINT8)dir->name[length - 3]) == 'p' && - tolower((UINT8)dir->name[length - 2]) == 'n' && - tolower((UINT8)dir->name[length - 1]) == 'g') - + if ((length > 4) && (length <= CROSSHAIR_PIC_NAME_LENGTH + 4) && core_filename_ends_with(dir->name, ".png")) { /* remove .png from length */ length -= 4; diff --git a/src/frontend/mame/ui/selgame.cpp b/src/frontend/mame/ui/selgame.cpp index 7143096f3b4..d3976afa1d6 100644 --- a/src/frontend/mame/ui/selgame.cpp +++ b/src/frontend/mame/ui/selgame.cpp @@ -590,7 +590,7 @@ void menu_select_game::populate() } } - item_append(MENU_SEPARATOR_ITEM, nullptr, FLAG_UI, nullptr); + item_append(menu_item_type::SEPARATOR); // add special items if (menu::stack_has_special_main_menu()) diff --git a/src/frontend/mame/ui/selsoft.cpp b/src/frontend/mame/ui/selsoft.cpp index e650ce3ae1a..2c648ee1edf 100644 --- a/src/frontend/mame/ui/selsoft.cpp +++ b/src/frontend/mame/ui/selsoft.cpp @@ -493,7 +493,7 @@ void menu_select_software::populate() (void *)m_searchlist[curitem]); } - item_append(MENU_SEPARATOR_ITEM, nullptr, flags_ui, nullptr); + item_append(menu_item_type::SEPARATOR); // configure the custom rendering customtop = 4.0f * ui().get_line_height() + 5.0f * UI_BOX_TB_BORDER; diff --git a/src/frontend/mame/ui/utils.cpp b/src/frontend/mame/ui/utils.cpp index d65bbc52ef7..18f694007dc 100644 --- a/src/frontend/mame/ui/utils.cpp +++ b/src/frontend/mame/ui/utils.cpp @@ -92,6 +92,21 @@ int getprecisionchr(const char* s) return precision; } +std::vector tokenize(const std::string &text, char sep) +{ + std::vector tokens; + std::size_t start = 0, end = 0; + while ((end = text.find(sep, start)) != std::string::npos) + { + std::string temp = text.substr(start, end - start); + if (!temp.empty()) tokens.push_back(temp); + start = end + 1; + } + std::string temp = text.substr(start); + if (!temp.empty()) tokens.push_back(temp); + return tokens; +} + //------------------------------------------------- // search a substring with even partial matching //------------------------------------------------- diff --git a/src/frontend/mame/ui/utils.h b/src/frontend/mame/ui/utils.h index d31b3746e77..f6aa15b8b10 100644 --- a/src/frontend/mame/ui/utils.h +++ b/src/frontend/mame/ui/utils.h @@ -242,15 +242,10 @@ struct sw_custfltr }; // GLOBAL FUNCTIONS - -// advanced search function int fuzzy_substring(std::string needle, std::string haystack); - -// trim carriage return char* chartrimcarriage(char str[]); - const char* strensure(const char* s); - int getprecisionchr(const char* s); +std::vector tokenize(const std::string &text, char sep); #endif /* __UI_UTILS_H__ */