Added binary and unicode file i/o support to msvcrt.
[reactos.git] / reactos / lib / crtdll / mbstring / mbscoll.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: lib/crtdll/mbstring/mbscoll.c
5 * PURPOSE:
6 * PROGRAMER: Boudewijn Dekker
7 * UPDATE HISTORY:
8 * 12/04/99: Created
9 */
10
11 #include <msvcrt/mbstring.h>
12
13 int colldif(unsigned short c1, unsigned short c2);
14
15 int _mbscoll(const unsigned char *str1, const unsigned char *str2)
16 {
17 unsigned char *s1 = (unsigned char *)str1;
18 unsigned char *s2 = (unsigned char *)str2;
19
20 unsigned short *short_s1, *short_s2;
21
22 int l1, l2;
23
24 while ( *s1 != 0 ) {
25
26 if (*s1 == 0)
27 break;
28
29 l1 = _ismbblead(*s1);
30 l2 = _ismbblead(*s2);
31 if ( !l1 && !l2 ) {
32
33 if (*s1 != *s2)
34 return colldif(*s1, *s2);
35 else {
36 s1 += 1;
37 s2 += 1;
38 }
39 }
40 else if ( l1 && l2 ){
41 short_s1 = (unsigned short *)s1;
42 short_s2 = (unsigned short *)s2;
43 if ( *short_s1 != *short_s2 )
44 return colldif(*short_s1, *short_s2);
45 else {
46 s1 += 2;
47 s2 += 2;
48
49 }
50 }
51 else
52 return colldif(*s1, *s2);
53 } ;
54 return 0;
55 }
56
57 int _mbsbcoll(const unsigned char *str1, const unsigned char *str2)
58 {
59 unsigned char *s1 = (unsigned char *)str1;
60 unsigned char *s2 = (unsigned char *)str2;
61
62 unsigned short *short_s1, *short_s2;
63
64 int l1, l2;
65
66
67 while ( *s1 != 0 ) {
68
69
70 l1 = _ismbblead(*s1);
71 l2 = _ismbblead(*s2);
72 if ( !l1 && !l2 ) {
73
74 if (*s1 != *s2)
75 return colldif(*s1, *s2);
76 else {
77 s1 += 1;
78 s2 += 1;
79 }
80 }
81 else if ( l1 && l2 ){
82 short_s1 = (unsigned short *)s1;
83 short_s2 = (unsigned short *)s2;
84 if ( *short_s1 != *short_s2 )
85 return colldif(*short_s1, *short_s2);
86 else {
87 s1 += 2;
88 s2 += 2;
89 }
90 }
91 else
92 return colldif(*s1, *s2);
93 } ;
94 return 0;
95 }