ふぁいらあ開発日記

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

[トップを狙う]

2000年02月01日

スクロール時の描画を改善する。少しは高速化できたハズ。

ファイルコピー時にコピー先が存在しないときの処理を改善する。まだ改善の余地は有るかもしれない。

ずいぶんと久しぶりにソースを読んだのでコメントつけまくる。って1年ぶりですか。よくもまあ、これまで安定して動いていたものだ。こうして手を入れるとどこかおかしくなっていくんだろうなあ。

2000年02月03日

ショートカット作成機能追加。

ルートディレクトリに移動する際に小細工する。

..を使って親ディレクトリに移動した際にもカーソルを元のディレクトリの位置に合わせるようにした。

2000年02月04日

Susie Pluginを多重にロードしてしまっていた。まだ完全に解決していないというか、まだ使うかもしれないのに解放してしまう可能性が有る。普通は解放しても問題が無いのだけどIFJPG.SPIに限りメモリリークするので、一度ロードしたら解放しないようにしないといけない。

整列に逆順整列追加。なぜか今まで無かった。

2000年02月07日

INIファイルのオプション設定が反映されなくなるかもしれないバグの修正。変数を使いまわししすぎていた。

整列が遅いので構造体をソートするのではなくポインタでソートしてみる。

メニューバーをAltキーを押したら自動的に表示されるようにした。

2000年02月08日

4GBまで対応可能にする。4GB Overは未着手。

2000年02月09日

ちょっちいろいろ変更する。

2000年02月12日

サーバ一覧ダイアログとか、UNCを直接入力する時に、LANにアクセスできない、サーバが存在しない、と言うような時にエラーメッセージが表示されてから空の選択ダイアログが表示されていたのを修正。

サーバの検索は、実はダイアログが処理していたのでエラーメッセージを表示する時にはダイアログが存在していないと困ると言う状態だった。

表示されていないウインドウ(ダイアログ)を親に指定してメッセージボックスを表示させるとWindows NTとかWindows 98ではZオーダが乱れるのだ。Windows 95だとそんなことはなかったので手を抜いていたのだけど。

処理的にも不自然なので、検索はメインウインドウが処理して、ダイアログは表示と選択だけを行うようにした。

まとめて改名できるように仕様変更。拡張子を一括して変換することやファイルに通し番号をつけることが可能になる。

ドライブ変更時、カレントディレクトリが存在しなかったときにエラーになっていた。 (リムーバブルメディアや、別スレッドからディレクトリが削除されていたときなど)

2000年02月13日

ショートカット作成時、作成先を入力できるようにした。

整列中、カーソルを砂時計に変更。

ネットワークディレクトリを使用中、ERROR_INVALID_PASSWORDが返ってきたときにはパスワードを入力するダイアログを表示。

後はUNZIP32.DLLとか他のアーカイバDLLの対応と4GB以上の整数表示だろうか。

2000年02月14日

内部処理の若干の改善。

2000年02月15日

同期処理でファイルを選択する際に、存在しているかどうかだけではなく、タイムスタンプ、ファイルサイズも判断の条件とするようにした。 また、存在しないファイルを選択することもできるようにした。

隠し機能であるF12を削除。Windows 98では使い勝手がよくないため。

2000年02月16日

サーバ検索時、応答の無いサーバが有るとそこでエラーになっていたが、エラーを無視して次のサーバの検索を行うようにした。

処理は正常に終了しました、というエラーメッセージが表示されることがあったのを対応。ウインドウズファミリログオンというグループの内部を検索しようとすると、このグループは検索に対応していないためエラーとなっていたため。

アイコンを変更。2画面ファイラーということが伝わるようにウインドウが二つ重なっているようなアイコンを作成した。16x16ドットでは書けなかったので挫折。

2000年02月22日

64ビット整数の表示。これで4GB以上の空き容量なども表示可能になる。

2000年02月26日

F2を押した時に行うサイズ表示の単位を切り替え可能にした。

2000年03月05日

改変履歴がふっ飛んでいたので変更内容が解らない。

