あまつぶ

12.19 7:30 【Muscatを計算サーバに?】

 徹夜あけにコーヒーを飲む。あたまがぼーっとするので窓をあける。寒くなって窓を閉める。またコーヒーを飲む。大きく背伸びをして耳をかく。さ、一日のはじまりだ。

 Muscatがバージョンアップしたそうなので早速ダウンロード。前の計算結果を変数におさめる機能がついたんだそうでこれはなかなかいいかもしれない。なんかいろいろと妙なことができないか試していたら、"5+5"とコーテーションを入れたものを変数に代入してあとでその変数を参照するとちゃんと計算結果がわかるというのを発見(笑)。中を見たわけじゃないからわからないけど、おそらくはx1の内容を文字列としてつなげているのだろうからこんなことができるのね……。ってこれを見つけたところでなんの役に立つのかどうかわからないが(苦笑)。
 同じ変数に2回代入してみたらどうなるかを実験してみたら、2回目の代入の結果は無視されてその後に参照した時も1回目の値が出てきた。同じ変数に代入するなといわれたらそうなんだけど、、ちょっと気になるかな。また、代入は1行でもできるとうれしいな。比較との区別がつかないという問題はあるが。
 欲を言い出すときりがないが、16進での出力はある程度の桁にそろえてくれる機能とかあるとうれしいな。あわせる桁はlong(8桁)がいいかと思う。今のバージョンでも16進数から10進数に変換する時には8桁で処理されているみたいだし($FFFFFFFF=-1となっている)。が、計算自体は10進数で行われているから「$7FFFFFFF*2=4294967294 ($FFFFFFFE)」と「$FFFFFFFE=-2 ($FFFFFFFE)」を見るとちょっと気持ち悪い(笑)。「$80000000*2=-4294967296 ($0)」とかも。MacsBugでは内部で16進数8桁で計算し、結果をunsigned、singedともに出力するようになっているから「7FFFFFFF*2 = $FFFFFFFE #4294967296 #-2」となる。これならどちらのつもりであっても大丈夫。
 と、いろいろ実験していたらバグらしきものを発見。「$FFFFFFFE-$FFFFFFFE」を計算させたら「=-2 ($FFFFFFFE)」と出てきた。実際には「=0($0)」となるのが正しいはずなのでこれはおかしい。また、単に「-$FFFFFFFE」とすると「--2 ($FFFFFFFE)」が出てきた。たぶん16進数から10進数に変換した結果をそのまま文字列として繋いでしまっているために結果がマイナスだった場合が正しく処理できていないのだと思う。これはこの部分を括弧で括ってやることで回避できると思う。「1+-1」は「0」になるのに「1--1」は「1」になる。これはまあ「--」が注釈だと思ってしまうからなんだろうけど(笑)。

 そういえばこれを書いている途中でMacsBugで今まで知らなかった機能を発見した。ひょっとしたらアプリケーションからのコピーペーストとかできないかなとおもってMacsBugでCmd+Vを押してみたら、前に入力した式が出てくるのを発見。何度も押すことによってこれまでの計算を呼び出せる。Cmd+Bでその逆順に呼び出すこともできるらしい。これはなかなか便利かも知れない。そういえばMacsBugでショートカットを使ったこととかなかったなと思っていろいろ押してみたら、ステップとかにもショートカットがあるらしいことが分かった。
 それはそれで「CLIP」と入力してみたら「$00A86976」というのが返って来たから「ひょっとしたらこれがクリップボードのアドレスか?」とか思ったんだけどそこからダンプしてみてもそれらしいデータは入っていなかった。まあ仮にこれがクリップボードに関するなにかだったとしてもその中に入っているテキストデータがどこにあるのかという知識はぼくにはないのでどうしようもなかったりするんだけど(笑)。
 MacsBugのマニュアルを探せばどこかに載っているのかも知れないけどそこまでするくらいなら覚えておくか紙にメモするかした方がいいかもしれない。それにまあアプリケーション→MacsBugの時はescを押せばいつでも画面を見ることができるし。どちらかというと逆ができるといいななんて思いつつ、デバッガでクリップボードを勝手にいじることができてしまったら動作中のアプリケーションが誤動作する可能性もあるしそう簡単にはいかないんだろうなぁ。

 お、今ちょっと思ったアイデア。なんでもいいテキストエディタでテキストをコピーしてFKEYを呼ぶと、その内容を計算したものをクリップボードに入れてくれる電卓というのはどうだろう。結果の出力をどういう形にするかというかを考えないといけないが、10進数と16進数での結果をだしてくれればそれでいいかなという気もする。例えばMuscatが開かれた状態でAppleScriptから

tell application "HyperCard"
	set a to value dsub("10+$10")
end tell


というスクリプトを実行すれば結構時間はかかるもののちゃんと「26」という結果が返ってくるからFKEYからこれと同じことをしてやるようにできればMuscatを計算サーバ(?)にすることができそうな気がする。ただまあ問題はMuscatが開かれている状態でないとエラーになってしまうことか。ま、このスクリプトを実行したことと同じことをFKEYから実現する方法もわかんないんだけど……。
 いっそ

property gMuscatPath : ""

if gMuscatPath is "" then
	try
		set f to choose file of type 
			"STAK" with prompt "Muscatの場所を指定してください"
		set gMuscatPath to f as string
	on error
	end try
end if
if gMuscatPath is not "" then
	calcClip()
end if

on calcClip()
	set c to the clipboard as string
	tell application "HyperCard"
		go card 1 of stack gMuscatPath
		set a to (value dsub(c)) as string
	end tell
	activate
	set the clipboard to a
end calcClip


こんなスクリプトにしてしまって(AppleScript 1.3以降じゃないとクリップボード関係の命令は使えなかったような気もするけど)このスクリプトを呼び出すFKEYを作るという手もあるかも知れない。ただまあ、先に書いたように「実行がおそい」のだが。スクリプトをアプリケーション化して、「1+1」をコピーしてスクリプトを実行して「2」を得るまでには4〜5秒くらいかかった。また、HyperCardが立ち上がっていない状態から動かすともっと時間がかかる。ちょっと実用にはならないかもしれないが、あまり面倒なことを考えずにできそうなのはこのあたりまでかな。

 ちょっと最後にIconPartyの近況を書いて終わろう。タブが文字化けするバグは一応修正できた。ソースの一部をいじってコンパイルしなおしただけだけど。また「タブレット」タブの右半分くらいがクリックできないバグについてはDITLリソースの内容がおかしくなっていたからだったようだ。なぜかDITLの編集画面では正しく表示されているのにHex Editorでは値がおかしくなっていた。これを修正したらちゃんと反応してくれるようになってめでたしめでたし。

 久々に長々と書いてしまった。ま、たまにはいいかな(笑)。

to December 17, 1998 ↑ to December index → to December 20, 1998