tcsh-6.08.05 追加日本語カタログ+漢字表示パッチ旧版互換について

1. 始めに

1995年6月に発表されたtcsh-6.06より, 定数KANJIの設定や,NLSの
カタログファイルへの対応が始まりました.
当方では,tcshの日本語のメッセージの出力や漢字を含む行の編集を
可能にするためのパッチを提供してきましたが, tcsh-6.07.12において,
ついに漢字表示・編集のパッチがtcsh本体に取り込まれました.
本来であれば,この時点で本パッチの役割は終わりなのですが,
tcsh本体では漢字パッチのコア部分しか実装されていないため
他の部分(ja.roomi,ja.koshiki等のカタログ,dspleft機能)は追加されていません.

そのため,ja.roomi等の追加カタログの単独パッケージ化と旧バージョン互換確保
のためのパッチを作成しました.

本パッケージでは以下のものを提供しています.
  - 追加日本語カタログ
    - ja.roomi
      サン電子の格闘ゲーム『ギャラクシーファイト』に登場するルーミちゃん
      という女の子の口調です(^_^).
      この娘なくして,漢字パッチはあり得ませんでした(^_^;).
    - ja.koshiki
      コナミの恋愛シミュレーションゲーム『ときめきメモリアル』登場する
      『古式ゆかり』さんです(^_^). このゲームはあまりプレイして
      いないので, ゆかりさんの再現性は相当低くなっています.
      どなたか修正していただけると幸いです(_o_).
    - ja.asuka
      アニメ『新世紀エウ゛ァンゲリオン』の『惣流・アスカ・ラングレー』です.
      作者:松田@東工大さん dyky@ok.mei.titech.ac.jp
    - ja.ayanami
      アニメ『新世紀エウ゛ァンゲリオン』の『綾波レイ』です.
      作者:"CyberKnight Tekkaman Blade"さん blade@cyber.email.ne.jp
    - ja.ruri2
      アニメ『機動戦艦ナデシコ』の『ルリルリ(ホシノ・ルリ)』です.
      作者:木下＠理科大さん cue@pop01.odn.ne.jp
    - ja.multi
      パソコンゲーム『To Heart』の『HMX-12 マルチ』です.
      作者:矢鋪＠松山大さん s974123@cc.matsuyama-u.ac.jp
           平岡＠愛媛大さん flathill@flathill.gr.jp
    - ja.merril
      アニメ『トライガン』の『メリル』です.
      作者:U-Gillyさん NCD01567@nifty.ne.jp
    - ja.rishu
      アニメ『まもって守護月天』の離珠です.
      作者:U-Gillyさん NCD01567@nifty.ne.jp
    - ja.miyakonjo
      作者の方の田舎である宮崎県都城市周辺の方言です.
      作者:久保＠NEFSさん kubo@edu.nefs.nec.co.jp
    - ja.renkopocchi
      アニメ『夢のクレヨン王国』の人気サブキャラの一人『レンコポッチ』です.
      作者:みふさん sueyasu@hongkong.click.or.jp
    - ja.tosa,ja.tosa-color
      日本メジャー方言(?)の一つ『土佐弁』と,そのカラー版です.
      作者:坂本 浩則さん hsaka@mth.biglobe.ne.jp
      カラー版を使用するためには,tcsh-6.08.05移行では変数colorcatの
      設定が必要です. それ以前では,パッチが必要です.
    - ja.osaka
      日本メジャー方言(?)の一つ『大坂弁』です.
      標準日本語カタログ『ja』をosaka(newosaka-1.0)で変換したものです.
      作者:坂本 浩則さん hsaka@mth.biglobe.ne.jp
    - ja.pirates
      人気アイドル(?)『パイレーツ』です. 特に「だっちゅ〜の」に
      注目しています.
      作者:清塚謙助さん kiyozuka@cs.ie.niigata-u.ac.jp
    - ja.IR
      NHK教育アニメ(^_^;)『コレクター・ユイ』の『IR』です.
      作者:重村法克＠東海大学さん nork@lb.u-tokai.ac.jp

  - 旧版互換及びオリジナル機能の追加のためのパッチ
    (tcsh-6.08.05に対応)
    - 漢字パッチの初期バージョンから提供していた変数dspkanjiを追加します.
      (tcsh本体はdspmbyteのみ)
    - 変数ignoreeofを設定時にあと何回EOFを入力するとシェルが終了するか
      わかるようするための変数dspleftの追加.
      # ただし日本語&英語以外のカタログファイルへの修正は行っていません.

