CentOS7.6に日本語対応のTgifの導入

#はじめに

UNIX環境で使われる図表のお絵かきツールとして1990年台からTgifというアプリケーションが存在します。

> https://en.wikipedia.org/wiki/Tgif_(program)
> http://bourbon.usc.edu/tgif/

このソフトウエアは2011年に公開された4.2.5以降バージョンアップされてないのですが、過去に作った図表を参照したいという要求がありまして、最新のOSであるCentOS7.6/x86_64へのインストール方法をしらべてみました。

#Tgifの主な用途 (2000年前後ぐらいの話かな)

古いLaTeXでは図表として画像ファイル形式のjpgやpngなどを張り付ける事はできず「EPS(Encapsulated PostScript)」が用いられていました。私の職場ではTgifは主にLaTeX内に挿入する図表をEPS形式で作成する目的で利用されていました。

> Encapsulated PostScript
> https://ja.wikipedia.org/wiki/Encapsulated_PostScript

EPSというのはプリンタ用の言語のPostscriptの一種です。

> PostScript
> https://ja.wikipedia.org/wiki/PostScript

Postscriptとは、印刷物の文字の印刷位置/文字情報/フォントの指定/図形の幾何学情報などをプリンタに指令して印刷する言語です。

プリンタの高級機にはPostscriptを直接解釈する事が出来る機能を持つものがありまして、Postscriptを直接プリンタに送り付けると印刷できます。

(蛇足: なお現在の普及価格帯のプリンタはほとんどはプリンタ言語が非公開だったり、プリンタの印刷イメージをパソコン側で生成して、画像ファイルとして印刷しているのが多いです。プリンタは印刷物を文字情報としては認識してない。)

前知識はこのへんにしておきます。

#Tgif 日本語パッチ
Tgifはデフォルトで日本語対応しているのですが、日本語パッチは文字コードとしてEUC-JPを想定しているそうで、現在のUNIX(Linux)は文字コードがUTF-8環境のため正常に動きません。いろいろめんどくさい作業が必要です。

また生成される図表のEPSファイルに含まれるフォントの指定がEUCを想定されています。
具体的には以下のフォントなのですが

```
Ryumin-Light-EUC-H
GothicBBB-Medium-EUC-H
Ryumin-Light-EUC-V
GothicBBB-Medium-EUC-V
```

これ、現在のUTF-8のUNIXの環境などで正常に表示されない事が多いです。

