skkserv 利用の手引き (Version 3.9 of May 28, 1994)
====================

1. skkserv とは
2. skkserv のインストール法
3. skkserv の起動
4. SKK形式の辞書
5. その他
6. 謝辞
7. 補遺 (skkserv 起動後の辞書の再読み込み)


1. skkserv とは
===============

skkserv は、Nemacs上で動作するかな漢字変換プログラム
	SKK -Simple Kana to Kanji conversion program 
のための辞書サーバです。

skkserv （サーバ）は、SKK/Nemacs （クライアント）とは独立に動作します。
ひとつのサーバは、複数のクライアントの要求を処理することができます。

サーバは、起動されると、最初に SKK形式の辞書を読みこみます。次に、無限
ループにはいり、クライアントからの要求を待ちます。サーバは、接続を要求
したクライアントごとに通信路を作り、以後、そのクライアントから文字列変
換の要求が起きる毎に、辞書を検索して、変換文字列を返します。クライアン
トは、文字列変換要求以外に、サーバのバージョン番号要求や接続終了などの
メッセージをサーバに送ります。

サーバとクライアントの間の通信には、BSD 系 UNIX のソケットを利用します。
System V 系 UNIX でも、BSD 系のネットワーク機能を取りこんでいるものは
動作することがあります。詳しくは、Makefile の記述を読んでください。

サーバとクライアントは、ネットワークで接続された異なる計算機上で動かすこ
とができます。


2. skkserv のインストール方法
=============================

skkserv のインストールは、通常、SKK 本体と同時に Configure スクリプト
を使って同時に行いますが、Configure を使わないで skkserv 単独でもイン
ストールできます。

skkserv のインストールは、通常、スーパーユーザになって行います。しかし、
スーパーユーザになれない人でも、インストールすることができます。その場
合はやり方が少し異なります。


○ スーパーユーザの権限を持つ人のインストール方法

(1) 自分の計算機の状況に応じて Makefile を編集します。

変更する可能性があるのは、以下の変数です。

COMPAT		計算機の OS に応じて選択します。BSD UNIX ならば、編集す
		る必要はありません。詳細は、Makefile を見てください。
CC		使用する C compiler （ディフォルトは gcc ）です。
BINDIR		skkserv がインストールされる directory です。
JISYODIR 	SKK 辞書がインストールされる directory です。
JISYO		使用される SKK 辞書です。辞書の種類については、SKK のマ
		ニュアルを読んでください。


(2) skkserv を作ります。

make

(3) スーパーユーザになり、skkserv と辞書をインストールします。

make install

これは、/etc/services と /etc/rc.local の２つのファイルに若干の行を追加
します。バックアップはそれぞれ /etc/services.org と /etc/rc.local.org
というファイルになります。なお、ここで自動的に起動される add-services
と add-rc.local という２つの shell script は、対話形式であり、質問に
no と答えると、あとで人間が手で作業をすることになります。

(4) NIS(旧名YP)を使っている場合は、Master Server となっている計算機で、
スーパーユーザになり、add-services を行った後、

cd /var/yp または cd /etc/yp
make services

とします。


○ スーパーユーザの権限を持たない人のインストール方法

(1) における編集で、

PRIVATE = -DPRIVATE

とします。

(2) skkserv を作り、インストールします。

make
make install	

(3) 自分の ~/.skk ファイルに以下の行を追加します。

(setq skk-portnum 1178)

(4) SKK を使う前に、skkserv を走らせる計算機上で、自分で、

skkserv

として、起動します。
(SKK よびだし時に、skkserv は自動的に起動されるようになっていますが、
必ずしも成功しません。安全のため、あらかじめ起動しておいてください。)


3. skkserv の起動
=================

skkserv の起動時のオプションで、辞書名の変更、ディバッグ・モードの指定
などができます。

skkserv はスーパーユーザが起動する必要はありません。


skkserv [-d] [-p nnnn] [jisho]

-d 	    	ディバッグモードです。
-p nnnn	    	通信用のポート番号として nnnn を使います。
jisho	    	jisho を辞書ファイルとして利用します。


オプションなしで起動すると、通常モード（ディバッグ・モードでない）で、
サーバのコンパイル時に指定した辞書とポートを利用します。skkserv は、サー
バとなるべき子プロセスを作ったあと、ただちに終了します。エラーがあって
も何のメッセージも出しません。

ディバッグ・モードで走らせると、skkserv はそのまま foreground で走り、
メッセージを出力します。キーボードから割りこみをかけることもできます。


4. SKK形式の辞書
================

SKK形式の辞書の各行は、見出し語、1文字の空白、変換文字列からなる文字列
です。

見出し語は、空白と改行を含まない任意の文字列です。
変換文字列は、'/' (スラッシュ)と改行を含まない任意の文字列を、'/' で
区切って並べたものです。(最初と最後にも '/' があります。)
なお、いずれも漢字コードは EUC です。

