Provided by: libcanna1g-dev_3.7p3-12_amd64 bug

NAME

       UILib_intro — User interface library intro

DESCRIPTION

       User  interface  libraries are responding to one-chracter or one-key input, return various
       kinds of information.  They include the unfixed character string, fixed character  string,
       marked  segment  position,  status  display character string, and candidate list character
       string.

       The application program displays the data according to the returned information.   It  can
       also  control mode transition by triggering through something other than key pressing (for
       example, selection through the mouse).

       The user interface library provides jrKanjiString and jrKanjiControl for the input through
       the  TTY.  It also provides XLookupKanjiString and XKanjiControl for the input through the
       X window.

       Use of the user interface library requires the following:

       -  Through the TTY:

          Function            jrKanjiString, jrKanjiControl

          Header file         canna/jrkanji.h

          Library             libcanna.a, libcanna.so

       -  Through the X window:

          Function            XLookupKanjiString, XKanjiControl

          Header file         canna/kanji.h

          Library             libXn.a, libXn.so, libcanna.a, libcanna.so

Outline

       jrKanjiString       Converts ordinary keyboard input (input through the TTY, input with X)
                           into Kanji strings.

       jrKanjiControl      Executes  the  control  with  jrKanjiString according to the specified
                           parameters.

       XLookupKanjiString  Converts the keyboard input (key event) into Kanji strings  in  the  X
                           window system.

       XKanjiControl       Executes   the   control  with  XLookupKanjiString  according  to  the
                           specified parameters.

NAME

       jrKanjiString — Kana-to-Kanji Conversion for ordinary keyboard input

SYNOPSIS

       #include <canna/jrkanji.h>
       int jrKanjiString(context_id, ch, buffer_return, bytes_buffer, kanji_status_return)
       int context_id;
       int ch;
       char *buffer_return;
       int bytes_buffer;
       jrKanjiStatus *kanji_status_return;

DESCRIPTION

       jrKanjiString converts ordinary keyboard input (input through the TTY, input with X)  into
       Kanji strings.

       jrKanjiString is a convenient routine which returns the character strings to be displayed.
       To convert the key  input  represented  in  ASCII  code,  into  the  Japanese  characters,
       jrKanjiString  specifies  the  input  key  code using ch.  Romaji-to-Kana or Kana-to-Kanji
       Conversion is executed in jrKanjiString.

       For a function or cursor key, specify a special code (listed in ``FUNCTION  KEYS''  below)
       to jrKanjiString.  Do not specify the sequence caused by the key.

       For  the  context  identifier  specified  in  context_id,  the value is not used as it is.
       Instead, a context that uses the context identifier as the key is created and used.  Thus,
       the  application  program may specify any value for the context identifier to be specified
       for jrKanjiString.  It is recommended that the input port's file descriptor  be  specified
       for  this  identifier.   If 0 is specified for the identifier, the context prepared as the
       system default will be used by way of exception.

       It is recommended that 0 be specified unless particular  consideration  is  given  to  the
       context.   The  intermediate result to be displayed is returned to the application through
       kanji_status_return.

       Responding to the input, it is necessary to display the intermediate result of  Romaji-to-
       Kana  or  Kana-to-Kanji  Conversion.  The application must display the intermediate result
       according to the information returned by kanji_status_return,  which  is  a  jrKanjiStatus
       type structure.

       The jrKanjiStatus structure is defined as follows:

       typedef struct {
         unsigned char *echoStr; /* Character string for local echo */
         int           length;   /* Length of the local echo character string */
         int           revPos;   /* Offset to the reverse display field
                                    within local echo character string */
         int           revLen;   /* Length of the reverse display within
                                    local echo echo character string */
         unsigned long info;     /* Other information */
         unsigned char *mode;    /* Mode information */
         struct {
           unsigned char *line;  /* Candidate list character string */
           int           length; /* Length of candidate list character string */
           int           revPos; /* Offset to the reverse display field
                                    within candidate list character string */
           int           revLen; /* Length of reverse display field within
                                    candidate list character string */
         } gline;                /* Information about the candidate list*/
       } jrKanjiStatus;

       When  Kana-to-Kanji  conversion  is  used  during  Japanese input, information such as the
       readings to be converted need to be echoed (local echo).  jrKanjiString does  not  perform
       display  such as local echo.  Instead, it returns the character strings to be submitted to
       local echo, to the application by using the jrKanjiStatus structure.

       The EUC character strings to  be  submitted  to  local  echo  include  characters  already
       converted into Kana from Romaji and conversion candidate characters.  Until the conversion
       is fixed, they are returned by the echoStr member.  At this time, the length of local echo
       character string is returned by the length member.  Also, the starting position and length
       (bytes)  of  reverse  display  area  are  returned  by  the  revPos  and  revLen   member,
       respectively.   The  buffer  for local echo character strings is reserved automatically by
       jrKanjiString.  It must be used only for reading.  No character  string  must  be  written
       into this buffer.

       If  no character string is to be submitted to local echo, 0 will be returned by the length
       member.

       The contents to be submitted to local echo may be  the  same  as  when  jrKanjiString  was
       previously  called.  (This occurs, for example, when a control code is pressed and the key
       is disabled.)  In this case, -1 returns to the length member.

       Mode changes and existence of information about the candidate list are passed by the  info
       member.  If info member's KanjiModeInfo bit is on, the character string indicating the new
       mode will return to mode.  If the info  member's  KanjiGLineInfo  bit  is  on,  the  gline
       structure has contained information such as the candidate list.

       The  character  string  for  candidate  list display returns to the gline structure's line
       member.  The length, reverse dispaly starting position, and reverse  display  duration  of
       the  candidate  list  character  string  return to the gline structure's line, revPos, and
       revLen, respectively.

       If there is an EUC character string fixed during conversion, it will be stored into buffer
       buffer_return.   In this case, the length (bytes) of this character string will return. If
       there is no fixed character string, the return  value  will  be  0.   Using  bytes_buffer,
       specify   the  size  of  the  buffer  that  is  to  contain  the  fixed  character  string
       (buffer_return).  If the fixed character string is  longer  than  bytes_buffer,  only  the
       bytes_buffer substring is stored into buffer_return.  In this case, the value specified in
       bytes_buffer will be the return value of jrKanjiString.

