JyAM's BSD: NetBSD-1.6.1 System on AT Installation, Leg #4


4th Leg. 日本語の入力と編集

日本語文章を処理するために必要なソフトウェアをインストールする。 Wnnは定番となっている「かな漢字変換サーバー」である。 Muleは「たまご」からWnnを利用して日本語の入力を行う. 日本語の表示や編集が可能になるように機能が拡張されたEmacsである。 Wnnはソースコード修正したtarballを使用したので手間いらずだが, コンパイル作業は省略不可.

■ SS1: Wnn-4.2 (4.4BSD correction)

ソースコードを展開.

	tar zxvf Wnn.4.2.tar.gz

Xsiディレクトリに入って,FreeBSD用のpatchを当てる.

	zcat Wnn42.patch.gz | patch -p0

configディレクトリへ入り,Wnn4.2をX11R6.3でコンパイルするためのX11.tmplを作成する.

	Project.tmplの1088行目以降を切り出し,`$$imakefprefix'を
	 `$(IMAKEPREFIX)'と修正する(4箇所).

	/usr/X11R6/lib/X11/config/X11/X11.tmplをconfigディレクトリにコピーし,
	修正した内容を末尾に付け加える.
		cp /usr/X11R6/lib/X11/config/X11/X11.tmpl .
		chmod 644 X11.tmpl

	INSTAPPFLAGSの上に3行追加.FreeBSD用のpatchを当てたProject.tmplから
	該当行をコピーしてくるのが簡単.

	BuildJlibV3をYESに変更する.

