Motif1.2で、日本語表示を行うプログラムを作成しました。
しかし、X11R5では正常に表示するのですが、X11R6のライブラリをリンクする
と、
文字が化けてしまいます。
同一マシン(HP-UX10.20)でのコンパイル、実行で結果が異なるためフォントサー
バや
Xサーバの設定などといった問題ではないと考えられます。
また、XAPPLRESDIRで指定した各ロケールに対応したリソースファイルの読み込
みは
正常に動作します。
これは、X11R6のバグなのでしょうか?
解決法を、ご存じの方ご教授願います。
以下は、私が上記問題のテスト用に作成したCソースコードです。
環境変数 APP_LANG に指定したロケールにアプリケーションを設定して、
ウィンドウに、『日本語EUC』と表示するだけのプログラムです。
・X11R5でコンパイルの場合
cc -Aa -w1 -Y -O4 -I/usr/include/Motif1.2 -I/usr/include/X11R5 \
-L/usr/lib/Motif1.2 -L/usr/lib/X11R5 -lXm -lXt -lX11 test.c -o test
・X11R6でコンパイルの場合
cc -Aa -w1 -Y -O4 -I/usr/include/Motif1.2 -I/usr/include/X11R6 \
-L/usr/lib/Motif1.2_R6 -L/usr/lib/X11R6 -lXm -lXt -lX11 test.c -o test
・実行
% setenv APP_LANG ja_JP.eucJP
% test
・リソースファイル(App)
┌───────────────────────────────┐
│App*label.fontList : jeuc.8x18
│
│App*label.labelString : 日本語EUC
│
└───────────────────────────────┘
*当然ですが、EUCコードです。
・Cソースコード(test.c)
/*############################################################################
* Motif1.2 Internationalization sample program.
*
* ENVIRONMENT
* APP_LANG To get application locale.
* [% setenv APP_LANG ja_JP.eucJP ]
*############################################################################*/
#include <locale.h>
#include <X11/Xlib.h>
#include <Xm/Xm.h>
#include <Xm/Label.h>
/******************************************************************************
* PROCEDURE customLanguageProc
******************************************************************************/
static String customLanguageProc(Display *display, String language,
XtPointer clientData)
{
if (!setlocale(LC_ALL, (char*)clientData)) {
XtWarning("local not supported by C library, locale unchanged");
}
if (!XSupportsLocale()) {
XtWarning("local not supported by Xlib, locale set to C");
(void) setlocale(LC_ALL, "C");
}
if (!XSetLocaleModifiers("")) {
XtWarning("X local modifiers not supported, using default");
}
return setlocale(LC_ALL, NULL);
}
/******************************************************************************
* PROCEDURE setupEnvAppLang
******************************************************************************/
static char *setupEnvAppLang(void)
{
char *langEnv;
if (!(langEnv = getenv((const char*)"APP_LANG"))) {
(void) putenv("LANG=C");
return langEnv;
}
/* Japanese EUC for HP-UX9.x */
if (strcmp(langEnv, "japanese.euc") == 0) {
(void) putenv("LANG=japanese.euc");
(void) putenv("XMODIFIERS=@im=_XIMP_japanese.euc#atok8.0");
}
/* Japanese EUC for HP-UX10.x */
else if (strcmp(langEnv, "ja_JP.eucJP") == 0) {
(void) putenv("LANG=ja_JP.eucJP");
(void) putenv("XMODIFIERS=@im=_XIMP_ja_JP.eucJP#atok8.0");
}
/* English */
else {
(void) putenv("LANG=C");
}
return langEnv;
}
/******************************************************************************
* PROCEDURE SetupI18N
******************************************************************************/
char *SetupI18N(void)
{
#if (XtSpecificationRelease >= 5)
XtSetLanguageProc(NULL, customLanguageProc, setupEnvAppLang());
#endif /* Upper X11R5 */
return setlocale(LC_ALL, NULL);
}
/******************************************************************************
* PROCEDURE main
******************************************************************************/
int main(int argc, char *argv[])
{
XtAppContext appContext;
Widget toplevel;
(void) SetupI18N(); /* Multilingual */
toplevel = XtVaAppInitialize(&appContext, "App",
(XrmOptionDescList)NULL, 0,
&argc, argv,
(String)NULL,
NULL);
(void) XtVaCreateManagedWidget("label", xmLabelWidgetClass,
toplevel, NULL);
XtRealizeWidget(toplevel);
XtAppMainLoop(appContext);
/* NOTREACHED */
return 0;
}
/*## End of C-source
#########################################################*/
==============================
Tsuyoshi Moriya
mor...@sapporo.scc-net.co.jp
==============================
In article <352B1B05...@sapporo.scc-net.co.jp>,
Tsuyoshi Moriya <mor...@sapporo.scc-net.co.jp> wrote:
> Motif1.2で、日本語表示を行うプログラムを作成しました。
> しかし、X11R5では正常に表示するのですが、X11R6のライブラリをリンクする
> と、
> 文字が化けてしまいます。
X11R6との組合せで動作が保証されているのは、Motif 1.2.5か1.2.6です。
Motif 1.2.4以下なら、X11R5とリンクしたもので妥協した方がいいです。
X11R6と組合せだと、正しく動作しないウィジェットがあると聞いています。
____
| AIST 北陸先端科学技術大学院大学
| HOKURIKU 情報科学研究科 落水研究室
o_/ 1990 藤枝 和宏 fuj...@jaist.ac.jp
Tsuyoshi Moriya wrote:
>
> 森谷@システムコンサルタンツです。
>
> Motif1.2で、日本語表示を行うプログラムを作成しました。
> しかし、X11R5では正常に表示するのですが、X11R6のライブラリをリンクする
> と、
> 文字が化けてしまいます。
HPのフォントの指定の仕方がR6で変わったようですね。
# というか、これまでが実装に依存していた?
> ・リソースファイル(App)
> ┌───────────────────────────────┐
> │App*label.fontList : jeuc.8x18 │
> │App*label.labelString : 日本語EUC │
> └───────────────────────────────┘
jeuc.8x18だと文字セットが足りないので、全部の文字セットをフォントセッ
ト
の形式で指定しないといけません。で、私はいつも
*fontList: \
-hp-gothic-medium-r-normal--18-*-c-*-jisx0201.*; \
-hp-gothic-medium-r-normal--18-*-c-*-jisx0208.*; \
-hp-gothic-medium-r-normal--18-*-c-*-jisx0212.*:
というふうに指定しています。
# ただ、SetLanguageProc()にNULL以外の引数を渡したことがないんで、
# これで正しく表示されるかどうかは自信がないです(^^;
--
=======================================================
石井 昌彦 <mailto:is...@ryosen.hmw.mhi.co.jp>
(株) リョーセンエンジニアズ SEセンタ システム開発課
=======================================================
: Tsuyoshi Moriya wrote:
: > │App*label.fontList : jeuc.8x18 │
X11R4 のとき (X11R5で国際化機能が導入される前) に、HPは独自の
実装で日本語を表示できるようにしていましたが、上記のフォント指定は
このHP独自の方法を使うものです。この実装は X11R5 のライブラリ
までは入っていますが、X11R6 のライブラリには入っていません。
したがって、X11R6 以降は (X11R5 でもなるべく)、
Ishii, Masahiko (is...@ryosen.hmw.mhi.co.jp) wrote:
: *fontList: \
: -hp-gothic-medium-r-normal--18-*-c-*-jisx0201.*; \
: -hp-gothic-medium-r-normal--18-*-c-*-jisx0208.*; \
: -hp-gothic-medium-r-normal--18-*-c-*-jisx0212.*:
というふうに fontset で指定してください。もう少し簡単に
指定するには、
*fontList: -hp-gothic-medium-r-normal--18-*:
などとしてもかまいません。
日本ヒューレット・パッカード(株)
林 秀幸
E-mail: hide...@kobe.hp.com
Hideyuki Hayashi wrote:
>
> X11R4 のとき (X11R5で国際化機能が導入される前) に、HPは独自の
> 実装で日本語を表示できるようにしていましたが、上記のフォント指定は
> このHP独自の方法を使うものです。この実装は X11R5 のライブラリ
> までは入っていますが、X11R6 のライブラリには入っていません。
あっ、R5からでしたか。失礼しました。
私はフォントセットの指定が面倒で、R5になったときも以前のままで使用して
いたもので (^^;;
フォローして頂いてありがとうございます。