ファイルの移動ルーチンを若干改良したのは記憶にある。
コピーして削除というシーケンスで処理していたのだが、ディレクトリの場合にはディレクトリをコピーして削除していた。これをディレクトリ内のファイルごとにコピーして削除するようにした。

2000年03月07日

マウス操作

マウスでカーソルを移動できるようにする。

ちなみに、今まではマウスでドラッグするとウインドウが移動するとかいう。

2000年03月12日

二画面化の高速化

DFでダブルウインドウモードに移行する時の処理を手抜きすることで高速化しようとする。

手を抜きすぎて運が悪いとメモリを確保する前にアクセスしてしまうというマルチスレッドならではのバグを作りこむ。

アップロード準備

FWINALとFGALTLAにDFをアップロードするための文章を作成する。

2000年03月13日

アップロード

とりあえずなんとかDFをデータライブラリにアップロードする。

2000年03月15日

バグ発見

DF、いろいろいじっているうちに一部のソースが古いものと置き換わっていた。

がーん。

調べてみるとアップロードした時にはすでに古いものに置き換わっている。
これだとメモリリークするハズだ。
試してみるとガンガンリークする。

がーん。

テスト

勤務先のPCがK6-2の500MHzにぐれぇどあっぷしたのでDFの耐久テストをしてみる。コケた。

FIVAだと何ともなかったので油断してしまったが、SendMessage()って別スレッドに送った時にはちゃんとブロッキングしてくれるんじゃないの? というか、この時って既にウインドウは破棄されているハズなんですが。

ブロッキングが解除された時には既にウインドウが破棄されていてもまだ動くのか。

2000年03月16日

メモリリーク対策

地下鉄の中でメモリリーク検出ライブラリを作ってDFをテスト。ついでに終了時に解放されるからといってほったらかしにしていたヘルプファイルのパス、入力したパスのヒストリも解放するようにする。これでリーク無し。

さくっとデータライブラリに登録。FGALTLAの方には削除依頼のメールも書く。

2000年03月17日

UNCのDBCS対応

気がついたらルートのパスの処理がDBCSに対応していない。おかげで\\サーバ\ソースとか\\サーバ\バグ一覧表とかにアクセスしようとして残念な思いをする。

カレントディレクトリの変更前にはFindFirstFile()してディレクトリの存在を確認しようとしているのだが、ルートだと見つけられない。変更先のディレクトリが無い時には階層を一上がるようにしてあるので、この時に一つ上を探す時に2バイト文字をセパレータと誤解して破滅する。

とりあえず検索方法を変更し、ルートでも見つけられるようにして、階層を一つ上げるところをDBCSに対応させる。

実行ファイルサイズ

72,192バイト。

2000年03月18日

Decon対策

DF自体はconcon問題になぜかうまく対応できていたようで、c:\con\conに移動しようとしてもパスが見つからないと言うメッセージを出す。OSごとコケ落ちるようなことはなかった。

しかし、DeconをインストールするとDFでC:\CON\CONにアクセスした時にハングアップするという話なので調べてみる。

カレントディレクトリを変更する時に、そのディレクトリが存在しているかどうかを確認しているわけだが、Deconをインストールする前はC:\CON\CONについては「存在しない」という意味のエラーコードが返ってきていた。

しかしDeconをインストールすると「アクセス権が無い」という意味のエラーコードになっていた。このためにアクセス権の認証を行おうとして何処かに行ってしまっていた。

なかなかうまくいかないものである。

2000年04月02日

ファイルのドロップ

キーボード操作で他のウインドウにファイルをドロップするような動作をできるようにした。これでDrag & Drop操作がキーボードだけでできる。

といっても実現できるのはWindows 3.1ベースのDrag & Dropだけ。Explorerなんかが使っているOLE2ベースのヤツはキーボードで操作できるような気がしない。

もう少し粘ってみる予定。とりあえず今使えるヤツを実装。

2000年04月05日

DOS/V magazineさんからの掲載依頼

ソフトバンク パブリッシングのDOS/V magazine編集者からメール。

