--- ./cmd/kinput2.c.orig	Sat Feb  9 18:07:24 2002
+++ ./cmd/kinput2.c	Sun Feb 10 21:43:58 2002
@@ -38,6 +38,12 @@
 #include "XimpProto.h"
 #include "IMProto.h"
 
+#include <gtk/gtk.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include "kinput2gtk.h"
+
 #if !defined(USE_WNN) && !defined(USE_CANNA) && !defined(USE_SJ3)
 #define USE_WNN			/* default */
 #endif
@@ -171,6 +177,49 @@
 static void	usage();
 static void	print_version();
 
+int gtk_fifo;
+GtkWidget* stat_button = NULL;
+GtkWidget* gui_button0 = NULL;
+GtkWidget* gui_button1 = NULL;
+GtkWidget* gui_button2 = NULL;
+GtkWidget* gui_button3 = NULL;
+GtkWidget* pref_button = NULL;
+GtkWidget* help_button = NULL;
+int w_fifo;
+
+#define FIFO_PATH "/tmp/.dqn-XXXXXX"
+
+int
+gtk_read_fifo(gint source) {
+  int ret;
+  gchar buf[1024];
+  bzero(buf, 1024);
+  ret = read(source, buf, 1024);
+  if( buf[0] == GUI_STATUS_CHANGE ) {
+    gtk_label_set_text(GTK_LABEL(GTK_BIN(stat_button)->child), buf+1);
+  } else {
+    printf("Unknown code: %d\n", buf[0]);
+  }
+
+  return ret;
+}
+
+int
+gtk_write_fifo(gint source, guchar cmdid, gchar* data) {
+  int ret;
+  guchar* tmpbuf = g_strconcat(" ", data, NULL);
+  tmpbuf[0] = cmdid;
+
+  ret = write(source, tmpbuf, strlen(tmpbuf));
+  g_free(tmpbuf);
+  return ret;
+}
+
+void
+gtk_get_msg(gpointer data, gint source, GdkInputCondition condition) {
+  gtk_read_fifo(source);
+}
+
 void
 main(ac, av)
 int ac;
@@ -180,6 +229,90 @@
     int i;
     WidgetClass inputobjclass, displayobjclass;
     Widget inputobj;
