1 /*
2 * $Id: wdreg.c,v 1.8 2002/05/12 22:51:17 hiroo Exp $
3 */
4
5 /*
6 * FreeWnn is a network-extensible Kana-to-Kanji conversion system.
7 * This file is part of FreeWnn.
8 *
9 * Copyright Kyoto University Research Institute for Mathematical Sciences
10 * 1987, 1988, 1989, 1990, 1991, 1992
11 * Copyright OMRON Corporation. 1987, 1988, 1989, 1990, 1991, 1992, 1999
12 * Copyright ASTEC, Inc. 1987, 1988, 1989, 1990, 1991, 1992
13 * Copyright FreeWnn Project 1999, 2000, 2002
14 *
15 * Maintainer: FreeWnn Project <freewnn@tomo.gr.jp>
16 *
17 * This program is free software; you can redistribute it and/or modify
18 * it under the terms of the GNU General Public License as published by
19 * the Free Software Foundation; either version 2 of the License, or
20 * (at your option) any later version.
21 *
22 * This program is distributed in the hope that it will be useful,
23 * but WITHOUT ANY WARRANTY; without even the implied warranty of
24 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
25 * GNU General Public License for more details.
26 *
27 * You should have received a copy of the GNU General Public License
28 * along with this program; if not, write to the Free Software
29 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30 */
31
32 /*
33 * UJIS �ե�������ɤߤȤäơ�ñ����Ͽ��Ԥʤ���
34 */
35
36 #ifndef lint
37 static char *rcs_id = "$Id: wdreg.c,v 1.8 2002/05/12 22:51:17 hiroo Exp $";
38 #endif /* lint */
39
40 #ifdef HAVE_CONFIG_H
41 # include <config.h>
42 #endif
43
44 #include <stdio.h>
45 #if STDC_HEADERS
46 # include <stdlib.h>
47 #else
48 # if HAVE_MALLOC_H
49 # include <malloc.h>
50 # endif
51 #endif /* STDC_HEADERS */
52 #include <sys/types.h>
53 #include <sys/file.h>
54 #if HAVE_UNISTD_H
55 # include <unistd.h>
56 #endif
57
58 #include "commonhd.h"
59 #include "wnn_config.h"
60 #include "jllib.h"
61 #include "jslib.h"
62 #include "jh.h"
63 #include "jdata.h"
64 #include "wnn_os.h"
65
66 extern int init_heap ();
67 extern void ujis_header (), read_ujis ();
68 extern struct je **jeary;
69
70 char *def_server;
71 struct JT jt;
72 struct wnn_file_head file_head;
73 int dic_no = -1;
74 char *server_n;
75 char *env_n = "wdreg";
76 char *fname = NULL;
77 int fid;
78 int client = 0; /* server site dict */
79
80 WNN_JSERVER_ID *js;
81 struct wnn_env *env, *rev_env;
82 static struct wnn_ret_buf rb = { 0, NULL };
83
84 static void
usage()85 usage ()
86 {
87 fprintf (stderr, "wdreg [-D server_name] [-n env_name][-d dic_no][-L] [file_name] < text dict\n");
88 fprintf (stderr, "file_name or -d dic_no must be specified\n");
89 fprintf (stderr, "default env_name = wdreg\n");
90 fprintf (stderr, "default server_name = %s\n", def_server);
91 fprintf (stderr, "L is to specify that the file at the client site.\n");
92 exit (1);
93 }
94
95 static void
err()96 err ()
97 {
98 printf ((char *) wnn_perror ());
99 printf ("\n bye.\n");
100 exit (1);
101 }
102
103 int
main(argc,argv)104 main (argc, argv)
105 int argc;
106 char **argv;
107 {
108 extern int optind;
109 extern char *optarg;
110 struct wnn_dic_info *info;
111 int c;
112 int k;
113 int num;
114 char *cswidth_name;
115 extern char *get_cswidth_name ();
116 extern void set_cswidth ();
117 extern char *getenv ();
118
119 if (getenv (WNN_DEF_SERVER_ENV))
120 {
121 def_server = getenv (WNN_DEF_SERVER_ENV);
122 }
123 else
124 {
125 def_server = "";
126 }
127 server_n = def_server;
128
129 if (cswidth_name = get_cswidth_name (WNN_DEFAULT_LANG))
130 set_cswidth (create_cswidth (cswidth_name));
131 while ((c = getopt (argc, argv, "D:n:d:L")) != EOF)
132 {
133 switch (c)
134 {
135 case 'D':
136 server_n = optarg;
137 break;
138 case 'n':
139 env_n = optarg;
140 break;
141 case 'd':
142 dic_no = atoi (optarg);
143 break;
144 case 'L':
145 client = 1;
146 break;
147 default:
148 usage ();
149 break;
150 }
151 }
152 if (optind)
153 {
154 optind--;
155 argc -= optind;
156 argv += optind;
157 }
158 if (argc > 1)
159 {
160 fname = argv[1];
161 }
162 if (fname && dic_no != -1)
163 usage ();
164 if (!fname && dic_no == -1)
165 usage ();
166
167 rb.buf = (char *) malloc ((unsigned) (rb.size = 0));
168
169 init_heap (MAX_ENTRIES * HEAP_PER_LINE, MAX_ENTRIES * YOMI_PER_LINE, MAX_ENTRIES, MAX_ENTRIES, stdin);
170
171 #ifdef CHINESE
172 {
173 int which_dict;
174 ujis_header (&which_dict);
175 }
176 #else
177 ujis_header ();
178 #endif
179 read_ujis (NORMAL, 0, 0);
180
181 if ((js = js_open (server_n, WNN_TIMEOUT)) == NULL)
182 err ();
183 if ((env = js_connect (js, env_n)) == NULL)
184 err ();
185 if (fname)
186 {
187 if (client)
188 {
189 if (access (fname, F_OK) == -1)
190 {
191 if (js_dic_file_create_client (env, fname, WNN_REV_DICT, "", "", "") == -1)
192 {
193 err ();
194 }
195 }
196 if ((fid = js_file_send (env, fname)) == -1)
197 {
198 err ();
199 }
200 }
201 else
202 {
203 WNN_FILE_STAT s;
204 if (js_file_stat (env, fname, &s) == -1)
205 {
206 if (js_dic_file_create (env, fname, WNN_REV_DICT, "", "", "") == -1)
207 {
208 err ();
209 }
210 }
211 if ((fid = js_file_read (env, fname)) == -1)
212 err ();
213 }
214 if ((dic_no = js_dic_add (env, fid, -1, 0, 0, WNN_DIC_RW, WNN_DIC_RW, "", "")) == -1)
215 err ();
216 }
217
218 if ((num = js_dic_list (env, &rb)) == -1)
219 err ();
220
221 info = (struct wnn_dic_info *) (rb.buf);
222 for (k = 0; k < num; k++)
223 {
224 if (info[k].dic_no == dic_no)
225 break;
226 }
227 if (k == num)
228 {
229 /*
230 fprintf(stderr, "���ꤵ�줿�ֹ�μ���ϡ��Ķ���¸�ߤ��ޤ���\n");
231 */
232 fprintf (stderr, "The specified dictionary isn't exist in current environment\n");
233 exit (1);
234 }
235 if (info[k].type != WNN_UD_DICT && info[k].type != WNN_REV_DICT)
236 {
237 /*
238 fprintf(stderr, "���ꤵ�줿�ֹ�μ���ϡ���Ͽ��ǽ�ǤϤ���ޤ���\n");
239 */
240 fprintf (stderr, "The specified dictionary isn't registable\n");
241 exit (1);
242 }
243 for (k = 0; k < jt.maxserial; k++)
244 {
245 if (js_word_add (env, dic_no, jeary[k]->yomi, jeary[k]->kan, jeary[k]->comm, jeary[k]->hinsi, jeary[k]->hindo) == -1)
246 {
247 err ();
248 }
249 }
250 if (fname)
251 {
252 if (client)
253 {
254 if (js_file_receive (env, fid, "") == -1)
255 err ();
256 }
257 else
258 {
259 if (js_file_write (env, fid, "") == -1)
260 err ();
261 }
262 fprintf (stderr, "Wrote the file back.\n");
263 }
264 exit (0);
265 }
266