ふぁいらあ開発日記

[DFって何?][日記][コマンド一覧][関連リンク][予定表][他のファイラー][逃げ帰る]

[トップを狙う]

2000年05月30日

Vectorで公開

DF、Vectorにて公開。

2000年06月02日

IMEをオフにする

メインウインドウでIMEが使える利点が無いので(っていうか、害ばかり)オフにする。
でも、ImmAssociate()ってNT3.5で使えたっけ。よくわからないのでダイナミックロードする。

ウインドウプロシージャで小細工

今までは、メインウインドウもサブウインドウも同じウインドウプロシージャを使って、ウインドウプロシージャの中でどちらのウインドウから呼ばれたのかを判定していた。

無駄に思えたのでSetWindowLong()でそれぞれのウインドウプロシージャを書き換えることにする。

若干コードサイズを小さくすることができたが、実行ファイルには影響無し。くぅ。

2000年06月03日

メモリ使用量をさらに削減

ここまで来るとあまり意味がないかも。ただ、あまり動作確認をしていなかったりして。

若干実行ファイルのサイズが増えてしまった。現在76,800バイト。

2000年06月05日

Version 0.01fとして公開

Version 0.01gとして公開

fで、メモリ取得量の計算を誤っていた部分があったので修正。FGALTLAではまだ未公開だったのでキャンセルできたがFWINALは間に合わなかったのでバージョン番号を上げた。

2000年06月06日

Version 0.01hβをWebで公開

なんかDOSファイル名が正しく表示されていないような。

って他人事じゃないじゃん。とりあえず修正する。

2000年06月08日

なんか、もうダウンロード数30いってるし。なんか、バグフィクス版、アップロードしにくいなあ。

とりあえずファイル検索機能をもう少しなんとかしたいとか。そのためにファイルリスト生成部分の構造を作り替えたりしたのだが。

なんというか、すでにFIVAの液晶が暗すぎてコーディングする気力が失せてしまう。照明を暗くしないと字すら読みにくい。最近誤変換が多いのは多分、このせい。間違ってても気付かないのだ。読めないから。

アイコン修正

ほんのちょっち書き直す。やはり黒でびしっとくくったほうが絵が締まってみえる。

2000年06月09日

確認無し終了

マウスオペレーションで終了させる時に確認無し終了(即座に終了)することはできないのかと訊かれる。できない。解決。いや、その。

とりあえず、現状では作業中だと閉じないというような判定が入っていためちょっちやややこしい。個人的には

  1. 作業中か確認
  2. 本当に閉じるか確認
  3. 閉じる

という順序で処理したいわけだ。コレが、

  1. 「本当に終了しますか?」
  2. 「yes」
  3. 「いやあ、実は今は終了できませんぜ旦那」

とか言われると腹が立つわけで。最初から「今手が離せないから後にしてくれ」と返したいわけ。

キーを押した時にはまだ、ウインドウを閉じることが通知されていないのでこの時点でいろいろ小細工することは可能。しかし、マウスで閉じようとした場合には小細工するタイミングが無い。もう閉じるつもりで処理を進めるしかない。

なので、現在はウインドウを閉じるように通知されたタイミング(WM_CLOSE)で上に書いたような処理を行っている。キーボードから閉じた時に確認を省略できるのは、WM_CLOSEを発行する時にひねりを加えているため。

マウスでウインドウを閉じる時にはこのひねりを加えるタイミングが無いのでちょっちやこしい。

やるとしたら、確認あり終了と確認無し終了を入れ換える、というところくらいしか思いつかないのだが、これでどうだろうか。

しかし、確認無しで閉じてしまって不都合は無いのだろうか。他のファイラーを使っている時には割とよく有るというか、何かの状態をキャンセルしたくてEscを押したらさっくりとウインドウが閉じてしまって呆然とすることがある。DOSだと、そのままもう一度コマンドをタイプするだけで起動するからいいのだが、Windowsだとそうはいかないというか、またスタートメニューをたどってファイラーを探し出して起動しなくちゃいけない。うっかりキーを間違って終了させてしまった時のペナルティが大きいのだ。

もっとも、なんかキーを押したらシャットダウンしてしまう、と言うのよりはマシだが。

Susieプラグイン

Susieプラグイン、ロードしたらロードしっぱなしになるようにしてしまおうか。どうもメモリリークするやつはリークしてしまうみたいだし。使いもしないプラグインにアドレス空間使われるのは気に入らないけど。

