rem: utf16[j++] = 0xD8000 | ((v >> 10) & 0x3FF); utf16[j++] = 0xDC000 | (v & 0x3FF);
add: utf16[j++] = 0xD800 | ((v >> 10) & 0x3FF); utf16[j++] = 0xDC00 | (v & 0x3FF);
context: unsigned short *scheme_ucs4_to_utf16(const mzchar *text, int start, int end,				     unsigned short *buf, int bufsize,				     long *ulen, int term_size){  mzchar v;  int extra, i, j;  short *utf16;  /* Count characters that fall outside UCS-2: */  for (i = start, extra = 0; i < end; i++) {    if (text[i] > 0xFFFF)      extra++;  }  if ((end - start) + extra + term_size < bufsize)    utf16 = buf;  else    utf16 = (unsigned short *)scheme_malloc_atomic(sizeof(unsigned short) * ((end - start) + extra + term_size));  for (i = start, j = 0; i < end; i++) {    v = text[i];    if (v > 0xFFFF) {      utf16[j++] = 0xD8000 | ((v >> 10) & 0x3FF);      utf16[j++] = 0xDC000 | (v & 0x3FF);    } else      utf16[j++] = v;  }  *ulen = j;  return utf16;}