1 /*
2  * $Id: xim.h,v 1.2 2001/06/14 18:16:18 ura Exp $
3  */
4 
5 /*
6  * FreeWnn is a network-extensible Kana-to-Kanji conversion system.
7  * This file is part of FreeWnn.
8  *
9  * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999
10  * Copyright 1991, 1992 by Massachusetts Institute of Technology
11  *
12  * Author: OMRON SOFTWARE Co., Ltd. <freewnn@rd.kyoto.omronsoft.co.jp>
13  *
14  * This program is free software; you can redistribute it and/or modify
15  * it under the terms of the GNU General Public License as published by
16  * the Free Software Foundation; either version 2, or (at your option)
17  * any later version.
18  *
19  * This program is distributed in the hope that it will be useful,
20  * but WITHOUT ANY WARRANTY; without even the implied warranty of
21  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22  * GNU General Public License for more details.
23  *
24  * You should have received a copy of the GNU General Public License
25  * along with GNU Emacs; see the file COPYING.  If not, write to the
26  * Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
27  *
28  * Commentary:
29  *
30  * Change log:
31  *
32  * Last modified date: 8,Feb.1999
33  *
34  * Code:
35  *
36  */
37 /*      Version 4.0
38  */
39 /*********
40 
41         xwnmo.h
42 
43 *********/
44 
45 #ifndef XJUTIL
46 #include <X11/Xlib.h>
47 #include <X11/Xutil.h>
48 #include <X11/Xatom.h>
49 #include <X11/keysym.h>
50 #ifdef X11R5
51 #include "Xi18nint.h"
52 #else
53 #include "Xlcint.h"             /* for XLCd */
54 #include <X11/Xlocale.h>        /* for LC_ALL */
55 #endif /* X11R5 */
56 #endif /* !XJUTIL */
57 #include "client.h"
58 
59 #ifndef X11R5
60 typedef wchar_t wchar;
61 #endif /* !X11R5 */
62 
63 #ifndef XJUTIL
64 #include "msg.h"
65 
66 #if !defined(X11R5) && defined(BC_X11R5)
67 /*--------------------- begin of extracting Xi18nint.h --------------------*/
68 #ifdef XML
69 #define XNQueryLanguage         "queryLanguage"
70 #define XNUsingLanguage         "usingLanguage"
71 #define XNCurrentLanguage       "currentLanguage"
72 #define XNChangeLocaleCB        "changeLocaleCB"
73 
74 #define IMQueryLanguage         1
75 
76 #define ICUsingLanguage         28
77 #define ICCurrentLanguage       29
78 #define ICChangeLocaleCB        30
79 #define ICAllMask               0x73ffffff
80 #else /* XML */
81 #define ICAllMask               0x03ffffff
82 #endif /* XML */
83 
84 #define StatusOffset            11
85 /*--------------------- end of extracting Xi18nint.h --------------------*/
86 
87 /*------------------- begin of extracting Xlcint.h ----------------------*/
88 #define ICInputStyle            0
89 #define ICClientWindow          1
90 #define ICFocusWindow           2
91 #define ICFilterEvents          3
92 #define ICArea                  4
93 #define ICAreaNeeded            5
94 #define ICSpotLocation          6
95 #define ICColormap              7
96 #define ICStdColormap           8
97 #define ICForeground            9
98 #define ICBackground            10
99 #define ICBackgroundPixmap      11
100 #define ICFontSet               12
101 #define ICLineSpace             13
102 #define ICCursor                14
103 #define ICResourceClass         26
104 #define ICResourceName          27
105 
106 #define IMQueryInputStyle       0
107 
108 #define IMResourceWrite         1
109 #define IMResourceRead          2
110 #define IMResourceReadWrite     3
111 /*------------------- end of extracting Xlcint.h -----------------------*/
112 #endif /* !defined(X11R5) && defined(BC_X11R5) */
113 
114 #define MaskNeeded      KeyPressMask
115 
116 typedef struct _XIMLangDataBase
117 {
118   char *lang;
119   char *lc_name;
120   int cswidth_id;
121   Status connect_serv;
122   FunctionTable *f_table;
123   Bool read;
124   char *uumrc_name;             /* uumrc file name              */
125   char *rkfile_name;            /* romkan file name             */
126   char *uumkey_name;            /* uumkey file name             */
127   WnnEnv *normal_env;
128   WnnEnv *reverse_env;
129   char *host_name;
130   char *rev_host_name;
131   RomkanTable *rk_table;
132   char *jishopath;
133   char *hindopath;
134   char *fuzokugopath;
135   Bool h_off_def;
136   Bool e_delete;
137   Bool s_ascii_char_def;
138   short m_chg;
139   short m_bunsetsu;
140   short m_history;
141   int t_comment;
142   Bool h_on_kuten;
143 #ifdef  USING_XJUTIL
144   int xjutil_act;
145   Window xjutil_id;
146   int xjutil_pid;
147   struct _XIMClientRec *xjutil_use;
148 #endif                          /* USING_XJUTIL */
149 #ifdef  USING_BUSHU
150   int bushu_act;
151   Window bushu_id;
152   int bushu_pid;
153   struct _XIMClientRec *bushu_use;
154 #endif                          /* USING_BUSHU */
155   struct _XIMLangDataBase *next;
156 }
157 XIMLangDataBase;
158 
159 typedef struct _XIMNestLangRec *XIMNestLangList;
160 
161 typedef struct _XIMNestLangRec
162 {
163   char *lc_name;
164   char *alias_name;
165   XIMLangDataBase *lang_db;
166   struct _XIMNestLangRec *next;
167 }
168 XIMNestLangRec;
169 
170 typedef struct _XIMLcNameRec
171 {
172   char *lc_name;
173   XIMLangDataBase *lang_db;
174   struct _XIMLcNameRec *next;
175 }
176 XIMLcNameRec;
177 
178 typedef struct _XIMRootRec
179 {
180   Window root_window;
181   int screen;
182   struct _XIMClientRec *ximclient;
183   struct _Ichiran *ichi;
184   struct _Inspect *inspect;
185   unsigned int bw;
186   unsigned long bc;
187   char root_visible;
188   char root_visible_flag;
189 }
190 XIMRootRec;
191 
192 typedef struct _XIMCmblk
193 {
194   int sd;
195   int use;
196   Bool byteOrder;
197   int screen;
198 #if defined(XJPLIB) && defined(XJPLIB_DIRECT)
199   int xjp;
200 #endif                          /* defined(XJPLIB) && defined(XJPLIB_DIRECT) */
201 #if !defined(X11R5) && defined(BC_X11R5)
202   int ximr5;                    /* True indicates if client is from X11R5 */
203 #endif                          /* !defined(X11R5) && defined(BC_X11R5) */
204 }
205 XIMCmblk;
206 
207 #endif /* !XJUTIL */
208 
209 #ifdef XJUTIL
210 typedef struct _XIMRootRec
211 {
212   Window root_window;
213   int screen;
214   struct _Ichiran *ichi;
215   struct _JutilRec *jutil;
216   struct _YesOrNo *yes_no;
217   unsigned long fg;
218   unsigned long bg;
219   unsigned int bw;
220   char *fontset_name;
221   GC gc;
222   GC reversegc;
223   GC invertgc;
224 }
225 XIMRootRec;
226 #endif /* XJUTIL */
227 
228 typedef struct _BoxRec
229 {
230   Window window;
231   int x, y;
232   int width, height;
233   int border_width;
234   unsigned long fg, bg, bp;
235   unsigned char *string;
236   GC invertgc;
237   int (*cb) ();
238   int *cb_data;
239   int (*redraw_cb) ();
240   int *redraw_cb_data;
241   int do_ret;
242   int sel_ret;
243   char reverse;
244   char in;
245   char map;
246   char freeze;
247   struct _BoxRec *next;
248 }
249 BoxRec;
250 
251 typedef struct _YesOrNo
252 {
253 #ifndef XJUTIL
254   XIMRootRec *root_pointer;
255 #endif                          /* !XJUTIL */
256   Window w;
257   BoxRec *title;
258   BoxRec *button[2];
259   char map;
260   char exp;
261   int x, y;
262   int mode;
263 }
264 YesOrNo;
265 
266 typedef struct _FromConvCode
267 {
268   KeySym keysym;
269   unsigned int state;
270 }
271 FromConvCode;
272 
273 typedef struct _ConvCode
274 {
275   int tokey;                    /* output keycode */
276   FromConvCode fromkey;         /* input KeySym and state */
277 }
278 ConvCode;
279 
280 #ifdef XJUTIL
281 typedef struct _Keytable
282 {
283   int cnt;
284   Window w;
285   BoxRec *button[MAX_KEY_BUTTON];
286   int max_button;
287   XPoint save_p;
288   char map;
289   char exp;
290 }
291 Keytable;
292 
293 #endif /* XJUTIL */
294 
295 typedef struct _Ichiran
296 {
297   Window w;
298   Window w0;
299   Window w1;
300   BoxRec *title;
301   BoxRec *subtitle;
302   BoxRec *comment;
303   BoxRec *button[MAX_BUTTON];
304   int max_button;
305   GC invertgc;
306   Window nyuu_w;
307   int kosuu;
308   unsigned char *buf[200];
309   unsigned char **save_buf;
310   unsigned char *nyuu;
311   char select_mode;
312   char map;
313   char exp;
314   char lock;
315   unsigned int height, width;
316   int max_line;
317   int start_line;
318   int end_line;
319   int page_height;
320   int page;
321   int cur_page;
322   int kosuu_all;
323   int max_len;
324   int mode;
325   int max_lines;
326   int max_columns;
327   int hilited_item;
328   int hilited_ji_item;
329   int init;
330   int item_width;
331   int item_height;
332   unsigned short save_x, save_y;
333 #ifdef XJUTIL
334   Keytable *keytable;
335 #endif                          /* XJUTIL */
336 }
337 Ichiran;
338 
339 #ifndef XJUTIL
340 typedef struct _XIMAttributes
341 {
342   XRectangle area;
343   XRectangle area_needed;
344   Colormap colormap;
345   Atom std_colormap;
346   unsigned long fg;
347   unsigned long bg;
348   Pixmap bg_pixmap;
349   char *fontset;
350   int line_space;
351   Cursor cursor;
352   GC gc;
353   GC reversegc;
354   GC invertgc;
355 }
356 XIMAttributes;
357 
358 typedef struct _XIMLangRec
359 {
360   XIMNestLangList lc_list;      /* List of locale */
361   XIMNestLangRec *cur_lc;
362   XIMLangDataBase *lang_db;
363   XFontSet pe_fs;
364   XFontSet st_fs;
365   XCharStruct *pe_b_char;
366   XCharStruct *st_b_char;
367 #ifdef X11R5
368   XLocale xlc;
369 #else
370   XLCd xlc;
371 #endif                          /* X11R5 */
372   Window wp[3];                 /*  Parent windows */
373   Window w[3];                  /*  child windows */
374   Window wn[3];                 /*   */
375   Window ws;                    /*  Status window */
376   short linefeed[3];            /*  */
377   short vst;                    /*  */
378   unsigned char max_l1;
379   unsigned char max_l2;
380   unsigned char max_l3;
381   wchar *buf;                   /* Buffer of Preedit */
382   wchar *buf0;                  /* Buffer of Status */
383   unsigned char *att;           /* Attributes of buf */
384   unsigned char *att0;          /* Attributes of buf0 */
385   short currentcol;             /* Current cursor position of Preedit */
386   short currentcol0;            /* Current cursor position of Status */
387   short max_pos;                /* Max cursor position of Preedit */
388   short max_pos0;               /* Max cursor position of Status */
389   short note[2];                /*  */
390   short max_cur;
391   short del_x;
392   unsigned char cursor_flag;
393   unsigned char mark_flag;
394   unsigned char u_line_flag;
395   unsigned char r_flag;
396   unsigned char b_flag;
397   unsigned char visible;
398   unsigned char visible_line;
399   unsigned char m_cur_flag;
400   WnnClientRec *w_c;
401 #ifdef  USING_XJUTIL
402   int xjutil_fs_id;
403   int working_xjutil;
404 #endif                          /* USING_XJUTIL */
405 }
406 XIMLangRec;
407 
408 typedef struct _XIMClientRec *XIMClientList;
409 
410 typedef struct _XIMClientRec
411 {
412   XIMRootRec *root_pointer;
413   char *user_name;
414   char *using_language;
415   int lang_num;
416 #ifndef X11R5
417   Bool sync_needed;             /* if True, need sync */
418   XEvent cur_event;             /* back to client if nofilter */
419   int im_id;                    /* IM id */
420 #endif                          /* X11R5 */
421   int number;                   /* IC id */
422   XIMLangRec **xl;
423   XIMLangRec *cur_xl;
424   XIMStyle input_style;         /* Input style */
425   Window w;                     /* Client window */
426   unsigned long mask;           /*  mask value of each element */
427   XRectangle client_area;       /* Area of client window */
428   Window focus_window;
429   XRectangle focus_area;        /* Area of focus window */
430   XPoint point;
431   unsigned long filter_events;  /* Event mask that IM need */
432   XIMAttributes pe;
433   XIMAttributes st;
434   int fd;                       /* File descripter */
435   short columns;                /*  */
436   short max_columns;            /*  Max columns */
437   short c0;                     /*  column number of first line */
438   short c1;                     /*  column number of first line */
439   short c2;                     /*  column number of third line */
440   short maxcolumns;
441   YesOrNo *yes_no;
442 #ifdef  CALLBACKS
443   unsigned int max_keycode;     /* Max keycode */
444   unsigned char cb_redraw_needed;
445   int cb_pe_start;
446   int cb_st_start;
447 #endif                          /* CALLBACKS */
448   int have_ch_lc;
449   int ch_lc_flg;
450   int have_world;
451   int world_on;
452 #ifdef  XJPLIB
453   int xjp;
454 #endif                          /* XJPLIB */
455   struct _XIMClientRec *next;
456 }
457 XIMClientRec;
458 
459 
460 typedef struct _Inspect
461 {
462   Window w;
463   Window w1;
464   BoxRec *title;
465   BoxRec *button[MAX_BUTTON];
466   int max_button;
467   unsigned char *msg;
468   char map;
469   char exp;
470   char lock;
471   int max_len;
472   unsigned short save_x, save_y;
473 }
474 Inspect;
475 
476 typedef struct _XInputManager
477 {
478   int screen_count;
479   XIMRootRec **root_pointer;
480   int default_screen;
481   XIMRootRec *cur_j_c_root;
482   XIMClientRec *j_c;
483   int client_count;
484   short sel_ret;
485   XIMStyle supported_style[MAX_SUPPORT_STYLE];
486   char *supported_language;
487   char sel_button;
488   char exit_menu;
489   char exit_menu_flg;
490   char save_under;
491 }
492 XInputManager;
493 
494 typedef struct _XIMInputRec *XIMInputList;
495 
496 typedef struct _XIMInputRec
497 {
498   Window w;                     /*  Focus window */
499   XIMClientRec *pclient;        /* Client window structure */
500   struct _XIMInputRec *next;
501 }
502 XIMInputRec;
503 
504 typedef struct _ReadRkfileRec *ReadRkfileList;
505 
506 typedef struct _ReadRkfileRec
507 {
508   char *name;
509   struct _ReadRkfileRec *next;
510 }
511 ReadRkfileRec;
512 
513 extern Display *dpy;
514 extern Atom select_id;
515 extern XPoint button;
516 
517 #define ClientWidth(xc)                 (xc->client_area.width)
518 #define ClientHeight(xc)                (xc->client_area.height)
519 #define ClientX(xc)                     (xc->client_area.x)
520 #define ClientY(xc)                     (xc->client_area.y)
521 
522 #define FocusX(xc)              (xc->focus_window ? \
523                                  xc->focus_area.x : ClientX(xc))
524 #define FocusY(xc)              (xc->focus_window ? \
525                                  xc->focus_area.y : ClientY(xc))
526 #define FocusWidth(xc)          (xc->focus_window ? \
527                                  xc->focus_area.width : ClientWidth(xc))
528 #define FocusHeight(xc)         (xc->focus_window ? \
529                                  xc->focus_area.height : ClientHeight(xc))
530 
531 #define PreeditWidth(xc)        (xc->pe.area.width)
532 #define PreeditHeight(xc)       (xc->pe.area.height)
533 #define PreeditX(xc)            (xc->pe.area.x)
534 #define PreeditY(xc)            (xc->pe.area.y)
535 
536 #define StatusWidth(xc)         (xc->st.area.width)
537 #define StatusHeight(xc)        (xc->st.area.height)
538 #define StatusX(xc)             (xc->st.area.x)
539 #define StatusY(xc)             (xc->st.area.y)
540 
541 #define PreeditSpotX(xc)        (xc->point.x)
542 #define PreeditSpotY(xc)        (xc->point.y)
543 
544 #define FontWidth(xl)           (xl->pe_b_char->width)
545 #define FontAscent(xl)          (xl->pe_b_char->ascent)
546 #define FontDescent(xl)         (xl->pe_b_char->descent)
547 #define FontHeight(xl)          (FontAscent(xl) + FontDescent(xl))
548 #define StatusFontWidth(xl)     (xl->st_b_char->width)
549 #define StatusFontAscent(xl)    (xl->st_b_char->ascent)
550 #define StatusFontDescent(xl)   (xl->st_b_char->descent)
551 #define StatusFontHeight(xl)    (StatusFontAscent(xl) + StatusFontDescent(xl))
552 
553 #define c012(xc)        (xc->c0 + xc->c1 + xc->c2)
554 #define c01(xc)         (xc->c0 + xc->c1)
555 
556 #endif /* !XJUTIL */
557 
558 #if defined(USING_XJUTIL) || defined(XJUTIL)
559 typedef struct _Xjutil_startRec
560 {
561   char uumkey_name[256];
562   char rkfile_name[256];
563   char cvtkey_name[256];
564   char cvtfun_name[256];
565   char cvtmeta_name[256];
566   char user_name[32];
567   char lang[32];
568   char lc_name[32];
569   char f_name[32];
570   char jishopath[256];
571   char hindopath[256];
572   char fuzokugopath[256];
573   unsigned short fn_len;
574   int rubout_code;
575   unsigned short max_env;
576   unsigned short max_reverse_env;
577   int cswidth_id;
578   int save_under;
579 }
580 Xjutil_startRec;
581 
582 typedef struct _Xjutil_envRec
583 {
584   int screen;
585   char lc_name[32];
586   int cswidth_id;
587   int fs_id;
588   unsigned short fn_len;
589   unsigned long fore_ground;
590   unsigned long back_ground;
591   int cur_env_id;
592   int cur_env_reverse_id;
593   int env_is_reverse;
594   int env_id[16];
595   int env_reverse_id[16];
596 }
597 Xjutil_envRec;
598 #endif /* defined(USING_XJUTIL) || defined(XJUTIL) */
599