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

Re: Debian for ARM710的中文化問題



On Thu, Jan 25, 2001 at 11:34:37PM +0800, shuyong@public.nn.gx.cn wrote:
> 
> 這倒不是xfree86的bug,而是X Window的傳統。每個window初始都沒有前景色,然後程序
> 親自設置。這也是X程序的慣例。
> 

這種不同平台上的不一致,還是有問題,慣例是一回事,兼容是另
一回事。我去 debian-x 上問一下吧,看是不是debian才有的問題。

> >
> > sizeof(XChar2b) == 4會影響嗎?這些都應該在 xfree86 的 ARM port 上
> > 解決,debian-x 主要討論的是在 debian 上對 X 系統的包裝,安裝。
> >
> 
> 因為一個假設,sizeof(XChar2b) == 4會有影響。
> 一般顯示漢字是這樣:
> char *chinese = "這是中文字符串";
> char *ch_str;
> XFontStruct *font = XLoadQueryFont (display,
> "-isas-*-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0");
> 
>  XSetFont (display, gc, font->fid);
>  length = strlen (chinese);
>  ch_str = strdup (chinese);
>  for (i = 0; i < length; i++) {
>   ch_str[i] &= 0x7F;
>  }
>  length /= 2;
>  XDrawString16 (display, window, gc, x, y, (_Xconst XChar2b *)ch_str, length + 1);
> 
> 注意ch_str的使用,這是不規范和不可移植的。主要是little/big endian的問題。XChar2b是
> 這樣定義:
> 
> typedef struct {
>  unsigned char byte1;
>  unsigned char byte2;
> } XChar2b;
> 或:
> typedef struct {
>  unsigned char byte2;
>  unsigned char byte1;
> } XChar2b;
> 
> 這是由little/big endian的特性來決定。不管怎樣,sizeof (XChar2b) == 2。上述代碼
> 應該是:(這也是X內部代碼使用的技巧)
> 
> char *chinese = "這是中文字符串";
> XChar2b *ch_str;
> XFontStruct *font = XLoadQueryFont (display,
> "-isas-*-medium-r-normal--16-160-72-72-c-160-gb2312.1980-0");
> 
>  length = strlen (chinese);
>  ch_str = (XChar2b *)malloc (length + sizeof (XChar2b));
>  memset (ch_str, 0, length + sizeof (XChar2b));
>  for (i = 0; i < length / sizeof (XChar2b); i++) {
>   ch_str[i].byte1 = chinese[i * 2] & 0x7F;
>   ch_str[i].byte2 = chinese[i * 2 + 1] & 0x7F;
>  }
>  length /= sizeof (XChar2b);
>  XDrawString16 (display, window, gc, x, y, (_Xconst XChar2b *)ch_str, length + 1);
> 
> 可能是因為效率問題,XDrawString16假設每個字是緊密排列進行顯示的。你可以想象
> 當sizeof(XChar2b) == 4時的情況。所以我要尋找gcc關于結構對齊的選項。看看我的想法
> 是否正確。
> 

你肯定 ARM 上 sizeof(XChart2b) == 4 ? 如果肯定,那上面這種hack完全
錯了。XmbDrawString... 都不對了。XDrawString16 沒問題,
(_Xconst XChar2b *)ch_str 這種cast 就肯定亂套了。相應的Xmb 函數全完了。

-- 
Best regard
hashao

-- 
| This message was re-posted from debian-chinese-gb@lists.debian.org
| and converted from gb2312 to big5 by an automatic gateway.



Reply to: