This is a unofficial distribution of the less for OS/2 WARP, based on version 332+iso242.
Please report any problems of this distribution to me at NBG01720@nifty.ne.jp.
This file is written in Japanese language with using Shift_JIS code.
これは、OS/2 WARP用のlessの非公式な配布です。less version 332+iso242をベースとしています。オリジナルをそのままコンパイルした場合と異なり、XFree86のxtermやrxvt、ktermなどでも利用可能です。
この配布についてのお問い合わせやバグレポートなどあれば、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キーを利用可能にしました。他に、F1をヘルプに、F3かAlt-F4を終了キーに定義しておきました。また、これらのキーの第1バイトは、オリジナルでは、‘
\340
’にリプリゼントされますが、シフトJISコード領域とダブってしまうので、このディストリビューションでは、‘\xFF
’にリプリゼントするようにしました。(このディストリビューション以外のlessのキー・バインドを流用しようとする際には気を付けてください)。
- LANG環境変数がja_JPに設定されている時、JLESSCHARSETにjapanese-ujisの代わりにjapanese-sjisを仮定します。また、LANG環境変数の値はケース・インセンシティブです。
- gzipの他に、bzip2にも対応しました(と言っても、bzip2 -dcをパイプで呼び出しているだけですが…)。
- less.exeとlesskey.exe、scrsize.exeをpathの通ったディレクトリに置いてください。(XFree86環境を利用しない場合には、scrsize.exeは不要です)。
- emx 0.9d FIX 02以降のランタイム・ライブラリがインストールされていることが前提です。ランタイム・ライブラリ(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は、
- 拡張子が“.1”のもの … ROFF形式
- 拡張子が“.man”のもの … lessで表示可能なテキスト
- 拡張子が“.txt”のもの … 上のテキストから制御コードを取り除いたもの
の3種類を用意しておきましたので、お好みのものをお使いください。
- 環境変数LANGが“ja”の時にも、JLESSCHARSETに“japanese-sjis”を仮定するようにしました。(charset.c)
- かえって不具合が出ると言う指摘があったため、HAVE_SHELLの設定をオリジナルの状態‘0’に戻しました。(defines.o2)
- novio8以前の版と異なり、シェル・エスケープが必要な場合でも、環境変数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)
- ヘルプ・メッセージに、iso242パッチによる機能追加が反映されていないのを修正しました。(help.c)
- パッチの中を覗く人や、novio版jlessの感想のe-mailをくださる方々はプログラマ(アマチュアも含む)が多いようなので、README.os2をそういう人たち向けに書換えました。
もっとも、そういう人たちの多くはパワー・ユーザでしょうから、『釈迦に説法』という気もしますが…。
- 上の加筆に伴い、README.os2をHTML化しました。ホントは、yodlを使いたいのですが、あれを日本語化して(誰かやってませんか?)、更にOS/2に移植するとなると(誰もやらんだろうなぁ)、かえってメンドくさいし。(^^;
- (その他のnovio10での改変は、次のnovio11でボツにした実験的なものが多いので、紹介を省きます)。
- 評判が悪かったSJIS_PREのdefineをやめ、オリジナル版通りに漢字の自動判別をUJIS優先に戻しました。(defines.o2)
- UJIS優先の方が自動判別の精度が高いようです。
- novio5 〜 novio7版同様にSJIS優先にしたい場合にはコマンドラインか環境変数LESSに
-Z
オプションを明示してください。
- 読み込む日本語テキストにSJISしか使わないとわかっている場合には、“set JLESSCHARSET=sjis”と設定しておくと良いでしょう。
- OS/2以外の環境でコンパイルした時も、novioパッチのいくつかの修正が活きるようにしました。OS/2以外の環境で活きるnovioパッチは、
- bzip2対応 (filename.c)
- OS/2環境用に作ったものと異なり、拡張子“
.bz2
”の認識はケース・センシティブです。
- OS/2環境では“bzip -dc”を呼び出しますが、それ以外の環境では“bzcat”を呼び出します。
- オリジナル版では、stderrがリダイレクトできない問題の修正。(screen.c; novio7)
- novio7が、XFree86がインストールされていない環境では使えなかったのを修正しました。X-window環境での画面サイズを識別するルーチンを独立させ、scrsize.exeとしました。
- コンパイルと動作テストに使用しているXFree86の環境を、3.3.3から3.3.3.1に上げました。
- ソース・コードの添付とこのドキュメントの英語版の添付をやめました。
- 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 02と、XFree86 3.3.3.1を使用しています)。
- パイプをクローズする時にハングすることがあったのを対策しました。(filename.c)
- オリジナル版のままだとstderr出力をリダイレクトできない点を修正しました。(screen.c)
- bzip2で圧縮されたファイルにも対応しました。(filename.c)
- novio3で削ったレスポンス・ファイルへの対応を復活しました。(main.c)
ベースを332iso228版にしました。(その後の現在の版では、332iso242版をベースにしています)。
defines.o2にSJIS_PREを定義して、漢字の自動判別はUJISよりもSJISを優先するようにしました。(その後の現在の版では、UJIS優先に戻しています)。
ベースを332iso226版にしました。(その後の現在の版では、332iso242版をベースにしています)。
- LANG環境変数の認識をケース・インセンシティブにしました。OS/2では、幾つかのソフトウェア(例えばMPTS)のインストーラが、CONFIG.SYSの環境変数を小文字→大文字変換してしまうことがあり、結果的にその設定が“ja_JP”ではなく“JA_JP”となってしまっていることが多いようなので、このような変更をしました。(filename.c)
ベースを332iso224版にしました。(その後の現在の版では、332iso242版をベースにしています)。
SHELL環境変数が定義されていない場合、もしくはその定義が空の場合、OS2_SHELL環境変数を参照させるようにしました。(その後の現在の版では、この修正は無効です)。
コマンド・シェルがunix系のシェルの場合には、起動時にコマンド・ラインで指定されたワイルド・カードの展開をシェルに任せ、CMD.EXEの場合には、emx固有の関数 _wildcard ( )を使って、それを展開するようにしました。(その後の現在の版では、オリジナル版の状態に戻し、無条件に _wildcard ( )を呼び出します)。
- OS/2環境では、zcatにgzipをシンボリック・リンクしていないことも多いので、compressedファイルのブラウジングの際に、zcatを呼び出す代わりに gzip -dcを呼び出すようにしました。(filename.c)
- ディフォルト・エディタが“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となります。
この文書中のURIは、1999年7月18日現在のものです。もし、ここで紹介しているファイルがアクセス不能になった場合には、この文末のe-mailアドレスまで御一報ください。代替アドレスを紹介するか、私のweb pageにそれらを転載するなどの処置を取りたいと思います。
オリジナルのjlessは、http://www.io.com/~kazushi/less/で配布されています。日本語ヘルプ・メッセージのオリジナル(less-jp-help-iso212.gzとless-jp-help-iso212-242.patch.gz)もこのwebサイトからリンクされています。
jless-332iso242のソースとして、私は、Debian GNU Linuxのソース・アーカイブを利用しました。日本ではringサーバのftp://core.ring.gr.jp/pub/linux/debian/debian/dists/stable/main/source/text/jless_332iso242.orig.tar.gzにミラーされています。
開発環境には、emx 0.9d FIX 02を使用しました。emxの最新版は、以下のanonymous ftpで配布されています。
独自に追加しているscrsize.exeのコンパイルには、XFree86のXlibとその開発環境もインストールされていなければなりません。Xlibやそのヘッダに、OBJC_INCLUDE_PATHとC_INCLUDE_PATHが通っていない場合は、これらを設定するか、Makefile (Makefile.o2e)を、-Iや -Lオプションを明示するよう書換えてくださ
い。
OS/2用のXFree86は、http://www.xfree86.org/や、http://borneo.gmd.de/~veit/os2/xf86os2.html (XFree86/OS2 project)で配布されています。日本国内には、ftp://core.ring.gr.jp/pub/XFree86/current/binaries/OS2/などのringサーバにもミラーされています。
emxとXFree86以外には、tar、fileutil、textutil、sysutil、sedなどのGNU toolsもあった方が良いでしょう。(makeやgzipは、XFree86の開発環境に含まれているもので構いません)。OS/2用に移植された、nkf以外の各種ツール類は、
などのwebサイトですぐに見つけられると思います。
後に紹介する作業例の中で使用しているnkfのOS/2用バイナリは、次のwebページからgetできます。
novio11レベルのソースを取得するための操作例を以下に示します。
- 注)
- gpatchは、GNU patchを、patch.exeからgpatch.exeにrenameしたものです。OS/2のpatchコマンドは利用できません。
ここでは、http://www.io.com/~kazushi/less/に公開されているless.hlp.ja (less-jp-help-iso212.gzとless-jp-help-iso212-242.patch.gz)をgetして来て、less --help
や、Hコマンドで表示されるヘルプ・メッセージを日本語にする例を紹介します。
rem anonymous ftpからless.hlp.jaのオリジナルを取得し解凍
ftp ftp.big.or.jp
User ID: anonymous
Password: your_mail@your.domain … 礼儀として、あなたのメール・アドレスを入力
ftp> cd /pub/usr2/jam/less/contrib
ftp> binary
ftp> get less-jp-help-iso212.gz
ftp> get less-jp-help-iso212-242.patch.gz
ftp> close
ftp> bye
zcat less-jp-help-iso212.gz | uudecode … 解凍すると、less.hlp.ja.gzが得られます
zcat less-jp-help-iso212-242.patch.gz | uudecode … less.hlp.ja.diff.gzが得られます
gunzip less.hlp.ja.gz
zcat less.hlp.ja.diff.gz | gpatch
rem mkhelpをコンパイル
gcc -o mkhelp.exe mkhelp.c
rem nkf -sしなくても普通は大丈夫ですが、例えば、JLESSCHARSET=SJISの時には化けます
nkf -s less.hlp.ja | mkhelp > help.c
|
- 注)
- zcatとgunzipは、gzipへのシンボリック・リンクです。それぞれ、gzip -dc、gzip -dと同じです。
Makefileは、Makefile.o2eをコピーして使ってください。
chcp 437
copy Makefile.o2e Makefile
make |
- 最初のchcp 437は、makeした実行形式をうっかりPC-DOS英語環境で実行させようとした際に、エラーメッセージの日本語が文字化けしてしまうのを防ぐための措置です。日本語版OS/2でも、chcp 437しておけば、link386は、“このプログラムは DOS セッションでは実行できません”という日本語メッセージの代わりに“This program cannot be run in a DOS session.”という英文メッセージを埋め込んでくれます。
- もちろん、コピーせずに、
make -f Makefile.o2e
としても構いません。
- このアーカイブに添付の実行形式は、lxLiteで圧縮してあります。
- OS/2以外の環境でmakeするには、READMEの記述に従ってください。OS/2環境用のGNU patchは、行末にCR/LFを付けてしまうものもあり、そうして出来たソース・コードをunix環境でコンパイルしようとするとエラーとなることもありますので注意してください。
このアーカイブで配布するバイナリには、character setを理解する正規表現ライブラリはリンクしていません。ここでは、それをリンクする作業例を紹介します。character setを理解する正規表現ライブラリについては、README.iso.jp、ならびに、http://www.io.com/~kazushi/less/を参照してください。
rem regex_csの入手と解凍
ncftp ftp://ftp.big.or.jp/pub/usr2/jam/less/contrib/regex_cs-lwp9k.shar.gz
zcat regex_cs-lwp9k.shar.gz | sh … shは、pdkshやbashを流用可
rem defines.hとMakefileをregex-cs対応に修正
copy defines.o2 defines.h
gpatch -i diffs/jless-332iso242novio11-with_cs_regex.diffs
touch defines.h
sed s/regexp/regex_cs/ Makefile.o2e > Makefile
touch stamp-h
rem make
make clean
make
|
- zip / bzip2で圧縮されたテキストが途中までしか表示されないことがあります。
- novio10までのソース・コードfilename.cの一部の、
if (pipefd != NULL){
#if OS2
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 ( )するという、かなりアヤシゲな方法で解決することはわかっていますが、この対策は施していません。
--help
、または、--version
と、他のオプションは起動時に共存できません。これは実害の少ない些細なバグですので放置してあります。