Back to index

im-sdk  12.3.91
imaux-int.h
Go to the documentation of this file.
00001 /*
00002 Copyright 1990-2001 Sun Microsystems, Inc. All Rights Reserved.
00003 
00004 Permission is hereby granted, free of charge, to any person obtaining a
00005 copy of this software and associated documentation files (the
00006 "Software"), to deal in the Software without restriction, including
00007 without limitation the rights to use, copy, modify, merge, publish,
00008 distribute, sublicense, and/or sell copies of the Software, and to
00009 permit persons to whom the Software is furnished to do so, subject to
00010 the following conditions: The above copyright notice and this
00011 permission notice shall be included in all copies or substantial
00012 portions of the Software.
00013 
00014 
00015 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
00016 OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
00017 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
00018 IN NO EVENT SHALL THE OPEN GROUP OR SUN MICROSYSTEMS, INC. BE LIABLE
00019 FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
00020 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH
00021 THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE EVEN IF
00022 ADVISED IN ADVANCE OF THE POSSIBILITY OF SUCH DAMAGES.
00023 
00024 
00025 Except as contained in this notice, the names of The Open Group and/or
00026 Sun Microsystems, Inc. shall not be used in advertising or otherwise to
00027 promote the sale, use or other dealings in this Software without prior
00028 written authorization from The Open Group and/or Sun Microsystems,
00029 Inc., as applicable.
00030 
00031 
00032 X Window System is a trademark of The Open Group
00033 
00034 OSF/1, OSF/Motif and Motif are registered trademarks, and OSF, the OSF
00035 logo, LBX, X Window System, and Xinerama are trademarks of the Open
00036 Group. All other trademarks and registered trademarks mentioned herein
00037 are the property of their respective owners. No right, title or
00038 interest in or to any trademark, service mark, logo or trade name of
00039 Sun Microsystems, Inc. or its licensors is granted.
00040 
00041 */
00042 
00043 /*
00044  * $Id: imaux-int.h,v 1.4 2005/04/04 02:54:48 bt150191 Exp $
00045  */
00046 
00047 #ifndef _IIIMP_AUX_P_H
00048 #define _IIIMP_AUX_P_H
00049 
00050 #include <iiimcf.h>
00051 #include <X11/Xlib.h>              /* inevitable X dependency */
00052 
00053 #define AUX_DIR_SYMBOL             "aux_dir"
00054 #define AUX_CONF_MAGIC             "# IIIM X auxiliary"
00055 #define AUX_INFO_SYMBOL            "aux_info"
00056 
00057 
00058 
00059 typedef struct _aux aux_t;
00060 //typedef struct _aux_ic_data      aux_ic_data_t;
00061 typedef IIIMInputContext    aux_ic_data_t;
00062 typedef struct _aux_service aux_service_t;
00063 typedef struct _aux_im_data aux_im_data_t;
00064 
00065 struct _aux {
00066   aux_ic_data_t *ic;        /* input context */
00067   aux_service_t *service;   /* Aux service method */
00068   aux_im_data_t *im;        /* current IM */
00069   aux_im_data_t *im_list;   /* list of IM structure */
00070 };
00071 
00072 typedef enum {
00073   AUX_DATA_NONE = 0,
00074   AUX_DATA_START = 1,
00075   AUX_DATA_DRAW = 2,
00076   AUX_DATA_DONE = 3,
00077   AUX_DATA_SETVALUE = 4,
00078   AUX_DATA_GETVALUE = 5,
00079   AUX_DATA_GETVALUE_REPLY = 6
00080 } aux_data_type_t;
00081 
00082 typedef struct {
00083   int length;
00084   unsigned char *ptr;
00085 } aux_string_t;
00086 
00087 typedef struct {
00088   aux_data_type_t type;
00089   int im;
00090   int ic;
00091   int aux_index;
00092   int aux_name_length;
00093   unsigned char *aux_name;
00094   int integer_count;
00095   int *integer_list;
00096   int string_count;
00097   aux_string_t *string_list;
00098   unsigned char *string_ptr;
00099 } aux_data_t;
00100 
00101 struct _aux_service {
00102   void (*aux_setvalue)(aux_t *, const unsigned char *, int);
00103   int  (*im_id)(aux_t *);
00104   int  (*ic_id)(aux_t *);
00105   void (*data_set)(aux_t *, int, void *);
00106   void *(*data_get)(aux_t *, int);
00107   Display *(*display)(aux_t *);
00108   Window (*window)(aux_t *);
00109   XPoint *(*point)(aux_t *, XPoint *);
00110   XPoint *(*point_caret)(aux_t *, XPoint *);
00111   size_t (*utf16_mb)(const char **, size_t *,
00112                    char **, size_t *);
00113   size_t (*mb_utf16)(const char **, size_t *,
00114                    char **, size_t *);
00115   unsigned char *(*compose)(const aux_data_t *, int *);
00116   int (* compose_size)(aux_data_type_t,
00117                      const unsigned char *);
00118   aux_data_t *(*decompose)(aux_data_type_t, const unsigned char *);
00119   void (*decompose_free)(aux_data_t *);
00120   void (*register_X_filter)(Display *, Window, int, int, 
00121                          Bool (*filter)(Display *,
00122                                       Window,
00123                                       XEvent *,
00124                                       XPointer),
00125                          XPointer);
00126   void (*unregister_X_filter)(Display *, Window,
00127                            Bool (* filter)(Display *,
00128                                          Window,
00129                                          XEvent *,
00130                                          XPointer),
00131                            XPointer);
00132   Bool (*server)(aux_t *);
00133   Window (*client_window)(aux_t *);
00134   Window (*focus_window)(aux_t *);
00135   int (*screen_number)(aux_t *);
00136   int (*point_screen)(aux_t *, XPoint *);
00137   int (*point_caret_screen)(aux_t *, XPoint *);
00138   Bool (*get_conversion_mode)(aux_t*);
00139   void (*set_conversion_mode)(aux_t*, int);
00140        /* if_version(1st arg of register_service()) >= AUX_IF_VERSION_2 */
00141   void (*aux_getvalue)(aux_t *, const unsigned char *, int);
00142   aux_t *(* aux_get_from_id)(int im_id, int ic_id,
00143                           IIIMP_card16 *aux_name, int aux_name_length);
00144 };
00145 
00146 typedef struct _aux_method {
00147   bool (*create)(aux_t *);
00148   bool (*start)(aux_t *, const unsigned char *, int);
00149   bool (*draw)(aux_t *, const unsigned char *, int);
00150   bool (*done)(aux_t *, const unsigned char *, int);
00151   bool (*switched)(aux_t *, int, int);
00152   bool (*destroy)(aux_t *);
00153        /* aux_info_t.if_version >= AUX_IF_VERSION_2 */
00154   bool (*getvalues_reply)(aux_t *, const unsigned char *, int);
00155   bool (*destroy_ic)(aux_t *);
00156   bool (*set_icforcus)(aux_t *);
00157   bool (*unset_icforcus)(aux_t *);
00158 } aux_method_t;
00159 
00160 typedef struct {
00161   int len;
00162   IIIMP_card16 *ptr;
00163 } aux_name_t;
00164 
00165 typedef struct {
00166   aux_name_t name;
00167   aux_method_t *method;
00168 } aux_dir_t;
00169 
00170 typedef struct {
00171   unsigned int if_version;         /* >= AUX_IF_VERSION_2 */
00172   bool (* register_service)(unsigned int  if_version,
00173                             aux_service_t *service);
00174   aux_dir_t *dir;
00175 } aux_info_t;
00176 #define       AUX_IF_VERSION_2     0x00020000
00177 
00178 typedef struct _aux_entry {
00179   int created;
00180   aux_dir_t dir;
00181   struct _aux_entry *next;
00182   unsigned int if_version;
00183 } aux_entry_t;
00184 
00185 typedef struct _aux_handle {
00186   aux_name_t aux_name;
00187   char *file_name;
00188   void *handle;
00189   aux_entry_t *ae;
00190   int ae_num;
00191   struct _aux_handle *next;
00192 } aux_handle_t;
00193 
00194 struct _aux_im_data {
00195   int im_id;
00196   int ic_id;
00197   aux_entry_t *ae;
00198   void *data;
00199   aux_im_data_t *next;
00200 };
00201 
00202 typedef struct _aux_ic_info {
00203   int im_id;
00204   int ic_id;
00205   aux_ic_data_t *ic_data;
00206   struct _aux_ic_info *next;
00207 } aux_ic_info_t;
00208 
00209 #endif
00210 
00211 /* Local Variables: */
00212 /* c-file-style: "iiim-project" */
00213 /* End: */