とりあえず手元にあるヤツで調べてみた限りでは

  1. IFJPEG.SPI(1996年07月14日版)
  2. IFJPEG.SPI(2000年02月07日版)
  3. IFMAG.SPI(1996年07月14日版)
  4. IFMAKI.SPI(1996年06月19日版)
  5. IFPI.SPI(1996年06月19日版)
  6. IFPIC.SPI(1996年06月19日版)
  7. IFPIC2.SPI(1996年06月19日版)
  8. IFTIFF.SPI(1996年07月07日版)
  9. AXZIP.SPI(1996年07月14日版)

がメモリリークする。

もっとも、たけちんさんもSusieプラグインがこんなにたくさん開発されるというのは想定していなかったようだ。アレだけあると起動時に全部ロードするだけで大変なことになりかねない。

2000年06月13日

ファイル検索改造

とにかくCtrl+Wのファイル検索、動くようになる。何をどう変えたかというと、今までは検索結果は別途ダイアログに表示していた。

今までのファイル検索結果表示だから、検索した結果のファイルを全部削除したい、というのはちょっち面倒な操作になる。検索して、検索結果のファイルを選択することでそのディレクトリに移動、削除、また検索…、の繰り返し。

これを、

改変後のファイル検索結果表時今回、メインウインドウに直接表示できるようにしてみた。直接表示されているので直接操作できる。削除も改名もその場でOkだ。

ただ、罠がある。登録コマンドで使っているマクロ、$Pとか$C。どこからどこまでがディレクトリ部分で、どこからどこまでがファイル名部分かなんて見ちゃいないんだなコレが。特に$cとか$pみたいなDOS8.3形式のエイリアスなんてどうしようという感じ。ファイル名部分については保持しているものの、ディレクトリ部分については保持していないので扱えない。Cのsplitpath()みたいな関数でも作るか。

登録コマンドに"VZ $C"なんて指定していた場合、FDと同じく$Cはカーソル位置のファイル名に展開することになる。上の画面の場合には"VZ BAK\0312\BMP.C"と展開するのがいいのか"VZ BMP.C"と展開したほうがいいのか。

FDはこんなけったいな画面表示をすることが無かったので参考(パクりともいう)にできない。どういう状態が使いやすいのだろう。

2000年06月14日

秀丸エディタの関連づけ

秀丸エディタをインストールしていると、エディタの起動に失敗する件を調査。

秀丸エディタは、拡張子.TXTに対して「C:\PROGRAM FILES\HIDEMARU\HIDEMARU.EXE %1」という感じで関連づけている。

WZ Editorだと「"C:\Program Files\WZ Editor\wzeditor.exe" "%1"」になっている。

そう、途中に空白があったのが原因。DFが関連づけられたコマンドラインを解析した結果、秀丸エディタの場合には「C:\PROGRAM」だと思ってしまうのだ。

ちなみに、試した秀丸エディタのバージョンは3.05。もしかしたらものすごく古いヤツなのかもしれない。この件に関しては対応するつもりは無し。

2000年06月16日

試しに C:\にPROGRAM.EXEという実行ファイルを配置。Explorerからreadme.txtをダブルクリックするとC:\PROGRAM.EXEが実行された。

つまり、DFで行っているファイル名の解析自体に誤りは無いと思う。

2000年06月21日

メモリ操作のバグ

リムーバブルメディアのディレクトリを表示中、メディアを抜いて表示の更新をかけたときになんか誤動作するような気がしていたら、メモリ操作を間違っていた。

ポインタに代入せずにそのままfreeしていたので、思いっきりヒープを破壊していたのだ。

2000年06月23日

BMPファイルの表示

CreateDIBitmap()で描画したあと、SetDIBitsToDevice()で再度描画していたのを廃止。

多分、これはSDKのサンプルソースがこういう処理になっていたのだと思う。

2000年06月26日

友人が来て、DFをダウンロードしたいとか言っていたのであわてて現在のバージョンをアップロードしておく。

アップロードしてから思い出したけど、0.02に向けていろいろいじっていたため設定の仕方が若干違う。あわててヘルプファイルも修正して再度アップロードする。

2000年06月28日

DFカスタマイザ改良

