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.c93
1 files changed, 75 insertions, 18 deletions
diff --git a/src/emu/netlist/plib/pstring.c b/src/emu/netlist/plib/pstring.c
index d0a45607244..00f075d299d 100644
--- a/src/emu/netlist/plib/pstring.c
+++ b/src/emu/netlist/plib/pstring.c
@@ -118,7 +118,7 @@ template<typename F>
const pstring_t<F> pstring_t<F>::substr(int start, int count) const
{
pstring_t ret;
- unsigned alen = len();
+ int alen = (int) len();
if (start < 0)
start = 0;
if (start >= alen)
@@ -148,7 +148,7 @@ const pstring_t<F> pstring_t<F>::ucase() const
{
pstring_t ret = *this;
ret.pcopy(cstr(), blen());
- for (int i=0; i<ret.len(); i++)
+ for (unsigned i=0; i<ret.len(); i++)
ret.m_ptr->str()[i] = toupper((unsigned) ret.m_ptr->str()[i]);
return ret;
}
@@ -159,11 +159,11 @@ int pstring_t<F>::find_first_not_of(const pstring_t &no) const
char *t = m_ptr->str();
unsigned nolen = no.len();
unsigned tlen = len();
- for (int i=0; i < tlen; i++)
+ for (unsigned i=0; i < tlen; i++)
{
char *n = no.m_ptr->str();
bool f = true;
- for (int j=0; j < nolen; j++)
+ for (unsigned j=0; j < nolen; j++)
{
if (F::code(t) == F::code(n))
f = false;
@@ -183,11 +183,11 @@ int pstring_t<F>::find_last_not_of(const pstring_t &no) const
unsigned nolen = no.len();
unsigned tlen = len();
int last_found = -1;
- for (int i=0; i < tlen; i++)
+ for (unsigned i=0; i < tlen; i++)
{
char *n = no.m_ptr->str();
bool f = true;
- for (int j=0; j < nolen; j++)
+ for (unsigned j=0; j < nolen; j++)
{
if (F::code(t) == F::code(n))
f = false;
@@ -251,7 +251,7 @@ const pstring_t<F> pstring_t<F>::rtrim(const pstring_t &ws) const
}
template<typename F>
-const pstring_t<F> pstring_t<F>::rpad(const pstring_t &ws, const int cnt) const
+const pstring_t<F> pstring_t<F>::rpad(const pstring_t &ws, const unsigned cnt) const
{
// FIXME: pstringbuffer ret(*this);
@@ -342,7 +342,7 @@ const pstring::type_t pstring::vprintf(va_list args) const
char tempbuf[4096];
std::vsprintf(tempbuf, cstr(), args);
- return pstring_t(tempbuf);
+ return type_t(tempbuf);
}
@@ -350,7 +350,7 @@ const pstring::type_t pstring::sprintf(const char *format, ...)
{
va_list ap;
va_start(ap, format);
- pstring_t ret = pstring(format).vprintf(ap);
+ type_t ret = pstring(format).vprintf(ap);
va_end(ap);
return ret;
}
@@ -363,7 +363,7 @@ int pstring_t<F>::find(const pstring_t &search, unsigned start) const
const char *s = search.cstr();
const unsigned startt = std::min(start, tlen);
const char *t = cstr();
- for (int i=0; i<startt; i++)
+ for (unsigned i=0; i<startt; i++)
t += F::codelen(t);
for (int i=0; i <= (int) tlen - (int) startt - (int) slen; i++)
{
@@ -392,7 +392,7 @@ int pstring_t<F>::find(const mem_t *search, unsigned start) const
const char *s = search;
const unsigned startt = std::min(start, tlen);
const char *t = cstr();
- for (int i=0; i<startt; i++)
+ for (unsigned i=0; i<startt; i++)
t += F::codelen(t);
for (int i=0; i <= (int) tlen - (int) startt - (int) slen; i++)
{
@@ -426,7 +426,7 @@ bool pstring_t<F>::endsWith(const pstring_t &arg) const
template<typename F>
bool pstring_t<F>::startsWith(const mem_t *arg) const
{
- int alen = strlen(arg);
+ unsigned alen = strlen(arg);
if (alen > blen())
return false;
else
@@ -494,6 +494,15 @@ void pstringbuffer::pcat(const char *s)
m_len += slen;
}
+void pstringbuffer::pcat(const void *m, unsigned l)
+{
+ const std::size_t nl = m_len + l + 1;
+ resize(nl);
+ std::memcpy(m_ptr + m_len, m, l);
+ m_len += l;
+ *(m_ptr + m_len) = 0;
+}
+
void pstringbuffer::pcat(const pstring &s)
{
const std::size_t slen = s.blen();
@@ -504,28 +513,30 @@ void pstringbuffer::pcat(const pstring &s)
m_ptr[m_len] = 0;
}
-pformat::pformat(const pstring &fmt)
+pfmt::pfmt(const pstring &fmt)
: m_arg(0)
{
memcpy(m_str, fmt.cstr(), fmt.blen() + 1);
}
-pformat::pformat(const char *fmt)
+pfmt::pfmt(const char *fmt)
: m_arg(0)
{
strncpy(m_str, fmt, sizeof(m_str) - 1);
m_str[sizeof(m_str) - 1] = 0;
}
-pformat &pformat::update(const char *f, const char *l, ...)
+#if 0
+void pformat::format_element(const char *f, const char *l, const char *fmt_spec, ...)
{
va_list ap;
- va_start(ap, l);
+ va_start(ap, fmt_spec);
char fmt[30] = "%";
char search[10] = "";
char buf[1024];
strcat(fmt, f);
strcat(fmt, l);
+ strcat(fmt, fmt_spec);
int nl = vsprintf(buf, fmt, ap);
m_arg++;
int sl = sprintf(search, "%%%d", m_arg);
@@ -537,9 +548,55 @@ pformat &pformat::update(const char *f, const char *l, ...)
memcpy(p, buf, nl);
}
va_end(ap);
- return *this;
}
-
+#else
+void pfmt::format_element(const char *f, const char *l, const char *fmt_spec, ...)
+{
+ va_list ap;
+ va_start(ap, fmt_spec);
+ char fmt[30] = "%";
+ char search[10] = "";
+ char buf[1024];
+ m_arg++;
+ int sl = sprintf(search, "{%d:", m_arg);
+ char *p = strstr(m_str, search);
+ if (p == NULL)
+ {
+ sl = sprintf(search, "{%d}", m_arg);
+ p = strstr(m_str, search);
+ if (p == NULL)
+ {
+ sl = 2;
+ p = strstr(m_str, "{}");
+ }
+ strcat(fmt, f);
+ }
+ else
+ {
+ char *p1 = strstr(p, "}");
+ if (p1 != NULL)
+ {
+ sl = p1 - p + 1;
+ if (m_arg>=10)
+ strncat(fmt, p+4, p1 - p - 4);
+ else
+ strncat(fmt, p+3, p1 - p - 3);
+ }
+ else
+ strcat(fmt, f);
+ }
+ strcat(fmt, l);
+ strcat(fmt, fmt_spec);
+ int nl = vsprintf(buf, fmt, ap);
+ if (p != NULL)
+ {
+ // Make room
+ memmove(p+nl, p+sl, strlen(p) + 1 - sl);
+ memcpy(p, buf, nl);
+ }
+ va_end(ap);
+}
+#endif
template struct pstring_t<pu8_traits>;
template struct pstring_t<putf8_traits>;