2. パッケージの作成方法
2.1. 追加カタログのtcsh本体環境へのマージと,パッチの実施
   このREADMEを読んでいる方は, すでにパッケージの解凍を終了しているものと
   思います.
   カタログのみを使用される方は2.へ進んでください.

   パッチも当てる方はまず,追加カタログをtcshの本体環境へマージする必要が
   あります. 以下の手順でマージを行ってください.

   0)当パッケージのディレクトリとtcshの本体のディレクトリを同じ場所に
     してください.
     (lsを行うと,tcsh-6.08.05と当パッケージのtcsh-6.08.05.addが
      同じディレクトリにある)
   1)当パッケージのmerge.shを実行してください.
     オリジナルカタログのtcsh本体環境へのマージと, パッチあてを同時に
     行います.

2.2. カタログの使用方法

カタログを使用される方は以下を行なって下さい.
以下の入力例では, tcsh.ja.roomiを基準にしています. 他のカタログについては
触れていませんので,適時tcsh.ja.roomiを対応するカタログにに置き換えてください.
1) 日本語カタログはnlsの下にはいっています.
   カタログファイルはEUCで作成しているので各システムに適合する
   コードに変換して下さい.

2) tcshソースディレクトリの下で以下のように実行して下さい.
   make -f "your Makefile" catalogs
   追加カタログ単体の場合は, 以下のように実行してください.
   make -f Makefile.add catalogs

3) tcshソースディレクトリのところに追加カタログが
   作成されるので,以下のようにファイルを登録して下さい.
   - システムに登録する場合
     スーパーユーザーになるかシステム管理者にお願いして,このファイルを
     localeディレクトリ(Solaris2.3では/usr/lib/locale/ja/LC_MESSAGES)
     にtcshというファイル名でコピーか移動をして下さい.
     例:# cp tcsh.ja.roomi.cat /usr/lib/locale/ja/LC_MESSAGES/tcsh
     なお,ファイル名を変更しないでコピー・移動を行った場合,環境変数NLSPATH
     の設定が必要です.
     例:% setenv NLSPATH /usr/lib/locale/ja/LC_MESSAGES/%N.ja.roomi.cat
     ＃ 各国語を考慮したNLS環境を作成する場合は,前者の『ファイル名をtcshに
     ＃ 変更して格納』する方を推奨します.
   - ローカルの環境に登録する場合
     自分用の環境ディレクトリにtcshという名前のディレクトリを作成し, この
     配下にコピーか移動をして下さい. その後,~/.cshrcか~/.loginに
     環境変数NLSPATHの設定を行って下さい.
     この時,カタログのファイル名を変更する必要はありません.
     例:$HOME/lib/tcsh/に置く場合
        % cp tcsh.ja.roomi.cat $HOME/lib/tcsh/
        % setenv NLSPATH $HOME/lib/tcsh/%N.ja.roomi.cat
     詳しくはcatopen(3)のマニュアルを参照してください.
     重要!!
     環境変数NLSPATHは必ず環境変数LANGより前に設定してください.
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

4) 環境変数LANGにシステムに応じた日本語環境の名前を設定して,
   (Solaris2.3ではja)適当な文字列を入力して,エラーメッセージが
   日本語になっていればOKです. すでに日本語環境の名前になっている場合でも,
   同じ値を再設定するか, いったん終了して,再ログインしてください.

・日本語そのものが表示されない場合
  漢字が表示されない場合,まずcatコマンドを使用して端末自体が漢字を使えるか
  テストを行って下さい.
  % cat
  (漢字を入力)
  上記の方法で漢字が表示されない場合は,以下の項目を確認して下さい.
  - 端末自体の漢字対応(xterm等)
  - 端末の漢字コード
  - sttyの設定
    ・istripは設定しない (-istrip)
    ・使用するビット数は8 (cs8)
    ・パリティーは使用しない (-parenb)
    (詳細はマニュアルのsttyの項目を読んでください)

