ReactOS  0.4.15-dev-985-gd905dd5
mbbtype.c
Go to the documentation of this file.
1 /*
2  * COPYRIGHT: See COPYING in the top level directory
3  * PROJECT: ReactOS system libraries
4  * FILE: lib/sdk/crt/mbstring/mbbtype.c
5  * PURPOSE: Determines the type of a multibyte character
6  * PROGRAMERS:
7  * Copyright 1999 Ariadne
8  * Copyright 1999 Alexandre Julliard
9  * Copyright 2000 Jon Griffths
10  *
11  */
12 
13 #include <precomp.h>
14 
15 #include <mbstring.h>
16 #include <mbctype.h>
17 
18 /*
19  * @implemented
20  */
21 int _mbbtype(unsigned char c , int type)
22 {
23  if ( type == 1 ) {
24  if ((c >= 0x40 && c <= 0x7e ) || (c >= 0x80 && c <= 0xfc ) )
25  {
26  return _MBC_TRAIL;
27  }
28  else if (( c >= 0x20 && c <= 0x7E ) || ( c >= 0xA1 && c <= 0xDF ) ||
29  ( c >= 0x81 && c <= 0x9F ) || ( c >= 0xE0 && c <= 0xFC ) )
30  return _MBC_ILLEGAL;
31  else
32  return 0;
33  } else {
34  if (( c >= 0x20 && c <= 0x7E ) || ( c >= 0xA1 && c <= 0xDF )) {
35  return _MBC_SINGLE;
36  }
37  else if ( (c >= 0x81 && c <= 0x9F ) || ( c >= 0xE0 && c <= 0xFC) )
38  return _MBC_LEAD;
39  else if (( c >= 0x20 && c <= 0x7E ) || ( c >= 0xA1 && c <= 0xDF ) ||
40  ( c >= 0x81 && c <= 0x9F ) || ( c >= 0xE0 && c <= 0xFC ) )
41  return _MBC_ILLEGAL;
42  else
43  return 0;
44  }
45  return 0;
46 }
47 
48 /*
49  * @implemented
50  */
51 int _mbsbtype( const unsigned char *str, size_t n )
52 {
53  int lead = 0;
54  const unsigned char *end = str + n;
55 
56  /* Lead bytes can also be trail bytes so we need to analyse the string.
57  * Also we must return _MBC_ILLEGAL for chars past the end of the string
58  */
59  while (str < end) /* Note: we skip the last byte - will check after the loop */
60  {
61  if (!*str)
62  return _MBC_ILLEGAL;
63  lead = !lead && _ismbblead(*str);
64  str++;
65  }
66 
67  if (lead)
68  if (_ismbbtrail(*str))
69  return _MBC_TRAIL;
70  else
71  return _MBC_ILLEGAL;
72  else
73  if (_ismbblead(*str))
74  return _MBC_LEAD;
75  else
76  return _MBC_SINGLE;
77 }
_Check_return_ _CRTIMP int __cdecl _ismbbtrail(_In_ unsigned int _C)
int _mbbtype(unsigned char c, int type)
Definition: mbbtype.c:21
#define _MBC_ILLEGAL
Definition: msvcrt.h:826
GLdouble n
Definition: glext.h:7729
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLuint GLuint end
Definition: gl.h:1545
const WCHAR * str
#define _MBC_SINGLE
Definition: msvcrt.h:823
int _mbsbtype(const unsigned char *str, size_t n)
Definition: mbbtype.c:51
const GLubyte * c
Definition: glext.h:8905
#define _MBC_TRAIL
Definition: msvcrt.h:825
int __cdecl _ismbblead(unsigned int)
Definition: ismblead.c:20
#define _MBC_LEAD
Definition: msvcrt.h:824