namazu-ml(avocado)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
patch for kakasi-2.2.5 on OS/2 (and Win32)
- From: Kaz SHiMZ <kshimz@xxxxxxxxx>
- Date: Mon, 23 Feb 1998 13:03:14 +0900
- X-ml-name: namazu
- X-mail-count: 00241
清水@住友林業です。
掲題の件ですが、OS/2 では標準でシンボリックリンクなどという高級な
機能がなく、また、UNIX と違って「ドライブレター」という概念があり
ます。このため、kanwadict / itaijidict のファイル位置を
/usr/local/lib/kakasi/kanwadict
などとハードコーディングしたままだと、kakaksi の実行時のカレント
ドライブ上に
\usr\local\lib\kakasi\kanwadict
という位置に辞書を置くか、あるいは kakasi のオプションでフルパス
で位置を指定する必要があります。
で、OS/2 のユーザーってのは、たいてい、FAT のドライブと HPFS の
ドライブを使い分ける(DOS / Windows * とデータを共用するため)
傾向がありまして、カレントドライブがどこであっても、特定のドライ
ブにある辞書ファイルを参照するようになっていると、非常に嬉しい事
になります。(さもなくば、使い勝手があまりよくない)
これは、たぶん Win32 環境でも同じだと思います。
# うーみゅ、前置きが長い :-)
で、発想が安直ですが、辞書ファイルの位置を環境変数から取得できる
ようにしてみました。参照順は、
1. 環境変数 KANWADICTPATH / ITAIJIDICTPATH
2. 環境変数 KANWADICT / ITAIJIDICT
3. make 時に指定された位置
となっています。最後に オリジナルの dict.c / itaiji.c との diff を
付けます。OS/2 では、これで make された kakasi.exe を path の通った
ディレクトリに置いておけば、ドライブレターやカレントディレクトリを
気にすることなく、どこからでも kakasi を起動できるようになりました。
ちなみに、OS/2 の emx gcc でコンパイルした場合には、
SET KANWADICTPATH=d:/usr/local/lib/kakasi/kanwadict
SET KANWADICTPATH=d:\usr\local\lib\kakasi\kanwadict
のどちらの設定でもOKでした。
たぶん Win32 でも getenv まわりの書式が同じであればそのまま使えるの
ではないかと思います。
興味がある方は on your own risk でご利用ください。
----
%diff -c src.orig/dict.c os2src/dict.c
*** src.orig/dict.c Sun Jun 19 17:05:46 1994
--- os2src/dict.c Mon Feb 23 12:13:06 1998
***************
*** 28,34 ****
--- 28,38 ----
#include <stdio.h>
#include <ctype.h>
#include <string.h>
+ #ifdef emx
+ #include <stdlib.h>
+ #else
#include <malloc.h>
+ #endif
#include "kakasi.h"
#include "J2.h"
***************
*** 181,187 ****
int tail;
extern char *ialloc();
! if ((jisyo_fp = fopen(filename, "r")) == NULL) {
perror(filename);
exit(0);
}
--- 185,191 ----
int tail;
extern char *ialloc();
! if ((jisyo_fp = fopen(filename, "rb")) == NULL) {
perror(filename);
exit(0);
}
***************
*** 246,259 ****
void init_kanwa()
{
int i, j;
! if ((kanwadict = fopen(KANWADICT,"r")) == NULL) {
! perror(KANWADICT);
exit(2);
}
if (fread((char *)kanwa, sizeof kanwa, 1, kanwadict) != 1) {
! perror(KANWADICT);
}
for (i = 0; i < 0x80; ++ i)
--- 250,271 ----
void init_kanwa()
{
int i, j;
+
+ char *kanwadictpath;
+
+ kanwadictpath = getenv("KANWADICTPATH");
+ if (kanwadictpath == NULL)
+ kanwadictpath = getenv("KANWADICT");
+ if (kanwadictpath == NULL)
+ kanwadictpath = KANWADICT;
! if ((kanwadict = fopen(kanwadictpath,"rb")) == NULL) {
! perror(kanwadictpath);
exit(2);
}
if (fread((char *)kanwa, sizeof kanwa, 1, kanwadict) != 1) {
! perror(kanwadictpath);
}
for (i = 0; i < 0x80; ++ i)
%diff -c src.orig/itaiji.c os2src/itaiji.c
*** src.orig/itaiji.c Sun Jun 19 17:05:32 1994
--- os2src/itaiji.c Mon Feb 23 12:13:00 1998
***************
*** 43,54 ****
int i, j;
char buffer[BUFSIZE];
unsigned char n1, n2, o1, o2;
! if ((fp = fopen(ITAIJIDICT, "r")) == NULL) {
fprintf(stderr, "Can't open Kanji itaijidict file ");
! perror(ITAIJIDICT);
exit(0);
}
for (i = 0; i < 0x80; ++ i) {
for (j = 0; j < 0x80; ++ j) {
ittbl1[i][j] = i | 0x80;
--- 43,63 ----
int i, j;
char buffer[BUFSIZE];
unsigned char n1, n2, o1, o2;
+
+ char *itaijidictpath;
! itaijidictpath = getenv("ITAIJIDICTPATH");
! if (itaijidictpath == NULL)
! itaijidictpath = getenv("ITAIJIDICT");
! if (itaijidictpath == NULL)
! itaijidictpath = ITAIJIDICT;
!
! if ((fp = fopen(itaijidictpath, "rb")) == NULL) {
fprintf(stderr, "Can't open Kanji itaijidict file ");
! perror(itaijidictpath);
exit(0);
}
+
for (i = 0; i < 0x80; ++ i) {
for (j = 0; j < 0x80; ++ j) {
ittbl1[i][j] = i | 0x80;
--
住友林業株式会社 情報システム部 清水 和佳
TEL: +81-3-5322-6672 FAX: +81-3-5322-6658 Niftyserve: XLW01034
e-mail: <kshimz@xxxxxxxxx>