・メッセージが英語のまま変更されていない場合
    - 比較的有名所のOSでは,環境変数LANGを設定した時点で自動的に
      変数dspmbyteが設定されますが,マイナーなOSでは,自動的に設定する
      事が出来ません. その場合はsetコマンドで別途dspmbyteを設定する
      必要があります.
      % set dspmbyte = euc
    - 一部(こっちが多いかもしれませんが)のOSでは,gencatコマンドを
      実行すると,*.catとともに,
      *.cat.mと言うファイルが作成されます.
      この場合はこのファイルもコピーもしくは移動を行う必要があります.
    - システムに登録する場合
      (カタログファイル名をtcshに変更した場合,ファイル名をtcsh.mに変更する
       必要があります.)
      例:# cp tcsh.ja.roomi.cat.m /usr/lib/locale/ja/LC_MESSAGES/tcsh.m
    - ローカルの環境に登録する場合
         % cp tcsh.ja.roomi.cat.m $HOME/lib/tcsh/
      単一のファイルとして管理したい場合,gencatコマンドをパラメタ無しで
      実行し,usageに[-m]が入っていたらnls/Makefileもしくは,
      nls/Makefile.addの以下の行を修正して,make catalogsを
      やり直すことで,*.cat.mは
      作成されず,一つのファイルで済みます.
GENCAT=         gencat
を
GENCAT=         gencat -m
    - tcsh内部が呼び出している,NLSの関数であるcatopen()の仕様により,
      システムのNLSカタログのディレクトリにコピーしても,環境変数NLSPATHの
      設定が必要になる場合があります.
      詳しくはcatopen(3)のマニュアルを参照してください.
      重要!!
      環境変数NLSPATHは必ず環境変数LANGより前に設定してください.
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        設定例: % setenv NLSPATH "/usr/lib/locale/%L/LC_MESSAGES/%N"
      この問題は,現在以下のOSで発生することを確認しています.
      おそらく,他にも該当するOSはいくつかあるでしょう.
      - FUJITSU UXP/M
      - FUJITSU UXP/DS V10系 (V20L10では発生しません.)
    - 一部のOSでは,環境変数NLSPATHの内容をコマンド起動時しか読み込んで
      くれない仕様のものがあるらしく, tcsh内でNLSPATH及び環境変数LANGを
      指定しても,カタログを読み込んでくれません.
      カタログを表示するためには標準のディレクトリ
      (SunOS 4.1.3では,/usr/share/lib/locale/LC_MESSAGES/default/
       4.1.4だと/usr/share/lib/locale/LC_MESSAGES/${LANG}/
       が使えるかも(未確認))
      にファイル名を変更してコピー・移動を行う必要があります.
      この問題は以下のOSで発生することを確認しています.
      - SunOS 4.1.3,4.1.4

2.3. カタログの切り替え方法について

  各カタログファイルは環境変数NLSPATHを変更する事で切り替えを行います.
  カタログの切り換えは以下の方法があります.
  1) 各カタログをコピーする
     以下の例では,カタログファイルを$HOME/lib/tcsh/配下におきます.
  2) 以下のようなaliasを$HOME/.cshrcファイルに追加します.
     以下の例では環境変数LANGは"ja"で日本語に設定されるものとします.
# "ja.roomi"に切り換え
alias jar 'setenv NLSPATH "$HOME/lib/tcsh/%N.ja.roomi.cat" ; setenv LANG ja'
# "ja.multi"に切り換え
alias jam 'setenv NLSPATH "$HOME/lib/tcsh/%N.ja.multi.cat" ; setenv LANG ja'

3.3. パッチの使用方法

パッチの旧版互換及びオリジナル機能を使用する場合は,以下の手順でtcshを
作成して下さい.
1) config_f.hを見て必要な機能の定数を設定して下さい.

#define DSPKANJI	漢字表示のための変数として,dspkanjiを使用します.
                        この機能を使用する時は定数KANJI及びDSPMBYTEが
                        必須です.
                        # ただしmake時の内部チェックはしていません.

#define DSPLEFT		残りEOF数を表示します.

なお,tcsh-6.08.04用パッチ向けに提供していたcolorcat機能はtcsh本体に
取り込まれていますが,以下の定数の設定をしないと有効にならないので
注意してください

# define COLORCAT	メッセージのエスケープコードを有効にします.

2) tcshのREADMEに従ってコンパイルします.
   コンパイル方法は, 2.の項目が追加されるほかはtcshの標準の方法と
   同じです.

4) 完成したtcshを実行して,コマンドラインからsetコマンドを実行して下さい.
   コンパイル定義により,変数versionの文字列の最後尾に以下の文字列が追加
   されています. なお,"??"の部分には, パッチのバージョンが入ります.
   DSPKANJIを定義	dspk??
   DSPMBYTEを定義	dspm??
   DSPLEFTを定義	dspl

