oneko - Neko runs over the windows. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Original program written by Masayuki Koba Modified by Tatsuya Kato (kato@ntts.co.jp) Modified 20 years later by Irene Knapp (ireneista@gmail.com) 以前、fj.sources に xneko という X Window 上で動く「猫」が投稿されてい ましたが、残念ながらこの「猫」は一つのウインドウを作ってそのウインドウ の中でマウスを追いかけて走り回るものでした。 そこで私が「猫をおりに閉じ込めておくのは可哀想じゃないか」と思い、画面 の上を縦横無尽に走り回るように改造してあげました。 その名も "oneko"。最初は 'oclock' の 'o' を取ったつもりだったのですが、 oclock って丸いから 'o' なんじゃなくて o'clock の 'o' ですよね。で、' o' のこじつけに "Neko runs Over the windows" の 'o' をつけました。(苦 しい) # nとmは隣合わせのキーなのでくれぐれも間違って入力しないようにして # 下さい。 このプログラムを実行するには X Window System が必要です。X のバージョ ンは R3 または R4 ですが、R4 で採り入れられた Shape extention を使って いますので R3 で実行する場合はつまらない実行結果になってしまいます。 (Shape extention がなくてもコンパイルはできるようにしてあります。) 実行するマシンは Sun4/330 と、NCD のX端末でしか試してませんが、X端末 でははっきりいって遅いです。Sun のコンソールでやった時にはパラメータの 設定でかなりの速度まであげられるのですが ......。 お試しください。 <バージョンアップによる機能拡張> ◎ オプションはすべてリソースからも指定できるようになりました。ただし、 Xrm ライブラリ関数を使用せず、XGetDefault でリソースの取得を行なっ ています(X11R1 相当の機能)ので、アプリケーションデフォルト (/usr/lib/X11/app-default にあるファイル)でのリソース指定はまだで きません。 ◎ NTTSOFT local で好評だった(?)とら猫にする機能を採り入れました。 実行時に % oneko -tora とすると猫の模様が変わります。 ◎ 色の指定ができるようになりました。起動時のオプションで -fg, -bg を 指定して下さい。 ◎ この猫は、寝ている時にねずみをゆっくり移動させると気づかずに寝て います。これは一定時間内にマウスの動いた距離がある値を越えなければ 気がつかないようになっているのですが、この「ある値」をオプションで 変えられるようにしました。デフォルトは6になっているのですが、 % oneko -idle 20 とすると「より鈍い」猫の出来上がりです。 ◎ コンパイラに gcc を使うと動かないそうです。(私も確認した)このため 今度の Imakefile では強制的に cc でコンパイルするように指定していま す。 ◎ Shape extention のライブラリがなくてもコンパイルできます。もしあな たの使用しているXが R4 ではなくて、かつ SONY NEWS ではない場合は Imakefile の DEFINES = -DSHAPE という行を消して下さい。(NEWS で使えるかどうかは試してません。誰か 確認して下さい。) <コンパイルの仕方> 1. まず、この記事を unshar してソース一式を取り出してください。 2. Makefile を作ります。oneko のディレクトリに移って、 % xmkmf を実行してください。もし、このコマンドがなければ、 % imake -DUseInstalled -I/usr/lib/X11/config でも同じです。 3. make を実行します。 % make これで、実行可能な「猫」が出来ます。もし、/usr/bin/X11 にいれて、みん なで使いたいのでしたら # make install を(スーパユーザで)実行してください。 これでコンパイルは終了です。あとは、 % oneko & を実行して楽しんでください :-) <使用方法> 基本的にオプションはいりません。が、こんなおぷしょんもあります。 help を除くオプションはリソースからも変更できます。 -help オプションの help を表示します。 -tora 猫がとら猫に変わります。 -time 猫が使うインターバルタイマの値を変えます。デフォルトは micro second 単位で 125000 になっていますが、この値を 小さくするほど猫が速く動きます。 -speed 猫が一度に移動する距離をドットの数で指定します。デフォ ルトは 16 ですが、この値を大きくするほど猫が速く移動し ます。 -idle 猫が寝ている時、どれだけの速度でねずみが動いたら起きる のかを指定できます。デフォルトは 6 です。 -rv 色を反転します。(カラーのディスプレイでは fg, bg で指 定できるので、あんまり意味がありません。) -noshape X の Shape Extension を使わずに実行します。速度はかな り速くなりますが、表示がつまらなくなります。(実際にやっ てみてください。) -fg フォアグラウンドの色を指定します。モノクロームのディス プレイでは無視されてしまいます。 -bg バックグラウンドの色を指定します。モノクロームのディス プレイでは無視されてしまいます。 また、インストールすると tora にも symbolic link を張ります。tora とい うコマンド名で起動した時にはデフォルトで -tora オプションをつけた時と 同じになります。 リソースで指定した場合はこうです。 oneko.foreground: black oneko.background: red oneko.time: 100000 oneko.reverse: true コマンドが oneko ではなく、tora という名前で起動された場合リソース名は tora.* になりますから tora.foreground: sienna tora.background: moccasin としてとら猫の設定と普通の猫の設定を別にすることも可能です。とら猫の色 はそのままでは白黒になってしまうので上の2行を resoerce にいれて下さい。 また、コマンド名でなくてクラス名("Oneko")で始まるリソースも読むよう にしました。ですから speed, time など、全ての猫に共通なリソースはクラ ス名で、猫の種類(普通の猫、とら猫)によって変えたい色などのリソースは コマンド名(インスタンス名)で指定するのがいいでしょう。 この辺の implement は始めから Xrm* を使えばよかったのですが、この関数 の存在を知らなかったので XGetDefault を使って「無理矢理」書いています。 <ばぐ、これからバージョンアップしたいところ> 複数の猫を同時に動かせるようにしたい。今のままでは oneko を2つ実行す ると同じ動きをするので重なってしまいます。(-speed や -time を変えて実 行するとそれなりに動いてくれますが。試してみて下さい。) 猫が走った後の領域に Expose が起きるので、kterm 等だとちらちらします。 Save Under も試してみましたが、遅くてやめてしまいました。何かいい方法 がないでしょうか? カーソルがルートウィンドウの上と猫の上にある時にはネズミに変わりますが、 ネズミの色は単に猫の色を反転したものになっています。時間があれば直すの はすぐなのですが、急いだのでそのままになっています。バージョンアップを 期待していて下さい。 速度を早くしたい ...... けど、これ以上は無理かな? どなたか「こうした らもっと速くなる」という方法を教えて下さい。(近藤@ふ研 さんの提案し て下さった Map/Unmap を使った方法はまだ試してません。暇がなくって。) 仕事している時、猫を動かしていると時々猫にキー入力を邪魔されることがあ ります。キー入力を無視して下のウインドウに渡すことが出来るのでしょうか? (そういっている割には今のバージョンの猫はキーイベントを Select input しています。) # 基本的にPDSですが、バグ修正や機能拡張は(こっそりでもいいですか # ら)私(kato@ntts.co.jp)に教えて下さいね。バージョンアップもするつ # もりです。