セレクタの改造 2003.4.3

いまだにOS 9を使っている人はプリンターを複数台使い分けなければいけないお仕事じゃないですか? で、プリンターを複数台使い分けようとすると若干面倒くさいことが起きませんか?

若干面倒くさいことってのはズバリこれ。



セレクタを使ってプリンターを変更するとセレクタを閉じる時に毎回出る。たまにならいいがプリンターをちょろちょろ変更せねばならない場合は実に鬱陶しい。リターンキーを叩きながら、わかったわかったはいはいハイハイ!と文句のひとつも言いたくなるのが人情だろう。ハイは一回ね、と今にもお母さんの声が聞こえてきそうな昼下がり。花粉症の薬の眠気も手伝ってイライラは頂点へ。イライラとカルシウムは関係ないんだと思いつつ、このダイアログへのピンポイント爆撃を決意。

用意するのはお約束でResEditとセレクタ本体。ResEditの使い方がわからないとかセレクタがどこにあるかがわからない人は解説しているページを探すか、誰かに頼んだほうがいい。対象となるセレクタのバージョンはJ1-7.6.2だ。



いそいそとResEditでセレクタを開いたらDRVRリソースを参照されたい。DRVRには68Kのコードリソースが入っているので、単純に逆アセンブルしてダイアログを出している場所を探せば良い。



探し方は人それぞれだと思うがワタクシは単刀直入にダイアログのハンドルを得るAPIを検索した。この方法で難なくダイアログを出しているルーチンを発見できる。しかしこのルーチンをいじってしまうと本当に問題がある時のアラートまで出なくなりそうなので、セレクタを閉じる処理を行うルーチンに着目した。
そのルーチンとは$32Eから始まるOrnCloseで、問題の場所はここ。



DoAlertというところへ旅立っているが、DoAlertはダイアログを出しているルーチンであることは先の検索で分かっている。単純にやるならここをNOPで潰しても良いが、この少し上にある分岐にも注目。



この分岐はプリンタが変更されていない場合にブランチとなるので、真っ当にやるならここが常にジャンプとなるように書き替えるべきだろう。具体的には下のように書き替えれば良い。



この変更内容を保存したらあの鬱陶しいダイアログとおさらばできる。
実際に使ってみるとプリンターの切り替えがサクサク快適になったのでワタクシ自身は改造したセレクタを常用している。しかし何が起きるかわからない改造を実行することはお勧めしない。まして書き替えポイントの画像を見ても何をどうしていいかわからない人とか、改造は自己責任だと知らない人は絶対実行すべきではない。ってのは厳しすぎですかね?

それからワタクシのアセンブラの知識は20年前に読んだZ80の教本止まりである。68KはResEditを眺めているうちに部分的になんとなく理解したつもりになっているものなので、間違えている可能性は高い。とんでもない事を書いていたらぜひにぜひに突っこんでいただきたい…