/oneko

An update of the classic digital kitten.

Primary LanguageC

		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 <n>	猫が使うインターバルタイマの値を変えます。デフォルトは 
		micro second 単位で 125000 になっていますが、この値を
		小さくするほど猫が速く動きます。

-speed <n>	猫が一度に移動する距離をドットの数で指定します。デフォ
		ルトは 16 ですが、この値を大きくするほど猫が速く移動し
		ます。

-idle <n>	猫が寝ている時、どれだけの速度でねずみが動いたら起きる
		のかを指定できます。デフォルトは 6 です。

-rv		色を反転します。(カラーのディスプレイでは fg, bg で指
		定できるので、あんまり意味がありません。)

-noshape	X の Shape Extension を使わずに実行します。速度はかな
		り速くなりますが、表示がつまらなくなります。(実際にやっ
		てみてください。)

-fg <color>	フォアグラウンドの色を指定します。モノクロームのディス
		プレイでは無視されてしまいます。

-bg <color>	バックグラウンドの色を指定します。モノクロームのディス
		プレイでは無視されてしまいます。

また、インストールすると 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)に教えて下さいね。バージョンアップもするつ
# もりです。