[DFって何?][日記][コマンド一覧][関連リンク][予定表][他のファイラー][逃げ帰る]
スクロール時の描画を改善する。少しは高速化できたハズ。
ファイルコピー時にコピー先が存在しないときの処理を改善する。まだ改善の余地は有るかもしれない。
ずいぶんと久しぶりにソースを読んだのでコメントつけまくる。って1年ぶりですか。よくもまあ、これまで安定して動いていたものだ。こうして手を入れるとどこかおかしくなっていくんだろうなあ。
ショートカット作成機能追加。
ルートディレクトリに移動する際に小細工する。
..を使って親ディレクトリに移動した際にもカーソルを元のディレクトリの位置に合わせるようにした。
Susie Pluginを多重にロードしてしまっていた。まだ完全に解決していないというか、まだ使うかもしれないのに解放してしまう可能性が有る。普通は解放しても問題が無いのだけどIFJPG.SPIに限りメモリリークするので、一度ロードしたら解放しないようにしないといけない。
整列に逆順整列追加。なぜか今まで無かった。
INIファイルのオプション設定が反映されなくなるかもしれないバグの修正。変数を使いまわししすぎていた。
整列が遅いので構造体をソートするのではなくポインタでソートしてみる。
メニューバーをAltキーを押したら自動的に表示されるようにした。
4GBまで対応可能にする。4GB Overは未着手。
ちょっちいろいろ変更する。
サーバ一覧ダイアログとか、UNCを直接入力する時に、LANにアクセスできない、サーバが存在しない、と言うような時にエラーメッセージが表示されてから空の選択ダイアログが表示されていたのを修正。
サーバの検索は、実はダイアログが処理していたのでエラーメッセージを表示する時にはダイアログが存在していないと困ると言う状態だった。
表示されていないウインドウ(ダイアログ)を親に指定してメッセージボックスを表示させるとWindows NTとかWindows 98ではZオーダが乱れるのだ。Windows 95だとそんなことはなかったので手を抜いていたのだけど。
処理的にも不自然なので、検索はメインウインドウが処理して、ダイアログは表示と選択だけを行うようにした。
まとめて改名できるように仕様変更。拡張子を一括して変換することやファイルに通し番号をつけることが可能になる。
ドライブ変更時、カレントディレクトリが存在しなかったときにエラーになっていた。 (リムーバブルメディアや、別スレッドからディレクトリが削除されていたときなど)
ショートカット作成時、作成先を入力できるようにした。
整列中、カーソルを砂時計に変更。
ネットワークディレクトリを使用中、ERROR_INVALID_PASSWORDが返ってきたときにはパスワードを入力するダイアログを表示。
後はUNZIP32.DLLとか他のアーカイバDLLの対応と4GB以上の整数表示だろうか。
内部処理の若干の改善。
同期処理でファイルを選択する際に、存在しているかどうかだけではなく、タイムスタンプ、ファイルサイズも判断の条件とするようにした。 また、存在しないファイルを選択することもできるようにした。
隠し機能であるF12を削除。Windows 98では使い勝手がよくないため。
サーバ検索時、応答の無いサーバが有るとそこでエラーになっていたが、エラーを無視して次のサーバの検索を行うようにした。
処理は正常に終了しました、というエラーメッセージが表示されることがあったのを対応。ウインドウズファミリログオンというグループの内部を検索しようとすると、このグループは検索に対応していないためエラーとなっていたため。
アイコンを変更。2画面ファイラーということが伝わるようにウインドウが二つ重なっているようなアイコンを作成した。16x16ドットでは書けなかったので挫折。
64ビット整数の表示。これで4GB以上の空き容量なども表示可能になる。
F2を押した時に行うサイズ表示の単位を切り替え可能にした。
改変履歴がふっ飛んでいたので変更内容が解らない。
ファイルの移動ルーチンを若干改良したのは記憶にある。
コピーして削除というシーケンスで処理していたのだが、ディレクトリの場合にはディレクトリをコピーして削除していた。これをディレクトリ内のファイルごとにコピーして削除するようにした。
マウスでカーソルを移動できるようにする。
ちなみに、今まではマウスでドラッグするとウインドウが移動するとかいう。
DFでダブルウインドウモードに移行する時の処理を手抜きすることで高速化しようとする。
手を抜きすぎて運が悪いとメモリを確保する前にアクセスしてしまうというマルチスレッドならではのバグを作りこむ。
FWINALとFGALTLAにDFをアップロードするための文章を作成する。
とりあえずなんとかDFをデータライブラリにアップロードする。
DF、いろいろいじっているうちに一部のソースが古いものと置き換わっていた。
がーん。
調べてみるとアップロードした時にはすでに古いものに置き換わっている。
これだとメモリリークするハズだ。
試してみるとガンガンリークする。
がーん。
勤務先のPCがK6-2の500MHzにぐれぇどあっぷしたのでDFの耐久テストをしてみる。コケた。
FIVAだと何ともなかったので油断してしまったが、SendMessage()って別スレッドに送った時にはちゃんとブロッキングしてくれるんじゃないの? というか、この時って既にウインドウは破棄されているハズなんですが。
ブロッキングが解除された時には既にウインドウが破棄されていてもまだ動くのか。
地下鉄の中でメモリリーク検出ライブラリを作ってDFをテスト。ついでに終了時に解放されるからといってほったらかしにしていたヘルプファイルのパス、入力したパスのヒストリも解放するようにする。これでリーク無し。
さくっとデータライブラリに登録。FGALTLAの方には削除依頼のメールも書く。
気がついたらルートのパスの処理がDBCSに対応していない。おかげで\\サーバ\ソースとか\\サーバ\バグ一覧表とかにアクセスしようとして残念な思いをする。
カレントディレクトリの変更前にはFindFirstFile()してディレクトリの存在を確認しようとしているのだが、ルートだと見つけられない。変更先のディレクトリが無い時には階層を一上がるようにしてあるので、この時に一つ上を探す時に2バイト文字をセパレータと誤解して破滅する。
とりあえず検索方法を変更し、ルートでも見つけられるようにして、階層を一つ上げるところをDBCSに対応させる。
72,192バイト。
DF自体はconcon問題になぜかうまく対応できていたようで、c:\con\conに移動しようとしてもパスが見つからないと言うメッセージを出す。OSごとコケ落ちるようなことはなかった。
しかし、DeconをインストールするとDFでC:\CON\CONにアクセスした時にハングアップするという話なので調べてみる。
カレントディレクトリを変更する時に、そのディレクトリが存在しているかどうかを確認しているわけだが、Deconをインストールする前はC:\CON\CONについては「存在しない」という意味のエラーコードが返ってきていた。
しかしDeconをインストールすると「アクセス権が無い」という意味のエラーコードになっていた。このためにアクセス権の認証を行おうとして何処かに行ってしまっていた。
なかなかうまくいかないものである。
キーボード操作で他のウインドウにファイルをドロップするような動作をできるようにした。これでDrag & Drop操作がキーボードだけでできる。
といっても実現できるのはWindows 3.1ベースのDrag & Dropだけ。Explorerなんかが使っているOLE2ベースのヤツはキーボードで操作できるような気がしない。
もう少し粘ってみる予定。とりあえず今使えるヤツを実装。
ソフトバンク パブリッシングのDOS/V magazine編集者からメール。
なんとDFを収録したいとのこと。ひぇ〜。
今までファイルの読み込み中は操作不能状態になっていた。複数の画像ファイルを閲覧できなかった頃は気にならなかったが、複数のファイルをまとめて開けるように仕様を変更したところ、この間の待ち時間が気になる気になる。
と言うわけで読み込みを別スレッドで行うことにする。その間も操作を可能な状態にしてみる。
とりあえず0.01cとしてアップロード。
@ガッテンさんからDFの掲載依頼をいただく。
メールによるとなんだかダウンロードできなかったという話なのですが、こちらで試してみたところ、すんなり(PHSだったのですんなりというほどでもない)ダウンロードできてしまって何が原因なのかわからない。
とりあえずもう一度アップロードしてみる。
どうやら、ダウンロードできなかったのではなく、DFのページが表示できないらしい。
なぜ?
ファイルが存在しない状態で同名ファイルの選択を実行するとコケるバグを発見、修正する。
ウインドウに表示しているファイル数が絶妙な時、ファイルが増えるとコケ落ちるバグを発見する。
ウインドウに表示しているファイル数が絶妙な時、ファイルが増えるとコケ落ちるバグを修正する。
0.01dとしてアップロード。
DFのページが表示されないことがあると言う件、原因らしきものを見つける。
サーバがhttpレスポンスヘッダでcharsetパラメータをShist_JISなんてもので送信してくるからでは無いだろうか。
1ページが長いものがあるので分割してみる。
キーボードドロップを行うと処理が完了するまで止まってしまう現象を改善。
ディスクが存在しないドライブから、ディスクが存在しないドライブに切替えた時の処理を改善。
今までは
という流れになってしまっていた。
今回、切替えた時点でエラーが発生した時には元のディレクトリ情報の再取得は行わない。
以前から手を抜きまくった副作用でディレクトリを変更した時など、更新すべき時に更新していなかったバグを修正。
このAPI、Windows 95で実装されたものなのでNT3.5では実行時エラーになるのではないかと。
他にWindows 95専用APIは使っていないので、多分これでNT3.5でも動くのではないかな。ただし動作未確認。
今までは、入力したものと同じものがヒストリに残っていた場合には追加しないだけで順序は入れ換えていなかった。
今回の変更で、同じものがヒストリに残っていた場合にはヒストリリストを移動して先頭に配置するようにした。
サイズ計算を誤っていたため、画像表示の右端と下端がウインドウの枠分切れていた。
DFが誤動作する、との報告を頂く。
なんとFindFirstChangeNotification()が失敗するのだ。
しかも、失敗する理由が「指定されたファイルが見つかりません」。ってをひ。
ファイルなんか指定していないだろう。仮にディレクトリだとしてもそれは存在するわけだし。訳がわからない。
ちなみに、私の環境では発生していないのでさっぱりわからない。
カーソル位置のファイルだけを表示するコマンドを追加。
匿名熱望さんの環境でDFが誤動作する件、小さなテストプログラムを作成して調査してもらう。
プログラムはこんなの。
#define WIN32_LEAN_AND_MEAN
#define STRICT
#include<windows.h>
#include<stdio.h>
int main(int argc, char **argv){
HANDLE h;
char *p;
char dir[MAX_PATH];
char *msg;
if(argv[1]){
p=argv[1];
}else{
GetCurrentDirectory(sizeof(dir), dir);
p=dir;
}
h=FindFirstChangeNotification(p, FALSE,
FILE_NOTIFY_CHANGE_FILE_NAME |
FILE_NOTIFY_CHANGE_DIR_NAME |
FILE_NOTIFY_CHANGE_ATTRIBUTES |
FILE_NOTIFY_CHANGE_SIZE |
FILE_NOTIFY_CHANGE_LAST_WRITE);
if(h==INVALID_HANDLE_VALUE){
FormatMessage(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPSTR)&msg,
0,
NULL);// Display the string.
puts(msg);
LocalFree(msg);
return 1;
}else{
FindCloseChangeNotification(h);
puts("成功");
return 0;
}
}
やはりエラーになるらしい。
ちなみに、Explorerでその失敗するディレクトリを表示させると、表示を自動更新しないしエラーも表示しないようなので、エラー表示は行わないことにする。
しかし、どういう時にこのAPI呼び出しが失敗するのだろう。エラーコードは…なんだろう。2?
表示されたメッセージは「指定されたファイルが見つかりません」。
変更通知が受け取れないと言うことは、表示を自動更新することができない。
Explorerでも、そのディレクトリを表示している時には自動更新されないとのことなので、エラーメッセージを表示する部分を削除する。