summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/ui/inifile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/ui/inifile.cpp')
-rw-r--r--src/emu/ui/inifile.cpp454
1 files changed, 0 insertions, 454 deletions
diff --git a/src/emu/ui/inifile.cpp b/src/emu/ui/inifile.cpp
deleted file mode 100644
index 1c92b43a4d6..00000000000
--- a/src/emu/ui/inifile.cpp
+++ /dev/null
@@ -1,454 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Dankan1890
-/***************************************************************************
-
- ui/inifile.cpp
-
- UI INIs file manager.
-
-***************************************************************************/
-
-#include "emu.h"
-#include "ui/ui.h"
-#include "ui/inifile.h"
-#include "softlist.h"
-#include "drivenum.h"
-#include <algorithm>
-
-//-------------------------------------------------
-// GLOBAL VARIABLES
-//-------------------------------------------------
-UINT16 inifile_manager::current_category = 0;
-UINT16 inifile_manager::current_file = 0;
-
-//-------------------------------------------------
-// ctor
-//-------------------------------------------------
-
-inifile_manager::inifile_manager(running_machine &machine)
- : m_machine(machine)
-{
- ini_index.clear();
- directory_scan();
-}
-
-//-------------------------------------------------
-// scan directories and create index
-//-------------------------------------------------
-
-void inifile_manager::directory_scan()
-{
- // open extra INIs folder
- file_enumerator path(machine().ui().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);
-
- // skip ui_favorite file
- if (!core_stricmp("ui_favorite.ini", filename.c_str()))
- continue;
-
- // 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')
- {
- // try to open file and indexing
- if (parseopen(filename.c_str()))
- {
- init_category(filename);
- parseclose();
- }
- }
- }
-}
-
-//-------------------------------------------------
-// initialize category
-//-------------------------------------------------
-
-void inifile_manager::init_category(std::string &filename)
-{
- categoryindex index;
- char rbuf[MAX_CHAR_INFO];
- std::string readbuf, name;
- while (fgets(rbuf, MAX_CHAR_INFO, fp) != nullptr)
- {
- readbuf = rbuf;
- if (readbuf[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));
- }
- }
-
- if (!index.empty())
- ini_index.emplace_back(filename, index);
-}
-
-//-------------------------------------------------
-// load and indexing ini files
-//-------------------------------------------------
-
-void inifile_manager::load_ini_category(std::vector<int> &temp_filter)
-{
- if (ini_index.empty())
- return;
-
- bool search_clones = false;
- std::string filename(ini_index[current_file].name);
- long offset = ini_index[current_file].category[current_category].offset;
-
- if (!core_stricmp(filename.c_str(), "category.ini") || !core_stricmp(filename.c_str(), "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)
- {
- readbuf = chartrimcarriage(rbuf);
-
- if (readbuf.empty() || readbuf[0] == '[')
- break;
-
- int dfind = driver_list::find(readbuf.c_str());
- if (dfind != -1 && search_clones)
- {
- 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 (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();
- }
-}
-
-//---------------------------------------------------------
-// parseopen - Open up file for reading
-//---------------------------------------------------------
-
-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(machine().ui().options().extraini_path(), OPEN_FLAG_READ);
- if (file.open(filename) != FILERR_NONE)
- return false;
-
- m_fullpath = file.fullpath();
- file.close();
- fp = fopen(m_fullpath.c_str(), "r");
-
- fgetc(fp);
- fseek(fp, 0, SEEK_SET);
- return true;
-}
-
-/**************************************************************************
- FAVORITE MANAGER
-**************************************************************************/
-
-//-------------------------------------------------
-// ctor
-//-------------------------------------------------
-
-favorite_manager::favorite_manager(running_machine &machine)
- : m_machine(machine)
-{
- m_current = -1;
- parse_favorite();
-}
-
-//-------------------------------------------------
-// add a game
-//-------------------------------------------------
-
-void favorite_manager::add_favorite_game(const game_driver *driver)
-{
- m_list.emplace_back(driver->name, driver->description, "", "", "", 0, "", driver, "", "", "", 1, "", "", "", true);
- save_favorite_games();
-}
-
-//-------------------------------------------------
-// add a system
-//-------------------------------------------------
-
-void favorite_manager::add_favorite_game(ui_software_info &swinfo)
-{
- m_list.push_back(swinfo);
- save_favorite_games();
-}
-
-//-------------------------------------------------
-// add a game / system
-//-------------------------------------------------
-
-void favorite_manager::add_favorite_game()
-{
- if ((machine().system().flags & MACHINE_TYPE_ARCADE) != 0)
- {
- add_favorite_game(&machine().system());
- return;
- }
-
- bool software_avail = false;
- image_interface_iterator iter(machine().root_device());
- for (device_image_interface *image = iter.first(); image != nullptr; image = iter.next())
- {
- if (image->exists() && image->software_entry())
- {
- const software_info *swinfo = image->software_entry();
- const software_part *part = image->part_entry();
- ui_software_info tmpmatches;
- tmpmatches.shortname = strensure(swinfo->shortname());
- tmpmatches.longname = strensure(image->longname());
- tmpmatches.parentname = strensure(swinfo->parentname());
- tmpmatches.year = strensure(image->year());
- tmpmatches.publisher = strensure(image->manufacturer());
- tmpmatches.supported = image->supported();
- tmpmatches.part = strensure(part->name());
- tmpmatches.driver = &machine().system();
- tmpmatches.listname = strensure(image->software_list_name());
- tmpmatches.interface = strensure(part->interface());
- tmpmatches.instance = strensure(image->instance_name());
- tmpmatches.startempty = 0;
- tmpmatches.parentlongname.clear();
- if (swinfo->parentname())
- {
- software_list_device *swlist = software_list_device::find_by_name(machine().config(), image->software_list_name());
- for (software_info *c_swinfo = swlist->first_software_info(); c_swinfo != nullptr; c_swinfo = c_swinfo->next())
- {
- std::string c_parent(c_swinfo->parentname());
- if (!c_parent.empty() && c_parent == swinfo->shortname())
- {
- tmpmatches.parentlongname = c_swinfo->longname();
- break;
- }
- }
- }
-
- tmpmatches.usage.clear();
- for (feature_list_item *flist = swinfo->other_info(); flist != nullptr; flist = flist->next())
- if (!strcmp(flist->name(), "usage"))
- tmpmatches.usage = flist->value();
-
- tmpmatches.devicetype = strensure(image->image_type_name());
- tmpmatches.available = true;
- software_avail = true;
- m_list.push_back(tmpmatches);
- save_favorite_games();
- }
- }
-
- if (!software_avail)
- add_favorite_game(&machine().system());
-}
-
-//-------------------------------------------------
-// remove a favorite from list
-//-------------------------------------------------
-
-void favorite_manager::remove_favorite_game(ui_software_info &swinfo)
-{
- m_list.erase(std::remove(m_list.begin(), m_list.end(), swinfo), m_list.end());
- save_favorite_games();
-}
-
-//-------------------------------------------------
-// remove a favorite from list
-//-------------------------------------------------
-
-void favorite_manager::remove_favorite_game()
-{
- m_list.erase(m_list.begin() + m_current);
- save_favorite_games();
-}
-
-//-------------------------------------------------
-// check if game is already in favorite list
-//-------------------------------------------------
-
-bool favorite_manager::isgame_favorite()
-{
- if ((machine().system().flags & MACHINE_TYPE_ARCADE) != 0)
- return isgame_favorite(&machine().system());
-
- image_interface_iterator iter(machine().root_device());
- bool image_loaded = false;
-
- for (device_image_interface *image = iter.first(); image != nullptr; image = iter.next())
- {
- const software_info *swinfo = image->software_entry();
- if (image->exists() && swinfo != nullptr)
- {
- image_loaded = true;
- for (size_t current = 0; current < m_list.size(); current++)
- if (m_list[current].shortname == swinfo->shortname() &&
- m_list[current].listname == image->software_list_name())
- {
- m_current = current;
- return true;
- }
- }
- }
-
- if (!image_loaded)
- return isgame_favorite(&machine().system());
-
- m_current = -1;
- return false;
-}
-
-//-------------------------------------------------
-// check if game is already in favorite list
-//-------------------------------------------------
-
-bool favorite_manager::isgame_favorite(const game_driver *driver)
-{
- for (size_t x = 0; x < m_list.size(); x++)
- if (m_list[x].driver == driver && m_list[x].shortname == driver->name)
- {
- m_current = x;
- return true;
- }
-
- m_current = -1;
- return false;
-}
-
-//-------------------------------------------------
-// check if game is already in favorite list
-//-------------------------------------------------
-
-bool favorite_manager::isgame_favorite(ui_software_info &swinfo)
-{
- for (size_t x = 0; x < m_list.size(); x++)
- if (m_list[x] == swinfo)
- {
- m_current = x;
- return true;
- }
-
- m_current = -1;
- return false;
-}
-
-//-------------------------------------------------
-// parse favorite file
-//-------------------------------------------------
-
-void favorite_manager::parse_favorite()
-{
- emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_READ);
- if (file.open(favorite_filename) == FILERR_NONE)
- {
- char readbuf[1024];
- file.gets(readbuf, 1024);
-
- while (readbuf[0] == '[')
- file.gets(readbuf, 1024);
-
- while (file.gets(readbuf, 1024))
- {
- ui_software_info tmpmatches;
- tmpmatches.shortname = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.longname = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.parentname = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.year = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.publisher = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.supported = atoi(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.part = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- chartrimcarriage(readbuf);
- int dx = driver_list::find(readbuf);
- if (dx == -1) continue;
- tmpmatches.driver = &driver_list::driver(dx);
- file.gets(readbuf, 1024);
- tmpmatches.listname = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.interface = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.instance = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.startempty = atoi(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.parentlongname = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.usage = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.devicetype = chartrimcarriage(readbuf);
- file.gets(readbuf, 1024);
- tmpmatches.available = atoi(readbuf);
- m_list.push_back(tmpmatches);
- }
- file.close();
- }
-}
-
-//-------------------------------------------------
-// save favorite
-//-------------------------------------------------
-
-void favorite_manager::save_favorite_games()
-{
- // attempt to open the output file
- emu_file file(machine().ui().options().ui_path(), OPEN_FLAG_WRITE | OPEN_FLAG_CREATE | OPEN_FLAG_CREATE_PATHS);
- if (file.open(favorite_filename) == FILERR_NONE)
- {
- if (m_list.empty())
- {
- file.remove_on_close();
- file.close();
- return;
- }
-
- // generate the favorite INI
- std::string text("[ROOT_FOLDER]\n[Favorite]\n\n");
- for (auto & elem : m_list)
- {
- text += elem.shortname + "\n";
- text += elem.longname + "\n";
- text += elem.parentname + "\n";
- text += elem.year + "\n";
- text += elem.publisher + "\n";
- strcatprintf(text, "%d\n", elem.supported);
- text += elem.part + "\n";
- strcatprintf(text, "%s\n", elem.driver->name);
- text += elem.listname + "\n";
- text += elem.interface + "\n";
- text += elem.instance + "\n";
- strcatprintf(text, "%d\n", elem.startempty);
- text += elem.parentlongname + "\n";
- text += elem.usage + "\n";
- text += elem.devicetype + "\n";
- strcatprintf(text, "%d\n", elem.available);
- }
- file.puts(text.c_str());
- file.close();
- }
-}