OSDN Git Service

EGO_XTRA_* から art_flags への変換をz_older_than()で囲んだ。また、object_type.xtra1は現在全く使われてないのでその旨を...
[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 char* strstr_j(const char* s, const char* t)
128 {
129         int i, l1, l2;
130
131         l1 = strlen(s);
132         l2 = strlen(t);
133         if (l1 >= l2) {
134                 for(i = 0; i <= l1 - l2; i++) {
135                         if(!strncmp(s + i, t, l2))
136                                 return (char *)s + i;
137                         if (iskanji(*(s + i)))
138                                 i++;
139                 }
140         }
141         return NULL;
142 }
143
144 /* 2¥Ð¥¤¥Èʸ»ú¤ò¹Íθ¤·¤Ê¤¬¤éºÇÂç n ¥Ð¥¤¥Èʸ»úÎó¤ò¥³¥Ô¡¼¤¹¤ë */
145 size_t mb_strlcpy(char *dst, const char *src, size_t size)
146 {
147         unsigned char *d = (unsigned char*)dst;
148         const unsigned char *s = (unsigned char*)src;
149         size_t n = 0;
150
151         /* reserve for NUL termination */
152         size--;
153
154         /* Copy as many bytes as will fit */
155         while(n < size) {
156                 if (iskanji(*s)) {
157                         if(n + 2 >= size || !*(s+1)) break;
158                         *d++ = *s++;
159                         *d++ = *s++;
160                         n += 2;
161                 } else {
162                         *d++ = *s++;
163                         n++;
164                 }
165         }
166         *d = '\0';
167         while(*s++) n++;
168         return n;
169 }
170
171 /*
172  * str¤ò´Ä¶­¤Ë¹ç¤Ã¤¿Ê¸»ú¥³¡¼¥É¤ËÊÑ´¹¤¹¤ë¡£
173  * str¤ÎŤµ¤ËÀ©¸Â¤Ï¤Ê¤¤¡£
174  */
175 void codeconv(char *str)
176 {
177         int i;
178         int kanji = 0, iseuc = 1;
179         int len;
180         unsigned char c1, c2;
181         unsigned char *tmp;
182
183         /* ´Á»ú¤¬Â¸ºß¤·¡¢¤½¤Î´Á»ú¥³¡¼¥É¤¬EUC¤«¤É¤¦¤«Ä´¤Ù¤ë¡£*/
184         for (i = 0; str[i]; i++)
185         {
186                 c1 = str[i];
187                 if (c1 & 0x80)  kanji = 1;
188                 if ( c1>=0x80 && (c1 < 0xa1 || c1 > 0xfe)) iseuc = 0;
189         }
190
191         /* str¤ÎŤµ+1(tmp³ÎÊÝÍÑ) */
192         len = i + 1;
193
194 #ifdef EUC
195         if (kanji && !iseuc)     /* SJIS -> EUC */
196         {
197                 C_MAKE(tmp, len, byte);
198
199                 for (i = 0; str[i]; i++)
200                 {
201                         c1 = str[i];
202                         if (c1 & 0x80)
203                         {
204                                 i++;
205                                 c2 = str[i];
206                                 if (c2 >= 0x9f)
207                                 {
208                                         c1 = c1 * 2 - (c1 >= 0xe0 ? 0xe0 : 0x60);
209                                         c2 += 2;
210                                 }
211                                 else
212                                 {
213                                         c1 = c1 * 2 - (c1 >= 0xe0 ? 0xe1 : 0x61);
214                                         c2 += 0x60 + (c2 < 0x7f);
215                                 }
216                                 tmp[i - 1] = c1;
217                                 tmp[i] = c2;
218                         }
219                         else
220                                 tmp[i] = c1;
221                 }
222                 tmp[i] = '\0';
223                 strcpy(str, tmp);
224
225                 C_KILL(tmp, len, byte);
226         }
227 #endif
228
229 #ifdef SJIS
230         if (kanji && iseuc)     /* EUC -> SJIS */
231         {
232                 C_MAKE(tmp, len, byte);
233
234                 for (i = 0; str[i]; i++)
235                 {
236                         c1 = str[i];
237                         if (c1 & 0x80)
238                         {
239                                 i++;
240                                 c2 = str[i];
241                                 if (c1 % 2)
242                                 {
243                                         c1 = (c1 >> 1) + (c1 < 0xdf ? 0x31 : 0x71);
244                                         c2 -= 0x60 + (c2 < 0xe0);
245                                 }
246                                 else
247                                 {
248                                         c1 = (c1 >> 1) + (c1 < 0xdf ? 0x30 : 0x70);
249                                         c2 -= 2;
250                                 }
251                                 tmp[i - 1] = c1;
252                                 tmp[i] = c2;
253                         }
254                         else
255                                 tmp[i] = c1;
256                 }
257                 tmp[i] = '\0';
258                 strcpy(str, tmp);
259
260                 C_KILL(tmp, len, byte);
261         }
262 #endif
263 }
264
265 #endif /* JP */
266