Example #1
0
void unistrcpy(unichar *to, const unichar *from)
{
	int len = unistrlen(from);
	int i;
	for (i = 0; i < len; ++i) to[i] = from[i];

	unistrlen(to) = len;
}
Example #2
0
unichar *unistrcat(const unichar *str1, const unichar *str2)
{
	int len = unistrlen(str1) + unistrlen(str2);

	unichar *r = mm_alloc((len + 1) * sizeof(unichar) + sizeof(int));
	unichar *rr = (unichar *)((int)r + sizeof(int));

	*((int *)r) = len;
	
	memcpy(rr, str1, unistrlen(str1) * sizeof(unichar));
	memcpy(rr + unistrlen(str1), str2, unistrlen(str2) * sizeof(unichar));
	return rr;
}
Example #3
0
int unistrcmp(const unichar *str1, const unichar *str2)
{
	int len1 = unistrlen(str1);
	int len2 = unistrlen(str2);

	int i, r;
	if (len1 != len2) return len1 - len2;
	
	for (i = 0; i < len1; ++i) {
		if ((r = str1[i] - str2[i])) return r;
	}
	return 0;
}
Example #4
0
/**************************************************************************
  Convert Unistring ( Uint16[] ) to UniChar structure.
  Memmory alocation -> after all use need call del_chain(...) !
**************************************************************************/
static struct UniChar *text2chain(const Uint16 * pInText)
{
  int i, len;
  struct UniChar *pOutChain = NULL;
  struct UniChar *chr_tmp = NULL;

  len = unistrlen(pInText);

  if (len == 0) {
    return pOutChain;
  }

  pOutChain = fc_calloc(1, sizeof(struct UniChar));
  pOutChain->chr[0] = pInText[0];
  pOutChain->chr[1] = 0;
  chr_tmp = pOutChain;

  for (i = 1; i < len; i++) {
    chr_tmp->next = fc_calloc(1, sizeof(struct UniChar));
    chr_tmp->next->chr[0] = pInText[i];
    chr_tmp->next->chr[1] = 0;
    chr_tmp->next->prev = chr_tmp;
    chr_tmp = chr_tmp->next;
  }