+    char* fifo_path = strdup(FIFO_PATH);
+    int pref_shmid = 0;
+
+    close(mkstemp(fifo_path));
+    unlink(fifo_path);
+    gtk_fifo = mkfifo(fifo_path, 0700);
+    if( gtk_fifo != 0 ) {
+      fprintf(stderr, "fifo failure.\n");
+      exit(0);
+    }
+
+    pref_shmid = shmget(IPC_PRIVATE, 10000, (SHM_R | SHM_W));
+    if( pref_shmid <= 0 ) {
+      fprintf(stderr, "shmget failure.\n");
+      exit(0);
+    }
+
+    if( fork() == 0 ) {
+      GtkWidget* window;
+      GtkWidget* hbox1;
+      int r_fifo = open(fifo_path, O_RDONLY);
+      guiPrefs = (GuiPrefs*)shmat(pref_shmid, 0, 0);
+
+      gtk_set_locale();
+      gtk_init(&ac, &av);
+      
+      window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+      gtk_window_set_title(GTK_WINDOW(window), "Kinput2ツールバー(かなりα)");
+
+      hbox1 = gtk_hbox_new(FALSE, FALSE);
+      gtk_container_add(GTK_CONTAINER(window), hbox1);
+
+      stat_button = gtk_button_new_with_label("A");
+      GTK_WIDGET_UNSET_FLAGS(stat_button, GTK_CAN_FOCUS);
+      gtk_widget_set_usize(stat_button, 20, 20);
+      gtk_container_add(GTK_CONTAINER(hbox1), stat_button);
+
+      gui_button0 = gtk_button_new();
+      GTK_WIDGET_UNSET_FLAGS(gui_button0, GTK_CAN_FOCUS);
+      gtk_widget_set_usize(gui_button0, 20, 20);
+      gtk_container_add(GTK_CONTAINER(hbox1), gui_button0);
+
+      gui_button1 = gtk_button_new();
+      GTK_WIDGET_UNSET_FLAGS(gui_button1, GTK_CAN_FOCUS);
+      gtk_widget_set_usize(gui_button1, 20, 20);
+      gtk_container_add(GTK_CONTAINER(hbox1), gui_button1);
+
+      gui_button2 = gtk_button_new();
+      GTK_WIDGET_UNSET_FLAGS(gui_button2, GTK_CAN_FOCUS);
+      gtk_widget_set_usize(gui_button2, 20, 20);
+      gtk_container_add(GTK_CONTAINER(hbox1), gui_button2);
+
+      gui_button3 = gtk_button_new();
+      GTK_WIDGET_UNSET_FLAGS(gui_button3, GTK_CAN_FOCUS);
+      gtk_widget_set_usize(gui_button3, 20, 20);
+      gtk_container_add(GTK_CONTAINER(hbox1), gui_button3);
+
+      pref_button = gtk_button_new_with_label("設");
+      gtk_signal_connect(GTK_OBJECT(pref_button), "button_press_event",
+                         (GtkSignalFunc)gui_pref_button_pressed, NULL);
+      GTK_WIDGET_UNSET_FLAGS(pref_button, GTK_CAN_FOCUS);
+      gtk_widget_set_usize(pref_button, 20, 20);
+      gtk_container_add(GTK_CONTAINER(hbox1), pref_button);
+
+      help_button = gtk_button_new_with_label("?");
+      GTK_WIDGET_UNSET_FLAGS(help_button, GTK_CAN_FOCUS);
+      gtk_widget_set_usize(help_button, 20, 20);
+      gtk_container_add(GTK_CONTAINER(hbox1), help_button);
+
+      gtk_widget_show_all(window);
+      gdk_input_add(r_fifo, GDK_INPUT_READ,
+        (GdkInputFunction)gtk_get_msg, NULL);
+      gtk_main();
+      return;
+    }
+
+    w_fifo = open(fifo_path, O_WRONLY);
+    //unlink(fifo_path);
+    if( w_fifo <= 0 ) {
+      printf("w_fifo: %d\n", w_fifo);
+      exit(0);
+    }
+    guiPrefs = (GuiPrefs*)shmat(pref_shmid, 0, 0);
+    guiPrefs->show_kinput2_status = FALSE;
 
     toplevel = XtAppInitialize(&apc, "Kinput2",
 			       options, XtNumber(options),
--- ./cmd/Imakefile.orig	Sat Feb  9 18:12:04 2002
+++ ./cmd/Imakefile	Sun Feb 10 21:04:38 2002
@@ -1,6 +1,6 @@
 #include "../Kinput2.conf"
 
-         INCLUDES = -I../include -I..
+         INCLUDES = -I../include -I.. `gtk-config --cflags`
            KI2LIB = ../lib/libKi2.a
             IMLIB = ../lib/imlib/libim.a
 
@@ -35,10 +35,10 @@
 #endif
 
           DEPLIBS = $(KI2LIB) $(IMLIB) $(XSJ3CLIB) XawClientDepLibs
-  LOCAL_LIBRARIES = $(KI2LIB) $(IMLIB) $(LIBW) $(LIBI) $(LIBS) XawClientLibs
+  LOCAL_LIBRARIES = $(KI2LIB) $(IMLIB) $(LIBW) $(LIBI) $(LIBS) XawClientLibs `gtk-config --libs`
           DEFINES = $(SIGNAL_DEFINES) $(DEFW) $(DEFI) $(DEFS)
-             SRCS = kinput2.c
-             OBJS = kinput2.o
+             SRCS = kinput2.c kinput2gtk.c
+             OBJS = kinput2.o kinput2gtk.o
 
 ComplexProgramTarget(kinput2)
 InstallAppDefaults(Kinput2)
--- ./cmd/kinput2gtk.c.orig	Sun Feb 10 21:05:33 2002
+++ ./cmd/kinput2gtk.c	Sun Feb 10 22:21:06 2002
@@ -0,0 +1,87 @@
+#include "kinput2gtk.h"
+
+GuiPrefs* guiPrefs = NULL;
+
+static GtkWidget* pref_window = NULL;
+static GtkWidget* pref_button_ok;
+static GtkWidget* pref_button_apply;
+static GtkWidget* pref_button_cancel;
+static GtkWidget* pref_check_kinput2status;
+
+static void
+gui_pref_dialog_apply_pressed() {
+  guiPrefs->show_kinput2_status =
+    gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(pref_check_kinput2status));
+}
+
+static void
+gui_pref_dialog_ok_pressed() {
+  gui_pref_dialog_apply_pressed();
+  gtk_widget_hide_all(pref_window);
+}
+
+static void
+gui_pref_dialog_cancel_pressed() {
+  gtk_widget_hide_all(pref_window);
+}
+
+static void
+gui_pref_dialog_new() {
+  GtkWidget* vbox1;
+  GtkWidget* hbuttonbox1;
+  GtkWidget* notebook1;
+  GtkWidget* frame1;
+
+  pref_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
+  gtk_container_set_border_width(GTK_CONTAINER(pref_window), 10);
+  gtk_window_set_title(GTK_WINDOW(pref_window), "設定");
+  gtk_window_set_modal(GTK_WINDOW(pref_window), TRUE);
+
+  vbox1 = gtk_vbox_new(FALSE, 5);
+  gtk_container_add(GTK_CONTAINER(pref_window), vbox1);
+
+  notebook1 = gtk_notebook_new();
+  gtk_box_pack_start(GTK_BOX(vbox1), notebook1, TRUE, TRUE, 0);
+
+  frame1 = gtk_frame_new(NULL);
+  gtk_container_add(GTK_CONTAINER(notebook1), frame1);
+  gtk_container_set_border_width(GTK_CONTAINER(frame1), 5);
+
+  pref_check_kinput2status =
+    gtk_check_button_new_with_label("Kinput2のステータスウィンドウを表示する");
+  gtk_container_add(GTK_CONTAINER(frame1), pref_check_kinput2status);
+  gtk_container_set_border_width(GTK_CONTAINER(pref_check_kinput2status), 10);
+
+  gtk_notebook_set_tab_label(GTK_NOTEBOOK(notebook1),
+    gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0),
+    gtk_label_new ("設定"));
+
+  hbuttonbox1 = gtk_hbutton_box_new();
+  gtk_box_pack_start(GTK_BOX(vbox1), hbuttonbox1, FALSE, TRUE, 0);
+  gtk_button_box_set_layout(GTK_BUTTON_BOX(hbuttonbox1), GTK_BUTTONBOX_END);
+  gtk_container_set_border_width(GTK_CONTAINER(hbuttonbox1), 5);
+
+  pref_button_ok = gtk_button_new_with_label ("OK");
+  gtk_container_add(GTK_CONTAINER(hbuttonbox1), pref_button_ok);
+  gtk_signal_connect(GTK_OBJECT(pref_button_ok), "button_press_event",
+                     (GtkSignalFunc)gui_pref_dialog_ok_pressed, NULL);
+
+  pref_button_apply = gtk_button_new_with_label ("適用");
+  gtk_signal_connect(GTK_OBJECT(pref_button_apply), "button_press_event",
+                     (GtkSignalFunc)gui_pref_dialog_apply_pressed, NULL);
+  gtk_container_add(GTK_CONTAINER(hbuttonbox1), pref_button_apply);
+
+  pref_button_cancel = gtk_button_new_with_label ("Cancel");
+  gtk_signal_connect(GTK_OBJECT(pref_button_cancel), "button_press_event",
+                     (GtkSignalFunc)gui_pref_dialog_cancel_pressed, NULL);
+  gtk_container_add(GTK_CONTAINER(hbuttonbox1), pref_button_cancel);
+}
+
+void
+gui_pref_button_pressed(GtkWidget* widget, gpointer data) {
+  //printf("Pref button pressed: %d\n", guiPrefs->show_kinput2_status);
+  if( pref_window == NULL )
+    gui_pref_dialog_new();
+
+  gtk_widget_show_all(pref_window);
+}
--- ./include/kinput2gtk.h.orig	Sat Feb  9 19:34:47 2002
+++ ./include/kinput2gtk.h	Sun Feb 10 21:35:34 2002
@@ -0,0 +1,24 @@
+#ifndef _KINPUT2GTK_H
+#define _KINPUT2GTK_H
+
+#include <gtk/gtk.h>
+
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+
+enum {
+  GUI_STATUS_CHANGE = 1
+};
+
+typedef struct _GuiPrefs {
+  gboolean show_kinput2_status;
+} GuiPrefs;
+
+extern int w_fifo;
+extern GuiPrefs* guiPrefs;
+
+extern int gtk_write_fifo(gint source, guchar cmdid, gchar* data);
+void gui_pref_button_pressed(GtkWidget* widget, gpointer data);
+
+#endif /* _KINPUT2GTK_H */
--- ./lib/Imakefile.orig	Sat Feb  9 18:15:06 2002
+++ ./lib/Imakefile	Sat Feb  9 18:15:30 2002
@@ -54,7 +54,7 @@
              OBJS = $(WIDGETOBJS) $(UTILOBJS) \
                     $(WNNOBJS) $(CANNAOBJS) $(SJ3OBJS)
 
