diff -c -N -r screen-3.7.2/Makefile.in screen-3.7.2+onew/Makefile.in
*** screen-3.7.2/Makefile.in	Mon Sep  2 06:54:24 1996
--- screen-3.7.2+onew/Makefile.in	Thu Jun 26 16:01:09 1997
***************
*** 55,65 ****
  CFILES=	screen.c ansi.c fileio.c mark.c misc.c resize.c socket.c \
  	search.c tty.c term.c window.c utmp.c loadav.c putenv.c help.c \
  	termcap.c input.c attacher.c pty.c process.c display.c comm.c \
! 	kmapdef.c acls.c
  OFILES=	screen.o ansi.o fileio.o mark.o misc.o resize.o socket.o \
  	search.o tty.o term.o window.o utmp.o loadav.o putenv.o help.o \
  	termcap.o input.o attacher.o pty.o process.o display.o comm.o \
! 	kmapdef.o acls.o
  
  all:	screen screen.info
  
--- 55,65 ----
  CFILES=	screen.c ansi.c fileio.c mark.c misc.c resize.c socket.c \
  	search.c tty.c term.c window.c utmp.c loadav.c putenv.c help.c \
  	termcap.c input.c attacher.c pty.c process.c display.c comm.c \
! 	kmapdef.c acls.c onew.c
  OFILES=	screen.o ansi.o fileio.o mark.o misc.o resize.o socket.o \
  	search.o tty.o term.o window.o utmp.o loadav.o putenv.o help.o \
  	termcap.o input.o attacher.o pty.o process.o display.o comm.o \
! 	kmapdef.o acls.o onew.o
  
  all:	screen screen.info
  
***************
*** 251,253 ****
--- 251,255 ----
  comm.o: comm.c acls.h comm.h config.h rcs.h
  kmapdef.o: kmapdef.c config.h
  acls.o: acls.c acls.h ansi.h comm.h config.h display.h extern.h image.h os.h osdef.h overlay.h rcs.h screen.h term.h window.h
+ onew.o: onew.c onew.h
+ 
diff -c -N -r screen-3.7.2/ansi.c screen-3.7.2+onew/ansi.c
*** screen-3.7.2/ansi.c	Mon Jul  1 21:17:12 1996
--- screen-3.7.2+onew/ansi.c	Thu Jun 26 16:01:08 1997
***************
*** 415,421 ****
  #ifdef KANJI
  static char *kanjicharsets[3] = {
    "BBBB02", 	/* jis */
!   "\002IBB01",	/* euc  */
    "BIBB01"	/* sjis  */
  };
  #endif
--- 415,421 ----
  #ifdef KANJI
  static char *kanjicharsets[3] = {
    "BBBB02", 	/* jis */
!   "B\002IB01",	/* euc  */
    "BIBB01"	/* sjis  */
  };
  #endif
diff -c -N -r screen-3.7.2/config.h.in screen-3.7.2+onew/config.h.in
*** screen-3.7.2/config.h.in	Mon Sep  2 06:54:24 1996
--- screen-3.7.2+onew/config.h.in	Thu Jun 26 16:01:09 1997
***************
*** 124,129 ****
--- 124,130 ----
  # define COLOR
  #endif /* SIMPLESCREEN */
  #define KANJI
