home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 1996 February
/
VPR9602A.ISO
/
fwindows
/
archive
/
tmedt090.lzh
/
TOOLD101.LZH
/
MAN.LZH
/
README.DOC
< prev
next >
Wrap
Text File
|
1995-03-10
|
40KB
|
785 lines
UNIX tools(Ver 2.06a)について
新出尚之 nide@ics.nara-wu.ac.jp
94/12/16
(ドキュメントのみ訂補 95/3/10)
ネットワークニュースfj.binaries.msdosや、商用ネットNiftyなどで配布され
ていた、斎藤靖(yasushi@is.s.u-tokyo.ac.jp)さんのUNIX like tools(LSI C使
用)―fj.binaries.msdosの
v004i0091: tools, UNIX tools on MSDOS binary files
v004i0094: tools, UNIX tools on MSDOS source files
v004i0108: toolssrc.lzh missing files
を、長く使っているうちに私なりにかなり手を加えてしまったので、どうせなら
と思って流すことにしたのが、このUNIX tools Ver 2.00~です。オリジナルに
比べ、多数のバグ修正や機能アップ、新コマンドの追加などが行われています。
オリジナルが私のものでないので、私(新出)による別バージョンということで、
Ver 2.00~と名乗ることにしました。
オリジナルと同様、MS-DOS 2.1以降でなら汎用のはずです。但し、一部のコマ
ンド(mv, cp, touch, df)については、DOS3以降で追加された非公開システムコー
ルを使っているため、DOS2では正常動作しない場合があります(これはオリジナル
でも同じ)。マニュアルをご覧下さい。
なお、当面このソフトの最新版は、anonymous ftp ftp.ics.nara-wu.ac.jp(IP
アドレス: 160.11.66.11)のpub/dosutilにて配布します。ご利用下さい。(以前
のドキュメントでは、配布するftpサイトをshannon.e.ics.nara-wu.ac.jpと記し
ていましたが、ftp.ics.nara-wu.ac.jpは現在のところそれのaliasで、実体は同
じです。しかし、サービスを行うホストやIPアドレスは将来変わり得ますので、
アドレスとしてはftp.ics.nara-wu.ac.jpの方をお使い下さい。) 但し、メンテ
ナンスや事故などのために、予告なく一時的にあるいは恒久的にサービスができ
なくなることもあり得ます。
サイズもでかくなってきたため、バージョンアップの度にfj.binaries.msdos
に流すとネットワーク及びモデレータにとって負担になりますので、今後はfj.
binaries.msdosへの投稿は、かなり大きな変更を施したときを除いては、バージョ
ンアップ2~3回おき程度にする予定です。ご了承下さい。
配布されるアーカイブのファイル構成は以下のようになっています。
./readme.doc このファイル
./bin/*.exe 実行ファイル
./man/*.man マニュアル
./src/*.[chl] ソース
./src/*.dif ソースの一部を作るのに必要なパッチ(後述)
./src/makefile メークファイル
./src/makedep.pl perlで書かれたmakedepend
./src/man/*.fin finで整形する前のマニュアル
./src/man/makefile マニュアル用メークファイル
./src/man/an.fma マニュアル用フォーマットファイル
含まれているコマンドは以下の通りです。追加したコマンドのうち、後述の変
更点リスト中にて追加時期を特記していないものは、Ver 2.00時点で追加したも
のです。
オリジナルからあるもの
cat, rm, mv, cp, ls, tail, which
chd(UNIXのcdに相当), makedir(同mkdirに相当), tman(manに相当)
追加したもの
fecho(echoに相当), touch, wc(以上3つはオリジナルを廃止して新製した)
chmod, cmp, df, diff, egrep, expand, fgrep, fold
foreach, head, od, pwd, sort, split(バイナリのsplitも可)
tee, test, tr, unexpand, uniq, cdate(dateに相当)
findf(findに相当), joinf(joinに相当), removdir(rmdirに相当)
cal, uuencode, uudecode(この3つはソースのみの提供)
chvol, yakc, xeq(この3つはUNIXに該当なし、下記参照)
ワイルドカードの展開はUNIXライクになっており、MS-DOSの一般的な慣習とは
異なるのでご注意下さい。詳しくはwild.manをご覧下さい。但し、ワイルドカー
ドの展開結果には不可視ファイルが含まれないのでご注意下さい(lsで環境変数
LSWILDALLを指定した場合と、chmodを除く)。また、which・makedir・cdate・df
・pwd・chvol・tman・calはワイルドカード・間接引数を、trはワイルドカードを
サポートしていません。逆に、ワイルドカードを利用できるコマンドは全て間接
引数もサポートしています。
なお、toolsを使うにあたってはパイプを頻繁に利用することが予想されますし、
またforeach・xeq・findfのように子プロセスを起こすコマンドもありますので、
pipctlやswap, rswapのようなフリーソフトを別途入手されて併用されると良いか
も知れません。また、(余計なお節介ではありますが)本パッケージには収めてい
ないものの、よりUNIX likeな環境を作り出すためにお薦めできるDOS上のフリー
のツールとして、例えば以下のものが考えられます(私がよく使っているものの中
から抜粋しました)。品揃えの参考になれば幸いです。
sed, awk
テキスト処理言語。フリーのGNUのものがDOS上にも移植されており、日
本語化もされている
perl
これもUNIXの標準コマンドではないが広く使われている。awkやsedなど
の機能を包含し、さらに多機能な言語。日本語化もされている
emacsまたはviクローン系エディタ、ページャ
emacs系は日本語MicroEMACS, ng, demacsなど、vi系はjstevie, jelvis
などがある。ページャはlessが便利
WXP(+wxegg.exe)
私が知る唯一のDOS上のフリーの日本語入力システム。wxegg.exeはWXPの
キーバインドを、UNIX上で事実上の標準といわれるフリーの日本語入力
システムWnnのフロントプロセッサuumやeggとそっくりにするもの(イン
ターネットニュースfj.binaries.msdosに流れた)
history
コマンドラインのエディットやヒストリ、ファイル名補完などを実現。
私はUNIXのtcshそっくりにキーバインドを変更して使っている。同種の
ソフトにKI-shellというのもあるが、私は使っていないのでhistoryとの
優劣は不明
prpat
UNIXライクなコマンドではないが、DOSが^P, ^Nで勝手にプリンタ出力を
オン・オフする余計なお世話を抑止するもの。emacsやhistoryなどを使
う場合、タイミングによって^Pや^Nがプリンタ出力をオン・オフしてし
まうのを防ぐのに有効
コンパイルはLSI C V3.30c試食版を使って行いました。バイナリは付いていま
すが、新たにコンパイルし直す場合、コンパイルに必要なshell.l, onlydquo.cと
いう2ファイルを、LSI C V3.30c(V3.30でも可)試食版に含まれているshell.l,
tinymain.cと、この配布に含まれている差分ファイルshell.difとから、patchコ
マンド(Larry Wall氏による、UNIX上で広く使われているフリーソフトを、DOSに
移植したものです。最近はDOS標準のコマンドにもpatchという名前のコマンドが
あるようですが、それとは別物で、機能も全く異なります)を使って、次のように
して生成する必要があります。
(1) LSI C V3.30のパッケージに入っている
src/lib/tinymain.cを toolsのsrcディレクトリのonlydquo.cに
src/lib/shell.lを toolsのsrcディレクトリのshell.lに
それぞれコピーする
(2) shell.difのパッチをpatchコマンドで当てる
この過程はmakefileに含まれていないので、コンパイルするには別途patchコマン
ドを入手して、この過程を手作業で行っておいて下さい。
この他、マニュアルのmakeにはfinが必要です(オリジナル時代と同じ)。finと
は、UNIXのroffに似た感じの、DOS上のフリーソフトのテキスト整形ツールです。
有名なものなので、多くのftpサイトやパソコン通信にあるでしょう。
オリジナルから含まれているコマンドやルーチンに関しては、私による修正部
分の著作権は放棄します。従って、オリジナルと同じ利用条件で利用してかまい
ません。オリジナル部分の利用規定については、オリジナル版のreadme.docファ
イル(このファイルの続きに付けておきました)をご覧下さい。また、私が追加し
たコマンドについても、商用以外は自由に使用・改造・再配布などして頂いて結
構です。但し、オリジナル部・私による追加部のいずれについても、これを使用
したことによる如何なる損害にも私は責任は負いません。
なお、追加したコマンドのうち、egrepで使っている正規表現マッチングルーチ
ン(re_strcmp)は、ネットワークニュースのcomp.sources.miscに流れていた、
Tasos Kotsikonas氏によるものです(日本語には対応していません)。これに関す
る利用規定はregex.lをご覧下さい。また、getopt.c(オリジナルにも含まれてい
たが置き換えた)とdiffコマンドは、かなり前にPublic domainとして流れていた
もの(の改造)を利用しています。この他、私が追加したファイルの中にも一部、
昔に本toolsとは別にPublic domainとして配布したものもあるので、それらにつ
いては今回もPublic domainとしています(その旨ソースに記載)。
UNIXライクなツール群ではありますが、多くは、DOSのシステムコールを使って
いたりするためソースはDOS専用になっています。しかし以下のコマンドについて
は、UNIXでも利用価値があるケースがあるかも知れないと考えたので、UNIXでも
コンパイルできるようになっています。
diff 昔のUNIXのdiffには8ビットを通さないものがあった
unexpand expandと同様のtab stopが指定できるよう拡張した
fecho BSD styleのechoしかないシステムで使うとよいかも
head 昔のUNIXにはtailはあるがheadはないものがあった
od UNIXのものより一部拡張してある
split バイナリsplit可能
touch 時刻の指定が可能(昔のBSDのtouchはそれができない)
tr UNIXのは'\0'が扱えずしばしば不便
uudecode 出力を直接パイプへ送れる
uuencode uudecode共々、昔のUNIXにはこれらがないものがあった
オリジナルからVer 2.00へのバグ修正・変更点は以下の通りです(細かいのは他
にもありますが忘れた)。
1) getopt.cの仕様がオリジナルではちょっと特殊だったので、UNIXコンパチの
Public domainのものに置き換えた。その結果、'--' をオプション引数とそうで
ない引数とのセパレータに利用できるようになった。例えば cat -v -- -n a.a
のような場合、「-n」はオプションとして解析されずにファイル名として扱われ
る。(これに伴って、rm.cでオプション引数の指定が誤っていた場合の処理を改正
した)
2) catで、誤ったオプションを指定したときのメッセージの出方を、他と揃えて
若干改正した。また、メッセージの改行が抜けていたので入れた。
3) wcを新しいものに置き換えた。多分、語数の数え方がUNIXのものに近くなっ
たのではないかと思う。また、旧版wcでは対象ファイルが1つの場合、出力末尾で
改行されなかったのも直した。
4) fechoをBSDライクなもの(新製)に置き換えた。
5) tmanを、環境変数PAGERやMANPATHを見るように若干強化した。
6) touchを、時刻指定もできるようなもの(新製)に置き換えた。
7) ls -a /でボリュームファイルも表示するようにした。また、ls -ld /の時の
時刻表示が妙だったので、とりあえず1980/1/1 00:00を表示するようにした。
8) lsの出力の後ろに冗長な空白が入らないようにした。lsの出力をエディタで
編集するときに、予想外の事態が起こるのを防げる(実際、自分自身この空白のた
めにトラブったことがあるためこう直した)。
9) 環境変数LSWILDALLに何でもいいからセットしておくと、lsのワイルドカード
の展開結果に不可視ファイルも含める。これによって、例えば a.b が不可視のと
き、ls -aとすると a.b も出力されるが、ls -a a.* だと a.b が出力されない、
といった気持ち悪さを解消できる。ただ、逆に-aなしで ls a.* だと「a.b not
exist.」と出てしまうという、別の気持ち悪さが発生するが…
10) bというファイルが存在するとき、mv a b がエラーになっていた(bを消さず
に、aをbにrenameしようとしていたため)。
11) mvやcpで「..」をディレクトリだと思ってくれないことがあった。関数get
_file_status()のバグ。
12) 漢字の混じったファイル名の場合、ごくまれにファイル名の英字が小文字に
ならないことがあった。関数conv_to_unix_format()のバグ。
13) makedirを、オプション-pを指定しない限り再帰的にディレクトリを作成し
ないように改正した。
14) wild.cに、extern変数 _dosfind_param を追加した。_dos_findfirstおよび
_dos_findnext関数のパラメータを0x35以外のものに変更できるので、ワイルドカ
ードの展開結果に不可視ファイルやボリュームファイルも含めるようなプログラ
ムが書ける。上記lsのLSWILDALLの仕掛けもこれを使っている。
但し、ワイルドカードはmain関数実行前に、スタートアップルーチン内で展開
されるようになっているため、main関数の実行開始後に、_dosfind_paramの値を
設定しても役に立たない。_dosfind_paramの値の変更を有効にしたければ、ワイ
ルドカード展開ルーチンの中で呼ばれている、expand_controlという名前の関数
(通常はこの関数は何もしない関数として定義されている)を別途定義し、その中
で_dosfind_paramの値を設定するようにしなければならない。
15) 間接引数として「@-」を指定すると、標準入力を取り込んでそれをコマンド
行引数とする機能を付けた。例えばecho a.c b.h | cat @- なんてことができ、
うまく使えばUNIXのshのバッククォート「` `」機能の代用やxargsコマンドの代
用として使うことができる。
16) UNIXライクなコマンドというわけではないが、xeqコマンドを追加した。
stderrのリダイレクトや、ワイルドカードを展開してからの(任意の)コマンド実
行に使える他、xeqを使えばバッチコマンドの入出力のリダイレクトもできる(但
し出力に、プロンプトや、echo offしない場合のコマンド行表示なども混じって
しまうが)。また、ボリュームラベルの変更コマンドchvolも追加した。
17) chdがドライブの変更に失敗した(存在しないなどで)場合、エラーとならず
に、ディレクトリだけ変更していたのを直した。
18) オリジナルの配布には、LSI C試食版のshell.lを改変したものが含まれてい
たが、LSI C試食版の使用条件に「改変されたファイルを含むパッケージの再配布
を禁じます」とあるため、この版ではLSI C3.30試食版オリジナルのshell.lとの
差分ファイルに差し替えた。もっとも、LSI C試食版の使用条件では「オリジナル
の配布パッケージのうちいくつかのファイルを取り出して改変し、それを元のパ
ッケージに入れ直したもの」の配布を禁ずる、と言っているだけなのかも知れな
い(実際、LSI Cのパッケージ中のファイルを改造したものを組み込んだフリーソ
フトがいくつか配布されている)のだが、ここでは安全側に解釈しておいた。
19) オリジナルでは、ワイルドカード機能の特殊文字のうち、直後の文字の特別
な意味を消す機能(UNIXのshの「\」)には「%」が使われ、また、「何々にマッチ
しない文字」という機能(grepの「[^…]」記法で使われる「^」に相当)としては
「%」が使われていたが、昔は前者が「'」、後者が「^」だった。オリジナルの作
者が、「『'』や『^』がLSI Cのスタートアップルーチンで特殊文字として処理さ
れてしまうため」という理由で両方とも「%」に変更してしまったわけである。し
かしこの版では、それらを元に戻し、逆にLSI Cのスタートアップルーチンで「'」
「^」を特殊文字として処理しているところをつぶした。(オリジナルのドキュメ
ントを参照)
Ver 2.00から2.01への変更点は以下の通りです。
1) foreachとxeqが、command.comのスイッチキャラクタを「/」に決め打ちして
いたので、スイッチキャラクタをそれ以外の文字に変更しているとバッチコマン
ドが起動できなかった。直した。
2) lsの-lオプションと-sオプションが同時に効くようにした。
3) rmが、CTRL-Cで中断されたときカレントディレクトリを変更したままになる
ことがあった(オリジナルからのバグ)のを直した。
4) testコマンドを追加。これは、オフラインのフロッピードライブにアクセス
しても、Drive not readyの状態にならず、単にそのファイルを存在しないとして
扱ってくれるので、例えば立ち上げ時にドライブ構成を調べるなどの用途に使え
て便利。
5) オリジナル時代からのバグで、「間接引数の展開結果が30個を超えると誤動
作する」というのを直した。これと 9)~14) で、大半のバイナリは作り直しのは
め…。
6) shell.lに、extern変数 _expand_abendcodeを追加した(初期値は1)。スター
トアップルーチンの中で異常事態になったときのexitコードとして使う。オリジ
ナルでは常にexit(1)していたのだが、異常時のexitコードが問題となるようなコ
マンドでは、いつもexit(1)では困ることがあるので、指定できるようにした。但
し、これの値の変更を有効にしたければ、expand_controlという名前の関数を別
途定義し、その中で変更するようにしなければならない(変数 _dosfind_paramと
同じ理由)。
7) 上の改正を行ったため、expand_controlがもとdosfind_controlという名前だ
ったのを、現在の名前に変えた。そして、wild.manに、変数 _dosfind_param,
_expand_apendcodeと、関数expand_controlの記述が今までなかったので加えた。
8) cmp, egrep, fgrepの引数エラー時のexitコードを2に統一。6) を利用した。
これまでは引数エラー時はexit(1)していた。
9) 「[p-rx]」のように、文字選択の中で範囲指定の後に他のものが来ると展開
を誤っていたのを直した(オリジナルのバグ)。
10) 「{」が閉じてないときなどにエラーメッセージを出し損なっていた。直し
た。スタートアップルーチン内で、まだstderrをfopenしてないのにそこへ書こう
としていたせい(オリジナルのバグ)。
11) 「{ }」がネストすると展開結果がおかしくなっていた(オリジナルのバグ)
のを直した。
12) 「[^a-z]a」が「ア」にマッチしていたのを直した。範囲指定の否定の場合、
漢字の1バイト目かどうか見ていなかったので、「[^a-z]」が「ア」の1バイト目
にマッチしていたせい(オリジナルのバグ)。
13) 「[^ab]c[de]」のように、文字選択が複数あってそのうちどれかが否定形の
場合、それ以後も不当に否定形と見なして「[^ab]c[^de]」と解釈されてしまって
いた(これもオリジナルのバグ)。直した。
14) 「"*"*」のように、クォートされているワイルドカード文字と、されていな
いワイルドカード文字が混在していると、全体を展開してしまうのを直した。こ
れはLSI Cの展開ルーチンがもともとそうなっているせいだが、おそらく、DOSで
は「*」などがファイル名に混ぜられないために「"*"*」を展開するようなケース
は必要ないとみてそうしてあるのだろう。しかしオリジナルでは、それを不十分
にいじったため、「3"*"」のように、文字列の一部だけクォートされてそこにワ
イルドカード文字が混じっている場合にも、全体を展開してしまうという、もっ
と深刻なバグがあった。これも直した。
Ver 2.01から2.02への変更点は以下の通りです。
1) findf, teeコマンドを増発。
2) lsで、ワイルドカードを含む引数と、含まない小文字の引数とが混じってい
るとファイルのソート順序を誤っていた(オリジナルのバグ)のを直した。
3) このパッケージが基にしたオリジナルは、冒頭にも書いたように91/12/14版
だが、龍谷大の武田さんからの連絡で、オリジナルは92/1/8版までは更新されて
Niftyに差分が置かれている(多分これが最新版か)ことがわかり、武田さんのご厚
意でそれを戴いて修正を本パッケージに反映した。しかし、バイナリとドキュメ
ントの差分だけでソースの差分がなかったので、ドキュメントに書いてあった変
更箇所を基に、それに相当する修正を本パッケージで独立に行った。オリジナル
の91/12/14版から92/1/8版への修正は以下の通り。
a) catにtオプション(テキストモードで入出力する)が付加された。
b) cpコマンドのaオプションが廃止され、隠しファイルも常にコピーされるよ
うになった。
c) cpにpオプションが新設され、これが指定されたときに限りファイルのタイ
ムスタンプを保存するようになった(従来は常に保存)。
d) mv, cpがファイルの属性を保存するようになった。但し本パッケージでは
少し仕様を変更し、cpでコピー先が既存かつpオプション非指定の時には、
コピー先に元あったファイルの属性が保存されるようにした。
e) mvが、移動先ファイルが既存のときエラーになっていたバグが修正された
(これは本パッケージでもVer 2.00時点で既に修正済み)。
f) makedirが、オプション-pを指定しない限り再帰的にディレクトリを作成し
ないようになった(これも本パッケージではVer 2.00で対応済み)。
g) lsも何やら変更されているようだが、これはよくわからない(ドキュメント
にも記述はない)。
4) catの仕様を若干改正。vオプション指定時には全文字を可視化して出力(例え
ば0x81をM-^Aと表示)し、出力がテキストモードになるようにした。
5) chmodで、属性変更指示の頭に「u」か「a」を付けてもよくなった。と言って
も、引数解釈をちょっといじっただけで本質的な変更は何もしていないのだが、
chmod u-w file とかできて気分は一層UNIXである。:-)
6) fechoをSystem Vライクにした(但しエスケープ文字は「\」でなく「'」)。任
意のASCIIコードの文字を手軽に出力したいケースは結構多いので。BSDタイプが
お好きな方は、ソース中の #define SYSV_STYLEを消して再コンパイルされたし:-)
7) 正規表現比較ルーチンをちょっといじって、egrepを少しだけ速くした。でも
まだまだ遅い:-(
8) 時によって「a???????」が「a」にマッチすることがあったのを直した(オリ
ジナルのバグ)。「?」のマッチを検査するとき、ファイル名の末尾に来ているか
チェックせずに単にポインタだけ進めるため、メモリ上でたまたまそれ以降に来
ている文字列に、ワイルドカードの残りがマッチしてしまっていたのが原因。こ
れと 10) 17) 18) でまたまたほとんどのバイナリを作り直しのはめ:-(
9) オリジナル時代から、lsのsオプションのブロックサイズは1024が用いられて
いたが、どうせHDのクラスタサイズは1024とは限らないので特に1024にしておく
理由はないと判断し、tail・findf及びUNIXと揃えるためブロックサイズを512に
変えた。
10) toolsはオリジナル時代から、引数にコントロール文字が混じることを許し
ていないが、従来はクォートの中ではその検査をしていなかった(従ってその後の
段階で不適切なエラーメッセージを出していた)のを検査するよう強化した。
11) DOSのシステムコール0x60(非公開)の戻り値のチェックを忘れていたため、
mvやcpが変なエラーを出すことがあったのを直した(オリジナルのバグ)。
12) LSI Cのexecvp()には、a.batが存在するとき、execvp("a.bat", …)とする
と暴走するという変な性質があるため、xeqコマンドはxeq a.batなどとすると暴
走していた。これを直した。
13) lsをカラー化した。阪大の片岡さんのものを仕様だけ参考にしている(しか
し、端末出力時のデフォルトをカラーにはしなかった)。
14) catのバッファサイズを、N・nオプションで出力する行番号の分を考えずに
決めていたため、N・nオプションを使うとcatが異常動作することがあった(PRUG
の福間さんからの報告)バグを直した。これはオリジナルからのバグだが、v2.00
以後では、より現れやすい状況になっていた。ついでにcatは大幅に書き直した。
15) LSI-C 3.30cでは、DOSのシステムコール0x5aでオープンした一時ファイルを
fdopenすると、なぜかそれに書き込めない(ライブラリのバグだそうである)ため、
sortでオンメモリに収まらないファイルをソートしようとすると、一時ファイル
への書き込みができず実行に失敗していた。とりあえず対症療法で直した。
16) sortが一時ファイルへの書き込みに失敗したとき、それを消さずに終了して
いたのを、消すようにした。
17) ファイル名の先頭の「_」はワイルドカードにマッチしない仕様だが、先頭
以外の「_」もマッチの対象から外れることがあった。例えば「*?a」が「a_a」に
マッチしなかった(オリジナルのバグ)。これを直した。
18) ワイルドカードのマッチの検査をするライブラリ関数、string_match()がユ
ーザに提供されているが、ファイル名の先頭が「.」の場合(要するに「.」と
「..」)を除外する処理はこの関数の外で行われており、string_match()自体は
「*」を「.」にマッチさせていたため、これをユーザプログラム中で使うと期待
通りの結果にならないことがあった。また、ファイル名の先頭が「.」の場合を除
く処理は無条件に行われていたため、「ls .*」とやっても「.」と「..」のリス
トが得られず「No match.」となっていた(以上オリジナルのバグ)。これらを直し
た。
19) 「[0-a]」のような範囲比較は、従来大文字に変換して行われていたが、自
分の好みで、小文字で比較するように変えた。
20) 「[&--]」のようなケースがちゃんと「'&'から'-'までの任意の文字」と解
釈されるようにした。オリジナルではエラーになっていた。
21) ワイルドカードを解釈しないコマンドについては、tinymain.objを修正して
作ったonlydquo.objをリンクするようにした。「" "」による空白などのクォート
はしばしば、ある方が便利と感じるが、noexpand.objのそれ以外の機能(「^」に
よる1文字クォートなど)はしばしば余計なお世話と感じるため。ちなみに、この
onlydquo.objは、拙作のdsharというアーカイバ(バッチファイル形式のテキスト
ファイルの自己解凍アーカイブを生成するソフト)の開発に使ったのと同じもの。
22) _wildcard_check_nomatchを0にしても、texpand.cの中で常に「No match.」
のチェックをしていたバグを直した。
23) 間接引数を例えば「@a.dat」のように使ったとき、a.batの中身が空だと、
これまでは「@a.dat」という引数を追加していた。これを、何も追加しないよう
に改めた。
Ver 2.02から2.03への変更点は以下の通りです。
1) odコマンドを増発。
2) chmodに、属性変更に失敗しない限り何も表示しないオプション-nを追加。
3) dfを書き直した。デフォルトでは残り容量をKB単位で表示する、substのパス
名が長い場合に表示の縦がずれないように表示を2行に分ける、join先を見つけら
れないことがある不具合が直った、などの修正点あり。
4) システムによっては、「.」や「..」で終わるパス名を、属性0x37で_dos_
findfirstした時attribに0x40のビットが立つものがあるようだ(RAMディスクなど
だとそうなる?)。ls, findf, testは従来、attribに0x40ビットが立っていたらデ
バイスファイルと見なしていたため、このような状況下では、ディレクトリをデ
バイスファイルと誤認することがあった。しょうがないので、そのような場合を
特別扱いして修正したが、直ったかなあ? 新たな問題を生まないかなあ?
5) src/man/an.fmaから、なぜあるのかわからない「.ww」の記述を外した。
6) toolsのワイルドカード展開ルーチンは、従来展開結果を大文字のままにして
いた。エラーメッセージなどでファイル名を小文字にするのは個々のコマンドが
やっていたのである。これはいろいろな面でうっとうしいので、ワイルドカード
の展開結果が小文字になるように改正した。例えばfecho A b * とやると、「*」
の展開結果は小文字になる。むろん「A」は大文字のまま。
7) splitは、実際にファイルを出力する必要が出るまではファイルをオープンし
ないようにした。また、バイナリ分割のサイズを8進でも指定できるようにし、つ
いでに、これまでバイナリ分割のサイズを16進の大文字で指定するとサイズの計
算を誤っていたバグを直した。さらに、新設の-vオプションで、生成したファイ
ル名の表示を行うようにした。
8) cdateの表示が2039年以降でおかしくなるのを直した。LSI-Cのtime関係のル
ーチンにバグがあるせいらしい。touchにも同様のバグがあった。
9) ハードディスクのFORMAT時に付けるラベルや、一部のソフトの出荷ディスク
では、小文字の混じった変なボリュームラベルが見られるようだが、そのような
ディスクでls -la / としてもボリュームファイルが「not exist」とならないよ
うにした。但し、表示されるボリュームファイル名は全部小文字に直される。な
お、この「変なボリュームラベル」に対処しているのはlsだけであり、他コマン
ド(chvolやtouchなど)は特に何もしていない。
10) touchは、オプション-dを指定するとディレクトリやボリュームラベルのタ
イムスタンプ設定も行えるようになった。但し、mvやcpがディレクトリのタイム
スタンプ設定をしない点は元のままで、直していない。
11) 細かいことだが、sortが環境変数TMPとTEMPの双方を見ているのに合わせて、
diffもTMPとTEMPを見るようにした。これまではdiffはTMPしか見ていなかった。
12) 2.01から2.02への変更点3-bで、副産物として「ルートディレクトリを他の
ディレクトリへ再帰的にcpかmvすると、移動先のディレクトリの属性が変になる」
というバグを生んでいた。直した。
13) catに-gオプション追加。PC98専用で、出力中はグラフィック文字表示モー
ドに切り替わる。
14) whichの探索順序がbat com exeだったのを、command.comに揃えてcom exe
batに修正(龍谷大の小林さんからの指摘)。
Ver 2.03から2.04への変更点は以下の通りです。
1) expand, unexpand, fold, tr, cal, uuencode, uudecodeを増発(後3者はソー
スのみの提供)。また、UNIXライクなコマンドというわけではないが、日本語文字
コードコンバータyakcを追加した。
2) コマンドが増えてアーカイブが膨れ上がったのを少しでも緩和するため、利
用の少ないと思われるchvolを、ソースのみの提供に格下げした。
3) catに-Tオプション追加。テキストファイルの行末をCR LFからLFだけに変え
る用途に使えるようになった(逆は従来でも可能)。
4) fechoが「'v」でバックスペースを出力していたのを、「'b」でバックスペー
ス、「'v」で垂直タブを出力するよう訂正し、さらに「'a」でベル文字を出力す
る機能を追加。また、最後以外の引数が「'c」で終わっていたらそこで空白を置
かずに次の引数の出力を開始するよう拡張した。
5) cp, mvに-uオプション追加。コピー(移動)先に存在するファイルより新しい
ものだけをコピー(移動)できるようになった。
6) 旧スタイルonlyのC処理系でのコンパイル(UNIX上で試作したりlintを取った
りするとき)などにANSI C形式では何かと不便も多いので、LSI Cのソースへのパ
ッチ当てでできるonlydquo.c, shell.lを除き、全ソースをK&Rスタイルに変更。
7) cdateの仕様をUNIX SystemVのdateに揃えて改正。また、出力のフォーマット
も指定できるようになった。
Ver 2.04から2.05への変更点は以下の通りです。
1) cshに合わせて、ワイルドカードを含む引数が複数ある場合、そのうち1つで
も実際のファイル名にマッチしたものがあれば、「No match.」にならないよう修
正(ニコンの河野さん提供のパッチをもとにしました)。
2) いくつかのコマンドは、ソース中に、nulファイルをオープンできることを前
提とした書き方があったが、ネットワークドライブなどでそれができない場合が
あるらしいので、当該箇所を書き換えた。その結果、これまでls, findf, testが
ネットワークドライブなどのルートディレクトリを正常に処理できなかったバグ
が修正できた(はず)。
3) diffが比較的小さな入力でもメモリ溢れを起こすのを防ぐため、一部のデー
タメモリの割り当てをfar mallocに改正。
4) odでC, Sオプションを指定したとき、同一データの省略を、これまでは常に、
出力行の連続する複数行で同一データが現れるときとしていたが、これでは、出
力行の最後が2バイト文字の1バイト目である場合、その文字の2バイト目、つまり
次の行の最初のバイトが異なっていても同一データとして省略してしまう(ちなみ
に、一部のUNIXシステムのodにも同じ欠点がある)。これを直した。また、引数の
オフセット指定の後ろに「B」を指定すると単位を512バイトでなく1024バイトで
数えるようにした。さらに、左端に表示するオフセットが7桁を越えた場合下7桁
だけ表示するようにした。
5) chdが、環境変数CDPATHに漢字混じりのディレクトリがあるとき処理を誤るこ
とがあったのを直した。また、ワイルドカードを不当に2回展開していたのを直し
た。
Ver 2.05から2.06への変更点は以下の通りです。
1) 2.04から2.05への変更点2で修正した、ls, findf, testにエンバグしてしま
っていた。具体的には、カレント以外のドライブをアクセスすると、そのドライ
ブのカレントディレクトリを不当に変更していた。直した(東工大の上野さんのパ
ッチをそのまま使わせていただきました)。
2) 画面制御エスケープシーケンスの解釈の機種によるばらつきから、システム
によってはls -cでボリュームラベルを表示した後に背景色が変わってしまうこと
があったのを直した(これも東工大の上野さんのパッチによります)。
3) cp, mv, rmに-iオプションを指定したとき、y/nの応答後リターンキーを待た
ずに動作していた(オリジナル時代からこうなっていた)が、UNIXに揃えて、リタ
ーンキーを待つように修正した。元のままがいい人は、ソースを書き直して再コ
ンパイルされたし:-) (1箇所書き直すだけでできるようにしてあります)
4) ls -U fileA fileB …とした時、出力はfileA fileB …のようになるべきだ
が、逆になっていた。直した(日本ベーレー(株)の高橋さんの指摘によります)。
Ver 2.06以降の変更点は以下の通りです。
1) unexpand -aで、タブストップちょうどの位置以外にTABがあると処理を誤って
いた。
2) yakcで、入力コードを自動判定にし、入力をテキストモードにすると、漢字
が現れるまでは行末のCRを捨てていなかった。これを直した。
3) 一旦ソースのみに格下げしたchvolだが、ユーザにお叱りを受けたので、実行
ファイルを復活させた。
現時点でわかっている(けれど放ってある)バグには以下のものがあります。
1) ワイルドカード展開ルーチンを使うとき、_wildcard_check_nomatchを0にす
ると、「"c".*」という引数は、マッチするファイルがなかったら「c.*」に展開
されるべきだが、現在のところ元のままの「"c".*」になってしまう。但し、これ
はライブラリのバグであり、コマンド自体には、_wildcard_check_nomatchを0に
しているものは今のところないので、このバグは出現しないはず。
また、現時点までに報告されているが、作者が該当する環境を持たないため確
認できず、従って直せないバグに、以下のものがあります。だれか確認or直して
くれないかな…(直せたらぜひご連絡下さい)
1) フロッピードライブが1つの機種で、そのドライブがオフラインの状態でdfす
ると、フロッピーの挿入を要求するOSからのメッセージが出て止まってしまう。
この他にもバグを発見された方がおられましたら、インターネットニュースの
fj.binaries.msdos.dか、電子メールでnide@ics.nara-wu.ac.jpまでお知らせ下さ
い。環境、具体的な症状などを詳しくお知らせ頂けるほうがありがたいです。
最後に、有用なソフトウェアを作成し公開して下さった原作者・斎藤靖さんを
はじめ、このパッケージで利用したルーチンやソフトの作者、またコンパイルに
利用したLSI C-86試食版を公開して下さったエル・エス・アイ ジャパンさんに感
謝します。また、オリジナルの最新版を送って下さった武田さん、バグ修正パッ
チを送って下さったニコンの河野さんや東工大の上野さんをはじめ、本パッケー
ジの修正やバグ発見に協力下さった方々にも感謝します。
(以下はオリジナルのreadme.docです)
------------------------------------------------------------------------
UNIX toolsについて
斎藤靖
yasushi@is.s.u-tokyo.ac.jp
PBA02641 (Nifty serve)
last updated : Sat Dec 14 08:53:33
1991
UNIXでよく使われる基本的なプログラムをMSDOSの上に実装したものです. ど
のプログラムもwild.cというcsh風のワイルドカードを展開するモジュールをリ
ンクしているので, かなり本物に近い使い心地を持っていると思います. 加えて
@FILEの形で, FILEの中味をコマンド行引数として取り込む機能(レスポンスファ
イルあるいは間接引数)も一部のコマンド(ls, cp, mv, rm)はサポートしていま
す.
* 利用環境
MSDOS(v2.1以降)が動けば機種は選びません. 少なくともM500とPC9801VX, で
動くことを確認していますが, 他機種でも問題なく動くでしょう.
* 使用/配布規定
ソースと実行ファイルとでは利用/配布規定が異なります. 注意して下さい.
- ソースの利用/配布規定
このパッケージに含まれているソースプログラム/ ドキュメントの大部分は
斎藤靖によって書かれました. 斎藤靖によって書かれたソースについては配布
規定を以下のように定めます.
これらのプログラムを使用した結果, あるいは使用できなかった結果生
じる損害に対して, 作者は責任を持ちません(バグ/要望にはできるだけ対
処しますがこれも作者の義務ではありません). 利用者各自が責任を持っ
て使って下さい.
このパッケージの一部を他プログラムに組み込んだもの(例えばwild.c
やgetopt.cを他プログラムとリンクする場合)を配布あるいは販売する
場合には, プログラム(のソース)は元々斎藤靖によって書かれたものであ
り, プログラムについて斎藤靖は責任を負わないということを説明書に明
記して下さい.
上を守るかぎり, これらのプログラムの使用, 改造, あるいは再配布/
販売に制限はありません.
ls.cとtouch.cの2つは各々前田@東大(kaoru@is.s.u-tokyo.ac.jp), 片岡@阪
大(kataoka@ics.osaka-u.ac.jp) (敬称略)の作ったものをベースにしています
. この2つについてはpublic domainである旨ソース中に書いてあります.
- 実行ファイルの利用/配布規定
実行ファイルの配布についてはLSI-C試食版の配布規定にしたがいます.
LSI-C試食版のread.meファイルから関連記事を抜粋します.
(本パッケージを使用して作成したプログラム)
本パッケージ(LSI-C試食版)を使用して作成したプログラムは、自由に
配布することができます。その際に手数料と認められる額を超える金銭の
授受を禁じます。利益を得るためのソフトウェアの開発には、別途製品版
の LSI C-86 をご購入の上、ご利用ください。
(無保証)
エル・エス・アイ ジャパン(株)は、本パッケージの使用に関連して
発生するいかなる損害についても責を負いません。また、バグの修正や、
バージョンアップの責務も負いません。
プログラムの最新版は当面utsun.s.u-tokyo.ac.jp (133.11.11.11)の
anonymous ftp(fj/unixtools/)を通じて配布することにします. とは言っても気
まぐれで他所にアップロードすることもあるかもしれません.
* パッケージの内容
toolsexe.lzh, toolssrc.lzhという2つのパッケージに分けて配布されます.
toolsexe.lzhは実行ファイルと整形済みドキュメントをパックしたものです.
toolssrc.lzhはソースファイルとfinのドキュメントソースをパックしたもので
す.
次のコマンドが含まれています.
rm, mv, cp, chd, ls, wc, tail, cat, which, touch, makedir
各々, UNIXの同名コマンドとほぼ同じ働きをします. ちなみにchdとはcd,
makedirはmkdirに各々対応するコマンド名です. コマンド別名定義をサポート
するコマンドインタプリタを使っている場合には(例えばksh, history等)cd,
mkdir(md)に別名定義するのが良いでしょう.
各コマンドの使い方については, tools.doc を読んで下さい.
* ファイル
実行ファイルとそれらのソース, そしてマニュアル類を含みます.
*.exe : 実行ファイル
shell.l : LSI-Cの配布にあるものを改変した
texpand.c : LSI-C用スタートアップルーチン.
wild.[ch] : ワイルドカード展開ルーチン
setarg.c : 間接ファイル展開ルーチン
getopt.c : コマンド行オプションの解釈
nameconv.[lh] : 各種のパス名変換ルーチン
misc.[ch] : その他, 複数のプログラムから共通に使われるルーチン
eq.c : 2つのパス名が同じファイルを指しているかどうかを
文字列比較のみから判定する
fecho.c : ワイルドカードをサポートするecho. wild.cのテスト用
tman.c : 非常に簡単なman. fecho.exeとtman.exeはソースのみの
提供.
上以外の*.c,*.h: 各プログラムのソース
Makefile : LSI-C用のmakefile.
makedep : makedependをperlで作ったもの.
ちょっと頭が悪いけどtools位には使える.
当然ながらperlが必要.
readme.doc : このファイル
doc/man.fin : tools.finから読みこまれる. 一応manマクロをまねしている
が, 分からない所は適当に書いている.
doc/*.fin : 各プログラムのマニュアル. finで書かれている.
doc/tools.man : *.finをフォーマットした結果のファイル
* インストール方法
LSI-C(試食版)でコンパイルされることを意図しています。MakefileはLSI-C
付属のmake用のものです.
'make'で実行ファイルが生成されます.
'make install'で, 生成された実行ファイルを実行ディレクトリにインストー
ルします. その時にはMakefile中のINSTALL_DIRマクロを 書きかえておいて下さ
い.
* 前版からの変更点
(ちなみに「前版」とは一年程前にfj.binaries.msdosにポストされたもの
[v002i0207-210]を指します)
- パス名の解釈をよりUNIXに近づけた. /usr//localのように, パスの区切りに
/(あるいは\)を複数書ける. また, /usr/local/ のように, 最後にパス区切り
を書いた場合には, そのパスがディレクトリであった場合に限って解釈に成功
する.
- '~'をホームディレクトリに展開するようになった.
- rmに-fオプションが付いた. また, -iでは, 全ファイルに対してy/nを聞くよ
うになった.
- rm -rの時に, 消去対象ディレクトリに対して, 'del *.*'に相当する動作を行
うことにより消去の速度を上げた. 逆に一瞬でディレクトリを消去してしまう
ので使用には細心の注意が必要.
- ls -d .が正しく動くようになった. これまでは, -d .の時は-dは無視されて
いた.
- lsに-X(サイズ順にソート), -S(ソートしない)を追加.
- mv -f の時, 移動先ファイルが書き込み禁止の時に移動できなかったのを直し
た.
- mvで, 異なるディスクに同じ名前で移動しようとした時にエラーになっていた
のを直した.
- mvで再帰的移動のチェックがおかしかったのを直した.
- chdで, '..'などが指定された時にはCDPATHを見ないようにした
- wild.cをコンパイルする時にSORT_ENTRYを指定すると, ファイル名をソートし
て出力するようになった.
- wild.cを, _dos_findfirst, findnextを用いて書き直した結果, スタック使用
量が減り, 1ディレクトリ中のファイル数の制限も無くなった.
- wild.cで, 頭に_が付くファイルを, UNIXで'.emacs', '.login'のようにワイ
ルドカード照合の時に無視するようにした. 例えば, '_emacs'は, *にはマッ
チしない. _*, _*.elにはマッチする. IGNORE_UNDERSCORE_FILESを指定すると
この機能が有効になる.
- which, touchが加わった. touchは阪大の片岡さん作のOS/2用touchを元にして
いる.
- コンパイラをLSI-Cに変更した. MS-Cでも通るとは思うが..
- ls -tが正しく動かなかった.
- 漢字を含むファイルを正しくあつかえるよう努力したつもり. 昔は 'cp file
表'とかやるとエラーになっていた.
- cat, tailなどで, 出力時エラーのチェックを行うようにした.
- setarg.cでまれにメモリを壊す可能性があったのを直した.(91/3/1)
- ワイルドカードのメタ文字が一部変更になった. '(直後の文字の働きを殺す
:UNIXの\)は%に, [^...](UNIXのワイルドカードの機能ではないがgrep等でサ
ポートされている. ... に含まれない文字にマッチする)は[%...]に変更にな
った. これは, LSI-Cのスタートアップルーチンが'や^を特殊文字として処理
してしまうため. しくしく. 本当はwild.cをスタートアップルーチンとして実
現するのが正しいと思う. でも面倒臭い. (91/3/3)
- その他各種バグの修正
バグ発見にはfj.binaries.msdos.d, NIFTY serveのユーザ等からのレポートに
非常に助けていただきました. ここで感謝します.
* 91-03-08(fj.binaries.msdosポスト)以降の変更履歴
91-12-11
cp,mvに-b(バックアップ)を付けた. lsに-X(拡張子順にソート)を付けた
91-12-06
GNU fileutilsに合わせて, lsの-X -> -Bに, -S -> -Uに変更. catをバイナリ
ファイルが一応あつかえるようにした. -vとか-lを付けなければ, バイナリ
ファイルのcatもできる.
91-11-24 10:25:00
cpで, たとえばasdfというディレクトリがあった時にcp -r asdf asdfとや
ると無限にasdf/asdf/asdf/...というディレクトリを作り続けてしまっていた.
mvは大丈夫だった.
91-11-17 11:47:00
cp, mv等で'/'(root)がディレクトリだと思ってくれなかった. lsi-c 3.3
用にソースを書きかえ. スタートアップルーチンのソースが付いているので,
wild.cやsetarg.cをスタートアップルーチン側に移す.
91-09-01 09:20:00 (yasushi saito)
cp, mv等で現ディレクトリがルートで, 移動先ディレトリとして'.'を指定
した時に, '.'を通常ファイルだと思ってしまうことがあった. これは
get_file_statusのバグ
91-05-16 01:32:00 (yasushi saito)
wild.cでワイルドカードの展開に失敗した時には
"No match."っていって死ぬようにした
91-05-02 00:32:00 (yasushi saito)
setargで引数の区切りをスペースにした.
cpで, mv同様コピー先ファイルとコピー元ファイルが
等しい時にエラーを出すようにした.
91-04-22 10:16:00 (yasushi saito)
マニュアルの表記を日本語にした(ここでniftyにアップロード)
91-04-19 23:30:00 (yasushi saito)
tailが-cオプションの時に長さを正しく数えられないことが
あった:-(. tailで^Zを含んだファイルを出力すると書き込みエラーを
出すことがあったのを修正
makedirを追加
91-04-18 00:07:00 (yasushi saito)
(小山富夫さんによる) wcでファイルの大きさが32Kを越えた時にサイズが0
になるバグ修正. ついでに, 0d0a改行コードの処理に関連してファイルの大き
さが実際の大きさより小さく表示されるバグを修正
91-04-06 11:53:00 (yasushi saito)
misc.c, eq.cをnameconv.cに合併. nameconv.cから各種.objファイルを生成
しlibでアーカイブするようにした.
Makefileを短く書きかえた.
91-03-10 20:00:15 (yasushi saito)
toolssrc.lzhのパッケージにtconfig.h,nameconv.cが入っていなかったとい
う大ボケ判明.
91-03-08 0:51:30 (yasushi saito)
chdで環境変数CDPATHを使ってchdirした場合には移動先を標準出力に表示す
るようにした.
which -aがうまく動いていなかった.
whichでコマンドが見つからなかった時の, 現在パスの出力方法をUNIXと同
じものに変えた.