FOX/ObjCryst++  1.10.X (development)
ci_string.cpp
1 #include "ci_string.h"
7 int strnicmp(const char *s1, const char *s2, int len)
8 {
9  unsigned char c1, c2;
10  while (len)
11  {
12  c1 = *s1; c2 = *s2;
13  s1++; s2++;
14  if (!c1) return c2 ? -1 : 0;
15  if (!c2) return 1;
16  if (c1 != c2)
17  {
18  c1 = tolower(c1);
19  c2 = tolower(c2);
20  if (c1 != c2) return c1 < c2 ? -1 : 1;
21  }
22  len--;
23  }
24  return 0;
25 }
26 
27 bool ci_char_traits::eq( char c1, char c2 )
28 {return tolower(c1) == tolower(c2);}
29 
30 bool ci_char_traits::ne( char c1, char c2 )
31  {return tolower(c1) != tolower(c2);}
32 
33 bool ci_char_traits::lt( char c1, char c2 )
34  {return tolower(c1) < tolower(c2);}
35 
36 int ci_char_traits::compare(const char* s1,const char* s2,size_t n )
37 {
38  #ifdef _MSC_VER
39  return _strnicmp(s1, s2, n);
40  #else
41  return strnicmp(s1, s2, n);
42  #endif
43 }
44 
45 const char* ci_char_traits::find( const char* s, int n, char a )
46 {
47  while( n-- > 0 && tolower(*s) != tolower(a) ) ++s;
48  return s;
49 }