1084kis00022yav 1995/12/09 07:46:30 前へ 後へ 上へ

fkiss event extension notes


J9がfkissの拡張機能の実験をしようとしてるので,
自分の理解を深める意味でも
fkissのイベント拡張機能について再確認しときます.

--------
EventHandler
イベント拡張の識別子
これ以降の;@ではじまる行はイベント拡張の記述行とみなす.

never()
発生しないイベント.
このイベントに対するアクションは発生しない.
無視すること.

initialize()
起動時に発生するイベント.
(セルデータその他のデータの読み込み前かもしれない)
このイベントに対するアクションは,
nop, debug, shell, unmap
だけしか許可されない.

begin()
ウィンドウマネージャーによってKISSのウィンドウが最初にマップされた時に
発生するイベント.
initializeからbeginまでは環境によってはユーザーによる任意の時間遅延が
発生するので,timer等のアクションはここで指定するべきである.
(initializeイベントではtimerアクションを使えないし)

end()
[quit]メニューが選択されたり,ウィンドウマネージャによって
KISSが終了させられた場合に一度だけ発生するイベント.

nop()
何もしないというアクション.

debug("here!\n")
標準エラー出力(みたいな)に文字列を出力するアクション.
デバッグ用.

shell("echo Hello `whoami`")
文字列を引き渡してshellを実行するというアクション.
その内容はOSに依存するので互換性が無い.
また,セキュリティホールになりえるので,
通常は実行しないほうが安全である.
fkissでは-eventshellオプションが指定された場合だけ有効となる.

timer(1, 3000)	randomtimer(1, 3000, 0)と同じ.
randomtimer(1, 3000, 5000)
アラームタイマを設定するアクション.
このアクションが指定されているイベントの発生時刻から
arg2 + (rand() % arg3)ミリ秒以降にarg1のアラームイベントが発生する.
ただしarg3が0の場合は,arg2ミリ秒後.
arg2が 0の場合はarg1のアラームイベントを発生させない.
arg2は 0以上 32767以下,arg3は 0以上 32767-arg2以下の値を推奨.
それ以上は処理系依存.
rand()は0から32767までの値をとる疑似乱数.
その数列の計算式は現在処理系依存.

sound("bye.au")
arg1のPCMオーディオファイルを再生する.
PCMオーディオファイルのフォーマットについては未定.
fkissでは内部ルーチンでは
Sun Audio file および,
22.05KHz 1Ch 8bit unsignedのWindows WAVファイルを再生可能.
すでに,音声再生中の場合の動作は処理系依存.

alarm(1)
arg1のチャンネルのタイマーが
randomtimerアクションで設定された時刻以降に発生するイベント.
タイマーチャンネルは 0からMAXTIMER-1の値.
処理系の性能により,
厳密にrandomtimerで指定された時刻より遅れて発生する場合あり.

press("vast.cel")
arg1のセルもしくはオブジェクトを構成するセルの上で
マウスのボタンが押された場合に発生するイベント.

map("facered.cel")
arg1のセルを表示状態にする.
fkissではarg1にオブジェクトを指定した場合,
そのオブジェクトを構成する全てのセルを表示状態にするが,
この機能は場合によっては非常に重い処理となりえるので検討中.

release("vast.cel")
arg1のセルもしくはオブジェクトを構成するセルの上で
マウスのボタンが離された場合に発生するイベント.
ただし,この場合のセルの上でというのは厳密な意味では正しくない.
厳密にはarg1のセルのドラッグが終了したという意味である.

unmap("facered.cel")
arg1のセルを非表示状態にする.

catch(#1)
arg1のオブジェクトがドラッグ開始された場合に発生するイベント.

altmap("panties.cel")
arg1のセルの表示/非表示の切り替えをする.
fkissではarg1にオブジェクトが指定された場合
そのオブジェクトを構成する全てのセルの表示/非表示を切り替えるが,
場合によっては非常に重い処理となりえるので検討中.

drop(#1)
arg1のオブジェクトがはなされた場合に発生するイベント.
マウスボタンを押したままでも,ぺしぺしの場合にオブジェクトが
元の位置にもどった場合はdropとみなします.

fixcatch(#1)
arg1のオブジェクトをドラッグ開始したときに,
そのオブジェクトの現在の固定値が0でない場合に発生するイベント.

fixdrop(#1)
arg1のオブジェクトのドラッグが終了したときに,
そのオブジェクトの現在の固定値が0でない場合に発生するイベント.

move(#1, 10, -2)
arg1のオブジェクトを水平方向右側にarg2 垂直方向上にarg3だけ移動させる.
ただし,セルの端がcnfで指定された画面サイズを超えることはない.
(通常のマウスによる移動と同じ)

unfix(#1)
arg1のオブジェクトへの愛と情熱の作業が実を結んだ場合に発生するイベント.

changeset(2)
セットをarg1にするアクション.

changecol(2)
カラーをarg2にするアクション.

set(1)
arg1のセットに切り替えられた場合に発生するイベント.

col(1)
arg1のカラーに切り替えられた場合に発生するイベント.

quit()
KISSを終了するアクション.

in("dress.cel", "closet.cel")
arg1のセルの全ての透明でないピクセルがarg2のセルの透明でないピクセルと
重なり合う位置にある場合になった場合に発生するイベント.
(重すぎるので未実装)

out("dress.cel", "closet.cel")
arg1のセルの透明でない全てのピクセルがarg2のセルの透明でないピクセルと
重なり合う位置にない場合になった場合に発生するイベント.
(重すぎるので未実装)

leftside("a.cel", "b.cel")
rightside("a.cel", "b.cel")
upside("a.cel", "b.cel")
downside("a.cel", "b.cel")
arg1のセルの1つでも透明でないピクセルが
arg2のセルの全て透明でないピクセルの左/右/上/下にある状態になった場合
に発生するイベント.
(苦労のわりに使えなさそうなので未実装)
--------
と,まあだいだい常識的に想像できると思います.

各イベントに対応する複数のアクションの
実行順序は理想的には並列処理となります.
矛盾したアクション(セット1切り替えつつセット2に切り替えようとした場合等)
んには,そのスイッチが壊れます.(大嘘)

まあ,たてまえは処理系依存,現実的には記述順というとこでしょう.

というわけで,J9,できたらがんばって!
たぶんX68kだとサウンドは見送るのが現実的でしょう.

さーてそろそろ新cnfについても形にしないといけないですよね.

                                        UHD98984@pcvan.or.jp
                                                        yav

前へ 後へ 上へ