ninix 0.8
=========
梶山民人 (2002年7月12日)

はじめに
--------

本ソフトウェアは、「あれ以外の何か with "任意"」(以下、「何か」)
と呼ばれる Windows 用ソフトウェアに似せて作られたデスクトップ・
マスコット・プログラムです。Unix 系 OS (Linux, FreeBSD など) の 
X Window System 環境上で動作します。主な特徴を以下に示します。

o 「何か」用ゴースト/シェル/バルーン対応
  広く普及している「何か」用差し替えデータをそのまま利用できます。
  また、各種差し替えデータを動作中に切り替えることができます。

o 標準 shiori.dll「美坂」互換モジュール搭載
o 汎用 shiori.dll「華和梨」互換モジュール搭載
o 汎用 shiori.dll「里々」互換モジュール搭載
o 汎用 shiori.dll「偽栞」互換モジュール搭載
o トランスレータ「拡張 makoto.dll」互換モジュール搭載
  「偽 AI」と呼ばれる会話生成機能を構成する各種モジュールにより
  キャラクタがおしゃべりします。

o Sakura Script Transfer Protocol (SSTP) 対応
  外部から SSTP リクエストを受け付けて処理する SSTP サーバ機能を
  実装しています。SSTP を用いてスクリプトを送り付けることにより、
  キャラクタを自由にしゃべらせることができます。アイデア次第でい
  ろいろな応用が可能です。

本ソフトウェアの最新版は以下の場所から入手できます。

  http://www.geocities.co.jp/SiliconValley-Cupertino/7565/

必要なもの
----------

本ソフトウェアを動作させるには以下のソフトウェアが必要です。

