葉山文書
7/16〜8/13の戯事篇
目次へ

拡張属性のコメント(8/13)

OS/2 の拡張属性には「.COMMENT」というのがありまして、 これにコメントを入れることができます。 WPSでは、プロパティ(設定ノートブック)のファイルの3ページ目で 読み書きすることができる他、REXXなんかでも簡単に 扱うことができます。

僕も eadir などという内蔵コマンドを作ったものですが、 そのせいか、OS/2 mag.で、REXXでコメントを扱う記事が 出る度に「NYAOS は .COMMENT の扱いがしやすいぞー」 と叫んでしまいます。(だったら、メイルでも送れよと自分でも思うが、勇気がないので、 今度、葉書を出そう(笑))

そういえば、lha の書庫のレベル2形式にはコメントヘッダというものがあるそうです。 これに「.COMMENT」の内容を保存するようにできないものでしょうかねぇ。 「-e」オプションでも保存できますが、そうすると希望しない拡張属性(アイコン、REXXのキャッシュ情報) まで保存されてしまいますから、サイズが大きくなってしまう場合があります。 ちょっとしたことですが、できたらうれしいのですがねぇ。 (だったら、作者の平松さん へメイルを送れよと自分でも思うが、 一般にメジャーなフリーウェアの作者はこの手のメイルでメイルボックスがあふれて 迷惑していると聞くし...。 あ、僕宛は全然歓迎っす(その前にメジャーぢゃない))。

# しかし、lha は ヘッダ識別子に1byteしか取っていないのは、
# 明らかに間違いだと思う。
# ここは、OSのid×256を足した2bytesにすべきだっただろう。
しかし、せっかく、コメントの属性にファイルの説明を付けても、 Muleでエディットすると、消えてしまうんですよねぇ。 (正確には「foo」というファイルをエディットすると、 「foo~」に移ってしまう)

拡張属性は使ってはいけないものなんだろうか...


FDもどき(8/13)

僕は基本的にコマンドライン派なんですが、それでも、 大量のファイルを整理する場合などには、FDライクな tool、 Solaris では FDclone、OS/2 では Filestar を使っています。 で、FDclone の方には何の問題もないのですが、Filestar は UNIX的なキー操作ができなくて、ちょっと不満です (カーソルの点滅も消しちまうし)。

OS/2 には、他に KL とか FD/2 とかがありますけど、 そのいづれも、C-n,C-p どころか、ダイヤモンドカーソルすら サポートしていないのは、なぜなんでしょうかねぇ。 英語圏に行けばあるかもしれませんが、あの枠線が化けるのは みっともなくて嫌ですしねぇ(AXの呪い)。 PM用は、起動する度にディスクがカリカリ言うし...

これは俺がやるしかないのかな。 今なら、その筋の人のシェアを独占できるかも。
# 実は、もはや、そんな暇はないが...


Hiddenファイルの扱い

ls .*」は(非公開版では)直ったわけですが、Hiddenファイルについては、 -a 付きでファイル名を直接指定してもだめなようです。 これは、emx/gcc の _fnexplode関数の仕様で仕方無いみたいです。
 そういえば、新出先生の(DOS用の)UNIX tools では、 「_」で始まるファイルは表示しないという仕様があります。 採用しましょうかねぇ(まぁ、option切り替えすればいいけど)。
 あと、内蔵ls にないオプションを使用した場合、外部の ls を呼び出す ようにしなければまずいかなぁとも思っております。cshの「ls-F」 などは、おそらくそのような仕様になっていたような気がします。 そうすると、従来の独自オプションとの互換性はどうすればいいでしょうかねぇ。 (8/13)

入力の展開・置換

NYAOS では、入力行を
  1. エイリアス展開
  2. ヒストリ , 環境変数 , 「~」「&」「&&」「||」
  3. (内蔵コマンドか否かのcheck & 実行)
  4. スクリプト展開
の順に置換しています。
(補足)
 あとから、ソースを見たら、「&」「&&」「||」など、 命令の区切文字に関しては、スクリプト展開のルーチンでやってました。
ですが、「続・たのしいUNIX」を見たところ、これは
  1. ヒストリ , 環境変数 , 「~」
  2. エイリアス
  3. スクリプト展開 ,「&」「&&」「||」
とすべきようです。
 下手をすると、バグが噴出しかねませんが、現在のままでは、 ヒストリで「エイリアスを使った過去の入力」を参照できませんし、 「&&」の後のスクリプト名も実行できません。 前から気になっていたことだけに、ぼちぼちやろうと思います。 (8/11)

HPFS の悲劇?

がんばれ!! Gates君という マイクロソフトの悪徳商法を紹介しているウェブページの最新号に MSファイルシステムの怪(完結編)〜HPFSの悲劇 とページが登場しました。ううむ、NTFS というのは、HPFS と違い、遅いんですねぇ。 しかし「HPFSが消えさるのはあわれでならない」というのは、ちょっとなー。

そういえば、次の Warp 5 では、ドライブレターが消えるという話をどっかの雑誌で読んだ記憶がありますが、 本当なんでしょうかねぇ。ついでに、ハード/シンボリックリンクもサポートしてくれたらよいのですが。

