xref: /reactos/sdk/lib/crt/mbstring/mbsicoll.c (revision 40462c92)
1 /*
2  * COPYRIGHT:   See COPYING in the top level directory
3  * PROJECT:     ReactOS system libraries
4  * FILE:        lib/sdk/crt/mbstring/mbsicoll.c
5  * PURPOSE:
6  * PROGRAMER:   Ariadne
7  * UPDATE HISTORY:
8  *              12/04/99: Created
9  */
10 #include <mbstring.h>
11 #include <mbctype.h>
12 #include <ctype.h>
13 
14 int colldif(unsigned short c1, unsigned short c2);
15 /*
16  * @implemented
17  */
18 int _mbsicoll(const unsigned char *str1, const unsigned char *str2)
19 {
20 	unsigned char *s1 = (unsigned char *)str1;
21 	unsigned char *s2 = (unsigned char *)str2;
22 
23 	unsigned short *short_s1, *short_s2;
24 
25 	int l1, l2;
26 
27 	while ( *s1 != 0 ) {
28 
29 		if (*s1 == 0)
30 			break;
31 
32 		l1 = _ismbblead(*s1);
33 		l2 = _ismbblead(*s2);
34 		if ( !l1 &&  !l2  ) {
35 
36 			if (toupper(*s1) != toupper(*s2))
37 				return colldif(*s1, *s2);
38 			else {
39 				s1 += 1;
40 				s2 += 1;
41 			}
42 		}
43 		else if ( l1 && l2 ){
44 			short_s1 = (unsigned short *)s1;
45 			short_s2 = (unsigned short *)s2;
46 			if ( _mbctoupper(*short_s1) != _mbctoupper(*short_s2 ))
47 				return colldif(*short_s1, *short_s2);
48 			else {
49 				s1 += 2;
50 				s2 += 2;
51 
52 			}
53 		}
54 		else
55 			return colldif(*s1, *s2);
56 	} ;
57 	return 0;
58 }
59