DFカスタマイザを、キーカスタマイズ以外の部分もカスタマイズできるように昨日追加。

作業継続中。

2000年06月29日

DFカスタマイザ改良

作業継続中。

電源管理改良

SetSystemPowerState()が実装されていない処理系ではハイバネーションとサスペンドを選択不可能にした。

NT、持ってないけど。

2000年06月30日

リネーム時の通し番号桁数指定

$5nとかいう感じで、通し番号の桁数を指定できるようにした。

ファイルサイズ削減

77,312バイトあったファイルサイズを76,800バイトに戻した。

2000年07月02日

問い合わせ

DFの設定方法について問い合わせのメールをいただく。

2000年07月03日

掲載依頼

ウィンドウズ・パワー9月号へDFの掲載依頼を頂く。許可する予定。

問い合わせ

とりあえず誤解は解けたようで何より。

2000年07月04日

問い合わせ無し終了

INIファイルの設定で、終了時に問い合わせないようにできるようにした。

Susieプラグインの解放

画像展開用プラグインは、解放しないようにしていたのを解放する用に変更。

メモリリーク対策としては、オプションでプラグインを解放しないように設定することで回避できる。

今までは、

  1. 書庫ファイル展開用のプラグインは解放
  2. 画像展開用プラグインは解放しない

という動作だった。調べてみると書庫ファイル展開用のプラグインもメモリリークするので、画像展開用のプラグインだけ残していてもあまり意味がなかった。

今後、プラグインがメモリリークしなくなることを願ってどのプラグインも解放できるようにする。

複数ファイル選択時の外部コマンド

複数のファイルを選択した状態で外部コマンドを実行した場合、$F、$Cなどのファイル名を使用するマクロが含まれていた場合に限り、それぞれのファイルについて連続実行するようにした。

これらのマクロが含まれていない場合には連続実行する価値が無いように思えたので1度だけ実行する。

後はヘルプの記述を更新しないといけないのだが…。これがなかなか。

ついでに画面表示のフォントと色についてもカスタマイザで設定できるといいかもしれない。作るの面倒…。いや簡単なんだけど、簡単なだけに作るのがうっとうしいと言うか。単純作業の繰り返しに近いし。

無くてもいいかなあ、なんて思ってしまうけどMS ゴシックとかって書きにくいことこの上ないし、あったほうがいいに決まっている。

隠しコマンド

ということにして、無かったことに…。

2000年07月06日

ソートを少し高速化

10%から30%程度の高速化。

スタックサイズ、ヒープサイズ調整

スタックサイズをリンカのデフォルトに合わせていたけど、512バイトって少なすぎじゃない?

というわけで1MB予約。

DFだけなら1KBもスタックを使わないようにしてあるけど、SusieプラグインとかUNLHA32.DLLのスタック使用量までは解らないしね。

Susieプラグインを解放しないように

初期設定ではSusieプラグインを解放しないようにした。これでメモリリークしつづけるという状態は起こらなくなるはず。

その代わりプラグインをロックしつづけることになる…。

2000年07月10日

Susieプラグインを検索しなくなっていたバグの修正

指定したディレクトリでSusieプラグインを検索しないようになっていたバグの修正。Susieプラグインを解放しないようにしたつもりで、検索しないようになっていた。USEエントリで使用するプラグインを指定していると問題なく使用できていた。

2000年07月12日

属性変更のバグ

複数のファイルの日付を変更しようとした時、リードオンリーなファイルが含まれているとそれ以後のファイルの属性がダイアログに表示されているものに変更されてしまうバグを修正。

2000年07月13日

バージョン0.02公開

ここまでの修正を加えたものをバージョン0.02として公開。

2000年07月14日

起動速度の改善(挫折)

起動をもう少し速くできないかと思って、各部分でラップタイムをとって調べてみる。実際にドコの処理で時間がかかっているのか確認してから改良しないと苦労しても意味がなかったりするし。

で、調べてみるとウィンドウの生成で一番時間がかかっている。この中で一番時間を費やしているのは…。CreateWindow()。APIやんけー。

というわけであきらめる。

てっきり、こう、INIファイルの読み込みとか、メモリの初期化で時間がかかっているのかと思ったもので…。この辺、改善の余地はあるものの10%から20%程度しか時間がかかっていないので。

2000年08月03日

関連づけ起動がうまく働かない

