[DFって何?][日記][コマンド一覧][関連リンク][予定表][他のファイラー][逃げ帰る]
何もしないように改良。
設定がかなり繁雑になるので。
現在、Ctrl+?という形式のキーに機能がたくさん割り当てられているので、これらが使えなくなるのはかなり不便。コレだけの数になるとキーカスタマイズをしてくれ、というのもかなり無茶な気がする。
ショートカットキーの解釈をプログラミングしてやればいいのだけど、レスポンスの低下とサイズの肥大化が気になる。
[OPT]にVIEW=設定値という形式で設定。
1 | ファイルサイズを表示 |
2 | タイムスタンプを表示 |
4 | ファイル属性を表示 |
数値は足すことで複数の項目を表示できて、3を指定するとファイルサイズとタイムスタンプの両方が表示される。
あまり効果はみられれない。
ヘルプファイルに反映。
他にも、機能一覧に標準のキー割り当てを記載した。
コレで標準のキー割り当てを変更する時には
に加えて機能一覧も修正しなければならなくなる。
どれか一つくらい忘れそうだ。
今に始まった事ではないけど、
ファイル名 | 元のサイズ | 圧縮サイズ | 割合 |
---|---|---|---|
DF.EXE | 86,528 | 43,105 | 21.89% |
DFCUST.EXE | 12,800 | 5,205 | 2.64% |
DF.HLP | 186,464 | 144,911 | 73.60% |
README.TXT | 8,299 | 3,675 | 1.87% |
合計 | 294,091 | 196896 | 100% |
とまあ、7割以上をヘルプファイルが占めている。もしヘルプファイルが無ければ書庫のサイズは50KB程度で済むことになるわけで、この方がサイズの面からはインパクトが高まるかもしれない。
ワイルドカードで選択、というコマンドを付けようと思ったものの空いているキーが無い。
AからZまでの26個とCtrlを押しながらの26個で52個しか無いところでDFのショートカットコマンドは95個もある。
EnterとCtrl+Mのような同じ機能を割り当てているキーもあるのが敗因かもしれない。
特訓の隠しコマンド入力ルーチンを流用して2ストロークキーなんかを実装したほうがいいのかも。
4ストロークまでに限定したらDWORDで判定できるからもっと簡単にできる気がする。PKとかPPPKとかPPP↓K→Pとかが使えるようになるわけだ。
あっバッキービット考慮してない。DWORDで判定できるのは2ストロークまでか。
せっかくだから、SSTP利用版DFを作成。
こんなことしている暇があったらヘルプファイル書け、という話があるわけだがこれ以上先に延ばしてもネタが風化してしまうだけなので勢いで作業。
本当は文字列リソースにしたほうがいいんだろうけど。
SSTP未使用版とソースは共通。
どうせなら、こういう余計な機能を付けたバージョンと並行開発というのはどうだろう。次に付けるのはコンテキストメニューとか。
テキストビューアで使用している文字コード変換ルーチンをアセンブラで書き直す。
あまり意味は無かった。
ウィンドウ位置記憶オプションについて、INIファイルを読み込んでいながら、書き込む処理をすっかり忘れているというクソマヌケなミス。
テストしたつもりでもまるでなっちゃいないというのが定説。
フォントの設定もできるようにしつつある。テスト中。
あと表示項目(OPTのVIEW)についても設定できるように項目追加。
なんか誤動作しそうな予感がする記述を見付ける。
せっかくだからコンテキストメニューを付けてみる。あれ? うまく動かない? メニューは出てくるんだけどおかしい…。
開く(O)を選択するとダウンロードしようとか言ってくるし。んがー。前やった時と何が違うんだろう…。
動くようになる。IShellFolderをカレントディレクトリのものを使うところでデスクトップのIShellFolderを使っていたのが敗因。
このままだとNT3.5では動かないような気がする。
やっと手をつける。
DFの改造。NT3.5にないAPIをダイナミックバインドに変える。サイズが増えたが、とりあえず魔法をかける。
ダイナミックバインドにするついでにSHELL32.DLLとOLE32.DLLを起動時にロードしないようにする。必要になるまでロードを遅延させる。
Pentium 200MHzのマシンではこのDLLのロードに100msくらいかかるので、2つあわせて0.2秒くらい速くなるハズ。
OLE32.DLLからダイナミックリンクした関数の呼び出し形式が__fastcallになってしまった。
なんか動かないなあ、と思ってデバッグビルドすると動いてしまったりして。
リリースビルドにしてアセンブルコードを読んだら__stcallになるべきところが__fastcallになっていることが判明。
とりあえずヘッダファイルから関数の宣言部をコピーして関数ポインタを宣言してみると、ヘッダファイルのマクロにしっかりと extern とか __declare(dllimport) なんてあったりして関数ポインタとして使い物にならない。
なんか嫌な予感がしつつもマクロを手作業で展開して HRESULT __stdcall という形で宣言する。解決。
がんばってがんばってがんばって書く。
いまだに「登録コマンドは26個まで登録できる」というような記述があったりした。
カスタマイザの記述を更新。ダイアログの図を今使っているものにして、ホットスポットを付けた。
複数の画像を開いている時にビューアを閉じるとフォーカスが
という感じで一瞬だけ本体にフォーカスが移動している。気に入らないので修正する。
26日に行ったNT3.5対応の時に、ShowWindowAsync()をShowWindow()に変えておいたのだけど、そうするとドロップした後のShowWindow()が無効化されていた。多分、Windows 95だと動く、というパターンなんだろう。
別の手段でアクティブにするように仕組む。
タスクバーの位置によってズレる問題を解消。GetWindowPlacement()で位置を取得しているのだからSetWindowPlacement()で設定したほうがいいんだろうけど、work placeの原点座標でずらしておく。
86,528バイト。
Susieプラグインを検索する時に、最初に画像展開用以外のプラグインを見付けると次のプラグインを探しに行かずに画像の展開ができないモノとあきらめてしまうバグを修正。
コンテキストメニューをキーアサインできるように修正。
キー定義が既に定義されている状態でキー定義ファイルを読み込むと内部バッファと表示が食い違うバグの修正。
以前は読み込みボタンが無かったので最初に初期化したらそれでOkだったのだけど、読み込みボタンを追加したのだから読込時にも初期化しなければならなかったのだ。
原因不明。再現性無し。
ネットワーク検索時に、サーバコンテナやドメインコンテナが空だった場合にはすぐさまキャンセル扱いでダイアログを閉じていたのをやめて、空のダイアログを表示するように変更。
以前、空のダイアログを表示するくらいなら最初から表示しない方がマシだと思ってこのような仕様に変更したのだけど、イキナリダイアログが閉じるとちょっと驚く。
ネットワーク検索時にもユーザ認証を行うように仕様変更。
「作業中」という感じで表示しているウィンドウ、アレを表示する時にHeapAlloc()で作業用のメモリを分捕るんだけど、この時にHeapAlloc()の中で死ぬことがある。
なんで?
というか、どういうタイミングで死ぬのか原因がさっぱりわからない。
この現象が出る時はWZ Editorもおかしくなっているのでなにか複合的な問題なのかもしれない。
ディレクトリの更新があった時に、頻繁に更新し続けるのを回避するために更新後一定期間は更新しないようにしている。
今までこの処理が
タイマー停止 | 表示の更新 | ||
---|---|---|---|
作業中 | - | - | |
時間未経過 | 更新あり | - | - |
更新なし | - | - | |
時間経過 | 更新あり | ○ | ○ |
更新なし | ○ | - |
だったのを
タイマー停止 | 表示の更新 | ||
---|---|---|---|
作業中 | - | - | |
時間未経過 | 更新あり | - | - |
更新なし | ○ | - | |
時間経過 | 更新あり | ○ | ○ |
更新なし | ○ | - |
にしようと思う。
更新が無かった時に、更新があるまでいつまでもタイマーが動きつづけてしまうのだ。
こういう図を書くとちょっとは解りやすくなるので資料が残り続けるのは助かる。
再現するパターンを見つけたのでワトソン博士に調べてもらう。
エディタ起動時に、メモリオーバーランすることがある箇所を発見。
ディレクトリ変更ダイアログ、などのダイアログにファイル名補完機能などを追加。
ダイアログ | 補完機能 | 登録ディレクトリ | 貼り付け |
カレントディレクトリ変更 | ディレクトリ補完 | あり | なし |
コピー先の指定 | ディレクトリ補完 | あり | なし |
移動先の指定 | ディレクトリ補完 | あり | なし |
マスク指定 | なし | なし | なし |
ファイル名の変更 | なし | なし | なし |
複数ファイル名の変更 | なし | なし | なし |
ファイル名の変更(リトライ) | なし | なし | なし |
ファイル名を指定して実行 | パラメータ補完 | なし | なし |
書庫作成 | ディレクトリ補完 | あり | なし |
書庫展開 | ディレクトリ補完 | あり | なし |
ファイル検索 | なし | なし | なし |
ディレクトリ作成 | ディレクトリ補完 | あり | なし |
ファイル作成 | ファイル名補完 | あり | あり |
ショートカット作成 | ディレクトリ補完 | あり | なし |
ワイルドカード検索 | なし | なし | なし |
更新遅延が場合によって掛かり過ぎて更新して欲しいタイミングでも遅延してしまうことがあるのを解決。
遅延させている間に、表示の更新がかかるような操作(複写、削除)などを行っても表示の更新を遅延していた。
この場合はすぐに表示を更新してくれた方がうれしい。
うっかりしててEscキーを登録するのを忘れていた。指摘されるまで全然気付かないとか言う。
ついでにApplicationキーも追加。
SSTPで使うポートって変更されていなかったっけ? Webで公開されている文書を見るとまだ11000のままのようだけど。
せっかくだからDF.INIの[SSTP]のPORTでポート番号を指定できるようにする。
ワイルドカード選択のキーアサインを「Ctrl+U」から「*」に変更。
ファイルのリネームとワイルドカード選択のダイアログで使用している入力用テキストボックスに入力文字数の制限があったため、長いファイル名に変更できないなどの不具合を修正。
ディレクトリを圧縮しようとするとルートディレクトリから圧縮してしまうバグ。
UNLHA32.DLLに渡すコマンド文字列の編集を間違っていた。
A -r2x "ディレクトリ名\*.*"
とするつもりが、\*.*を追加する場所を間違っているため
A -r2x \*.*
になっていた。いつからだろう。
要は編集した時にポインタをずらすのを忘れていたのだな。
で、初めて気付いたんだけけど、LHA.EXEでも LHA A arc ディレクトリ\ で丸ごと圧縮できるのね。*.*要らないじゃん。
DF with SSTPはws2_32.libとリンクしていたため、winsock2環境でないと動作しなかった。そのためWindows 95では動作しない。wsock32.libとリンクし直す。
DirectSSTPに切り替えたほうがいいかも。
ゴミ箱を使用しての削除機能をコーディング。
ゴミ箱送りにするファイル名一覧をつくるのが面倒そうだったので次のバージョンアップまで先送りにしようと思っていたのだけど、よく考えるとファイル名をクリップボードにコピーするという処理をちょっと変更するだけでうまくいくことに気がついた。
で実装。動作確認。Ok。
これでゴミ箱を利用した削除ができるようになったのでキーカスタマイザの方にもコマンドを追加しなければならない。
ゴミ箱送りの方法はこれでいいと。ゴミ箱を空にして完全にファイルを削除する方法も解った。
さて、ゴミ箱からゴミを拾ってくるにはどうしたらいいんだ? ShellNameSpaceと格闘しないとダメか? CでCOMしろと。それはイヤだ。
いや、COMで呼び出すだけならいいんだけど。COM自体はショートカットの作成とかコンテキストメニューとかでいじっているし、特訓ではDirectXをCで使っていたりするし。
DnDみたいなこっちでもCOMオブジェクトを作ってごにょごにょしないといけないようなら勘弁して欲しい。
メールはこちらCopyrigiht © 2001 びい(@nifty ID:RXA01732)