OSDN Git Service

プレイヤーの周囲にアイテムを置けない状況でアーティファクトを落とした
[hengband/hengband.git] / src / japanese.c
1 /* File: japanese.c */
2
3
4 #include "angband.h"
5
6 #ifdef JP
7
8 /*ÆüËܸìÆ°»ì³èÍÑ (ÂǤġäÂǤäÆ,ÂǤÁ etc) */
9
10 #define CMPTAIL(y) strncmp(&in[l-strlen(y)],y,strlen(y))
11
12 /* ²¥¤ë,½³¤ë¡ä²¥¤ê,½³¤ë */
13 void jverb1( const char *in , char *out){
14 int l=strlen(in);
15 strcpy(out,in);
16
17 if( CMPTAIL("¤¹¤ë")==0) sprintf(&out[l-4],"¤·");else
18 if( CMPTAIL("¤¤¤ë")==0) sprintf(&out[l-4],"¤¤¤Æ");else
19
20 if( CMPTAIL("¤¨¤ë")==0) sprintf(&out[l-4],"¤¨");else
21 if( CMPTAIL("¤±¤ë")==0) sprintf(&out[l-4],"¤±");else
22 if( CMPTAIL("¤²¤ë")==0) sprintf(&out[l-4],"¤²");else
23 if( CMPTAIL("¤»¤ë")==0) sprintf(&out[l-4],"¤»");else
24 if( CMPTAIL("¤¼¤ë")==0) sprintf(&out[l-4],"¤¼");else
25 if( CMPTAIL("¤Æ¤ë")==0) sprintf(&out[l-4],"¤Æ");else
26 if( CMPTAIL("¤Ç¤ë")==0) sprintf(&out[l-4],"¤Ç");else
27 if( CMPTAIL("¤Í¤ë")==0) sprintf(&out[l-4],"¤Í");else
28 if( CMPTAIL("¤Ø¤ë")==0) sprintf(&out[l-4],"¤Ø");else
29 if( CMPTAIL("¤Ù¤ë")==0) sprintf(&out[l-4],"¤Ù");else
30 if( CMPTAIL("¤á¤ë")==0) sprintf(&out[l-4],"¤á");else
31 if( CMPTAIL("¤ì¤ë")==0) sprintf(&out[l-4],"¤ì");else
32
33 if( CMPTAIL("¤¦")==0) sprintf(&out[l-2],"¤¤");else
34 if( CMPTAIL("¤¯")==0) sprintf(&out[l-2],"¤­");else
35 if( CMPTAIL("¤°")==0) sprintf(&out[l-2],"¤®");else
36 if( CMPTAIL("¤¹")==0) sprintf(&out[l-2],"¤·");else
37 if( CMPTAIL("¤º")==0) sprintf(&out[l-2],"¤¸");else
38 if( CMPTAIL("¤Ä")==0) sprintf(&out[l-2],"¤Á");else
39 if( CMPTAIL("¤Å")==0) sprintf(&out[l-2],"¤Â");else
40 if( CMPTAIL("¤Ì")==0) sprintf(&out[l-2],"¤Ë");else
41 if( CMPTAIL("¤Õ")==0) sprintf(&out[l-2],"¤Ò");else
42 if( CMPTAIL("¤Ö")==0) sprintf(&out[l-2],"¤Ó");else
43 if( CMPTAIL("¤à")==0) sprintf(&out[l-2],"¤ß");else
44 if( CMPTAIL("¤ë")==0) sprintf(&out[l-2],"¤ê");else
45
46   sprintf(&out[l],"¤½¤·¤Æ");}
47
48 /* ²¥¤ë,½³¤ë> ²¥¤Ã¤Æ½³¤ë */
49 void jverb2( const char *in , char *out){
50 int l=strlen(in);
51 strcpy(out,in);
52
53 if( CMPTAIL("¤¹¤ë")==0) sprintf(&out[l-4],"¤·¤Æ");else
54 if( CMPTAIL("¤¤¤ë")==0) sprintf(&out[l-4],"¤¤¤Æ");else
55
56 if( CMPTAIL("¤¨¤ë")==0) sprintf(&out[l-4],"¤¨¤Æ");else
57 if( CMPTAIL("¤±¤ë")==0) sprintf(&out[l-4],"¤±¤Æ");else
58 if( CMPTAIL("¤²¤ë")==0) sprintf(&out[l-4],"¤²¤Æ");else
59 if( CMPTAIL("¤»¤ë")==0) sprintf(&out[l-4],"¤»¤Æ");else
60 if( CMPTAIL("¤¼¤ë")==0) sprintf(&out[l-4],"¤¼¤Æ");else
61 if( CMPTAIL("¤Æ¤ë")==0) sprintf(&out[l-4],"¤Æ¤Ã¤Æ");else
62 if( CMPTAIL("¤Ç¤ë")==0) sprintf(&out[l-4],"¤Ç¤Æ");else
63 if( CMPTAIL("¤Í¤ë")==0) sprintf(&out[l-4],"¤Í¤Æ");else
64 if( CMPTAIL("¤Ø¤ë")==0) sprintf(&out[l-4],"¤Ø¤Æ");else
65 if( CMPTAIL("¤Ù¤ë")==0) sprintf(&out[l-4],"¤Ù¤Æ");else
66 if( CMPTAIL("¤á¤ë")==0) sprintf(&out[l-4],"¤á¤Æ");else
67 if( CMPTAIL("¤ì¤ë")==0) sprintf(&out[l-4],"¤ì¤Æ");else
68
69 if( CMPTAIL("¤¦")==0) sprintf(&out[l-2],"¤Ã¤Æ");else
70 if( CMPTAIL("¤¯")==0) sprintf(&out[l-2],"¤¤¤Æ");else
71 if( CMPTAIL("¤°")==0) sprintf(&out[l-2],"¤¤¤Ç");else
72 if( CMPTAIL("¤¹")==0) sprintf(&out[l-2],"¤·¤Æ");else
73 if( CMPTAIL("¤º")==0) sprintf(&out[l-2],"¤¸¤Æ");else
74 if( CMPTAIL("¤Ä")==0) sprintf(&out[l-2],"¤Ã¤Æ");else
75 if( CMPTAIL("¤Å")==0) sprintf(&out[l-2],"¤Ã¤Æ");else
76 if( CMPTAIL("¤Ì")==0) sprintf(&out[l-2],"¤Í¤Æ");else
77 if( CMPTAIL("¤Õ")==0) sprintf(&out[l-2],"¤Ø¤Æ");else
78 if( CMPTAIL("¤Ö")==0) sprintf(&out[l-2],"¤ó¤Ç");else
79 if( CMPTAIL("¤à")==0) sprintf(&out[l-2],"¤ó¤Ç");else
80 if( CMPTAIL("¤ë")==0) sprintf(&out[l-2],"¤Ã¤Æ");else
81   sprintf(&out[l],"¤³¤È¤Ë¤è¤ê");}
82
83 /* ²¥¤ë,½³¤ë > ²¥¤Ã¤¿¤ê½³¤Ã¤¿¤ê */
84 void jverb3( const char *in , char *out){
85 int l=strlen(in);
86 strcpy(out,in);
87
88 if( CMPTAIL("¤¹¤ë")==0) sprintf(&out[l-4],"¤·¤¿");else
89 if( CMPTAIL("¤¤¤ë")==0) sprintf(&out[l-4],"¤¤¤¿");else
90
91 if( CMPTAIL("¤¨¤ë")==0) sprintf(&out[l-4],"¤¨¤¿");else
92 if( CMPTAIL("¤±¤ë")==0) sprintf(&out[l-4],"¤±¤¿");else
93 if( CMPTAIL("¤²¤ë")==0) sprintf(&out[l-4],"¤²¤¿");else
94 if( CMPTAIL("¤»¤ë")==0) sprintf(&out[l-4],"¤»¤¿");else
95 if( CMPTAIL("¤¼¤ë")==0) sprintf(&out[l-4],"¤¼¤¿");else
96 if( CMPTAIL("¤Æ¤ë")==0) sprintf(&out[l-4],"¤Æ¤Ã¤¿");else
97 if( CMPTAIL("¤Ç¤ë")==0) sprintf(&out[l-4],"¤Ç¤¿");else
98 if( CMPTAIL("¤Í¤ë")==0) sprintf(&out[l-4],"¤Í¤¿");else
99 if( CMPTAIL("¤Ø¤ë")==0) sprintf(&out[l-4],"¤Ø¤¿");else
100 if( CMPTAIL("¤Ù¤ë")==0) sprintf(&out[l-4],"¤Ù¤¿");else
101 if( CMPTAIL("¤á¤ë")==0) sprintf(&out[l-4],"¤á¤¿");else
102 if( CMPTAIL("¤ì¤ë")==0) sprintf(&out[l-4],"¤ì¤¿");else
103
104 if( CMPTAIL("¤¦")==0) sprintf(&out[l-2],"¤Ã¤¿");else
105 if( CMPTAIL("¤¯")==0) sprintf(&out[l-2],"¤¤¤¿");else
106 if( CMPTAIL("¤°")==0) sprintf(&out[l-2],"¤¤¤À");else
107 if( CMPTAIL("¤¹")==0) sprintf(&out[l-2],"¤·¤¿");else
108 if( CMPTAIL("¤º")==0) sprintf(&out[l-2],"¤¸¤¿");else
109 if( CMPTAIL("¤Ä")==0) sprintf(&out[l-2],"¤Ã¤¿");else
110 if( CMPTAIL("¤Å")==0) sprintf(&out[l-2],"¤Ã¤¿");else
111 if( CMPTAIL("¤Ì")==0) sprintf(&out[l-2],"¤Í¤¿");else
112 if( CMPTAIL("¤Õ")==0) sprintf(&out[l-2],"¤Ø¤¿");else
113 if( CMPTAIL("¤Ö")==0) sprintf(&out[l-2],"¤ó¤À");else
114 if( CMPTAIL("¤à")==0) sprintf(&out[l-2],"¤ó¤À");else
115 if( CMPTAIL("¤ë")==0) sprintf(&out[l-2],"¤Ã¤¿");else
116   sprintf(&out[l],"¤³¤È¤ä");}
117
118
119 void jverb( const char *in , char *out , int flag){
120   switch (flag){
121   case JVERB_AND:jverb1(in , out);break;
122   case JVERB_TO :jverb2(in , out);break;
123   case JVERB_OR :jverb3(in , out);break;
124   }
125 }
126
127
128 /*
129  * Convert SJIS string to EUC string
130  */
131 void sjis2euc(char *str)
132 {
133         int i;
134         unsigned char c1, c2;
135         unsigned char *tmp;
136
137         int len = strlen(str);
138
139         C_MAKE(tmp, len+1, byte);
140
141         for (i = 0; i < len; i++)
142         {
143                 c1 = str[i];
144                 if (c1 & 0x80)
145                 {
146                         i++;
147                         c2 = str[i];
148                         if (c2 >= 0x9f)
149                         {
150                                 c1 = c1 * 2 - (c1 >= 0xe0 ? 0xe0 : 0x60);
151                                 c2 += 2;
152                         }
153                         else
154                         {
155                                 c1 = c1 * 2 - (c1 >= 0xe0 ? 0xe1 : 0x61);
156                                 c2 += 0x60 + (c2 < 0x7f);
157                         }
158                         tmp[i - 1] = c1;
159                         tmp[i] = c2;
160                 }
161                 else
162                         tmp[i] = c1;
163         }
164         tmp[len] = 0;
165         strcpy(str, (char *)tmp);
166
167         C_KILL(tmp, len+1, byte);
168 }  
169
170
171 /*
172  * Convert EUC string to SJIS string
173  */
174 void euc2sjis(char *str)
175 {
176         int i;
177         unsigned char c1, c2;
178         unsigned char *tmp;
179         
180         int len = strlen(str);
181
182         C_MAKE(tmp, len+1, byte);
183
184         for (i = 0; i < len; i++)
185         {
186                 c1 = str[i];
187                 if (c1 & 0x80)
188                 {
189                         i++;
190                         c2 = str[i];
191                         if (c1 % 2)
192                         {
193                                 c1 = (c1 >> 1) + (c1 < 0xdf ? 0x31 : 0x71);
194                                 c2 -= 0x60 + (c2 < 0xe0);
195                         }
196                         else
197                         {
198                                 c1 = (c1 >> 1) + (c1 < 0xdf ? 0x30 : 0x70);
199                                 c2 -= 2;
200                         }
201
202                         tmp[i - 1] = c1;
203                         tmp[i] = c2;
204                 }
205                 else
206                         tmp[i] = c1;
207         }
208         tmp[len] = 0;
209         strcpy(str, (char *)tmp);
210
211         C_KILL(tmp, len+1, byte);
212 }  
213
214
215 /*
216  * str¤ò´Ä¶­¤Ë¹ç¤Ã¤¿Ê¸»ú¥³¡¼¥É¤ËÊÑ´¹¤·¡¢ÊÑ´¹Á°¤Îʸ»ú¥³¡¼¥É¤òÊÖ¤¹¡£
217  * str¤ÎŤµ¤ËÀ©¸Â¤Ï¤Ê¤¤¡£
218  *
219  * 0: Unknown
220  * 1: ASCII (Never known to be ASCII in this function.)
221  * 2: EUC
222  * 3: SJIS
223  */
224 byte codeconv(char *str)
225 {
226         byte code = 0;
227         int i;
228
229         for (i = 0; str[i]; i++)
230         {
231                 unsigned char c1;
232                 unsigned char c2;
233
234                 /* First byte */
235                 c1 = str[i];
236
237                 /* ASCII? */
238                 if (!(c1 & 0x80)) continue;
239
240                 /* Second byte */
241                 i++;
242                 c2 = str[i];
243
244                 if (((0xa1 <= c1 && c1 <= 0xdf) || (0xfd <= c1 && c1 <= 0xfe)) &&
245                     (0xa1 <= c2 && c2 <= 0xfe))
246                 {
247                         /* Only EUC is allowed */
248                         if (!code)
249                         {
250                                 /* EUC */
251                                 code = 2;
252                         }
253
254                         /* Broken string? */
255                         else if (code != 2)
256                         {
257                                 /* No conversion */
258                                 return 0;
259                         }
260                 }
261
262                 else if (((0x81 <= c1 && c1 <= 0x9f) &&
263                           ((0x40 <= c2 && c2 <= 0x7e) || (0x80 <= c2 && c2 <= 0xfc))) ||
264                          ((0xe0 <= c1 && c1 <= 0xfc) &&
265                           (0x40 <= c2 && c2 <= 0x7e)))
266                 {
267                         /* Only SJIS is allowed */
268                         if (!code)
269                         {
270                                 /* SJIS */
271                                 code = 3;
272                         }
273
274                         /* Broken string? */
275                         else if (code != 3)
276                         {
277                                 /* No conversion */
278                                 return 0;
279                         }
280                 }
281         }
282
283
284         switch (code)
285         {
286 #ifdef EUC
287         case 3:
288                 /* SJIS -> EUC */
289                 sjis2euc(str);
290                 break;
291 #endif
292
293 #ifdef SJIS
294         case 2:
295                 /* EUC -> SJIS */
296                 euc2sjis(str);
297
298                 break;
299 #endif
300         }
301
302         /* Return kanji code */
303         return code;
304 }
305
306 /* Ê¸»úÎós¤Îx¥Ð¥¤¥ÈÌܤ¬´Á»ú¤Î1¥Ð¥¤¥ÈÌܤ«¤É¤¦¤«È½Äꤹ¤ë */
307 bool iskanji2(cptr s, int x)
308 {
309         int i;
310
311         for (i = 0; i < x; i++)
312         {
313                 if (iskanji(s[i])) i++;
314         }
315         if ((x == i) && iskanji(s[x])) return TRUE;
316
317         return FALSE;
318 }
319
320 #endif /* JP */
321