(補足)
Journaling File System for Warp とかいうそうです。 AIXからの移植で、Server用だそうです(ちと残念) (http://www.os2ss.com/Information/Warp5)。
 わざわざ、メイルで教えてくださいました宇野さんに お礼申しあげます。 (NYAOSのバグリポートとかもよくいただき、 非常に助かってます。m(__)m

DOSVPATH と SOS

最近、DOSについてほとんど意識していなかったのですが、 OS/2窓で、日本語のDOSソフトを起動させてしまうと、 英語環境で起動してしまいます。

IBMEWS の startdos を使えば、日本語環境で起動できますが、 いちいち「startdos ... 実行ファイル名」と入力するのも 結構、うっとうしいですね。しかし、これは...、 おお、SCRIPTPATHと同じ方法で解決できるではないか! なぜ、今まで思いつかなかったんだろう(と思ったのが一ヶ月前)。

ここは、DOSVPATHなる環境変数に記述されているディレクトリ内に ある実行ファイルについては「startdos ...」を直前に付加するように すればよいわけですね。しかし、入力の度に検索するディレクトリの数が 増えるわけですから、さらに速度が遅くなるかもしれません。

やはり、ここは独自キャッシュを用意した方がよさそうです。 いくらディスクキャッシュで実際にディスクとアクセスしないといえども、 毎回 opendir で検索するのも、不経済です。 ここは ハッシュテーブル を用意して、検索速度を稼ぐのが、 正しいプログラマの態度でしょう。 でも、SCRIPT実行支援を On にした時でも、さほど速度低下は感じられないしなー。 いらぬ改造をして、またバグを大量噴出させるのはなー。 ううむ、あ、そういう時こそ、option 選択か!

まぁ、どっちにしても、DOSVPATH はやります。この他、前から アナウンスしていて、全然やっていないものに SOS スクリプトの OS/2窓実行機能というのがあります。SOSというのは言語ぢゃなくて、 DOS上で「#!」機能を実現するソフトウェアです。といっても、 常駐プログラムとかではなくて、スクリプトファイルの先頭に 挿入して、拡張子を COM に変えれば、そのまま実行ファイルに なってしまうという テキスト型の実行ファイルのヘッダです。 最新版はftp://ftp.ics.nara-wu.ac.jp/pub/dosutil/ から Get できるはずです。 作られたのは、奈良女子大学の新出尚之先生です。 実は昔、先生の講義(京大教養の情報処理実習)を受けたことがあり、 awk やシェルスクリプトの便利さを教えていただきました。

この SOS で作ったCOM型スクリプトというのは、OS/2窓でも全く問題 実行でき、OS/2コマンドともパイプがちゃんとつながるのですが、 いかんせん、PC-DOS窓を毎回開くので、ちょっとスムーズとはいえないのです。 ここは NYAOS の出番かなぁと思うのですが、実際に それほど Needs があるのかが疑問なんで、 まだ、手が動くには至ってません。 あと、SOSスクリプトと普通のCOMファイルの判別に 時間がかかりそうだというのもあるんですよね。

でも、まぁ、このへんは、近々登場すると言われている、 TCSH OS/2日本語版に唯一対抗できそうな点なんで、 避けては通れません。まぁ、1.24 か 1.25 くらいで、 なんとかしたいですね(いっそーのこと、1.30 に格上げするか!)。


NYAOS 1.23 バグ報告

例によって、不具合がいくらか判明しました。 (バグというほどのものではない...と思いたい) 1.23 で新規に現れたわけではなりませんが、 次の Release では何とかしたいと思います。
(8/8:深夜)

上で、「ls .*」と「!」のメッセージの件については、 簡単に直りました。次のバージョンでは、ばっちりです。
(8/9:朝)


ページのカウンタを破壊してしまった(8/4)

このページ(nyaosのページ)のカウント数を記録したファイルを誤って破壊してしまいました。 で、何回だったのか、分からなくなってしまったので、とりあえず、 920回くらいにしときます。httpd のログファイルに「grep & wc」を かけたところ「1106」と出たのですが、これをそのまま使ったんじゃ、 感動の 1000 回がなくなってしまいますしね、って自己満足の世界です... :-)

ただ今、ヒストリを改良中(7/30)

 放りっぱなしだった、ヒストリ関係を今、やっています。 本来、仕様がバグしてる「!」の方を先にやるべきなのですが、 つい趣味が走って、Bash-like のインクリメンタルなヒストリ参照を まずやっています(ほぼ完成)。
 もちろん、「!」を放りっぱなしにするつもりはありません。 今度は間違えないよう、cshの「!」の仕様を調べていますので、 少々お待ちくださいませ。

 カーソルの件は、どう対処したらいいか、困っているという状況です。 カーソルを On にするには、v_ctypeという関数を呼び出せばいいのですが、 これには二つの引数(カーソル開始ライン、カーソル終了ラインだったと思う)を 渡さなければいけません。で、これが mode coXX,YYの YY によって、 適切な値が変わってしまうようなんです。v_getctype という関数でこの値を 得られるのですが、これをいつ実行するかをちょっと悩んでいます。 どなたか助言をくださいませ。なお、点滅でないカーソルでも構わないなら、

    cursor 0;47;30 1;37;40
で、ニセカーソルを利用することもできます。


Segmentation Fault がとれた、よかったよかった

日本語のバグを直したら、emxライブラリ中で Segmentation Fault が発生し たと、に書きましたが、 gdb を使わず、古典的な printf デバッグを行なった結果、 置換ルーチンの一部で無限ループになっている部分があるところが見付かり、 万事解決しました。

しかし、なぜ今まで、このバグが発生しなかったのか不思議だ。


さらに過去の余談へ