[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Debian for ARM710µÄÖÐÎÄ»¯ÎÊÌâ




ha shao wrote:

>
> > Äã¿Ï¶¨ ARM ÉÏ sizeof(XChart2b) == 4 ? Èç¹û¿Ï¶¨£¬ÄÇÉÏÃæÕâÖÖhackÍêÈ«
> > ´íÁË¡£XmbDrawString... ¶¼²»¶ÔÁË¡£XDrawString16 ûÎÊÌ⣬
> > (_Xconst XChar2b *)ch_str ÕâÖÖcast ¾Í¿Ï¶¨ÂÒÌ×ÁË¡£ÏàÓ¦µÄXmb º¯ÊýÈ«ÍêÁË¡£
> >
>
> In omText.c, you can find that the cast is from (char *) to (_Xconst XChar2b *).
> Which is totally wrong with XChar2b != char * 2.
> In your example, simply replace i < length /sizeof(XChar2b) with
> i < (length>>1) will do the job. I think the DrawStringWidthFontSet should
> changed to your example, Of course if we sure sizeof(XChar2b) could be 4.
>
> --
> Best regard
> hashao
>

    ÊÂʵÉÏÒ»ÇдíÎó¶¼ÔÚÓÚsizeof(XChar2b) == 2Õâ¸ö¼ÙÉè²»³ÉÁ¢¡£Ä¿Ç°µÄ×´¿öÊÇ£º
1¡¢glibc 2.1.3 locale/iconv¹¤×÷Õý³£¡£
2¡¢X locale³ýÁ˺Ísizeof(XChar2b) == 2Õâ¸ö¼ÙÉèÏà¹ØÖ®Í⣬ÆäËüÕý³£¡£
3¡¢XDrawString16»ù±¾Õý³££¬¿ÉÒÔ»­ºº×Ö(ÎÊÌâÔÚºóÃæ)¡£
ËùÒÔÈç¹ûÊÇ:
char *ch_str = "zh1 zh2 zh3 zh4";
...
XDrawString16 (display, window, gc, x, y, (_Xconst XChar2b *)ch_str, length + 1);
¿´µ½µÄÊÇ
zh1 zh2 zh3 zh4 00
Èç¹ûÊÇ:
XChar2b *ch_str = struct copy "zh1 zh2 zh3 zh4";
...
XDrawString16 (display, window, gc, x, y, (_Xconst XChar2b *)ch_str, length + 1);
¿´µ½µÄÊÇ
zh1 00 zh2 00
XmbDrawString/XwcDrawStringÔÚºº×Ö²¿·Ö¾ÍÊÇÕâÑùÏÔʾ¡£Èç¹ûÏë±£³Ö´úÂëµÄЧÂÊ£¬Ö»ÓÐÔÚ
gcc for ARMÒ»¶Ë½â¾ö¡£ÒòΪÓÐЩARM CPUÒªÇóÑ°Ö·°´×Ö(word)¶ÔÆ룬ËùÒÔÖ»Òª°Ñgcc for ARM
µÄȱʡ±àÂë°´×Ö¶ÔÆë¶ø²»ÊÇ°´Ë«×Ö(dword)¾ÍÐÐÁË¡£

XDrawString16µÄÎÊÌ⣺
1¡¢µÚÒ»´Î»­ºº×Öʱ»áÔÚµÚÒ»¸öºº×ÖÇ°¶à»­Ò»¸öºº×Ö(¹æÂÉ»¹Ã»ÓÐÕÒµ½)¡£³ÌÐò×Ô¼ºË¢Ð´°¿Ú
¾ÍÕý³£ÁË¡£
2¡¢×îºóÒ»¸öºº×Ö»­²»³öÀ´£¬³ý·Çlength = length + 1¡£Ë¢Ð´°¿ÚҲûÓÐÓá£
ÎÊÌâµÄÔ­Òò»¹ÔÚ²éÕÒ£¬ÎÒ²ÂÏë¿ÉÄܺÍsizeof(XChar2b) == 4Ïà¹Ø¡£




Reply to: