library home hp.com home products and services support and drivers solutions
cd-rom home
End of Jump to page title
HP OpenVMS Systems
Documentation

Jump to content


日本語HP DECwindows Motif for OpenVMS

日本語HP DECwindows Motif for OpenVMS
DEC 入力サーバ・ライブラリ


前へ 目次



setHotKeyCb

このコールバック関数は,XIC 属性 XNHotKeyCb の値を設定するために呼び出されます。

フォーマット

int setHotKeyCb (w, client_data, reason, value, attribute_flag)


引数

Widget w;
Opaque *client_data;
int reason;
XIMHotKeyTriggers *value;
DIMsAttributesType attribute_flag;


戻り値

1
このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。


説明

setHotKeyCb は,リソース DIMsNsetHotKeyCb で指定されるコールバック関数です。DIMsNsetHotKeyCb については, 第 1.4.47 項 を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。 DIMsNclientdata については, 第 1.4.54 項 を参照してください。
reason コールバックの理由を指定します。 DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。 DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し, DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value XIMHotKeyTriggers 型の属性値へのポインタを指定します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。 DIMsAttributesType のデータ型については, setExtICValuesCb の項を参照してください。


getHotKeyCb

このコールバック関数は,XIC 属性 XNHotKeyCb の値を得るために呼び出されます。

フォーマット

int getHotKeyCb (w, client_data, value, attribute_flag)


引数

Widget w;  
Opaque *client_data;  
XIMHotKeyTriggers **value; (呼び出し側ヘ返す)
DIMsAttributesType attribute_flag;  


戻り値

1
このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。


説明

getHotKeyCb は,リソース DIMsNgetHotKeyCb で指定されるコールバック関数です。DIMsNgetHotKeyCb については, 第 1.4.48 項 を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。 DIMsNclientdata については, 第 1.4.54 項 を参照してください。
value 呼び出し側に,XIMHotKeyTriggers 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。 DIMsAttributesType のデータ型については, setExtICValuesCb の項を参照してください。


setHotKeyStateCb

このコールバック関数は,XIC 属性 XNHotKeyStateCb の値を設定するために呼び出されます。

フォーマット

int setHotKeyStateCb (w, client_data, reason, value, attribute_flag)


引数

Widget w;  
Opaque *client_data;  
int reason;  
XIMHotKeyState **value; (呼び出し側ヘ返す)
DIMsAttributesType attribute_flag;  


戻り値

1
このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。


説明

setHotKeyStateCb は,リソース DIMsNsetHotKeyStateCb で指定されるコールバック関数です。DIMsNsetHotKeyStateCb については, 第 1.4.49 項 を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。 DIMsNclientdata については, 第 1.4.54 項 を参照してください。
reason コールバックの理由を指定します。 DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。 DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し, DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value XIMHotKeyState 型の属性値へのポインタを指定します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。 DIMsAttributesType のデータ型については, setExtICValuesCb の項を参照してください。


getHotKeyStateCb

このコールバック関数は,XIC 属性 XNHotKeyStateCb の値を得るために呼び出されます。

フォーマット

int getHotKeyStateCb (w, client_data, value, attribute_flag)


引数

Widget w;  
Opaque *client_data;  
XIMHotKeyState **value; (呼び出し側ヘ返す)
DIMsAttributesType attribute_flag;  


戻り値

1
このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。


説明

getHotKeyStateCb は,リソース DIMsNgetHotKeyStateCb で指定されるコールバック関数です。DIMsNgetHotKeyStateCb については, 第 1.4.50 項 を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。 DIMsNclientdata については, 第 1.4.54 項 を参照してください。
value 呼び出し側に,XIMHotKeyState 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。 DIMsAttributesType のデータ型については, setExtICValuesCb の項を参照してください。


setPreeditStateCb

このコールバック関数は,XIC 属性 XNPreeditStateCb の値を設定するために呼び出されます。

フォーマット

int setPreeditStateCb (w, client_data, reason, value, attribute_flag)


引数

Widget w;
Opaque *client_data;
int reason;
XIMPreeditState *value;
DIMsAttributesType attribute_flag;


戻り値

1
このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。


説明

setPreeditStateCb は,リソース DIMsNsetPreeditStateCb で指定されるコールバック関数です。DIMsNsetPreeditStateCb については, 第 1.4.51 項 を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。 DIMsNclientdata については, 第 1.4.54 項 を参照してください。
reason コールバックの理由を指定します。 DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。 DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し, DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
value XIMPreeditState 型の属性値へのポインタを指定します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。 DIMsAttributesType のデータ型については, setExtICValuesCb の項を参照してください。


