/* * STREXTRA.C * * Written on 30-Jul-90 by jim nutt. Changes on 10-Jul-94 by John Dennis, * Paul Edwards and Andrew Clarke. Released to the public domain. * * A few string handling routines for Msged. */ #include #include #include #include "strextra.h" void strdel(char *l, int x) { int i; i = strlen(l); if (x > i) { return; } x--; memmove(l + x, l + x + 1, i - x + 1); *(l + i) = 0; } /* strncmpi(...) -> strncmp(...), ignore case */ int strncmpi(const char *s, const char *t, size_t x) { long n; n = (long)x; while (n-- && tolower(*s) == tolower(*t)) { if (*s == '\0') { /* equal */ return 0; } s++; t++; } if (n < 0) { /* maximum hit, equal */ return 0; } /* fell through, not equal */ if (tolower(*s) > tolower(*t)) { return 1; } else { return -1; } } #if !defined(MSC) && !defined(UNIX) && !defined(_MSC_VER) int stricmp(const char *s, const char *t) { while (*s != '\0') { int rc; rc = tolower((unsigned char)*s) - tolower((unsigned char)*t); if (rc != 0) { return rc; } s++; t++; } if (*t != '\0') { return -tolower((unsigned char)*t); } return 0; } #endif #ifndef __IBMC__ #if !(defined(_MSC_VER) && (_MSC_VER >= 1200)) && !defined(UNIX) char *strdup(const char *s) { char *p; p = malloc(strlen(s) + 1); if (p != NULL) { strcpy(p, s); } return p; } #endif #endif #if !(defined(_MSC_VER) && (_MSC_VER >= 1200)) #ifndef __IBMC__ int memicmp(const void *s1, const void *s2, size_t n) #else int memicmp(void *s1, void *s2, size_t n) #endif { size_t x; int ret; for (x = 0; x < n; x++) { ret = (tolower((unsigned char)*(char *)s1) - tolower((unsigned char)*(char *)s2)); if (ret != 0) { return (ret); } } return 0; } char *strlwr(char *s) { char *p; p = s; while (*p != '\0') { *p = (char)tolower((unsigned char)*p); p++; } return s; } char *strupr(char *s) { char *p; p = s; while (*p != '\0') { *p = (char)toupper((unsigned char)*p); p++; } return s; } #endif #if !defined(PACIFIC) && !defined(__HIGHC__) const char *stristr(const char *s1, const char *s2) { const char *pptr, *sptr, *start; size_t slen, plen; start = s1; slen = strlen(s1); plen = strlen(s2); /* while string length not shorter than pattern length */ while (slen >= plen) { /* find start of pattern in string */ while (toupper(*start) != toupper(*s2)) { start++; slen--; /* if pattern longer than string */ if (slen < plen) { return NULL; } } sptr = start; pptr = s2; while (toupper(*sptr) == toupper(*pptr)) { sptr++; pptr++; /* if end of pattern then pattern was found */ if (*pptr == '\0') { return start; } } start++; slen--; } return NULL; } #endif