summaryrefslogtreecommitdiff
path: root/japanese/dserver/files
diff options
context:
space:
mode:
authorMasafumi Max NAKANE <max@FreeBSD.org>1997-01-29 03:56:05 +0000
committerMasafumi Max NAKANE <max@FreeBSD.org>1997-01-29 03:56:05 +0000
commit520b21cc72c26cd2670563483960a306ff8cdbce (patch)
tree1471993d463b854f04c36925d5fe8e5a275a851c /japanese/dserver/files
parentUpgrade, 2.8 -> 3.2. (diff)
New port, dserver:
A CD-ROM dictionary lookup facility (server and clients). Submitted by: Yoshio MITA <mita@jp.freebsd.org> (Closing PR #2311.)
Notes
Notes: svn path=/head/; revision=5459
Diffstat (limited to 'japanese/dserver/files')
-rw-r--r--japanese/dserver/files/README.FreeBSD-setup.euc360
-rw-r--r--japanese/dserver/files/deinstall.sh.inetd10
-rw-r--r--japanese/dserver/files/deinstall.sh.standalone9
-rw-r--r--japanese/dserver/files/patch-aa18
-rw-r--r--japanese/dserver/files/patch-ab412
-rw-r--r--japanese/dserver/files/patch-ac188
-rw-r--r--japanese/dserver/files/setup.sh.inetd139
-rw-r--r--japanese/dserver/files/setup.sh.standalone136
8 files changed, 1272 insertions, 0 deletions
diff --git a/japanese/dserver/files/README.FreeBSD-setup.euc b/japanese/dserver/files/README.FreeBSD-setup.euc
new file mode 100644
index 000000000000..1198529fd923
--- /dev/null
+++ b/japanese/dserver/files/README.FreeBSD-setup.euc
@@ -0,0 +1,360 @@
+ Dserver FreeBSD portセットアップについて.
+
+ 3.Nov.1996
+ Revised 20.Dec.1996
+ 三田吉郎 <mita@jp.FreeBSD.org>
+ Special thanks to MIHIRA Yoshiro <sanpei@yy.cs.keio.ac.jp>
+
+ 目次
+ I. インストール
+ I.1. setup.sh の具体的な作業
+ I.2. 4: 辞書のコピー・マウント
+ I.3. サーバの動作テスト
+ II. 使う
+ II.1. kenjiro
+ II.2. diclookup-mule
+ III. 削除(uninstall)
+ IV. `inetd起動のdserver'を作る方法
+ IV.1. `inetd起動のdserverとは何か'
+ IV.2. standaloneとinetdと,どちらを選択するか.
+ IV.3. inetd起動のdserverを作る.
+ IV.4. 初期設定スクリプトの違い.
+ V. エラーとその対策
+ V.1 muleで辞書を引こうとしたのですが,
+ いつまでたっても切り替わりません.
+ V.2. muleで,`process *ndtp* not running'というエラーが出ます.
+ V.3. 辞書を10種類以上にしたら途端にBus Errorで落っこちます.
+
+※ 文中の${PREFIX}は,/usr/localに読み変えてください,portsを利用して
+ コンパイルすると,${PREFIX}を/usr/local以外にも,自分の好みの
+ ディレクトリに設定することができます.
+
+I. インストール
+
+ dserver の ports を インストールした後に必要な作業は次の通りで
+ す.
+
+ 1: [/etc/services] に ndtp プロトコルのエントリを追加
+ 2: dserver 起動用スクリプトの準備
+ 3: mule クライアント diclookup-mule 用の初期設定
+ 4: 辞書をコピーまたはマウント
+
+ これらの作業は, [${PREFIX}/lib/dserver/setup.sh] を起動すると, 1〜
+ 3 までを自動的に設定してくれます.
+
+ ※ ${PREFIX}
+ ここで ${PREFIX} とは ports をコンパイル時の環境変数 PREFIX を
+ 示します. packages では, [/usr/local] となります. 上記の場合,
+ [/usr/local/lib/dserver/setup.sh] と適時読みかえてください.
+
+I.1. setup.sh の具体的な作業
+
+ この setup.sh では, 具体的に次の作業を行います.
+
+1: [/etc/services] の末尾に次の行を追加します.
+
+-----
+ndtp 2010/tcp #Network Dictionary Transfer Protocol
+-----
+
+2: [${PREFIX}/etc/rc.d/dserver.sh] に次の行を追加します.
+
+ これにより, OS ブート時に dserver が自動的に起動します.
+
+-----
+# dserver - dictionary server
+if [ -f /usr/local/lib/dserver/dserver ] ; then
+ /usr/local/lib/dserver/dserver&
+ echo 'dserver'
+fi
+-----
+
+3: [${PREFIX}/lib/mule/site-lisp/site-start.el] に次の行を追加します.
+
+ これにより, mule から特別な設定無しに利用できるようになります.
+
+-----
+;;; diclookup-mule: Online dictionary
+(autoload 'online-dictionary "diclookup-mule" "Online dictionary." t nil)
+(autoload 'od:lookup-pattern-edit "diclookup-mule" "Look up a word." t nil)
+(setq od-chujiten-flag t) ; diclookup-mule
+(setq od-dictfile-list '("od-chujiten" "od-kojien")) ; diclookup-mule
+(setq dserver-server-list '("localhost")) ; diclookup-mule
+(setq od-frame-geometry "+0-0" od-hide-frame 'make-invisible) ; diclookup-mule
+(add-hook 'od-really-quit-hook 'od-delete-frame) ; diclookup-mule
+(define-key-after menu-bar-file-menu [dictionary] ; diclookup-mule
+ '("Online Dictionary" . online-dictionary) 'calendar) ; diclookup-mule
+-----
+
+I.2. 4: 辞書のコピー・マウント
+
+ [${PREFIX}/share/dict/cdrom/] に,それぞれの辞書をマウントします.
+ [${PREFIX}/lib/dserver/dserver_access] のエントリと整合性を持たせる
+ ようにしてください.
+
+ makedic というプログラムを使うと,辞書サイズを概ね 1/3 に圧縮す
+ ることができます.使い方は簡単で次の通りです.
+
+-----
+makedic [オリジナルの辞書ファイル名] [新しい辞書ファイル名]
+-----
+
+ ※: 辞書のライセンスによる圧縮の制限
+ 辞書をハードディスクにコピー,圧縮してよいかどうかの対応ですが,
+ 広辞苑は×,研究社の事典は○であるなどと,各社異なります.
+ [${PREFIX}/lib/dserver/doc/README.dserver] を御覧下さい.
+
+I.3. サーバの動作テスト
+
+ desrver を立ち上げると,dserver が使えるようになるはずです.次の
+ ように打ち込んで,簡単な接続試験をしてみましょう.
+
+-----
+telnet localhost ndtp<リターン>
+-----
+
+1: 接続試験その 1, アクセス可能かどうか
+
+ 接続した上で A<リターン> と打ち込むと,[dserver_access] ファイル
+ でアクセス許可が出ている場合は $A という返事が帰って来るはずです.
+
+-----
+% telnet localhost ndtp
+lavender: {1234} telnet localhost ndtp
+Trying 127.0.0.1...
+Connected to localhost.
+Escape character is '^]'.
+A
+$A
+-----
+
+ ※: アクセス許可ファイルの記述の注意
+
+ dserver の仕様として, アクセス許可のチェックは IP アドレスでは
+ なく, ホストネームで行われています. そのため, 次の場合例のように
+ localhost とだけ書いてもうまくアクセス許可を得れない場合がありま
+ す.
+
+ 0) [/etc/hosts] に次のような行が含まれる.
+
+例
+--------
+127.0.0.1 localhost.rad.cc.keio.ac.jp localhost dserver
+--------
+
+ 0-1) DNS が使える環境であるが, [/etc/host.conf] で bind より
+ host を先に書いている場合.
+
+ 0-2) DNS を使えず [/etc/hosts] だけを参照する場合.
+
+ その場合には, 次のように [dserver_access] に記述するとアクセス
+ 許可を得れます.
+
+例: [/etc/hosts] が上記のような場合. 適時 rad.cc.keio.ac.jp. を追加
+してください.
+-----
+localhost.rad.cc.keio.ac.jp
+-----
+
+2: 接続試験その 2, 辞書が使用可能かどうか?
+
+ アクセス許可を得た後,T<リターン> と打ち込むと,使用可能な辞書の
+ リストを得ることができます.
+
+辞書リストの例:
+-----
+T
+ 1 研究社中和英
+ 2 研究社中和英
+ 3 三省堂クラウン仏和
+$*
+-----
+
+ 辞書をインストールしたにも関わらず利用可能になっていない場合は,
+ [dserver_access] ファイルと,CDROM のディレクトリ構造を確認してみ
+ てください.辞書ファイルは,start とか hommon とかいう名前になって
+ いますが,このインストール位置が狂っているばあいがよくあります.
+
+ リスト中の漢字は,EUC漢字コードを使っていますので,
+ ktermを`kterm -km euc'で立ちあげたり,ctrl+中ボタンを押して
+ 選択するなどして,EUC漢字コードを表示できるようにしてください.
+
+II. 使う
+
+II.1. kenjiro
+
+ コマンドラインから引きたい場合は kenjiro<リターン> です.
+ 【指定辞書無し】と出たときに<ESC>キーを押すと辞書が選択できます.
+
+ リストに無い辞書を読みたい場合は,ports を用意して make patch の
+ 後 [${WRKSRC}/clients/kenjiro/config.h] を書き換えてmakeし直します.
+
+II.2. diclookup-mule
+
+ 私はこちらのクライアントを気に入っています.M-x
+ online-dictionary<リターン>で起動します.
+
+ [${PRFIX}/lib/mule/site-lisp/od-***.elc]が,それぞれの辞書に
+ 対応した外字ファイルです,これをハックすれば大抵の辞書を読むことが
+ できるでしょう.
+
+ ハックするときに,外字の形をどうやって調べるかが問題ですが,ひな
+ がたを適当に作っておいて実際に辞書を読むと
+-----
+著作権表示
+外字1
+外字2
+-----
+ などとメニューが表示されます.ここで外字を選択すると,
+
+ 1. この辞書で登録されている外字の文字コード
+ 2. 外字のビットマップ(;)表示
+ 3. 外字をXウィンドウとテキスト端末とでどう表示しているか
+
+ がわかりますので,それに合わせて外字テーブル(とそのコードの上位
+ 8bitの数)を書き換えます.
+
+ この ports に入っている od-crown.elc(クラウン仏和,クラウ
+ ン独和),od-italian.elc(現代イタリア語表現辞典),od-oxford.el
+ (オクスフォード英英辞典,シソーラス類義語辞典)は,
+ od-chujiten.el(新英和和英)を上述の方法で私三田が hack
+ したものです.なれれば一辞書を半日で対応できます.ぜひ対応させて,
+ 本家に contribute しましょう.
+
+III. 削除(uninstall)
+
+ 削除は,インストールの逆を行えばよいわけですが,3-1 を自動的に行
+ うためのシェルスクリプト,[${PREFIX}/lib/dserver/deinstall.sh] を
+ 用意しておきました.
+
+ その後で,pkg_deleteを行えばOKのはずです.
+
+IV. `inetd起動のdserver'を作る
+ このportsでは,特に指定しない限り`standaloneのdserver'を
+ 作るようにしていますが,`inetd起動のdserver'を作ることもできます.
+
+IV.1 `inetd起動のdserver'とは何か?
+
+ これまで説明してきた例では,このportsでの標準設定である,
+ dserverをstandaloneで使用するための設定を紹介してきました.
+
+ standaloneでは,プログラムdserverシステムを起動したときから,
+ システムが終了する時までずっと走っていて,「全ての接続要求を
+ 一つのdserverが処理」します.
+
+ inetdでは,プログラムdserverは普段は走っておらず,接続要求がくるたびに
+ inetdから起動されます.「別々の接続要求は別々のdserverが処理」します.
+
+IV.2. standaloneとinetdと,どちらを選択するか.
+ ライセンス制限(ファイルdserver_accessで,辞書を同時に読めるユーザ数を
+ 制限できる機能です)を使うためには,全ての接続要求を一つのdserverが
+ 処理する必要があるので,standaloneで立ちあげる必要があります.
+
+ inetdでは,dserverを使っていないときにCDROMを差し替えることができます.
+ amdと組み合わせるのが便利です.
+
+IV.3. inetd起動のdserverを作る.
+
+ rootになって,/usr/ports/japanese/dserverのディレクトリで,
+-----
+make package
+-----
+ と入力すると,ファイルを展開した後に,
+ standaloneでdserverを動かすように設定するか,それとも
+ inetdから接続するたびに呼び出すように設定するかの
+ 選択画面になります.
+
+----------------- dserver port configuration -----------------
+| How do you want to run dserver, standalone or run by inetd?|
+| |
+| (*) standalone stanalone |
+| ( ) inetd inetd |
+| |
+| [ OK ] Cancel |
+--------------------------------------------------------------
+ 普段はこの画面のように,standaloneで起動する設定になっていますが,
+ 上下カーソルとリターンキーでinetdを選択すると,
+ inetdから呼び出す設定になります(下図はinetdを選択したところ)
+
+----------------- dserver port configuration -----------------
+| How do you want to run dserver, standalone or run by inetd?|
+| |
+| ( ) standalone stanalone |
+| (*) inetd inetd |
+| |
+| [ OK ] Cancel |
+--------------------------------------------------------------
+
+IV.4. 初期設定スクリプトの違い.
+
+ 初期設定スクリプトsetup.sh, deinstall.shは,
+ inetd起動を選択した場合とstandaloneを選択した場合とで違ったものが
+ インストールされます.
+
+ inetd起動用のsetup.shでは,standaloneに比べて以下の点が異なっています.
+* /usr/local/etc/rc.d/dserver.shを作成しない.
+* /etc/inetd.confへのdserverのエントリを追加する.
+* inetdを立ちあげ直す(HUPシグナルを送る)
+
+ 使い方はinetd, standalone用とも一緒です.
+
+V. エラーとその対策
+
+V.1. muleで辞書を引こうとしたのですが,いつまでたっても切り替わりません.
+
+ muleで,
+-----
+M-x online-dictionary
+-----
+ と入力すると,辞書用のフレームが新しく作られますが,その後いつまで
+ 経ってもタイトルが表示されない症状です.
+
+ 接続許可を正しく出しているかを疑ってみます.
+ I.3. サーバの動作テスト に従って,手動で接続してみます.
+ 接続に失敗している場合は,${PREFIX}/dserver/dserver_accessファイルで
+ アクセス許可を正しく出します.
+
+-----接続に成功している例:
+% telnet localhost ndtp
+lavender: {1234} telnet localhost ndtp
+Trying 127.0.0.1...
+Connected to localhost.
+Escape character is '^]'.
+A
+$A
+-----
+-----接続に失敗している例:
+% telnet localhost ndtp
+lavender: {1234} telnet localhost ndtp
+Trying 127.0.0.1...
+Connected to localhost.
+Escape character is '^]'.
+A
+$N
+-----
+
+V.2. muleで,`process *ndtp* not running'というエラーが出ます.
+
+ standaloneの場合,dserverが何かの原因でこけたのでしょう.
+ もう一度dserverを立ちあげ直してみてください.
+-----
+%su root
+#/usr/local/lib/dserver/dserver&
+-----
+
+V.3. 辞書を10種類以上にしたら途端にBus Errorで落っこちます.
+
+ server2.2-pl2/config.hの,MAXDICTの値を10から増やして
+ コンパイルし直しましょう.
+※dserver_accessファイルの設定を変更している場合,バックアップしておきます.
+-----
+% su root
+#cp /usr/local/lib/dserver/dserver_access /tmp/dserver_access.orig
+# cd /usr/ports/japanese/dserver
+# make patch
+# vi work/dserver/server2.2-pl2/config.h
+# make install
+#cp /tmp/dserver_access.orig /usr/local/lib/dserver/dserver_access
+-----
+
+質問,不平不満など御座いましたらmita@jp.FreeBSD.orgにどうぞ.
diff --git a/japanese/dserver/files/deinstall.sh.inetd b/japanese/dserver/files/deinstall.sh.inetd
new file mode 100644
index 000000000000..d658ea4715f8
--- /dev/null
+++ b/japanese/dserver/files/deinstall.sh.inetd
@@ -0,0 +1,10 @@
+#!/bin/sh
+echo "updating /etc/services"
+cp /etc/services /etc/services.bak
+(grep -v '\bndtp\b' /etc/services.bak) > /etc/services
+echo "updating /etc/inetd.conf"
+cp /etc/inetd.conf /etc/inetd.conf.bak
+(grep -v '\bndtp\b' /etc/inetd.conf.bak) > /etc/inetd.conf
+echo "updating site-start.el"
+cp PREFIX_DIR/lib/mule/site-lisp/site-start.el PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak
+grep -v diclookup-mule PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak > PREFIX_DIR/lib/mule/site-lisp/site-start.el
diff --git a/japanese/dserver/files/deinstall.sh.standalone b/japanese/dserver/files/deinstall.sh.standalone
new file mode 100644
index 000000000000..a8e79d3b6112
--- /dev/null
+++ b/japanese/dserver/files/deinstall.sh.standalone
@@ -0,0 +1,9 @@
+#!/bin/sh
+echo "updating /etc/services"
+cp /etc/services /etc/services.bak
+(grep -v '\bndtp\b' /etc/services.bak) > /etc/services
+echo "Removing PREFIX_DIR/etc/rc.d/dserver.sh"
+rm -f PREFIX_DIR/etc/rc.d/dserver.sh
+echo "updating site-start.el"
+cp PREFIX_DIR/lib/mule/site-lisp/site-start.el PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak
+grep -v diclookup-mule PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak > PREFIX_DIR/lib/mule/site-lisp/site-start.el
diff --git a/japanese/dserver/files/patch-aa b/japanese/dserver/files/patch-aa
new file mode 100644
index 000000000000..763f1997ab99
--- /dev/null
+++ b/japanese/dserver/files/patch-aa
@@ -0,0 +1,18 @@
+--- Makefile.orig Wed Nov 6 13:01:50 1996
++++ Makefile Wed Nov 6 13:02:12 1996
+@@ -0,0 +1,15 @@
++PREFIX?=/usr/local
++DOCDIR=${PREFIX}/lib/dserver/doc
++all:
++ (cd server2.2-pl2; ${MAKE} all)
++ (cd clients/kenjiro; ${MAKE} all)
++ (cd clients/diclookup-mule-2.3.0; ${MAKE} all)
++install:
++ if [ ! -d ${DOCDIR} ] ; then mkdir -p ${DOCDIR} ; fi
++ (cd server2.2-pl2; ${MAKE} install)
++ (cd clients/kenjiro; ${MAKE} install)
++ (cd clients/diclookup-mule-2.3.0; ${MAKE} install)
++ cp ACKNOWLEDGMENT DICTIONARIES doc/* ${PREFIX}/lib/dserver/doc
++ cp clients/diclookup-mule-2.3.0/README ${DOCDIR}/README.diclookup-mule
++ cp clients/kenjiro/Copyright ${DOCDIR}/Copyright.kenjiro
++ cp clients/kenjiro/README ${DOCDIR}/README.kenjiro
diff --git a/japanese/dserver/files/patch-ab b/japanese/dserver/files/patch-ab
new file mode 100644
index 000000000000..f6e8e9c9dccd
--- /dev/null
+++ b/japanese/dserver/files/patch-ab
@@ -0,0 +1,412 @@
+patches for server2.2-pl2
+--- server2.2-pl2/daemon.c.orig Sat Aug 10 02:10:32 1996
++++ server2.2-pl2/daemon.c Tue Jan 28 08:22:42 1997
+@@ -13,6 +13,11 @@
+ #include <sys/time.h>
+ #include <ctype.h>
+
++#ifdef __FreeBSD__
++#include <stdlib.h>
++#include <string.h>
++#endif
++
+ #ifdef linux
+ #include <string.h>
+ #include <stdlib.h>
+@@ -34,10 +39,11 @@
+ #include "ndtp.h"
+ #include "misc.h"
+
+-
++#ifndef __FreeBSD__
+ #ifdef DEBUG
+ extern int debug;
+ #endif
++#endif
+
+ ENV env[MAXUSER];
+
+@@ -104,8 +110,11 @@
+ #endif
+ exit(1);
+ }
+-
++#ifdef __FreeBSD__
++ if( bind(ls, (struct sockaddr *)&myaddr_in, sizeof(struct sockaddr_in)) == -1) {
++#else
+ if( bind(ls, &myaddr_in, sizeof(struct sockaddr_in)) == -1) {
++#endif
+ #ifdef SYSLOG
+ syslog(LOG_ERR,"Unable to bind address /iserver_init\n");
+ #endif
+--- server2.2-pl2/lookup.c.orig Sat Aug 10 02:10:32 1996
++++ server2.2-pl2/lookup.c Tue Jan 28 08:22:42 1997
+@@ -501,6 +501,54 @@
+ else return q+6;
+ }
+
++#ifdef HALF
++reg_jisstrnsub_(s,t,r,n,CODE)
++unsigned char *s, *t;
++int r,n;
++int CODE;
++{
++ unsigned int ss,tt;
++ if (CODE == FULL) {
++ for(; ; s+=2,t+=2,n-=2) {
++ ss = (*s&0x7f)<<8|*(s+1)&0x7f;
++ tt = (*t&0x7f)<<8|*(t+1)&0x7f;
++ if (n <= 0) tt = 0; /* string terminate 95.2.8 by T.Motoda */
++
++ if(r==SHORT && (ss=='*' || ss=='?')) {
++ return 0;
++ }
++ if(r==WHOLE && (ss=='*')) {
++ return 0;
++ }
++ if(!ss || !tt) break;
++ if(r==WHOLE && (ss=='?')) {
++ continue;
++ }
++ if(ss!=tt) break;
++ }
++ } else {
++ for(; ; s++,t++,n--) {
++ ss = (*s);
++ tt = (*t);
++ if (n <= 0) tt = 0; /* string terminate 95.2.8 by T.Motoda */
++
++ if(r==SHORT && (ss=='*' || ss=='?')) {
++ return 0;
++ }
++ if(r==WHOLE && (ss=='*')) {
++ return 0;
++ }
++ if(!ss || !tt) break;
++ if(r==WHOLE && (ss=='?')) {
++ continue;
++ }
++ if(ss!=tt) break;
++ }
++ }
++ return ss-tt;
++}
++#endif
++
+ findentry_int(key,realkey,frm,env_p)
+ unsigned char *key,*realkey;
+ ENV *env_p;
+@@ -509,6 +557,9 @@
+ unsigned char frame[FRAMESIZE+2];
+ static char msg[32];
+ Dict *dict;
++#ifdef HALF
++ int CODE=dict_set[env_p->dict_num].code; /* FULL or HALF */
++#endif
+
+ dict=env_p->dict;
+
+@@ -542,12 +593,21 @@
+ putnstr(q,s);
+ printf("\n");
+ #endif
++#ifdef HALF
++ if(reg_jisstrnsub_(key,q,SHORT,s,CODE)<=0) {
++ findentry_int(key,realkey,FOURBYTEUINT(q+s),env_p);
++ }
++ if(reg_jisstrnsub_(key,q,SHORT,s,CODE)<0) {
++ return;
++ }
++#else
+ if(reg_jisstrnsub(key,q,SHORT,s)<=0) {
+ findentry_int(key,realkey,FOURBYTEUINT(q+s),env_p);
+ }
+ if(reg_jisstrnsub(key,q,SHORT,s)<0) {
+ return;
+ }
++#endif
+ }
+ }
+ else if(frame[1]==0) {
+@@ -625,7 +685,11 @@
+ putnstr(q,s);
+ #endif
+ if(!match) {
++#ifdef HALF
++ match=!reg_jisstrnsub_(realkey,q,WHOLE,s,CODE);
++#else
+ match=!reg_jisstrnsub(realkey,q,WHOLE,s);
++#endif
+ }
+ q+=s;
+ #ifdef DEBUG
+@@ -644,7 +708,11 @@
+ putnstr(q,s);
+ #endif
+ if(!match) {
++#ifdef HALF
++ match=!reg_jisstrnsub_(realkey,q,WHOLE,s,CODE);
++#else
+ match=!reg_jisstrnsub(realkey,q,WHOLE,s);
++#endif
+ }
+ #ifdef DEBUG
+ putchar('\n');
+--- server2.2-pl2/Makefile.orig Sat Aug 10 02:12:05 1996
++++ server2.2-pl2/Makefile Tue Jan 28 08:22:43 1997
+@@ -2,33 +2,39 @@
+ #CC=cc
+ CC=gcc
+
+-DSERVERTOPDIR=/usr/local/etc/dserverdir
++DSERVERTOPDIR=${PREFIX}/lib/dserver
+ #DSERVERTOPDIR=/nfs/home40/usui/dserver/server2.2-current/table
+-DICTROOT=/usr/local/dict
++DICTROOT=${PREFIX}/share/dict
+ ACCESSFILE=${DSERVERTOPDIR}/dserver_access
+
+-BINDIR=/usr/local/lib
++BINDIR=${PREFIX}/lib/dserver
++DOCDIR=${DSERVERTOPDIR}/doc
++LISPLIB=${PREFIX}/lib/mule/site-lisp
+ #LISPLIB=/usr/local/lib/Nemacs/lisp #usui
+
+ DEFS=-D'ACCESSFILE="$(ACCESSFILE)"' \
+--D'DSERVERTOPDIR="$(DSERVERTOPDIR)"'
++-D'DSERVERTOPDIR="$(DSERVERTOPDIR)"' -DHALF
+
+ # define AUTH for auth
+ # define DICLOOKUPMULE for mule
+-OFLAG=
+-CFLAGS= $(OFLAG) -DSTANDALONE $(DEFS) -DDEBUG -DSYSLOG
+-CFLAGS=-Dsparc $(OFLAG) -DSYSLOG -DSTANDALONE $(DEFS)
++OFLAG= -O -m486
++#CFLAGS= $(OFLAG) -DSTANDALONE $(DEFS) -DDEBUG -DSYSLOG
++#CFLAGS=-Dsparc $(OFLAG) -DSYSLOG -DSTANDALONE $(DEFS)
+ #CFLAGS=-Dsparc $(OFLAG) -DSYSLOG -DAUTH -DDICLOOKUPMULE -DSTANDALONE $(DEFS)
+-CFLAGS=-Dsparc $(OFLAG) -DSYSLOG -DSTANDALONE $(DEFS) -DDEBUG
++#CFLAGS=-Dsparc $(OFLAG) -DSYSLOG -DSTANDALONE $(DEFS) -DDEBUG
++CFLAGS= $(OFRAG) -DSTANDALONE -DSYSLOG $(DEFS)
+
+ #for solaris
+ #CFLAGS=-Dsolaris -Dsparc $(OFLAG) -DSYSLOG -DSTANDALONE $(DEFS)
+ #DFLAGS =-lsocket -lnsl -R/usr/ucblib -L/usr/ucblib -lucb
+
+-all: dserver
++all: dserver compress/makedic
+ dserver: $(OBJ)
+ $(CC) $(CFLAGS) -o dserver $(OBJ)
+
++compress/makedic:
++ (cd compress ; ${MAKE} all)
++
+ #dserver: $(OBJ)
+ # $(CC) $(CFLAGS) -o dserver $(OBJ) $(DFLAGS)
+
+@@ -39,4 +45,12 @@
+ lint -Dsparc -DSTANDALONE -DSYSLOG $(DEFS) *.c
+
+ install:
+- install -m 755 dserver $(BINDIR)
++ if [ ! -d ${DOCDIR} ] ; then mkdir -p ${DOCDIR} ; fi
++ if [ ! -d ${DICTROOT}/cdrom ] ; then mkdir -p ${DICTROOT}/cdrom ; fi
++ install -c -s -m 755 dserver $(BINDIR)
++ (cd compress ; ${MAKE} install)
++ cp table/*.tbl table/dserver_access ${DSERVERTOPDIR}
++ cat table/dserver_access | sed -e 's!PREFIX_DIR!${PREFIX}!g' > ${DSERVERTOPDIR}/dserver_access
++ cp CHANGES newfeature.doc ${DOCDIR}
++ cp README ${DOCDIR}/README.dserver
++ cp table/README ${DOCDIR}/README.table
+--- server2.2-pl2/subnet.c.orig Sat Aug 10 02:10:30 1996
++++ server2.2-pl2/subnet.c Tue Jan 28 08:22:43 1997
+@@ -1,6 +1,7 @@
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
++#include <sys/time.h>
+ #include <net/if.h>
+ #include <sys/ioctl.h>
+
+--- server2.2-pl2/table/dserver_access.orig Sat Aug 10 02:10:27 1996
++++ server2.2-pl2/table/dserver_access Tue Jan 28 08:22:43 1997
+@@ -1,14 +1,20 @@
+-#DICT kojien /usr/local/etc/CDdict/yrrs096/koujien/start. "広辞苑第4版" 1 600
+-##DICT eiwa /usr/local/etc/CDdict/yrrs118/chujiten/start. "研究社中英和" 25 600
+-##DICT eiwa /usr/local/etc/CDdict/yrrs118/chujiten/start.comp "研究社中英和" 25 600
+-##DICT eiwa /usr/local/etc/CDdict/yrrs009/eiwa/start.comp "研究社中英和" 25 600
+-##DICT waei /usr/local/etc/CDdict/yrrs118/chujiten/start.comp "研究社中和英" 25 600
+-#DICT waei /usr/local/etc/CDdict/cdchujiten/chujiten/data/honmon. "研究社中和英" 25 600
+-#DICT eiwa /usr/local/etc/CDdict/cdchujiten/chujiten/data/honmon. "研究社中和英" 25 600
+-#DICT CDkojien /usr/local/etc/CDdict/cdkouji/koujien/data/honmon. "広辞苑CD版" 1 600
+-#DICT readers /usr/local/etc/CDdict/yrrs172/readers/start. "リーダーズ英和" 1 600
+-#DICTROOT /usr/local/etc/CDdict 2 500
++#DICT kojien PREFIX_DIR/share/dict/cdrom/yrrs096/koujien/start "広辞苑第4版" 1 600
++#DICT kojien-furoku PREFIX_DIR/share/dict/cdrom/yrrs096/furoku/start "広辞苑第4版付録" 1 600
++#DICT waei PREFIX_DIR/share/dict/cdrom/cdchujiten/chujiten/data/honmon "研究社中和英" 25 600
++#DICT eiwa PREFIX_DIR/share/dict/cdrom/cdchujiten/chujiten/data/honmon "研究社中和英" 25 600
++#DICT readers PREFIX_DIR/share/dict/cdrom/yrrs172/readers/start "リーダーズ英和" 1 600
++#DICT crfre PREFIX_DIR/share/dict/cdrom/yrrs091/crfre/start "三省堂クラウン仏和" 1 600
++#DICT crger PREFIX_DIR/share/dict/cdrom/yrrs092/crger/start "三省堂クラウン独和" 1 600
++#DICT italian /usr/local/share/dict/cdrom/yrrs214/jiten/start "現代イタリア語表現辞典" 1 600
++#DICT italian-j /usr/local/share/dict/cdrom/yrrs214/jiten/start "現代イタリア語表現辞典" 1 600
++#DICT oxford /usr/local/share/dict/cdrom/san042/oxford/start "OxfordEnglishDictionary" 1 600
++#DICT CDkojien PREFIX_DIR/share/dict/cdrom/cdkouji/koujien/data/honmon "広辞苑CD版" 1 600
++#DICTROOT PREFIX_DIR/share/dict/cdrom 2 500
+ ## access controle
+ #
+-topics
++localhost
+ #
++##DICT eiwa PREFIX_DIR/share/dict/cdrom/yrrs118/chujiten/start "研究社中英和" 25 600
++##DICT waei PREFIX_DIR/share/dict/cdrom/yrrs118/chujiten/start "研究社中英和" 25 600
++##DICT eiwa PREFIX_DIR/share/dict/cdrom/yrrs118/chujiten/start.comp "研究社中英和" 25 600
++##DICT waei PREFIX_DIR/share/dict/cdrom/yrrs118/chujiten/start.comp "研究社中和英" 25 600
+--- server2.2-pl2/compress/Makefile.orig Sat Aug 10 02:10:29 1996
++++ server2.2-pl2/compress/Makefile Tue Jan 28 08:22:43 1997
+@@ -11,11 +11,15 @@
+ CFLAGS = -O -Wall
+ LFLAGS =
+
++
+ OBJ1 = main.o compress.o
+
+
+ OBJS = $(OBJ1)
+ PROG = makedic
++BINDIR = ${PREFIX}/bin
++
++all: $(PROG)
+
+ $(PROG) : $(OBJS)
+ $(CC) $(OBJS) $(LFLAGS) -o $(PROG)
+@@ -26,5 +30,8 @@
+ main.o : defs.h
+ comp.o : defs.h
+
++install: $(PROG)
++ install -s $(PROG) $(BINDIR)
++
+ clean:
+- rm -f *.o core makedic *~
++ rm -f *.o core makedic *~
+--- server2.2-pl2/compress/main.c.orig Sat Aug 10 02:10:30 1996
++++ server2.2-pl2/compress/main.c Tue Jan 28 08:22:43 1997
+@@ -3,6 +3,21 @@
+ by toshioji@darkover.iijnet.or.jp
+
+ dic version 0.24 cdio.c by kmiya さんを元に作成
++
++========== dic.man より引用開始 ==========
++DIC(1) Dic Users Manual DIC(1)
++
++
++DISTRIBUTION
++ このプログラムの改良 移植 転載 などは、 自由に行っても らっ
++ て結構です。 また、 作者に報告する必要もありません。
++
++ で き れば、改変された物であることの明記(どのバ−ジョンの
++ Dic をどのように変更したか)をしていただければ幸いです。
++
++ さらにソ−スコ−ドも同時に公開していただいてさらなる改良 が
++ 自由に 行われるようにすることを希望します。
++========== dic.man より引用終了 ==========
+ */
+
+ #include "defs.h"
+@@ -36,10 +51,95 @@
+ return 0;
+ }
+
++char ok(char *string)
++{
++ char key_buf[2];
++
++ fputs( string, stdout );
++ fgets( key_buf, 2, stdin );
++ return key_buf[0];
++}
++
++void caution(void)
++{
++
++ puts("<<<<<<<<< makedic を使われる前に※必ず※以下の内容を確認下さい。>>>>>>>>>
++
++これは dserver/server2.1/README「執筆 臼井 義比古@環境システム研究所」
++からライセンス関係の記述を抜きだしたものです。
++
++==================== dserver/server2.1/README ====================
++
++ ライセンスはちゃんと守って下さい,以下に三田吉郎<mita@jp.FreeBSD.org>
++ さんが調べて下さった文章を添付します.
++
++------------------------------------------------------------------------
++" );
++ ok( "<改行キーを押して下さい>" );
++
++ puts("
++ ライセンスについて 三田吉郎 <mita@jp.FreeBSD.org>
++
++ dserverは、8cmCDROM版研究社新英和・和英中辞典、岩波書店広辞苑を
++ 始めとする、電子ブックを読むことが出来ます。使用のたびにCDROMを
++ マウントすればよいのですが、例えばCDROM分離型のノートパソコンで
++ 辞書を使いたいなど、ハードディスクにデータをコピーして使いたいと
++ 思うかも知れません。市販の
++ 辞書をハードディスクにコピーすること、または圧縮された辞書としての使用
++ に関して問題があるかどうか、研究社と岩波書店とにお伺いしてみました(平
++ 成8年6月20日)。
++");
++ ok( "<改行キーを押して下さい>" );
++ puts("
++ 研究社の回答(電話03-3288-7777)
++ 個人として使用するかぎりにおいては、ハードディスクへのコピー、また
++ そのデータが圧縮されてたとしても使用して良い。ただし、LAN上で
++ 複数の端末で使用する場合は、別途端末の台数を申告していただき、
++ 端末台数×(CDROM一枚の価格−α)の値段を払う契約をしていただく。
++");
++ ok( "<改行キーを押して下さい>" );
++ puts("
++ 岩波書店辞典部の回答 (電話03-5210-4171)
++ CD-ROMドライブから読み出して使用することを前提としている。
++ ハードディスクへのコピーは避けていただきたい。
++ LAN上での使用の場合は、別途契約をしていただき、
++ ハードディスクへのコピーを許可している。ただしUNIX上の
++ サーバソフトに関しては把握していない。
++");
++ ok( "<改行キーを押して下さい>" );
++ puts("
++ dserverは、この他にもOEDや、科学技術用語辞典など、外字テーブルさえ
++ 用意すればほとんどのCDROMを読むことが出来ます。そのとき自分のローカル
++ ディスクにデータをコピーして使用して良いかは、各社対応が異なります。
++ 新しい辞書を使用する場合はまずライセンスを確認した後に使用することを
++ お勧めします。
++
++ ということですので、例えば新英和・和英中辞典に関しては個人のマシンの
++ ハードディスクにコピーすることは可能ですが、広辞苑に関してはLAN契約を
++ 結ばない限りハードディスクへのコピーをさけるのが良いようです。
++");
++ puts("------------------------------------------------------------------------
++以上
++");
++ switch( ok( "辞書を圧縮してハードディスクにコピーすることに
++ライセンス上の問題はありませんね[y/n] " ) ) {
++ case 'y':
++ case 'Y':
++ puts( "\n圧縮を開始します。\n" );
++ break;
++ default:
++ puts( "\nライセンス上の問題があるので中断しました\n" );
++ exit( -1 );
++ break;
++ }
++}
++
+ int main(int argc, char *argv[])
+ {
++ caution();
++
+ if( argc < 3 ) {
+- fprintf( stderr, "%s soce_filename dest_filename\n", argv[ 0 ] );
++ fprintf( stderr, "Usage: %s soce_filename dest_filename\n", argv[ 0 ] );
+ exit( -1 );
+ }
+
diff --git a/japanese/dserver/files/patch-ac b/japanese/dserver/files/patch-ac
new file mode 100644
index 000000000000..6e940c15d700
--- /dev/null
+++ b/japanese/dserver/files/patch-ac
@@ -0,0 +1,188 @@
+patch files for kenjiro
+--- clients/kenjiro/kenjiro.h.orig Tue Jun 27 01:21:31 1995
++++ clients/kenjiro/kenjiro.h Tue Jan 28 15:39:36 1997
+@@ -41,7 +41,7 @@
+ #define F(n) (1 << n)
+
+ typedef struct {
+- char name[10];
++ char name[16];
+ unsigned char prompt[25];
+ int inputmode;
+ int filter;
+--- clients/kenjiro/sub.c.orig Tue Jun 27 01:21:31 1995
++++ clients/kenjiro/sub.c Tue Jan 28 15:39:36 1997
+@@ -1,6 +1,11 @@
+ #include "kenjiro.h"
+
+ static int sttylevel = 0;
++#ifdef TERMIOS
++#include <termios.h>
++#include <unistd.h>
++static struct termios ttyorg, ttynew;
++#else /* TERMIOS */
+ #ifdef TERMIO
+ #include <termio.h>
+ #include <bsdtty.h>
+@@ -10,6 +15,7 @@
+ static struct tchars tcorg, tcnew;
+ #endif
+ static struct ltchars ltcorg, ltcnew;
++#endif /* TERMIOS */
+ int numk;
+ int mode;
+ int fd1 = 0;
+@@ -31,6 +37,26 @@
+ ttynew.c_cc[VQUIT] = 0;
+ if (ioctl(0, TCSETA, &ttynew) < 0) return;
+ #else
++# ifdef TERMIOS
++ if (tcgetattr(0, &ttyorg) < 0) return;
++ ttynew = ttyorg;
++ ttynew.c_lflag &= ~ECHO;
++ ttynew.c_lflag &= ~ICANON;
++ ttynew.c_cc[VMIN] = 1;
++ ttynew.c_cc[VTIME] = 0;
++ ttynew.c_cc[VQUIT] = 0;
++ ttynew.c_cc[VLNEXT] = _POSIX_VDISABLE;
++#if defined(VDSUSP)
++ ttynew.c_cc[VDSUSP] = _POSIX_VDISABLE;
++#else /* VDSUSP */
++# if defined(VEOL)
++ ttynew.c_cc[VEOL] = _POSIX_VDISABLE;
++# endif /* VEOL */
++#endif /* VDSUSP */
++ sttylevel++;
++ if (tcsetattr(0, TCSANOW, &ttynew) < 0) return;
++ sttylevel++;
++# else /* TERMIOS */
+ if (ioctl(0, TIOCGETP, &ttyorg) < 0) return;
+ ttynew = ttyorg;
+ ttynew.sg_flags |= CBREAK;
+@@ -41,7 +67,9 @@
+ tcnew = tcorg;
+ tcnew.t_quitc = -1;
+ if (ioctl(0, TIOCSETC, &tcnew) < 0) return;
++# endif /* TERMIOS */
+ #endif
++#ifndef TERMIOS
+ sttylevel++;
+ if (ioctl(0, TIOCGLTC, &ltcorg) < 0) return;
+ ltcnew = ltcorg;
+@@ -49,6 +77,7 @@
+ ltcnew.t_dsuspc = -1;
+ if (ioctl(0, TIOCSLTC, &ltcnew) < 0) return;
+ sttylevel++;
++#endif /* TERMIOS */
+ }
+
+ void romakana_fixtty()
+@@ -60,12 +89,18 @@
+ case 1:
+ ioctl(0, TCSETA, &ttyorg);
+ #else
++# ifdef TERMIOS
++ case 2:
++ case 1:
++ tcsetattr(0, TCSANOW, &ttyorg);
++# else /* TERMIOS */
+ case 3:
+ ioctl(0, TIOCSLTC, &ltcorg);
+ case 2:
+ ioctl(0, TIOCSETC, &tcorg);
+ case 1:
+ ioctl(0, TIOCSETP, &ttyorg);
++# endif /* TERMIOS */
+ #endif
+ }
+ }
+@@ -128,7 +163,7 @@
+
+ void getttyval()
+ {
+-#ifdef TERMIO
++#if defined(TERMIO) || defined(TERMIOS)
+ struct winsize ws;
+
+ ioctl(0, TIOCGWINSZ, &ws);
+--- clients/kenjiro/config.h.orig Tue Jun 27 01:21:34 1995
++++ clients/kenjiro/config.h Tue Jan 28 15:39:36 1997
+@@ -1,7 +1,7 @@
+-#define PAGER "/usr/local/bin/less" /* pager program */
++#define PAGER "/usr/local/bin/jless" /* pager program */
+ #define HISTSIZE 20 /* history size */
+ #define KOUHO 10 /* number of kouho (0 < n <= 10) */
+-#define SERVER "dserver" /* hostname with server */
++#define SERVER "localhost" /* hostname with server */
+ #define SERVICE "ndtp" /* service name */
+ #define KANJICODE JIS /* default kanji code (JIS,EUC,SJIS)*/
+ /*#define PORT 2010*/ /* port of service */
+@@ -15,6 +15,9 @@
+ { "eiwa" , "研究社英和" , ENG , },
+ { "waei" , "研究社和英" , JPN , },
+ { "kojien" , "広辞苑" , JPN , },
++ { "kojien-furoku" , "広辞苑付録", JPN , },
+ { "CDkojien" , "CD広辞苑" , JPN , },
+- { "readers" , "リーダーず英和" , ENG , },
++ { "readers" , "リーダーズ英和" , ENG , },
++ { "crfre" , "三省堂クラウン仏和" , ENG , },
++ { "crger" , "三省堂クラウン独和" , ENG , },
+ };
+--- clients/kenjiro/Makefile.orig Tue Jun 27 01:21:31 1995
++++ clients/kenjiro/Makefile Tue Jan 28 15:39:36 1997
+@@ -1,5 +1,6 @@
+-CFLAGS = -O # for termcap
++#CFLAGS = -O # for termcap
+ #CFLAGS = -O -DTERMIO # for termio
++CFLAGS = -O -DTERMIOS # for termios
+
+ # if you have no bcopy sigmask sigblock (e.g. on Solaris 2.x)
+ # define NO_BCOPY NO_SIGMASK NO_SIGBLOCK like
+@@ -15,6 +16,11 @@
+
+ all: kenjiro kenjiro.l
+
++install: all
++ gzip -9Nf kenjiro.l
++ install -s kenjiro ${PREFIX}/bin/
++ install kenjiro.l.gz ${PREFIX}/man/manl/
++
+ kenjiro: $(OBJS)
+ $(CC) $(CFLAGS) -o kenjiro $(OBJS) $(LIBS)
+
+@@ -30,6 +36,6 @@
+ ln -s filter.c.euc filter.c
+
+ clean:
+- rm -f *.o *.out kenjiro.l kenjiro core typescript
++ rm -f *.o *.out kenjiro.l* kenjiro core typescript
+
+ # DO NOT DELETE
+--- clients/diclookup-mule-2.3.0/Makefile.orig Mon Jul 24 16:01:57 1995
++++ clients/diclookup-mule-2.3.0/Makefile Tue Jan 28 15:39:36 1997
+@@ -1,13 +1,13 @@
+ EMACS = mule
+
+-LISPDIR = /usr/local/lib/mule/site-lisp
++LISPDIR = ${PREFIX}/lib/mule/site-lisp
+
+ RM = rm -f
+
+ UTILS = cclc.elc
+
+ ELCS = diclookup-mule.elc \
+- od-eiwa.elc od-chujiten.elc od-kojien.elc
++ od-eiwa.elc od-chujiten.elc od-kojien.elc od-crown.elc od-oxford.elc od-italian.elc od-readers.elc
+
+ PROGRAMS = $(UTILS) $(ELCS)
+
+@@ -19,7 +19,9 @@
+ all: $(PROGRAMS)
+
+ install: $(ELCS)
++ cp *.el $(LISPDIR)
+ cp $(ELCS) $(LISPDIR)
++ cp README ${PREFIX}/lib/dserver/doc/README.diclookup-mule
+
+ clean:
+ $(RM) $(PROGRAMS)
diff --git a/japanese/dserver/files/setup.sh.inetd b/japanese/dserver/files/setup.sh.inetd
new file mode 100644
index 000000000000..43e9aaff3bcb
--- /dev/null
+++ b/japanese/dserver/files/setup.sh.inetd
@@ -0,0 +1,139 @@
+#!/bin/sh
+echo "You have to do 5 things before using dserver via inetd."
+echo "1. Add 'ndtp 2010/tcp' to /etc/services."
+echo "2. Add 'ndtp stream tcp nowait root /usr/local/lib/dserver dserver'"
+echo " to /etc/inetd.conf"
+echo "3. Add startup configration of mule-client to site-start.el."
+echo "4. Restart inetd by 'kill -HUP `cat /var/run/inetd.pid`'."
+echo "5. Mount cdrom (or copy files) to PREFIX_DIR/dict/dserver/cdrom/."
+
+# Hack /etc/services
+echo
+echo "Updating /etc/services";
+cp /etc/services /etc/services.bak;
+(grep -v ndtp /etc/services.bak ; echo "ndtp 2010/tcp # Network Dictionary Transfer Protocol") > /tmp/services
+echo "Do you like to update /etc/services automatically? (y/n) [y]" ;
+read ans;
+case x${ans} in
+ xn*|xN*)
+ echo "Do you like to change /etc/services file by yourself? (y/n) [y]" ;
+ read choice ;
+ case x${choice} in
+ xn*|xN*)
+ echo "Okay, do nothing.";;
+ *)
+ echo "Edit /etc/services file by yourself (Press Return)";
+ read dummy;
+ vi -c /ndtp /tmp/services;
+ cp /tmp/services /etc/services; rm /tmp/services ;;
+ esac ;;
+ *)
+ echo "original file is saved in /etc/services.bak" ;
+ cp /tmp/services /etc/services; rm /tmp/services ;;
+esac
+
+# Hack /etc/inetd.conf
+echo
+echo "Updating /etc/inetd.conf";
+cp /etc/inetd.conf /etc/inetd.conf.bak;
+(grep -v ndtp /etc/inetd.conf.bak ; echo "ndtp stream tcp nowait root /usr/local/lib/dserver/dserver dserver") > /tmp/inetd.conf
+echo "Do you like to update /etc/inetd.conf automatically? (y/n) [y]" ;
+read ans;
+case x${ans} in
+ xn*|xN*)
+ echo "Do you like to change /etc/inetd.conf file by yourself? (y/n) [y]" ;
+ read choice ;
+ case x${choice} in
+ xn*|xN*)
+ echo "Okay, do nothing.";;
+ *)
+ echo "Edit /etc/inetd.conf file by yourself (Press Return)";
+ read dummy;
+ vi -c /ndtp /tmp/inetd.conf;
+ cp /tmp/inetd.conf /etc/inetd.conf; rm /tmp/inetd.conf ;;
+ esac ;;
+ *)
+ echo "original file is saved in /etc/inetd.conf.bak" ;
+ cp /tmp/inetd.conf /etc/inetd.conf; rm /tmp/inetd.conf ;;
+esac
+
+echo "Do you want to restart inetd right now? (y/n) [y]" ;
+read ans;
+case x${ans} in
+ xn*|xN*)
+ echo "Remember to restart inetd (or reboot)."
+ ;;
+ *)
+ echo "Restart inetd."
+ kill -HUP `cat /var/run/inetd.pid`
+ ;;
+esac
+
+# Hack PREFIX_DIR/lib/mule/site-lisp/site-start.el
+rm -f /tmp/hack-site-start.el
+echo "(defun hack-site-start ()" >> /tmp/hack-site-start.el
+echo " (interactive)" >> /tmp/hack-site-start.el
+echo " (message \"Updating site-start.el. \")" >> /tmp/hack-site-start.el
+echo " (let* ((args command-line-args-left)" >> /tmp/hack-site-start.el
+echo " (fname (expand-file-name (nth 0 args)))" >> /tmp/hack-site-start.el
+echo " (dir (nth 1 args)))" >> /tmp/hack-site-start.el
+echo " (setq command-line-args-left (cdr (cdr command-line-args-left)))" >> /tmp/hack-site-start.el
+echo " (set-buffer (get-buffer-create \" *x*\"))" >> /tmp/hack-site-start.el
+echo " (erase-buffer)" >> /tmp/hack-site-start.el
+echo " (if (file-exists-p fname)" >> /tmp/hack-site-start.el
+echo " (insert-file-contents fname))" >> /tmp/hack-site-start.el
+echo " (goto-char (point-min))" >> /tmp/hack-site-start.el
+echo " (if (search-forward \";;; diclookup-mule: Online dictionary\" nil t)" >> /tmp/hack-site-start.el
+echo " (message \"No changes made.\")" >> /tmp/hack-site-start.el
+echo " (goto-char (point-max))" >> /tmp/hack-site-start.el
+echo " (insert \"\n;;; diclookup-mule: Online dictionary\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(autoload 'online-dictionary \\\"diclookup-mule\\\" \")" >> /tmp/hack-site-start.el
+echo " (insert \"\\\"Online dictionary.\\\" t nil)\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(autoload 'od:lookup-pattern-edit \\\"diclookup-mule\\\" \")" >> /tmp/hack-site-start.el
+echo " (insert \"\\\"Look up a word.\\\" t nil)\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(setq od-chujiten-flag t) ; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(setq od-dictfile-list '(\\\"od-chujiten\\\" \\\"od-kojien\\\" \\\"od-readers\\\" \\\"od-crown\\\")) \")" >> /tmp/hack-site-start.el
+echo " (insert \"; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(setq dserver-server-list '(\\\"localhost\\\")) ; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(setq od-frame-geometry \\\"+0-0\\\" od-hide-frame \")" >> /tmp/hack-site-start.el
+echo " (insert \"'make-invisible) ; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(add-hook 'od-really-quit-hook 'od-delete-frame) \")" >> /tmp/hack-site-start.el
+echo " (insert \"; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(define-key-after menu-bar-file-menu [dictionary] \")" >> /tmp/hack-site-start.el
+echo " (insert \"; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \" '(\\\"Online Dictionary\\\" . online-dictionary) 'calendar) \")" >> /tmp/hack-site-start.el
+echo " (insert \"; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (write-file fname))))" >> /tmp/hack-site-start.el
+
+# Hack site-start.el
+echo
+echo "Updating PREFIX_DIR/lib/mule/site-lisp/site-start.el";
+cp PREFIX_DIR/lib/mule/site-lisp/site-start.el PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak
+
+echo "Do you like to update site-start.el automatically? (y/n) [y]" ;
+read ans;
+case x${ans} in
+ xn*|xN*)
+ echo "Do you like to change site-start.el file by yourself?(y/n) [y]" ;
+ read choice ;
+ case x${choice} in
+ xn*|xN*)
+ echo "Okay, Do nothing."
+ rm -f PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak ;;
+ *)
+ mule -batch -q -l /tmp/hack-site-start.el -f hack-site-start \
+ PREFIX_DIR/lib/mule/site-lisp/site-start.el ;
+ echo "Edit site-start.el file by yourself (Press Return)";
+ read dummy;
+ vi -c /diclookup PREFIX_DIR/lib/mule/site-lisp/site-start.el ;
+ echo "original file is saved in PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak";;
+ esac;;
+ *)
+ mule -batch -q -l /tmp/hack-site-start.el -f hack-site-start \
+ PREFIX_DIR/lib/mule/site-lisp/site-start.el ;
+ echo "original file is saved in PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak" ;;
+esac
+rm -f /tmp/hack-site-start.el
+
+echo "Now startup configuration is done."
+echo "Remember to mount cdrom to PREFIX_DIR/dict/dserver/cdrom."
diff --git a/japanese/dserver/files/setup.sh.standalone b/japanese/dserver/files/setup.sh.standalone
new file mode 100644
index 000000000000..be3579465b35
--- /dev/null
+++ b/japanese/dserver/files/setup.sh.standalone
@@ -0,0 +1,136 @@
+#!/bin/sh
+echo "You have to do 4 things before using dserver."
+echo "1. Add 'ndtp 2010/tcp' to /etc/services."
+echo "2. Add startup command of dserver to PREFIX_DIR/etc/rc.d/"
+echo "3. Add startup configration of mule-client to site-start.el."
+echo "4. Mount cdrom (or copy files) to PREFIX_DIR/dict/dserver/cdrom/."
+
+# Hack /etc/services
+echo
+echo "Updating /etc/services";
+cp /etc/services /etc/services.bak;
+(grep -v ndtp /etc/services.bak ; echo "ndtp 2010/tcp # Network Dictionary Transfer Protocol") > /tmp/services
+echo "Do you like to update /etc/services automatically? (y/n) [y]" ;
+read ans;
+case x${ans} in
+ xn*|xN*)
+ echo "Do you like to change /etc/services file by yourself? (y/n) [y]" ;
+ read choice ;
+ case x${choice} in
+ xn*|xN*)
+ echo "Okay, do nothing.";;
+ *)
+ echo "Edit /etc/services file by yourself (Press Return)";
+ read dummy;
+ vi -c /ndtp /tmp/services;
+ cp /tmp/services /etc/services; rm /tmp/services ;;
+ esac ;;
+ *)
+ echo "original file is saved in /etc/services.bak" ;
+ cp /tmp/services /etc/services; rm /tmp/services ;;
+esac
+
+# Add startup shell script to PREFIX_DIR/etc/rc.d
+echo
+echo "Adding startup shell script to PREFIX_DIR/etc/rc.d/"
+echo "Do you like to add startup shell script automatically? (y/n) [y]" ;
+(echo "# dserver - dictionary server" ;
+ echo "if [ -x PREFIX_DIR/lib/dserver/dserver ] ; then" ;
+ echo " PREFIX_DIR/lib/dserver/dserver &" ;
+ echo " echo -n ' dserver'" ;
+ echo "fi") > /tmp/dserver.sh
+read ans;
+case x${ans} in
+ xn*|xN*)
+ echo "Do you like to edit PREFIX_DIR/etc/rc.d/dserver.sh file by yourself? (y/n) [y]" ;
+ read choice ;
+ case x${choice} in
+ xn*|xN*)
+ echo "Okay, do nothing."
+ echo "rm /tmp/dserver.sh"
+ ;;
+ *)
+ echo "Edit dserver.sh file by yourself (Press Return)";
+ read dummy;
+ vi /tmp/dserver.sh;
+ cp /tmp/dserver.sh PREFIX_DIR/etc/rc.d/
+ chmod 755 PREFIX_DIR/etc/rc.d/dserver.sh
+ rm /tmp/dserver.sh
+ ;;
+ esac
+ ;;
+ *)
+ cp /tmp/dserver.sh PREFIX_DIR/etc/rc.d/
+ chmod 755 PREFIX_DIR/etc/rc.d/dserver.sh
+ rm /tmp/dserver.sh
+ echo "dserver.sh is added to PREFIX_DIR/etc/rc.d/"
+esac
+
+# Hack PREFIX_DIR/lib/mule/site-lisp/site-start.el
+rm -f /tmp/hack-site-start.el
+echo "(defun hack-site-start ()" >> /tmp/hack-site-start.el
+echo " (interactive)" >> /tmp/hack-site-start.el
+echo " (message \"Updating site-start.el. \")" >> /tmp/hack-site-start.el
+echo " (let* ((args command-line-args-left)" >> /tmp/hack-site-start.el
+echo " (fname (expand-file-name (nth 0 args)))" >> /tmp/hack-site-start.el
+echo " (dir (nth 1 args)))" >> /tmp/hack-site-start.el
+echo " (setq command-line-args-left (cdr (cdr command-line-args-left)))" >> /tmp/hack-site-start.el
+echo " (set-buffer (get-buffer-create \" *x*\"))" >> /tmp/hack-site-start.el
+echo " (erase-buffer)" >> /tmp/hack-site-start.el
+echo " (if (file-exists-p fname)" >> /tmp/hack-site-start.el
+echo " (insert-file-contents fname))" >> /tmp/hack-site-start.el
+echo " (goto-char (point-min))" >> /tmp/hack-site-start.el
+echo " (if (search-forward \";;; diclookup-mule: Online dictionary\" nil t)" >> /tmp/hack-site-start.el
+echo " (message \"No changes made.\")" >> /tmp/hack-site-start.el
+echo " (goto-char (point-max))" >> /tmp/hack-site-start.el
+echo " (insert \"\n;;; diclookup-mule: Online dictionary\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(autoload 'online-dictionary \\\"diclookup-mule\\\" \")" >> /tmp/hack-site-start.el
+echo " (insert \"\\\"Online dictionary.\\\" t nil)\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(autoload 'od:lookup-pattern-edit \\\"diclookup-mule\\\" \")" >> /tmp/hack-site-start.el
+echo " (insert \"\\\"Look up a word.\\\" t nil)\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(setq od-chujiten-flag t) ; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(setq od-dictfile-list '(\\\"od-chujiten\\\" \\\"od-kojien\\\" \\\"od-readers\\\" \\\"od-crown\\\")) \")" >> /tmp/hack-site-start.el
+echo " (insert \"; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(setq dserver-server-list '(\\\"localhost\\\")) ; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(setq od-frame-geometry \\\"+0-0\\\" od-hide-frame \")" >> /tmp/hack-site-start.el
+echo " (insert \"'make-invisible) ; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(add-hook 'od-really-quit-hook 'od-delete-frame) \")" >> /tmp/hack-site-start.el
+echo " (insert \"; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \"(define-key-after menu-bar-file-menu [dictionary] \")" >> /tmp/hack-site-start.el
+echo " (insert \"; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (insert \" '(\\\"Online Dictionary\\\" . online-dictionary) 'calendar) \")" >> /tmp/hack-site-start.el
+echo " (insert \"; diclookup-mule\n\")" >> /tmp/hack-site-start.el
+echo " (write-file fname))))" >> /tmp/hack-site-start.el
+
+# Hack site-start.el
+echo
+echo "Updating PREFIX_DIR/lib/mule/site-lisp/site-start.el";
+cp PREFIX_DIR/lib/mule/site-lisp/site-start.el PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak
+
+echo "Do you like to update site-start.el automatically? (y/n) [y]" ;
+read ans;
+case x${ans} in
+ xn*|xN*)
+ echo "Do you like to change site-start.el file by yourself?(y/n) [y]" ;
+ read choice ;
+ case x${choice} in
+ xn*|xN*)
+ echo "Okay, Do nothing."
+ rm -f PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak ;;
+ *)
+ mule -batch -q -l /tmp/hack-site-start.el -f hack-site-start \
+ PREFIX_DIR/lib/mule/site-lisp/site-start.el ;
+ echo "Edit site-start.el file by yourself (Press Return)";
+ read dummy;
+ vi -c /diclookup PREFIX_DIR/lib/mule/site-lisp/site-start.el ;
+ echo "original file is saved in PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak";;
+ esac;;
+ *)
+ mule -batch -q -l /tmp/hack-site-start.el -f hack-site-start \
+ PREFIX_DIR/lib/mule/site-lisp/site-start.el ;
+ echo "original file is saved in PREFIX_DIR/lib/mule/site-lisp/site-start.el.bak" ;;
+esac
+rm -f /tmp/hack-site-start.el
+
+echo "Now startup configuration is done."
+echo "Remember to mount cdrom to PREFIX_DIR/dict/dserver/cdrom."