o Python (http://www.python.org/)
  本ソフトウェアの開発言語です。バージョン 2.0 での動作を確認し
  ています。バージョン 1.5.2 や 2.1 でも動くと思います。

o GTK+ (http://www.gtk.org/)
  X Window System 用の GUI ライブラリです。バージョン 1.2.8 での
  動作を確認していますが、これより古くても大丈夫だと思います。

o PyGTK (http://www.daa.com.au/~james/pygtk/)
  Python から GTK+ を利用するためのライブラリです。バージョン 
  0.6.6 での動作を確認しています。これより古いバージョンを使用す
  るとメモリ漏れを起こすことがあるようです。できるだけ新しい版を
  お使い下さい。

o UnZip (Info-ZIP)
o LHa for UNIX
  圧縮ファイル展開プログラムです。インストーラ (ninix-install コ
  マンド) の内部から呼び出しています。UnZip 5.40 と LHa 1.14i で
  の動作を確認しています。

また、以下のソフトウェアがあれば利用します。

o pngtopnm, ppmquant, pnmtopng
  画像処理プログラムです。減色を行なう -q (--quantize) オプショ
  ンが指定された場合に ninix-install コマンドの内部で呼び出して
  います。-q オプションを使わなければ不要です。

インストール方法
----------------

以下のように make コマンドを実行すればインストールは完了です。

  # make
  # make install

インストール先ディレクトリ (prefix) は /opt/ninix-0.8 になってい
ます。必要に応じて変えて下さい。例:

  # make install prefix=/usr/local

python コマンドの名前も同様に変更できます。ここで指定した名前は
実行時にも使われます。

  # make install python=/opt/bin/python2.0

インストールされる ninix コマンドと ninix-install コマンドの名前
は二つの変数 NINIX, NINIX_INSTALL でそれぞれ変更できます。例:

  # make install NINIX=ninix-0.8 NINIX_INSTALL=ninix-install-0.8

また、$(prefix)/bin に相当するディレクトリをパスに追加して下さい。

使い方
------

インストーラ (ninix-install コマンド)
- - - - - - - - - - - - - - - - - - -

まずは好みのゴーストをダウンロードして (「リンク集」参照) 以下の
要領でインストールしてください。今のところ本ソフトウェアには標準
のゴーストが含まれていないため、少なくとも一つはゴーストをインス
トールしないと本体プログラムが起動しません。例:

  # ninix-install mayura.zip

ninix と一緒に配付されている標準バルーン ninix-balloon.lzh も同
様にインストールして下さい。標準バルーンは必須ではありませんが、
少なくとも一つはバルーンをインストールして下さい。例:

  # ninix-install ninix-balloon.lzh

アーカイブファイルが INSTALL/1.0 以上に対応していれば自動的にファ
イル種別 (ゴースト/シェル/バルーン/サプリメントの4種類) を識別し
て処理します。ファイル種別が識別できないというエラーが出る場合は、
以下のようにオプションを指定してファイル種別を明示して下さい。例:

  # ninix-install -g ghost1.zip ghost2.lzh      (ゴーストの場合)
  # ninix-install -s shell1.zip shell2.lzh      (シェルの場合)
  # ninix-install -b balloon1.zip balloon2.lzh  (バルーンの場合)

サプリメント (追加データ) に対しては特にオプションを指定する必要
はありません。サプリメントの追加対象となるゴーストを検索して自動
的にインストールします。ただし、対象となるゴーストが複数見つかっ
た場合はエラーメッセージを出力してインストールを中止します。例:

  # ninix-install kamo010902b.zip
   ：
  searching supplement target ... multiple candidates found
      ninix-20010802
      sakura010925b
  kamo010902b.zip: try -S option with a target ghost name (skipped)

その場合は次のように -S (--supplement) オプションを指定して追加
対象となるゴーストを選択して下さい。例:

  # ninix-install -S sakura010925b kamo010902b.zip

もし対象となるゴーストが一つも見つからなければ、そのサプリメント
はシェルとしてインストールされます。

ninix 用のプラグインも ninix-install コマンドでインストールでき
ます。例:

  # ninix-install plugin.zip

アーカイブファイルは一度に複数指定できます。ファイル種別を指定す
るとすべて同じファイル種別として扱います (矛盾が見つかった場合は
そのアーカイブファイルをスキップします)。

例外として、ゴーストのアーカイブファイルに対して -s オプションを
指定すると同梱のサーフィスのみをシェルとしてインストールすること
ができます。「華和梨」と「偽栞」以外の偽 AI を用いているゴースト
のサーフィスをシェルとして使いたい場合などに指定して下さい。例:

  # ninix-install -s mayura.zip

PNG 画像はそのままインストールされます。-x (--xpm) オプションを
指定すると XPM 形式に変換してインストールします。PNG 形式でイン
ストールしたデータが使えない場合などに指定して下さい。

同名のデータが既にインストールされていた場合は削除して新しいデー
タをインストールします。-i (--interactive) オプションを指定する
と削除の前に確認メッセージを表示します。例:

  # ninix-install -i mayura_v340.zip
   :
  ninix-install.py: remove "/home/kajiyama/.ninix/ghost/mayura_v315"? (yes/no)

y を入力すると既存のデータを削除します。n を入力すると既存のデー
タを削除せずに新しいデータをインストールします (アーカイブファイ
ル名が同じでなければ同名のデータを共存させることができます)。

アーカイブファイル名の代わりに URL を指定すると自動的にファイル
をダウンロードしてインストールします。このとき、-d (--download) 
オプションを指定するとダウンロードしたアーカイブファイルをアーカ
イブディレクトリに保存します。例:

  # ninix-install -d http://localhost/mayura.zip

デフォルトのアーカイブディレクトリは ~/.ninix/archive です。環境
変数 NINIX_ARCHIVE もしくは -A (--arcdir) オプションを指定するこ
とによりアーカイブディレクトリを変更できます。例:

  # ninix-install -d -A . http://localhost/mayura.zip

また、アーカイブファイル名または URL を1行に一つずつ記述したファ
イル (リストファイル) を指定することもできます。以下のようにファ
イル名の前に @ を付けて指定して下さい。空行と # で始まる行 (コメ
ント) は無視します。例:

  # ninix-install @listfile.txt

-r (--reload) オプションを指定するとデータをインストールした後に
起動中の本体に自動的に最新のデータを読み込ませることができます。

例1:
  # ninix-install -r mayura.zip

例2:
  # ninix-install mayura.zip
  # ninix-install -r

インストーラを実行すると ~/.ninix 以下に fontrc と gtkrc の二つ
の設定ファイルを自動的にインストールします。既に同名のファイルが
存在する場合は何もしません。また、ninix-install コマンドを -R
(--rcfiles) オプション付きで実行すると、同名のファイルが存在する
場合でも上書きインストールします。これにより、設定ファイルの内容
を元の状態に戻すことができます。例:

  # ninix-install -R

データファイルと設定ファイルの標準のインストール先は ~/.ninix に
なっています。この標準のインストール先は、環境変数 NINIX_HOME も
しくは -H (--homedir) オプションを指定することにより変更できます。

例1:
  # NINIX_HOME=/usr/local/share/ninix-0.8; export NINIX_HOME
  # ninix-install mayura.zip

例2:
  # ninix-install -H /usr/local/share/ninix-0.8 mayura.zip

個人用の設定ファイルを置くディレクトリ名は環境変数 NINIX_USER ま
たは -U (--userdir) オプションでも指定できます。これらの指定は環
境変数 NINIX_HOME と -H オプションの指定よりも優先されます。

NINIX_HOME と NINIX_USER の二つの環境変数は後述の本体プログラム
でも参照します。シェルの設定ファイル (~/.bashrc, ~/.cshrc など) 
に環境変数の設定を追加することをお勧めします。

なお、バージョン 0.5 から ~/.ninix 以下のディレクトリ構成が変わ
りました。これより古いバージョンをお使いだった方は、~/.ninix の
中身を全部消してデータをインストールし直して下さい。

また、バージョン 0.7.22 からデータファイル名をすべて小文字に変換
してインストールするようになりました。既存のデータを利用したい場
合は予めデータファイル名を小文字に変換する必要があります。既存の
データファイル名を一括変換するには -L (--lower) オプションを付け
て ninix-install コマンドを実行します。例:

  # ninix-install -L

本体プログラム (ninix コマンド)
- - - - - - - - - - - - - - - -

ninix コマンドを実行すると、インストールされているゴースト/シェ
ル/バルーンの一覧を読み込んで最初に見つかったゴーストで起動しま
す。主な操作は以下の通りです。

o サーフィス (キャラクタ) ウィンドウ
  左1クリック       全ウィンドウを前景に持ってくる
  左2クリック       ゴーストメニューを開く (未実装)
  右1クリック       操作メニューを開く

o バルーン (吹き出し) ウィンドウ
  左1クリック       全ウィンドウを前景に持ってくる
  左2クリック       ゴーストメニューを開く (未実装)
  右1クリック       バルーンウィンドウを閉じる

o 操作メニュー
  [ファイル]
  ネットワーク更新  ゴーストのネットワーク更新を行なう
  消滅指示          ゴーストに消滅を指示する
  再読み込み        すべてのデータをロードし直す
  設定              設定ダイアログを開く
  使用率グラフ      ゴーストの使用率を表示します
  バージョン情報    起動時に表示されるバージョン情報を再表示する    
  終了              プログラムを終了する
  [ゴースト]        ゴーストを切り替える
  [シェル]          シェルを切り替える
  [バルーン]        バルーンを切り替える
  [表示スピード]    スクリプトの表示ウェイトを指定する
  [プラグイン]      プラグインを起動する

ninix コマンドに -R (--raise) オプションを与えるとすべてのウィン
ドウが指定したピクセル数だけ上に移動します。画面下部にタスクバー
が常時出ている場合などに指定すると便利です。

また、twm など一部のウィンドウマネージャではウィンドウの配置がお
かしくなることがあります。その場合は -p オプションを付けて ninix
コマンドを実行してみて下さい。ただし、このオプションを指定すると
キー入力関連のイベントが発生しなくなります (特に害はありません)。

コマンドラインオプション --sstp-port により9801番と11000番以外の
ポートで SSTP リクエストを受け付けることができるようになります。
このオプションは複数指定できます。また、環境変数 NINIX_SSTP_PORT 
でも指定可能です。ポート番号をコンマで区切って指定して下さい。

例1:
  $ ninix --sstp-port 6809 --sstp-port 8086

例2:
  $ NINIX_SSTP_PORT=6809,8086; export NINIX_SSTP_PORT
  $ ninix

同様に、コマンドラインオプション --iscp-port により ISCP (※) で
用いられるポート番号を変更できます。デフォルト値は 9821 です。環
境変数 NINIX_ISCP_PORT でも指定可能です。

※ ISCP (Inter-Sakura Communication Protocol) は、ninix 固有の通
信プロトコルです。ninix を複数起動した場合に、ゴースト間の会話デー
タや特定ゴースト向けの SSTP リクエストをマスター (最初に起動した 
ninix) とスレーブ (2番目以降の ninix) との間でやりとりするために
用いられます。

ネットワーク更新
- - - - - - - - -

使用中のゴーストがネットワーク更新機能に対応している場合、本体の
操作メニューから「ネットワーク更新」を選択することにより自動的に
ゴーストのデータを最新版に更新することができます。操作メニューの
項目名はゴーストによって変わることがあります (デフォルトは「ネッ
トワーク更新」です)。

ネットワーク更新をコマンドライン上で行なうには ninix-update コマ
ンドを利用します。-l (--list) オプションを付けて実行するとネット
ワーク更新に対応したゴーストの一覧を表示します。例:

  $ ninix-update -l

ネットワーク更新を行なうには、更新したいゴーストのホーム URL と
ディレクトリ名を指定して ninix-update コマンドを実行します。例:

  $ ninix-update http://mayura.jp/update/ ~/.ninix/ghost/mayura

消滅指示
- - - - -

使用中のゴーストが消滅指示に対応している場合、本体の操作メニュー
から「消滅指示」を選択することによりゴーストに消滅を指示してアン
インストールすることができます。操作メニューの項目名はゴーストに
よって変わることがあります (デフォルトは「消滅指示」です)。

「消滅指示」を選択すると確認のダイアログが表示されます。「はい」
を押すとアンインストール処理に進みます。ゴーストが最後のセリフを
しゃべっている途中で sakura 側のサーフィスウィンドウを左クリック
すると消滅指示を取り消して「引き留める」ことができます (unyuu 側
では引き留めることはできません)。セリフをしゃべり終えると本当に
消滅してしまいますので注意して下さい。

設定ダイアログ
- - - - - - - -

右クリックメニューの「設定」を選択すると設定ダイアログが開きます。
設定ダイアログでは、ninix の各種動作を好みに合わせて自由に設定す
ることができます。設定ダイアログには以下の大項目 (タブ) がありま
す。

  おしゃべり  ゴーストの自発トークの設定
  イベント    内部イベントの発生に関する設定
  フォント    バルーン用フォントの設定
  マウス      マウスボタンへの機能の割り当て
  ブラウザ    外部ブラウザの設定
  ヘルパー    ファイル名と外部コマンドの関連付け

o 「おしゃべり」タブ

「おしゃべりの制御」では、ゴーストの自発トークのコントロール方法
を指定します。「ゴースト側で制御する」を選択すると自発トークの制
御を個々のゴーストに組み込まれているプログラムに一任します。ゴー
ストによるおしゃべりの制御がうまく動作しない場合は「ninix 側で制
御する」を選択して下さい。この選択肢を選んだ場合には、さらに「お
しゃべりの頻度」を指定します。

o 「イベント」タブ

ninix の内部では、起動時や終了時、ゴーストの切り替え時などに「イ
ベント」と呼ばれる信号が発生します。ゴーストは通常、これらのイベ
ントに対して何らかの反応を示すようにプログラムされています。「発
生を抑制するイベント」は、イベントに対するゴーストの反応 (おしゃ
べり) を無くしたい場合に利用します。例えば、OnBoot にチェックを
入れると ninix の起動直後のゴーストのおしゃべりを抑制することが
できます。

o 「フォント」タブ

「バルーンフォント」では吹き出し内のテキスト表示に用いるフォント
を指定します。フォントセットを構成する複数のフォントを各行に一つ
ずつ記述します。フォント名の中の %d は実際のフォントサイズに置き
換えられます。デフォルトの設定は以下の通りです。

  -*-helvetica-medium-r-normal--%d-*-*-*-*-*-iso8859-1
  -*-fixed-medium-r-normal--%d-*-*-*-*-*-jisx0208.1983-0

o 「マウス」タブ

「左クリックの動作」と「右クリックの動作」ではマウスの左右のボタ
ンに対して割り当てる機能を指定します。「バルーンの消去」はバルー
ンウィンドウ上でボタンを押してバルーンウィンドウを閉じる動作を表
します。「全ウィンドウを前面へ移動」はサーフィスウィンドウまたは
バルーンウィンドウをクリックして全てのウィンドウを一番上に移動す
る動作を表します。逆に「全ウィンドウを後面へ移動」は全てのウィン
ドウを一番下に移動する動作を表します。

o 「ブラウザ」タブ

「ブラウザ」では ninix から呼び出す外部ブラウザを指定します。コ
マンド中の %s は実際の URL に置き換えられます。デフォルトの設定
は以下の通りです。

  netscape -remote 'openURL(%s,new-window)'

o 「ヘルパー」タブ

「アプリケーション」では Drag & Drop されたファイルに対して起動
する外部コマンドの指定 (ファイルの関連付け) を行います。ファイル
の関連付けは、ファイル名のパタン (正規表現) とコマンド名とから成
るルールの形で表されます。

New ボタンを押すと新規ルールを作成します。Pattern にはファイル名
のパタン、Command にはパタンにマッチしたファイルに対して起動する
外部コマンドを指定します。例えば、拡張子が .nar/.zip/.lzh のファ
イルが Drag & Drop された場合に ninix-install コマンドを起動する
には以下のルールを指定します。コマンド中の %s は実際のファイル名
に置き換えられます。

  Pattern: \.(nar|zip|lzh)$
  Command: ninix-install %s

既存のルールを編集するには Edit ボタンを用います。Delete ボタン
は不要なルールを削除します。Up と Down はルールの順序を変更する
ためのボタンです (先にマッチしたルールが有効になります)。

ウィンドウマネージャの設定
- - - - - - - - - - - - - -

X Window System ではウィンドウに外枠 (タイトルバーやリサイズハン
ドルなど) を付けたりキーボードフォーカスを与えたりするのはウィン
ドウマネージャの仕事ということになっています。何もしなければ他の
アプリケーションと同様に外枠が表示されると思います。また、ninix 
にキーボートフォーカスを取られるとかなりうっとうしいと思います。
ウィンドウマネージャの設定を適宜設定して、以下のアプリケーション
名/ウィンドウ名に対して外枠を非表示にしたりキーボードフォーカス
を与えないようにすることをお勧めします (そのような設定のできない
ウィンドウマネージャでは ninix の使用は辛いかも知れません)。

o プログラム全体を指定する名前
  WM_NAME = "ninix"

o 個々のウィンドウを指定する名前
  WM_CLASS = "ninix.surface.sakura", "Ninix"  (さくら側サーフィス)
  WM_CLASS = "ninix.surface.unyuu", "Ninix"   (うにゅう側サーフィス)
  WM_CLASS = "ninix.balloon.sakura", "Ninix"  (さくら側バルーン)
  WM_CLASS = "ninix.balloon.unyuu", "Ninix"   (うにゅう側バルーン)

[設定例]

o WindowMaker の場合 (バージョン 0.61.1 で確認)
  タイトルバーで右クリック、またはウィンドウ上で Ctrl-Esc を押し
  て「属性」を選択し、以下の項目にチェックを入れます。
  - タイトルバーを表示しない
  - リサイズバーを無効にする
  - ウィンドウ一覧から除外
  - フォーカスしない
  「保存」ボタンを押してウィンドウを閉じ、ninix を再起動します。

o qvwm の場合 (バージョン 1.1.11 で確認)
  ~/.qvwmrc の [Applications] セクションに以下の設定を追加します。
  
  "Ninix"  NO_TITLE, NO_BORDER, NO_FOCUS, NO_TBUTTON

o fvwm2 の場合 (バージョン 2.2.4 で確認)
  ~/.fvwm2rc に以下の設定を追加します。

  Style "Ninix" UsePPosition, ClickToFocus, NoTitle, WindowListSkip, NoHandle

o twm の場合 (XFree86 3.3.6 に付属のバージョンで確認)
  ~/.twmrc に以下の設定を追加します。

  UsePPosition "on"
  NoTitle
  {
    "ninix"
  }

o sawfish の場合 (バージョン 1.0.1 で確認)
  「ウィンドウプロパティ」ダイアログで以下の設定を追加します。
  - 一致ウィンドウ: 名前 ^ninix$
  - フォーカスしない
  - フレームタイプ: なし
  - ウィンドウリストスキップ

  キー入力関連のイベントを有効にしたい場合は、上記の「フォーカス
  しない」を外した上で「フォーカス」の中の「ウィンドウがはじめて
  表示されるときにフォーカス」を無効にします。

  上記の設定が有効にならない場合は以下の手順を試してみて下さい。
  $ rm ~/.sawfish/window-history
  $ sawfish-client -f restart

設定ファイル
- - - - - - -

~/.ninix/fontrc を編集することによりバルーン内で使われるフォント
を変更することができます。デフォルトでは以下のような内容になって
います。

  ------------------------------------------------------------
  # fontrc for ninix
  -*-helvetica-medium-r-normal--%d-*-*-*-*-*-iso8859-1,
  -*-fixed-medium-r-normal--%d-*-*-*-*-*-jisx0208.1983-0
  ------------------------------------------------------------

英文フォントと和文フォントをコンマで区切って記述して下さい。フォ
ントサイズの部分を上記のように %d にしておくと適切なサイズのフォ
ントが使われます (見た目は悪くなりますがフォントサイズを明示的に
指定することも可能です)。1行で書くことも上記のように折り返して書
くこともできます。また、各行の行頭と行末の空白文字は無視されます。
# で始まる行はコメントです (これも無視されます)。

また、~/.ninix/gtkrc を書き換えることにより GUI の見た目を変更す
ることができます。gtkrc の記述方法については割愛します。詳しくは 
GTK+ のマニュアルを参照して下さい。

  GTK+ 1.2 Tutorial (Chapter 23. GTK's rc Files)
  http://www.gtk.org/tutorial/ch-gtkrcfiles.html

利用上の注意 (機能上の主な制限)
-------------------------------

o デフォルトのゴーストが無いため、シェルを選択するとサーフィスだ
  けが切り替わり、ゴースト部分は直前に使用していたものをそのまま
  継続して利用します。ゴーストとシェルの組み合わせによっては奇異
  な印象を受けるかも知れません。

o ゴーストメニューや (ゴースト切り替え時などに表示される) ゴース
  ト固有のせりふなどが無いので、かなり素気ないです。

o COMMUNICATE ウィンドウは (まだ?) ありません。

o その他各種機能が未実装です。はっきり言って「できること」の方が
  少ないです。より詳しい機能制限の一覧は TODO ファイルにあります。
  というか、オリジナルの「何か」をほとんど見ずに作っているので何
  が未実装なのかすらよく分かっていません。「この機能を実装して欲
  しい」という要望があれば考慮します。

o 標準出力にいろいろとデバッグ用メッセージが表示されます。邪魔な
  場合は /dev/null にリダイレクトするなどして下さい。

更新履歴
--------

o バージョン 0.8 (2002年7月12日)
  - 安定版リリース。コードの変更点は無し。

o バージョン 0.7.33 (2002年7月9日)
  [インストーラ]
  - アーカイブに makotob.dll というファイルが含まれていると落ち
    るバグを修正。
  [本体]
  - surfaces.txt のエントリ名とサーフィスエイリアスの定義にゼロ
    パディングされたサーフィス番号を使えるようにした。

o バージョン 0.7.32 (2002年7月3日)
  [本体]
  - base メソッドによるアニメーションの停止時に落ちるバグを修正。
  - overlay メソッドの表示順序を修正。アニメーショングループ番号
    の小さいものから順に描画するようにした。(Thanks to 杉谷さん)
  - 空の (パタンが一つもない) アニメーショングループが定義されて
    いると落ちる問題を修正。
  - ゴースト切替え直後に \s[-1] タグで隠したサーフィスウィンドウ
    が正しく再表示されないことがあるのを修正。
  - 存在しない画像ファイルが指定されていると落ちる問題を修正。
  [美坂]
  - 計算式の処理を追加。システム関数 $calc を実装した。
  - 暗号化辞書 (拡張子 .__1) に対応した。
  - 関数呼び出しの引数中の改行 (および次の行頭の空白) を読み飛ば
    すようにした。
  [里々]
  - 参照名に演算子が含まれていると代入文の構文解析がおかしくなる
    問題を修正。

o バージョン 0.7.31 (2002年6月28日)
  [本体]
  - アニメーション定義の読み込み処理を改良。コンマの前後の空白を
    読み飛ばすようにした。
  - SERIKO/1.2 の runonce のアニメーションがゴースト起動後最初の
    1回しか動いていなかったのを修正。
  - サーフィス復帰時のサーフィス番号に対してエイリアスが効かない
    問題を修正。

o バージョン 0.7.30 (2002年6月28日)
  [ネットワーク更新]
  - URL 中の ~ をエスケープするようにした。
  [本体]
  - SERIKO/1.2 の overlay メソッドを修正。複数のアニメーションが
    動いているときに表示がおかしくなる問題に対処した。

o バージョン 0.7.29 (2002年6月19日)
  [インストーラ]
  - 合成サーフィスのエレメントのファイル名に関する制約を撤廃して
    任意のファイル名を扱えるようにした。
  - install.txt の balloon.directory で指定されたディレクトリが
    存在しない場合に落ちる問題を修正。
  [本体]
  - \![updatebymyself] タグの処理を追加した。
  - 未知のタグおよびメタ文字列があっても文法エラーとせずに処理を
    継続するようにした。

o バージョン 0.7.28 (2002年6月13日)
  [インストーラ]
  - サプリメントのインストール時に落ちる問題を修正。
  [ネットワーク更新]
  - .pna ファイルをダウンロードしないようにした。
  - 日本語ファイル名を Shift_JIS でエンコードしてリクエストする
    ようにした。
  - 404 Not Found などのエラーが起きてもネットワーク更新を継続
    するようにした。(Thanks to にゃーんさん)

o バージョン 0.7.27 (2002年6月6日)
  [インストーラ]
  - エイリアスファイルネーム (ファイル名の別名定義) の処理を変更。
    ファイルを別名のままインストールするようにした。
  - 外部コマンド実行時の引数のエスケープ処理を修正。& や " などの
    特殊記号を含むファイル名を正しく扱えるようにした。
  - 空白を含むディレクトリ名が正しく扱えないバグを修正。
  [ネットワーク更新]
  - ローカルに無いファイルもダウンロードするようにした。
  - delete.txt によるファイルの削除に対応した。
  [里々]
  - スクリプトの最適化処理を追加。スコープが切り替わる直前の一連
    の \n タグを次の同一スコープの先頭にシフトするようにした。
  - 文字列に対する大小比較演算を修正。左辺と右辺が共に数値でない
    場合に限り文字列の長さを比較するようにした。

o バージョン 0.7.26 (2002年5月27日)
  [インストーラ]
  - サブディレクトリに格納された「美坂」辞書ファイルを不正な場所
    にインストールしてしまうバグを修正。
  [本体]
  - 必須サーフィス (0番と10番) の有無の判定処理を修正。画像ファ
    イルだけでなく合成サーフィスも考慮するようにした。
  - エレメント合成の処理を修正。element0 の合成メソッドの指定を
    無視する (overlay とみなす) ようにした。
  - alias.txt 読み込み時のエラー出力に関するバグを修正。
  [美坂]
  - SHIORI/1.0 getaistringrandom を実装した。
  - misaka.ini の propertyhandler エントリの処理を追加した (単に
    読み飛ばす)。
  [里々]
  - SHIORI/1.0 getaistringrandom を実装した。
  - なで反応を実装。変数「＄なでられ反応回数」および「＄なでられ
    持続時間」の処理を追加した。
  - 文字列に対する演算処理を実装した (−, ×, ＝＝, ！＝, ＜, ＞,
    ＜＝, ＞＝)。
  - replace.txt および replace_after.txt による文字列置換の結果
    が文字化けする問題を修正。日本語に対応した string.replace()
    の代替コードを用意した。

o バージョン 0.7.25 (2002年5月23日)
  [本体]
  - 環境変数 DISPLAY が未定義の場合、エラーを出力して終了するよ
    うにした。(Thanks to いわもとさん)
  - エレメント合成のエラー処理を改良。また、ゼロパディングされた
    サーフィス番号を持つエレメントが正しく扱えない問題を修正した。

o バージョン 0.7.24 (2002年5月20日)
  - Python 2.2 以降の rfc822 モジュールの下位非互換性に対処した。
  [インストーラ]
  - バルーンのインストール先ディレクトリ名を小文字に変換し忘れて
    いた問題を修正。(Thanks to 杉谷さん)
  [本体]
  - surfaces.txt の処理を改良して (sakura|kero).surface.alias セ
    クションを正しく読むようにした。また、無意味な行をエラー扱い
    せず単に読み飛ばすようにした。

o バージョン 0.7.23 (2002年5月16日)
  - ネットワーク更新で一部のデータファイルのダウンロードに失敗す
    るバグを修正。

o バージョン 0.7.22 (2002年5月15日)
  [インストーラ]
  - データファイル名を小文字に変換してインストールするようにした。
  - 既存のデータファイル名を一括変換する -L (--lower) オプション
    を付けた (前出の「インストーラ」の項を参照)。
  - -g (--ghost) オプションと -s (--shell) オプションが正しく動作
    しなくなっていたのを修正。
  [本体]
  - \_a タグの処理を追加した (単に読み飛ばす)。
  [華和梨]
  - 辞書ファイル名を小文字に変換して読み書きするようにした。
  [美坂]
  - 辞書ファイル名を小文字に変換して読み書きするようにした。

o バージョン 0.7.21 (2002年5月12日)
  - Python で書かれた栞モジュール (shiori.py) を扱えるようにした
    (doc/extension.txt を参照)。
  [本体]
  - 以下の場合にサーフィスを強制的に0番/10番に戻さないようにした。
    ・URL を選択したとき (リンクを辿ったとき)
    ・OnChoiceSelect イベントの反応が未定義のとき
    ・OnChoiceTimeout イベントの反応が未定義のとき
    ・バルーンを閉じてスクリプトを中断したとき
    ・右クリックメニューを開いてスクリプトを中断したとき
  - データファイル読み込み時のエラーメッセージを標準エラーに出力
    するようにした。

o バージョン 0.7.20 (2002年5月8日)
  - INSTALL/1.4 (シェルの追加インストール) に対応した。
  - ninix-update コマンドの -s (--script) オプションを修正。生成
    されたスクリプトの実行時にゴーストの情報を表示するようにした。
  - Python 2.2 でインストールできない (config/Makefile.pre.in が
    無い) 問題に対処。Distutils を用いて拡張モジュールをコンパイ
    ルするようにした。
  [本体]
  - \![change,ghost] タグの処理を追加した。
  - ゼロパディングされたサーフィス番号に対応した (例: "0010" と
    "10" は等価)。
  - ゴーストが一つしかインストールされていない場合は「消滅指示」
    ボタンを押せないようにした。
  [華和梨]
  - ダブルクォートで囲まれた文字列の中で \\ がエスケープされた円
    マークとして扱われる問題を修正。
  [美坂]
  - 辞書読み込み時のエラーメッセージを表示しないようにした。
  - 関数の引数に括弧付きのタグの入った文字列を与えると文法エラー
    になる問題を修正。
  [里々]
  - 辞書読み込み時のエラーメッセージを表示しないようにした。
  - 以下のイベントに対する反応が未定義の場合、対応する「＊文」に
    リダイレクトするようにした。
    ・OnFirstBoot        → 初回
    ・OnBoot             → 起動
    ・OnClose            → 終了
    ・OnGhostChanging    → 他のゴーストへ変更
    ・OnGhostChanged     → 他のゴーストから変更
    ・OnVanishSelecting  → 消滅指示
    ・OnVanishCancel     → 消滅撤回
    ・OnVanishSelected   → 消滅決定
    ・OnVanishButtonHold → 消滅中断
  [偽栞]
  - メタ文字列 %rand および %ref の後の数字が抜けていると落ちる
    問題を修正。

o バージョン 0.7.19 (2002年4月30日)
  - ninix-update コマンドを「美坂」と「里々」に対応させるのを忘
    れていたので修正。
  [里々]
  - OnChoiceSelect イベント反応が未定義の場合、Reference0 で指定
    された「＊文」を呼び出すようにした。(Thanks to やぎさん)
  - 「＠単語群」の置換履歴を呼び出し元の「＊文」と共有するように
    した。(Thanks to やぎさん)

o バージョン 0.7.18 (2002年4月27日)
  - 汎用 shiori.dll「里々」互換モジュールを搭載した。
  [本体]
  - ネットワーク更新時に DLL ファイルをダウンロードしないように
    した。 
  - surfaces.txt と alias.txt の解析処理を強化。エントリ名と '{'
    の間の空行を読み飛ばし、全角スペースを無視するようにした。
  - "-2" による全アニメーションの終了 (SERIKO/1.4 による同期制御)
    が起こると落ちるバグを修正。

o バージョン 0.7.17 (2002年4月22日)
  [インストーラ]
  - デフォルトのアーカイブディレクトリ (ダウンロードしたファイル
    を格納するディレクトリ) を ~/.ninix/archive に変更した。また、
    環境変数 NINIX_ARCHIVE および -A (--arcdir) オプションにより
    アーカイブディレクトリを指定できるようにした。
  [本体]
  - 右クリックメニューの一部が縦に伸びすぎて画面からはみ出してし
    まう問題に対処。
  [美坂]
  - 添字付きの変数参照に対応した。
  - システム関数 $count を実装した。
  - エラー回復処理を若干追加。
  - #_Common に関する勘違いバグを修正。(Thanks to すかさん)
  - システム関数 $copy コマンドの非互換性を修正。辞書変数の条件
    部を無視するようにした。

o バージョン 0.7.16 (2002年4月12日)
  - README ファイルに消滅指示の説明を追加した。
  [本体]
  - 合成サーフィスに対応した。
  - surfaces.txt の読み込み方法を修正。不明なエントリがあっても
    最後までファイルを読むようにした。また、# と // で始まる行を
    コメントと見なして読み飛ばすようにした。
  [美坂]
  - $_OnRandomTalk と $_talkinterval による自動ランダムトークを
    実装した。

o バージョン 0.7.15 (2002年4月11日)
  [本体]
  - ネットワーク更新ボタンの名前をゴーストが指定したものに変更す
    るようにした。
  - 更新ファイル数が0のときは OnUpdateReady イベントを発生しない
    ようにした。
  - \![open,teachbox] タグの処理を追加。OnTeachStart イベントを
    発生するようにした。
  - \![open,inputbox] の第4引数 (入力待ち時間) を省略可能にした。
  [華和梨]
  - SHIORI/2.4 (学習機能) を実装した。
  - ゴーストの起動時と終了時にそれぞれ system.OnLoad エントリと
    system.OnUnload エントリを呼ぶようにした。
  - entry コマンドの非互換性を修正。オプションの第2引数を渡せる
    ようにした。
  - save コマンドの出力ファイル内のコメントが Shift_JIS ではなく
    EUC-JP で出力される問題を修正。
  [美坂]
  - ゴーストの終了時に変数を自動保存するようにした。
  - 値が空文字列の変数を自動保存しないようにした。

o バージョン 0.7.14 (2002年4月10日)
  [本体]
  - 消滅指示機能を実装した。(Thanks to 杉谷さん)
  - コミュニケーションウィンドウのウィンドウタイプをダイアログに
    固定。-p オプションの有無を反映しないようにした。

o バージョン 0.7.13 (2002年4月4日)
  [本体]
  - \![open,inputbox] タグの処理を追加。OnUserInput イベントを発
    生するようにした。(Thanks to 杉谷さん)
  - 重なりフラグの判定方法を修正した。(Thanks to 杉谷さん)
  - 再起動するとマウスボタンの設定がリセットされるバグを修正した。
    (Thanks to みながわさん)
  [インストーラ]
  - コミュニケーションウィンドウ用の画像ファイル (balloonc?) を
    インストールするようにした。
  [偽栞]
  - \ns_rt タグおよびメタ文字列 %ver の処理を追加した。
  - スクリプト中のメタ文字列 %jpentry, %platform, %move, %mikire,
    および %kasanari が正しく展開されないバグを修正。

o バージョン 0.7.12 (2002年3月27日)
  [本体]
  - SERIKO/1.4 (アニメーションの同期制御) を実装した。
  - グレイスケール形式の PNG 画像に対応した。
  - 表示ウェイトの設定が ~/.ninix/preferences に保存されないバグ
    を修正。(Thanks to TOW さん)
  - ゴーストを切り替えても見切れフラグと重なりフラグがリセットさ
    れないバグを修正。
  - surfaces.txt の中の (sakura|kero).surface.alias セクションを
    読み飛ばすようにした。
  [美坂]
  - 変数の保存/復帰を実装。システム関数 $backup の処理を追加した。
  - システム関数 $adjustprefix を実装した。
  - 字句解析エラーが発生すると場合によっては落ちる問題を修正。
  - 未定義の配列に対して $pop と $popmatchl を呼び出すと落ちるバ
    グを修正。
  [偽栞]
  - UTF-8 形式の辞書ファイルに対応した。
  - \ns_tn タグの処理を追加した。
  [華和梨]
  - 辞書読み込み時に文字コード変換エラーが起きて落ちる問題を修正。

o バージョン 0.7.11 (2002年3月20日)
  [本体]
  - 見切れフラグと重なりフラグに対応した。(Thanks to 杉谷さん)
  [偽栞]
  - メタ文字列 %mikire および %kasanari の処理を追加した。
  - 見切れ/重なり関連の内部イベントを発生するようにした。

o バージョン 0.7.10 (2002年3月18日)
  - README ファイルに設定ダイアログの説明を追加した。
  - README ファイルに twm と sawfish の設定例、および -p オプショ
    ンに関する注釈を追加した。(Thanks to 杉谷さん)
  [本体]
  - OnFileDropping, OnFileDropped, OnDiretoryDrop の各イベントを
    発生するようにした。(Thanks to 杉谷さん)
  - 設定ダイアログの「ヘルパー」タブを「ブラウザ」に改名。新たに
    ファイル名とコマンドの関連付けを行う「ヘルパー」タブを設けた。
  - \![raise] タグと \![open,browser] タグの処理を追加した。
  [華和梨]
  - get コマンドのバグを修正。(Thanks to 熊田さん)
  [偽栞]
  - おしゃべり頻度の設定を保存 (ゴースト起動時に復帰) するように
    した。
  [美坂]
  - システム関数 $substringw, $substringwl, $substringwr を実装
    した。
  - 辞書変数と同名のユーザ変数を参照できないようにした (辞書変数
    の方が優先される)。

o バージョン 0.7.9 (2002年3月12日)
  [本体]
  - OnMouseClick, OnMouseWheel, OnKeyPress の各イベントを発生す
    るようにした。(Thanks to 杉谷さん)
  - 設定ダイアログの「イベント」タブの OnFirstBoot ボタンを削除。
    OnBoot ボタンで両方の設定を兼ねるようにした。
  [華和梨]
  - 以下のインラインスクリプトコマンドの非互換性を修正。引数が非
    数値だった場合、0が与えられたものとして実行するようにした。
    ・chr コマンドの第1引数
    ・get コマンドの第2引数
    ・inc コマンドおよび dec コマンドの第1〜第3引数
    ・rand コマンドの第1引数
    ・test コマンドの演算子 -eq, -ne, -gt, -ge, -lt, -le の両辺
  - 場合によっては負の値が不正な数値とみなされるというバグを修正。
  - set コマンドで定義した変数名を複合エントリ名 (& で複数連結し
    たエントリ名) の中で指定すると正しく動作しない問題を修正。
  - 辞書読み込み時のエラーメッセージをすこし改良。エラー発生位置
    (行番号とファイル名) を表示するようにした。

o バージョン 0.7.8 (2002年3月11日)
  [本体]
  - 選択カーソルがスクロールボタンと SSTP マーカを上書きしてしま
    う問題を修正。(Thanks to 杉谷さん)
  - 専用バルーンを持つゴーストから専用バルーンを持たないゴースト
    に切り替えた場合、最後に用いていた汎用バルーンに戻すようにし
    た。
  - スクロールボタンをダブルクリックしても OnMouseDoubleClick イ
    ベントを発生しないようにした。
  - OnMouseDoubleClick イベントに対する反応がなかった場合のデフォ
    ルト反応 (ゴーストメニューが無いという旨のセリフ) を削除した。
  [偽栞]
  - メタ文字列 %move の処理を追加した。
  [美坂]
  - $getmousemovecount の処理を調整。なで反応の感度を上げた。
  - スクリプト中に # が含まれていると実行時エラーで落ちる問題を
    修正。

o バージョン 0.7.7 (2002年3月8日)
  [本体]
  - OnMouseMove イベントを発生するようにした (Thanks to 杉谷さん)。
    左ボタンを押したままマウスを上下左右に振ることで同イベントを
    発生させることができる。また、これに合わせてサーフィスウィン
    ドウの移動を中ボタンに変更した。
  - OnFirstBoot イベントを発生するようにした (Thanks to 杉谷さん)。
    今のところ、同じゴーストでもシェルが異なれば同イベントが発生
    する。
  [美坂]
  - システム関数 $getmousemovecount および $resetmousemovecount
    を実装した。
  - 比較演算子 != が処理されない問題を修正 (実装し忘れていた)。

o バージョン 0.7.6 (2002年3月7日)
  [美坂]
  - 以下のシステム関数を実装した: $substringfirst, $substringlast,
    $hiraganacase, $isequallastandfirst, $index, $insentece。
  [本体]
  - タイムクリティカルセッション中に \+ タグまたは \_+ タグでゴー
    ストを切り替えると右クリックメニューが出せなくなる問題を修正。
    (Thanks to 杉谷さん)

o バージョン 0.7.5 (2002年3月5日)
  - ninix-install コマンドが Python 1.5.2 で動かない状態になって
    いたのを修正。(Thanks to いわもとさん)

o バージョン 0.7.4 (2002年3月4日)
  - overlay メソッドをさらに修正。再描画の範囲を必要最小限にして
    ちらつきを抑えるようにした。

o バージョン 0.7.3 (2002年3月4日)
  - SERIKO/1.2 の overlay メソッドを修正。部分画像を重ね合わせる
    前にベースとなるサーフィスを透明部分 (マスク) も含めて再描画
    するようにした。(Thanks to 杉谷さん)
  - ninix-install コマンドを改良。同名のデータを削除する前に確認
    メッセージを表示する -i (--interactive) オプションを追加した。

o バージョン 0.7.2 (2002年2月27日)
  - 標準 shiori.dll「美坂」互換モジュールを実装した。
  - 空白文字を含むディレクトリ名があると ninix-install コマンド
    が異常終了する問題を修正。(Thanks to 杉谷さん)

o バージョン 0.7.1 (2002年2月22日)
  - アニメーション機能 (SERIKO/1.2) を実装。move, base, overlay
    の各メソッドに対応。overlayfast は overlay と等価。\i タグの
    処理も追加。
  - 新形式の \q タグの扱いを修正。直後に \n タグがあれば読み飛ば
    すようにした。

o バージョン 0.7 (2002年2月18日)
  - ローカル以外からの SSTP リクエストにおいて \j[], \-, \+, \_+ 
    の各タグを使用できないようにした。これらのタグを含むスクリプ
    トを受け取ると 400 Bad Request を返す。
  - OnMinuteChange イベントと OnSecondChange イベントの cantalk
    フラグに対応した。
  - \q タグの新しい文法 (\q[text,id] の形式) に対応した。従来の
    文法 (\q?[id][text] の形式) も受け付ける。
  - \! タグと \_n タグの処理を追加した (単に読み飛ばす)。
  - surfaces.txt に対応した。
  - サーフィスウィンドウの描画方法を変更。ダブルバッファを用いて
    再描画の実行効率を上げた (アニメーション機能実装への布石)。

o バージョン 0.6 (2002年1月5日)
  - 安定版リリース。コードの変更点は無し。

o バージョン 0.5.29 (2001年12月26日)
  [本体]
  - 以下の条件下では右クリックメニューのゴースト/シェル/バルーン
    変更、ネットワーク更新、再読み込み、バージョン情報、終了の各
    機能を利用できないようにした (実行しようとすると警告音が鳴る)。
    ・タイムクリティカルセッション中
    ・ネットワーク更新中
    ・待ち行列に未処理のイベントが残っている場合
  - 一時停止機能を削除した。
  - 右クリックメニューの構成を変更。すべての項目がサブメニューの
    下に入ったのでメニューを開きっぱなしにすることができるように
    なった。
  - おしゃべりの制御の初期値を変更。ゴーストによる制御をデフォル
    トにした。また、おしゃべり頻度の設定を右クリックメニューから
    設定ダイアログに移した。

o バージョン 0.5.28 (2001年12月19日)
  [インストーラ]
  - ファイルダウンロード時にアーカイバのテスト機能を用いて内容を
    検証するようにした。Content-type: ヘッダのチェックは廃止。

o バージョン 0.5.27 (2001年12月14日)
  - libpng のバージョンによっては modules/_image.c のコンパイル
    に失敗する問題を修正。(Thanks to shiena さん)
  [本体]
  - 日本語文字の2バイト目が欠けていると落ちるバグを修正。

o バージョン 0.5.26 (2001年12月11日)
  [本体]
  - 右クリックメニューに「使用率グラフ」を追加した。
  [華和梨]
  - save コマンドが正しくロードできないファイルを生成してしまう
    ことがある問題を修正。

o バージョン 0.5.25 (2001年12月9日)
  [本体]
  - 起動するブラウザを設定ダイアログで変更できるようにした。
  [華和梨]
  - AI 系のメタ文字列 (%ms, %dms など) が空文字列に展開されるバ
    グを修正。(Thanks to TOW さん)

o バージョン 0.5.24 (2001年12月4日)
  [本体]
  - 本体終了時にプラグインに SIGHUP シグナルを送るようにした。
  [華和梨]
  - date コマンドの書式指定文字列 %n, %N, %r, %J に対応した。

o バージョン 0.5.23 (2001年12月2日)
  [本体]
  - ネットワーク更新機能のプロキシ対応に関するバグを修正。
    (Thanks to さくらのにえさん)
  [華和梨]
  - 複合エントリ名 (& で複数連結したエントリ名) に対応。

o バージョン 0.5.22 (2001年11月26日)
  [本体]
  - \n タグの引数 (\n[half] など) を読み飛ばすようにした。
  [華和梨]
  - バージョン 0.5.3 での空のステートメントへの対処が適切でなかっ
    たのを修正。(Thanks to 長坂さん)

o バージョン 0.5.21 (2001年11月24日)
  [本体]
  - ネットワーク更新機能をプロキシ対応にした。

o バージョン 0.5.20 (2001年11月15日)
  [偽栞]
  - チェインの実装に致命的なバグがあったので取り急ぎ修正。

o バージョン 0.5.19 (2001年11月15日)
  [本体]
  - ネットワーク更新時に updates2.dau の読み込みに失敗すると落ち
    るバグを修正。(Thanks to さくらのにえさん)
  [偽栞]
  - チェインを実装した。
  - \set[] コマンドとメタ文字列 %get[] の処理を以下のように修正:
    ・四則演算のオペランドとして文字列を与えると演算結果は文字列
      になる (例: %week+256 → "sun+256")。
    ・0で除算した場合も演算結果は文字列になる (例: x/0 → "x/0")。
    ・未定義の変数を参照した場合の値は文字列 "?" とする。
  - 変数が辞書定義コマンドに展開されてしまう (例: %ms が \ms に
    展開される) バグを修正。

o バージョン 0.5.18 (2001年11月11日)
  - ninix-install コマンドで拡張子 .nar のアーカイブファイルを受
    け付けるようにした。
  - ninix-update コマンドが内部データ構造の変更により動かなくなっ
    ていたのを修正。(Thanks to さくらのにえさん)
  [本体]
  - 動作中にシステム時計が変わっても起動時間が負の値にならないよ
    うにした。
  [偽栞]
  - \set[] コマンドおよびメタ文字列 %get[] を実装した。
  - メタ文字列 %year, %rand[], %surf0, %surf1 に対応した。
  - 単語定義中のコンマ (,) のエスケープに対応した。
  - .txt/.dtx 以外の拡張子のファイルを辞書として読み込もうとする
    バグを修正。
  - C言語形式のコメントの扱いに関するバグを修正。

o バージョン 0.5.17 (2001年11月10日)
  [本体]
  - エイリアスネーム (サーフィスの別名) に対応した。
  [インストーラ]
  - プラグインを URL 指定でインストールするとアーカイブファイル
    も一緒にインストールされてしまうバグを修正。
  [偽栞]
  - 品詞指定なしの分類付き単語登録が文法エラーと見なされてすべて
    無効になっていたのを修正。

o バージョン 0.5.16 (2001年11月10日)
  [本体]
  - SSTP EXECUTE/1.3 (Quiet/Restore) を実装した。
  - スクリプトの実行開始前にサーフィスを0番と10番に戻さないよう
    にした (一つ前のスクリプトの終了時のサーフィスのまま新しい
    スクリプトの実行を開始する)。
  - \q タグの表示方法を修正。余計な改行を入れないようにした。
  - "..." で省略された選択肢文字列が SSTP クライアントに返される
    バグを修正。
  [インストーラ]
  - -R オプションが認識できない問題を修正。

o バージョン 0.5.15 (2001年11月6日)
  [本体]
  - プラグイン機能を実装した。仕様については doc/extension.txt
    を参照。
  - \&, \_m, \_u の各タグの処理を追加した。
  - OnSurfaceRestore イベントの発生までの時間を20〜30秒に縮めた。
  [ネットワーク更新]
  - OnUpdateReady イベントを発生するようにした。
  - OnUpdate.OnDownloadBegin イベントの発生タイミングを修正した。
    updates2.dau ファイルについては同イベントを発生しないように
    変更。また、Reference1 (通し番号) と Reference2 (更新ファイ
    ル数) を付けるようにした。
  [インストーラ]
  - ファイル種別の自動判定がうまく機能していなかった問題を修正。

o バージョン 0.5.14 (2001年11月5日)
  [本体]
  - OnSurfaceChange イベントおよび OnSurfaceRestore イベントを発
    生するようにした。
  - 右クリックメニューを開いて SSTP クライアントからのスクリプト
    を break したらスクリプトの表示も中止するように修正。
  - \q タグの後ろの文字が選択肢の行につながってしまうバグを修正。
  [偽栞]
  - 自発トークのタイミングを修正。イベント反応が見つかったら自発
    トークのタイマーをリセットするようにした。
  - 条件式の中の全角スペースを半角スペースとみなすようにした。

o バージョン 0.5.13 (2001年11月3日)
  [本体]
  - SEND SSTP/1.3 を実装した。オリジナルの仕様との違いについては
    doc/extension.txt を参照。また、\m[] タグの処理を追加した。
  - SSTP の受信処理を変更。受信キューが空で再生中のスクリプトが
    タイムクリティカルセッションでない場合、再生中のスクリプトを
    中断してすぐに次のスクリプトの再生を始めるようにした。
  - 受信スクリプトの再生間隔を0秒にした (従来は3秒間のウェイトを
    置いていた)。
  - \h, \u, \0, \1 の各タグの処理を修正。非表示状態のバルーンを
    表示する効果を無くした。
  - 両方のサーフィスウィンドウですべてのサーフィス画像を表示でき
    るようにした。分身ネタも可能。また、サーフィス画像のサイズが
    まちまちだった場合の表示位置の計算方法を修正した。
  - シェル利用時に %selfname や %keroname の値がおかしくなる問題
    を修正。

o バージョン 0.5.12 (2001年11月2日)
  [本体]
  - SSTP を拡張して独自リクエスト EXECUTE/1.5 (Reload コマンド) 
    を追加。SSTP を介して外部から本体にデータの再読み込みを指示
    できるようにした。
  - 再読み込みの開始前と終了後にそれぞれ OnNinixReloading イベン
    トと OnNinixReloaded イベントを発生するようにした。
  - 右クリックメニューの「再読み込み」が意味もなくチェックメニュー
    アイテムになっていたのを修正。
  [インストーラ]
  - インストール後にローカルの SSTP サーバにデータの再読み込みを
    指示する -r (--reload) オプションを追加した。これに合わせて
    --rcfiles オプションの短縮形を -R に変更。また、SSTP サーバ
    のポート番号を指定する -p (--port) オプションを追加。

o バージョン 0.5.11 (2001年10月31日)
  [本体]
  - \-, \+, \_+ の各タグの処理を追加した。
  - 右クリックメニューに「再読み込み」を追加。本体の動作中にイン
    ストールしたデータやネットワーク更新で新しくなったデータを再
    起動せずに読み込めるようにした。

o バージョン 0.5.10 (2001年10月21日)
  - Makefile を修正。lib/ninix/netlib.py の中のコマンド名をイン
    ストール時に書き換えるようにした。(Thanks to shiena さん)
  [本体]
  - SSTP NOTIFY/1.0 および NOTIFY/1.1 に対応した。

o バージョン 0.5.9 (2001年10月19日)
  [本体]
  - IfGhost: ヘッダのない SSTP SEND/1.4 が不正なメッセージと見な
    される問題を修正。
  - 前回終了時にシェルを使っていた場合に再起動できなくなる問題を
    修正。(Thanks to shiena さん)
  - ネットワーク更新機能を修正。ホスト名の解決中に本体が固まらな
    いないようにした。また、updates2.dau の URL がリダイレクトさ
    れた場合は残りのファイルも同じリダイレクト先ホストからダウン
    ロードするようにした。
  - 前回終了時にサーフィスを持たないゴーストを使っていた場合に正
    しく復帰できない (別のゴーストが起動する) 問題を修正。
  [インストーラ]
  - アーカイブファイル名に加えて URL とリストファイルを指定でき
    るようにした。
  - 0.5.8 で「華和梨」互換モジュールに施した変更に対応させるのを
    忘れていたので修正。(Thanks to shiena さん)

o バージョン 0.5.8 (2001年10月17日)
  [本体]
  - SSTP SEND/1.4 に対応した。今のところゴーストの allowembryo
    (allowsakura) の値は無視する。
  - \s[-1] タグと \b[-1] タグの処理を追加した。
  [華和梨]
  - kawari.ini の set エントリと include エントリに対応。
  - security エントリを読み飛ばすように修正。
  - get, size, textload, tolower, toupper の各インラインスクリプ
    トコマンドを実装。
  [偽栞]
  - ゴースト側でおしゃべりを制御できるようにした。
  - \ns_cr, \ns_st[], \ns_jp[] の各タグと %jpentry, %plathome
    (%platform), %ns_st の各メタ文字列/環境変数の処理を追加した。
  - 偽栞内部イベント OnNSRandomTalk および OnNSJumpEntry を発生
    するようにした。

o バージョン 0.5.7 (2001年10月17日)
  [本体]
  - 設定ダイアログに Apply ボタンを付けた。設定ダイアログが開い
    ている間はポップアップメニューを出せないようにした。
    (Thanks to shiena さん)
  - ユーザ毎の設定ファイルを格納するディレクトリをコマンドライン
    オプション -U (--userdir) と環境変数 NINIX_USER で指定できる
    ようにした。インストーラも同様に改良。(Thanks to 清木さん)
  - 衝突領域の処理を修正。redo 仕様の衝突領域の定義に対応した。

o バージョン 0.5.6 (2001年10月15日)
  - ninix-update コマンド (コマンドライン版のネットワーク更新プ
    ログラム) を用意した。
  [本体]
  - 設定ダイアログを追加した。
  - おしゃべりの制御をゴースト任せにするオプションを追加した。
  - 発行を抑制するイベントを指定できるようにした。
  - マウスボタン押下時の振舞いを変更できるようにした。
  [華和梨]
  - pirocall, shift, unshift, push, pop, chr の各インラインスク
    リプトコマンドを実装。
  - ローカルスクリプトファイル ("[SAKURA]" という行で始まる辞書
    ファイル) の読み込みに対応。

o バージョン 0.5.5 (2001年10月12日)
  [本体]
  - OnGhostChanging, OnShellChanging, OnClose の各イベントを発生
    するようにした。ブレイク可能なスクリプトの場合はバルーン上で
    右クリックすることにより処理を中断することができる。

o バージョン 0.5.4 (2001年10月9日)
  [本体]
  - ネットワーク更新機能を修正。updates2.dau に列挙されているファ
    イル名のうち、(install.txt と thumbnail.png 以外の) ディレク
    トリ名を含まないファイルは ghost/master ディレクトリ配下にあ
    るものと見なすようにした。(Thanks to さくらのにえさん)
  [インストーラ]
  - アーカイブファイル展開後の find コマンドによるパーミッション
    の変更がうまく動いていなかったのを修正。
  [偽栞]
  - メタ文字列 %ref0 〜 %ref7 の展開処理を実装。

o バージョン 0.5.3 (2001年10月8日)
  [本体]
  - ネットワーク更新機能を実装した。ただし、今のところ以下の制約
    がある:
    ・更新されたファイルを読み込むには再起動が必要。
    ・ローカルディスク上に無いファイルはダウンロードしない。
    ・ファイル名のエイリアスに対応していない。
  - OnGhostChanged イベントおよび OnShellChanged イベントを発生
    するようにした。
  - -H (--home) オプションを指定しても ~/.ninix/preferences が
    読み込まれるバグを修正。(Thanks to さくらのにえさん)
  [華和梨]
  - マルチステートメントの中に空のステートメントがあると落ちる
    バグを修正。(Thanks to さくらのにえさん)
  [偽栞]
  - 辞書定義コマンド \id に対応。

o バージョン 0.5.2 (2001年10月5日)
  - Makefile を修正。RPM 等のパッケージを作る際の仮インストール
    先 (DESTDIR) を指定できるようにした。
  [華和梨]
  - 展開する文の中に ${} (エントリ名が空の参照) があると落ちる問
    題を修正。
  [MAKOTO]
  - 選択肢が無い場合にエスケープされた特殊文字がそのまま展開結果
    に出てしまうバグを修正。

o バージョン 0.5.1 (2001年10月3日)
  [インストーラ]
  - サプリメントの追加方法を変更。サーフィスセット (surface.txt
    付きの inverse 用サーフィスデータ) を持つゴーストおよびシェ
    ルはサプリメントの追加対象から外すようにした。
  - サプリメントの追加対象が複数見つかった場合に望みの追加対象を
    指定するための -S (--supplement) オプションを追加した。
  - サプリメントに対して -s (--shell) オプションを指定できるよう
    にした。
  [華和梨]
  - kawari.ini のエラー処理を修正。randomseed と debug の二つの
    エントリは読み飛ばすようにした。

o バージョン 0.5 (2001年10月3日)
  [本体]
  - redo 仕様に対応。\0 タグと \1 タグの処理を追加した。
  - PNG 画像を直接読み込めるようにした。
  - ゴーストおよびシェルに付随するバルーンを普通のバルーンと同様
    に選択して利用できるようにした。
  - \s[] タグでアクティブでないスコープのサーフィスを変更できて
    しまうバグを修正。(Thanks to 清木さん)
  - 括弧なしの \s タグと \b タグの処理を修正。例えば、"\s123" は
    "\s[1]23" と解釈する。また、"\u…\s1…" は "\u…\s[11]…" と
    解釈する。
  [インストーラ]
  - redo 仕様に対応した。inverse 仕様のデータもインストール可能。
  - PNG 画像を XPM 形式に変換せずにインストールするようにした。
  - XPM 形式に変換してインストールするための -x (--xpm) オプショ
    ンを追加。
  [pngtoxpm]
  - PNG 画像の処理に用いているハッシュテーブルを自前で実装。GLib
    への依存を無くした。
  [華和梨]
  - `\' でエスケープされた文字を含む文字列の構文解析と評価に関す
    るバグを修正。
  [偽栞]
  - \d, \k, 分類付き単語登録に対応。
  - 継続行に対応。
  - C/C++ 形式のコメントに対応。

o バージョン 0.4 (2001年9月25日)
  - 安定版リリース。コードの変更点は無し。

o バージョン 0.3.6 (2001年9月18日)
  - 1023番以下のポート番号をオプションで指定できないようにした。
  - 本体起動時のソケット関連のエラーメッセージを改良。
  - 「華和梨」互換モジュールを修正。マルチステートメントの戻り値
    を空白文字ではなく空文字列でつなぐように直した。

o バージョン 0.3.5 (2001年9月3日)
  - Makefile の不具合を修正。(Thanks to shiena さん)
  [本体]
  - コマンドラインオプション --sstp-port を追加。また、環境変数
    NINIX_SSTP_PORT を参照するようにした。
  - コマンドラインオプション --iscp-port を追加。また、環境変数
    NINIX_ISCP_PORT を参照するようにした。
  [インストーラ]
  - 日本語のファイル名 (ディレクトリ名) を含むアーカイブをインス
    トールできるようにした。
  - バルーン付きのゴースト/シェルをきちんとサポートした (ずっと
    前に対応したつもりだったが実は動いていなかった)。

o バージョン 0.3.4 (2001年8月28日)
  - バルーンを一度も表示していない状態で SSTP メッセージを受信す
    ると落ちるバグを修正。(Thanks to 清木さん)
  - pngtoxpm をすこし修正。コンパイル時に警告が出ないようにした。
    また、リンカフラグに -lm を追加した。
  - 起動スクリプト (ninix, ninix-install) 内の環境変数の設定方法
    を変更した。

o バージョン 0.3.3 (2001年8月21日)
  - \b[] タグ (バルーンサイズ変更) の処理を追加。
  - SEND SSTP/1.2 を受信すると、それ以降メニュー等の選択肢が反応
    しなくなるバグを修正。
  - 今さらながら %friendname をサポート。

o バージョン 0.3.2 (2001年8月15日)
  [本体]
  - OnMouseDoubleClick イベントと OnChoiceSelect イベントを発生
    するようにした。サーフィスクリックの当たり判定も実装。
  - 致命的なインラインスクリプトエラーが頻発するので、とりあえず 
    OnSecondChange イベントの発生を止めることにした。
  - \a タグ、\_e タグ、\j[] タグの処理を追加した。
  - %exh と %et の値の計算方法を変更。%exh には単位を付けないよ
    うにした。
  - 右クリックによる表示の中断でエラーが起こる問題を修正。
  - OnChoiceTimeout イベントに反応しないゴーストの場合、最初のタ
    イムアウト以降何もしゃべらなくなるというバグを修正。
  [華和梨]
  - インラインスクリプトコマンドを補完。pirocall, urllist, help,
    ver, searchghost 以外の Phase 6.2 のすべてのコマンを実装。
  - expr コマンドの中の閉じ括弧がクオートを必要とする仕様 (!) に
    暫定対応。
  - index コマンドの処理内容を勘違いしていたので修正。
  - かなり前から古い形式の「華和梨」辞書エントリ名が使えなくなっ
    ていた問題を修正。
  [偽栞]
  - 条件付きイベントの処理を補完。文字列のみの条件に対応 (こうい
    う実装でいいのかな?)。
  - \ns_ce タグと \ns_st[?] タグに対する処理を追加。現在は単に読
    み飛ばすだけ。

o バージョン 0.3.1 (2001年8月13日)
  [本体]
  - 「華和梨」互換モジュールを大幅に拡張。インラインスクリプトの
    処理系を実装した。
  - 「偽栞」互換モジュールに条件付きイベントの処理系を加えた。
  - GUI の見た目を ~/.ninix/gtkrc で変更できるようにした。戯れに
    ポップアップメニューの背景色をピンクにしてみたり。
  - バルーン内で使われるフォントを ~/.ninix/fontrc で指定できる
    ようにした。
  - もしあればゴーストに組み込まれた起動メッセージを表示するよう
    にした。なければ従来通りバージョン情報を表示する。
  - %exh と %et の意味を取り違えていたので修正。
  [インストーラ]
  - 設定ファイル (gtkrc, fontrc) を ~/.ninix にインストールする
    ようにした。既にファイルが存在したら何もしない。
  - -r (--rcfiles) オプションを追加。既に設定ファイルがあっても
    上書きインストールする。
  - シェルなしゴーストをインストールできるようにした (デフォルト
    ゴーストへの布石;-)。

o バージョン 0.3 (2001年7月31日)
  - 汎用 shiori.dll「偽栞」互換モジュールをとりあえず搭載。まだ
    まだ未実装の機能多数。辞書の復号化の方法を公開していただいた
    くまくん（＞ｖ＜）さんに感謝。
  - 「華和梨」と「偽栞」の両方に対応するように各モジュールを修正。

o バージョン 0.2 (2001年7月17日)
  - 安定版リリース。コードの変更点は無し。

o バージョン 0.1.13 (2001年7月13日)
  - スクロールした場合に選択肢の表示がおかしくなるバグを修正。
  - SSTP のアクセスログの日付が一ヶ月ズレていたのを修正。

o バージョン 0.1.12 (2001年7月9日)
  - 特殊文字 '%' に対する文法チェックの緩和の方法にバグがあった
    ので取り急ぎ修正。

o バージョン 0.1.11 (2001年7月9日)
  - インストーラ (ninix-install コマンド) にアンインストール機能
    を追加。同名のゴースト/シェル/バルーンが既にインストールされ
    ている場合は自動的に削除するようにした。新旧のチェックは行な
    わないためバージョンダウンも可。
  - Debian パッケージに合わせて Makefile と lib/ninix/kawari.py 
    を修正。
  [Sakura Script]
  - \URL タグのサポートを追加した。
  - 特殊文字 '%' に対する文法チェックを緩和した。認識可能なメタ
    文字列 (%selfname, %keroname など) の先頭以外の場所ではバッ
    クスラッシュエスケープなしでも通常の文字として扱うようにした。
  - 最新の Sakura Script の仕様に準拠するように修正。以下のタグ
    を通すようにした: \1, \2, \4, \5, \-, \+, \_+, \_l, \_v,
    \_V, \_b, \__t (エラーにならないだけで実際の処理は未実装)。
  - \s タグと \b タグのスクエアブラケット無しの引数 (旧仕様) に
    対応した。
  [バルーン]
  - Sender: ヘッダの値 (文字列) が長くても確実に送信元の IP アド
    レスが表示されるようにした。
  [SSTP SEND/1.2]
  - Entry: ヘッダの無いリクエストに対応した。
  - 選択処理の途中で接続が切れても大丈夫なようにした。
  - 選択された選択肢の ID が URL だった場合にクライアントにレス
    ポンスが返されないバグを修正。

o バージョン 0.1.10 (2001年7月5日)
  - twm など一部のウィンドウマネージャでウィンドウの位置指定が効
    かない問題を修正。ninix コマンドに -p オプションを追加した。
  - Makefile を修正。GNU make の拡張機能 (?) を使わないようにした。
  - SSTP SEND/1.2 の選択後のスクリプトがおかしくなるバグを修正。
  [Sakura Script]
  - \w タグで挿入されるウェイトの長さを修正した。
  - \_w タグのサポートを追加した。
  [バルーン]
  - SSTP マーカーに送信元の IP アドレスを表示するようにした。
  - SSTP SEND/1.x の Option: nodescript に対応した。

o バージョン 0.1.9 (2001年7月3日)
  - 操作メニューで設定した項目を ~/.ninix/preferences に保存し、
    次の起動時に読み込むようにした。
  - ninix コマンドにウィンドウを上方移動させる -R (--raise) オプ
    ションを追加した。(Thanks to いわもとさん)
  - Python 2.1 だとエラーが出て ninix が起動できない問題を修正。
    (Thanks to Cub さん)
  - 「華和梨」辞書ファイルがサブディレクトリに入っているゴースト
    (「理夢」など) のインストールに失敗する問題を修正。

o バージョン 0.1.8 (2001年7月2日)
  - ImageMagick パッケージの convert コマンドを置き換える外部プ
    ログラム pngtoxpm を作成。合わせてインストーラを修正した。
  - インストーラに減色を行なう -q (--quantize) オプションを追加
    した。pngtopnm, ppmquant, pnmtopng が必要 (実行時に見つから
    なければ単にエラーになる)。
  - サーフィスウィンドウをマウスでドラッグして動かせるようにした。
    バルーンの場所と向きはサーフィスの移動後の位置に応じて自動的
    に決定する。
  - EXECUTE/1.0 の戻り値の形式を修正。(Thanks to 汁゛さん)
  - ウィンドウの WM_CLASS を一部変更した (「ウィンドウマネージャ
    の設定」の節を参照のこと)。

o バージョン 0.1.7 (2001年6月29日)
  - \q タグがうまく処理できなくなっていたのを修正。
  - \e タグ以降のスクリプトが有効になる問題を修正。

o バージョン 0.1.6 (2001年6月28日)
  - 起動時のメッセージと EXECUTE/1.2 の戻り値に (リビジョン番号
    を含む) 正確なバージョン番号を出すようにした。
  - 操作メニューに「バージョン情報」を加えた。
  [Sakura Script]
  - \z, \y に対する処理を削除。これらのタグは単に無視する。\q が
    現れた時点で選択モードに移るようにした。
  - %c を %username と同じに扱うようにした。
  - user.defaultname のデフォルト値を「ユーザさん」に変更。
  [バルーン]
  - maskmethod == 1 のときの文字色の計算方法を変更。これでいいの
    か分からないけどいくつかのバルーンを試した限りではいい感じ。
  - いつでもスクロールバーが押せてしまう (結果として表示がおかし
    くなる) 問題を修正。
  - SSTP マーカーの消し忘れを修正。
  - font.size (font.height), fontcolor.* (font.color.*) などの旧
    仕様の設定項目名もチェックするようにした。
  - "--n" 形式の値に対応した。

o バージョン 0.1.5 (2001年6月27日)
  - SSTP マーカーを実装した。
  - バルーン内の文字のサイズと色を (決め打ちせずに) 設定ファイル
    から読むようにした。
  - ホスト名が逆引きできない場合に実行エラーが起こって SSTP メッ
    セージが受信できない問題を修正。
  - 不具合が増えるようなのでバージョン 0.1.3 でのインストーラへ
    の変更を元に戻した。

o バージョン 0.1.4 (2001年6月27日)
  - gtk.GtkPixmap() の呼び出し方が悪かったのを修正。比較的古めの
    pygtk 0.6.3 でも動くようになったハズ。(Thanks to いわもとさん)

o バージョン 0.1.3 (2001年6月26日)
  - インストーラ (の中で呼び出している convert コマンド) が背景
    色をうまく透明化できないことがある問題に対処。すこしは不具合
    が減るかな?

o バージョン 0.1.2 (2001年6月26日)
  - WM_NAME と WM_ICON_NAME を正しく設定するようにした。
  - Python 2.0 への依存部分を削除した。Python 1.5.2 でも実行でき
    るようになっているハズ。
  - インストール時に使った python のパス名を起動コマンド (ninix,
    ninix-install) に書き込むようにした。
  - 拡張 makoto.dll を使っているゴーストが生成した会話文だけを
    makoto.py に通すようにした。おかしな会話文が生成される場合は
    ~/.ninix/ghost 以下の当該ゴーストのディレクトリを削除してゴー
    ストを再インストールしてみて下さい。

o バージョン 0.1.1 (2001年6月25日)
  - 構文エラーがあった場合に華和梨辞書パーザが無限ループに陥る問
    題を修正。

o バージョン 0.1 (2001年6月25日)
  - 最初のリリース。

リンク集
--------

o ふくらみかけ (http://sakura.mikage.to/)
  「何か」の総本山です。「何か」関連の仕様書はここで入手できます。

o MOON PHASE (http://www.moonphase.cc/)
  「何か」関連のポータルページです。主なゴースト/シェル/バルーン
  はここからリンクを辿れば入手できます。

o SSTP Bottle (http://bottle.mikage.to/)
  SSTP を利用したメッセージングサービスです。「何か」ライフが256
  倍楽しくなります。

o 『何か』 Wiz まゆら (http://members.tripod.co.jp/m_a_y_u_r_a/)
  ゴースト「まゆら」のページです。

謝辞
----

o 「何か」を世に送り出した閑馬永空さんと黒衣鯖人さん。
o 「華和梨」開発者の Meister さん。
o 「里々」開発者の櫛ヶ浜やぎさん。
o 「偽栞」開発者のくまくん（＞ｖ＜）さん。
o 「拡張 makoto.dll」開発者の森下健さん。
o SSTP Bottle 開発者のなるさんと沢渡みかげさん、それに毎日楽しい
  ネタを届けてくれるボトラーのみなさん。
o ゴースト/シェル/バルーンの制作者のみなさん。
o Python をはじめとする関連フリーソフトウェアの開発者のみなさん。

あなた方がいなければこのソフトウェアの存在はあり得ませんでした。
本当にありがとう。

ライセンス
----------

本ソフトウェアは、GNU General Public License (バージョン2以降) 
に基づくフリーソフトウェアです。あなたは、同ライセンスに従って本
ソフトウェアを自由に利用し、修正し、再配付することができます。

本ソフトウェアは無保証です。本ソフトウェアの作者は、本ソフトウェ
アを利用したことによって生じた如何なる損害に対してもその責を負い
ません。

作者
----

梶山民人 <kajiyama3@geocities.co.jp>

本ソフトウェアに対するコメント、バグ報告、パッチなどを歓迎します。
上記のメールアドレスまでお気軽にお寄せ下さい。特に、

o このゴースト/シェル/バルーンが動かない。
o この動作はオリジナルの「何か」と違うので直して欲しい。
o オリジナルの「何か」にあるこの機能を実装して欲しい。

などのフィードバックは大歓迎です。よろしくお願いします。