getPreeditStateCb

このコールバック関数は,XIC 属性 XNPreeditStateCb の値を得るために呼び出されます。

フォーマット

int getPreeditStateCb (w, client_data, value, attribute_flag)


引数

Widget w;  
Opaque *client_data;  
XIMPreeditState **value; (呼び出し側ヘ返す)
DIMsAttributesType attribute_flag;  


戻り値

1
このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。


説明

getPreeditStateCb は,リソース DIMsNgetPreeditStateCb で指定されるコールバック関数です。DIMsNgetPreeditStateCb については, 第 1.4.52 項 を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。 DIMsNclientdata については, 第 1.4.54 項 を参照してください。
value 呼び出し側に,XIMPreeditState 型の属性値へのポインタを返します。IMS プログラマは,このデータにメモリを割り当てる必要があります。このメモリ割り当ては IMSSL によって後で解放されます。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。 DIMsAttributesType のデータ型については, setExtICValuesCb の項を参照してください。


setPreeditStateCallbackCb

このコールバック関数は,XIC 属性 XNPreeditStateCallbackCb の値を設定するために呼び出されます。

フォーマット

int setPreeditStateCallbackCb (w, client_data, reason, attribute_flag)


引数

Widget w;
Opaque *client_data;
int reason;
DIMsAttributesType attribute_flag;


戻り値

1
このコールバックが正常終了した場合,IMSSL に 1 が返されます。このコールバックが異常終了した場合,IMSSL に 0 が返されます。


説明

setPreeditStateCallbackCb は,リソース DIMsNsetPreeditStateCallbackCb で指定されるコールバック関数です。 DIMsNsetPreeditStateCallbackCb については, 第 1.4.53 項 を参照してください。

w 入力コンテキストに対応する DIMs ウィジェットを指定します。
client_data DIMsNclientdata リソースで指定されるデータへのポインタを指定します。 DIMsNclientdata については, 第 1.4.54 項 を参照してください。
reason コールバックの理由を指定します。 DimCR_CreateIC または DimCR_SetICValues のいずれかを指定します。 DimCR_CreateIC はクライアントの XCreateIC() によってコールバックが開始されることを意味し, DimCR_SetICValues はクライアントの XSetICValues() によってコールバックが開始されることを意味します。
attribute_flag PreeditAttribute または StatusAttribute のどちらに属するか,XIC 属性の型を指定します。 DIMsAttributesType のデータ型については, setExtICValuesCb の項を参照してください。

1.6 サンプル・ファイル

入力サーバに関するサンプル・ファイルが DECW$EXAMPLES:IMS_EXAMPLE.C に用意されています。このサンプル・ファイルを参照することにより, API の使用方法をより明確に理解することができるでしょう。

1.6.1 ビルド・プロシージャ

ビルド用のコマンド・プロシージャとしてDECW$EXAMPLES:IMS_EXAMPLE.COM が用意されています。これにより,実行可能な入力サーバをビルドできます。 IMS の開発に必要なすべての API およびデータ構造体を含むヘッダ・ファイルは, DECW$INCLUDE:DIMSDEF.H にあります。IMSSLは共有ライブラリ SYS$SHARE:DECW$DIMSLIBSHR.EXE として提供されます。

1.6.2 ソース・プログラム


***************************************************************************** 
 * 
 * IMS_example.c 
 * 
 * This is an example of how to write an Input Method Server for X11R6. 
 * The only protocol being used in here is Xi18n and the transport mechanism 
 * is X. 
 * 
 * In this example, there are only 26 composed characters, which are 
 * formed by 2 consecutive key inputs which are equal. These key inputs 
 * should be from a-z, case insensitive. The lookup string 
 * will be found from an array, which is some kind of small-scale dictionary. 
 * 
 * You should load Iso-latin 1 keymap files in order to work properly for 
 * this example. 
 * 
 * You can start this example using four of the languages: 
 * Korean, Traditional Chinese, Simplied Chinese and Japanese 
 * 
 * To start this IMServer, set the xnllanguage resource properly, for example, 
 * if you want to input Korean text, you should set the session language to 
 * Korean, or simply start as 
 *  $IMS_example -xnllanguage "ko_KR.deckorean" 
 * 
 * To connect a client to this IMS, simply start up this IMS as a background 
 * job, then start the client with the correct language setting and XMODIFIERS 
 * environment. There are 4 modifiers that can be set according to locales : 
 * "zh_tw_exam", "zh_cn_exam", "ko_kr_exam", ja_jp_exam". For example, 
 * 
 *  $define XMODIFIERS "@im=ko_kr_exam" 
 *      $mc decw$cardfiler -xnllanguage "ko_KR.deckorean" 
 */ 
 