-   LOCAL_INCLUDES = -I../include -Iimlib
+   LOCAL_INCLUDES = -I../include -Iimlib `gtk-config --cflags`
          INCLUDES = $(LOCAL_INCLUDES) $(WNNINCS) $(CANNAINCS) $(SJ3INCS)
 
           DEFINES = $(WNNDEFS) $(SJ3DEFS) $(TRANSPORTDEFS)
--- ./lib/ConvCtrl.c.orig	Sat Feb  9 19:35:17 2002
+++ ./lib/ConvCtrl.c	Sat Feb  9 19:36:44 2002
@@ -29,6 +29,8 @@
 #include "MyDispatch.h"
 #include "AsyncErr.h"
 
+#include "kinput2gtk.h"
+
 #define DEBUG_VAR debug_ConversionControl
 #include "DebugPrint.h"
 
@@ -575,6 +577,8 @@
 
     /* call input style dependent startup */
     (*class->conversionControl_class.Startup)(w, valuemask, value);
+
+    gtk_write_fifo(w_fifo, GUI_STATUS_CHANGE, "漢");
 }
 
 void
@@ -629,6 +633,8 @@
 
     ccw->ccontrol.oldclientwindow = ccw->ccontrol.clientwindow;
     ccw->ccontrol.clientwindow = None;