5) Solarisや,Linux等のメジャーなOSでは,環境変数LANGを設定した時点で
   変数dspkanjiが設定されます.
   マイナーなOSでは,環境変数LANGを設定してもdspkanjiは設定されないため,
   setコマンドを使用して,対応する漢字コードに設定します.
   残りEOF表示を使用される方は変数ignoreeofと変数dspleftをsetコマンドで
   設定し,EOF(通常^D)を入力して,残り数がちゃんと表示されるか
   確認して下さい.

4. 動作確認・プログラム集などへの登録状況について

このパッチおよびカタログは以下のOSで確認しています.
  - Sun Solaris2.4
  - Fujitsu UXP/DS V20L10
  - Fujitsu UXP/M
端末ソフト
  - TeraTermPro 2.3

漢字パッチのころに協力してくれた方々・収録パッケージなど
- パッチ部分のうち,当方で確認不可能だったNeXTについては以下の方から問題報告と
  一緒に動作報告をいただきました. ありがとうございます.
  垣内正年@大阪大学工学部さん	NEXTSTEP Release 3.3J

- カタログについては,以下の動作報告をいただきました.
  ありがとうございます.
  久松＠ＰＦＵさん        linux(Slackware96?) & libc-5.3.12
  鈴木一生＠東工大さん    FreeBSD 2.2.5R/3.0 CURRENT(971215)
  桝原@mec.mei.co.jpさん  SunOS 4.1.4(注)
  原@神戸大さん           NetBSD/pc98 1.3
  宮本@神戸大さん         Solaris 2.5
                          IRIX 6.4
  (氏名公開未確認のため匿名) IRIX 6.5
  小川邦彦さん            HPUX 10.20
  (注)上記のカタログ作成方法の『表示されない場合』を参照して下さい.

- また,以下のパッケージ(?)にこのパッチが登録されております.
   FreeBSD	port    (カタログ含む)
   Linux	PJE-0.1 (個人的調査による 登録Rel.はRel.3a カタログ不明)
		Debian-JP (bo版,hamm版の両方 カタログ含む)
   IRIX 6.5
  上記の環境であれば, 比較的簡単にこのパッチを含んだtcshを使用出来ます.
  こうなると非常にプレッシャーを感じてしまいます.
  # 本来であれば, FreeBSDおよびLinuxに対して最新版の動作確認・
  # サポートを当方で行うべきなのですが,当方にはLinuxおよびFreeBSDの
  # 環境が無く,非常に申し訳ない限りです.

パッチに関しては一部を除いて,各機種共通コードのようなので大丈夫だとは
思いますが保証はしません.
なお,バグレポートを送っていただいた時, なるべく解決するように努力しますが,
仕事の都合により, 修正どころか全く音沙汰なしになることもあり得るので,
あらかじめ御了承下さい.
# もちろん送っていただいた方には感謝しています.
また, 当方はNetNewsをあまり読んでいません.
そのため,NewtNewsに投稿されても, たぶん見ることは無いので,
なるべくメールでお願いします.
# MLも全然入っていません(T_T). かなり前ですが,FreeBSDのML検索を興味本位で
# 見たら, 私のパッチが元でトラブルが起きていたみたいですね(_o_)
なお, 漢字パッチのコア部分への修正は, tcshの作者である,
christos氏へ送った方が話が早い場合があります.

5. 結局残ってしまった問題点(T_T).

・tcsh-6.07.06以降の新機能,EBCDICコードの漢字に対応できない.
  # 確か,OSによって漢字コードの方式はまちまち(T_T).
  # 少なくても, 漢字IN/OUTコード方式のJEFコード体系はだめです(T_T).
・stty tabsを設定したときに,カーソル移動において特定の桁の漢字が化けます.
  (報告:佐々木@コムウェアさん)
・使用コード=sjis,かつ'\'が2バイト目となる漢字コードが含まれている
  メッセージの出力時に文字列が化けます.
  (sjisでよくある問題ですね(T_T))
・コード判定テーブルの指定方法が恐ろしく面倒な上に非常に見にくい.
・漢字コードを多く含む入った行が複数行にまたがると編集できません.
  (行末に漢字の1バイト目,次行の行頭に漢字の2バイト目が来ると問題が発生します.
   漢字コードの折り返し処理の追加が必要. 1回目の修正は断念(T_T))
