diff --git a/include/sj3core/sj_kanakan.h b/include/sj3core/sj_kanakan.h index 9d1c6ae..f18c36e 100644 --- a/include/sj3core/sj_kanakan.h +++ b/include/sj3core/sj_kanakan.h @@ -151,6 +151,10 @@ int hzstrlen(u_char*, int); void seg_count(SJ3_CONTEXT DICT*); void mkidxtbl(SJ3_CONTEXT DICT*); void initwork(SJ3_CONTEXT2); +#ifndef SJ3_GLOBAL +Sj3Context* alloccontext(const char*); +void free_context(Sj3Context*); +#endif /* istrcmp.c */ int istrcmp(u_char*, u_char*, int, int); @@ -178,12 +182,12 @@ JREC* argjrec(SJ3_CONTEXT int, JREC*); /* mkkouho.c */ void mkkouho(SJ3_CONTEXT2); -u_char* makekan_none(u_char*, u_char*, int); -u_char* makekan_1byte(u_char*, u_char*, int); +u_char* makekan_none(SJ3_CONTEXT u_char*, u_char*, int); +u_char* makekan_1byte(SJ3_CONTEXT u_char*, u_char*, int); u_char* makekan_knj(SJ3_CONTEXT u_char*, u_char*, int); u_char* makekan_ofs(SJ3_CONTEXT u_char*, u_char*, int); -u_char* makekan_norm(u_char*, u_char*, int); -u_char* makekan_ascii(u_char*, u_char*, int); +u_char* makekan_norm(SJ3_CONTEXT u_char*, u_char*, int); +u_char* makekan_ascii(SJ3_CONTEXT u_char*, u_char*, int); int sel_sjmode(JREC*); /* mknumber.c */ @@ -260,12 +264,12 @@ extern u_short* selsjadrs[]; int setconj(SJ3_CONTEXT TypeGram, JREC*, CREC*); /* setjrec.c */ -int setj_atrb(u_char*); +int setj_atrb(SJ3_CONTEXT u_char*); int setj_ofs(SJ3_CONTEXT u_char*); int setj_knj(SJ3_CONTEXT u_char*); -int setj_norm1(u_char*); -int setj_norm2(u_char*); -int setj_norm3(u_char*); /* unused??? */ +int setj_norm1(SJ3_CONTEXT u_char*); +int setj_norm2(SJ3_CONTEXT u_char*); +int setj_norm3(SJ3_CONTEXT u_char*); /* unused??? */ void setjrec(SJ3_CONTEXT u_char*, int); void setnumrec(SJ3_CONTEXT u_char*, JREC*, TypeGram); void setcrec(SJ3_CONTEXT u_char*); @@ -273,13 +277,13 @@ void setcrec(SJ3_CONTEXT u_char*); /* setkouho.c */ void setkouho(SJ3_CONTEXT CLREC*, TypeDicOfs, int); void ph_setkouho(SJ3_CONTEXT CLREC*, TypeDicOfs, STDYIN*); -int hiraknj_atrb(u_char*, int*); +int hiraknj_atrb(SJ3_CONTEXT u_char*, int*); int hiraknj_ofs(SJ3_CONTEXT u_char*, int*); int hiraknj_knj(SJ3_CONTEXT u_char*, int*); -int hiraknj_hask(u_char*, int*); -int hiraknj_kask(u_char*, int*); -int hiraknj_norm(u_char*, int*); -int hiraknj_hira(u_char*, int*); +int hiraknj_hask(SJ3_CONTEXT u_char*, int*); +int hiraknj_kask(SJ3_CONTEXT u_char*, int*); +int hiraknj_norm(SJ3_CONTEXT u_char*, int*); +int hiraknj_hira(SJ3_CONTEXT u_char*, int*); /* setubi.c */ u_char* getstb(TypeGram); diff --git a/include/sj3core/sj_rename.h b/include/sj3core/sj_rename.h index 721e7a3..b1ba652 100644 --- a/include/sj3core/sj_rename.h +++ b/include/sj3core/sj_rename.h @@ -202,6 +202,8 @@ #define seg_count Jseg_count #define mkidxtbl Jmkidxtbl #define initwork Jinitwork +#define alloccontext Jalloccontext +#define free_context Jfree_context #define free_jlst Jfree_jlst #define free_clst Jfree_clst diff --git a/lib/sj3core/adddic.c b/lib/sj3core/adddic.c index f119581..279dba6 100644 --- a/lib/sj3core/adddic.c +++ b/lib/sj3core/adddic.c @@ -98,7 +98,7 @@ u_int adddic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) { segnum = srchidx(SJ3_CONTEXT_PASS(TypeDicSeg) DICSEGBASE, cnvlen); for(;;) { - (*curdict->getdic)(curdict, segnum); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, segnum); i = srchkana(SJ3_CONTEXT_PASS & p1, &saml); dstofs = douofs = p1 - dicbuf; hnsofs = knjofs = 0; @@ -153,7 +153,7 @@ u_int adddic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) { if((unsigned int)freidx < getplen(p1) + nlen + 1) return AD_OVFLWINDEX; - if((*curdict->putdic)(curdict, curdict->segunit)) + if((*curdict->putdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit)) return AD_OVFLWUSRDIC; sprt_seg(SJ3_CONTEXT_PASS segnum, pos); @@ -166,15 +166,15 @@ u_int adddic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) { if((unsigned int)freidx < cnvlen + 1) return AD_OVFLWINDEX; - if((*curdict->putdic)(curdict, curdict->segunit)) + if((*curdict->putdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit)) return AD_OVFLWUSRDIC; curdict->segunit++; - (*curdict->getdic)(curdict, curdict->segunit - 1); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit - 1); memset(dicbuf, DICSEGTERM, (int)curdict->seglen); dicbuf[0] = 0; - (*curdict->putdic)(curdict, curdict->segunit - 1); - (*curdict->rszdic)(curdict, curdict->segunit); + (*curdict->putdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit - 1); + (*curdict->rszdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit); mkidxtbl(SJ3_CONTEXT_PASS curdict); segnum++; @@ -183,7 +183,7 @@ u_int adddic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) { if((unsigned int)freidx < getplen(p1) + nlen + 1) return AD_OVFLWINDEX; - if((*curdict->putdic)(curdict, curdict->segunit)) + if((*curdict->putdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit)) return AD_OVFLWUSRDIC; sprt_seg(SJ3_CONTEXT_PASS segnum, douofs); @@ -258,7 +258,7 @@ u_int adddic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) { if(!knjofs) *dstptr++ = HINSIBLKTERM; - (*curdict->putdic)(curdict, segnum); + (*curdict->putdic)(SJ3_CONTEXT_PASS curdict, segnum); if(StudyExist()) { size -= nxtask; @@ -418,13 +418,13 @@ sprt_seg(SJ3_CONTEXT TypeDicSeg seg, TypeDicOfs ofs) { STDYIN* stdy; for(s = curdict->segunit - 1; s >= seg; s--) { - (*curdict->getdic)(curdict, s); - (*curdict->putdic)(curdict, s + 1); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, s); + (*curdict->putdic)(SJ3_CONTEXT_PASS curdict, s + 1); } curdict->segunit++; - (*curdict->rszdic)(curdict, curdict->segunit); + (*curdict->rszdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit); - (*curdict->getdic)(curdict, seg + 1); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, seg + 1); pos = dicbuf + ofs; @@ -455,7 +455,7 @@ sprt_seg(SJ3_CONTEXT TypeDicSeg seg, TypeDicOfs ofs) { p += i; memset(p, DICSEGTERM, (dicbuf + curdict->seglen - p)); - (*curdict->putdic)(curdict, seg + 1); + (*curdict->putdic)(SJ3_CONTEXT_PASS curdict, seg + 1); if(StudyExist()) { dicid = curdict->dicid; @@ -473,9 +473,9 @@ sprt_seg(SJ3_CONTEXT TypeDicSeg seg, TypeDicOfs ofs) { } } - (*curdict->getdic)(curdict, seg); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, seg); memset(dicbuf + ofs, DICSEGTERM, (int)(curdict->seglen - ofs)); - (*curdict->putdic)(curdict, seg); + (*curdict->putdic)(SJ3_CONTEXT_PASS curdict, seg); } static void @@ -493,7 +493,7 @@ apnd_uidx(SJ3_CONTEXT TypeDicSeg seg, u_char* yomi, int len) { *p++ = *yomi++; *p = 0; - (*curdict->putidx)(curdict, 0); + (*curdict->putidx)(SJ3_CONTEXT_PASS curdict, 0); mkidxtbl(SJ3_CONTEXT_PASS curdict); } diff --git a/lib/sj3core/addelcmn.c b/lib/sj3core/addelcmn.c index 017c296..fb1d6fd 100644 --- a/lib/sj3core/addelcmn.c +++ b/lib/sj3core/addelcmn.c @@ -347,7 +347,7 @@ void chg_uidx(SJ3_CONTEXT TypeDicSeg seg, u_char* yomi, int len) { } while(len--) *p++ = *yomi++; - (*curdict->putidx)(curdict, 0); + (*curdict->putidx)(SJ3_CONTEXT_PASS curdict, 0); mkidxtbl(SJ3_CONTEXT_PASS curdict); } diff --git a/lib/sj3core/cvtdict.c b/lib/sj3core/cvtdict.c index 156c8d2..f83010b 100644 --- a/lib/sj3core/cvtdict.c +++ b/lib/sj3core/cvtdict.c @@ -82,7 +82,7 @@ void cvtdict(SJ3_CONTEXT KHREC* krec, CLREC* clrec, int flg) { if(flg) { - (*Cvtnum_func[krec->mode - 1])(ystart + sttlen, yptr, jrec); + (*Cvtnum_func[krec->mode - 1])(SJ3_CONTEXT_PASS ystart + sttlen, yptr, jrec); yptr += (i = jrec->numlen) * 2; jlen -= i; @@ -108,7 +108,7 @@ void cvtdict(SJ3_CONTEXT KHREC* krec, CLREC* clrec, int flg) { if(ofs) { if(seldict(SJ3_CONTEXT_PASS jrec->dicid)) { - (*curdict->getdic)(curdict, jrec->jseg); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, jrec->jseg); get_askknj(SJ3_CONTEXT_PASS2); kanjitmp += getkanji(SJ3_CONTEXT_PASS yptr, jlen, dicbuf + ofs, kanjitmp); diff --git a/lib/sj3core/deldic.c b/lib/sj3core/deldic.c index c465c29..cdbd9b0 100644 --- a/lib/sj3core/deldic.c +++ b/lib/sj3core/deldic.c @@ -69,7 +69,7 @@ u_int deldic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) { cnvlen = sstrlen(yptr); useg = srchidx(SJ3_CONTEXT_PASS(TypeDicSeg) DICSEGBASE, cnvlen); - (*curdict->getdic)(curdict, useg); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, useg); if(!(dblknum = srchkana(SJ3_CONTEXT_PASS & p1, &samlen))) return AD_NOMIDASI; @@ -108,7 +108,7 @@ u_int deldic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) { set_size(p1, (int)(getsize(p1) - size), (int)getplen(p1), (int)getnlen(p1)); - (*curdict->putdic)(curdict, useg); + (*curdict->putdic)(SJ3_CONTEXT_PASS curdict, useg); del_stdy(SJ3_CONTEXT_PASS useg, ofs, size); @@ -154,7 +154,7 @@ del_douon(SJ3_CONTEXT TypeDicSeg seg, u_char* ptr, TypeDicOfs ofs) { } } - (*curdict->putdic)(curdict, seg); + (*curdict->putdic)(SJ3_CONTEXT_PASS curdict, seg); del_stdy(SJ3_CONTEXT_PASS seg, ofs, size); @@ -171,17 +171,17 @@ del_segment(SJ3_CONTEXT TypeDicSeg seg) { if(curdict->segunit > 1) { for(sg = seg + 1; sg < curdict->segunit; sg++) { - (*curdict->getdic)(curdict, sg); - (*curdict->putdic)(curdict, sg - 1); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, sg); + (*curdict->putdic)(SJ3_CONTEXT_PASS curdict, sg - 1); } curdict->segunit--; } else { memset(dicbuf, DICSEGTERM, (int)curdict->seglen); dicbuf[0] = 0; - (*curdict->putdic)(curdict, DICSEGBASE); + (*curdict->putdic)(SJ3_CONTEXT_PASS curdict, DICSEGBASE); } - (*curdict->rszdic)(curdict, curdict->segunit); + (*curdict->rszdic)(SJ3_CONTEXT_PASS curdict, curdict->segunit); del_uidx(SJ3_CONTEXT_PASS seg); @@ -227,7 +227,7 @@ del_uidx(SJ3_CONTEXT TypeDicSeg seg) { len = q - p; memset(idxbuf + curdict->idxlen - len, 0, len); - (*curdict->putidx)(curdict, 0); + (*curdict->putidx)(SJ3_CONTEXT_PASS curdict, 0); mkidxtbl(SJ3_CONTEXT_PASS curdict); } diff --git a/lib/sj3core/dict.c b/lib/sj3core/dict.c index e893a96..71d34d5 100644 --- a/lib/sj3core/dict.c +++ b/lib/sj3core/dict.c @@ -82,8 +82,8 @@ int seldict(SJ3_CONTEXT TypeDicID id) { u_char* get_idxptr(SJ3_CONTEXT TypeDicSeg seg) { - (*curdict->getofs)(curdict); - (*curdict->getidx)(curdict); + (*curdict->getofs)(SJ3_CONTEXT_PASS curdict); + (*curdict->getidx)(SJ3_CONTEXT_PASS curdict); return idxbuf + idxofs[seg]; } diff --git a/lib/sj3core/init.c b/lib/sj3core/init.c index 800f57a..1d63557 100644 --- a/lib/sj3core/init.c +++ b/lib/sj3core/init.c @@ -43,7 +43,7 @@ void seg_count(SJ3_CONTEXT DICT* dict) { TypeDicSeg segcnt = 0; if(dict->getidx) { - (*dict->getidx)(dict); + (*dict->getidx)(SJ3_CONTEXT_PASS dict); p = idxbuf; q = p + dict->idxlen; @@ -64,8 +64,8 @@ void mkidxtbl(SJ3_CONTEXT DICT* dict) { seg = 0; - (*dict->getidx)(dict); - (*dict->getofs)(dict); + (*dict->getidx)(SJ3_CONTEXT_PASS dict); + (*dict->getofs)(SJ3_CONTEXT_PASS dict); idxofs[0] = 0; for(p = idxbuf; p < idxbuf + dict->idxlen && seg < dict->segunit;) { @@ -78,3 +78,49 @@ void initwork(SJ3_CONTEXT2) { jrt1st = jrt2nd = maxjptr = (JREC*)0; clt1st = clt2nd = maxclptr = (CLREC*)0; } + +#ifndef SJ3_GLOBAL +Sj3Context* alloccontext(const char* dic) { + Sj3Context* ctx = calloc(1, sizeof(*ctx)); + DictFile* dict; + DICTL* node; + + ctx->work = calloc(1, sizeof(*ctx->work)); + ctx->stdy = calloc(1, sizeof(*ctx->stdy)); + + node = calloc(1, sizeof(*node)); + ctx->work->Jdictlist = node; + + initwork(ctx); + + dict = opendict(ctx, (char*)dic, ""); + + node->dict = &dict->dict; + node->next = NULL; + + seldict(ctx, dict->dict.dicid); + + return ctx; +} + +void free_context(Sj3Context* ctx) { + DICTL* node; + + node = ctx->work->Jdictlist; + while(node != NULL) { + DICTL* next = node->next; + + closedict(ctx, (DictFile*)node->dict); + free(node); + + node = next; + } + + freework(ctx); + + free(ctx->stdy); + free(ctx->work); + + free(ctx); +} +#endif diff --git a/lib/sj3core/mkkouho.c b/lib/sj3core/mkkouho.c index a4ead4c..f5a1e4a 100644 --- a/lib/sj3core/mkkouho.c +++ b/lib/sj3core/mkkouho.c @@ -99,7 +99,7 @@ cl_kanji(SJ3_CONTEXT JREC* jrec, CLREC* clrec) { int kcount = khcount; if(seldict(SJ3_CONTEXT_PASS jrec->dicid)) { - (*curdict->getdic)(curdict, jrec->jseg); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, jrec->jseg); ptr = dicbuf + jrec->jofsst + 1; get_askknj(SJ3_CONTEXT_PASS2); @@ -116,12 +116,12 @@ cl_kanji(SJ3_CONTEXT JREC* jrec, CLREC* clrec) { } u_char* -makekan_none(u_char* s, u_char* d, int flg) { +makekan_none(SJ3_CONTEXT u_char* s, u_char* d, int flg) { return d; } u_char* -makekan_1byte(u_char* s, u_char* d, int flg) { +makekan_1byte(SJ3_CONTEXT u_char* s, u_char* d, int flg) { if((*s & KANJIMODEMASK) == ZENHIRAASSYUKU) *d++ = 0x10 | (*s & KNJASSYUKUMASK); else @@ -142,7 +142,7 @@ u_char* makekan_ofs(SJ3_CONTEXT u_char* s, u_char* d, int flg) { } u_char* -makekan_norm(u_char* s, u_char* d, int flg) { +makekan_norm(SJ3_CONTEXT u_char* s, u_char* d, int flg) { u_char c; if(*s != 0) { @@ -159,7 +159,7 @@ makekan_norm(u_char* s, u_char* d, int flg) { } u_char* -makekan_ascii(u_char* s, u_char* d, int flg) { +makekan_ascii(SJ3_CONTEXT u_char* s, u_char* d, int flg) { u_char c; c = s[1]; @@ -181,11 +181,11 @@ makekan(SJ3_CONTEXT u_char* s, u_char* d, int flg) { if(s[csize] == KANJISTREND) { switch(*s & KANJIMODEMASK) { case ZENHIRAASSYUKU: - d = makekan_1byte(s, d, flg); + d = makekan_1byte(SJ3_CONTEXT_PASS s, d, flg); break; case ZENKATAASSYUKU: - d = makekan_1byte(s, d, flg); + d = makekan_1byte(SJ3_CONTEXT_PASS s, d, flg); break; case OFFSETASSYUKU: @@ -193,11 +193,11 @@ makekan(SJ3_CONTEXT u_char* s, u_char* d, int flg) { break; case AIATTRIBUTE: - d = makekan_none(s, d, flg); + d = makekan_none(SJ3_CONTEXT_PASS s, d, flg); break; case LEADINGHANKAKU: - d = makekan_ascii(s, d, flg); + d = makekan_ascii(SJ3_CONTEXT_PASS s, d, flg); break; case KANJIASSYUKU: @@ -205,17 +205,17 @@ makekan(SJ3_CONTEXT u_char* s, u_char* d, int flg) { break; default: - d = makekan_norm(s, d, flg); + d = makekan_norm(SJ3_CONTEXT_PASS s, d, flg); } break; } else switch(*s & KANJIMODEMASK) { case ZENHIRAASSYUKU: - d = makekan_1byte(s, d, FALSE); + d = makekan_1byte(SJ3_CONTEXT_PASS s, d, FALSE); break; case ZENKATAASSYUKU: - d = makekan_1byte(s, d, FALSE); + d = makekan_1byte(SJ3_CONTEXT_PASS s, d, FALSE); break; case OFFSETASSYUKU: @@ -223,11 +223,11 @@ makekan(SJ3_CONTEXT u_char* s, u_char* d, int flg) { break; case AIATTRIBUTE: - d = makekan_none(s, d, FALSE); + d = makekan_none(SJ3_CONTEXT_PASS s, d, FALSE); break; case LEADINGHANKAKU: - d = makekan_ascii(s, d, FALSE); + d = makekan_ascii(SJ3_CONTEXT_PASS s, d, FALSE); break; case KANJIASSYUKU: @@ -235,7 +235,7 @@ makekan(SJ3_CONTEXT u_char* s, u_char* d, int flg) { break; default: - d = makekan_norm(s, d, FALSE); + d = makekan_norm(SJ3_CONTEXT_PASS s, d, FALSE); } s += codesize(*s); } @@ -404,7 +404,7 @@ cl_numcmn(SJ3_CONTEXT JREC* jrec, CLREC* clrec) { i = sel_sjmode(jrec); if(seldict(SJ3_CONTEXT_PASS jrec->dicid)) { - (*curdict->getdic)(curdict, jrec->jseg); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, jrec->jseg); p = dicbuf + jrec->jofsst + 1; diff --git a/lib/sj3core/peepdic.c b/lib/sj3core/peepdic.c index 3ac9ccc..159a36f 100644 --- a/lib/sj3core/peepdic.c +++ b/lib/sj3core/peepdic.c @@ -50,7 +50,7 @@ int getusr(SJ3_CONTEXT u_char* buf) { peepyomi[0] = peepknj[0] = peepgrm = 0; - (*curdict->getdic)(curdict, peepidx = DICSEGBASE); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, peepidx = DICSEGBASE); get_askknj(SJ3_CONTEXT_PASS2); peepdptr = segtop(); @@ -74,7 +74,7 @@ int getusr(SJ3_CONTEXT u_char* buf) { } int nextusr(SJ3_CONTEXT u_char* buf) { - (*curdict->getdic)(curdict, peepidx); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, peepidx); get_askknj(SJ3_CONTEXT_PASS2); if(next_kanji(SJ3_CONTEXT_PASS2)) { @@ -89,7 +89,7 @@ int nextusr(SJ3_CONTEXT u_char* buf) { } int prevusr(SJ3_CONTEXT u_char* buf) { - (*curdict->getdic)(curdict, peepidx); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, peepidx); get_askknj(SJ3_CONTEXT_PASS2); if(prev_kanji(SJ3_CONTEXT_PASS2)) { @@ -185,7 +185,7 @@ prev_douon(SJ3_CONTEXT2) { if(peepdptr <= segtop()) { if(peepidx <= DICSEGBASE) return 0; - (*curdict->getdic)(curdict, --peepidx); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, --peepidx); get_askknj(SJ3_CONTEXT_PASS2); set_idxyomi(SJ3_CONTEXT_PASS2); @@ -272,7 +272,7 @@ next_douon(SJ3_CONTEXT2) { if(segend(p1)) { if(peepidx + 1 < curdict->segunit) { - (*curdict->getdic)(curdict, ++peepidx); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, ++peepidx); get_askknj(SJ3_CONTEXT_PASS2); peepdptr = segtop(); diff --git a/lib/sj3core/ph_khtbl.c b/lib/sj3core/ph_khtbl.c index 414d298..14744cb 100644 --- a/lib/sj3core/ph_khtbl.c +++ b/lib/sj3core/ph_khtbl.c @@ -50,7 +50,7 @@ ph_setsty(SJ3_CONTEXT CLREC* clrec) { return; } - (*curdict->getdic)(curdict, jrec->jseg); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, jrec->jseg); ptr = dicbuf + jrec->jofsst + 1; for(; *ptr != HINSIBLKTERM; ptr = skipkstr(ptr)) { diff --git a/lib/sj3core/setjrec.c b/lib/sj3core/setjrec.c index 03e5025..9ec8585 100644 --- a/lib/sj3core/setjrec.c +++ b/lib/sj3core/setjrec.c @@ -39,7 +39,7 @@ #include "sj_kanakan.h" -int setj_atrb(u_char* p) { +int setj_atrb(SJ3_CONTEXT u_char* p) { return 2; } @@ -52,11 +52,11 @@ int setj_ofs(SJ3_CONTEXT u_char* p) { if(p[codesize(*p)] == KANJISTREND) contf = FALSE; switch(*p & KANJIMODEMASK) { case ZENHIRAASSYUKU: - p += setj_norm1(p); + p += setj_norm1(SJ3_CONTEXT_PASS p); break; case ZENKATAASSYUKU: - p += setj_norm1(p); + p += setj_norm1(SJ3_CONTEXT_PASS p); break; case OFFSETASSYUKU: @@ -64,11 +64,11 @@ int setj_ofs(SJ3_CONTEXT u_char* p) { break; case AIATTRIBUTE: - p += setj_atrb(p); + p += setj_atrb(SJ3_CONTEXT_PASS p); break; case LEADINGHANKAKU: - p += setj_norm2(p); + p += setj_norm2(SJ3_CONTEXT_PASS p); break; case KANJIASSYUKU: @@ -80,7 +80,7 @@ int setj_ofs(SJ3_CONTEXT u_char* p) { break; default: - p += setj_norm2(p); + p += setj_norm2(SJ3_CONTEXT_PASS p); } } while(contf); @@ -96,11 +96,11 @@ int setj_knj(SJ3_CONTEXT u_char* p) { if(p[codesize(*p)] == KANJISTREND) contf = FALSE; switch(*p & KANJIMODEMASK) { case ZENHIRAASSYUKU: - p += setj_norm1(p); + p += setj_norm1(SJ3_CONTEXT_PASS p); break; case ZENKATAASSYUKU: - p += setj_norm1(p); + p += setj_norm1(SJ3_CONTEXT_PASS p); break; case OFFSETASSYUKU: @@ -108,11 +108,11 @@ int setj_knj(SJ3_CONTEXT u_char* p) { break; case AIATTRIBUTE: - p += setj_atrb(p); + p += setj_atrb(SJ3_CONTEXT_PASS p); break; case LEADINGHANKAKU: - p += setj_norm2(p); + p += setj_norm2(SJ3_CONTEXT_PASS p); break; case KANJIASSYUKU: @@ -124,22 +124,22 @@ int setj_knj(SJ3_CONTEXT u_char* p) { break; default: - p += setj_norm2(p); + p += setj_norm2(SJ3_CONTEXT_PASS p); } } while(contf); return 1; } -int setj_norm1(u_char* p) { +int setj_norm1(SJ3_CONTEXT u_char* p) { return 1; } -int setj_norm2(u_char* p) { +int setj_norm2(SJ3_CONTEXT u_char* p) { return 2; } -int setj_norm3(u_char* p) { +int setj_norm3(SJ3_CONTEXT u_char* p) { return 3; } @@ -187,11 +187,11 @@ void setjrec(SJ3_CONTEXT u_char* tagp, int mode) { for(tmp = ptr + 1; *tmp != HINSIBLKTERM;) { switch(*tmp & KANJIMODEMASK) { case ZENHIRAASSYUKU: - tmp += setj_norm1(tmp); + tmp += setj_norm1(SJ3_CONTEXT_PASS tmp); break; case ZENKATAASSYUKU: - tmp += setj_norm1(tmp); + tmp += setj_norm1(SJ3_CONTEXT_PASS tmp); break; case OFFSETASSYUKU: @@ -199,11 +199,11 @@ void setjrec(SJ3_CONTEXT u_char* tagp, int mode) { break; case AIATTRIBUTE: - tmp += setj_atrb(tmp); + tmp += setj_atrb(SJ3_CONTEXT_PASS tmp); break; case LEADINGHANKAKU: - tmp += setj_norm2(tmp); + tmp += setj_norm2(SJ3_CONTEXT_PASS tmp); break; case KANJIASSYUKU: @@ -215,7 +215,7 @@ void setjrec(SJ3_CONTEXT u_char* tagp, int mode) { break; default: - tmp += setj_norm2(tmp); + tmp += setj_norm2(SJ3_CONTEXT_PASS tmp); } } @@ -255,11 +255,11 @@ void setnumrec(SJ3_CONTEXT u_char* tagp, JREC* rec, TypeGram gram) { for(tmp = ptr + 1; *tmp != HINSIBLKTERM;) { switch(*tmp & KANJIMODEMASK) { case ZENHIRAASSYUKU: - tmp += setj_norm1(tmp); + tmp += setj_norm1(SJ3_CONTEXT_PASS tmp); break; case ZENKATAASSYUKU: - tmp += setj_norm1(tmp); + tmp += setj_norm1(SJ3_CONTEXT_PASS tmp); break; case OFFSETASSYUKU: @@ -267,11 +267,11 @@ void setnumrec(SJ3_CONTEXT u_char* tagp, JREC* rec, TypeGram gram) { break; case AIATTRIBUTE: - tmp += setj_atrb(tmp); + tmp += setj_atrb(SJ3_CONTEXT_PASS tmp); break; case LEADINGHANKAKU: - tmp += setj_norm2(tmp); + tmp += setj_norm2(SJ3_CONTEXT_PASS tmp); break; case KANJIASSYUKU: @@ -283,7 +283,7 @@ void setnumrec(SJ3_CONTEXT u_char* tagp, JREC* rec, TypeGram gram) { break; default: - tmp += setj_norm2(tmp); + tmp += setj_norm2(SJ3_CONTEXT_PASS tmp); } } diff --git a/lib/sj3core/setkouho.c b/lib/sj3core/setkouho.c index 0cb942c..13c3e4d 100644 --- a/lib/sj3core/setkouho.c +++ b/lib/sj3core/setkouho.c @@ -163,11 +163,11 @@ hiraknj(SJ3_CONTEXT u_char* p) { if(p[codesize(*p)] == KANJISTREND) flg = FALSE; switch(*p & KANJIMODEMASK) { case ZENHIRAASSYUKU: - result = hiraknj_hask(p, &i); + result = hiraknj_hask(SJ3_CONTEXT_PASS p, &i); break; case ZENKATAASSYUKU: - result = hiraknj_kask(p, &i); + result = hiraknj_kask(SJ3_CONTEXT_PASS p, &i); break; case OFFSETASSYUKU: @@ -175,11 +175,11 @@ hiraknj(SJ3_CONTEXT u_char* p) { break; case AIATTRIBUTE: - result = hiraknj_atrb(p, &i); + result = hiraknj_atrb(SJ3_CONTEXT_PASS p, &i); break; case LEADINGHANKAKU: - result = hiraknj_norm(p, &i); + result = hiraknj_norm(SJ3_CONTEXT_PASS p, &i); break; case KANJIASSYUKU: @@ -187,7 +187,7 @@ hiraknj(SJ3_CONTEXT u_char* p) { break; default: - result = hiraknj_hira(p, &i); + result = hiraknj_hira(SJ3_CONTEXT_PASS p, &i); } if(result) return result; @@ -198,7 +198,7 @@ hiraknj(SJ3_CONTEXT u_char* p) { return 0; } -int hiraknj_atrb(u_char* p, int* len) { +int hiraknj_atrb(SJ3_CONTEXT u_char* p, int* len) { *len = 2; return 0; } @@ -213,22 +213,22 @@ int hiraknj_knj(SJ3_CONTEXT u_char* p, int* len) { return hiraknj(SJ3_CONTEXT_PASS askknj[*p & KNJASSYUKUMASK]); } -int hiraknj_hask(u_char* p, int* len) { +int hiraknj_hask(SJ3_CONTEXT u_char* p, int* len) { *len = 1; return 2; } -int hiraknj_kask(u_char* p, int* len) { +int hiraknj_kask(SJ3_CONTEXT u_char* p, int* len) { *len = 1; return 3; } -int hiraknj_norm(u_char* p, int* len) { +int hiraknj_norm(SJ3_CONTEXT u_char* p, int* len) { *len = codesize(*p); return 1; } -int hiraknj_hira(u_char* p, int* len) { +int hiraknj_hira(SJ3_CONTEXT u_char* p, int* len) { u_char ch; *len = codesize(*p); diff --git a/lib/sj3core/srchdict.c b/lib/sj3core/srchdict.c index dff3f91..385cfb2 100644 --- a/lib/sj3core/srchdict.c +++ b/lib/sj3core/srchdict.c @@ -90,7 +90,7 @@ srchdict(SJ3_CONTEXT u_char* tagp) { segno = srchidx(SJ3_CONTEXT_PASS prevseg, (int)dicinl); - (*curdict->getdic)(curdict, segno); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, segno); if(prevseg != segno) { @@ -109,7 +109,7 @@ srchdict(SJ3_CONTEXT u_char* tagp) { if(segno >= curdict->segunit) return NULL; - (*curdict->getdic)(curdict, segno); + (*curdict->getdic)(SJ3_CONTEXT_PASS curdict, segno); tagp = dicbuf; } diff --git a/src/sj3test/main.c b/src/sj3test/main.c index 21b8bb4..1338590 100644 --- a/src/sj3test/main.c +++ b/src/sj3test/main.c @@ -1,27 +1,11 @@ #include int main(int argc, char** argv) { - DictFile* dict; - DICTL* node; - char out[64 * 1024]; - int i = 0; - char c[64 * 1024]; - char b; - Sj3Context ctx; - - ctx.work = calloc(1, sizeof(Global)); - - node = calloc(1, sizeof(DICTL)); - ctx.work->Jdictlist = node; - - initwork(&ctx); - - dict = opendict(&ctx, "dic.bin", ""); - - node->dict = &dict->dict; - node->next = NULL; - - seldict(&ctx, dict->dict.dicid); + char out[64 * 1024]; + int i = 0; + char c[64 * 1024]; + char b; + Sj3Context* ctx = alloccontext("dic.bin"); c[0] = 0; @@ -37,7 +21,7 @@ int main(int argc, char** argv) { } i = 0; - while((strlen(c) - i) > 0 && (i += cl2knj(&ctx, (u_char*)c + i, strlen(c) - i, (u_char*)out))) { + while((strlen(c) - i) > 0 && (i += cl2knj(ctx, (u_char*)c + i, strlen(c) - i, (u_char*)out))) { STDYOUT* s = (STDYOUT*)out; printf("> %s\n", out + sizeof(STDYOUT)); @@ -46,5 +30,7 @@ int main(int argc, char** argv) { c[0] = 0; } + free_context(ctx); + return 0; }