dvi2tty version 5.0 用の ASCII "日本語" TeX 用 unofficial patch です。
1990 年に 中村@京大情報 さんが作成されたものを version 5.0 用に修正しました。

dvi2tty のオリジナルは, 

  char *dvi2tty = "@(#) dvi2tty.c  5.0 29/11/90 M.J.E. Mol (c) 1989, 1990";
  #define VERSION 5.0

です。
--
1993年 8月 2日(月)    すぎうら  しげき  <miyu@ftp.tohoku.ac.jp>

diff -c /dev/null jdvi2tty/jdvi2tty-ascii.patch.header
*** /dev/null	Mon Aug  2 18:10:01 1993
--- jdvi2tty/jdvi2tty-ascii.patch.header	Mon Aug  2 18:12:58 1993
***************
*** 0 ****
--- 1,30 ----
+ From: motonori@kutsuda.kuis.kyoto-u.ac.jp (Motonori Nakamura)
+ Newsgroups: fj.sources
+ Subject: jdvi2tty (patch to dvi2tty)
+ Message-ID: <46@boots.kutsuda.kuis.kyoto-u.ac.jp>
+ Date: 10 May 90 07:45:29 GMT
+ 
+ 中村@京大情報です。
+ 
+ もう、どなたかやっておられるかも知れませんが、以前
+ comp.sources.misc に流れていた dvi2tty を ASCII-JTeX 対応に
+ 日本語化しました。UNIX で TeX を使おうという人は、X で preview
+ するでしょうし、98 上で動く previewer も出ていることですから、
+ 需要は少ないとは思いますが、TTY 端末でチョコチョコと書いて、
+ チラッと確認するのには、なかなか便利だとの評判です。
+ (私に、「ね、日本語化しようよ。」と、言った人の弁 :-)
+ 
+ 所詮 TTY なので複雑な図は見にくいですし、表も微妙にずれます。
+ (ずれるのは元のプログラムの仕様です、念のため :-p )
+ 
+ という訳で、パッチをポストします。
+ 
+ いちおう、JIS,SJIS,EUC には対応してあります。
+ dvistuff.c の中の JIS, SJIS の define を変えると(または、
+ Makefile で define すると)お望みの漢字コードになるはずです。
+ 
+ ちなみに、元記事は次の通りです。
+ (省略)
+ =========
+                    中村 素典 @京都大学 工学研究科 情報工学専攻 津田研究室
+                                                motonori@kuis.kyoto-u.ac.jp
diff -c dvi2tty5.0/Makefile jdvi2tty/Makefile
*** dvi2tty5.0/Makefile	Sun Dec 16 02:06:02 1990
--- jdvi2tty/Makefile	Mon Aug  2 17:38:09 1993
***************
*** 8,17 ****
  #
  CFLAGS = -s
  
! all:	dvi2tty disdvi
  
! dvi2tty:dvi2tty.o dvistuff.o
! 	cc -o dvi2tty dvi2tty.o dvistuff.o
  
  disdvi:disdvi.o
  	cc -o disdvi disdvi.o
--- 8,17 ----
  #
  CFLAGS = -s
  
! all:	jdvi2tty disdvi
  
! jdvi2tty:dvi2tty.o dvistuff.o
! 	cc -o jdvi2tty dvi2tty.o dvistuff.o
  
  disdvi:disdvi.o
  	cc -o disdvi disdvi.o
diff -c dvi2tty5.0/dvi2tty.c jdvi2tty/dvi2tty.c
*** dvi2tty5.0/dvi2tty.c	Sun Dec 16 01:59:34 1990
--- jdvi2tty/dvi2tty.c	Mon Aug  2 17:36:53 1993
***************
*** 105,110 ****
--- 105,113 ----
  #if defined(VMS)
  #include unixio
  #endif
+ #if defined(MSDOS)
+ #include <ctype.h>
+ #endif
  
  
  