FUNCTION KEYS

       For any function key that issue an Escape sequence, specify one of the following codes  as
       ch instead of the Escape sequence:

       Logical name
                   Code

       Nfer        CANNA_KEY_Nfer

       Xfer        CANNA_KEY_Xfer

       Up          CANNA_KEY_Up

       Left        CANNA_KEY_Left

       Right       CANNA_KEY_Right

       Down        CANNA_KEY_Down

       Insert      CANNA_KEY_Insert

       Rollup      CANNA_KEY_Rollup

       Rolldown    CANNA_KEY_Rolldown

       Home        CANNA_KEY_Home

       Help        CANNA_KEY_Help

       S-Nfer      CANNA_KEY_Shift_Nfer

       S-Xfer      CANNA_KEY_Shift_Xfer

       S-Up        CANNA_KEY_Shift_Up

       S-Left      CANNA_KEY_Shift_Left

       S-Right     CANNA_KEY_Shift_Right

       S-Down      CANNA_KEY_Shift_Down

       C-Nfer      CANNA_KEY_Control_Nfer

       C-Xfer      CANNA_KEY_Control_Xfer

       C-Up        CANNA_KEY_Control_Up

       C-Left      CANNA_KEY_Control_Left

       C-Right     CANNA_KEY_Control_Right

       C-Down      CANNA_KEY_Control_Down

       F1          CANNA_KEY_F1

       PF1         CANNA_KEY_PF1

SEE ALSO

       jrKanjiControl(3)

RETURN VALUE

       If  an  error  occurs  during input processing, -1 will return as the return value of this
       function.   In  this  case,  the  error  message  will  be  stored  in  external  variable
       (char*)jrKanjiError.

       If  a  call  to this function causes a character string to be fixed, the length (bytes) of
       this character string will return.  Otherwise, 0 will return.

NAME

       jrKanjiControl — Control the jrKanjiControl modes and processes

SYNOPSIS

       #include <canna/jrkanji.h>
       int jrKanjiControl(context_id, request, arg)
       int context_id;
       int request;
       char *arg;