#include 
#include 
#ifdef VMS 
#include "DIMsDef.h" 
/* #include  */ 
#else 
#include 
#endif 
static char my_dictionary[26][2] =  {0xa1, 0xa1, 
                                         0xa1, 0xa2, 
                                         0xa1, 0xa3, 
                                         0xa1, 0xa4, 
                                         0xa1, 0xa5, 
                                         0xa1, 0xa6, 
                                         0xa1, 0xa7, 
                                         0xa1, 0xa8, 
                                         0xa1, 0xa9, 
                                         0xa1, 0xaa, 
                                         0xa1, 0xab, 
                                         0xa1, 0xac, 
                                         0xa1, 0xad, 
                                         0xa1, 0xae, 
                                         0xa1, 0xaf, 
                                         0xa1, 0xb1, 
                                         0xa1, 0xb2, 
                                         0xa1, 0xb3, 
                                         0xa1, 0xb4, 
                                         0xa1, 0xb5, 
                                         0xa1, 0xb6, 
                                         0xa1, 0xb7, 
                                         0xa1, 0xb8, 
                                         0xa1, 0xb9, 
                                         0xa1, 0xba, 
                                         0xa1, 0xbb}; 
 
typedef struct { 
   char data[1]; 
   int  num_char; 
} MyDataRec, *MyData;  /* This is the input context specific data */ 
 
static int CreateICCallback(w, client_data, widget_data) 
Widget w; 
Opaque *client_data; 
Opaque **widget_data; 
{ 
    MyData my_data = (MyData)XtMalloc(sizeof(MyDataRec)); 
 
    if (!my_data) 
 return 0; /* fail */ 
 
    my_data->num_char = 0; 
    *widget_data = (Opaque *)my_data; 
 
    return 1; /* success */ 
} 
 
static int DestroyICCallback(w, client_data, widget_data) 
Widget w; 
Opaque *client_data; 
{ 
     MyData my_data = (MyData)DIMsUserData(w); 
     
     if (my_data) 
 XtFree((char *)my_data); 
 
     return 1; /* success */ 
} 
 
static int GetFilterEventsCallback(w, client_data, mask) 
Widget w; 
Opaque *client_data; 
unsigned long **mask; 
{ 
   *mask = (unsigned long *) XtMalloc(sizeof(unsigned long)); 
 
/*  Since this IMS supports root-window style only, so just KeyPress 
    events are necessary */ 
 
   **mask = (unsigned long)(KeyPressMask); 
 
   return 1; 
} 
 
static int ProcessEventCallback(w, client_data, event, send_back) 
Widget w; 
Opaque *client_data; 
XEvent *event; 
Boolean *send_back; 
{ 
 
    MyData my_data = (MyData)DIMsUserData(w); 
    Display *dpy  = XtDisplay(w); 
 
    *send_back = True; 
 
    switch (event->type) 
    { 
       case KeyPress : 
     { 
  KeyCode keycode = event->xkey.keycode; 
  KeySym keysym; 
  char second_char; 
  XTextProperty text_property; 
  char *text_list[1]; 
  char text[3]; 
 
  keysym = XKeycodeToKeysym( dpy, keycode, 0 ); 
  if ((keysym >= XK_A && keysym <= XK_Z) || 
      (keysym >= XK_a && keysym <=XK_z)) 
  { 
     if (my_data->num_char) 
     { 
        if (keysym >= XK_a) 
    second_char = keysym - XK_a; 
        else 
        second_char = keysym - XK_A; 
        if (second_char == my_data->data[0]) 
        { /* two consecutive key are equal, send commit string */ 
    text[0] = my_dictionary[second_char][0]; 
    text[1] = my_dictionary[second_char][1]; 
    text[2] = '\0'; 
    text_list[0] = text; 
    XmbTextListToTextProperty(dpy, text_list, 1, 
     XCompoundTextStyle, &text_property); 
    DIMsCommit(w, (char *)text_property.value, 
    strlen((char *)text_property.value)+1); 
    XtFree((char *)text_property.value); 
    *send_back = False; /* the key is used by IMS, 
      no need to return to client */ 
        } 
        my_data->num_char = 0; /* reset to 0*/ 
     } else { 
        my_data->num_char = 1; 
        if (keysym >= XK_a) 
    my_data->data[0] = keysym - XK_a; 
        else 
        my_data->data[0] = keysym - XK_A; 
        *send_back = False; 
     } 
  } 
      break; 
     } 
      default : 
     break; 
    } 
 
    return 1; 
} 
 