理由は私もよく知らないので聞かないでください(^_^;

ただしPostscriptプリンタはこのフォントを指定しても正常に印刷できる事が多いようです。

(試した範囲ではPostscriptプリンタでは印刷できました。ですがCentOS7のソフトウエアPostscriptビュワーのGhostViewやevinceでは文字化けになります。)

なので、本文で述べている方法で日本語化してTgifを動かしても、生成されるEPSファイルなどは現在のUTF-8の日本語では日本語が文字化けします。Postscriptプリンタがあれば（たぶん）日本語が印刷できるかもよ。という話です。

# 事前準備1
CentOS7.6の環境でGUIで日本語入力ができるようにしてください。

きちんと設定しないと日本語入力できないです。

>CentOS7の日本語入力(かな切替)
>https://qiita.com/F_August/items/54e9ad85ef628196f2b7

Firefoxなどで日本語入力ができるか確認してください。

日本語入力開始は「Windowsキー+SPACEキー」です。

# 事前準備2
Tgifをインストール後起動するとフォントが足りないというエラーが多数でます。事前にいれておきましょう。必要なのを取捨選択すればよいのですが、面倒なので全部入れました(^_^;

```
$ yum install xorg-x11-fonts-*
```

またこれでも日本語フォントが足りないようです。他のLinux distributionのVineからrpmファイルをもらってきましょう。

なおVineのrpmをrpmコマンドでinstallもできますが、パッケージがCentOS管理外になるので、rpmコマンドの利用は念のためやめてます。

```
$ mkdir /usr/local/VineSeed
$ cd /usr/local/VineSeed
$ wget ftp://ftp.ics.es.osaka-u.ac.jp/pub/mirrors/Vine/VineSeed/x86_64/RPMS.plus/xorg-x11-jpfonts-4.0-3vl7.noarch.rpm

$ rpm2cpio xorg-x11-jpfonts-4.0-3vl7.noarch.rpm | cpio -idv

$ cd /etc/X11/fontpath.d
$ ln -s  /usr/local/VineSeed/usr/share/X11/fonts/japanese VinePlus-xorg-x11-jpfonts:pri=99
```

rpm2cpio云々の作業はrpmファイルをインストールせずに中身を展開する作業です。

「ln -s」の 「pri=xx」は実はよくわからないのですが、おそらく優先順位をさげる命令ではないかと。既存のフォントそのような設定がしてありましたので、真似して優先順位を下げる設定してます。

Vineからフォントを取得するという件はこちらを参考にしました。
> CentOS 7 に tgif インストール
> https://www.alprovs.com/wordpress/?p=70

RPMの展開についてはこちらを参考にしました。
> RPMをインストールせずにカレントディレクトリ以下に展開する
> https://qiita.com/koara-local/items/90c0f2d7bd3865d55cdc

#コンパイルに必要なツールの導入。

こんな感じでしょうか。他にも必要なのあるでしょうが、必要に応じて入れてください。

```
$ yum install imake libXmu-devel libidn-devel libXt-devel 
$ yum install nkf zlib-devel
```

参考文献
> tgifをソースからbuildしてinstall @ Redhat EL7.2 
> http://karumans.blogspot.com/2016/12/tgifbuildinstall-redhat-el72.html


#ソースコードの取得およびコンパイル。

ソースコードを取得してコンパイルしてください。この作業は次の文献に寄ってます。

> Tgifの日本語出力対応とUI日本語化 on ubuntu16.04
> https://motchy99.blog.fc2.com/blog-entry-74.html

まず、ftpサイトからダウンロードしてパッチを当ててください。

```
$ mkdir ~/tgif
$ cd ~/tgif
$ wget ftp://ftp.ring.gr.jp/pub/graphics/tgif/tgif-QPL-4.2.5.tar.gz
$ wget ftp://ftp.ring.gr.jp/pub/graphics/tgif/patches/tgif-QPL-4.2-patch5b.gz
$ tar zxvf tgif-QPL-4.2.5.tar.gz
$ cd tgif-QPL-4.2.5
$ gzip -dc ../tgif-QPL-4.2-patch5b | patch -b -p0 
```

次のファイル修正を実施。

```
$ cp Tgif.tmpl Tgif.tmpl.ORG
$ emacs Tgif.tmpl
$ diff -u Tgif.tmpl.ORG Tgif.tmpl
--- Tgif.tmpl.ORG  2011-06-28 11:04:59.000000000 +0900
+++ Tgif.tmpl   2018-12-06 15:22:48.724841927 +0900
@@ -41,7 +41,7 @@
 XCOMM BINDIR   = ${HOME}/bin
 XCOMM MANPATH  = ${HOME}/man
 XCOMM TGIFDIR  = ${HOME}/lib/X11/tgif
-XCOMM MOREDEFINES      = -D_HAS_STREAMS_SUPPORT -DENABLE_NLS -D_TGIF_DBG
+MOREDEFINES    = -D_HAS_STREAMS_SUPPORT -DENABLE_NLS -D_TGIF_DBG
 LOCALEDIR      = /usr/share/locale
 DIRDEFINES     = -DTGIF_PATH=\"$(TGIFDIR)\" -DPSFILE_MOD=0664 \@@\
                   -DLOCALEDIR=\"$(LOCALEDIR)\" \@@\
@@ -53,7 +53,7 @@
                  -DDEFATTRGROUP=\"TANGRAM-II:Declaration:Events:Messages:Rewards:Initialization:Watches\" \@@\
                  -D_NO_NKF -D_NO_CHINPUT -D_NO_XCIN \@@\
                  -DUSE_XT_INITIALIZE -DPTHREAD
-MOREDEFINES    =
+XCOMM MOREDEFINES      =

 XCOMM ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
 XCOMM Please see Imakefile for more defines to be added to MOREDEFINES above

$ cp wb.c wb.c.ORG
$ emacs wb.c
$ diff -u wb.c.ORG wb.c
--- wb.c.ORG       2011-06-28 11:04:59.000000000 +0900
+++ wb.c        2018-12-06 15:23:14.146816670 +0900
@@ -28,7 +28,7 @@
 #include "cmdids.h"

 #ifdef _HAS_STREAMS_SUPPORT
-#include <stropts.h>
+//#include <stropts.h>
 #include <sys/types.h>
 #endif /* _HAS_STREAMS_SUPPORT */
 #include "rmcast/src/rmcast.h"
```

コンパイルおよびインストールを実施してください。

```
$ xmkmf
$ make Makefile
$ make Makefiles
$ make depend
$ make
$ make install
$ make install.man
```

#日本語化

この作業もこの文献によってます。

> Tgifの日本語出力対応とUI日本語化 on ubuntu16.04
> https://motchy99.blog.fc2.com/blog-entry-74.html

makeは失敗するがそのままで問題ないようです。

```
$ cd po
$ xmkmf
$ make
$ cd ja
$ cp ja.po ja.po.org
$ nkf -w -w80 ja.po > ja.po-utf8
$ cp ja.po-utf8 ja.po-utf8.org
ja.po-utf8の14行目の JISX-0208-1983-0 を UTF-8 に書きかる。
$ emacs ja.po-utf8

$ diff -c  ja.po-utf8.org ja.po-utf8
*** ja.po-utf8.org      2018-12-18 20:37:21.650226069 +0900
--- ja.po-utf8  2018-12-18 20:37:42.736347392 +0900
***************
*** 11,17 ****
  "Last-Translator: Jun Nishii <jun@vinelinux.org>\n"
  "Language-Team: Project Vine <Vine@vinelinux.org>\n"
  "MIME-Version: 1.0\n"
! "Content-Type: text/plain; charset=JISX-0208-1983-0\n"
  "Content-Transfer-Encoding: 8-bit\n"

  #: ../../menuinfo.c:72
--- 11,17 ----
  "Last-Translator: Jun Nishii <jun@vinelinux.org>\n"
  "Language-Team: Project Vine <Vine@vinelinux.org>\n"
  "MIME-Version: 1.0\n"
! "Content-Type: text/plain; charset=UTF-8\n"
  "Content-Transfer-Encoding: 8-bit\n"

  #: ../../menuinfo.c:72

$ cp ja.po-utf8 ja.po
$ xmkmf
$ make
$ make install
```

以上の一連の作業で以下のファイルが導入されます。これらはOSのパッケージ管理に入らないので注意されたし。

```
/usr/bin/tgif
/usr/lib/X11/tgif/*  // 多数のファイル
/usr/share/man/man1/tgif.1x
/usr/share/locale/fr/LC_MESSAGES/tgif.mo
/usr/share/locale/ja/LC_MESSAGES/tgif.mo
/usr/share/locale/ru/LC_MESSAGES/tgif.mo
```

#起動スクリプトの設定
CentOSの標準設定の日本語環境では言語設定として「ja_JP.UTF-8」になっていますが、この設定のままではTgifに日本語入力ができません。「ja_JP.EUC-JP」に変更する必要あります。

以下の起動スクリプトを作成します。

```:/usr/bin/tgif-jp
#!/bin/bash
export LANG=ja_JP.EUC_JP
exec /usr/bin/tgif $*
```

上記ファイルをemacsで作成しchmod +xしてください。

```
$ emacs /usr/bin/tgif-jp
$ chmod +x /usr/bin/tgif-jp
```

これでtgif-jpコマンドで日本語対応のtgifが起動します。

なお、まだ日本語の設定が終わってませんので、続きを読んでください。

# Xリソースの設定
日本語のフォント設定などです。

多くの文献では、~/.Xdefaultsやコマンドxrdbを使う方法が述べられているが、毎回読み込むのは大変なので、OSの設定にします。

古いOSではXリソースファイルの置き場所として「/usr/lib/X11/app-defaults/」を使っていました。しかし現在ではここに置いても読んでくれないようです。CentOS7では「/etc/X11/app-defaults/」のようです。また「ja_JP.EUC-JP」用の設定は「/etc/X11/ja_JP.EUC_JP/app-defaults/」に置けばよいようです。
(この調査はstraceコマンドを使いました。興味のある方はググってください。)

```
$ mkdir -p /etc/X11/ja_JP.EUC_JP/app-defaults
$ emacs /etc/X11/ja_JP.EUC_JP/app-defaults/Tgif
```

ファイル/etc/X11/ja_JP.EUC_JP/app-defaults/Tgifの内容は次のようでしょうか。これはいろいろ試した設定ではありません。利用者のみなさんで試行錯誤してみてください。元の設定は次の文献によってます。

> Tgifの日本語出力対応とUI日本語化 on ubuntu16.04
> https://motchy99.blog.fc2.com/blog-entry-74.html


```:/etc/X11/ja_JP.EUC_JP/app-defaults/Tgif
! Xtt による truetype font を使う。
Tgif.SquareDoubleByteFonts: \n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,H,Ryumin-Light-EUC-H\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,H,Ryumin-Light-EUC-H\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,H,Ryumin-Light-EUC-H\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,H,Ryumin-Light-EUC-H\n\
\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,H,GothicBBB-Medium-EUC-H\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,H,GothicBBB-Medium-EUC-H\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,H,GothicBBB-Medium-EUC-H\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,H,GothicBBB-Medium-EUC-H\n\
\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,V,Ryumin-Light-EUC-V\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,V,Ryumin-Light-EUC-V\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,V,Ryumin-Light-EUC-V\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,V,Ryumin-Light-EUC-V\n\
\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,V,GothicBBB-Medium-EUC-V\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,V,GothicBBB-Medium-EUC-V\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,V,GothicBBB-Medium-EUC-V\n\
-*-*-medium-r-*--%d-*-*-*-*-*-*x0208.1983-*,V,GothicBBB-Medium-EUC-V

Tgif.Lang: ja_JP.eucJP
Tgif.Modifiers: false
Tgif.ConvSelection: _JAPANESE_CONVERSION
Tgif.RyuminShowFontChar: \244\242
Tgif.GothicBBBShowFontChar: \244\316
Tgif.Geometry: 700x400+10+10
!デフォルトのフォントを Ryumin の 18 ポイントに
Tgif.InitialFont: Ryumin
Tgif.InitialFontSize: 18
! ImageMagic に含まれる convert を使ってビットマップを xpm に変換
Tgif.GifToXpm: convert %s xpm:-
Tgif.MaxImportFilters: 2
Tgif.ImportFilter0: Jpeg jpg convert %s xpm:-
Tgif.ImportFilter1: EPS eps convert %s xpm:-
Tgif.FontSizes: 8 9 10 11 12 14 16 18 20 22 24 26 28 32 36 40 48 56 64 72 100 150 200 250 300
Tgif.MenuFontSet: a14,k14,r14
Tgif.MsgFontSet: a14,k14,r14
Tgif.BoldMsgFontSet: a14,k14,r14
Tgif.BoldMsgFontDoubleByte: true
Tgif.DoubleByteInputMethod: xim
```


以上です。

#動作確認

以下のコマンドで日本語環境のTgifが立ち上がり、日本語入力も可能と思います。

```
$ tgif-jp
```

古いTgifファイルがあれば閲覧可能か確認してみてください。

なお、もし古いTgifのファイルを開いた時に「Cannot find screen font for 'Ryumin-Light-H'. 'Times' font is used instead.」とか出て日本語が表示されない場合は、Tgifのobjファイルをemacsで開き「Ryumin-Light」「GothicBBB-Medium」などを「Ryumin-Light-EUC」「GothicBBB-Medium-EUC」に置換してみてください。(EUC-JPの日本語が含まれるのでEUC-JPが扱えるエディターを使ってください。)

あと、日本語入力ができなくなる事が多々あるようです。logoutしてloginしなおしたら治る事が多いようです。

#まとめ
一連の作業でインストールしたファイルは以下の通りです。OSのパッケージ管理外となります。

```
/usr/local/VineSeed/*  // 多数のファイル
/etc/X11/ja_JP.EUC_JP/app-defaults/Tgif
/etc/X11/fontpath.d/VinePlus-xorg-x11-jpfonts:pri=99 (シンボリックリンク)
/usr/bin/tgif
/usr/bin/tgif-jp
/usr/lib/X11/tgif/*  // 多数のファイル
/usr/share/man/man1/tgif.1x
/usr/share/locale/fr/LC_MESSAGES/tgif.mo
/usr/share/locale/ja/LC_MESSAGES/tgif.mo
/usr/share/locale/ru/LC_MESSAGES/tgif.mo
```