diff Wnn/uum/functions.c @ 0:bbc77ca4def5

initial import
author Yoshiki Yazawa <yaz@cc.rim.or.jp>
date Thu, 13 Dec 2007 04:30:14 +0900
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Wnn/uum/functions.c	Thu Dec 13 04:30:14 2007 +0900
@@ -0,0 +1,565 @@
+/*
+ *  $Id: functions.c,v 1.3 2001/06/14 18:16:06 ura Exp $
+ */
+
+/*
+ * FreeWnn is a network-extensible Kana-to-Kanji conversion system.
+ * This file is part of FreeWnn.
+ * 
+ * Copyright Kyoto University Research Institute for Mathematical Sciences
+ *                 1987, 1988, 1989, 1990, 1991, 1992
+ * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999
+ * Copyright ASTEC, Inc. 1987, 1988, 1989, 1990, 1991, 1992
+ * Copyright FreeWnn Project 1999, 2000
+ *
+ * Maintainer:  FreeWnn Project   <freewnn@tomo.gr.jp>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/*
+ * Additional Copyright:
+ *
+ *     Copyright 1991 by Massachusetts Institute of Technology
+ */
+
+#include <stdio.h>
+#include "commonhd.h"
+#include "jllib.h"
+#include "sdefine.h"
+#include "sheader.h"
+#include "buffer.h"
+
+void
+conv_ltr_to_ieuc (ltr)
+     register unsigned int *ltr;
+{
+  register int i, j;
+  register unsigned int l;
+  unsigned char tmp[4], c;
+  w_char ret;
+
+  l = *ltr;
+  while (l != EOLTTR)
+    {
+      if (!isSPCL (l))
+        {
+          for (i = 2, j = 0; i >= 0; i--)
+            {
+              if ((c = (l >> ((i) * 8)) & 0xff))
+                tmp[j++] = c;
+            }
+          if (j && (eeuc_to_ieuc (&ret, tmp, j) > 0))
+            {
+              *ltr = (ret | (l & 0xff000000));
+            }
+        }
+      ltr++;
+      l = *ltr;
+    }
+
+}
+
+int
+t_redraw_move_normal (x, start, end, clr_l)
+     int x, start, end, clr_l;
+{
+  c_b->t_c_p = x;
+  if (check_vst ())
+    {
+      t_redraw_one_line ();
+    }
+  else
+    {
+      t_print_line (start, end, clr_l);
+    }
+  throw (cur_ichi (c_b->t_c_p, c_b->vst));
+  flush ();
+  return (0);
+}
+
+int
+t_print_l_normal ()
+{
+  throw_c (0);
+  clr_line ();
+  print_buf_msg (c_b->buf_msg);
+  t_redraw_one_line ();
+  throw (cur_ichi (c_b->t_c_p, c_b->vst));
+  flush ();
+  return (0);
+}
+
+int
+call_t_redraw_move_normal (x, start, end, clt_l, add)
+     int x, start, end, clt_l, add;
+{
+  t_redraw_move (x, start, end, clt_l);
+  return (0);
+}
+
+int
+call_t_redraw_move (x, start, end, clt_l, add)
+     int x, start, end, clt_l, add;
+{
+  (*call_t_redraw_move_func) (x, start, end, clt_l, add);
+  return (0);
+}
+
+int
+call_t_redraw_move_1_normal (x, start, end, clt_l, add1, add2, mode)
+     int x, start, end, clt_l, add1, add2, mode;
+{
+  t_move (x + add2);
+  return (0);
+}
+
+int
+call_t_redraw_move_1 (x, start, end, clt_l, add1, add2, mode)
+     int x, start, end, clt_l, add1, add2, mode;
+{
+  (*call_t_redraw_move_1_func) (x, start, end, clt_l, add1, add2, mode);
+  return (0);
+}
+
+int
+call_t_redraw_move_2_normal (x, start1, start2, end1, end2, clt_l, add)
+     int x, start1, start2, end1, end2, clt_l, add;
+{
+  t_move (x);
+  return (0);
+}
+
+int
+call_t_redraw_move_2 (x, start1, start2, end1, end2, clt_l, add)
+     int x, start1, start2, end1, end2, clt_l, add;
+{
+  (*call_t_redraw_move_2_func) (x, start1, start2, end1, end2, clt_l, add);
+  return (0);
+}
+
+int
+call_t_print_l_normal (x, add)
+     int x, add;
+{
+  t_print_l ();
+  return (0);
+}
+
+int
+call_t_print_l (x, add)
+     int x, add;
+{
+  (*call_t_print_l_func) (x, add);
+  return (0);
+}
+
+int
+c_top_normal ()
+{
+  if (c_b->t_m_start < 0)
+    {
+      t_move (0);
+    }
+  else
+    {
+      t_move (c_b->t_m_start);
+    }
+  return (0);
+}
+
+
+int
+c_end_normal ()
+{
+  t_move (c_b->maxlen);
+  return (0);
+}
+
+int
+char_q_len_normal (x)
+     w_char x;
+{
+  return ((hankaku (x)) ? 1 : 2);
+}
+
+int
+char_len_normal (x)
+     w_char x;
+{
+  return (char_q_len_normal (x));
+}
+
+int
+call_redraw_line_normal (x, add)
+     int x, add;
+{
+  redraw_line ();
+  return (0);
+}
+
+int
+call_redraw_line (x, add)
+     int x, add;
+{
+  (*call_redraw_line_func) (x, add);
+  return (0);
+}
+
+int
+call_jl_yomi_len ()
+{
+  return (jl_yomi_len (bun_data_, cur_bnst_, dai_end (bun_data_, cur_bnst_)));
+}
+
+#ifdef CHINESE
+int
+t_redraw_move_yincod (x, start, end, clr_l)
+     int x, start, end, clr_l;
+{
+  c_b->t_c_p = x;
+  if (check_vst ())
+    {                           /* screen moved */
+      t_redraw_one_line ();
+    }
+  else
+    {
+      t_print_line (start, end, clr_l);
+    }
+
+  if (c_b->t_c_p == c_b->maxlen)
+    kk_cursor_normal ();
+  else
+    kk_cursor_invisible ();
+  throw (cur_ichi (c_b->t_c_p, c_b->vst));
+  flush ();
+  return (0);
+}
+
+int
+t_print_l_yincod ()
+{
+  throw_c (0);
+  clr_line ();
+  print_buf_msg (c_b->buf_msg);
+  t_redraw_move_yincod (c_b->t_c_p, 0, c_b->maxlen, 1);
+  flush ();
+  return (0);
+}
+
+int
+call_t_redraw_move_yincod (x, start, end, clt_l, add)
+     int x, start, end, clt_l, add;
+{
+  int hantentmp;
+  int marktmp;
+
+  if (insert_modep ())
+    {
+      hantentmp = c_b->hanten;
+      marktmp = c_b->t_m_start;
+      c_b->hanten = 0x20 | 0x02 | 0x40 | 0x04;
+      c_b->t_b_st = x;
+      c_b->t_b_end = x + add;
+      c_b->t_m_start = x + add;
+      t_redraw_move_yincod (x, start, end, clt_l);
+      c_b->hanten = hantentmp;
+      c_b->t_m_start = marktmp;
+    }
+  else
+    {
+      t_redraw_move (x, start, end, clt_l);
+    }
+  return (0);
+}
+
+int
+call_t_redraw_move_1_yincod (x, start, end, clt_l, add1, add2, mode)
+     int x, start, end, clt_l, add1, add2, mode;
+{
+  int hantentmp = 0;
+  int marktmp = 0;
+
+  if (mode)
+    {
+      if (mode == 2)
+        {
+          c_b->t_b_st = start;
+          c_b->t_b_end = end;
+        }
+      else if (mode == 3)
+        {
+          marktmp = c_b->t_m_start;
+          c_b->t_b_st = start;
+          c_b->t_b_end = start + add1;
+          c_b->t_m_start = start + add1;
+        }
+      else
+        {
+          hantentmp = c_b->hanten;
+          marktmp = c_b->t_m_start;
+          c_b->hanten = 0x20 | 0x02 | 0x40 | 0x04;
+          c_b->t_b_st = start;
+          c_b->t_b_end = start + add1;
+          c_b->t_m_start = start + add1;
+        }
+      t_redraw_move_yincod (x, start, end, clt_l);
+      if (mode == 3)
+        {
+          c_b->t_m_start = marktmp;
+        }
+      else if (mode == 1)
+        {
+          c_b->hanten = hantentmp;
+          c_b->t_m_start = marktmp;
+        }
+    }
+  else
+    {
+      t_move (x + add2);
+    }
+  return (0);
+}
+
+int
+call_t_redraw_move_2_yincod (x, start1, start2, end1, end2, clt_l, add)
+     int x, start1, start2, end1, end2, clt_l, add;
+{
+  int hantentmp;
+  int marktmp;
+  extern int touroku_mark;
+
+  if (touroku_mark != 1)
+    {
+      hantentmp = c_b->hanten;
+      marktmp = c_b->t_m_start;
+      c_b->hanten = 0x20 | 0x02 | 0x40 | 0x04;
+      c_b->t_b_st = x;
+      c_b->t_b_end = x + add;
+      c_b->t_m_start = x + add;
+      t_redraw_move_yincod (x, start1, end1, clt_l);
+      c_b->hanten = hantentmp;
+      c_b->t_m_start = marktmp;
+    }
+  else
+    {
+      t_redraw_move_yincod (x, start2, end2, clt_l);
+    }
+  return (0);
+}
+
+int
+call_t_print_l_yincod (x, add)
+     int x, add;
+{
+  int hantentmp;
+  int marktmp;
+
+  hantentmp = c_b->hanten;
+  marktmp = c_b->t_m_start;
+  c_b->hanten = 0x20 | 0x02 | 0x40 | 0x04;
+  c_b->t_b_st = x;
+  c_b->t_b_end = x + add;
+  c_b->t_m_start = x + add;
+  t_print_l ();
+  c_b->hanten = hantentmp;
+  c_b->t_m_start = marktmp;
+  return (0);
+}
+
+int
+input_yincod (s1, s2)
+     unsigned int *s1, *s2;
+{
+  char env_s = env_state ();
+  int which = 0;
+
+  if (env_s == 'P')
+    {
+      which = CWNN_PINYIN;
+    }
+  else if (env_s == 'Z')
+    {
+      which = CWNN_ZHUYIN;
+    }
+  else
+    {
+      return (0);
+    }
+  return (cwnn_pzy_yincod (s1, s2, which));
+}
+
+int
+redraw_when_chmsig_yincod ()
+{
+  int hantentmp;
+  int marktmp;
+  char env_s;
+
+  if (env_s = env_state ())
+    {
+      set_cur_env (env_s);
+    }
+  if (insert_modep ())
+    {
+      hantentmp = c_b->hanten;
+      marktmp = c_b->t_m_start;
+      c_b->hanten = 0x40 | 0x04 | 0x20 | 0x02;
+      c_b->t_b_st = c_b->t_c_p;
+      c_b->t_b_end = c_b->t_c_p + 1;
+      c_b->t_m_start = c_b->t_c_p + 1;
+      redraw_line ();
+      c_b->hanten = hantentmp;
+      c_b->t_m_start = marktmp;
+    }
+  else
+    {
+      redraw_line ();
+    }
+  return (0);
+}
+
+int
+c_top_yincod ()
+{
+  int hantentmp = c_b->hanten;
+  int marktmp = c_b->t_m_start;
+  extern int touroku_mark;
+
+  if (touroku_mark != 1)
+    {
+      c_b->hanten = 0x02 | 0x20 | 0x04 | 0x40;
+      if (c_b->t_m_start < 0)
+        {
+          c_b->t_b_st = 0;
+          c_b->t_b_end = 1;
+          c_b->t_m_start = 1;
+          t_redraw_move_yincod (0, 0, c_b->maxlen, 1);
+        }
+      else
+        {
+          c_b->t_b_st = c_b->t_m_start;
+          c_b->t_b_end = c_b->t_m_start + 1;
+          c_b->t_m_start = c_b->t_m_start + 1;
+          t_redraw_move_yincod (c_b->t_b_st, c_b->t_b_st, c_b->maxlen, 1);
+        }
+      c_b->hanten = hantentmp;
+      c_b->t_m_start = marktmp;
+    }
+  else
+    {
+      t_redraw_move_yincod (c_b->t_m_start, c_b->t_m_start, c_b->maxlen, 0);
+    }
+  return (0);
+}
+
+int
+c_end_yincod ()
+{
+  int hantentmp = c_b->hanten;
+  int marktmp = c_b->t_m_start;
+  extern int touroku_mark;
+
+  if (touroku_mark != 1)
+    {
+      c_b->hanten = 0x02 | 0x20 | 0x04 | 0x40;
+      c_b->t_b_st = c_b->maxlen;
+      c_b->t_b_end = c_b->maxlen;
+      c_b->t_m_start = c_b->maxlen;
+      t_redraw_move_yincod (c_b->maxlen, c_b->t_c_p, c_b->maxlen, 1);
+      kk_cursor_normal ();
+      c_b->hanten = hantentmp;
+      c_b->t_m_start = marktmp;
+    }
+  else
+    {
+      t_redraw_move_yincod (c_b->maxlen, c_b->t_m_start, c_b->maxlen, 0);
+    }
+  return (0);
+}
+
+int
+c_end_nobi_yincod ()
+{
+  t_redraw_move_yincod (c_b->maxlen, c_b->t_m_start, c_b->maxlen, 0);
+  return (0);
+}
+
+int
+print_out_yincod (s1, s2, len)
+     w_char *s1, *s2;
+     int len;
+{
+  return (cwnn_yincod_pzy_str (s1, s2, len, ((env_state () == 'P') ? CWNN_PINYIN : CWNN_ZHUYIN)));
+}
+
+int
+char_q_len_yincod (x)
+     w_char x;
+{
+  if (((int) (x & 0x00ff) > 0xa0) && ((int) (x & 0x00ff) < 0xff) && ((int) (x >> 8) > 0xa0) && ((int) (x >> 8) < 0xff))
+    return (2);
+  else
+    return (1);
+}
+
+int
+char_len_yincod (x)
+     w_char x;
+{
+  w_char tmp_wch[10];
+  int len, i, ret_col = 0;
+
+  len = (*print_out_func) (tmp_wch, &x, 1);
+  for (i = 0; i < len; i++)
+    {
+      ret_col += char_q_len_yincod (tmp_wch[i]);
+    }
+  return (ret_col);
+}
+
+int
+call_redraw_line_yincod (x, add)
+     int x, add;
+{
+  int hantentmp;
+  int marktmp;
+
+  if (insert_modep ())
+    {
+      hantentmp = c_b->hanten;
+      marktmp = c_b->t_m_start;
+      c_b->hanten = 0x20 | 0x02 | 0x40 | 0x04;
+      c_b->t_b_st = x;
+      c_b->t_b_end = x + add;
+      c_b->t_m_start = x + add;
+      redraw_line ();
+      c_b->hanten = hantentmp;
+      c_b->t_m_start = marktmp;
+    }
+  else
+    {
+      redraw_line ();
+    }
+  return (0);
+}
+
+int
+not_call_jl_yomi_len ()
+{
+  int ret = bun_data_->bun[cur_bnst_]->yomilen;
+  return (ret);
+}
+#endif /* CHINESE */