IgnorXErrors(dpy, event) 
    Display *dpy; 
    XErrorEvent *event; 
{ 
    return 0; 
} 
       
main(argc, argv) 
int argc; 
char **argv; 
{ 
    Widget toplevel; 
    XtAppContext app_context; 
    DIMsClassCtx ctx; 
    char *zh_tw_server_strings[] = {"_XIM_zh_TW@zh_tw_exam"}; 
    char *zh_cn_server_strings[] = {"_XIM_zh_CN@zh_cn_exam"}; 
    char *ko_kr_server_strings[] = {"_XIM_ko_KR@ko_kr_exam"}; 
    char        *ja_jp_server_strings[] = {"_XIM_ja_JP@ja_jp_exam"}; 
    XIMStyle support_styles[1] = {XIMPreeditNothing | XIMStatusNothing}; 
    DIMsLocaleInfoRec locale; 
    DIMsStringListRec server_names; 
    DIMsSupportStylesRec im_styles; 
    Cardinal n; 
    Arg al[40]; 
    DIMsVersionRec im_version; 
 
    XtSetLanguageProc(NULL, NULL, NULL); 
 
    toplevel = XtAppInitialize(&app_context, "example", NULL, 0, 
    &argc, argv, NULL, NULL, 0); 
 
/* set up DIMs Class */ 
/* This example targets to work for 4 locales: zh_TW, ja_JP, zh_CN, ko_KR. 
   Therefore many DIMs class contexts are created */ 
/* create contexts for locales zh_TW, ja_JP, zh_CN, ko_KR */ 
 
    locale.language = "zh_TW"; 
    locale.num_support_codesets = 0; 
    locale.support_codesets = NULL; 
 
    server_names.num_of_strings = 1; 
    server_names.string_names = zh_tw_server_strings; 
 
    im_styles.num_support_styles = 1; 
    im_styles.support_styles = support_styles; 
 
    n = 0; 
    XtSetArg( al[n], DIMsNlocale, &locale);n++; 
    XtSetArg( al[n], DIMsNserverName, &server_names);n++; 
    /* use Xi18n protocol */ 
    im_version.highest_major_version = 3; 
    im_version.highest_minor_version = 0; 
    im_version.lowest_major_version = 3; 
    im_version.lowest_minor_version = 0; 
    XtSetArg( al[n], DIMsNversion, &im_version);n++; 
    XtSetArg( al[n], DIMsNsupportStyles, &im_styles);n++; 
    XtSetArg( al[n], DIMsNcreateICCb, CreateICCallback);n++; 
    XtSetArg( al[n], DIMsNdestroyICCb, DestroyICCallback);n++; 
    XtSetArg( al[n], DIMsNprocessEventCb, ProcessEventCallback);n++; 
    XtSetArg( al[n], DIMsNgetFilterEventsCb, GetFilterEventsCallback);n++; 
    XtSetArg( al[n], DIMsNtransport, "X/");n++; 
    ctx = DIMsClassCtxCreate(NULL, "zh_tw_xi18n_exam", al, n); 
 
    locale.language = "zh_CN"; 
    server_names.string_names = zh_cn_server_strings; 
    XtSetArg( al[0], DIMsNlocale, &locale); 
    XtSetArg( al[1], DIMsNserverName, &server_names); 
    ctx = DIMsClassCtxCreate(ctx, "zh_cn_xi18n_exam", al, n); 
 
    
    locale.language = "ko_KR"; 
    server_names.string_names = ko_kr_server_strings; 
    XtSetArg( al[0], DIMsNlocale, &locale); 
    XtSetArg( al[1], DIMsNserverName, &server_names); 
    ctx = DIMsClassCtxCreate(ctx, "ko_kr_xi18n_exam", al, n); 
 
    
    locale.language = "ja_JP"; 
    server_names.string_names = ja_jp_server_strings; 
    XtSetArg( al[0], DIMsNlocale, &locale); 
    XtSetArg( al[1], DIMsNserverName, &server_names); 
    ctx = DIMsClassCtxCreate(ctx, "ja_jp_xi18n_exam", al, n); 
 
    XSetErrorHandler(IgnorXErrors); 
 
/* Initialize IMSSL */ 
    DIMsSLInitialize(toplevel, ctx); 
 
/* Realize widget hierrachy */ 
    XtRealizeWidget(toplevel); 
 
/* Initialize protocol layer */ 
    DIMsProtoInit(toplevel, app_context); 
 
    XtAppMainLoop(app_context); 
} 


前へ 目次