Mercurial > kinput2.yaz
comparison lib/Xsj3clib/connect.c @ 0:92745d501b9a
initial import from kinput2-v3.1
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Mon, 08 Mar 2010 04:44:30 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:92745d501b9a |
---|---|
1 #ifndef lint | |
2 static char *rcsid = "$Id: connect.c,v 2.0 1992/02/13 18:33:14 nao Exp $"; | |
3 #endif | |
4 /* | |
5 * Copyright 1991 Sony Corporation | |
6 * | |
7 * Permission to use, copy, modify, distribute, and sell this software and its | |
8 * documentation for any purpose is hereby granted without fee, provided that | |
9 * the above copyright notice appear in all copies and that both that | |
10 * copyright notice and this permission notice appear in supporting | |
11 * documentation, and that the name of Sony not be used in advertising or | |
12 * publicity pertaining to distribution of the software without specific, | |
13 * written prior permission. Sony makes no representations about the | |
14 * suitability of this software for any purpose. It is provided "as is" | |
15 * without express or implied warranty. | |
16 * | |
17 * SONY DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL | |
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL SONY | |
19 * BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | |
20 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION | |
21 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN | |
22 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |
23 */ | |
24 /* | |
25 * Author: Naoshi Suzuki, SONY Corporation. (nao@sm.sony.co.jp) | |
26 */ | |
27 | |
28 #include "common.h" | |
29 #include "util.h" | |
30 | |
31 extern Xsj3cCVServerIF serverIF[SERVER_NUM]; | |
32 | |
33 int Xsj3cOpen(); | |
34 void Xsj3cClose(); | |
35 void Xsj3cConnect(); | |
36 | |
37 static void _Xsj3cOpenError(); | |
38 static void _Xsj3cCloseError(); | |
39 | |
40 static int connected[SERVER_NUM]= {0}; | |
41 | |
42 /* | |
43 * Xsj3cOpen() | |
44 * Connect to sj3serv(kana-kanji conversion server). | |
45 */ | |
46 int | |
47 Xsj3cOpen(buf, host, user, force, second) | |
48 Xsj3cBuf buf; | |
49 char *host; | |
50 char *user; | |
51 int force; | |
52 int second; | |
53 { | |
54 extern char *getenv(); | |
55 char *p; | |
56 char hostname[SERVER_NUM][32]; | |
57 int value; | |
58 | |
59 if (connected[buf->server] && !force) { | |
60 return CONNECT_OK; | |
61 } | |
62 if (host) { | |
63 if (user) { | |
64 if ((value = serverIF[buf->server].func[FUNC_OPEN](host, user)) | |
65 != SJ3_NORMAL_END) { | |
66 _Xsj3cOpenError(value); | |
67 if (value == SJ3_SERVER_DEAD || value == SJ3_CONNECT_ERROR) | |
68 return CONNECT_FAIL; | |
69 } | |
70 } else { | |
71 Xsj3cError("can't connect sj3serv by null user"); | |
72 return CONNECT_FAIL; | |
73 } | |
74 } else { | |
75 if (user) { | |
76 hostname[buf->server][0] = '\0'; | |
77 if (buf->server == SERVER_SJ3) { | |
78 if (!second) { | |
79 if ((p = getenv("SJ3SERV")) && *p != '\0') { | |
80 strcpy(hostname[buf->server], p); | |
81 } else if (buf->sj3serv) { | |
82 strcpy(hostname[buf->server], buf->sj3serv); | |
83 } | |
84 } else { | |
85 if ((p = getenv("SJ3SERV2")) && *p != '\0') { | |
86 strcpy(hostname[buf->server], p); | |
87 } else if (buf->sj3serv2) { | |
88 strcpy(hostname[buf->server], buf->sj3serv2); | |
89 } | |
90 } | |
91 } | |
92 if ((value = serverIF[buf->server].func[FUNC_OPEN](hostname, user)) | |
93 != SJ3_NORMAL_END) { | |
94 _Xsj3cOpenError(value); | |
95 if (value == SJ3_SERVER_DEAD || value == SJ3_CONNECT_ERROR) | |
96 return CONNECT_FAIL; | |
97 } | |
98 } else { | |
99 Xsj3cError("can't connect sj3serv by null user"); | |
100 return CONNECT_FAIL; | |
101 } | |
102 } | |
103 locked[buf->server] = 0; | |
104 connected[buf->server] = 1; | |
105 return CONNECT_OK; | |
106 } | |
107 | |
108 /* | |
109 * Xsj3cConnect() | |
110 * Disconnect to sj3serv and reonnect to sj3serv. | |
111 */ | |
112 void | |
113 Xsj3cConnect(buf, host, host2, user) | |
114 Xsj3cBuf buf; | |
115 char *host; | |
116 char *host2; | |
117 char *user; | |
118 { | |
119 serverIF[buf->server].func[FUNC_UNLOCK](); | |
120 Xsj3cClose(buf, ON); | |
121 if ((Xsj3cOpen(buf, host, user, OFF, OFF)) != CONNECT_OK) { | |
122 Xsj3cWarning("Failed to connect first server. try to second server"); | |
123 if ((Xsj3cOpen(buf, host2, user, OFF, ON)) != CONNECT_OK) { | |
124 Xsj3cError("Failed to connect seconON server."); | |
125 } | |
126 } | |
127 } | |
128 | |
129 /* | |
130 * Xsj3cClose() | |
131 * Disconnect to sj3serv. | |
132 */ | |
133 void | |
134 Xsj3cClose(buf, force) | |
135 Xsj3cBuf buf; | |
136 int force; | |
137 { | |
138 int value; | |
139 | |
140 if (connected[buf->server]) { | |
141 if ((value = serverIF[buf->server].func[FUNC_CLOSE]()) | |
142 != SJ3_NORMAL_END && !force) { | |
143 _Xsj3cCloseError(value); | |
144 } | |
145 connected[buf->server] = 0; | |
146 } | |
147 } | |
148 | |
149 /* | |
150 * _Xsj3cOpenError() | |
151 * Print error messages for connecting to sj3serv. | |
152 */ | |
153 static void | |
154 _Xsj3cOpenError(error) | |
155 int error; | |
156 { | |
157 switch (error) { | |
158 case SJ3_SERVER_DEAD: | |
159 Xsj3cWarning("sj3_open: server died in connecting"); | |
160 break; | |
161 case SJ3_CONNECT_ERROR: | |
162 Xsj3cWarning("sj3_open: connected to server error"); | |
163 break; | |
164 case SJ3_ALREADY_CONNECTED: | |
165 Xsj3cWarning("sj3_open: already connected to server"); | |
166 break; | |
167 case SJ3_CANNOT_OPEN_MDICT: | |
168 Xsj3cWarning("sj3_open: can't open main dictionaries"); | |
169 break; | |
170 case SJ3_CANNOT_OPEN_UDICT: | |
171 Xsj3cWarning("sj3_open: can't open user dictionaries"); | |
172 break; | |
173 case SJ3_CANNOT_OPEN_STUDY: | |
174 Xsj3cWarning("sj3_open: can't open files for study"); | |
175 break; | |
176 case SJ3_CANNOT_MAKE_UDIR: | |
177 Xsj3cWarning("sj3_open: can't make directries for user"); | |
178 break; | |
179 case SJ3_CANNOT_MAKE_UDICT: | |
180 Xsj3cWarning("sj3_open: can't make user dictionaries"); | |
181 break; | |
182 case SJ3_CANNOT_MAKE_STUDY: | |
183 Xsj3cWarning("sj3_open: can't make files for study"); | |
184 break; | |
185 default: | |
186 Xsj3cWarning("sj3_open: unknown error"); | |
187 break; | |
188 } | |
189 } | |
190 | |
191 /* | |
192 * _Xsj3cCloseError() | |
193 * Print error messages for disconnecting to sj3serv. | |
194 */ | |
195 static void | |
196 _Xsj3cCloseError(error) | |
197 int error; | |
198 { | |
199 switch (error) { | |
200 case SJ3_SERVER_DEAD: | |
201 Xsj3cWarning("sj3_close: server died in disconnecting"); | |
202 break; | |
203 case SJ3_DISCONNECT_ERROR: | |
204 Xsj3cWarning("sj3_close: server internal error"); | |
205 break; | |
206 case SJ3_NOT_CONNECTED: | |
207 Xsj3cWarning("sj3_close: already disconnected to server"); | |
208 break; | |
209 case SJ3_NOT_OPENED_MDICT: | |
210 Xsj3cWarning("sj3_close: main dictionaries are not opend"); | |
211 break; | |
212 case SJ3_NOT_OPENED_UDICT: | |
213 Xsj3cWarning("sj3_close: user dictionaries are not opend"); | |
214 break; | |
215 case SJ3_NOT_OPENED_STUDY: | |
216 Xsj3cWarning("sj3_close: files for study are not opend"); | |
217 break; | |
218 case SJ3_CLOSE_MDICT_ERROR: | |
219 Xsj3cWarning("sj3_close: can't close main dictionaries"); | |
220 break; | |
221 case SJ3_CLOSE_UDICT_ERROR: | |
222 Xsj3cWarning("sj3_close: can't close user dictionaries"); | |
223 break; | |
224 case SJ3_CLOSE_STUDY_ERROR: | |
225 Xsj3cWarning("sj3_close: can't close files for study"); | |
226 break; | |
227 default: | |
228 Xsj3cWarning("sj3_close: unknown error"); | |
229 break; | |
230 } | |
231 } | |
232 |