+
+    gtk_write_fifo(w_fifo, GUI_STATUS_CHANGE, "A");
 }
 
 void
--- ./lib/Canna.c.orig	Sat Feb  9 21:02:56 2002
+++ ./lib/Canna.c	Sat Feb  9 21:16:22 2002
@@ -367,6 +367,21 @@
     if (icstr.nchars > 0) {
       mode = obj->canna.ibuf->curmode;
       icstr.data = (char *)mode;
+
+#if 0
+      {
+	int i=0;
+	for(i=0;i<icstr.nchars;i++) {
+	  if( mode[i] & 0xff00 == 0 ) {
+	    printf("%c", mode[i] & 0xff );
+	  } else {
+	    printf("%c", mode[i] >> 8 );
+	    printf("%c", mode[i] & 0xff );
+	  }
+	}
+	printf("\n");
+      }
+#endif
       icstr.nbytes = icstr.nchars * sizeof(wchar);
       icstr.attr = ICAttrNormalString;
     }
--- ./lib/OverConv.c.orig	Sat Feb  9 21:17:37 2002
+++ ./lib/OverConv.c	Sun Feb 10 21:43:08 2002
@@ -35,6 +35,8 @@
 #include "CanvasShel.h"
 #include "ICLabel.h"
 
+#include "kinput2gtk.h"
+
 #define DEBUG_VAR debug_OverTheSpotConversion
 #include "DebugPrint.h"
 
