249 lines
3.9 KiB
C++
Executable file
249 lines
3.9 KiB
C++
Executable file
#include "fmod_string.h"
|
|
#include "fmod_stringw.h"
|
|
#include "fmod_memory.h"
|
|
|
|
int FMOD_strlenW(const short * s)
|
|
{
|
|
const short *sc;
|
|
|
|
for (sc = s; *sc != '\0'; ++sc) /* nothing */;
|
|
|
|
return (int)(sc - s);
|
|
}
|
|
|
|
short * FMOD_strcpyW(short * dest,const short *src)
|
|
{
|
|
short *tmp = dest;
|
|
|
|
while ((*dest++ = *src++) != '\0') /* nothing */;
|
|
|
|
return tmp;
|
|
}
|
|
|
|
short * FMOD_strncpyW(short * dest, const short *src, int count)
|
|
{
|
|
short *tmp = dest;
|
|
|
|
while (count-- && (*dest++ = *src++) != '\0') /* nothing */;
|
|
|
|
return tmp;
|
|
}
|
|
|
|
|
|
short * FMOD_strcatW(short * dest, const short * src)
|
|
{
|
|
short *tmp = dest;
|
|
|
|
while (*dest) dest++;
|
|
while ((*dest++ = *src++) != '\0') ;
|
|
|
|
return tmp;
|
|
}
|
|
|
|
short * FMOD_strncatW(short *dest, const short *src, int count)
|
|
{
|
|
short *tmp = dest;
|
|
|
|
if (count)
|
|
{
|
|
while (*dest) dest++;
|
|
|
|
while ((*dest++ = *src++))
|
|
{
|
|
if (--count == 0)
|
|
{
|
|
*dest = '\0';
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
return tmp;
|
|
}
|
|
|
|
short FMOD_tolowerW(short in)
|
|
{
|
|
if (in >= 'A' && in <= 'Z')
|
|
{
|
|
in += 'a' - 'A';
|
|
}
|
|
|
|
return in;
|
|
}
|
|
|
|
short *FMOD_struprW(short *string)
|
|
{
|
|
short * cp;
|
|
|
|
for (cp=string; *cp; ++cp)
|
|
{
|
|
if (*cp >= 'a' && *cp <= 'z')
|
|
{
|
|
*cp += 'A' - 'a';
|
|
}
|
|
}
|
|
|
|
return(string);
|
|
}
|
|
|
|
short *FMOD_strlwrW(short *string)
|
|
{
|
|
short * cp;
|
|
|
|
for (cp=string; *cp; ++cp)
|
|
{
|
|
if (*cp >= 'A' && *cp <= 'Z')
|
|
{
|
|
*cp += 'a' - 'A';
|
|
}
|
|
}
|
|
|
|
return(string);
|
|
}
|
|
|
|
|
|
int FMOD_strcmpW( const short *string1, const short *string2 )
|
|
{
|
|
register short c1, c2;
|
|
do
|
|
{
|
|
c1 = *string1++;
|
|
c2 = *string2++;
|
|
} while ( c1 && (c1 == c2) );
|
|
|
|
return c1 - c2;
|
|
}
|
|
|
|
|
|
int FMOD_strncmpW( const short *string1, const short *string2, int len )
|
|
{
|
|
register short c1, c2;
|
|
int count=0;
|
|
do
|
|
{
|
|
c1 = *string1++;
|
|
c2 = *string2++;
|
|
count++;
|
|
} while ( c1 && (c1 == c2) && count < len);
|
|
|
|
return c1 - c2;
|
|
}
|
|
|
|
|
|
int FMOD_stricmpW( const short *string1, const short *string2 )
|
|
{
|
|
register short c1, c2;
|
|
do
|
|
{
|
|
c1 = FMOD_tolowerW(*string1++);
|
|
c2 = FMOD_tolowerW(*string2++);
|
|
} while ( c1 && (c1 == c2) );
|
|
|
|
return c1 - c2;
|
|
}
|
|
|
|
int FMOD_strnicmpW( const short *string1, const short *string2, int len )
|
|
{
|
|
register short c1, c2;
|
|
int count=0;
|
|
do
|
|
{
|
|
c1 = FMOD_tolowerW(*string1++);
|
|
c2 = FMOD_tolowerW(*string2++);
|
|
count++;
|
|
} while ( c1 && (c1 == c2) && count < len);
|
|
|
|
return c1 - c2;
|
|
}
|
|
|
|
short * FMOD_strstrW(const short * s1,const short * s2)
|
|
{
|
|
int l1, l2;
|
|
|
|
l2 = FMOD_strlenW(s2);
|
|
|
|
if (!l2)
|
|
{
|
|
return (short *) s1;
|
|
}
|
|
|
|
l1 = FMOD_strlenW(s1);
|
|
|
|
while (l1 >= l2)
|
|
{
|
|
l1--;
|
|
|
|
if (!FMOD_memcmp(s1,s2,l2)) return (short *) s1;
|
|
|
|
s1++;
|
|
}
|
|
return (short *)0;
|
|
}
|
|
|
|
short *FMOD_strdupW(const short * src)
|
|
{
|
|
short *ret = 0;
|
|
|
|
ret = (short *)FMOD_Memory_Alloc(FMOD_strlenW(src) + 2);
|
|
if (ret)
|
|
{
|
|
FMOD_strcpyW(ret, src);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
|
|
short *FMOD_eatwhiteW(const short *string)
|
|
{
|
|
for (;*string && FMOD_isspaceW(*string);string++) ;
|
|
|
|
return (short *)string;
|
|
}
|
|
|
|
|
|
/*
|
|
AJS This only handles decimal integers. Feel free to extend it if you need to
|
|
*/
|
|
int FMOD_atoiW(const short *s)
|
|
{
|
|
if (!s)
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
int val = 0;
|
|
const short *p = s;
|
|
|
|
for (; *p; p++) ;
|
|
|
|
p--;
|
|
for (int i=1; p >= s; p--, i *= 10)
|
|
{
|
|
val += ((*p - '0') * i);
|
|
}
|
|
|
|
return val;
|
|
}
|
|
|
|
|
|
char *FMOD_wtoa(short *s)
|
|
{
|
|
if (!s)
|
|
{
|
|
return NULL;
|
|
}
|
|
|
|
char *from = (char *)s;
|
|
char *to = (char *)s;
|
|
|
|
while (*from != '\0')
|
|
{
|
|
*to = *from;
|
|
to += 1;
|
|
from += 2;
|
|
}
|
|
*to = 0;
|
|
|
|
return (char *)s;
|
|
}
|