diff -ru usr.bin.orig/col/Makefile usr.bin/col/Makefile
--- usr.bin.orig/col/Makefile	Thu Aug  2 10:24:16 2001
+++ usr.bin/col/Makefile	Mon Mar 17 23:30:38 2003
@@ -3,5 +3,9 @@
 
 PROG=	col
 WARNS?=	2
+.if ${MACHINE} == "pc98"
+CFLAGS+= -DKANJI
+LDADD=-lxpg4
+.endif
 
 .include <bsd.prog.mk>
diff -ru usr.bin.orig/col/col.c usr.bin/col/col.c
--- usr.bin.orig/col/col.c	Thu Aug  2 10:27:12 2001
+++ usr.bin/col/col.c	Mon Mar 17 23:30:38 2003
@@ -55,6 +55,9 @@
 #include <stdlib.h>
 #include <unistd.h>
 #include <locale.h>
+#ifdef KANJI
+#include <rune.h>
+#endif
 
 #define	BS	'\b'		/* backspace */
 #define	TAB	'\t'		/* tab */
@@ -79,7 +82,11 @@
 #define	CS_ALTERNATE	2
 	short		c_column;	/* column character is in */
 	CSET		c_set;		/* character set (currently only 2) */
+#ifdef KANJI
+	rune_t		c_char;		/* character in question */
+#else
 	char		c_char;		/* character in question */
+#endif
 } CHAR;
 
 typedef struct line_str LINE;
@@ -111,18 +118,30 @@
 int	no_backspaces;		/* if not to output any backspaces */
 int	pass_unknown_seqs;	/* pass unknown control sequences */
 
+#ifdef KANJI
+#define	PUTC(ch) \
+	do {				\
+		if (fputrune(ch, stdout) == EOF) \
+			errx(1, "write error");	\
+	} while (0)
+#else
 #define	PUTC(ch) \
 	do {					\
 		if (putchar(ch) == EOF)		\
 			errx(1, "write error");	\
 	} while (0)
+#endif
 
 int
 main(argc, argv)
 	int argc;
 	char **argv;
 {
+#ifdef KANJI
+	rune_t ch;
+#else
 	int ch;
+#endif
 	CHAR *c;
 	CSET cur_set;			/* current character set */
 	LINE *l;			/* current line */
@@ -175,7 +194,11 @@
 	cur_set = last_set = CS_NORMAL;
 	lines = l = alloc_line();
 
+#ifdef KANJI
+	while ((ch = fgetrune(stdin)) != EOF) {
+#else
 	while ((ch = getchar()) != EOF) {
+#endif
 		if (!isgraph(ch)) {
 			switch (ch) {
 			case BS:		/* can't go back further */
@@ -187,7 +210,11 @@
 				cur_col = 0;
 				continue;
 			case ESC:		/* just ignore EOF */
+#ifdef KANJI
+				switch(fgetrune(stdin)) {
+#else
 				switch(getchar()) {
+#endif
 				case RLF:
 					cur_line -= 2;
 					break;
@@ -304,7 +331,11 @@
 			l->l_needs_sort = 1;
 		else
 			l->l_max_col = cur_col;
+#ifdef KANJI
+		cur_col += mblen((char *)&ch, MB_CUR_MAX);
+#else
 		cur_col++;
+#endif
 	}
 	if (max_line == 0)
 		exit(0);	/* no lines, so just exit */
@@ -391,6 +422,9 @@
 {
 	CHAR *c, *endc;
 	int nchars, last_col, this_col;
+#ifdef KANJI
+	int i;
+#endif
 
 	last_col = 0;
 	nchars = l->l_line_len;
@@ -468,7 +502,11 @@
 				PUTC(' ');
 			last_col = this_col;
 		}
+#ifdef KANJI
+		last_col += mblen((char *)&c->c_char, MB_CUR_MAX);
+#else
 		last_col++;
+#endif
 
 		for (;;) {
 			if (c->c_set != last_set) {
@@ -484,7 +522,12 @@
 			PUTC(c->c_char);
 			if (++c >= endc)
 				break;
+#ifdef KANJI
+			for (i = mblen((char *)&c->c_char, MB_CUR_MAX); i > 0; i--)
+			    PUTC('\b');
+#else
 			PUTC('\b');
+#endif
 		}
 	}
 }