@@ -297,7 +299,7 @@
     ocw->overthespot.wm_state =
       CachedInternAtom(XtDisplay(new), "WM_STATE", False);
 
-    /* $B%F%-%9%HI=<($N(B widget $B$O:G=i$NJQ493+;O;~$K:n$k(B */
+    /* テキスト表示の widget は最初の変換開始時に作る */
     CreateDisplayObject(ocw);
     CreateSelectionWidget(ocw);
     CreateAuxWidget(ocw);
@@ -311,7 +313,7 @@
 {
     OverTheSpotConversionWidget ocw = (OverTheSpotConversionWidget)w;
 
-    /* $B%G%#%9%W%l%$%;%0%a%s%H$NNN0h$r2rJ|(B */
+    /* ディスプレイセグメントの領域を解放 */
     if (ocw->overthespot.dispsegments) {
 	DisplaySegment *dsp = ocw->overthespot.dispsegments;
 	int i;
@@ -323,7 +325,7 @@
 	XtFree((char *)dsp);
     }
 
-    /* canvaslist $B$NNN0h$r2rJ|(B (canvas widget $B$O(B $B<+F0E*$K(B destroy $B$5$l$k(B */
+    /* canvaslist の領域を解放 (canvas widget は 自動的に destroy される */
     if (ocw->overthespot.canvaslist) {
 	TextCanvas *p = ocw->overthespot.canvaslist;
 	while (p) {
@@ -365,10 +367,10 @@
 
     TRACE(("OverTheSpot:ConversionStartup()\n"));
 
-    /* $BFbIt$N%P%C%U%!$r%/%j%"$9$k(B */
+    /* 内部のバッファをクリアする */
     clearAllDisplaySegments(ocw);
 
-    /* $BJQ49%*%V%8%'%/%H$K%3!<%k%P%C%/$r@_Dj$9$k(B */
+    /* 変換オブジェクトにコールバックを設定する */
     XtAddCallback(inputobj, XtNfixNotify, ForwardSpot, (XtPointer)w);
 
     if (ocw->overthespot.ignorestatusarea) mask &= ~CAStatusArea;
@@ -377,7 +379,7 @@
     setupTextCanvas(ocw, mask, value);
     setupModeWidget(ocw, mask, value);
 
-    /* WM_TRANSIENT_FOR $B%W%m%Q%F%#$r@5$7$/%;%C%H$9$k(B */
+    /* WM_TRANSIENT_FOR プロパティを正しくセットする */
     toplevel = getToplevelWindow(XtDisplay(w),
 				 ocw->ccontrol.clientwindow,
 				 ocw->overthespot.wm_state);
@@ -385,17 +387,17 @@
     setTransientFor(ocw->overthespot.selectionshell, toplevel);
     setTransientFor(ocw->overthespot.auxshell, toplevel);
 
-    /* $B%F%-%9%H%-%c%s%P%9$NI=<(0LCV$r7h$a$k(B */
+    /* テキストキャンバスの表示位置を決める */
     locateTextCanvasInitial(ocw);
 
-    /* $B%b!<%I$NI=<(0LCV$r7h$a$k(B */
+    /* モードの表示位置を決める */
     if (!ocw->overthespot.modelocationspecified) locateModeWidget(ocw);
 
     /*
-     * OverTheSpotConvesion $B$N>l9g!"<+J,<+?H$O%]%C%W%"%C%W$7$J$$$,!"(B
-     * $B%P%C%/%(%s%I%?%$%W$N;~$K$O%/%i%$%"%s%H$,$3$N(B widget $B$N(B
-     * $B%&%#%s%I%&$KBP$7$F%$%Y%s%H$rAw$k$N$G!"(BRealize $B$@$1$7$F$*$/(B
-     * $B$=$N:]!"Bg$-$5$r;XDj$7$J$$$H%5%$%:$,(B 0 $B$K$J$C$F$7$^$&$N$GCm0U$9$k(B
+     * OverTheSpotConvesion の場合、自分自身はポップアップしないが、
+     * バックエンドタイプの時にはクライアントがこの widget の
+     * ウィンドウに対してイベントを送るので、Realize だけしておく
+     * その際、大きさを指定しないとサイズが 0 になってしまうので注意する
      */
     if (!XtIsRealized(w)) {
 	Arg args[2];
@@ -406,10 +408,11 @@
 	XtRealizeWidget(w);
     }
 
-    /* $B%b!<%II=<(%-%c%s%P%9$r%]%C%W%"%C%W$9$k(B */
-    if (ocw->overthespot.modeshell != NULL) {
-	XtPopup(ocw->overthespot.modeshell, XtGrabNone);
-    }
+    /* モード表示キャンバスをポップアップする */
+    if( guiPrefs->show_kinput2_status )
+      if (ocw->overthespot.modeshell != NULL) {
+        XtPopup(ocw->overthespot.modeshell, XtGrabNone);
+      }
 }
 
 /*- ChangeAttributes: class specific conversion attribute change routine -*/
@@ -462,9 +465,12 @@
 
     if (ocw->overthespot.modeshell == NULL) return;
     if (set) {
-	XtPopup(ocw->overthespot.modeshell, XtGrabNone);
+        if ( guiPrefs->show_kinput2_status )
+      	  XtPopup(ocw->overthespot.modeshell, XtGrabNone);
+	gtk_write_fifo(w_fifo, GUI_STATUS_CHANGE, "漢");
     } else {
-	XtPopdown(ocw->overthespot.modeshell);
+      	XtPopdown(ocw->overthespot.modeshell);
+	gtk_write_fifo(w_fifo, GUI_STATUS_CHANGE, "A");
     }
 }
 
@@ -479,7 +485,7 @@
     TextCanvas *tcp = ocw->overthespot.canvaslist;
     XAEHandle h;
 
-    /* $BJQ49%*%V%8%'%/%H$N%3!<%k%P%C%/$r>C$9(B */
+    /* 変換オブジェクトのコールバックを消す */
     XtRemoveCallback(inputobj, XtNfixNotify, ForwardSpot, (XtPointer)w);
 
     /* Popdown and unrealize textcanvases
@@ -1210,6 +1216,7 @@
     OverTheSpotConversionWidget ocw = (OverTheSpotConversionWidget)w;
 
     TRACE(("OverTheSpotConversion:UpdateText()\n"));
+
     eraseCursor(ocw);
     computeDisplaySegments(ocw);
     computeCursor(ocw);
@@ -1493,15 +1500,15 @@
   
   if (ocw->overthespot.auxpoppedup) return;
   
-  /* $B%F%-%9%H%3!<%k%P%C%/$N;~$N$h$&$J=hM}$r$9$k(B
-     $B$N$O(B AuxPanel.c $B$K$^$+$;$h$&(B */
+  /* テキストコールバックの時のような処理をする
+     のは AuxPanel.c にまかせよう */
 
   auxstr = ICGetAuxSegments(ocw->ccontrol.inputobj,
 			    &ncand, &curseg, &cursorpos);
 
   APanelStart(ocw->overthespot.auxwidget, auxstr, ncand, curseg, cursorpos);
 
-  /* $B%]%C%W%"%C%W$9$k>l=j$r7h$a$k(B */
+  /* ポップアップする場所を決める */
   locateAuxPopup(ocw, False);
   
   XtPopup(ocw->overthespot.auxshell, XtGrabNone);
@@ -1619,6 +1626,7 @@
     Boolean cursorredraw;
 
     TRACE(("OverTheSpotConversion:TextRedisplay()\n"));
+
     region.x = event->x;
     region.y = event->y;
     region.width = event->width;
@@ -2099,12 +2107,12 @@
     ocw->overthespot.overflowoffset = 0;
 
     /*
-     * $B%9%H%i%F%8$H$7$F$O(B
-     * $B%+%l%s%H%;%0%a%s%H!&%+%l%s%H%5%V%;%0%a%s%H!&%$%s%5!<%H%+!<%=%k$N$"$k(B
-     * $B%;%0%a%s%H$N$I$l$b$J$1$l$P5$$K$7$J$$(B
-     * $B%$%s%5!<%H%+!<%=%k$,$"$l$P$=$l$r:GM%@h$9$k!#$D$^$j%$%s%5!<%H%+!<%=%k(B
-     * $B$O2?$,$"$C$F$bI=<($9$k$h$&$K$9$k!#(B
-     * $B$G$-$l$P%$%s%5!<%H%+!<%=%k$N$"$k%;%0%a%s%H$O$9$Y$FI=<($9$k!#(B
+     * ストラテジとしては
+     * カレントセグメント・カレントサブセグメント・インサートカーソルのある
+     * セグメントのどれもなければ気にしない
+     * インサートカーソルがあればそれを最優先する。つまりインサートカーソル
+     * は何があっても表示するようにする。
+     * できればインサートカーソルのあるセグメントはすべて表示する。
      */
 
     outerleft = innerleft = 9999;
@@ -2579,14 +2587,14 @@
     if (lspace == 0) lspace = 1;	/* avoid "divide by zero" error */
 
     /*
-     * tracking $B%9%F!<%?%9$,I=<($G$-$k$+$I$&$+%A%'%C%/$9$k$K$O!"%/%i%$(B
-     * $B%"%s%H%(%j%"$KI=<($G$-$k:G=i$H:G8e$N9T$K$D$$$F$=$N>e$+2<$K%9%F!<(B
-     * $B%?%9$,I=<($G$-$k$3$H$rD4$Y$l$P$h$$!#(B
+     * tracking ステータスが表示できるかどうかチェックするには、クライ
+     * アントエリアに表示できる最初と最後の行についてその上か下にステー
+     * タスが表示できることを調べればよい。
      */
 
     modespace = modew->core.height + modew->core.border_width * 2 + 2;
 
-    /* $B:G=i$N9T$N>e2<$N(B Y $B:BI8$r7W;;$7$F%9%F!<%?%9$,I=<($G$-$k$+D4$Y$k(B */
+    /* 最初の行の上下の Y 座標を計算してステータスが表示できるか調べる */
     y = SPOTY(ocw) - ascent;
     top = y - ((y - areatop) / lspace) * lspace;
     bottom = top + ascent + descent;
@@ -2594,7 +2602,7 @@
 	return 0;
     }
 
-    /* $B:G8e$N9T$N>e2<$N(B Y $B:BI8$r7W;;$7$F%9%F!<%?%9$,I=<($G$-$k$+D4$Y$k(B */
+    /* 最後の行の上下の Y 座標を計算してステータスが表示できるか調べる */
     y = SPOTY(ocw) + descent;
     bottom = y + ((areabottom - y) / lspace) * lspace;
     top = bottom - (ascent + descent);

