home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1997 May / Pcwk0597.iso / sybase / starbuck / h.z / MBSTRING.H < prev    next >
C/C++ Source or Header  |  1996-07-24  |  14KB  |  298 lines

  1. /*
  2.  *  mbstring.h    Multi-Byte Character Set (MBCS) functions
  3.  *
  4.  *  Copyright by WATCOM International Corp. 1988-1996.  All rights reserved.
  5.  */
  6. #ifndef _MBSTRING_H_INCLUDED
  7. #define _MBSTRING_H_INCLUDED
  8. #ifdef __cplusplus
  9. extern "C" {
  10. #endif
  11.  
  12. #ifndef _COMDEF_H_INCLUDED
  13.  #include <_comdef.h>
  14. #endif
  15.  
  16. #ifndef _SIZE_T_DEFINED
  17. #define _SIZE_T_DEFINED
  18. #define _SIZE_T_DEFINED_
  19. typedef unsigned size_t;
  20. #endif
  21.  
  22. #ifndef _WCHAR_T_DEFINED
  23. #define _WCHAR_T_DEFINED
  24. #define _WCHAR_T_DEFINED_
  25. #ifdef __cplusplus
  26. typedef long char wchar_t;
  27. #else
  28. typedef unsigned short wchar_t;
  29. #endif
  30. #endif
  31.  
  32. #ifndef NULL
  33.  #if defined(__SMALL__) || defined(__MEDIUM__) || defined(__386__) || defined(__AXP__) || defined(__PPC__)
  34.   #define NULL   0
  35.  #else
  36.   #define NULL   0L
  37.  #endif
  38. #endif
  39.  
  40. #ifndef _NLSCMPERROR
  41.  #include <limits.h>
  42.  #define _NLSCMPERROR INT_MAX
  43. #endif
  44.  
  45. #ifndef MB_CUR_MAX
  46.     #define MB_CUR_MAX    2
  47. #endif
  48. #ifndef MB_LEN_MAX
  49.     #define MB_LEN_MAX    2
  50. #endif
  51.  
  52. _WCRTLINK extern unsigned char *_mbscpy( unsigned char *__s1, const unsigned char *__s2 );
  53. _WCRTLINK extern unsigned char *_mbsncpy( unsigned char *__s1, const unsigned char *__s2, size_t __n );
  54. _WCRTLINK extern unsigned char *_mbsnbcpy( unsigned char *__s1, const unsigned char *__s2, size_t __n );
  55. _WCRTLINK extern unsigned char *_mbscat( unsigned char *__s1, const unsigned char *__s2 );
  56. _WCRTLINK extern unsigned char *_mbsncat( unsigned char *__s1, const unsigned char *__s2, size_t __n );
  57. _WCRTLINK extern unsigned char *_mbsnbcat( unsigned char *__s1, const unsigned char *__s2, size_t __n );
  58. _WCRTLINK extern unsigned char *_mbsdup( unsigned char *__src );
  59.  
  60. _WCRTLINK extern unsigned char *_mbschr( const unsigned char *__s, unsigned int __ch );
  61. _WCRTLINK extern unsigned char *_mbsrchr( const unsigned char *__s, unsigned int __ch );
  62. _WCRTLINK extern unsigned char *_mbsstr( const unsigned char *__s1, const unsigned char *__s2 );
  63. _WCRTLINK extern unsigned char *_mbspbrk( const unsigned char *__s, const unsigned char *__charset );
  64. _WCRTLINK extern unsigned char *_mbstok( unsigned char *__s, const unsigned char *__delim );
  65.  
  66. _WCRTLINK extern size_t _mbsspn( const unsigned char *__s, const unsigned char *__charset );
  67. _WCRTLINK extern size_t _mbscspn( const unsigned char *__s, const unsigned char *__charset );
  68. _WCRTLINK extern size_t _mbslen( const unsigned char *__s );
  69.  
  70. _WCRTLINK extern unsigned char *_mbsset( unsigned char *__s, unsigned int __ch );
  71. _WCRTLINK extern unsigned char *_mbsnset( unsigned char *__s, unsigned int __ch, size_t __n );
  72. _WCRTLINK extern unsigned char *_mbsnbset( unsigned char *__s, unsigned int __ch, size_t __n );
  73. _WCRTLINK extern unsigned char *_mbsrev( unsigned char *__s );
  74.  
  75. _WCRTLINK extern int _mbscmp( const unsigned char *__s1, const unsigned char *__s2 );
  76. _WCRTLINK extern int _mbsicmp( const unsigned char *__s1, const unsigned char *__s2 );
  77. _WCRTLINK extern int _mbsncmp( const unsigned char *__s1, const unsigned char *__s2, size_t __n );
  78. _WCRTLINK extern int _mbsnicmp( const unsigned char *__s1, const unsigned char *__s2, size_t __n );
  79. _WCRTLINK extern int _mbsnbcmp( const unsigned char *__s1, const unsigned char *__s2, size_t __n );
  80. _WCRTLINK extern int _mbsnbicmp( const unsigned char *__s1, const unsigned char *__s2, size_t __n );
  81. _WCRTLINK extern int _mbcicmp( const unsigned char *__c1, const unsigned char *__c2 );
  82.  
  83. _WCRTLINK extern unsigned char *_mbsdec( const unsigned char *__s, const unsigned char *__ch );
  84. _WCRTLINK extern unsigned char *_mbsinc( const unsigned char *__s );
  85. _WCRTLINK extern void _mbccpy( unsigned char *__dest, const unsigned char *__ch );
  86. _WCRTLINK extern int _mbccmp( const unsigned char *__s1, const unsigned char *__s2 );
  87. _WCRTLINK extern size_t _mbclen( const unsigned char *__ch );
  88. _WCRTLINK extern int _mbterm( const unsigned char *__ch );
  89.  
  90. _WCRTLINK extern size_t _mbsnbcnt( const unsigned char *__s, size_t __n );
  91. _WCRTLINK extern size_t _mbsnccnt( const unsigned char *__s, size_t __n );
  92. _WCRTLINK extern unsigned char *_mbsninc( const unsigned char *__s, size_t __count );
  93. _WCRTLINK extern unsigned char *_mbsspnp( const unsigned char *__s, const unsigned char *__charset );
  94.  
  95. _WCRTLINK extern unsigned char *_mbslwr( unsigned char *__s );
  96. _WCRTLINK extern unsigned char *_mbsupr( unsigned char *__s );
  97.  
  98. _WCRTLINK extern int wctomb( char *__s, wchar_t __wch );
  99. _WCRTLINK extern size_t wcstombs( char *__s, const wchar_t *__pwcs, size_t __n );
  100. _WCRTLINK extern int mbtowc( wchar_t *__pwc, const char *__s, size_t __n );
  101. _WCRTLINK extern size_t mbstowcs( wchar_t *__pwcs, const char *__s, size_t __n );
  102. _WCRTLINK extern int mblen( const char *__ch, size_t __n );
  103.  
  104. _WCRTLINK extern unsigned char *_mbvtop( unsigned int __ch, unsigned char *__addr );
  105. _WCRTLINK extern unsigned int _mbsnextc( const unsigned char *__s );
  106.  
  107.  
  108. /* Far versions */
  109.  
  110. #if !defined(NO_EXT_KEYS) /* extensions enabled */
  111.  
  112. _WCRTLINK extern unsigned char _WCFAR *_fmbscpy( unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2 );
  113. _WCRTLINK extern unsigned char _WCFAR *_fmbsncpy( unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2, size_t __n );
  114. _WCRTLINK extern unsigned char _WCFAR *_fmbsnbcpy( unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2, size_t __n );
  115. _WCRTLINK extern unsigned char _WCFAR *_fmbscat( unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2 );
  116. _WCRTLINK extern unsigned char _WCFAR *_fmbsncat( unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2, size_t __n );
  117. _WCRTLINK extern unsigned char _WCFAR *_fmbsnbcat( unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2, size_t __n );
  118. _WCRTLINK extern unsigned char _WCFAR *_fmbsdup( unsigned char _WCFAR *__src );
  119.  
  120. _WCRTLINK extern unsigned char _WCFAR *_fmbschr( const unsigned char _WCFAR *__s, unsigned int __ch );
  121. _WCRTLINK extern unsigned char _WCFAR *_fmbsrchr( const unsigned char _WCFAR *__s, unsigned int __ch );
  122. _WCRTLINK extern unsigned char _WCFAR *_fmbsstr( const unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2 );
  123. _WCRTLINK extern unsigned char _WCFAR *_fmbspbrk( const unsigned char _WCFAR *__s, const unsigned char _WCFAR *__charset );
  124. _WCRTLINK extern unsigned char _WCFAR *_fmbstok( unsigned char _WCFAR *__s, const unsigned char _WCFAR *__delim );
  125.  
  126. _WCRTLINK extern size_t _fmbsspn( const unsigned char _WCFAR *__s, const unsigned char _WCFAR *__charset );
  127. _WCRTLINK extern size_t _fmbscspn( const unsigned char _WCFAR *__s, const unsigned char _WCFAR *__charset );
  128. _WCRTLINK extern size_t _fmbslen( const unsigned char _WCFAR *__s );
  129.  
  130. _WCRTLINK extern unsigned char _WCFAR *_fmbsset( unsigned char _WCFAR *__s, unsigned int __ch );
  131. _WCRTLINK extern unsigned char _WCFAR *_fmbsnset( unsigned char _WCFAR *__s, unsigned int __ch, size_t __n );
  132. _WCRTLINK extern unsigned char _WCFAR *_fmbsnbset( unsigned char _WCFAR *__s, unsigned int __ch, size_t __n );
  133. _WCRTLINK extern unsigned char _WCFAR *_fmbsrev( unsigned char _WCFAR *__s );
  134.  
  135. _WCRTLINK extern int _fmbscmp( const unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2 );
  136. _WCRTLINK extern int _fmbsicmp( const unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2 );
  137. _WCRTLINK extern int _fmbsncmp( const unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2, size_t __n );
  138. _WCRTLINK extern int _fmbsnicmp( const unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2, size_t __n );
  139. _WCRTLINK extern int _fmbsnbcmp( const unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2, size_t __n );
  140. _WCRTLINK extern int _fmbsnbicmp( const unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2, size_t __n );
  141. _WCRTLINK extern int _fmbcicmp( const unsigned char _WCFAR *__c1, const unsigned char _WCFAR *__c2 );
  142.  
  143. _WCRTLINK extern unsigned char _WCFAR *_fmbsdec( const unsigned char _WCFAR *__s, const unsigned char _WCFAR *__ch );
  144. _WCRTLINK extern unsigned char _WCFAR *_fmbsinc( const unsigned char _WCFAR *__s );
  145. _WCRTLINK extern void _fmbccpy( unsigned char _WCFAR *__dest, const unsigned char _WCFAR *__ch );
  146. _WCRTLINK extern int _fmbccmp( const unsigned char _WCFAR *__s1, const unsigned char _WCFAR *__s2 );
  147. _WCRTLINK extern size_t _fmbclen( const unsigned char _WCFAR *__ch );
  148. _WCRTLINK extern int _fmbterm( const unsigned char _WCFAR *__ch );
  149.  
  150. _WCRTLINK extern size_t _fmbsnbcnt( const unsigned char _WCFAR *__s, size_t __n );
  151. _WCRTLINK extern size_t _fmbsnccnt( const unsigned char _WCFAR *__s, size_t __n );
  152. _WCRTLINK extern unsigned char _WCFAR *_fmbsninc( const unsigned char _WCFAR *__s, size_t __count );
  153. _WCRTLINK extern unsigned char _WCFAR *_fmbsspnp( const unsigned char _WCFAR *__s, const unsigned char _WCFAR *__charset );
  154.  
  155. _WCRTLINK extern unsigned char _WCFAR *_fmbslwr( unsigned char _WCFAR *__s );
  156. _WCRTLINK extern unsigned char _WCFAR *_fmbsupr( unsigned char _WCFAR *__s );
  157.  
  158. _WCRTLINK extern int _fwctomb( char _WCFAR *__s, wchar_t __wch );
  159. _WCRTLINK extern size_t _fwcstombs( char _WCFAR *__s, const wchar_t _WCFAR *__pwcs, size_t __n );
  160. _WCRTLINK extern int _fmbtowc( wchar_t _WCFAR *__pwc, const char _WCFAR *__s, size_t __n );
  161. _WCRTLINK extern size_t _fmbstowcs( wchar_t _WCFAR *__pwcs, const char _WCFAR *__s, size_t __n );
  162. _WCRTLINK extern int _fmblen( const char _WCFAR *__ch, size_t __n );
  163.  
  164. _WCRTLINK extern unsigned char _WCFAR *_fmbvtop( unsigned int __ch, unsigned char _WCFAR *__addr );
  165. _WCRTLINK extern unsigned int _fmbsnextc( const unsigned char _WCFAR *__s );
  166.  
  167. #endif
  168.  
  169.  
  170. /* Character classification functions */
  171. _WCRTLINK extern int (_ismbblead)( unsigned int __ch );
  172. _WCRTLINK extern int _ismbbtrail( unsigned int __ch );
  173.  
  174. _WCRTLINK extern int _ismbcalnum( unsigned int __ch );
  175. _WCRTLINK extern int _ismbcalpha( unsigned int __ch );
  176. _WCRTLINK extern int _ismbccntrl( unsigned int __ch );
  177. _WCRTLINK extern int _ismbcdigit( unsigned int __ch );
  178. _WCRTLINK extern int _ismbcgraph( unsigned int __ch );
  179. _WCRTLINK extern int _ismbclegal( unsigned int __ch );
  180. _WCRTLINK extern int _ismbclower( unsigned int __ch );
  181. _WCRTLINK extern int _ismbcprint( unsigned int __ch );
  182. _WCRTLINK extern int _ismbcpunct( unsigned int __ch );
  183. _WCRTLINK extern int _ismbcspace( unsigned int __ch );
  184. _WCRTLINK extern int _ismbcupper( unsigned int __ch );
  185. _WCRTLINK extern int _ismbcxdigit( unsigned int __ch );
  186.  
  187.  
  188. /*
  189.  * Character conversion routines applicable to all code pages.
  190.  */
  191. _WCRTLINK extern unsigned int    _mbbtombc( unsigned int __ch );
  192. _WCRTLINK extern unsigned int    _mbctombb( unsigned int __ch );
  193.  
  194. _WCRTLINK extern unsigned int    _mbctolower( unsigned int __ch );
  195. _WCRTLINK extern unsigned int    _mbctoupper( unsigned int __ch );
  196.  
  197.  
  198. /*
  199.  * Character conversion routines specific to code page 932 (Japanese).
  200.  */
  201. _WCRTLINK extern unsigned int    _mbdhantozen( unsigned int __ch );
  202. _WCRTLINK extern unsigned int    _mbdzentohan( unsigned int __ch );
  203.  
  204. _WCRTLINK extern unsigned int    _mbdtolower( unsigned int __ch );
  205. _WCRTLINK extern unsigned int    _mbdtoupper( unsigned int __ch );
  206.  
  207.  
  208. /* Global data */
  209. #if defined(__SW_BR) || defined(_RTDLL) 
  210.  #define __MBCSIsTable __MBCSIsTable_br
  211.  #define __IsDBCS      __IsDBCS_br
  212. #endif
  213. _WCRTLINK extern unsigned char    __MBCSIsTable[257];
  214. _WCRTLINK extern int        __IsDBCS;
  215.  
  216.  
  217. /* Flag used in __MBCSIsTable table */
  218. #ifndef _MB_TABLE_FLAGS_DEFINED
  219.     #define _MB_LEAD        0x01
  220.     #define _MB_TABLE_FLAGS_DEFINED
  221. #endif
  222.  
  223.  
  224. /* Since only "C" locale supported, we can remap locale compare functions */
  225. #define _mbscoll        _mbscmp
  226. #define _mbsicoll       _mbsicmp
  227. #define _mbsncoll       _mbsncmp
  228. #define _mbsnbcoll      _mbsnbcmp
  229. #define _mbsnicoll      _mbsnicmp
  230. #define _mbsnbicoll    _mbsnbicmp
  231.  
  232.  
  233. /* _setmbcp parameter defines */
  234. #define _MB_CP_SBCS     0
  235. #define _MB_CP_OEM      (-2)
  236. #define _MB_CP_ANSI     (-3)
  237.  
  238. /* MB control routines */
  239. _WCRTLINK extern int _setmbcp( int );
  240. _WCRTLINK extern int _getmbcp( void );
  241.  
  242.  
  243. /* Implement small functions as macros for speed */
  244. #ifndef _ismbblead
  245. #define _ismbblead(__b)    ( __IsDBCS    \
  246.             ? ( __MBCSIsTable[(unsigned char)(__b)+1] & _MB_LEAD ) \
  247.             : ( 0 ) )
  248. #define _mbislead(__b)    _ismbblead(__b)
  249. #endif
  250.  
  251.  
  252. /**
  253.  * types used by LIFEBOAT code
  254.  **/
  255. typedef unsigned char    _UCHAR;        /* Character is unsigned type for DBCS */
  256. typedef _UCHAR *    _USTRING;   /* String is unsigned type for DBCS */
  257. typedef _UCHAR _WCFAR *    _FUSTRING;  /* Far string is unsigned type for DBCS */
  258. typedef unsigned int    DBCODE;        /* è┐ÄÜâRü[âh (2-byte code) */
  259.  
  260. /**
  261.  * character byte types 
  262.  **/
  263. #define _MBC_SINGLE    0    /* valid single-byte char */
  264. #define _MBC_LEAD    1    /* Kanji 1st byte (lead byte) */
  265. #define _MBC_TRAIL    2    /* Kanji 2nd byte (trailing byte) */
  266. #define _MBC_ILLEGAL    (-1)    /* illegal character byte */
  267.  
  268. /**
  269.  * prototypes used by LIFEBOAT code
  270.  **/
  271. _WCRTLINK extern unsigned char *_mbgetcode( unsigned char *, unsigned int *);
  272. _WCRTLINK extern unsigned char _WCFAR *_fmbgetcode( unsigned char _WCFAR *, unsigned int *);
  273. _WCRTLINK extern unsigned char *_mbputchar( unsigned char *, unsigned int );
  274. _WCRTLINK extern unsigned char _WCFAR *_fmbputchar( unsigned char _WCFAR *, unsigned int );
  275. _WCRTLINK extern int _mbsbtype( const unsigned char *, int );
  276. _WCRTLINK extern int _fmbsbtype( const unsigned char _WCFAR *, int );
  277. _WCRTLINK extern int _mbbtype( unsigned char, int );
  278.  
  279. /**
  280.  * distinguish and translate Japanese DBCS
  281.  **/
  282. _WCRTLINK extern int _ismbchira( unsigned int );
  283. _WCRTLINK extern int _ismbckata( unsigned int );
  284. _WCRTLINK extern int _ismbcsymbol( unsigned int );
  285. _WCRTLINK extern int _ismbcl0( unsigned int );
  286. _WCRTLINK extern int _ismbcl1( unsigned int );
  287. _WCRTLINK extern int _ismbcl2( unsigned int ); 
  288. _WCRTLINK extern unsigned int _mbcjistojms( unsigned int );
  289. _WCRTLINK extern unsigned int _mbcjmstojis( unsigned int );
  290. _WCRTLINK extern unsigned int _mbctohira( unsigned int );
  291. _WCRTLINK extern unsigned int _mbctokata( unsigned int );
  292.  
  293.  
  294. #ifdef __cplusplus
  295. };
  296. #endif
  297. #endif
  298.