***************
*** 578,587 ****
--- 581,598 ----
      if (i == 0)
          usage(ign);
      strcpy(DVIfilename, str);
+ #if defined(MSDOS)
+     if (!((i >= 5) && (tolower(str[i-1]) == 'i') &&
+                       (tolower(str[i-2]) == 'v') &&
+                       (tolower(str[i-3]) == 'd') && (str[i-4] == '.'))) {
+         strcat(DVIfilename, ".dvi");
+     }
+ #else
      if (!((i >= 5) && (str[i-1] == 'i') && (str[i-2] == 'v') &&
                        (str[i-3] == 'd') && (str[i-4] == '.'))) {
          strcat(DVIfilename, ".dvi");
      }
+ #endif
  
      return;
  
diff -c dvi2tty5.0/dvistuff.c jdvi2tty/dvistuff.c
*** dvi2tty5.0/dvistuff.c	Fri Dec 14 17:47:57 1990
--- jdvi2tty/dvistuff.c	Mon Aug  2 17:46:47 1993
***************
*** 1,6 ****
--- 1,12 ----
  /*
   * Include files
   */
+ #if !defined(JIS)
+ #define JIS         1          /* if 0 then EUC or SJIS */
+ #endif
+ #if !defined(SJIS)
+ #define SJIS        0          /* if !JIS, 0 then EUC   */
+ #endif
  
  #include "dvi2tty.h"
  
***************
*** 128,135 ****
--- 134,150 ----
  font * fonts = NULL;            /* List of fontnames defined                 */
  int  symbolfont = FALSE;        /* true if font is a symbol font             */
  
+ #if JIS
+ #define     SJIS  0
+ int         inkanji = 0;        /* is in kanji sequence                      */
+ #define     KANJIIN           "\033$@"
+ #define     KANJIOUT          "\033(J"
+ #endif
  
+ int         kanji1 = 0;         /* is first kanji character                  */
+ int         kanji2 = 0;         /* is second kanji character                 */
  
+ 
  /*
   * Function definitions
   */
***************
*** 152,157 ****
--- 167,173 ----
  unsigned long   num             (int);
  long            snum            (int);
  void            dochar          (char);
+ void            dokanji         (char);
  void            symchar         (char);
  void            normchar        (char);
  void            outchar         (char);
***************
*** 177,182 ****
--- 193,199 ----
  unsigned long   num             ();
  long            snum            ();
  void            dochar          ();
+ void            dokanji         ();
  void            symchar         ();
  void            normchar        ();
  void            outchar         ();
