java.h
Upload User: yingmei828
Upload Date: 2007-01-01
Package Size: 1646k
Code Size: 1k
Development Platform:

Unix_Linux

  1. /*
  2.  * JAVA
  3.  * This is ISO 8859-1 with uXXXX escape sequences, denoting Unicode characters.
  4.  */
  5. static int
  6. java_mbtowc (conv_t conv, wchar_t *pwc, const unsigned char *s, int n)
  7. {
  8.   unsigned char c;
  9.   wchar_t wc;
  10.   int i;
  11.   c = s[0];
  12.   if (c != '\') {
  13.     *pwc = c;
  14.     return 1;
  15.   }
  16.   if (n < 2)
  17.     return RET_TOOFEW(0);
  18.   if (s[1] != 'u')
  19.     goto simply_backslash;
  20.   wc = 0;
  21.   for (i = 2; i < 6; i++) {
  22.     if (n <= i)
  23.       return RET_TOOFEW(0);
  24.     c = s[i];
  25.     if (c >= '0' && c <= '9')
  26.       c -= '0';
  27.     else if (c >= 'A' && c <= 'Z')
  28.       c -= 'A'-10;
  29.     else if (c >= 'a' && c <= 'z')
  30.       c -= 'a'-10;
  31.     else
  32.       goto simply_backslash;
  33.     wc |= (wchar_t) c << (4 * (5-i));
  34.   }
  35.   *pwc = wc;
  36.   return 6;
  37. simply_backslash:
  38.   *pwc = '\';
  39.   return 1;
  40. }
  41. static int
  42. java_wctomb (conv_t conv, unsigned char *r, wchar_t wc, int n)
  43. {
  44.   if (wc < 0x80) {
  45.     *r = wc;
  46.     return 1;
  47.   } else {
  48.     if (n >= 6) {
  49.       unsigned int i;
  50.       r[0] = '\';
  51.       r[1] = 'u';
  52.       i = (wc >> 12) & 0x0f; r[2] = (i < 10 ? '0'+i : 'a'-10+i);
  53.       i = (wc >> 8) & 0x0f;  r[3] = (i < 10 ? '0'+i : 'a'-10+i);
  54.       i = (wc >> 4) & 0x0f;  r[4] = (i < 10 ? '0'+i : 'a'-10+i);
  55.       i = wc & 0x0f;         r[5] = (i < 10 ? '0'+i : 'a'-10+i);
  56.       return 6;
  57.     } else
  58.       return RET_TOOSMALL;
  59.   }
  60. }