Пример #1
0
//
// Do a DOS-style wildcard pattern match.
//
static BOOL _DosPatternMatch(LPCSTR szPattern, LPCSTR szFile)
{
	register LPCSTR p, q;
	unsigned int mbc;

	p = szPattern;
	q = szFile;
	for (;;) {
	  //
	  // DOC BUG: _mbsnextc() returns the _current_ multi-byte char
	  //
	  switch (mbc = _mbsnextc(p), p = _mbsinc(p), mbc) {
		case '\0':
			goto done;
		case '?':
			if (*q == '\0')
				return FALSE;
			q = _mbsinc(q);
			break;
		case '*':
			//
			// DOC BUG: _mbsnextc() returns the _current_ multi-byte char
			//
			mbc = _mbsnextc(p);
			if (mbc != '?' && mbc != '*') {
				mbc = _mbctolower(mbc);
				while (_mbctolower(*q) != mbc) {
					if (*q == '\0') {
						return mbc == '\0' ? TRUE : FALSE;
					}
					q = _mbsinc(q);
				}
			}
			do {
				if (_DosPatternMatch(p, q)) // recurse
					return TRUE;
				mbc = _mbsnextc(q); // current char, not "next"
				q = _mbsinc(q);
			} while (mbc != '\0');
			return FALSE;
	    default:
			if (_mbctolower(*q) != _mbctolower(mbc)) {
				return FALSE;
			}
			q = _mbsinc(q);
			break;
	  }
	}
done:
	return (*q == '\0') ? TRUE : FALSE;
}
Пример #2
0
/*
 * @implemented
 */
unsigned char * _mbslwr(unsigned char *x)
{
    unsigned char *y=x;

    if (x == NULL)
    {
        return NULL;
    }

    while (*y) 
    {
        if (!_ismbblead(*y)) 
        {
            *y = tolower(*y);
            y++;
        } 
        else
        {
            *y = _mbctolower(*(unsigned short *)y);
            y++;
        }
    }
    return x;
}