***************
*** 373,379 ****
          else
              switch (opcode) {
                  case SET1     : setchar(get1()); break;
!                 case SET2     : setchar(get2()); break;
                  case SET3     : setchar(get3()); break;
                  case SET4     : setchar(get4()); break;
                  case SET_RULE : { long height = sget4();
--- 390,396 ----
          else
              switch (opcode) {
                  case SET1     : setchar(get1()); break;
!                 case SET2     : dokanji(get2()); break;
                  case SET3     : setchar(get3()); break;
                  case SET4     : setchar(get4()); break;
                  case SET_RULE : { long height = sget4();
***************
*** 542,548 ****
  void printpage()
  {
      register int  i, j;
!     register char ch;
  
      if (sptr != 0)
          fprintf(stderr, "dvi2tty: warning - stack not empty at eop.\n");
--- 559,565 ----
  void printpage()
  {
      register int  i, j;
!     register unsigned char ch;
  
      if (sptr != 0)
          fprintf(stderr, "dvi2tty: warning - stack not empty at eop.\n");
***************
*** 559,573 ****
--- 576,646 ----
              for (i = firstcolumn, j = 1; i <= currentline->charactercount;
                     i++, j++) {
                  ch = currentline->text[i - leftmargin];
+                 if (kanji1) {
+ #if !JIS && !SJIS
+                     ch |= 0x80;
+ #endif
+                     kanji2 = 1;
+                     kanji1 = 0;
+                 }
+                 if (!kanji2 && ch > 127) {
+                     kanji1 = 1;
+ #if JIS
+                     if (!inkanji) {
+                         inkanji = 1;
+                         fprintf(output,KANJIIN);
+                     }
+                     ch &= 0x7f;
+ #endif
+                 }
+ #if JIS
+                 if (!kanji1 && !kanji2 && inkanji) {
+                     fprintf(output,KANJIOUT);
+                     inkanji = 0;
+                 }
+ #endif
+                 if (kanji1 && (j >= (int) foo) &&
+                    (currentline->charactercount > i+1)) {
+ #if JIS
+                         if(inkanji) {
+                             fprintf(output,KANJIOUT);
+                         }
+ #endif
+                         fprintf(output, "*\n");         /* if line to large */
+                         fprintf(output, " *");          /* mark output      */
+ #if JIS
+                         if(inkanji) {
+                             fprintf(output,KANJIIN);
+                         }
+ #endif
+                         j = 2;
+                 }
                  if (ch >= SPACE)
                      putc(ch, output);
                  if ((j > (int) foo) && (currentline->charactercount > i+1)) {
+ #if JIS
+                         if(inkanji) {
+                             fprintf(output,KANJIOUT);
+                         }
+ #endif
                          fprintf(output, "*\n");         /* if line to large */
                          fprintf(output, " *");          /* mark output      */
+ #if JIS
+                         if(inkanji) {
+                             fprintf(output,KANJIIN);
+                         }
+ #endif
                          j = 2;
                  }
+                 kanji2 = 0;
              } 
          }
+ #if JIS
+         if (!kanji1 && !kanji2 && inkanji) {
+             fprintf(output,KANJIOUT);
+             inkanji = 0;
+         }
+ #endif
          putc('\n', output);
      } 
  
***************
*** 876,881 ****
--- 949,985 ----
  
  
  /*
+  * DOKANJI -- Process a kanji character opcode.
+  */
+ 
+ void dokanji(ch)
+ register long ch;
+ {
+ 
+ #if SJIS
+     register int c1, c2;
+ 
+     c1 = (ch >> 8) & 0xff;
+     c2 = ch & 0xff;
+     kanji1 = 1;
+     outchar((((c1 - 1) >> 1) + ((c1 <= 0x5e) ? 0x71 : 0xb1)));
+     kanji1 = 0;
+     outchar((c2 + ((c1 & 1) ? ((c2 < 0x60) ? 0x1f : 0x20) : 0x7e)));
+ #else
+     kanji1 = 1;
+     outchar(0x80 | ( ch >> 8 ));
+     kanji1 = 0;
+     outchar(ch & 0xff);
+ #endif
+ 
+     return;
+ 
+ 
+ } /* dokanji */
+ 
+ 
+ 
+ /*
   * SYMCHAR -- Process a character opcode for a symbol font.
   */
  
***************
*** 1003,1009 ****
   */
  
  void outchar(ch)
! register char ch;
  {
      register int i, j;
  
--- 1107,1113 ----
   */
  
  void outchar(ch)
! register unsigned char ch;
  {
      register int i, j;
  
***************
*** 1075,1081 ****
      /*----------------- end of 'Scandinavian code' ----------------*/
  
      if (foo == leftmargin-1)
!         while ((currentline->text[j - leftmargin] != SPACE)
                 && (j < rightmargin)) {
              j++;
              h += charwidth;
--- 1179,1186 ----
      /*----------------- end of 'Scandinavian code' ----------------*/
  
      if (foo == leftmargin-1)
!         while (((currentline->text[j - leftmargin] != SPACE)
!                || kanji1 && (currentline->text[j+1 - leftmargin] != SPACE))
                 && (j < rightmargin)) {
              j++;
              h += charwidth;