1 /* JNetHack Copyright */
2 /* (c) Issei Numata 1994-2000 */
3 /* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2020 */
4 /* JNetHack may be freely redistributed. See license for details. */
18 #define IC ((unsigned char)("
\8a¿"[0])==0x8a)
37 static unsigned char hira_tab[][2]={
38 {0xa4, 0xa2}, {0xa4, 0xa4}, {0xa4, 0xa6}, {0xa4, 0xa8}, {0xa4, 0xaa},
39 {0xa4, 0xab}, {0xa4, 0xad}, {0xa4, 0xaf}, {0xa4, 0xb1}, {0xa4, 0xb3},
40 {0xa4, 0xb5}, {0xa4, 0xb7}, {0xa4, 0xb9}, {0xa4, 0xbb}, {0xa4, 0xbd},
41 {0xa4, 0xbf}, {0xa4, 0xc1}, {0xa4, 0xc4}, {0xa4, 0xc6}, {0xa4, 0xc8},
42 {0xa4, 0xca}, {0xa4, 0xcb}, {0xa4, 0xcc}, {0xa4, 0xcd}, {0xa4, 0xce},
43 {0xa4, 0xcf}, {0xa4, 0xd2}, {0xa4, 0xd5}, {0xa4, 0xd8}, {0xa4, 0xdb},
44 {0xa4, 0xde}, {0xa4, 0xdf}, {0xa4, 0xe0}, {0xa4, 0xe1}, {0xa4, 0xe2},
45 {0xa4, 0xe4}, {0xa4, 0xa4}, {0xa4, 0xe6}, {0xa4, 0xa8}, {0xa4, 0xe8},
46 {0xa4, 0xe9}, {0xa4, 0xea}, {0xa4, 0xeb}, {0xa4, 0xec}, {0xa4, 0xed},
47 {0xa4, 0xef}, {0xa4, 0xa4}, {0xa4, 0xa6}, {0xa4, 0xa8}, {0xa4, 0xaa},
48 {0xa4, 0xac}, {0xa4, 0xae}, {0xa4, 0xb0}, {0xa4, 0xb2}, {0xa4, 0xb4},
49 {0xa4, 0xb6}, {0xa4, 0xb8}, {0xa4, 0xba}, {0xa4, 0xbc}, {0xa4, 0xbe},
50 {0xa4, 0xc0}, {0xa4, 0xc2}, {0xa4, 0xc5}, {0xa4, 0xc7}, {0xa4, 0xc9},
51 {0xa4, 0xd0}, {0xa4, 0xd3}, {0xa4, 0xd6}, {0xa4, 0xd9}, {0xa4, 0xdc},
52 {0xa4, 0xd1}, {0xa4, 0xd4}, {0xa4, 0xd7}, {0xa4, 0xda}, {0xa4, 0xdd},
55 #define FIFTH 0 /*
\8cÜ
\92i */
56 #define UPPER 1 /*
\8fã
\88ê
\92i */
57 #define LOWER 2 /*
\89º
\88ê
\92i */
58 #define SAHEN 3 /*
\83T
\95Ï */
59 #define KAHEN 4 /*
\83J
\95Ï */
61 #define NORMAL 0 /*
\82 \82¯
\82é
\81¨
\81`
\82½ */
62 #define SOKUON 1 /*
\8d\8f\82Þ
\81¨
\81`
\82ñ
\82¾ */
63 #define HATSUON 2 /*
\91Å
\82Â
\81¨
\81`
\82Á
\82½ */
64 #define ION 3 /*
\95\82\82
\81¨
\81`
\82¢
\82½ */
69 /* 0: fifth conj. 1:upper conj. 2:lower conj. 3:SAHEN 4:KAHEN */
71 /* 0: normal 1: sokuon 2: hatson 3: ion */
75 {"
\82 \82¯
\82é", J_KA, LOWER, NORMAL},
76 {"
\8aJ
\82¯
\82é", J_KA, LOWER, NORMAL},
77 {"
\82¢
\82ê
\82é", J_RA, LOWER, NORMAL},
78 {"
\93ü
\82ê
\82é", J_RA, LOWER, NORMAL},
79 {"
\95\82\82", J_KA, FIFTH, ION},
80 {"
\91Å
\82Â", J_TA, FIFTH, HATSUON},
81 {"
\92u
\82", J_KA, FIFTH, ION},
82 {"
\94[
\82ß
\82é", J_MA, LOWER, NORMAL},
83 {"
\97\8e\82¿
\82é", J_TA, UPPER, NORMAL},
84 {"
\97\8e\82·", J_SA, FIFTH, NORMAL},
85 {"
\82¨
\82Ì
\82Ì
\82", J_KA, FIFTH, ION},
87 {"
\8bP
\82", J_KA, FIFTH, ION},
88 {"
\8f\91\82", J_KA, FIFTH, ION},
89 {"
\82©
\82¯
\82é", J_KA, UPPER, NORMAL},
90 {"
\82©
\82Ô
\82é", J_RA, FIFTH, HATSUON},
91 {"
\8d\
\82¦
\82é", J_A, LOWER, NORMAL},
92 {"
\8a\9a\82Ý
\82Â
\82", J_KA, FIFTH, ION},
93 {"
\8d\8f\82Þ", J_MA, FIFTH, SOKUON},
94 {"
\92\85\82é", J_KA, UPPER, NORMAL},
95 {"
\97\88\82é", J_KA, KAHEN, NORMAL},
96 {"
\8dÓ
\82", J_KA, FIFTH, ION},
97 {"
\89Á
\82¦
\82é", J_A, LOWER, NORMAL},
98 {"
\82±
\82·
\82é", J_RA, FIFTH, HATSUON},
99 {"
\82±
\82Ü
\82·", J_SA, FIFTH, NORMAL},
100 {"
\8d\9e\82Þ", J_MA, FIFTH, SOKUON},
101 {"
\8eE
\82·", J_SA, FIFTH, NORMAL},
102 {"
\89ó
\82·", J_SA, FIFTH, NORMAL},
104 {"
\95ù
\82°
\82é", J_KA, LOWER, NORMAL},
105 {"
\8eK
\82Ñ
\82é", J_BA, UPPER, NORMAL},
106 {"
\8e\80\82Ê", J_NA, FIFTH, SOKUON},
107 {"
\8a\8a\82é", J_RA, FIFTH, HATSUON},
108 {"
\82·
\82é", J_SA, SAHEN, NORMAL},
110 {"
\82½
\82¶
\82ë
\82®", J_GA, FIFTH, ION},
111 {"
\8fo
\82·", J_SA, FIFTH, NORMAL},
112 {"
\90H
\82×
\82é", J_HA, LOWER, NORMAL},
113 {"
\8eg
\82¤", J_WA, FIFTH, HATSUON},
114 {"
\82Â
\82¯
\82é", J_KA, LOWER, NORMAL},
115 {"
\82Â
\82Ü
\82¸
\82", J_KA, FIFTH, ION},
116 {"
\8fo
\82é", J_NA, LOWER, NORMAL},
117 {"
\89ð
\82", J_KA, FIFTH, ION},
118 {"
\97n
\82¯
\82é", J_KA, LOWER, NORMAL},
119 {"
\82Æ
\82Î
\82·", J_SA, FIFTH, NORMAL},
120 {"
\94ò
\82Ô", J_BA, FIFTH, SOKUON},
121 {"
\8eæ
\82é", J_RA, FIFTH, HATSUON},
123 {"
\93\8a\82°
\82é", J_GA, LOWER, NORMAL},
124 {"
\96¼
\82Ã
\82¯
\82é", J_KA, LOWER, NORMAL},
125 {"
\88¬
\82é", J_RA, FIFTH, HATSUON},
126 {"
\92E
\82®", J_GA, FIFTH, ION},
127 {"
\94G
\82ç
\82·", J_SA, FIFTH, NORMAL},
128 {"
\93h
\82é", J_RA, FIFTH, HATSUON},
129 {"
\88ù
\82Þ", J_MA, FIFTH, SOKUON},
131 {"
\82Í
\82¢
\82¸
\82é", J_RA, FIFTH, HATSUON},
132 {"
\97\9a\82", J_KA, FIFTH, ION},
133 {"
\82Í
\82³
\82Þ", J_MA, FIFTH, SOKUON},
134 {"
\82Í
\82¸
\82·", J_SA, FIFTH, NORMAL},
135 {"
\8aO
\82·", J_SA, FIFTH, NORMAL},
136 {"
\82Í
\82ß
\82é", J_MA, UPPER, NORMAL},
137 {"
\8cõ
\82é", J_RA, FIFTH, HATSUON},
138 {"
\90Z
\82·", J_SA, FIFTH, NORMAL},
139 {"
\82Ð
\82Á
\82©
\82¯
\82é", J_KA, LOWER, NORMAL},
140 {"
\8fE
\82¤", J_WA, FIFTH, HATSUON},
141 {"
\93¥
\82Þ", J_MA, FIFTH, SOKUON},
142 {"
\90U
\82è
\82©
\82´
\82·", J_SA, FIFTH, NORMAL},
143 {"
\90k
\82¦
\82é", J_A, LOWER, NORMAL},
144 {"
\8c@
\82é", J_RA, FIFTH, HATSUON},
146 {"
\8aª
\82", J_KA, FIFTH, ION},
147 {"
\82Ü
\82½
\82½
\82", J_KA, FIFTH, ION},
148 {"
\8eç
\82é", J_RA, FIFTH, HATSUON},
149 {"
\89ñ
\82·", J_SA, FIFTH, NORMAL},
150 {"
\90g
\82É
\82Â
\82¯
\82é", J_KA, LOWER, NORMAL},
151 {"
\8e\9d\82Â", J_TA, FIFTH, HATSUON},
153 {"
\8fÄ
\82", J_KA, FIFTH, ION},
154 {"
\8cÄ
\82Ô", J_BA, FIFTH, SOKUON},
155 {"
\93Ç
\82Þ", J_MA, FIFTH, SOKUON},
156 {"
\82æ
\82ë
\82ß
\82", J_KA, FIFTH, ION},
162 extern unsigned char *e2sj(unsigned char *s);
163 extern unsigned char *sj2e(unsigned char *s);
166 ** conjection verb word
170 **
\92E
\82®
\82È
\82¢
\92E
\82ª
\82È
\82¢
171 **
\92E
\82®
\82½
\92E
\82¢
\82¾
175 jconjsub( tab, jverb, sfx )
176 struct _jconj_tab *tab;
182 static unsigned char tmp[1024];
185 strcpy((char *)tmp, jverb );
187 if(!strncmp(sfx, "
\82Æ", 2)){
188 strcat((char *)tmp, sfx);
192 switch( tab->katsuyo_type ){
195 if(!strncmp(sfx, "
\82È", 2)){
198 p[1] = hira_tab[tab->column][1];
200 memcpy(p, e2sj(hira_tab[tab->column]), 2);
203 strcpy((char *)p + 2, sfx);
206 else if(!strncmp(sfx, "
\82½", 2) || !strncmp(sfx, "
\82Ä", 2)){
207 switch( tab->onbin_type ){
210 p[1] = hira_tab[tab->column + 1][1];
212 memcpy(p, e2sj(hira_tab[tab->column + 1]), 2);
219 memcpy(p, "
\82ñ", 2);
226 memcpy(p, "
\82Á", 2);
233 memcpy(p, "
\82¢", 2);
237 strcpy((char *)p + 2, sfx);
238 if(tab->onbin_type == SOKUON ||
239 (tab->onbin_type == ION && tab->column >= J_GA)){
245 /* memcpy(p+2, e2sj(sj2e(p+2)+1), 2);*//* sj2e() returns ptr to char* */
249 else if(!strncmp(sfx, "
\82Î", 2)){
251 p[1] = hira_tab[tab->column + 3][1];
253 memcpy(p, e2sj(hira_tab[tab->column + 3]), 2);
255 strcpy((char *)p + 2, sfx);
257 else if(!strncmp(sfx, "
\82ê", 2)){
259 p[1]=hira_tab[tab->column + 3][1];
261 memcpy(p, e2sj(hira_tab[tab->column + 3]), 2);
263 strcpy((char *)p + 2, sfx + 2);
265 else if(!strncmp(sfx, "
\82Ü", 2)) {
267 p[1] = hira_tab[tab->column + 1][1];
269 memcpy(p, e2sj(hira_tab[tab->column + 1]), 2);
271 strcpy((char *)p + 2, sfx);
274 else if(!strncmp(sfx, "
\82æ", 2)) {
276 p[1] = hira_tab[tab->column + 4][1];
278 memcpy(p, e2sj(hira_tab[tab->column + 4]), 2);
280 strcpy((char *)p + 2, sfx + 2);
288 if(!strncmp(sfx, "
\82Î", 2)){
289 strcpy((char *)p, "
\82ê");
290 strcpy((char *)p + 2, sfx);
292 else if(!strncmp(sfx, "
\82ê", 2) && tab->katsuyo_type == LOWER){
293 strcpy((char *)p, "
\82ç");
294 strcpy((char *)p + 2, sfx);
297 strcpy((char *)p, sfx);
301 if(!strncmp(sfx, "
\82È", 2) ||
302 !strncmp(sfx, "
\82Ü", 2) ||
303 !strncmp(sfx, "
\82½", 2) ||
304 !strncmp(sfx, "
\82Ä", 2) ||
305 !strncmp(sfx, "
\82æ", 2)){
306 strcpy((char *)p, "
\82µ");
307 strcpy((char *)p + 2, sfx);
309 else if(!strncmp(sfx, "
\82Î", 2) || !strncmp(sfx, "
\82ê
\82Î", 4)){
310 strcpy((char *)p, "
\82·
\82ê
\82Î");
317 /*
\93®
\8e\8c\82Ì
\95Ï
\89» */
323 struct _jconj_tab *tab;
327 for( tab = jconj_tab; tab->main != (void*)0; ++tab){
328 if(!strcmp(jverb, tab->main)){
329 return jconjsub(tab, jverb, sfx);
333 for( tab = jconj_tab; tab->main != (void*)0; ++tab){
334 if(len - strlen(tab->main) > 0 &&
335 !strcmp(jverb + (len - strlen(tab->main)), tab->main)){
336 return jconjsub(tab, jverb, sfx);
341 fprintf( stderr, "I don't know such word \"%s\"\n");
352 static char tmp[1024];
354 int len = strlen(jverb);
355 if(!strcmp(jverb + len - 4, "
\82·
\82é")){
356 strncpy(tmp, jverb, len - 4);
357 strcpy(tmp + len - 4, "
\82Å
\82«
\82é");
360 ret = jconj(jverb, "
\82ê
\82é");
370 static char tmp[1024];
372 int len = strlen(jverb);
373 if(!strcmp(jverb + len - 4, "
\82·
\82é")){
374 strncpy(tmp, jverb, len-4);
375 strcpy(tmp +len-4, "
\82Å
\82«
\82È
\82¢");
378 return jconj(jverb, "
\82ê
\82È
\82¢");
387 return jconj(jverb, "
\82½");
395 return jconj(jverb, "
\82Ü
\82·");
400 ** conjection of adjective word
404 **
\8c`
\97e
\8e\8c\93I
\97p
\96@
\95\9b\8e\8c\93I
\97p
\96@
406 **
\90Ô
\82¢ ->
\90Ô
\82 (
\8c`
\97e
\8e\8c)
407 ** ãY
\97í
\82È -> ãY
\97í
\82É (
\8c`
\97e
\93®
\8e\8c)
408 ** ãY
\97í
\82¾ -> ãY
\97í
\82É (
\8c`
\97e
\93®
\8e\8c)
415 static unsigned char tmp[1024];
417 strcpy((char *)tmp, jadj);
418 len = strlen((char *)tmp);
420 if(!strcmp((char *)tmp + len - 2, "
\82¢")){
421 strcpy((char *)tmp + len - 2, "
\82");
422 } else if(!strcmp((char *)tmp + len - 2, "
\82¾") ||
423 !strcmp((char *)tmp + len - 2, "
\82È") ||
424 !strcmp((char *)tmp + len - 2, "
\82Ì")){
425 strcpy((char *)tmp + len - 2, "
\82É");
434 *e2sj(unsigned char *s)
440 *sj2e(unsigned char *s)
448 struct _jconj_tab *tab;
450 for(tab = jconj_tab; tab->main != (void*)0; ++tab){
451 printf("%-10s
\82È
\82¢ %s\n", tab->main, jconj(tab->main, "
\82È
\82¢"));
452 printf("%-10s
\82Ü
\82· %s\n", tab->main, jconj(tab->main, "
\82Ü
\82·"));
453 printf("%-10s
\82½ %s\n", tab->main, jconj(tab->main, "
\82½"));
454 printf("%-10s
\82ê
\82Î %s\n", tab->main, jconj(tab->main, "
\82ê
\82Î"));
455 printf("%-10s
\82Æ
\82« %s\n", tab->main, jconj(tab->main, "
\82Æ
\82«"));
456 printf("%-10s
\82æ
\82¤ %s\n", tab->main, jconj(tab->main, "
\82æ
\82¤"));
457 printf("%-10s %s\n", tab->main, jcan(tab->main));
458 printf("%-10s %s\n", tab->main, jcannot(tab->main));
460 printf("%s\n", jconj("
\93O
\96é
\82Ånethack
\82Ì
\96|
\96ó
\82ð
\82·
\82é", "
\82È
\82¢"));
461 printf("%s\n", jconj("
\93O
\96é
\82Ånethack
\82Ì
\96|
\96ó
\82ð
\82·
\82é", "
\82Ü
\82·"));
462 printf("%s\n", jconj("
\93O
\96é
\82Ånethack
\82Ì
\96|
\96ó
\82ð
\82·
\82é", "
\82½"));
463 printf("%s\n", jconj("
\93O
\96é
\82Ånethack
\82Ì
\96|
\96ó
\82ð
\82·
\82é", "
\82ê
\82Î"));
464 printf("%s\n", jconj("
\93O
\96é
\82Ånethack
\82Ì
\96|
\96ó
\82ð
\82·
\82é", "
\82Æ
\82«"));