--- np2/common/milstr.c 2003/11/21 06:51:10 1.4 +++ np2/common/milstr.c 2004/06/20 01:03:04 1.8 @@ -5,6 +5,11 @@ // ---- ANK #if defined(SUPPORT_ANK) +int milank_charsize(const char *str) { + + return((str[0] != '\0')?1:0); +} + int milank_cmp(const char *str, const char *cmp) { int s; @@ -78,12 +83,36 @@ void milank_ncat(char *dst, const char * dst[i] = '\0'; } } + +char *milank_chr(const char *str, int c) { + + int s; + + if (str) { + do { + s = *str; + if (s == c) { + return((char *)str); + } + str++; + } while(s); + } + return(NULL); +} #endif // ---- Shift-JIS #if defined(SUPPORT_SJIS) +int milsjis_charsize(const char *str) { + + int pos; + + pos = ((((str[0] ^ 0x20) - 0xa1) & 0xff) < 0x3c)?1:0; + return((str[pos] != '\0')?(pos+1):0); +} + int milsjis_cmp(const char *str, const char *cmp) { int s; @@ -212,12 +241,40 @@ void milsjis_ncat(char *dst, const char dst[i] = '\0'; } } + +char *milsjis_chr(const char *str, int c) { + + int s; + + if (str) { + do { + s = *str; + if (s == c) { + return((char *)str); + } + if ((((s ^ 0x20) - 0xa1) & 0xff) < 0x3c) { + str++; + s = *str; + } + str++; + } while(s); + } + return(NULL); +} #endif // ---- EUC -#if defined(SUPPORT_EUC) +#if defined(SUPPORT_EUC) // あれ 半角カナ忘れてるぞ? +int mileuc_charsize(const char *str) { + + int pos; + + pos = (((str[0] - 0xa1) & 0xff) < 0x5d)?1:0; + return((str[pos] != '\0')?(pos+1):0); +} + int mileuc_cmp(const char *str, const char *cmp) { int s; @@ -346,6 +403,159 @@ void mileuc_ncat(char *dst, const char * dst[i] = '\0'; } } + +char *mileuc_chr(const char *str, int c) { + + int s; + + if (str) { + do { + s = *str; + if (s == c) { + return((char *)str); + } + if (((s - 0xa1) & 0xff) < 0x5d) { + str++; + s = *str; + } + str++; + } while(s); + } + return(NULL); +} +#endif + + +// ---- UTF8 + +#if defined(SUPPORT_UTF8) +int milutf8_charsize(const char *str) { + + if (str[0] == '\0') { + return(0); + } + else if (!(str[0] & 0x80)) { + return(1); + } + else if ((src[0] & 0xe0) == 0xc0) { + if ((src[1] & 0xc0) == 0x80) { + return(2); + } + } + else if ((src[0] & 0xf0) == 0xe0) { + if (((src[1] & 0xc0) == 0x80) || + ((src[2] & 0xc0) == 0x80)) { + return(3); + } + } + return(0); +} + +int milutf8_cmp(const char *str, const char *cmp) { + + int s; + int c; + + do { + s = (UINT8)*str++; + if (((s - 'a') & 0xff) < 26) { + s -= 0x20; + } + c = (BYTE)*cmp++; + if (((c - 'a') & 0xff) < 26) { + c -= 0x20; + } + if (s != c) { + return((s > c)?1:-1); + } + } while(s); + return(0); +} + +int milutf8_memcmp(const char *str, const char *cmp) { + + int s; + int c; + + do { + c = (UINT8)*cmp++; + if (c == 0) { + return(0); + } + if (((c - 'a') & 0xff) < 26) { + c -= 0x20; + } + s = (UINT8)*str++; + if (((s - 'a') & 0xff) < 26) { + s -= 0x20; + } + } while(s == c); + return((s > c)?1:-1); +} + +int milutf8_kanji1st(const char *str, int pos) { + + return(((str[pos] & 0xc0) >= 0xc0)?1:0); +} + +int milutf8_kanji2nd(const char *str, int pos) { + + return(((str[pos] & 0xc0) == 0x80)?1:0); +} + +void milutf8_ncpy(char *dst, const char *src, int maxlen) { + + int i; + + if (maxlen > 0) { + maxlen--; + for (i=0; i 0) { + maxlen--; + for (i=0; i c)?1:-1); } +char *milstr_nextword(const char *str) { + + if (str) { + while(!(((*str) - 1) & 0xe0)) { + str++; + } + } + return((char *)str); +} + int milstr_getarg(char *str, char *arg[], int maxarg) { int ret = 0; @@ -477,3 +697,15 @@ long milstr_solveINT(const char *str) { return(ret * s); } +char *milstr_list(const char *lststr, UINT pos) { + + if (lststr) { + while(pos) { + pos--; + while(*lststr++ != '\0') { + } + } + } + return((char *)lststr); +} +