-/*
-**
-** $Id: jconj.c,v 1.11 2005-06-10 22:02:04 argrath Exp $
-**
-*/
-
-/* Copyright (c) Issei Numata 1994-2000 */
+/* JNetHack Copyright */
+/* (c) Issei Numata 1994-2000 */
+/* For 3.4-, Copyright (c) SHIRAKATA Kentaro, 2002-2022 */
/* JNetHack may be freely redistributed. See license for details. */
#include <stdio.h>
#include <ctype.h>
#include <string.h>
+#include "hack.h"
-#define EUC 0
-#define SJIS 1
-#define JIS 2
+#define EUC 0
+#define SJIS 1
+#define JIS 2
/* internal kcode */
/* IC=0 EUC */
/* IC=1 SJIS */
#define IC ((unsigned char)("\8a¿"[0])==0x8a)
-#define J_A 0
-#define J_KA (1*5)
-#define J_SA (2*5)
-#define J_TA (3*5)
-#define J_NA (4*5)
-#define J_HA (5*5)
-#define J_MA (6*5)
-#define J_YA (7*5)
-#define J_RA (8*5)
-#define J_WA (9*5)
-
-#define J_GA (10*5)
-#define J_ZA (11*5)
-#define J_DA (12*5)
-#define J_BA (13*5)
-#define J_PA (14*5)
+#define J_A 0
+#define J_KA (1*5)
+#define J_SA (2*5)
+#define J_TA (3*5)
+#define J_NA (4*5)
+#define J_HA (5*5)
+#define J_MA (6*5)
+#define J_YA (7*5)
+#define J_RA (8*5)
+#define J_WA (9*5)
+
+#define J_GA (10*5)
+#define J_ZA (11*5)
+#define J_DA (12*5)
+#define J_BA (13*5)
+#define J_PA (14*5)
static unsigned char hira_tab[][2]={
{0xa4, 0xa2}, {0xa4, 0xa4}, {0xa4, 0xa6}, {0xa4, 0xa8}, {0xa4, 0xaa},
{0xa4, 0xd1}, {0xa4, 0xd4}, {0xa4, 0xd7}, {0xa4, 0xda}, {0xa4, 0xdd},
};
-#define FIFTH 0 /* \8cÜ\92i */
-#define UPPER 1 /* \8fã\88ê\92i */
-#define LOWER 2 /* \89º\88ê\92i */
-#define SAHEN 3 /* \83T\95Ï */
-#define KAHEN 4 /* \83J\95Ï */
+#define FIFTH 0 /* \8cÜ\92i */
+#define UPPER 1 /* \8fã\88ê\92i */
+#define LOWER 2 /* \89º\88ê\92i */
+#define SAHEN 3 /* \83T\95Ï */
+#define KAHEN 4 /* \83J\95Ï */
-#define NORMAL 0 /* \82 \82¯\82é\81¨\81`\82½ */
-#define SOKUON 1 /* \8d\8f\82Þ\81¨\81`\82ñ\82¾ */
-#define HATSUON 2 /* \91Å\82Â\81¨\81`\82Á\82½ */
-#define ION 3 /* \95\82\82\81¨\81`\82¢\82½ */
+#define NORMAL 0 /* \82 \82¯\82é\81¨\81`\82½ */
+#define SOKUON 1 /* \8d\8f\82Þ\81¨\81`\82ñ\82¾ */
+#define HATSUON 2 /* \91Å\82Â\81¨\81`\82Á\82½ */
+#define ION 3 /* \95\82\82\81¨\81`\82¢\82½ */
struct _jconj_tab {
const char *main;
{"\94[\82ß\82é", J_MA, LOWER, NORMAL},
{"\97\8e\82¿\82é", J_TA, UPPER, NORMAL},
{"\97\8e\82·", J_SA, FIFTH, NORMAL},
+ {"\82¨\82Ì\82Ì\82", J_KA, FIFTH, ION},
/* \82© */
+ {"\8bP\82", J_KA, FIFTH, ION},
{"\8f\91\82", J_KA, FIFTH, ION},
{"\82©\82¯\82é", J_KA, UPPER, NORMAL},
{"\82©\82Ô\82é", J_RA, FIFTH, HATSUON},
{"\8a\8a\82é", J_RA, FIFTH, HATSUON},
{"\82·\82é", J_SA, SAHEN, NORMAL},
/* \82½ */
+ {"\82½\82¶\82ë\82®", J_GA, FIFTH, ION},
{"\8fo\82·", J_SA, FIFTH, NORMAL},
{"\90H\82×\82é", J_HA, LOWER, NORMAL},
{"\8eg\82¤", J_WA, FIFTH, HATSUON},
{"\82Í\82¸\82·", J_SA, FIFTH, NORMAL},
{"\8aO\82·", J_SA, FIFTH, NORMAL},
{"\82Í\82ß\82é", J_MA, UPPER, NORMAL},
+ {"\8cõ\82é", J_RA, FIFTH, HATSUON},
{"\90Z\82·", J_SA, FIFTH, NORMAL},
{"\82Ð\82Á\82©\82¯\82é", J_KA, LOWER, NORMAL},
{"\8fE\82¤", J_WA, FIFTH, HATSUON},
{"\93¥\82Þ", J_MA, FIFTH, SOKUON},
{"\90U\82è\82©\82´\82·", J_SA, FIFTH, NORMAL},
+ {"\90k\82¦\82é", J_A, LOWER, NORMAL},
{"\8c@\82é", J_RA, FIFTH, HATSUON},
/* \82Ü */
{"\8aª\82", J_KA, FIFTH, ION},
+ {"\82Ü\82½\82½\82", J_KA, FIFTH, ION},
{"\8eç\82é", J_RA, FIFTH, HATSUON},
{"\89ñ\82·", J_SA, FIFTH, NORMAL},
{"\90g\82É\82Â\82¯\82é", J_KA, LOWER, NORMAL},
{"\8fÄ\82", J_KA, FIFTH, ION},
{"\8cÄ\82Ô", J_BA, FIFTH, SOKUON},
{"\93Ç\82Þ", J_MA, FIFTH, SOKUON},
+ {"\82æ\82ë\82ß\82", J_KA, FIFTH, ION},
/* \82ç */
/* \82í */
{(void*)0, 0, 0, 0},
extern unsigned char *sj2e(unsigned char *s);
/*
-** conjection verb word
+** conjection verb word
**
-** Example
-** arg1 arg2 result
-** \92E\82® \82È\82¢ \92E\82ª\82È\82¢
-** \92E\82® \82½ \92E\82¢\82¾
+** Example
+** arg1 arg2 result
+** \92E\82® \82È\82¢ \92E\82ª\82È\82¢
+** \92E\82® \82½ \92E\82¢\82¾
**
*/
static char *
len = strlen(jverb);
strcpy((char *)tmp, jverb );
- if(!strncmp(sfx, "\82Æ", 2)){
- strcat((char *)tmp, sfx);
- return (char *)tmp;
+ if(!STRNCMP2(sfx, "\82Æ")){
+ strcat((char *)tmp, sfx);
+ return (char *)tmp;
}
switch( tab->katsuyo_type ){
case FIFTH:
- p = tmp + (len - 2);
- if(!strncmp(sfx, "\82È", 2)){
- if(!IC){
- p[0] = 0xa4;
- p[1] = hira_tab[tab->column][1];
- } else {
- memcpy(p, e2sj(hira_tab[tab->column]), 2);
- }
-
- strcpy((char *)p + 2, sfx);
- break;
- }
- else if(!strncmp(sfx, "\82½", 2) || !strncmp(sfx, "\82Ä", 2)){
- switch( tab->onbin_type ){
- case NORMAL:
- if(!IC){
- p[1] = hira_tab[tab->column + 1][1];
- } else {
- memcpy(p, e2sj(hira_tab[tab->column + 1]), 2);
- }
- break;
- case SOKUON:
- if(!IC){
- p[1] = 0xf3;
- } else {
- memcpy(p, "\82ñ", 2);
- }
- break;
- case HATSUON:
- if(!IC){
- p[1] = 0xc3;
- } else {
- memcpy(p, "\82Á", 2);
- }
- break;
- case ION:
- if(!IC){
- p[1] = 0xa4;
- } else {
- memcpy(p, "\82¢", 2);
- }
- break;
- }
- strcpy((char *)p + 2, sfx);
- if(tab->onbin_type == SOKUON ||
- (tab->onbin_type == ION && tab->column >= J_GA)){
- if(!IC){
- ++p[3];
- } else {
- ++p[3];
- }
-/* memcpy(p+2, e2sj(sj2e(p+2)+1), 2);*//* sj2e() returns ptr to char* */
- }
- break;
- }
- else if(!strncmp(sfx, "\82Î", 2)){
- if(!IC){
- p[1] = hira_tab[tab->column + 3][1];
- } else {
- memcpy(p, e2sj(hira_tab[tab->column + 3]), 2);
- }
- strcpy((char *)p + 2, sfx);
- }
- else if(!strncmp(sfx, "\82ê", 2)){
- if(!IC){
- p[1]=hira_tab[tab->column + 3][1];
- } else {
- memcpy(p, e2sj(hira_tab[tab->column + 3]), 2);
- }
- strcpy((char *)p + 2, sfx + 2);
- }
- else if(!strncmp(sfx, "\82Ü", 2)) {
- if(!IC){
- p[1] = hira_tab[tab->column + 1][1];
- } else {
- memcpy(p, e2sj(hira_tab[tab->column + 1]), 2);
- }
- strcpy((char *)p + 2, sfx);
- break;
- }
- else if(!strncmp(sfx, "\82æ", 2)) {
- if(!IC){
- p[1] = hira_tab[tab->column + 4][1];
- } else {
- memcpy(p, e2sj(hira_tab[tab->column + 4]), 2);
- }
- strcpy((char *)p + 2, sfx + 2);
- break;
- }
- break;
+ p = tmp + (len - 2);
+ if(!STRNCMP2(sfx, "\82È")){
+ if(!IC){
+ p[0] = 0xa4;
+ p[1] = hira_tab[tab->column][1];
+ } else {
+ memcpy(p, e2sj(hira_tab[tab->column]), 2);
+ }
+
+ strcpy((char *)p + 2, sfx);
+ break;
+ }
+ else if(!STRNCMP2(sfx, "\82½") || !STRNCMP2(sfx, "\82Ä")){
+ switch( tab->onbin_type ){
+ case NORMAL:
+ if(!IC){
+ p[1] = hira_tab[tab->column + 1][1];
+ } else {
+ memcpy(p, e2sj(hira_tab[tab->column + 1]), 2);
+ }
+ break;
+ case SOKUON:
+ if(!IC){
+ p[1] = 0xf3;
+ } else {
+ memcpy(p, "\82ñ", 2);
+ }
+ break;
+ case HATSUON:
+ if(!IC){
+ p[1] = 0xc3;
+ } else {
+ memcpy(p, "\82Á", 2);
+ }
+ break;
+ case ION:
+ if(!IC){
+ p[1] = 0xa4;
+ } else {
+ memcpy(p, "\82¢", 2);
+ }
+ break;
+ }
+ strcpy((char *)p + 2, sfx);
+ if(tab->onbin_type == SOKUON ||
+ (tab->onbin_type == ION && tab->column >= J_GA)){
+ if(!IC){
+ ++p[3];
+ } else {
+ ++p[3];
+ }
+/* memcpy(p+2, e2sj(sj2e(p+2)+1), 2);*//* sj2e() returns ptr to char* */
+ }
+ break;
+ }
+ else if(!STRNCMP2(sfx, "\82Î")){
+ if(!IC){
+ p[1] = hira_tab[tab->column + 3][1];
+ } else {
+ memcpy(p, e2sj(hira_tab[tab->column + 3]), 2);
+ }
+ strcpy((char *)p + 2, sfx);
+ }
+ else if(!STRNCMP2(sfx, "\82ê")){
+ if(!IC){
+ p[1]=hira_tab[tab->column + 3][1];
+ } else {
+ memcpy(p, e2sj(hira_tab[tab->column + 3]), 2);
+ }
+ strcpy((char *)p + 2, sfx + 2);
+ }
+ else if(!STRNCMP2(sfx, "\82Ü")) {
+ if(!IC){
+ p[1] = hira_tab[tab->column + 1][1];
+ } else {
+ memcpy(p, e2sj(hira_tab[tab->column + 1]), 2);
+ }
+ strcpy((char *)p + 2, sfx);
+ break;
+ }
+ else if(!STRNCMP2(sfx, "\82æ")) {
+ if(!IC){
+ p[1] = hira_tab[tab->column + 4][1];
+ } else {
+ memcpy(p, e2sj(hira_tab[tab->column + 4]), 2);
+ }
+ strcpy((char *)p + 2, sfx + 2);
+ break;
+ }
+ break;
case LOWER:
case UPPER:
case KAHEN:
- p = tmp + (len - 2);
- if(!strncmp(sfx, "\82Î", 2)){
- strcpy((char *)p, "\82ê");
- strcpy((char *)p + 2, sfx);
- }
- else if(!strncmp(sfx, "\82ê", 2) && tab->katsuyo_type == LOWER){
- strcpy((char *)p, "\82ç");
- strcpy((char *)p + 2, sfx);
- }
- else
- strcpy((char *)p, sfx);
- break;
+ p = tmp + (len - 2);
+ if(!STRNCMP2(sfx, "\82Î")){
+ strcpy((char *)p, "\82ê");
+ strcpy((char *)p + 2, sfx);
+ }
+ else if(!STRNCMP2(sfx, "\82ê") && tab->katsuyo_type == LOWER){
+ strcpy((char *)p, "\82ç");
+ strcpy((char *)p + 2, sfx);
+ }
+ else
+ strcpy((char *)p, sfx);
+ break;
case SAHEN:
- p = tmp + (len - 4);
- if(!strncmp(sfx, "\82È", 2) ||
- !strncmp(sfx, "\82Ü", 2) ||
- !strncmp(sfx, "\82½", 2) ||
- !strncmp(sfx, "\82Ä", 2) ||
- !strncmp(sfx, "\82æ", 2)){
- strcpy((char *)p, "\82µ");
- strcpy((char *)p + 2, sfx);
- }
- else if(!strncmp(sfx, "\82Î", 2) || !strncmp(sfx, "\82ê\82Î", 4)){
- strcpy((char *)p, "\82·\82ê\82Î");
- }
- break;
+ p = tmp + (len - 4);
+ if(!STRNCMP2(sfx, "\82È") ||
+ !STRNCMP2(sfx, "\82Ü") ||
+ !STRNCMP2(sfx, "\82½") ||
+ !STRNCMP2(sfx, "\82Ä") ||
+ !STRNCMP2(sfx, "\82æ")){
+ strcpy((char *)p, "\82µ");
+ strcpy((char *)p + 2, sfx);
+ }
+ else if(!STRNCMP2(sfx, "\82Î") || !STRNCMP2(sfx, "\82ê\82Î")){
+ strcpy((char *)p, "\82·\82ê\82Î");
+ }
+ break;
}
return (char *)tmp;
}
len = strlen(jverb);
for( tab = jconj_tab; tab->main != (void*)0; ++tab){
- if(!strcmp(jverb, tab->main)){
- return jconjsub(tab, jverb, sfx);
- }
+ if(!strcmp(jverb, tab->main)){
+ return jconjsub(tab, jverb, sfx);
+ }
}
for( tab = jconj_tab; tab->main != (void*)0; ++tab){
- if(len - strlen(tab->main) > 0 &&
- !strcmp(jverb + (len - strlen(tab->main)), tab->main)){
- return jconjsub(tab, jverb, sfx);
- }
+ if(len - strlen(tab->main) > 0 &&
+ !strcmp(jverb + (len - strlen(tab->main)), tab->main)){
+ return jconjsub(tab, jverb, sfx);
+ }
}
#ifdef JAPANESETEST
const char *jverb;
{
const char *ret;
- static unsigned char tmp[1024];
+ static char tmp[1024];
int len = strlen(jverb);
if(!strcmp(jverb + len - 4, "\82·\82é")){
- strncpy(tmp, jverb, len - 4);
- strcpy(tmp + len - 4, "\82Å\82«\82é");
- return tmp;
+ strncpy(tmp, jverb, len - 4);
+ strcpy(tmp + len - 4, "\82Å\82«\82é");
+ return tmp;
} else {
- ret = jconj(jverb, "\82ê\82é");
- return ret;
+ ret = jconj(jverb, "\82ê\82é");
+ return ret;
}
}
jcannot(jverb)
const char *jverb;
{
- static unsigned char tmp[1024];
+ static char tmp[1024];
int len = strlen(jverb);
if(!strcmp(jverb + len - 4, "\82·\82é")){
- strncpy(tmp, jverb, len-4);
- strcpy(tmp +len-4, "\82Å\82«\82È\82¢");
- return tmp;
+ strncpy(tmp, jverb, len-4);
+ strcpy(tmp +len-4, "\82Å\82«\82È\82¢");
+ return tmp;
} else {
- return jconj(jverb, "\82ê\82È\82¢");
+ return jconj(jverb, "\82ê\82È\82¢");
}
}
/*
-** conjection of adjective word
+** conjection of adjective word
**
-** Example:
+** Example:
**
-** \8c`\97e\8e\8c\93I\97p\96@ \95\9b\8e\8c\93I\97p\96@
+** \8c`\97e\8e\8c\93I\97p\96@ \95\9b\8e\8c\93I\97p\96@
**
-** \90Ô\82¢ -> \90Ô\82 (\8c`\97e\8e\8c)
-** ãY\97í\82È -> ãY\97í\82É (\8c`\97e\93®\8e\8c)
-** ãY\97í\82¾ -> ãY\97í\82É (\8c`\97e\93®\8e\8c)
+** \90Ô\82¢ -> \90Ô\82 (\8c`\97e\8e\8c)
+** ãY\97í\82È -> ãY\97í\82É (\8c`\97e\93®\8e\8c)
+** ãY\97í\82¾ -> ãY\97í\82É (\8c`\97e\93®\8e\8c)
*/
const char *
jconj_adj( jadj )
len = strlen((char *)tmp);
if(!strcmp((char *)tmp + len - 2, "\82¢")){
- strcpy((char *)tmp + len - 2, "\82");
+ strcpy((char *)tmp + len - 2, "\82");
} else if(!strcmp((char *)tmp + len - 2, "\82¾") ||
- !strcmp((char *)tmp + len - 2, "\82È") ||
- !strcmp((char *)tmp + len - 2, "\82Ì")){
- strcpy((char *)tmp + len - 2, "\82É");
+ !strcmp((char *)tmp + len - 2, "\82È") ||
+ !strcmp((char *)tmp + len - 2, "\82Ì")){
+ strcpy((char *)tmp + len - 2, "\82É");
}
return (char *)tmp;
struct _jconj_tab *tab;
for(tab = jconj_tab; tab->main != (void*)0; ++tab){
- printf("%-10s \82È\82¢ %s\n", tab->main, jconj(tab->main, "\82È\82¢"));
- printf("%-10s \82Ü\82· %s\n", tab->main, jconj(tab->main, "\82Ü\82·"));
- printf("%-10s \82½ %s\n", tab->main, jconj(tab->main, "\82½"));
- printf("%-10s \82ê\82Î %s\n", tab->main, jconj(tab->main, "\82ê\82Î"));
- printf("%-10s \82Æ\82« %s\n", tab->main, jconj(tab->main, "\82Æ\82«"));
- printf("%-10s \82æ\82¤ %s\n", tab->main, jconj(tab->main, "\82æ\82¤"));
- printf("%-10s %s\n", tab->main, jcan(tab->main));
- printf("%-10s %s\n", tab->main, jcannot(tab->main));
+ printf("%-10s \82È\82¢ %s\n", tab->main, jconj(tab->main, "\82È\82¢"));
+ printf("%-10s \82Ü\82· %s\n", tab->main, jconj(tab->main, "\82Ü\82·"));
+ printf("%-10s \82½ %s\n", tab->main, jconj(tab->main, "\82½"));
+ printf("%-10s \82ê\82Î %s\n", tab->main, jconj(tab->main, "\82ê\82Î"));
+ printf("%-10s \82Æ\82« %s\n", tab->main, jconj(tab->main, "\82Æ\82«"));
+ printf("%-10s \82æ\82¤ %s\n", tab->main, jconj(tab->main, "\82æ\82¤"));
+ printf("%-10s %s\n", tab->main, jcan(tab->main));
+ printf("%-10s %s\n", tab->main, jcannot(tab->main));
}
printf("%s\n", jconj("\93O\96é\82Ånethack\82Ì\96|\96ó\82ð\82·\82é", "\82È\82¢"));
printf("%s\n", jconj("\93O\96é\82Ånethack\82Ì\96|\96ó\82ð\82·\82é", "\82Ü\82·"));