From 68a07bf03b7624c9924065cce9ffa45497225834 Mon Sep 17 00:00:00 2001 From: Akinori Ito Date: Thu, 8 Nov 2001 05:14:08 +0000 Subject: Initial revision --- dict.c | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 dict.c (limited to 'dict.c') diff --git a/dict.c b/dict.c new file mode 100644 index 0000000..9191152 --- /dev/null +++ b/dict.c @@ -0,0 +1,137 @@ + +/* + * From g96p0935@mse.waseda.ac.jp Mon Jun 14 09:34:15 1999 Received: from + * ei5sun.yz.yamagata-u.ac.jp (ei5sun.yz.yamagata-u.ac.jp [133.24.114.42]) + * by ei5nazha.yz.yamagata-u.ac.jp (8.9.3/8.9.3) with ESMTP id JAA20673 for + * ; Mon, 14 Jun 1999 09:34:14 +0900 + * (JST) Received: from pandora.mse.waseda.ac.jp + * (root@pandora.mse.waseda.ac.jp [133.9.5.9]) by + * ei5sun.yz.yamagata-u.ac.jp (8.8.0/3.5Wbeta) with ESMTP id JAA23968 for + * ; Mon, 14 Jun 1999 09:35:30 +0900 (JST) + * Received: from localhost (root@[133.9.85.55]) by pandora.mse.waseda.ac.jp + * (8.9.1+3.0W/3.7W) with ESMTP id JAA18473; Mon, 14 Jun 1999 09:30:31 +0900 + * (JST) Message-Id: <199906140030.JAA18473@pandora.mse.waseda.ac.jp> To: + * aito@ei5sun.yz.yamagata-u.ac.jp Subject: w3m:英和辞典検索機能塔載 + * Cc: g96p0935@mse.waseda.ac.jp From: Takashi Nishimoto + * X-Mailer: Mew version 1.93 on Emacs 19.34 / + * Mule 2.3 (SUETSUMUHANA) Mime-Version: 1.0 Content-Type: Text/Plain; + * charset=iso-2022-jp Content-Transfer-Encoding: 7bit Date: Mon, 14 Jun + * 1999 09:29:56 +0900 X-Dispatcher: imput version 980506 Lines: 150 + * + * 西本@早大です。 + * + * Quick Hack で w3m + * に英和辞典検索機能と単語単位のカーソル移動を実装しま した。 + * + * Unix を使っていると、英文を読む機会が多いですね。 Emacs + * 内ではワンタッチで英和辞典を検索する sdic + * のようなツールがありま + * すが、ちょっとした文書を読むだけにいちいち Emacs + * に読み込むのはかった るいので、なんとか w3m + * でできないかと思い、作業に踏み切りました。 + * + * すると意外に簡単に実装できました。僕は C + * プログラムの改造は初めてです が、 Emacs Lisp + * 並の手軽さで実装できたことには感動しました。 + * + * dictword が調べる単語を聞いて検索する関数で、 dictwordat + * がカーソル位 + * 置の単語を検索する関数です。ソースを見れば明らかなように検索する外部コ + * マンドは w3mdict です。 Unix + * なので、普段使っているコマンドへの symlink にしています。w + * に dictword、 W に dictwordat を割り当てていま + * す。また、右手で読めるように ; にも dictwordat + * を割り当てています。 */ +#include "fm.h" +#include + +#ifdef DICT + +#define DICTCMD "w3mdict " +#define DICTBUFFERNAME "*dictionary*" +/* char *DICTBUFFERNAME="*dictionary*"; */ + +char * +GetWord(char *word) +{ + Line *l = Currentbuf->currentLine; + char *lb = l->lineBuf; + int i, b, e, pos = Currentbuf->pos; + + i = pos; + while (!IS_ALPHA(lb[i]) && i >= 0) + i--; + pos = i; + while (IS_ALPHA(lb[i]) && i >= 0) + i--; + i++; + if (!IS_ALPHA(lb[i])) + return NULL; + b = i; + i = pos; + while (IS_ALPHA(lb[i]) && i <= l->len - 1) + i++; + e = i - 1; + strncpy(word, &lb[b], e - b + 1); + word[e - b + 1] = '\0'; + return word; +} + +void +execdict(char *word) +{ + Buffer *buf; + static char cmd[100], bufname[100]; + MySignalHandler(*prevtrap) (); + + if (word == NULL) + return; + strcpy(cmd, DICTCMD); + strcat(cmd, word); + buf = namedBuffer(Firstbuf, SHELLBUFFERNAME); + if (buf != NULL) + Firstbuf = deleteBuffer(Firstbuf, buf); + + if (cmd == NULL || *cmd == '\0') { + displayBuffer(Currentbuf, B_NORMAL); + return; + } + prevtrap = signal(SIGINT, intTrap); + crmode(); + buf = getshell(cmd); +/* sprintf(bufname,"*dictionary(%s)*",word); */ +/* buf->buffername = bufname; */ + buf->buffername = DICTBUFFERNAME; + buf->filename = word; + signal(SIGINT, prevtrap); + term_raw(); + if (buf == NULL) { + disp_message("Execution failed", FALSE); + } + else if (buf->firstLine == NULL) { + /* if the dictionary doesn't describe the word. */ + char msg[100]; + sprintf(msg, "Word \"%s\" Not Found", word); + disp_message(msg, FALSE); + + } + else { + buf->nextBuffer = Firstbuf; + Currentbuf = Firstbuf = buf; + } + displayBuffer(Currentbuf, B_FORCE_REDRAW); +} + +void +dictword(void) +{ + execdict(inputStr("(dictionary)!", "")); +} + +void +dictwordat(void) +{ + static char word[100]; + execdict(GetWord(word)); +} +#endif /* DICT */ -- cgit v1.2.3