summaryrefslogtreecommitdiffstatshomepage
path: root/src/emu/netlist/plib/pstring.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/emu/netlist/plib/pstring.c')
-rw-r--r--src/emu/netlist/plib/pstring.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/emu/netlist/plib/pstring.c b/src/emu/netlist/plib/pstring.c
index 8ff8ae8c9a7..d335c2766a4 100644
--- a/src/emu/netlist/plib/pstring.c
+++ b/src/emu/netlist/plib/pstring.c
@@ -226,6 +226,7 @@ pstring_t<F> pstring_t<F>::replace(const pstring_t &search, const pstring_t &rep
i++;
}
}
+ ret = ret.cat(cstr() + i);
return ret;
}
@@ -512,6 +513,43 @@ void pstringbuffer::pcat(const pstring &s)
m_ptr[m_len] = 0;
}
+pformat::pformat(const pstring &fmt)
+: m_arg(0)
+{
+ memcpy(m_str, fmt.cstr(), fmt.blen() + 1);
+}
+
+pformat::pformat(const char *fmt)
+: m_arg(0)
+{
+ strncpy(m_str, fmt, sizeof(m_str));
+ m_str[sizeof(m_str)] = 0;
+}
+
+pformat &pformat::update(const char *f, const char *l, ...)
+{
+ va_list ap;
+ va_start(ap, l);
+ char fmt[30] = "%";
+ char search[10] = "";
+ char buf[1024];
+ strcat(fmt, f);
+ strcat(fmt, l);
+ int nl = vsprintf(buf, fmt, ap);
+ m_arg++;
+ int sl = sprintf(search, "%%%d", m_arg);
+ char *p = strstr(m_str, search);
+ if (p != NULL)
+ {
+ // Make room
+ memmove(p+nl, p+sl, strlen(p) + 1 - sl);
+ memcpy(p, buf, nl);
+ }
+ va_end(ap);
+ return *this;
+}
+
+
template struct pstring_t<pu8_traits>;
template struct pstring_t<putf8_traits>;