IE3とIE4のShellExecute()の際を調べる際、どうやってURLプロトコル(http:)とドライブ名(c:)を区別しているのだろうと思ってファイル名を指定して実行を使って実験。.txt://foo はうまくいかない。レジストリをナニしてこういうプロトコルがあるかのように登録すると動いた。次に c:// なんて入力して何が実行されるか試してみた。ハングアップした。ファイル名を指定して実行のバグかと思ってstart.exeで再試。ハングアップした。ShellExecute()に渡してみた。ShellExecute()から返ってこない。

なんか、やる気無くなったのでDFではIE3環境を切り捨ててもいいですか。

2000年08月17日

ライブラリを破壊

いつの間にかshell32.libを破壊していたらしい。Windows NTでDFを使おうとしたら起動しなくてビビる。どうも手元のshell32.libはSHELL32にリンクしているらしく、Windows 9xならうまいこと動くけどWindows NTだとダメダメ。いつから? と思ったら7月に作ったバイナリ(Vectorに公開しているのとかはコレ)は動いた。LibrettoとFIVAと行ったり来たりした時にやらかしたのかも。

Windows NTでの動作不具合

Windows NTでDFを使っているとディレクトリの削除ができないバグを発見、殲滅する。

ディレクトリ移動の処理なんかでちょっち根性が足りなくて認証エラーで挫折してしまう現象を確認。アカウントとパスワードを問い合わせるようにするつもり。あのダイアログって標準でもってないのか?

カスタマイズ結果の実行中の反映

実行時に色を変えてやりたいのだけど、GDIオブジェクトの排他制御をどうするか悩んでいる。同時に二つのスレッドから参照するのでクリティカルセクション使うと、片方が描画中には描画できなくなってしまう。管理用のオブジェクトを作らないとダメかなあ。

2000年08月18日

Windows NTでバージョン情報を取得できない不具合

DF、Windows NTで動かしたらAlt+Enterでバージョン情報を表示できないというバグを発見。そういえばこのコマンドはWindows NTで試したことが無かった。Office97で使用するDLLのバージョン情報が取得できなかったので自力でバージョン情報を解析して表示していたのが裏目に出た。APIを使った元の処理に戻すことにする。

2000年08月24日

表示の更新タイミングの変更

DFは、ディレクトリの更新通知を受け取ったらすぐに表示を更新するようにしてあるけど、頻繁に更新する時(大量に削除中だったりするとか)だと操作する暇が無いくらいに更新しつづけるのでタイマーも併用することを考える。

何も考えずに実装したら、ファイルのコピー中とかにも表示を更新してしまって訳がわからなくなるというバグを産み出してしまう。

2000年08月25日

表示の更新タイミングの変更

DF、ひっそりと改良。表示を更新したあとは、1秒くらい表示を更新しないようにしてみる。ついでに操作直後にも画面を更新しないようにした。作業用ディレクトリではみ出るほど中間ファイルが生成されたり削除されているようなところだと表示の更新だけでいっぱいいっぱいになってしまって操作できなくなってしまったので。

そしたら、ファイルを削除してもちょっと間を置かないと表示が更新されない。確かに操作直後なので更新しないのは正しい動作なのだが…。

2000年08月30日

ソートの速度改善

DFのソートが遅いのは文字列の比較が遅いせいだろうと辺りをつける。今のところWin32APIのlstrcmpi()を試用して文字列比較を行っているが、Inside Windowsの1997年4月号p.73によるとWin32APIより50倍ほどランタイムのほうが速いと言うことなので自作することにする。

ちなみに、こちらでテストした結果は

関数 lstrcmpi() RTL 自作
所要時間 370ms 10ms 5ms

10,000回ループさせてみた。

DFに組み込んでみてもFIVAにはそれほど大量のファイルが無いのであまり実感が沸かない。

勤務先にある謎の15000以上ものファイルがあるディレクトリを閲覧させてみる。今まで1秒ちょいかかっていたのが0.2秒くらいに短縮。5倍速。ソートが異様に速いアリアドネとも互角に闘えるかもしれない。ただ、ディレクトリエントリの検索はまだアリアドネにかなわない。

[DFって何?][日記][コマンド一覧][関連リンク][予定表][他のファイラー][逃げ帰る]

[トップを狙う]

mailメールはこちらCopyrigiht © 2001 びい(@nifty ID:RXA01732)