Copyright (C) Mark Nudelman
Copyright (C) Kazushi (Jam) Marukawa
Copyright (C) Altair☆
This is a unofficial distribution of the less for OS/2 WARP,
based on version 358+iso254. Please report any problems of this distribution to
me at NBG01720@nifty.ne.jp.
This file is written in Japanese language with encoding in Shift_JIS.
これは、
OS/2 WARP用にコンパイルした
lessの非公式な配布です。less
version 358+iso254をベースとしています。OS/2セッションはもちろんのこと、オリジナルをそのままコンパイルした場合と異なり、xtermやrxvt、ktermなどXFree86のターミナル・エミュレータ・ウィンドウでも利用可能です。
この配布についてのお問い合わせやバグレポートなどあれば、NBG01720@nifty.ne.jpまでお願いします。
- XFree86のxtermやrxvt、ktermクライアントなどでも利用可能にするために、キーボード入力周りの処理がOS/2のVIOを叩くコードになっていたのを削り、unix用コードをそのまま利用するようにしました。
- XFree86環境下のxtermやktermなどのウィンドウから呼び出された時に、そのwindow geometry情報からウィンドウ・サイズを算出するscrsizeモジュールを追加しました。これにより、xtermやktermのウィンドウのサイズが変更されていても正しく動作します。但しless起動後のリサイズには未対応です。
- OS/2ネイティブ環境でも、カーソルキーや Home、End、PgUp、PgDnキーを利用可能にしました。
他に、F3かAlt-F4を終了キーに定義しておきました。また、これらのキーの第1バイトは、オリジナルでは、‘\340’にリプリゼントされますが、シフトJISコード領域とダブってしまうので、このディストリビューションでは、‘\xFF’にリプリゼントするようにしました。
(novio11版以降、この文を削除)
- LANG環境変数がja_JPに設定されている時、JLESSCHARSETにjapanese-ujisの代わりにjapanese-sjisを仮定します。またLANG環境変数の値はケース・インセンシティブです。
- less.exeとlesskey.exe、scrsize.exeをpathの通ったディレクトリに置いてください。(XFree86環境を利用しない場合には、scrsize.exeは不要です)。
- emx 0.9d FIX 03以降のランタイム・ライブラリがインストールされていることが前提です。ランタイム・ライブラリ(emxrt.zip)は、以下のanonymous ftpで配布されています。
- 環境変数TERMCAPが設定されていない場合には、上のemxのランタイム・ライブラリにアーカイブされているtermcapデータベースで構いませんから設定しておいてください。
rem
TERMCAPとTERMの設定例
rem
CONFIG.SYSに入れておくと良いでしょう
set TERMCAP=D:/emx/etc/termcap.dat
set TERM=ansi
- 日本語表示させるには、環境変数LANGに“
ja_JP
”を設定されていることを確認してください。(OS/2環境で日本語表示させるには、環境変数LANGに“ja_JP
”が設定されているか、環境変数JLESSCHARSETに“japanese-sjis
”や“sjis
”などが設定されていることが必要です)。
- lessが参照する環境変数の設定については、manディレクトリの下にアーカイブしてあるman pagesを参照してください。man pagesは、
- 拡張子が“.nro”のもの … ROFF形式
- 拡張子が“.man”のもの
… lessで表示可能なテキスト
の2種類を用意しておきましたので、お好みのものをお使いください。
- less 358+iso252をベースとしました。
- この配布パッケージは、iso254レベルに上げてあります。lessのバージョンは“
less --version
”で確認できます。
- iso252からの変更は、SJIS出力周り(iso253〜254)とsearch.c
(iso253)の問題修正だそうです。
- defines.o2に、
#define SJIS0213 1
#define UJIS0213 1
の2行を追加しました。
- OS/2 J4.50 (J4.0にBase Operating Systemにfix XRJM014をあてたもの)以降は、VIOウィンドウでも、JIS X 0213:2000の一部(例えば、マル付き数字など)をサポートしています。
- less 358+iso249をベースとしました。
- キー入力文字集合のディフォルトが“japanese-iso7”だったのを“sjis-iso7”に改めました。
- less 358をベースにしました。
- このnovio12パッチは、jlessパッチの当たっていない元の英語版lessに対するOS/2用パッチとしては、このドキュメントを記述している時点において最新のものです。
- 矢印やPgUp、PgDnなどの特殊キーの読み取り方法を変更しました。(screen.c)
- これに伴い、従来のパッチで、F3とAlt-F4に終了を割り当てていたのをやめました。
- lesskeyや内部的な拡張キーの前置識別コードとして、今までのnovioパッチでは‘\xFF’を使用していましたが、オリジナルのまま‘\340’を使うようにしています。
- これにより、コード‘\340’(=‘\xE0’)を含む文字列をうまく扱えないことがあるかも知れませんが、パッチをあてずオリジナルのままとしてみることにしました。
- 私がOS/2 WARP用として配布したnovio11版以前のjlessでは、DOS用に作成したlesskeyファイルを流用した場合、拡張キーは置換されませんでしたが、この変更により、DOSのlesskeyファイルを流用できるようになりました。
- 環境変数LANGが“ja”の時にも、JLESSCHARSETに“japanese-sjis”を仮定するようにしました。(charset.c)
- かえって不具合が出ると言う指摘があったため、HAVE_SHELLの設定をオリジナルの状態‘0’に戻しました。(defines.o2)
- これまでの版と異なり、シェル・エスケープが必要な場合でも、環境変数SHELL ならびに OS2SHELLの設定には影響されず、
cmd.exe /c
を実行します。
- 起動される子プロセスで、シェルが二重起動されることがなくなりましたので、少し負荷が軽くなっています。
- OS/2環境で、zip / bzip2で圧縮されたテキストをクローズする際、zip /
bzip2に送るシグナルをSIGKILLからSIGINTに変更しました(→
既知の問題点)。(filename.c)
一部のメッセージを微修正しました。この修正は、コンパイル時にGNU_OPTIONSに非0値がdefineされれば、OS/2以外の環境でも有効です。(edit.c、option.c)
この変更は、オリジナルのlessのオリジナルのその改版により不要になりました)。
ヘルプ・メッセージに、iso242パッチによる機能追加が反映されていないのを修正しました。(help.c)
(その後のオリジナルのjlessの改版により、この変更は不要になりました)。
- パッチの中を覗く人や、novio版jlessの感想のe-mailをくださる方々はプログラマ(アマチュアも含む)が多いようなので、README.os2をそういう人たち向けに書換えました。
- 変更履歴にも、主にどのソース・ファイルをいじったのかを加筆。
新たに『リビルドするには…』の項を設けました。
(novio12から、この項は省いてあります)。
- 上の加筆に伴い、README.os2をHTML化しました。
- (その他のnovio10での改変は、次のnovio11に至る前にボツにした実験的なものが多いので、紹介を省きます)。
- 評判が悪かったSJIS_PREのdefineをやめ、オリジナル版通りに漢字の自動判別をUJIS優先に戻しました。(defines.o2)
- UJIS優先の方が自動判別の精度が高いようです。
- novio5 〜
novio7版同様にSJIS優先にしたい場合にはコマンドラインか環境変数LESSに
-Z
オプションを明示してください。
- 読み込む日本語テキストにSJISしか使わないとわかっている場合には、環境変数JLESSCHARSETに sjisを設定しておくと良いでしょう。
- OS/2以外の環境でコンパイルした時も、novioパッチのいくつかの修正が活きるようにしました。OS/2以外の環境で活きるnovioパッチは、
bzip2対応 (filename.c)
(現在はこのパッチをあてなくても、オリジナルのjlessがbzip2をサポートしてくれています)。
- オリジナル版では、stderrがリダイレクトできない問題の修正。(screen.c;
novio7)
- novio7が、XFree86がインストールされていない環境では使えなかったのを修正しました。X-window環境での画面サイズを識別するルーチンを独立させ、scrsize.exeとしました。
- コンパイルと動作テストに使用しているXFree86の環境を、3.3.3から3.3.3.1に上げました。
(その後の現在のバージョンでは、XFree86
3.3.6を使用しています)。
- ソース・コードの添付とこのドキュメントの英語版の添付をやめました。
- XFree86環境下のxtermやrxvt、ktermなどのウィンドウから呼び出された時には、Xlibを使用して、そのwindow geometry情報からウィンドウ・サイズを算出するようにしました。環境変数TERMとWINDOWIDを参照します。これらの環境変数はxtermやrxvt、ktermなどのウィンドウでは自動的に設定されますので、ユーザが意図的に指定する必要はありません。(scrsize.c)
コンパイラのバージョンをemx 0.9cから0.9dに上げました。Xlibは、XFree86
3.3.3のディストリビューションを使用しています。
(その後の現在のバージョンでは、emx 0.9d FIX 03と、XFree86
3.3.6を使用しています)。
- パイプをクローズする時にハングすることがあったのを対策しました。(filename.c)
- オリジナル版のままだとstderr出力をリダイレクトできない点を修正しました。(screen.c)
bzip2で圧縮されたファイルにも対応しました。(filename.c)
(現在はこのパッチをあてなくても、オリジナルのjlessがbzip2をサポートしてくれています)。
- novio3で削ったレスポンス・ファイルへの対応を復活しました。(main.c)
- ベースを332iso228版にしました。
defines.o2にSJIS_PREを定義して、漢字の自動判別はUJISよりもSJISを優先するようにしました。
(novio9以降、現在の版で、UJIS優先に戻しています)。
- ベースを332iso226版にしました。
- LANG環境変数の認識をケース・インセンシティブにしました。OS/2では、幾つかのソフトウェア(例えばMPTS)のインストーラが、CONFIG.SYSの環境変数を小文字→大文字変換してしまうことがあり、結果的にその設定が“ja_JP”ではなく“JA_JP”となってしまっていることが多いようなので、このような変更をしました。(filename.c)
- ベースを332iso224版にしました。
SHELL環境変数が定義されていない場合、もしくはその定義が空の場合、OS2_SHELL環境変数を参照させるようにしました。
(novio11以降、現在の版では、このパッチは無効です)。
コマンド・シェルがunix系のシェルの場合には、起動時にコマンド・ラインで指定されたワイルド・カードの展開をシェルに任せ、CMD.EXEの場合には、emx固有の関数 _wildcard ( )を使って、それを展開するようにしました。
(novio11以降、現在の版では、オリジナル版の状態に戻し、無条件に _wildcard ( )を呼び出します)。
compressedファイルのブラウジングの際に、zcatを呼び出す代わりに gzip -dcを呼び出すようにしました。(filename.c) (その後のオリジナルのjlessの改版により、このパッチは不要になりました)。
- ディフォルト・エディタが“me”になっていたのを、“vi”に改めました。(defines.o2)
何故か、オリジナル・ディストリビューションでは、OS/2用にコンパイルした場合にのみ、レスポンス・ファイルが使えるようになっていましたが、他の環境と統一して、これを外しました。 (novio6以降の版で元に戻しました)。
- __open("/dev/tty", OPEN_READ)を使ってコンソール入力を開くようにしました。emx固有の関数ですが、open("con", OPEN_READ)よりうまく働くようです。(lsystem.c、ttyin.c)
- gzipで圧縮されたファイルをブラウジングする際、EOFに達していないとキー入力が効かなくなってしまうように見えることがあるのを対策しました。(filename.c)
- 非公式のX-window環境対応ディストリビューション初版。(OS/2
WARP用)
オリジナル・ディストリビューションからは変更をしていませんが、unix用インプリメンテーションとOS/2用インプリメンテーションで異なっている点がいくつかあるようです。
- ファイル名のglobbingには、emx固有の_fnexplode ( )と_fnexplodefree ( )を利用していますので、サブプログラムlessechoは必要ありません。LESSECHO環境変数の設定は無視されます。(defines.o2で、HAVE_POPENがdefineされているので、filename.cのlessecho周りのコードが活きそうに見えますが、lglob.hで、DECL_GLOB_LIST他をdefineしているので、それが優先され、lessecho周りのコードは活きません。
- 初期設定ファイルが、unix環境では .lessと .lesskeyですが、OS/2用のインプリメンテーションでの初期設定ファイルは、less.iniとlesskey.iniです。これらのファイルをHOME環境変数のディレクトリで探します。もし、HOME環境変数が定義されていないか、設定が空なら、INIT環境変数に設定されたディクトリで探します。(.lessと.lesskeyを参照するように変更するのは、defines.o2を書換えるだけで簡単に出来るのですが、オリジナルのままにしてあります)。
- 環境変数TERMが設定されていない場合、OS/2環境用にビルドされたlessは、TERM=ansiを仮定します。他の環境ではTERM=unknownとなります。
- gzip /
bzip2で圧縮されたテキストが途中までしか表示されないことがあります。
- novio10までのソース・コードfilename.cの一部の、
kill(((FILE*)pipefd)->_pid,SIGKILL);
#endif
pclose((FILE*) pipefd);
となっていたSIGKILLをSIGINTに変えたところ、この問題が解消したという報告をいただき、novio11以降では、そのように変更してみました。
- しかし、上の対策だけでは万全ではなさそうで、まだ、この問題が発生することがあります。いつも発生するとは限らず再現性が乏しく追いかけきれていません。
- そもそも、((FILE*)pipefd)->_pidという非標準な構造体要素を参照してkillするのが アブノーマルなのですが、これをしないと うまく処理が終わらずハングすることがあります。
- この問題が起きる時、ch.cの ch_addbuf (
)関数が呼び出されますが、calloc (
)はうまく行っているようです。タイミングが間に合っていないのかしらん?
原因不明です。
- OS/2以外の環境では、この問題は発生しません。
- プログラム内部で開いたpipeが pclose (
)しているにも拘らずcloseされず残るタイミングがあるようです。
- これによる悪影響は表面化することは極めて希だと思われますが、closeされないものが残るので、open可能なファイル数が足りなくなることがあると予想されます。
- popen ( )したパイプを pclose ( )してから更にfclose ( )するという、かなりアヤシゲな方法で確実に解決することが、非公開novio10での実験でわかっていますが、公開版ではこの対策は施していません。
- ktermやrxvtのようなターミナル・エミュレータで使用する場合、lesskeyファイルによるキーの再割り当てが、期待通りに機能しないかも知れません。
- 矢印やPgUp、PgDnなどのキーが、これらの環境ではESCシーケンスで表現されるのに対し、ふつうのOS/2セッションではBIOSシーケンスで表現され、いまのところ、OS/2用にコンパイルしたlesskeyプログラムが ESCシーケンス表現を配慮していないからです。