・ESC-[数字](漢字)が使用できません.(現在,この操作は出来ないように
  なっています.)
・SunOS4.1.3,4.1.4でNLSPATH及びLANGを設定し直してもカタログをちゃんと
  設定してくれない. どうやら,/usr/xpg2lib/libxpg.aの仕様の可能性が高い(;_;)
  現在,代替品の情報を募集しています. 現在のところ以下の情報をいただきました.
  (情報のみで実際の確認は行っていません)
  - elm-2.4* (当方が把握しているのはelm-2.25jp0.38.tar.gz)
    メールリーダー. この中にカタログ参照に必要なライブラリが入っています.
    情報元  勤務先の方
  - X Window SystemのX_LOCALEシステム
    すいません.詳細はわかりません.
    最新版ではサポートをやめたらしいと記憶しています.

6. 配布条件

  このパッチの配布はオリジナルの配布条件に準ずるものとします.
tcshの配布条件は, README及びtcshのソースコードの先頭に
記述されています.

7. 最後に

  ついにtcshの日本語パッチがtcsh本体へ統合されました.
真面目な日本語カタログの"ja"もtcsh本体に取り込まれ, 一応の日本語対応が
完了した事になります.
  思えば,最初のバージョンを提供してからもう3年以上になります.
この間に, いろいろな方と交流を持つ事が出来, フリーウェア開発の
奥の深さと大変さを教えられました.
  さらに, 外国の方にメールを送るという行為も非常に大変でした
(何しろ英語力が無い). しかし,あらゆる手段や,時には翻訳ソフトという
反則技を投入して英語文章を作成するのは結構楽しかった気がします.
  tcshの漢字パッチ開発は,一段落した形となりますが,
また,機会があれば何か作ってみたいと思います.
# まあ, バグ取りや機能不足の解決が残っていますけどね・・・・・
# また,カタログの完全版も作らないといけないとは思うのですが,
# 時間が無いのと語学力の限界で出来るかどうか・・・・・
  ここにきて,少しずつカタログの方も使ってくれている方が増えているようで,
うれしい限りです. あと,オリジナルカタログの情報もお待ちしております.
現在,7つを超えるオリジナルカタログが作成されています.
どれも, 非常に面白い内容で, 利用される方もきっと楽しめる事と思います.

最近, 新しく"『通信用語の基礎知識』へのオリジナルカタログ機能の掲載"を
目標として掲げました.
UNIX(Free系含む)普及における,重要な要素の一つといえる『波動を帯びた』
ツールとしても, 何かの役に立てたらと思います.
URL: http://www.vector.co.jp/vpack/filearea/data/net/doc/index.html
     http://www3.cds.ne.jp/~marimo/
# tcshの名前自体は掲載されています.

当初,このパッチは漢字コードの編集などには
全く興味がなく,ただ"ja.roomi"を使う為だけに作成しました.
ところが, NLSに対応していない方からメールで
"NLS抜きで入力でも漢字が表示できる"という報告をもらい,
試したらあっさり再現してしまいました.
調査の結果,パッチが全くの無駄では無いとは分かったものの,このままでは
NLSを対応させる意味がないと思い,入力にも対応させようとしました.
そして,すぐに入力行の漢字の表示は出来るようになったのですが,
漢字に対応した移動や削除が全く出来ず,このままパッチを出しても
恥ずかしいだけで全く意味がないため, 思い切ってNLSに関係なくちゃんと
漢字を使えるようにしようとしたのが,このパッチです.
そして, ついに日本語パッチはtcsh本体に取り込まれ,
事実上パッチ提供の必要はなくなりました.

これにより,shellの日本語・・・というかマルチバイト環境の充実のきっかけに
なってくれればと思います.
# これからは,事実上怪しいカタログの配布に専念する事になります(爆).

このパッチに対して,指摘してくれたすべての方々に感謝します.

また,このパッチを作るおおもとのきっかけを作ってくれた
『ギャラクシーファイト』のルーミと,このゲームの開発スタッフには特に
感謝したいと思います.

以上で説明は終りです.
ここまで,下手な文章につき合っていただいてありがとうございます.

---
榊原 善之
HomePage:http://www2.wbs.ne.jp/~znc/
E-mail:znc@mail.wbs.ne.jp
       BQA01304@nifty.ne.jp
