summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/softlist.cpp
diff options
context:
space:
mode:
author wilbertpol <wilbertpol@users.noreply.github.com>2021-10-05 19:16:42 +0200
committer GitHub <noreply@github.com>2021-10-05 19:16:42 +0200
commiteae75824d3c8d697216a9782b9f7ca6494ef431d (patch)
treeeb98e1e99941c8843fe2196480927eefb00e2784 /src/emu/softlist.cpp
parent716c9f4c863ca150ff519429b24168df9890f1b1 (diff)
softlist.cpp: Add support for a 'notes' field to store information ab… (#8482)
* softlist.cpp: Add support for a 'notes' field to store information about a software list or software list item. [Wilbert Pol] * Add software list and software notes to minimaws
Diffstat (limited to 'src/emu/softlist.cpp')
-rw-r--r--src/emu/softlist.cpp31
1 files changed, 29 insertions, 2 deletions
diff --git a/src/emu/softlist.cpp b/src/emu/softlist.cpp
index 34517aa13ce..8ee8d0d8500 100644
--- a/src/emu/softlist.cpp
+++ b/src/emu/softlist.cpp
@@ -196,6 +196,7 @@ public:
std::string_view filename,
std::string &listname,
std::string &description,
+ std::string &notes,
std::list<software_info> &infolist,
std::ostream &errors);
@@ -236,6 +237,7 @@ private:
void parse_soft_start(const char *tagname, const char **attributes);
void parse_part_start(const char *tagname, const char **attributes);
void parse_data_start(const char *tagname, const char **attributes);
+ void parse_main_end(const char *tagname);
void parse_soft_end(const char *name);
// internal parsing state
@@ -245,6 +247,7 @@ private:
struct XML_ParserStruct * m_parser;
std::string & m_listname;
std::string & m_description;
+ std::string & m_notes;
bool m_data_accum_expected;
std::string m_data_accum;
software_info * m_current_info;
@@ -262,6 +265,7 @@ softlist_parser::softlist_parser(
std::string_view filename,
std::string &listname,
std::string &description,
+ std::string &notes,
std::list<software_info> &infolist,
std::ostream &errors) :
m_filename(filename),
@@ -269,6 +273,7 @@ softlist_parser::softlist_parser(
m_errors(errors),
m_listname(listname),
m_description(description),
+ m_notes(notes),
m_data_accum_expected(false),
m_current_info(nullptr),
m_current_part(nullptr),
@@ -472,6 +477,7 @@ void softlist_parser::end_handler(void *data, const char *name)
break;
case POS_MAIN:
+ state->parse_main_end(name);
state->m_current_info = nullptr;
break;
@@ -563,13 +569,25 @@ void softlist_parser::parse_main_start(const char *tagname, const char **attribu
else
parse_error("No name defined for item");
}
+ // <notes>
+ else if (strcmp(tagname, "notes") == 0)
+ {
+ m_data_accum_expected = true;
+ }
else
unknown_tag(tagname);
}
+void softlist_parser::parse_main_end(const char *tagname)
+{
+ if (strcmp(tagname, "notes") == 0)
+ m_notes = m_data_accum;
+}
+
+
//-------------------------------------------------
-// parse_main_start - handle tag start within
+// parse_soft_start - handle tag start within
// a software tag
//-------------------------------------------------
@@ -594,6 +612,10 @@ void softlist_parser::parse_soft_start(const char *tagname, const char **attribu
else if (strcmp(tagname, "publisher") == 0)
m_data_accum_expected = true;
+ // <notes>
+ else if (strcmp(tagname, "notes") == 0)
+ m_data_accum_expected = true;
+
// <info name='' value=''>
else if (strcmp(tagname, "info") == 0)
{
@@ -859,6 +881,10 @@ void softlist_parser::parse_soft_end(const char *tagname)
else if (strcmp(tagname, "publisher") == 0)
m_current_info->m_publisher = m_data_accum;
+ // <notes>
+ else if (strcmp(tagname, "notes") == 0)
+ m_current_info->m_notes = m_data_accum;
+
// </part>
else if (strcmp(tagname, "part") == 0)
{
@@ -887,10 +913,11 @@ void parse_software_list(
std::string_view filename,
std::string &listname,
std::string &description,
+ std::string &notes,
std::list<software_info> &infolist,
std::ostream &errors)
{
- detail::softlist_parser(file, filename, listname, description, infolist, errors);
+ detail::softlist_parser(file, filename, listname, description, notes, infolist, errors);
}