Wnn/jlib.V3/Imakefileを修正する.

	SRC4= $(WNNETCSRC)/xutoj.c
	OBJ4= xutoj.o
	SRCS= ..... $(SRC4)
	OBJS= ..... $(OBJ4)

	InstallNonExecFileの`$(WNNINCLUDESRC)/'を削除する.

	WnnSpecialObjectRule($(OBJ4), $(SRC4), $(WNNETCSRC))を追加する.

uumディレクトリのImakefileを修正.

	SRC1= ....
	OBJ1= ....

の部分からsetutmp.cとsetutmp.oを削除する.

Xsi/Wnn/uum/jhlp.c

	次の部分をコメントアウトする.
	265 - 269行 
		#if defined(BSD42) && !defined(DGUX)
    			if (saveutmp() < 0) {
        		 	puts("Can't save utmp\n");
    			}
		#endif /* BSD42 */

	1143-1146 行 
		if (setutmp(ttypfd) == ERROR) {
			puts("Can't set utmp.");
		}

	1565-1567 行 
		if (resetutmp(ttypfd) == ERROR) {
			printf("Can't reset utmp.");
		}

Xsi/config/X11.tmpl

	1250行付近 
		WNNINCDIR = $(INCROOT)
		WNNLIBDIR = $(USRLIBDIR)
	を次のように変更 
		WNNINCDIR = /usr/local/include
		WNNLIBDIR = /usr/local/lib

Xsi/Wnn/jlib/js.c

	221行 
		if (connect(sd,(caddr_t)&saddr,
		strlen(saddr.sun_path)+sizeof(saddr.sun_family)) == ERROR){

		if (connect(sd,(caddr_t)&saddr,SUN_LEN(&saddr)) == ERROR) {
	に変更

Xsi/Wnn/jserver/de.c

	66行め
		#include <sys/ioctl.h> 

		#include <sys/ioctl.h>  
		#include <sys/param.h>
	と追加.
	266行目 
                if(!noisy){
                        fclose(stderr);  
                }

		if(!noisy){
                        int fd;
                        if ((fd = open("/dev/null", O_WRONLY)) < 0) {
                                xerror("Cannot open /dev/null\n");
                        }
                        dup2(fd, 2);
                        close(fd);
                }
	と追加

Xsi/Wnn/jserver/readfile.c

	425行 
		jt2 = (struct JT *)malloc(sizeof(struct JT));
        	*jt2 = *jt1;                                      

		jt2 = (struct JT *)malloc(sizeof(struct JT));
        	*jt2 = *jt1;                                      
        	jt2->node = 0;
	を追加

Xsi/Wnn/jserver/b_index.c

	100行目 
		/** For each tuple in ri1[0] create b_nodes */
                for (i=0; imaxri1[0]; i++){
                    serial = (jt->ri1[0]+i)->pter;
                    yomi = KANJI_str(jt->ri2[serial].kanjipter + jt->kanji,0);
		    b_index_add(jt, yomi, serial);
		}

                /** For each tuple in ri1[0] create b_nodes */
                for (i=0; imaxri1[0]; i++){
                    serial = (jt->ri1[0]+i)->pter;
                    yomi = KANJI_str(ntohs(jt->ri2[serial].kanjipter)+ jt->kanji, 0);                    
                    b_index_add(jt, yomi, serial);
                }

	133行目 
		int   serial;
		{
        	    w_char *yomi;
        	    yomi = KANJI_str(jt->ri2[serial].kanjipter + jt->kanji,0);
        	    delete_b_node(jt, yomi, 0, 0 );
		} 

		int   serial;
		{
		    w_char *yomi; 
		    yomi = KANJI_str(ntohs(jt->ri2[serial].kanjipter)
			 + jt->kanji, 0);
		    delete_b_node(jt, yomi, 0, 0 );
		} 
	に変更.

	162行
		yo_kanji = KANJI_str( 
                jt->ri2[jt->bind[tmp_node].pter].kanjipter+jt->kanji,0);

		yo_kanji = KANJI_str(
                ntohs(jt->ri2[jt->bind[tmp_node].pter].kanjipter)+jt->kanji,0);
	に変更.

	218行 
		yo_kanji = KANJI_str(
                jt->ri2[jt->bind[tmp_node].pter].kanjipter+jt->kanji, 0);


		yo_kanji = KANJI_str(
		ntohs(jt->ri2[jt->bind[tmp_node].pter].kanjipter)+jt->kanji,0);
	に変更.

Xsi/config/X11.tmplを/usr/X11R6/lib/X11/config/にコピーする.

Xsiディレクトリでgmake World -f Makefile.instを実行する. エラーが出るのでjserver/Makefileとuum/Makefile,jutil/Makefileの739行目を

	LDPRELIBS=-L$(USRLIBDIR) -lcrypt

と修正する.

ユーザwnnを登録する.

	su
	vipw
	wnn:*:9000:7::0:0:Jserver::

suでgmake install; gmake install.manを実行する.

/etc/rc.local に追加します。

	if [ -f /usr/local/bin/Wnn4/jserver ]; then
        	/usr/local/bin/Wnn4/jserver
        	echo 'jserver started.'
	fi

jserverの終了はwnnkillコマンド。

jserverのホスト名を環境変数JSERVERに設定しておく.

	setenv JSERVER ホスト名

termcapを修正し,ktermでuumを起動し,jserverが正常に動作しているかを確認する.

■ SS2: Mule-2.3-Emacs-19.34b (NetBSD-1.5 ELF)

Mule-2.3 (最終版?)をインストールした.Mule-2.2とくらべて,

という特徴があるのでMule-2.2から上げる価値大.

必要なtarballその他.

	emacs-19.34b.tar.gz
	mule-23-1934-alpha01.diff.gz
	mule-2.3-19.34.patch-981002.tar.gz
	netbsd.h.patch

ソースコードを展開.

	tar zxvf emacs-19.34b.tar.gz
	gzip -d mule-23-1934-alpha01.diff.gz
	tar zxvf mule-2.3-19.34.patch-981002.tar.gz
	    takana-19.34.tar.gzが出てくるのでこれも展開.
	        tar zxvf takana-19.34.tar.gz

パッチを当てる.

	cp lisp/its/* emacs-19.34/lisp/its
	cd emacs-19.34
	patch -p1 < ../mule-23-1934-alpha01.diff
	patch -p0 < ../patch-19.34
	patch -p0 < ../Mule-2.3.19.34.patch

lipsディレクトリでもパッチを当てる.

	cd lisp
	patch -p1 < ../../mew/egg.el-19.34.patch-for-katayama
	cd ..
	patch -p0 < ../netbsd.h.patch

WNN 4.2のlibwnn.aがライブラリパスに含まれていることと, /usr/local/lib/wnnがインクルードパスに含まれていることを確認する. それぞれを/usr/lib, /usr/includeにコピーするのが手っ取り早い:-)

./configure i386--netbsd --with-x-toolkit --wnn

--with--wnn4 としてはだめ.gmake MAKE=gmakeを実行する.約3分かかる。

/usr/local/binでemacsをEmacsにmv.suでgmake installを実行.

このままではネットワークに接続されていない時muleの起動が遅いので、 namedによる名前の検索がタイムアウトするまで待たなくても 自分のホスト名とアドレスがわかるように/etc/hostsに記述する。

ネットワークに接続されていない時、muleがwnnを起動にいって固まる場合が有るので、 wnn-serverが自ホストで動いている場合``jserver"というホスト名を/etc/hostsに記述する。

Mule

  • [netbsd,06724] mule-2.3(based on Emacs 19.34)
  • UK Mirror Service: sites/ftp.freebsd.org/pub/FreeBSD/ports/distfiles/mule-2.3-19.34.patch-981002.tar.gz
  • mule
  • Mule/Emacs 20
  • The NetBSD Packages Collection: editors/mule

  • BSDのTopへ戻る