+ #define ONEW
  
  /*
   * As error messages are mostly meaningless to the user, we
diff -c -N -r screen-3.7.2/display.c screen-3.7.2+onew/display.c
*** screen-3.7.2/display.c	Tue Dec 19 20:28:29 1995
--- screen-3.7.2+onew/display.c	Thu Jun 26 16:01:08 1997
***************
*** 477,483 ****
        else if (D_kanji == SJIS)
  	{
  	  t += (c & 1) ? ((t <= 0x5f) ? 0x1f : 0x20) : 0x7e;
! 	  c = (c - 0x21) / 2 + ((c < 0x5e) ? 0x81 : 0xc1);
  	}
        D_mbcs = t;
      }
--- 477,483 ----
        else if (D_kanji == SJIS)
  	{
  	  t += (c & 1) ? ((t <= 0x5f) ? 0x1f : 0x20) : 0x7e;
! 	  c = (c - 0x21) / 2 + ((c <= 0x5e) ? 0x81 : 0xc1);
  	}
        D_mbcs = t;
      }
diff -c -N -r screen-3.7.2/extern.h screen-3.7.2+onew/extern.h
*** screen-3.7.2/extern.h	Tue Nov 21 03:03:04 1995
--- screen-3.7.2+onew/extern.h	Thu Jun 26 16:01:08 1997
***************
*** 313,315 ****
--- 313,319 ----
  extern struct user **FindUserPtr __P((char *));
  extern int   UserAdd __P((char *, char *, struct user **));
  extern int   UserDel __P((char *, struct user **));
+ #ifdef ONEW
+ extern int ThruOnew __P((char *, int, int, int));
+ extern int GetKakuteiStr __P((char *));
+ #endif /* ONEW */
diff -c -N -r screen-3.7.2/onew.c screen-3.7.2+onew/onew.c
*** screen-3.7.2/onew.c	Thu Jan  1 09:00:00 1970
--- screen-3.7.2+onew/onew.c	Thu Jun 26 16:01:12 1997
***************
*** 0 ****
--- 1,308 ----
+ /*
+    onew.c
+ 
+    Using ONEW library for Japanese Input.
+ 
+ */
+ 
+ #include "config.h"
+ #include "screen.h"
+ #include "onew.h"
+ 
+ extern struct win *windows;     /* linked list of all windows */
+ extern struct win *fore;
+ extern struct display *display, *displays;
+ 
+ static char onew_getchar_buffer[ONEW_GETCHAR_MAX];
+ static int onew_getchar_buffer_len;
+ static char kanakan_buf[ONEW_GETCHAR_MAX];
+ static int kanakan_buf_len;
+ static char kanji_buf[ONEW_GETCHAR_MAX];
+ static char kakutei_buf[ONEW_GETCHAR_MAX];
+ static int kakutei_buf_len;
+ static int onew_buffer_empty;
+ static int onew_current_io_fd;
+ static int onew_current_io_maxlen;
+ 
+ void
+ add_onew_getchar_buffer(buf, len)
+      char* buf;
+      int len;
+ {
+   int i, curlen;
+   debug1("exec add_onew_getchar_buffer() ... len:%d\n", len);
+   if (onew_getchar_buffer_len + len > ONEW_GETCHAR_MAX)
+     return;
+   memcpy(&onew_getchar_buffer[onew_getchar_buffer_len], buf, len);
+   onew_getchar_buffer_len += len;
+   onew_buffer_empty = 0;
+ }
+ 
+ void
+ onewgoto(x, y)
+      int x, y;
+ {
+   PutStr(tgoto(D_CM, x, y));
+ }
+ 
+ int
+ ThruOnew(ibuf, ilen, fd, max)
+      char *ibuf;
+      int ilen, fd, max;
+ {
+   int ch, rkmode;
+   debug("exec ThruOnew()\n");
+   onew_current_io_fd = fd;
+   onew_current_io_maxlen = max;
+   add_onew_getchar_buffer(ibuf, ilen);
+   for (;;) {
+     ch = Onew_romkan();
+     if (onew_buffer_empty)
+       if (kakutei_buf_len)
+ 	  return 1;
+       else
+ 	return 0;
+     rkmode = Onew_RK_imode();
+     if (rkmode) {
+       debug("print char\n");
+       AddChar(ch);
+       Flush();
+       kanakan_buf[kanakan_buf_len ++] = ch;
+       kanakan_buf[kanakan_buf_len] = '\0';
+     } else {
+       int l;
+       kakutei_buf[kakutei_buf_len ++] = ch;
+       kakutei_buf[kakutei_buf_len] = '\0';
+     }
+   }
+ }
+ 
+ void
+ read_fd()
+ {
+   fd_set rfds;
+   struct timeval tv;
+   char buf[ONEW_GETCHAR_MAX];
+   int buflen, ret;
+ 
+   for (;;) {
+     debug("selecting ... read_fd()\n");
+     FD_ZERO(&rfds);
+     FD_SET(onew_current_io_fd, &rfds);
+     tv.tv_sec = 5;
+     tv.tv_usec = 0;
+     ret = select(onew_current_io_fd + 1, &rfds, NULL, NULL, &tv);
+     if (ret)
+       break;
+   }
+   buflen = read(onew_current_io_fd, buf, onew_current_io_maxlen);
+   add_onew_getchar_buffer(buf, buflen);
+ }
+ 
+ int
+ GetKakuteiStr(ibuf)
+      char *ibuf;
+ {
+   int len = kakutei_buf_len;
+   debug1("exec GetKakuteiStr() ... kakutei_buf_len:%d\n", len);
+   memcpy(ibuf, kakutei_buf, len);
+   kakutei_buf_len = 0;
+   return len;
+ }
+ 
+ int
+ ONEW_GETCHAR()
+ {
+   int ret;
+   debug("exec ONEW_GETCHAR()\n");
+   if (onew_getchar_buffer_len > 0) {
+     debug("ONEW_GETCHAR from onew_getchar_buffer\n");
+     ret = onew_getchar_buffer[0];
+     memmove(onew_getchar_buffer, &onew_getchar_buffer[1], onew_getchar_buffer_len - 1);
+     onew_getchar_buffer_len --;
+   } else {
+     debug("ONEW_GETCHAR:onew_getchar_buffer is empty.\n");
+     if (Onew_RK_imode()) {
+       read_fd();
+       ret = onew_getchar_buffer[0];
+       memmove(onew_getchar_buffer, &onew_getchar_buffer[1], onew_getchar_buffer_len - 1);
+       onew_getchar_buffer_len --;
+     } else {
+       onew_buffer_empty = 1;
+       ret = ' ';
+     }
+   }
+   return ret;
+ }
+ 
+ int
+ ONEW_PEEKCHAR(timeout)
+   int *timeout;
+ {
+   debug("exec ONEW_PEEK_CHAR\n");
+   if (onew_getchar_buffer_len > 0) {
+     return onew_getchar_buffer[0];
+   }
+   *timeout = -1;
+   return 0;
+ }
+ 
+ /* Using default ONEW_GOT_2BCHAR() */
+ 
+ int
+ ONEW_MESSAGE_COLS()
+ {
+   return ONEW_MSG_COL;
+ }
+ 
+ static int prev_modef;
+ static char *prev_chelp = "";
+ static prev_rkmode;
+ 
+ void
+ ONEW_DISP_ROMKANMODE(cmode, chelp, modef)
+ char *cmode, *chelp;
+ int modef;
+ {
+   int rkmode;
+   debug("exec ONEW_DISP_ROMKANMODE()\n");
+   rkmode = Onew_RK_imode();
+   debug1("rkmode:%d\n", rkmode);
+   if (rkmode) {
+     if (!prev_rkmode) {
+       clearstatline();
+       onewgoto(0, STATLINE);
+     }
+     if (prev_modef != modef)
+       Onew_putmsg(rkmode, "%s", cmode);
+   } else {
+     if (prev_rkmode)
+       resetstatline();
+   }
+   prev_modef = modef;
+   prev_chelp = chelp;
+   prev_rkmode = rkmode;
+ }
+ 
+ ONEW_MESSAGE(so, form, a, b, c, d, e)
+      int so;
+      char *form, *a, *b, *c, *d, *e;
+ {
+   int x, y, len;
+   char mbuf[1024];
+   debug("exec ONEW_MESSAGE\n");
+   sprintf(mbuf, form, a, b, c, d, e);
+   len = strlen(mbuf);
+   debug2("message ... mbuf len:%d {%s}\n", len, mbuf);
+   onewgoto(D_width - 1 - ONEW_MSG_COL , STATLINE);
+   AddStr(mbuf);
+   onewgoto(kakutei_buf_len, STATLINE);
+   Flush();
+ }
+ 
+ static org_x;
+ static org_y;
+ 
+ clearstatline()
+ {
+   debug("exec clearstatline\n");
+   org_x = D_x;
+   org_y = D_y;
+   debug2("store position: %d, %d\n", D_x, D_y);
+   ClearLine(STATLINE, 0, D_width - 1);
+ }
+ 
+ resetstatline()
+ {
+   debug("exec resetstatline\n");
+   Redisplay(0);
+   debug2("restore position: %d, %d\n", org_x, org_y);
+   onewgoto(org_x, org_y);
+ }
+ 
+ ONEW_BEEP(nsec) {
+ }
+ 
+ ONEW_DISP_KANAHALVES(str)
+      char *str;
+ {
+   int i, len;
+   debug("exec ONEW_DISP_KANAHALVES\n");
+   len = strlen(str);
+   AddStr(str);
+   for (i = 1; i <= len; i ++)
+     PutStr(D_LE);
+   Flush();
+ }
+ 
+ ONEW_KANAKAN(ch)
+ {
+   int ech;
+   debug("exec ONEW_KANAKAN\n");
+   if (kanakan_buf_len) {
+     ech = Onew_kanakan(ch, kanakan_buf, 0, kanakan_buf_len);
+     Onew_kakutei(ech);
+     if (ch == ' ')
+       return 0;
+     if (ech == '\n')
+       return 0;
+   }
+   return ch;
+ }
+ 
+ ONEW_DISP_KANAKANB(so, left, cur, right)
+      char *left, *cur, *right;
+ {
+   debug("exec ONEW_DISP_KANAKANB\n");
+   sprintf(kanji_buf, "%s%s%s", left, cur, right);
+   onewgoto(0, STATLINE);
+   if (kakutei_buf_len)
+     AddStr(kakutei_buf);
+   if (so) {
+     if (*left) {
+       PutStr(D_US);
+       AddStr(left);
+       PutStr(D_UE);
+     }
+     PutStr(D_SO);
+     AddStr(cur);
+     PutStr(D_SE);
+     if (*right) {
+       PutStr(D_US);
+       AddStr(right);
+       PutStr(D_UE);
+     }
+   } else {
+     if (*left) {
+       AddStr(left);
+     }
+     AddStr(cur);
+     if (*right) {
+       AddStr(right);
+     }
+   }
+   onewgoto(kakutei_buf_len, STATLINE);
+   Flush();
+ }
+ 
+ ONEW_KAKUTEI(ch)
+ {
+   debug("exec ONEW_KAKUTEI\n");
+   if (kanakan_buf_len > 0) {
+     if (kanji_buf[0]) {
+       int klen;
+       klen = strlen(kanji_buf);
+       memcpy(&kakutei_buf[kakutei_buf_len], kanji_buf, klen);
+       kakutei_buf_len += klen;
+     } else {
+       memcpy(&kakutei_buf[kakutei_buf_len], kanakan_buf, kanakan_buf_len);
+       kakutei_buf_len += kanakan_buf_len;
+     }
+     kakutei_buf[kakutei_buf_len] = '\0';
+     kanji_buf[0] = '\0';
+     kanakan_buf_len = 0;
+     kanakan_buf[0] = '\0';
+     return 1;
+   }
+   return 0;
+ }
diff -c -N -r screen-3.7.2/onew.h screen-3.7.2+onew/onew.h
*** screen-3.7.2/onew.h	Thu Jan  1 09:00:00 1970
--- screen-3.7.2+onew/onew.h	Thu Jun 26 16:01:12 1997
***************
*** 0 ****
--- 1,22 ----
+ /*
+    onew.h
+ 
+    Using ONEW library for Japanese Input.
+ 
+ */
+ 
+ #if defined(ONEW)
+ 
+ #if !defined(_ONEW_H)
+ #define _ONEW_H
+ 
+ #define ONEW_GETCHAR_MAX (8192)
+ #define ONEW_MSG_COL (8)
+ 
+ extern int Onew_romkan(), Onew_RK_imode(), Onew_kakutei(), Onew_kanakan();
+ extern int Onew_RK_cmode_set();
+ extern void Onew_putmsg(), Onew_RK_init();
+ 
+ #endif /* !defined(_ONEW_H) */
+ 
+ #endif /* ONEW */
diff -c -N -r screen-3.7.2/screen.c screen-3.7.2+onew/screen.c
*** screen-3.7.2/screen.c	Wed Jul 10 16:55:48 1996
--- screen-3.7.2+onew/screen.c	Thu Jun 26 16:01:09 1997
***************
*** 71,76 ****
--- 71,80 ----
  
  #include "patchlevel.h"
  
+ #ifdef ONEW
+ #include "onew.h"
+ #endif /* ONEW */
+ 
  /*
   *  At the moment we only need the real password if the
   *  builtin lock is used. Therefore disable SHADOWPW if
***************
*** 1645,1650 ****
--- 1649,1662 ----
  		}
  	      else
  		{
+ #ifdef ONEW
+ 		  if (ThruOnew(buf, buflen, D_userfd, maxlen) == 1) {
+ 		    buflen = GetKakuteiStr(buf);
+ 		  } else {
+ 		    debug("reread\n");
+ 		    buflen = 0;
+ 		  }
+ #endif ONEW
  	          /* This refills inbuf or p_inbuf */
  	          ProcessInput(buf, buflen);
  		}
