[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[FDclone-users:00053] Re: FDclone 2.02 has been released
- Subject: [FDclone-users:00053] Re: FDclone 2.02 has been released
- From: Takashi SHIRAI <shirai@unixusers.net>
- Date: Tue, 26 Nov 2002 04:39:29 +0900
しらいです。
In Message-Id <20021125185308.A52EF53AF9@yuka.unixusers.net>
Takashi SHIRAI <shirai@unixusers.net>writes:
> しらいです。
> 以下は HISTORY より今回の変更点の抜粋です。
簡単な解説を入れておきます。
> 組込みコマンド pushd, popd, dirs の追加。
Bourne shell にも POSIX shell にも規定されていない builtin
ですが、interactive shell であれば是非実装すべきであるという
声が多かったので実装しました。
> 組込みコマンド cd, pwd に -L, -P オプションの追加。
> 組込みコマンド set に -o physical オプションの追加。
これは Korn shell 由来の option ですね。FDclone はそもそも
-L 相当の cd を実装していましたが、shell ならば本来は -P 相
当の cd を用意すべきで、その差異を補うために option で対応し
ました。
> %JA マクロの追加。
SJISPATH とか CAPPATH とかで、directory 毎の漢字コードを指
定出来るのであれば、pathname から自動的に判断して相応の漢字
コードに変換するようなマクロがあってもいいかと思って実装して
みました。
> 内部変数 MAIL, MAILPATH, MAILCHECK の追加。
これって最早時代遅れの実装だと思うんですね。local に mail
spool があるのが当たり前だったのはひと昔前の話で、今だとこの
用途には POP3/IMAP 対応していないと無意味だと思うんです。
でも、Bourne shell には実装されていますし、POSIX shell で
すら規定されてしまっているので、一応実装してみました。
> POSIX に合せて置換 ${#foo}, ${foo%bar}, ${foo#bar} の追加。
> POSIX に合せて展開表現 $(command), $((expression)) の追加。
単に POSIX に準拠しただけです。実装が面倒な割には余り便利
になった印象を受けないんですが、どうして POSIX ってこう要ら
ない機能を折込みたがるんでしょうね。
特に $(command) の実装は仕様ミスだと思いますね。「)」って
identifier としては意味を持ち過ぎで、既に sub shell の () と
関数の () と case の ) と三種類も使われてしまっている訳です。
実際、ksh や bash では $() の中に case statement を記述出
来ないという bug があったりしますし。ash は記述出来るようで
すが。
仕様を決める時はちゃんと考えてから決めなくては。
> 組込みコマンド dtype の追加。(MS-DOS 版)
COMMAND.COM に内部コマンド TYPE があるのを忘れていました。
shell builtin の type は別の意味で使われているので、頭に「d」
を冠してあります。
> 組込みコマンド dir に /S, /4 オプションの追加。(MS-DOS 版)
この辺りは何となく実装洩れしていたものです。/4 は Windows
拡張なので必須ではないでしょうが、/S の方は MS-DOS 5.x から
実装されているので載せないとまずいでしょうね。
> fdsh のコマンドライン入力長を 2 行から 255 文字に拡大。
別に何文字で制限しても構わないのですが、FDclone 時はともか
く shell 形態の時にまで行志向なのはまずいかと思って改良しま
した。
これに伴い、USEGETCURSOR 未設定時でも fdsh の行編集が有効
になっていると思います。
> セキュリティのため一時ファイル名を乱数で生成するように改良。
一時ファイル名は「_」から順に「ABC...Zabc...z012...9」の中
から使われていない filename を探して使っていましたが、それだ
と容易に類推可能ということで乱数生成に変えました。
但し、そんなに精度の高い乱数は必要ないと思っているので、一
番精度の低い rand() 相当の計算にしてあります。もし精度が必要
ならば MD5 を使った実装に置き換えますが、その必要性を感じる
方がいらしたら主張して下さい。
不必要に計算量を増やして遅くしても意味ありませんから。
> フロッピードライブ上に「.」「..」が現れないバグを修正。
> フロッピードライブを引数にして起動するとパスが壊れる点を修正。
> フロッピードライブの空き容量計算ミスを修正。
ごめんなさい。この辺り全然気づいていませんでした。
> ヒアドキュメント(<<) がステートメント内で使えないバグを修正。
here document のために一時ファイルを作るのが無駄に思えたの
で、その場で読込む実装にしてあったのですが、よくよく考えてみ
るとその実装では関数にも loop にも使えないのでした。
Bourne shell の実装では一時ファイルに展開しているので、そ
れを踏襲しています。UNIX では一時ファイルは作成直後に unlink
出来るのですが、敢えてそういう実装にはしていません。
> 先行ファイル表示時に一部のコマンドが誤動作する点を修正。
先行ファイル表示機能が働いている時は、名前だけ判っている分
は file だか directory だか区別がつかないので、カーソル位置
の分だけはコマンド実行時に stat() しないといけないというお話
でした。
> シェルのコマンドライン引数の評価をより厳密に。
Bourne shell の source を見ながら再実装した訳ではないので、
後付けで同じ挙動を再現しようとすると色々無理があるようです。
結構厄介な問題ですね。
> RRPATH と FNAMEKCODE が重複して機能しなかった点を修正。
TRANS.TBL が一体どういう漢字コードで書かれている筈なのかと
いう考えオチ的な bug でした。
> DJGPP と Borland C++ 環境での CON のリダイレクトの支障を修正。
これは DJGPP と Borland C++ の O_BINARY の扱いの差異に依存
するものです。どちらかと言うと library の bug だと思うんです
けどね。
Borland C++ では何故か O_TEXT で open しないと echoback が
返らなくて、DJGPP では何故か dup() 時に text/binary の区別が
継承されないようです。
それもこれも、改行コードを \r\n の 2bytes に規定した MS が
悪いんですが。
> カスタマイザの設定保存機能が正しく働いていなかった点を修正。
current directory 以外の設定ファイルに上書きしようとすると、
全然違うところに backup を作成しようとしてハマってました。
> 生 MS-DOS 環境でディレクトリ書込み出来ないことがある点を修正。
生 MS-DOS では directory の rename が出来ないんですね。忘
れてました。mkdir()/rmdir() で実現してありますが、それすると
今度は timestamp がずれます。
生 MS-DOS では directory の timestamp 変更も出来ないんです
よ。しおしお。
しらい たかし