--- np2/common/milstr.c 2003/10/16 17:57:09 1.1.1.1 +++ np2/common/milstr.c 2004/02/19 11:32:11 1.6 @@ -1,43 +1,140 @@ #include "compiler.h" -BOOL milstr_cmp(const char *str, const char *cmp) { + +// ---- ANK + +#if defined(SUPPORT_ANK) +int milank_cmp(const char *str, const char *cmp) { int s; int c; - while(1) { + do { + s = (BYTE)*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 milank_memcmp(const char *str, const char *cmp) { + + int s; + int c; + + do { + c = (BYTE)*cmp++; + if (c == 0) { + return(0); + } + if (((c - 'a') & 0xff) < 26) { + c -= 0x20; + } + s = (BYTE)*str++; + if (((s - 'a') & 0xff) < 26) { + s -= 0x20; + } + } while(s == c); + return((s > c)?1:-1); +} + +void milank_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); } -BOOL milstr_memcmp(const char *str, const char *cmp) { +int milsjis_memcmp(const char *str, const char *cmp) { int s; int c; @@ -45,98 +142,216 @@ BOOL milstr_memcmp(const char *str, cons do { c = (BYTE)*cmp++; if ((((c ^ 0x20) - 0xa1) & 0xff) < 0x3c) { - if (c != (BYTE)*str++) { + s = (BYTE)*str++; + if (c != s) { break; } c = (BYTE)*cmp++; s = (BYTE)*str++; } else if (c) { - if (((c - 'A') & 0xff) < 26) { - c |= 0x20; + if (((c - 'a') & 0xff) < 26) { + c &= ~0x20; } s = (BYTE)*str++; - if (((s - 'A') & 0xff) < 26) { - s |= 0x20; + if (((s - 'a') & 0xff) < 26) { + s &= ~0x20; } } else { return(0); } } while(s == c); - return(1); + return((s > c)?1:-1); } -BOOL milstr_extendcmp(const char *str, const char *cmp) { +int milsjis_kanji1st(const char *str, int pos) { - char c, s = '\0'; + int ret; - while(*cmp) { - while(*cmp) { - s = *cmp++; - if (!s) { - return(0); + ret = 0; + while((pos >= 0) && + ((((str[pos--] ^ 0x20) - 0xa1) & 0xff) < 0x3c)) { + ret ^= 1; + } + return(ret); +} + +int milsjis_kanji2nd(const char *str, int pos) { + + int ret = 0; + + while((pos > 0) && ((((str[--pos] ^ 0x20) - 0xa1) & 0xff) < 0x3c)) { + ret ^= 1; + } + return(ret); +} + +void milsjis_ncpy(char *dst, const char *src, int maxlen) { + + int i; + + if (maxlen > 0) { + maxlen--; + for (i=0; i= '0') && (s <= '9')) { + } + dst[i] = '\0'; + } +} + +void milsjis_ncat(char *dst, const char *src, int maxlen) { + + int i; + int j; + + if (maxlen > 0) { + maxlen--; + for (i=0; i= 'A') && (s <= 'Z')) { - break; + } + for (j=0; i 0) && (j > 0)) { + if (milsjis_kanji1st(dst, i-1)) { + i--; } } - while(1) { - c = *str++; - if (!c) { - return(1); + 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 ((c >= '0') && (c <= '9')) { - break; + if ((((s ^ 0x20) - 0xa1) & 0xff) < 0x3c) { + str++; + s = *str; } - c &= 0xdf; - if ((c >= 'A') && (c <= 'Z')) { - break; + str++; + } while(s); + } + return(NULL); +} +#endif + + +// ---- EUC + +#if defined(SUPPORT_EUC) +int mileuc_cmp(const char *str, const char *cmp) { + + int s; + int c; + + do { + s = (BYTE)*str++; + if (((s - 0xa1) & 0xff) < 0x5d) { + c = (BYTE)*cmp++; + if (s != c) { + goto mscp_err; + } + s = (BYTE)*str++; + c = (BYTE)*cmp++; + } + else { + if (((s - 'a') & 0xff) < 26) { + s -= 0x20; + } + c = (BYTE)*cmp++; + if (((c - 'a') & 0xff) < 26) { + c -= 0x20; } } - if (c != s) { - return(1); + if (s != c) { + goto mscp_err; } - } + } while(s); return(0); + +mscp_err: + return((s > c)?1:-1); } -int milstr_kanji1st(const char *str, int pos) { +int mileuc_memcmp(const char *str, const char *cmp) { + + int s; + int c; + + do { + c = (BYTE)*cmp++; + if (((c - 0xa1) & 0xff) < 0x5d) { + s = (BYTE)*str++; + if (c != s) { + break; + } + c = (BYTE)*cmp++; + s = (BYTE)*str++; + } + else if (c) { + if (((c - 'a') & 0xff) < 26) { + c -= 0x20; + } + s = (BYTE)*str++; + if (((s - 'a') & 0xff) < 26) { + s -= 0x20; + } + } + else { + return(0); + } + } while(s == c); + return((s > c)?1:-1); +} + +int mileuc_kanji1st(const char *str, int pos) { int ret; ret = 0; while((pos >= 0) && - ((((str[pos--] ^ 0x20) - 0xa1) & 0xff) < 0x3c)) { + (((str[pos--] - 0xa1) & 0xff) < 0x5d)) { ret ^= 1; } return(ret); } -int milstr_kanji2nd(const char *str, int pos) { +int mileuc_kanji2nd(const char *str, int pos) { int ret = 0; - while((pos) && ((((str[--pos] ^ 0x20) - 0xa1) & 0xff) < 0x3c)) { + while((pos > 0) && (((str[--pos] - 0xa1) & 0xff) < 0x5d)) { ret ^= 1; } return(ret); } -void milstr_ncpy(char *dst, const char *src, int maxlen) { +void mileuc_ncpy(char *dst, const char *src, int maxlen) { int i; - if (maxlen--) { + if (maxlen > 0) { + maxlen--; for (i=0; i 0) { + maxlen--; for (i=0; i 0) && (j > 0)) { + if (mileuc_kanji1st(dst, i-1)) { i--; } } @@ -165,6 +383,76 @@ void milstr_ncat(char *dst, const char * } } +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 + + +// ---- other + +int milstr_extendcmp(const char *str, const char *cmp) { + + int c; + int s; + + do { + while(1) { + c = (BYTE)*cmp++; + if (!c) { + return(0); + } + if (((c - '0') & 0xff) < 10) { + break; + } + c |= 0x20; + if (((c - 'a') & 0xff) < 26) { + break; + } + } + while(1) { + s = *str++; + if (!s) { + break; + } + if (((s - '0') & 0xff) < 10) { + break; + } + s |= 0x20; + if (((s - 'a') & 0xff) < 26) { + break; + } + } + } while(s == c); + return((s > 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; @@ -255,3 +543,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); +} +