DESCRIPTION

       jrKanjiControl executes process request for conversion context context_id.  Some processes
       are accompanied by the argument, specified in arg.

       jrKanjiControl controls the following 13 functions:

       request name      Function

       KC_INITIALIZE     Initializes Kana-to-Kanji conversion.

       KC_CHANGEMODE     Changes the input mode.

       KC_SETWIDTH       Specifies the width used to display the candidate

       KC_FINALIZE       Finalizes (terminates) Kana-to-Kanji conversion processing.

       KC_SETUNDEFKEYFUNCTION
                         Sets a function for an undefined key.

       KC_SETMODEINFOSTYLE
                         Specifies whether mode information is represented in numeric form.

       KC_KAKUTEI        Fixes the currently entered character string.

       KC_KILL           Deletes the currently entered character string.

       KC_QUERYMODE      Queries about the current mode.

       KC_SETSERVERNAME  Specifies the server to be connected.

       KC_SETINITFILENAME
                         Specifies the customize file.

       KC_CLOSEUICONTEXT Closes the context.

       KC_QUERYMAXMODESTR
                         Obtains the maximum length of mode display character string.

       Basically,  jrKanjiControl  is  enabled only for something specified in the context.  This
       rule does not apply to the initialize and terminate processes.

       The unfixed character string condition may change,  or  details  of  the  mode  may  vary,
       depending  on  the  jrKanjiControl  operation.   If  this may occur, pass the pointer to a
       structure that can contain the varied information in the arg  field.   This  structure  is
       defined as follows:

       typedef struct {
         int      val;          /* The length of the character string in the
                                   buffer returns. */
         unsigned char *buffer; /* Specifies the buffer used to store the
                                   fixed character string. */
         int      bytes_buffer; /* Specifies the size of the above buffer. */
         jrKanjiStatus *ks;     /* Pointer to the structure that contains
                                   information about the unfixed character string. */
       } jrKanjiStatusWithValue;

       The jrKanjiControl functions can be executed in the following ways:

       (1)   KC_INITIALIZE — Initializes Kana-to-Kanji conversion.

             KC_INITIALIZE  initializes  Kana-to-Kanji  conversion by specifying KC_INITIALIZE in
             the request field.  Specify one of the following in arg: (1) the pointer to the char
             ** type variable used to store the warning message and (2) NULL.

             The  initialize process is basically executed automatically when jrKanjiString(3) is
             first called.  This is skipped by using jrKanjiControl for initialization.

             For  example,  when  control  about  Kana-to-Kanji  conversion  is  executed   using
             jrKanjiControl  before  use  of  jrKanjiString(3),  Kana-to-Kanji conversion must be
             initialized.

             When the process terminates normally, 0 returns as the jrKanjiControl return  value.
             When it terminates abnormally, -1 returns.

             When KC_INITIALIZE is executed, a warning, rather than an error, may occur.  When it
             occurs, the pointer to the warning character string array is stored in  and  returns
             to the variable specified in arg.  If no warning occurs, NULL is stored and returns.

             (Example)
               int res; /* Prepare for error return */
               char **warning;
               .....
               res = jrKanjiControl(0, KC_INITIALIZE, &warning);
               if (warning) {
                 char **p;

                 for (p = warning ; *p ; p++) {
                   fprintf(stderr, "%s0, *p);
                 }
               }

             In  the  library,  malloc  is  done  for  the warning message returning to the third
             argument.  This message is freed when KC_INITIALIZE or KC_FINALIZE is executed next.
             The application programmer must not free it.  The maximum number of warning messages
             is restricted to 64 now.  The subsequent ones are discarded.

             The following warnings may be included in a message:

             -  All customize files including those of the system are unavailable.

             -  The customize file contains a syntax error.

             -  The Romaji-to-Kana conversion dictionary is unavailable.

             -  The Kana-to-Kanji conversion dictionary is unavailable.

             -  Connection to the Kana-to-Kanji conversion server is disabled.

             If NULL is specified as the third argument, any warning message will be discarded.

       (2)   KC_CHANGEMODE — Changes the input mode.

             KC_CHANGEMODE changes the input mode from the application.  Specify KC_CHANGEMODE in
             the request field.  Specify the jrKanjiStatusWithValue structure in arg.

             The  Japanese  mode  is changed by specifying the mode number with the val member of
             jrKanjiStatusWithValue structure.  The mode number is  indicated  by  the  following
             macros:

             Macro number            Mode

             CANNA_MODE_AlphaMode    Alphabet mode

             CANNA_MODE_HenkanMode   Conversion input mode

             CANNA_MODE_KigoMode     Symbol input mode

             CANNA_MODE_ZenHiraKakuteiMode
                                     Full-wide Hiragana fixed input mode

             CANNA_MODE_ZenKataKakuteiMode
                                     Full-wide Katakana fixed mode

             CANNA_MODE_HanKataKakuteiMode
                                     Half-wide Katakana fixed input mode

             CANNA_MODE_ZenAlphaKakuteiMode
                                     Full-wide alphabet fixed input mode

             CANNA_MODE_HanAlphaKakuteiMode
                                     Half-wide alphabet fixed input mode

             CANNA_MODE_HexMode      Hexadecimal code input mode

             CANNA_MODE_BushuMode    Bushu input mode

             CANNA_MODE_TorokuMode   Word register mode

             This  function  causes  much  dispaly (mode name etc.) to vary in response to a mode
             change.  The display change is  returned  by  the  jrKanjiStatusWithValue  structure
             specified as arg.

             (Example)
               jrKanjiStatus ks;
               jrKanjiStatusWithValue ksv;
               unsigned char buf[SOMESIZE];
               .....
               ksv.ks = &ks;
               ksv.buffer = buf;
               ksv.bytes_buffer = SOMESIZE;
               ksv.val = CANNA_MODE_HexMode;

               jrKanjiControl(context, KC_CHANGEMODE, &ksv);
               len = ksv.val;
               .....

             /* Information about the unfixed or fixed character string is returned
                by ksv. */

       (3)   KC_SETWIDTH — Specifies the width used to display the candidate list.

             KC_SETWIDTH  specifies the number of columns of the area on which the candidate list
             is to be displayed.  The width of one column equals that of an alphabetical or half-
             wide  Katakana  character.   Each  full-wide  Kanji  character occupies two columns.
             Using KC_SETWIDTH, specify the width of candidate list display area to be  specified
             in the request field.  At this time, specify the number of columns in arg.

             (Example)
               jrKanjiControl(0, KC_SETWIDTH, (char *)60);

       (4)   KC_FINALIZE — Finalizes (terminates) processing of Kana-to-Kanji conversion

             KC_FINALIZE  specifies  that Kana-to-Kanji conversion also finalizes (terminates) at
             the end of the program and in other cases.
              Be  sure  to  execute  this  process  when  terminating  Kana-to-Kanji   conversion
             processing.   All  contents  learned  up to now are registered in the file.  Specify
             KC_FINALIZE in the request field.

             When the process terminates normally, 0 returns.  When it terminates abnormally,  -1
             returns.

             When  KC_FINALIZE  is executed, a warning, rather than an error, may occur.  When it
             occurs, the pointer to the warning character string array is stored in  and  returns
             to the variable specified in arg.  If no warning occurs, NULL is stored and returns.

             (Example)
               int res; /* Prepare for error return */
               char **warning;
               .....
               res = jrKanjiControl(0, KC_FINALIZE, &warning);
               if (warning) {
                 char **p;

                 for (p = warning ; *p ; p++) {
                   fprintf(stderr, "%s0, *p);
                 }
               }

             In  the  library,  malloc  is  done  for  the warning message returning to the third
             argument.  This message is freed when KC_INITIALIZE or KC_FINALIZE is executed next.
             The application programmer must not free it.

             The maximum number of warning messages is restricted to 64 now.  The subsequent ones
             are discarded.

             The following warning may be included in a message:

             -  The dictionary cannot be unmounted.

             If NULL is specified as the third argument, any warning message will be discarded.

       (5)   KC_SETUNDEFKEYFUNCTION — Sets a function for an undefined key.

             For example, if you press CTRL-t during input  of  a  reading,  it  is  regarded  as
             undefined  key input.  The following processes are executed, responding to undefined
             key input:

             Macro name  Process

             kc_normal   Beep

             kc_through  Passes the input to the application

             kc_kakutei  Fixes the input and passes it to the application program.

             kc_kill     Deletes the input and passes it to the application program.

             If kc_normal is specified, the function  set  in  external  variable  jrBeepFunc  is
             called automatically by the library when an undefined key is input.  If the value is
             not set in jrBeepFunc, nothing occurs when ``jrBeepFunc == NULL'' appears.

             (Example)
               extern (*jrBeepFunc)(), beep();

               jrBeepFunc = beep;
               jrKanjiControl(0, KC_SETUNDEFKEYFUNCTION, kc_normal);

       (6)   KC_SETMODEINFOSTYLE — Specifies mode information representation.

             You may want to display mode information with data such as the bit map, rather  than
             character  strings.   In this case, return of numeric data as mode information helps
             you execute the process.  Specify KC_SETMODEINFOSTYLE in jrKanjiControl, and pass  1
             to  arg.   After  this,  one character representing the mode code (numeric) plus ´@'
             (0x40) returns to the jrKanjiStatus structure's mode member.  To convert  the  value
             into the mode code, subtract '@' (0x40) from the returned character string.  For the
             mode codes, see the mode change description of Item (2) KC_CHANGEMODE.

       (7)   KC_KAKUTEI, (8) KC_KILL — Kill the currently input character string.

             You may want to relinquish the currently entered character string for  some  reason.
             There  are  two  relinquishing  methods.   One is to relinquish the character string
             after including the currently entered character string as a fixed one.  The other is
             to  discard  the  character  string  completely  then  relinquish it.  For the first
             method, specify KC_KAKUTEI  in  jrKanjiControl.   For  the  second  method,  specify
             KC_KILL.

             Each  of  the above influences the display.  The jrKanjiStatusWithValue must thus be
             specified as the third argument.

             (Example)
               jrKanjiStatusWithValue ksv;
               jrKanjiStatus ks;
               unsigned char buf[SOMESIZE];
               .....
               ksv.ks = &ks;
               ksv.buffer = buf;
               ksv.bytes_buffer = SOMESIZE;

               jrKanjiControl(context, KC_KAKUTEI, &ksv);
               len = ksv.val;
               .....

       (9)   KC_QUERYMODE — Inquiry about the mode

             To inquire about the current mode, specify KC_QUERYMODE in jrKanjiControl.

             Specify the pointer to the character array in which the mode character string is  to
             be  stored.   The  mode  character  string  is a character string ending with a null
             character.  To return a numeric here, specify KC_SETMODEINFOSTYLE in  jrKanjiControl
             to change the mode character string style.

             (Example)
               char currentMode[MAXMODELEN];
               .....
               jrKanjiControl(0, KC_QUERYMODE, currentMode);
               .....

       (10)  KC_SETSERVERNAME   Specifies the server to be connected.

             KC_SETSERVERNAME  enables  you to switch the Kana-to-Kanji conversion server without
             terminating the application program.  To set the server to connect as  the  Kana-to-
             Kanji  conversion  server, specify KC_SETSERVERNAME in jrKanjiControl.  In the third
             argument, specify the name of the server to be connected.

       (11)  KC_SETINITFILENAME — Specifies the customize file.

             KC_SETINITFILENAM enables the application program to change the customize file.   To
             change the customize file, specify KC_SETINITFILENAME as the second argument and the
             file name character string as the third argument.  This  process  must  be  executed
             before KC_INTIALIZE.

             (Example)
               char *inifile = "app-own.canna"
               .....
               jrKanjiControl(0, KC_SETINITFILENAME, initfile);
               .....

       (12)  KC_CLOSEUICONTEXT   Closes the context.

             Any  integer  may  be  assigned  as  the  context  ID that represents the conversion
             context.  A context ID that has never been used can be assigned to jrKanjiString  or
             jrKanjiControl.   In  this  case,  initialization  for  this  context is executed to
             reserve the required memory.

             If an input port used up to now is not  used,  you  may  want  to  free  the  memory
             reserved for the context ID assigned to this port.  To do so, call jrKanjiControl by
             specifying KC_CLOSEUICONTEXT as the second argument.

             Because this process causes a display change, specify jrKanjiStatusWithValue as  the
             third structure.

             (Example)
               jrKanjiStatusWithValue ksv;
               jrKanjiStatus ks;
               unsigned char buf[SOMESIZE];
               .....
               ksv.ks = &ks;
               ksv.buffer = buf;
               ksv.bytes_buffer = SOMESIZE;

               jrKanjiControl(0, KC_CLOSEUICONTEXT, &ksv);
               .....

       (13)  KC_QUERYMAXMODESTR — Obtains the maximum length of mode display character string.

             The  mode  display character string can be customized using the initialize file.  It
             is necessary to examine the size of the display area (in  the  customized  resulting
             mode  display  character string) that is to be reserved.  Specify KC_QUERYMAXMODESTR
             as the second argument, then call  jrKanjiControl.   As  a  result,  the  number  of
             columns  necessary for the mode display character string is returned.  The number of
             columns is represented, defining  that  the  width  of  one  half-wide  alphanumeric
             character is 1.

             The third argument is unused; dummy value 0 is assigned to it.

             (Example)
               int max_mode_columns;
               .....
               max_mode_columns = jrKanjiControl(0, KC_QUERYMAXMODESTR, 0);
               .....

NAME

       XLookupKanjiString — Converts the keyboard input into Kanji

SYNOPSIS

       #include <X11/Xlib.h>
       #include <X11/kanji.h>

       int
       XLookupKanjiString(event_struct, buffer_return, bytes_buffer,
                          keysym_return, status_return, kanji_status_return)
               XKeyEvent *event_struct;
               char *buffer_return;
               int bytes_buffer;
               KeySym *keysym_return;
               XComposeStatus *status_return;
               XKanjiStatus *kanji_status_return;

ARGUMENTS

              event_struct    Specifies the key event.

              buffer_return   Returns the resulting Kanji string.

              bytes_buffer    Specifies the buffer length.

              keysym_return   Returns the key symbol.  NULL may be specified

              status_return   Specifies the pointer to the XCompose structure.

              kanji_status_return
                              Returns the Kana-to-Kanji conversion status.

DESCRIPTION

       XLookupKanjiString  is  a  convenient  routine that associates a key event with a Japanese
       character string.  It uses the modifier key bit to processes  such  as  shift,  lock,  and
       control.

       XLookupKanjiString enables eight- and 16-bit Japanese characters to be processed.

       XLookupKanjiString processes alphabetical characters in the same way as XLookupString.

       For  Japanese character processing, Romaji-to-Kana conversion and Kana-to-Kanji conversion
       are done in this function.  The XKanjiStatus, defined below, is used during Japanese  data
       input:

            typedef struct _XKanjiStatus {
                unsigned char *echoStr;     /* local echo string */
                int length;                  /* length of echo string */
                int revPos;                 /* reverse position  */
                int revLen;                 /* reverse length    */
                unsigned long info;       /* other information */
                unsigned char *mode; /* mode information */
                struct {
                 unsigned char *line;     /* a grance of Kanji characters */
                 int length;         /* length of it */
                 int revPos;         /* reverse position of it */
                 int revLen;         /* reverse length of it */
                } gline;             /* a grancing line information */
            } XKanjiStatus;

            #define KanjiModeInfo    01
            #define KanjiGLineInfo   02

       When  Kana-to-Kanji  conversion  is  used  during  Japanese input, information such as the
       readings to be converted need to be echoed  (local  echo).   XLookupKanjiString  does  not
       perform  display  such  as  local  echo.   Instead, it returns the character strings to be
       submitted to local echo, to the application by using the XKanjiStatus structure.

       The EUC character strings to  be  submitted  to  local  echo  include  characters  already
       converted into Kana from Romaji and conversion candidate characters.  Until the conversion
       is fixed, they are returned by the echoStr member.  At this time, the length of local echo
       character string is returned by the length member.  Also, the starting position and length
       (bytes) of reverse display are returned by the revPos  and  revLen  member,  respectively.
       The   buffer   for   local   echo   character   strings   is   reserved  automatically  by
       XLookupKanjiString.  It should be used only for reading.   No  character  string  must  be
       written into this buffer.

       If  no  character  string  is  to  be submitted to local echo, 0 will return to the length
       member.

       The contents to be submitted to local echo may be the same as when XLookupKanjiString  was
       previously  called.   (This  occurs, for example, when the Shift key is pressed.)  In this
       case, -1 returns to the length member.

       Mode changes and existence of information about the candidate list are passed by the  info
       member.  If info member's KanjiModeInfo bit is on, the character string indicating the new
       mode will return to mode.  If the info  member's  KanjiGLineInfo  bit  is  on,  the  gline
       structure has contained information such as the candidate list.

       The  character  string  for  candidate  list display returns to the gline structure's line
       member.  The length, reverse dispaly starting position, and reverse  display  duration  of
       the  candidate  list  character  string  return to the gline structure's line, revPos, and
       revLen, respectively.

       If there is an EUC character  string  fixed  during  conversion,  it  will  be  stored  in
       buffer_return.   In  this case, the length (bytes) of this character string will return as
       the return value of this function.  If there is no  fixed  character  string,  the  return
       value will be 0.

NAME

       XKanjiControl — Control the XLookupKanjiString mode and process.

SYNOPSIS

       #include <X11/kanji.h>
       int XKanjiControl(dpy, win, request, arg)
       Display dpy;
       Window win;
       int request;
       char *arg;

DESCRIPTION

       XKanjiControl  executes a process that relates to Japanese input within the window defined
       by dpy and win.  The process is specified in request.  Some processes are  accompanied  by
       the argument, specified in arg.

       XKanjiControl controls the following functions:

       request name      Function

       KC_INITIALIZE     Initializes Kana-to-Kanji conversion.

       KC_CHANGEMODE     Changes the input mode.

       KC_SETWIDTH       Specifies the width used to display the candidate

       KC_FINALIZE       Finalizes (terminates) Kana-to-Kanji conversion processing.

       KC_SETUNDEFKEYFUNCTION
                         Sets a function for an undefined key.

       KC_SETMODEINFOSTYLE
                         Specifies whether mode information is represented in numeric form.

       KC_KAKUTEI        Fixes the currently entered character string.

       KC_KILL           Deletes the currently entered character string.

       KC_QUERYMODE      Queries about the current mode.

       KC_SETSERVERNAME  Specifies the server to be connected.

       KC_SETINITFILENAME
                         Specifies the customize file.

       KC_CLOSEUICONTEXT Closes the context.

       KC_QUERYMAXMODESTR
                         Obtains the maximum length of mode display character string.

       Basically,  XKanjiControl  is  enabled  only  for the window specified in the dpy and win.
       This rule does not apply to the initialize and terminate processes.

       The unfixed character string condition may change,  or  details  of  the  mode  may  vary,
       depending  on  the  XKanjiControl  operation.   If  this  may occur, pass the pointer to a
       structure that can contain the varied information in the arg  field.   This  structure  is
       defined as follows:

       typedef struct {
         int      val;          /* The length of the character string in the
                                   buffer returns. */
         unsigned char *buffer; /* Specifies the buffer used to store the
                                   fixed character string. */
         int      bytes_buffer; /* Specifies the size of the above buffer. */
         XKanjiStatus *ks;      /* Pointer to the structure that contains
                                   information about the unfixed character string. */
       } XKanjiStatusWithValue;

       The XKanjiControl functions can be executed in the following ways:

       (1)   KC_INITIALIZE — Initializes Kana-to-Kanji conversion.

             KC_INITIALIZE  initializes  Kana-to-Kanji  conversion by specifying KC_INITIALIZE in
             the request field.  Specify one of the following in arg: (1) the pointer to the char
             **  type  variable  used  to store the warning message and (2) NULL.  The initialize
             process is basically executed  automatically  when  XLookupKanjiString(3)  is  first
             called.  This is skipped by using XKanjiControl for initialization.

             For   example,  when  control  about  Kana-to-Kanji  conversion  is  executed  using
             XKanjiControl before use of XLookupKanjiString(3), Kana-to-Kanji conversion must  be
             initialized.

             When  the  process terminates normally, 0 returns as the XKanjiControl return value.
             When it terminates abnormally, -1 returns.

             When KC_INITIALIZE is executed, a warning, rather than an error, may occur.  When it
             occurs,  the  pointer to the warning character string array is stored in and returns
             to the variable specified in arg.  If no warning occurs, NULL is stored and returns.

             (Example)
               int res; /* Prepare for error return */
               char **warning;
               .....
               res = XKanjiControl(dpy, win, KC_INITIALIZE, &warning);
               if (warning) {
                 char **p;

                 for (p = warning ; *p ; p++) {
                   fprintf(stderr, "%s0, *p);
                 }
               }

             In the library, malloc is done for the  warning  message  returning  to  the  fourth
             argument.  This message is freed when KC_INITIALIZE or KC_FINALIZE is executed next.
             The application programmer must not free it.  The maximum number of warning messages
             is restricted to 64 now.  The subsequent ones are discarded.

             The following warnings may be included in a message:

             -  All customize files including those of the system are unavailable.

             -  The customize file contains a syntax error.

             -  The Romaji-to-Kana conversion dictionary is unavailable.

             -  The Kana-to-Kanji conversion dictionary is unavailable.

             -  Connection to the Kana-to-Kanji conversion server is disabled.

             If NULL is specified as the fourth argument, any warning message will be discarded.

       (2)   KC_CHANGEMODE — Changes the input mode.

             KC_CHANGEMODE changes the input mode from the application.  Specify KC_CHANGEMODE in
             the request  field.   Specify  the  XKanjiStatusWithValue  structure  in  arg.   The
             Japanese  mode  is  changed  by  specifying  the  mode number with the val member of
             XKanjiStatusWithValue structure.  The mode number  is  indicated  by  the  following
             macros:

             Macro number            Mode

             CANNA_MODE_AlphaMode    Alphabet mode

             CANNA_MODE_HenkanMode   Conversion input mode

             CANNA_MODE_KigoMode     Symbol input mode

             CANNA_MODE_ZenHiraKakuteiMode
                                     Full-wide Hiragana fixed input mode

             CANNA_MODE_ZenKataKakuteiMode
                                     Full-wide Katakana fixed mode

             CANNA_MODE_HanKataKakuteiMode
                                     Half-wide Katakana fixed input mode

             CANNA_MODE_ZenAlphaKakuteiMode
                                     Full-wide alphabet fixed input mode

             CANNA_MODE_HanAlphaKakuteiMode
                                     Half-wide alphabet fixed input mode

             CANNA_MODE_HexMode      Hexadecimal code input mode

             CANNA_MODE_BushuMode    Bushu input mode

             CANNA_MODE_TorokuMode   Word register mode

             This  function  causes  much  dispaly (mode name etc.) to vary in response to a mode
             change.  The display change  is  returned  by  the  XKanjiStatusWithValue  structure
             specified as arg.

             (Example)
               XKanjiStatus ks;
               XKanjiStatusWithValue ksv;
               unsigned char buf[SOMESIZE];
               .....
               ksv.ks = &ks;
               ksv.buffer = buf;
               ksv.bytes_buffer = SOMESIZE;
               ksv.val = CANNA_MODE_HexMode;

               XKanjiControl(dpy, win, KC_CHANGEMODE, &ksv);
               len = ksv.val;
               .....
               /* Information about the unfixed or fixed character string is
                  returned by ksv. */

       (3)   KC_SETWIDTH — Specifies the width used to display the candidate list.

             KC_SETWIDTH  specifies the number of columns of the area on which the candidate list
             is to be displayed.  The width of one column equals that of an alphabetical or half-
             wide  Katakana  character.   Each  full-wide  Kanji  character occupies two columns.
             Using KC_SETWIDTH, specify the width of candidate list display area to be  specified
             in the request field.  At this time, specify the number of columns in arg.

             (Example)
               XKanjiControl(dpy, win, KC_SETWIDTH, (char *)60);

       (4)   KC_FINALIZE — Finalizes (terminates) processing of Kana-to-Kanji conversion

             KC_FINALIZE  specifies  that Kana-to-Kanji conversion also finalizes (terminates) at
             the end of the program and in other cases.  Be sure to  execute  this  process  when
             terminating Kana-to-Kanji conversion processing.  All contents learned up to now are
             registered in the file.  Specify KC_FINALIZE in the request field.

             When the process terminates normally, 0 returns.  When it terminates abnormally,  -1
             returns.

             When KC_INITIALIZE is executed, a warning, rather than an error, may occur.  When it
             occurs, the pointer to the warning character string array is stored in  and  returns
             to the variable specified in arg.  If no warning occurs, NULL is stored and returns.

             (Example)
               int res; /* Prepare for error return */
               char **warning;
               .....
               res = XKanjiControl(dpy, win, KC_FINALIZE, &warning);
               if (warning) {
                 char **p;

                 for (p = warning ; *p ; p++) {
                   fprintf(stderr, "%s0, *p);
                 }
               }

             In  the  library,  malloc  is  done  for the warning message returning to the fourth
             argument.  This message is freed when KC_INITIALIZE or KC_FINALIZE is executed next.
             The application programmer must not free it.

             The maximum number of warning messages is restricted to 64 now.  The subsequent ones
             are discarded.

             The following warning may be included in a message:

             -  The dictionary cannot be unmounted.

             If NULL is specified as the fourth argument, any warning message will be discarded.

       (5)   KC_SETUNDEFKEYFUNCTION — Sets a function for an undefined key.

             For example, if you press CTRL-t during input  of  a  reading,  it  is  regarded  as
             undefined  key input.  The following processes are executed, responding to undefined
             key input:

             Macro name  Process

             kc_normal   Beep

             kc_through  Passes the input to the application program.

             kc_kakutei  Fixes the input and passes it to the application program.

             kc_kill     Deletes the input and passes it to the application program.

             If kc_normal is specified, the function  set  in  external  variable  jrBeepFunc  is
             called automatically by the library when an undefined key is input.  If the value is
             not set in jrBeepFunc, nothing occurs when "jrBeepFunc == NULL" appears.

             (Example)
               extern (*jrBeepFunc)(), beep();

               jrBeepFunc = beep;
               XKanjiControl(dpy, win, KC_SETUNDEFKEYFUNCTION, kc_normal);

       (6)   KC_SETMODEINFOSTYLE — Specifies mode information representation.

             You may want to display mode information with data such as the bit map, rather  than
             character  strings.   In this case, return of numeric data as mode information helps
             you execute the process.  Specify KC_SETMODEINFOSTYLE in XKanjiControl, and  pass  1
             to  arg.   After  this,  one character representing the mode code (numeric) plus ´@'
             (0x40) returns to the XKanjiStatus structure's mode member.  To  convert  the  value
             into the mode code, subtract '@' (0x40) from the returned character string.  For the
             mode codes, see the mode change description of Item (2) KC_CHANGEMODE.

       (7)   KC_KAKUTEI, (8) KC_KILL — Kill the currently input character string.

             You may want to relinquish the currently entered character string for  some  reason.
             There  are  two  relinquishing  methods.   One is to relinquish the character string
             after including the currently entered character string as a fixed one.  The other is
             to  discard  the  character  string  completely  then  relinquish it.  For the first
             method, specify KC_KAKUTEI  in  jrKanjiControl.   For  the  second  method,  specify
             KC_KILL.

             Each  of  the  above influences the display.  The XKanjiStatusWithValue must thus be
             specified as the fourth argument.

             (Example)
               XKanjiStatusWithValue ksv;
               XKanjiStatus ks;
               unsigned char buf[SOMESIZE];
               .....
               ksv.ks = &ks;
               ksv.buffer = buf;
               ksv.bytes_buffer = SOMESIZE;

               XKanjiControl(dpy, win, KC_KAKUTEI, &ksv);
               len = ksv.val;
               .....

       (9)   KC_QUERYMODE — Inquiry about the mode

             To inquire about the current mode, specify KC_QUERYMODE in XKanjiControl.

             Specify the pointer to the character array in which the mode character string is  to
             be  stored.   The  mode  character  string  is a character string ending with a null
             character.  To return a numeric here, specify KC_SETMODEINFOSTYLE  in  XKanjiControl
             to change the mode character string style.

             (Example)
               char currentMode[MAXMODELEN];
               .....
               XKanjiControl(dpy, win, KC_QUERYMODE, currentMode);
               .....

       (10)  KC_SETSERVERNAME — Specifies the server to be connected.

             KC_SETSERVERNAME  enables  you to switch the Kana-to-Kanji conversion server without
             terminating the application program.  To set the server to connect as  the  Kana-to-
             Kanji  conversion  server, specify KC_SETSERVERNAME in XKanjiControl.  In the fourth
             argument, specify the name of the server to be connected.

       (11)  KC_SETINITFILENAME — Specifies the customize file.

             KC_SETINITFILENAM enables the application program to change the customize file.   To
             change  the customize file, specify KC_SETINITFILENAME as the third argument and the
             file name character string as the fourth argument.  This process  must  be  executed
             before KC_INTIALIZE.

             (Example)
               char *inifile = "app-own.canna"
               .....
               XKanjiControl(dpy, win, KC_SETINITFILENAME, initfile);
               .....

       (12)  KC_CLOSEUICONTEXT   Closes the context.

             When  XKanjiControl  or  XLookupKanjiString  is  called,  one  conversion context is
             assigned to combination of dpy and win.  Combination of dpy and win not used yet can
             be  specified  for  XKanjiControl  or  XLookupKanjiString.  When this is done, a new
             context is created for the window and the required memory is reserved.

             If a window used up to now is not used, you may want to free the context memory that
             has  been  assigned  to  this  window.   To  do so, call XKanjiControl by specifying
             KC_CLOSEUICONTEXT as the third argument.

             Because this process causes a display change, specify XKanjiStatusWithValue  as  the
             fourth structure.

             (Example)
               XKanjiStatusWithValue ksv;
               XKanjiStatus ks;
               unsigned char buf[SOMESIZE];
               .....
               ksv.ks = &ks;
               ksv.buffer = buf;
               ksv.bytes_buffer = SOMESIZE;

               XKanjiControl(dpy, win, KC_CLOSEUICONTEXT, &ksv);
               .....

       (13)  KC_QUERYMAXMODESTR — Obtains the maximum length of mode display character string.

             The  mode  display character string can be customized using the initialize file.  It
             is necessary to examine the size of the display area (in  the  customized  resulting
             mode  display  character string) that is to be reserved.  Specify KC_QUERYMAXMODESTR
             as the third argument, then call XKanjiControl.  As a result, the number of  columns
             necessary for the mode display character string is returned.  (The number of columns
             is represented, defining that the width of one half-wide alphanumeric  character  is
             1.

             The fourth argument is unused; dummy value 0 is assigned to it.

             (Example)
               int max_mode_columns;
               .....
               max_mode_columns = XKanjiControl(dpy, win, KC_QUERYMAXMODESTR, 0);
               .....

                                                                                 XKANJICONTROL(3)