なんとDFを収録したいとのこと。ひぇ〜。

画像の読み込みのマルチスレッド化

今までファイルの読み込み中は操作不能状態になっていた。複数の画像ファイルを閲覧できなかった頃は気にならなかったが、複数のファイルをまとめて開けるように仕様を変更したところ、この間の待ち時間が気になる気になる。

と言うわけで読み込みを別スレッドで行うことにする。その間も操作を可能な状態にしてみる。

2000年04月17日

とりあえず0.01cとしてアップロード。

2000年04月18日

@ガッテンさんからの掲載依頼

@ガッテンさんからDFの掲載依頼をいただく。

メールによるとなんだかダウンロードできなかったという話なのですが、こちらで試してみたところ、すんなり(PHSだったのですんなりというほどでもない)ダウンロードできてしまって何が原因なのかわからない。

とりあえずもう一度アップロードしてみる。

2000年04月19日

@ガッテンさんからのその後

どうやら、ダウンロードできなかったのではなく、DFのページが表示できないらしい。

なぜ?

2000年04月22日

同名ファイル選択でアクセス違反

ファイルが存在しない状態で同名ファイルの選択を実行するとコケるバグを発見、修正する。

2000年04月27日

バグ発見

ウインドウに表示しているファイル数が絶妙な時、ファイルが増えるとコケ落ちるバグを発見する。

2000年04月28日

バグ修正

ウインドウに表示しているファイル数が絶妙な時、ファイルが増えるとコケ落ちるバグを修正する。

2000年05月06日

0.01d公開

0.01dとしてアップロード。

2000年05月11日

表示されないページ

DFのページが表示されないことがあると言う件、原因らしきものを見つける。

サーバがhttpレスポンスヘッダでcharsetパラメータをShist_JISなんてもので送信してくるからでは無いだろうか。

2000年05月16日

ヘルプファイル修正。

1ページが長いものがあるので分割してみる。

2000年05月18日

キーボードドロップ処理改善

キーボードドロップを行うと処理が完了するまで止まってしまう現象を改善。

ドライブ切替ダイアログの処理改善

ディスクが存在しないドライブから、ディスクが存在しないドライブに切替えた時の処理を改善。

今までは

  1. 切替えた時点でエラーが発生
  2. 元のディレクトリ情報の再取得

という流れになってしまっていた。
今回、切替えた時点でエラーが発生した時には元のディレクトリ情報の再取得は行わない。

情報ウインドウの表示更新タイミングを修正

以前から手を抜きまくった副作用でディレクトリを変更した時など、更新すべき時に更新していなかったバグを修正。

2000年05月22日

SetSystemPowerStat()をダイナミックリンクするように変更

このAPI、Windows 95で実装されたものなのでNT3.5では実行時エラーになるのではないかと。

他にWindows 95専用APIは使っていないので、多分これでNT3.5でも動くのではないかな。ただし動作未確認

入力ヒストリの順序変更

今までは、入力したものと同じものがヒストリに残っていた場合には追加しないだけで順序は入れ換えていなかった。
今回の変更で、同じものがヒストリに残っていた場合にはヒストリリストを移動して先頭に配置するようにした。

画像表示ウインドウのサイズ修正

サイズ計算を誤っていたため、画像表示の右端と下端がウインドウの枠分切れていた。

2000年05月26日

変更通知が受け取れない

DFが誤動作する、との報告を頂く。

なんとFindFirstChangeNotification()が失敗するのだ。
しかも、失敗する理由が「指定されたファイルが見つかりません」。ってをひ。

ファイルなんか指定していないだろう。仮にディレクトリだとしてもそれは存在するわけだし。訳がわからない。

ちなみに、私の環境では発生していないのでさっぱりわからない。

2000年05月28日

単一ファイルの画像表示コマンド追加

カーソル位置のファイルだけを表示するコマンドを追加。

変更通知が受け取れない 2

匿名熱望さんの環境で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でも、そのディレクトリを表示している時には自動更新されないとのことなので、エラーメッセージを表示する部分を削除する。

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

[トップを狙う]

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