辞書の中で、各行は、見出し語を unsigned char と見なして、ソートされて
いると仮定します。



なお、3.7 版以降は以下の形式の新形式辞書もサポートしています。

;; okuri-ari entries.
パ−ト１
;; okuri-nasi entries.
パ−ト２


パ−ト１は、送り仮名のある見出語が逆順にソートされています。
パ−ト２は、送り仮名のない見出し語が正順にソートされています。

また、3.7.1 版以降、;; ではじまる、上の２種類の形でない行は、注釈として
無視されます。


5. その他
=========

○ skkserv が動作する環境

skkserv が動作するためには、BSD 系 UNIX のソケットが必要です。System V 系
UNIX でも、BSD 系と同じ仕様のソケットを持てば動くことがあります。

skkserv のテストは、

	SunOS 4.0.3, 4.1.1
	NEWS OS 4.1.1
	Ultrix V4.1

の上で行いました。

○ テスト方法

skkserv がうまく起動できない時は、Nemacs で、以下のものを順次評価してく
ださい。ここで、"miporin" のところには、skkserv を動かしているホスト名
を書いてください。

(open-network-stream "skkservd" (current-buffer) "miporin" "skkserv")
							;; start
(if (fboundp 'set-process-kanji-code)
    (set-process-kanji-code (get-process "skkservd") 0))
(setq kanji-fileio-code 0)
(process-send-string "skkservd" "1かんじ ")		;; conversion 
(process-send-string "skkservd" "0")			;; end 

conversion を行ったところで、バッファの最後に、

1/漢字/...

が挿入されれば OK です。


● 注意・限界・改良の余地

skkserv がディバッグモードでない時に、合法的に殺す手段はありません。
kill してください。

(古い版の skkserv では) ディバッグやテストの際に、skkserv を殺してすぐ
に起動すると「ポートが使われている」という趣旨のエラーが起きます。この
場合は、少し待ってから、再度起動してください。また、skkserv を同じマシ
ンで2つ以上起動することはできません。

ひとつのサーバが受けつけられるクライアントの数の上限は、関数 getdtablesize
により決まります。もし、上限を越えた数のクライアントがコネクト要求をして
きた時はサーバは異常終了します。

見出し語の最大長は、510バイトです。

3.3.2版以降、変換後の文字列の長さに制限はなくなりました。ただし、辞書に
極端に長い行があった時に何が起きるかは十分実験していません。

辞書検索は、「読み」の第1文字目による場合分けを行ったあとは、線型探索
です。現在の状況では、これで十分ですが、場合によっては、dbm/ndbm など、
探索方法を検討する必要があるでしょう。"simple" ではなくなりますが…。

6. 謝辞
=======

skkserv が存在するのは言うまでもなく、
東北大学電気通信研究所佐藤雅彦教授の SKK によるものです。

skkserv の改良コードを送っていただいた、

	高橋 伸尚	ＹＨＰ
	木村 親弘	神戸日本電気ソフトウェア(株)
	川口 貢司	株式会社ＰＦＵ
	丸川 一志	クボタコンピュータ(株)

の皆さん（所属は当時）、および、skkserv に御意見をいただいた無数の利用
者の方々に感謝します。


7. 補遺 (1993/6/5, skkserv 起動後の辞書の再読み込み)
========

skkserv 起動後に skkserv の参照している辞書の内容を変更したい場合に、
単純に skkserv のプロセスを kill してしまうと、その時に同じ skkserv を
利用して skk を使っているすべてのユーザに悪影響があります。

そこで、skkserv を走らせたまま、辞書を再読みこみする方法を付加しました。
なお、辞書のファイル名を変更するときはできません。つまり、コンパイル時
または起動時に指定されたファイル名の位置に、新しい辞書を上書きする必要
があります。

1. 新しい辞書を skkserv の所定の場所に置いてください。

	cp NEW-JISHO /usr/local/mule/etc/SKK-JISYO.L 

ここで第２引数は適当な文字列になおして使ってください。

2. skkserv のプロセス番号を求めます。

	ps ax | grep skkserv

3. skkserv に辞書再読み込みを指定するシグナルを送ります。

	kill -INT nnnn 

ここで、nnnn は 2. で求めた skkserv のプロセス番号とします。なお、
signal を送ることができるのはスーパーユーザのみ（個人で skkserv を
起動した場合は、スーパーユーザまたは起動した人のみ）です。


注意:

a. 上記手順で 1 と 3 の間（ファイルの中身が書きかわったのに、まだ、
skkserv がそのことを知らないとき）では、skkserv は変な動作をすることが
あります。特に、辞書のサイズを小さくしたときに、死んでしまうかもしれま
せん。

b. 動作は、SparcStation-2/SunOS 4.1.1 上でのみテストしました。signal 
の取り扱いが異なるマシン上では動作しない可能性があります。