  return pOutChain;
}
Example #5
0
void _uniprint(unichar *s)
{
	int len = unistrlen(s);
	int i;
	for (i = 0; i < len; ++i) printf("%c", s[i]);
	printf("\n");
}
Example #6
0
int unistrchr(const unichar *str, int c)
{
	int len = unistrlen(str);
	int i;
	for (i = 0; i < len; ++i) {
		if (str[i] == c) return 1;
	}
	return 0;
}
Example #7
0
int unistrpos(unichar *str, int start, unichar *s2)
{
	unichar *s1 = str;
    int l1 = unistrlen(s1);
    int l2 = unistrlen(s2);

	s1 += start;
	l1 -= start;
	
    while (l1 >= l2) {
        if (memcmp(s1, s2, l2 * sizeof(unichar)) == 0) {
            return s1 - str;
        }
        s1++;
        l1--;
    }
    return -1;
}
Example #8
0
static char *dup_u2c(int cp, const WCHAR *uc)
{
	int len;
	char *cptr;
	const union cptable *cpdef = find_codepage(cp);

	if(cpdef)
            len = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, NULL, 0, NULL, NULL);
        else
            len = wine_utf8_wcstombs(0, uc, unistrlen(uc)+1, NULL, 0);
	cptr = xmalloc(len);
        if (cpdef)
            len = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, cptr, len, NULL, NULL);
        else
            len = wine_utf8_wcstombs(0, uc, unistrlen(uc)+1, cptr, len);
	if (len < 0)
		internal_error(__FILE__, __LINE__, "Buffer overflow? code %d\n", len);
	return cptr;
}
Example #9
0
const char *tochars(const unichar *str)
{
	static char buf[65536];
	int i;
	int len = unistrlen(str);
	
	for (i = 0; i < len && i < 65530; ++i) buf[i] = (char)str[i];
	buf[i] = 0;
	return buf;
}
Example #10
0
unichar *unistrdup(const unichar *str)
{
	int len = unistrlen(str);

	unichar *r = mm_alloc((len + 1) * sizeof(unichar) + sizeof(int));
	unichar *rr = (unichar *)((int)r + sizeof(int));
	
	*((int *)r) = len;
	
	memcpy(rr, str, (len) * sizeof(unichar));
	return rr;
}
Example #11
0
unichar *unisubstrdup(const unichar *a, int start, int len)
{
	if (len == 0) return unistrdup_str("");
	
	int lenofa = unistrlen(a);
	while (start < 0) start += lenofa;
	if (start >= lenofa) return unistrdup_str("");
	
	int maxcpy = lenofa - start;
	
	if (len > 0) {
		maxcpy = maxcpy < len ? maxcpy : len;
	}
	
	unichar *r = mm_alloc((maxcpy + 1) * sizeof(unichar) + sizeof(int));
	unichar *rr = (unichar *)((int)r + sizeof(int));

	*((int *)r) = maxcpy;
	
	memcpy(rr, a + start, maxcpy * sizeof(unichar));
	return rr;
}
Example #12
0
/* charCodeAt */
static int strpto_charCodeAt(PSTATE *ps, Value *args, Value *_this, Value *ret, int asc)
{
	if (asc) die("Execute String.prototype.charCodeAt as constructor\n");

	Value target = { 0 };
	value_copy(target, *_this);
	value_tostring(&target);
	
	int slen = unistrlen(target.d.str);
	int pos = 0;
	Value *vpos;
	if ((vpos = value_object_lookup_array(args, 0, NULL))) {
		value_toint32(vpos);
		pos = (int)vpos->d.num;
	}

	if (pos < 0 || pos >= slen) {
		value_make_number(*ret, ieee_makenan());
	} else {
		value_make_number(*ret, target.d.str[pos]);
	}
	value_erase(target);
	return 0;
}
Example #13
0
/**************************************************************************
  Convert string from display encoding (16 bit unicode) to
  local encoding (8 bit char) and resut put in 'pToString'.
  if 'pToString' == NULL then resulting string will be allocate automaticaly.
  'length' give real sizeof 'pToString' array.

  Function return (char *) pointer to (new) pToString.
**************************************************************************/
char *convertcopy_to_chars(char *pToString, size_t length,
			    const Uint16 * pFromUniString)
{
  /* Start Parametrs */
  const char *pFromcode = get_display_encoding();
  const char *pTocode = get_internal_encoding();
  const char *pStart = (char *) pFromUniString;
  size_t ulength = (unistrlen(pFromUniString) + 1) * 2;

  /* ===== */

  char *pResult;
  iconv_t cd;

  /* ===== */

  if (!pStart) {
    return pToString;
  }

  cd = iconv_open(pTocode, pFromcode);
  if (cd == (iconv_t) (-1)) {
    if (errno != EINVAL) {
      return pToString;
    }
  }

  if (pToString) {
    pResult = pToString;
  } else {
    length = ulength * 2; /* UTF-8: up to 4 bytes per char */
    pResult = fc_calloc(1, length);
  }
  
  iconv(cd, NULL, NULL, NULL, NULL);	/* return to the initial state */

  /* Do the conversion for real. */
  {
    const char *pInptr = pStart;
    size_t Insize = ulength;
    char *pOutptr = pResult;
    size_t Outsize = length;

    while (Insize > 0 && Outsize > 0) {
      size_t Res =
	  iconv(cd, (ICONV_CONST char **) &pInptr, &Insize, &pOutptr, &Outsize);
      if (Res == (size_t) (-1)) {
        log_error("iconv() error: %s", fc_strerror(fc_get_errno()));
	if (errno == EINVAL) {
	  break;
	} else {
	  int saved_errno = errno;
	  iconv_close(cd);
	  errno = saved_errno;
	  if(!pToString) {
	    FC_FREE(pResult);
	  }
	  return pToString;
	}
      }
    }

    {
      size_t Res = iconv(cd, NULL, NULL, &pOutptr, &Outsize);
      if (Res == (size_t) (-1)) {
	int saved_errno = errno;
	iconv_close(cd);
	errno = saved_errno;
	if(!pToString) {
	  FC_FREE(pResult);
	}
	return pToString;
      }
    }

  }

  iconv_close(cd);

  return pResult;
}
Example #14
0
static char *make_string(WCHAR *uc, int len, int codepage)
{
	char *str = xmalloc(7*len + 1);
	char *cptr = str;
	int i;
	int b;

	if(!codepage)
	{
		*cptr++ = ' ';
		*cptr++ = 'L';
		*cptr++ = '"';
		for(i = b = 0; i < len; i++, uc++)
		{
                        switch(*uc)
                        {
                        case '\a': *cptr++ = '\\'; *cptr++ = 'a'; b += 2; break;
                        case '\b': *cptr++ = '\\'; *cptr++ = 'b'; b += 2; break;
                        case '\f': *cptr++ = '\\'; *cptr++ = 'f'; b += 2; break;
                        case '\n': *cptr++ = '\\'; *cptr++ = 'n'; b += 2; break;
                        case '\r': *cptr++ = '\\'; *cptr++ = 'r'; b += 2; break;
                        case '\t': *cptr++ = '\\'; *cptr++ = 't'; b += 2; break;
                        case '\v': *cptr++ = '\\'; *cptr++ = 'v'; b += 2; break;
                        case '\\': *cptr++ = '\\'; *cptr++ = '\\'; b += 2; break;
                        case '"':  *cptr++ = '\\'; *cptr++ = '"'; b += 2; break;
                        default:
                            if (*uc < 0x100 && isprint(*uc))
                            {
                                *cptr++ = *uc;
                                b++;
                            }
                            else
                            {
                                int n = sprintf(cptr, "\\x%04x", *uc & 0xffff);
                                cptr += n;
                                b += n;
                            }
                            break;
                        }
			if(i < len-1 && b >= 72)
			{
				*cptr++ = '"';
				*cptr++ = ',';
				*cptr++ = '\n';
				*cptr++ = ' ';
				*cptr++ = 'L';
				*cptr++ = '"';
				b = 0;
			}
		}
		if (unicodeout)
		    len = (len + 1) & ~1;
		else
		    len = (len + 3) & ~3;
		for(; i < len; i++)
		{
			*cptr++ = '\\';
			*cptr++ = 'x';
			*cptr++ = '0';
			*cptr++ = '0';
			*cptr++ = '0';
			*cptr++ = '0';
		}
		*cptr++ = '"';
		*cptr = '\0';
	}
	else
	{
		char *tmp, *cc;
		int mlen;
		const union cptable *cpdef = find_codepage(codepage);

                if (cpdef)
                    mlen = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, NULL, 0, NULL, NULL);
                else
                    mlen = wine_utf8_wcstombs(0, uc, unistrlen(uc)+1, NULL, 0);
		cc = tmp = xmalloc(mlen);
                if (cpdef) {
                    if((i = wine_cp_wcstombs(cpdef, 0, uc, unistrlen(uc)+1, tmp, mlen, NULL, NULL)) < 0)
                        internal_error(__FILE__, __LINE__, "Buffer overflow? code %d\n", i);
                } else {
                    if((i = wine_utf8_wcstombs(0, uc, unistrlen(uc)+1, tmp, mlen)) < 0)
                        internal_error(__FILE__, __LINE__, "Buffer overflow? code %d\n", i);
                }
		*cptr++ = ' ';
		*cptr++ = '"';
		for(i = b = 0; i < len; i++, cc++)
		{
                        switch(*cc)
                        {
                        case '\a': *cptr++ = '\\'; *cptr++ = 'a'; b += 2; break;
                        case '\b': *cptr++ = '\\'; *cptr++ = 'b'; b += 2; break;
                        case '\f': *cptr++ = '\\'; *cptr++ = 'f'; b += 2; break;
                        case '\n': *cptr++ = '\\'; *cptr++ = 'n'; b += 2; break;
                        case '\r': *cptr++ = '\\'; *cptr++ = 'r'; b += 2; break;
                        case '\t': *cptr++ = '\\'; *cptr++ = 't'; b += 2; break;
                        case '\v': *cptr++ = '\\'; *cptr++ = 'v'; b += 2; break;
                        case '\\': *cptr++ = '\\'; *cptr++ = '\\'; b += 2; break;
                        case '"':  *cptr++ = '\\'; *cptr++ = '"'; b += 2; break;
                        default:
                            if(isprint(*cc))
                            {
                                *cptr++ = *cc;
                                b++;
                            }
                            else
                            {
                                int n = sprintf(cptr, "\\x%02x", *cc & 0xff);
                                cptr += n;
                                b += n;
                            }
                            break;
			}
			if(i < len-1 && b >= 72)
			{
				*cptr++ = '"';
				*cptr++ = ',';
				*cptr++ = '\n';
				*cptr++ = ' ';
				*cptr++ = '"';
				b = 0;
			}
		}
		len = (len + 3) & ~3;
		for(; i < len; i++)
		{
			*cptr++ = '\\';
			*cptr++ = 'x';
			*cptr++ = '0';
			*cptr++ = '0';
		}
		*cptr++ = '"';
		*cptr = '\0';
		free(tmp);
	}
	return str;
}
Example #15
0
/**************************************************************************
  Create Edit Field surface ( with Text) and blit them to Main.screen,
  on position 'pEdit_Widget->size.x , pEdit_Widget->size.y'

  Graphic is taken from 'pEdit_Widget->theme'
  Text is taken from	'pEdit_Widget->sting16'

  if flag 'FW_DRAW_THEME_TRANSPARENT' is set theme will be blit
  transparent ( Alpha = 128 )

  function return Hight of created surfaces or (-1) if theme surface can't
  be created.
**************************************************************************/
static int redraw_edit(struct widget *pEdit_Widget)
{
  int ret;
  
  if (get_wstate(pEdit_Widget) == FC_WS_PRESSED) {
    return redraw_edit_chain((struct EDIT *)pEdit_Widget->data.ptr);
  } else {
    int iRet = 0;
    SDL_Rect rDest = {pEdit_Widget->size.x, pEdit_Widget->size.y, 0, 0};
    SDL_Surface *pEdit = NULL;
    SDL_Surface *pText;

    ret = (*baseclass_redraw)(pEdit_Widget);
    if (ret != 0) {
      return ret;
    }
    
    if (pEdit_Widget->string16->text &&
    	get_wflags(pEdit_Widget) & WF_PASSWD_EDIT) {
      Uint16 *backup = pEdit_Widget->string16->text;
      size_t len = unistrlen(backup) + 1;
      char *cBuf = fc_calloc(1, len);
    
      memset(cBuf, '*', len - 1);
      cBuf[len - 1] = '\0';
      pEdit_Widget->string16->text = convert_to_utf16(cBuf);
      pText = create_text_surf_from_str16(pEdit_Widget->string16);
      FC_FREE(pEdit_Widget->string16->text);
      FC_FREE(cBuf);
      pEdit_Widget->string16->text = backup;
    } else {
      pText = create_text_surf_from_str16(pEdit_Widget->string16);
    }
  
    pEdit = create_bcgnd_surf(pEdit_Widget->theme, get_wstate(pEdit_Widget),
                              pEdit_Widget->size.w, pEdit_Widget->size.h);

    if (!pEdit) {
      return -1;
    }
    
    /* blit theme */
    alphablit(pEdit, NULL, pEdit_Widget->dst->surface, &rDest);

    /* set position and blit text */
    if (pText) {
      rDest.y += (pEdit->h - pText->h) / 2;
      /* blit centred text to botton */
      if (pEdit_Widget->string16->style & SF_CENTER) {
        rDest.x += (pEdit->w - pText->w) / 2;
      } else {
        if (pEdit_Widget->string16->style & SF_CENTER_RIGHT) {
	  rDest.x += pEdit->w - pText->w - adj_size(5);
        } else {
	  rDest.x += adj_size(5);		/* cennter left */
        }
      }

      alphablit(pText, NULL, pEdit_Widget->dst->surface, &rDest);
    }
    /* pText */
    iRet = pEdit->h;

    /* Free memory */
    FREESURFACE(pText);
    FREESURFACE(pEdit);
    return iRet;
  }
  return 0;
}