Add multi-context

This commit is contained in:
Nishi 2026-06-19 23:45:47 +09:00
commit a916f81d8a
30 changed files with 264 additions and 246 deletions

View file

@ -20,5 +20,6 @@ file(GLOB_RECURSE SJ3TEST_SRCS src/sj3test/**.c)
add_executable(sj3test ${SJ3TEST_SRCS}) add_executable(sj3test ${SJ3TEST_SRCS})
target_link_libraries(sj3test PRIVATE sj3core) target_link_libraries(sj3test PRIVATE sj3core)
target_compile_definitions(sj3core PRIVATE UTF8) #target_compile_definitions(sj3core PUBLIC SJ3_GLOBAL)
target_compile_definitions(sj3mkdic PRIVATE UTF8 ENGLISH) target_compile_definitions(sj3mkdic PRIVATE UTF8 ENGLISH)

View file

@ -36,7 +36,7 @@
#ifndef SJ_GLOBAL_H #ifndef SJ_GLOBAL_H
#define SJ_GLOBAL_H #define SJ_GLOBAL_H
#if 0 #ifdef SJ3_GLOBAL
extern Global* work_base; extern Global* work_base;
extern STDY* stdy_base; extern STDY* stdy_base;
#endif #endif

View file

@ -234,19 +234,19 @@ extern u_char kigou[];
/* sdepend.c */ /* sdepend.c */
DictFile* opendict(SJ3_CONTEXT char*, char*); DictFile* opendict(SJ3_CONTEXT char*, char*);
int closedict(SJ3_CONTEXT DictFile*); int closedict(SJ3_CONTEXT DictFile*);
void lock_dict(SJ3_CONTEXT DictFile*, int); void lock_dict(DictFile*, int);
void unlock_dict(SJ3_CONTEXT DictFile*, int); void unlock_dict(DictFile*, int);
int is_dict_locked(SJ3_CONTEXT DictFile*); int is_dict_locked(DictFile*);
StdyFile* openstdy(SJ3_CONTEXT char*, char*); StdyFile* openstdy(char*, char*);
int closestdy(SJ3_CONTEXT StdyFile*); int closestdy(StdyFile*);
int putstydic(SJ3_CONTEXT2); int putstydic(SJ3_CONTEXT2);
int putcldic(SJ3_CONTEXT2); int putcldic(SJ3_CONTEXT2);
int makedict(SJ3_CONTEXT char*, int, int, int); int makedict(char*, int, int, int);
int makestdy(SJ3_CONTEXT char*, int, int, int); int makestdy(char*, int, int, int);
void sj_closeall(SJ3_CONTEXT2); void sj_closeall(SJ3_CONTEXT2);
int set_dictpass(SJ3_CONTEXT DictFile*, char*); int set_dictpass(DictFile*, char*);
int set_stdypass(SJ3_CONTEXT char*); int set_stdypass(SJ3_CONTEXT char*);
int set_dictcmnt(SJ3_CONTEXT DictFile*, char*); int set_dictcmnt(DictFile*, char*);
int set_stdycmnt(SJ3_CONTEXT char*); int set_stdycmnt(SJ3_CONTEXT char*);
int get_stdysize(SJ3_CONTEXT int*, int*, int*); int get_stdysize(SJ3_CONTEXT int*, int*, int*);
@ -260,12 +260,12 @@ extern u_short* selsjadrs[];
int setconj(SJ3_CONTEXT TypeGram, JREC*, CREC*); int setconj(SJ3_CONTEXT TypeGram, JREC*, CREC*);
/* setjrec.c */ /* setjrec.c */
int setj_atrb(SJ3_CONTEXT u_char*); int setj_atrb(u_char*);
int setj_ofs(SJ3_CONTEXT u_char*); int setj_ofs(SJ3_CONTEXT u_char*);
int setj_knj(SJ3_CONTEXT u_char*); int setj_knj(SJ3_CONTEXT u_char*);
int setj_norm1(SJ3_CONTEXT u_char*); int setj_norm1(u_char*);
int setj_norm2(SJ3_CONTEXT u_char*); int setj_norm2(u_char*);
int setj_norm3(SJ3_CONTEXT u_char*); /* unused??? */ int setj_norm3(u_char*); /* unused??? */
void setjrec(SJ3_CONTEXT u_char*, int); void setjrec(SJ3_CONTEXT u_char*, int);
void setnumrec(SJ3_CONTEXT u_char*, JREC*, TypeGram); void setnumrec(SJ3_CONTEXT u_char*, JREC*, TypeGram);
void setcrec(SJ3_CONTEXT u_char*); void setcrec(SJ3_CONTEXT u_char*);
@ -273,16 +273,16 @@ void setcrec(SJ3_CONTEXT u_char*);
/* setkouho.c */ /* setkouho.c */
void setkouho(SJ3_CONTEXT CLREC*, TypeDicOfs, int); void setkouho(SJ3_CONTEXT CLREC*, TypeDicOfs, int);
void ph_setkouho(SJ3_CONTEXT CLREC*, TypeDicOfs, STDYIN*); void ph_setkouho(SJ3_CONTEXT CLREC*, TypeDicOfs, STDYIN*);
int hiraknj_atrb(SJ3_CONTEXT u_char*, int*); int hiraknj_atrb(u_char*, int*);
int hiraknj_ofs(SJ3_CONTEXT u_char*, int*); int hiraknj_ofs(SJ3_CONTEXT u_char*, int*);
int hiraknj_knj(SJ3_CONTEXT u_char*, int*); int hiraknj_knj(SJ3_CONTEXT u_char*, int*);
int hiraknj_hask(SJ3_CONTEXT u_char*, int*); int hiraknj_hask(u_char*, int*);
int hiraknj_kask(SJ3_CONTEXT u_char*, int*); int hiraknj_kask(u_char*, int*);
int hiraknj_norm(SJ3_CONTEXT u_char*, int*); int hiraknj_norm(u_char*, int*);
int hiraknj_hira(SJ3_CONTEXT u_char*, int*); int hiraknj_hira(u_char*, int*);
/* setubi.c */ /* setubi.c */
u_char* getstb(SJ3_CONTEXT TypeGram); u_char* getstb(TypeGram);
void setubi(SJ3_CONTEXT JREC*, u_char*); void setubi(SJ3_CONTEXT JREC*, u_char*);
/* sj2code.c */ /* sj2code.c */
@ -290,10 +290,10 @@ int sj2cd_chr(u_char*, u_char*);
int sj2cd_str(u_char*, u_char*, int); int sj2cd_str(u_char*, u_char*, int);
/* skiphblk.c */ /* skiphblk.c */
u_char* skiphblk(SJ3_CONTEXT u_char*); u_char* skiphblk(u_char*);
/* skipkstr.c */ /* skipkstr.c */
u_char* skipkstr(SJ3_CONTEXT u_char*); u_char* skipkstr(u_char*);
/* srchdict.c */ /* srchdict.c */
int yomicmp(SJ3_CONTEXT u_char*, u_char*, u_char*); int yomicmp(SJ3_CONTEXT u_char*, u_char*, u_char*);

View file

@ -46,11 +46,27 @@ typedef unsigned char u_char;
typedef unsigned short u_short; typedef unsigned short u_short;
typedef unsigned int u_int; typedef unsigned int u_int;
typedef void (*VFunc)(void*, void*, void*); typedef void (*VFunc)(
typedef u_char* (*UCPFunc)(u_char*, u_char*, int); #ifndef SJ3_GLOBAL
typedef int (*IFunc)(void*, int); void*,
#endif
void*, void*, void*);
typedef u_char* (*UCPFunc)(
#ifndef SJ3_GLOBAL
void*,
#endif
u_char*, u_char*, int);
typedef int (*IFunc)(
#ifndef SJ3_GLOBAL
void*,
#endif
void*, int);
typedef int (*IFuncDict)(void*); typedef int (*IFuncDict)(
#ifndef SJ3_GLOBAL
void*,
#endif
void*);
typedef u_char TypeGroup; typedef u_char TypeGroup;
typedef u_char TypeGram; typedef u_char TypeGram;

View file

@ -335,7 +335,7 @@ checksub(SJ3_CONTEXT u_char* kanji, TypeGram grm) {
return -1; return -1;
} }
dounum++; dounum++;
ptr = skipkstr(SJ3_CONTEXT_PASS ptr); ptr = skipkstr(ptr);
} }
ptr++; ptr++;

View file

@ -37,7 +37,7 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
static CLREC *nextrecblk(), *prevrecblk(); static CLREC *nextrecblk(SJ3_CONTEXT2), *prevrecblk(SJ3_CONTEXT2);
static void initkbuf(SJ3_CONTEXT u_char*); static void initkbuf(SJ3_CONTEXT u_char*);
@ -102,7 +102,7 @@ int nextcl(SJ3_CONTEXT u_char* kouho, int mode) {
if(!mode && (selectid < khcount)) if(!mode && (selectid < khcount))
selectid++; selectid++;
else if((mode < 2) && (clptr = nextrecblk())) { else if((mode < 2) && (clptr = nextrecblk(SJ3_CONTEXT_PASS2))) {
selectid = 1; selectid = 1;
clt1st = clptr; clt1st = clptr;
mkkouho(SJ3_CONTEXT_PASS2); mkkouho(SJ3_CONTEXT_PASS2);
@ -142,7 +142,7 @@ int prevcl(SJ3_CONTEXT u_char* kouho, int mode) {
if(!mode && (selectid > 1)) if(!mode && (selectid > 1))
selectid--; selectid--;
else if((mode < 2) && (clptr = prevrecblk())) { else if((mode < 2) && (clptr = prevrecblk(SJ3_CONTEXT_PASS2))) {
clt1st = clptr; clt1st = clptr;
mkkouho(SJ3_CONTEXT_PASS2); mkkouho(SJ3_CONTEXT_PASS2);
getrank(SJ3_CONTEXT_PASS2); getrank(SJ3_CONTEXT_PASS2);

View file

@ -96,7 +96,7 @@ void cvtdict(SJ3_CONTEXT KHREC* krec, CLREC* clrec, int flg) {
stblen = 0; stblen = 0;
} }
else if((i = jrec->stbofs) && (fptr = getstb(SJ3_CONTEXT_PASS jrec->hinsi))) { else if((i = jrec->stbofs) && (fptr = getstb(jrec->hinsi))) {
fptr += i - 1; fptr += i - 1;
stblen = StbYomiLen(fptr); stblen = StbYomiLen(fptr);
jlen -= stblen; jlen -= stblen;

View file

@ -162,7 +162,7 @@ void setstyrec(SJ3_CONTEXT KHREC* krec) {
stdy.sttfg = krec->sttfg; stdy.sttfg = krec->sttfg;
stdy.ka_fg = krec->ka_fg; stdy.ka_fg = krec->ka_fg;
if(jrec->stbofs && (fptr = getstb(SJ3_CONTEXT_PASS jrec->hinsi))) if(jrec->stbofs && (fptr = getstb(jrec->hinsi)))
stdy.len -= StbYomiLen(fptr + jrec->stbofs - 1); stdy.len -= StbYomiLen(fptr + jrec->stbofs - 1);
if((fptr = Settou_ptr(jrec->sttofs))) if((fptr = Settou_ptr(jrec->sttofs)))

View file

@ -80,7 +80,7 @@ u_int deldic(SJ3_CONTEXT u_char* yomi, u_char* kanji, TypeGram hinsi) {
if(*p3 == HINSIBLKTERM) return AD_NOKANJI; if(*p3 == HINSIBLKTERM) return AD_NOKANJI;
ofs = p3 - dicbuf; ofs = p3 - dicbuf;
edp = skipkstr(SJ3_CONTEXT_PASS p3); edp = skipkstr(p3);
if(kblknum == 1) { if(kblknum == 1) {
if(hblknum == 1) { if(hblknum == 1) {

View file

@ -56,7 +56,7 @@ void mkbunsetu(SJ3_CONTEXT2) {
while(jrec) { while(jrec) {
if(jrec->stbofs && (cnj = getstb(SJ3_CONTEXT_PASS jrec->hinsi))) if(jrec->stbofs && (cnj = getstb(jrec->hinsi)))
hinsi = StbHinsi(cnj + jrec->stbofs - 1); hinsi = StbHinsi(cnj + jrec->stbofs - 1);
else else
hinsi = jrec->hinsi; hinsi = jrec->hinsi;

View file

@ -79,7 +79,7 @@ void mkjiritu(SJ3_CONTEXT int mode) {
} }
for(jrec = maxjptr; jrec; jrec = jrec->jsort) { for(jrec = maxjptr; jrec; jrec = jrec->jsort) {
if((stb = getstb(SJ3_CONTEXT_PASS jrec->hinsi))) if((stb = getstb(jrec->hinsi)))
setubi(SJ3_CONTEXT_PASS jrec, stb); setubi(SJ3_CONTEXT_PASS jrec, stb);
} }
} }

View file

@ -108,7 +108,7 @@ cl_kanji(SJ3_CONTEXT JREC* jrec, CLREC* clrec) {
if(diffknj(SJ3_CONTEXT_PASS jrec, ptr, kcount)) { if(diffknj(SJ3_CONTEXT_PASS jrec, ptr, kcount)) {
setkouho(SJ3_CONTEXT_PASS clrec, (TypeDicOfs)(ptr - dicbuf), 0); setkouho(SJ3_CONTEXT_PASS clrec, (TypeDicOfs)(ptr - dicbuf), 0);
} }
ptr = skipkstr(SJ3_CONTEXT_PASS ptr); ptr = skipkstr(ptr);
} }
} else { } else {
setkouho(SJ3_CONTEXT_PASS clrec, (TypeDicOfs)1, 0); setkouho(SJ3_CONTEXT_PASS clrec, (TypeDicOfs)1, 0);
@ -410,7 +410,7 @@ cl_numcmn(SJ3_CONTEXT JREC* jrec, CLREC* clrec) {
while(*p != HINSIBLKTERM) { while(*p != HINSIBLKTERM) {
setkouho(SJ3_CONTEXT_PASS clrec, (TypeDicOfs)(p - dicbuf), i); setkouho(SJ3_CONTEXT_PASS clrec, (TypeDicOfs)(p - dicbuf), i);
p = skipkstr(SJ3_CONTEXT_PASS p); p = skipkstr(p);
} }
} else { } else {
setkouho(SJ3_CONTEXT_PASS clrec, (TypeDicOfs)1, i); setkouho(SJ3_CONTEXT_PASS clrec, (TypeDicOfs)1, i);

View file

@ -38,10 +38,10 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
static int prev_kanji(), prev_hinsi(), prev_douon(); static int prev_kanji(SJ3_CONTEXT2), prev_hinsi(SJ3_CONTEXT2), prev_douon(SJ3_CONTEXT2);
static int next_kanji(), next_hinsi(), next_douon(); static int next_kanji(SJ3_CONTEXT2), next_hinsi(SJ3_CONTEXT2), next_douon(SJ3_CONTEXT2);
static void set_kanji(), set_buf(u_char*), add_yomi(); static void set_kanji(SJ3_CONTEXT2), set_buf(SJ3_CONTEXT u_char*), add_yomi(SJ3_CONTEXT2);
static void set_idxyomi(); static void set_idxyomi(SJ3_CONTEXT2);
static void cd2sjh_chr(u_char ch, u_char* dst); static void cd2sjh_chr(u_char ch, u_char* dst);
@ -57,7 +57,7 @@ int getusr(SJ3_CONTEXT u_char* buf) {
if(segend(peepdptr)) return 0; if(segend(peepdptr)) return 0;
add_yomi(); add_yomi(SJ3_CONTEXT_PASS2);
nlen = getnlen(peepdptr); nlen = getnlen(peepdptr);
peephptr = peepdptr + DOUONBLKSIZENUMBER + nlen; peephptr = peepdptr + DOUONBLKSIZENUMBER + nlen;
@ -66,9 +66,9 @@ int getusr(SJ3_CONTEXT u_char* buf) {
peepkptr = peephptr + 1; peepkptr = peephptr + 1;
set_kanji(); set_kanji(SJ3_CONTEXT_PASS2);
set_buf(buf); set_buf(SJ3_CONTEXT_PASS buf);
return -1; return -1;
} }
@ -77,10 +77,10 @@ int nextusr(SJ3_CONTEXT u_char* buf) {
(*curdict->getdic)(curdict, peepidx); (*curdict->getdic)(curdict, peepidx);
get_askknj(SJ3_CONTEXT_PASS2); get_askknj(SJ3_CONTEXT_PASS2);
if(next_kanji()) { if(next_kanji(SJ3_CONTEXT_PASS2)) {
set_kanji(); set_kanji(SJ3_CONTEXT_PASS2);
set_buf(buf); set_buf(SJ3_CONTEXT_PASS buf);
return -1; return -1;
} }
@ -92,10 +92,10 @@ int prevusr(SJ3_CONTEXT u_char* buf) {
(*curdict->getdic)(curdict, peepidx); (*curdict->getdic)(curdict, peepidx);
get_askknj(SJ3_CONTEXT_PASS2); get_askknj(SJ3_CONTEXT_PASS2);
if(prev_kanji()) { if(prev_kanji(SJ3_CONTEXT_PASS2)) {
set_kanji(); set_kanji(SJ3_CONTEXT_PASS2);
set_buf(buf); set_buf(SJ3_CONTEXT_PASS buf);
return -1; return -1;
} }
@ -113,7 +113,7 @@ set_kanji(SJ3_CONTEXT2) {
} }
static void static void
set_buf(u_char* buf) { set_buf(SJ3_CONTEXT u_char* buf) {
u_char* p; u_char* p;
int i, csize; int i, csize;
@ -131,12 +131,12 @@ set_buf(u_char* buf) {
} }
static int static int
prev_kanji() { prev_kanji(SJ3_CONTEXT2) {
u_char* p1; u_char* p1;
u_char* p2; u_char* p2;
p1 = peephptr + 1; p1 = peephptr + 1;
if(peepkptr <= p1) return prev_hinsi(); if(peepkptr <= p1) return prev_hinsi(SJ3_CONTEXT_PASS2);
p2 = peepkptr; p2 = peepkptr;
while(p1 < p2) { while(p1 < p2) {
@ -148,7 +148,7 @@ prev_kanji() {
} }
static int static int
prev_hinsi() { prev_hinsi(SJ3_CONTEXT2) {
u_char* p1; u_char* p1;
u_char* p2; u_char* p2;
int nlen; int nlen;
@ -156,7 +156,7 @@ prev_hinsi() {
nlen = getnlen(peepdptr); nlen = getnlen(peepdptr);
p1 = peepdptr + DOUONBLKSIZENUMBER + nlen; p1 = peepdptr + DOUONBLKSIZENUMBER + nlen;
if(peephptr <= p1) return prev_douon(); if(peephptr <= p1) return prev_douon(SJ3_CONTEXT_PASS2);
p2 = peephptr; p2 = peephptr;
while(p1 < p2) { while(p1 < p2) {
@ -177,7 +177,7 @@ prev_hinsi() {
} }
static int static int
prev_douon() { prev_douon(SJ3_CONTEXT2) {
u_char* p1; u_char* p1;
u_char* p2; u_char* p2;
int nlen; int nlen;
@ -186,27 +186,27 @@ prev_douon() {
if(peepidx <= DICSEGBASE) return 0; if(peepidx <= DICSEGBASE) return 0;
(*curdict->getdic)(curdict, --peepidx); (*curdict->getdic)(curdict, --peepidx);
get_askknj(); get_askknj(SJ3_CONTEXT_PASS2);
set_idxyomi(); set_idxyomi(SJ3_CONTEXT_PASS2);
p1 = segtop(); p1 = segtop();
do { do {
peepdptr = p1; peepdptr = p1;
add_yomi(); add_yomi(SJ3_CONTEXT_PASS2);
p1 = getntag(p1); p1 = getntag(p1);
} while(!segend(p1)); } while(!segend(p1));
} else { } else {
set_idxyomi(); set_idxyomi(SJ3_CONTEXT_PASS2);
p1 = segtop(); p1 = segtop();
p2 = peepdptr; p2 = peepdptr;
do { do {
peepdptr = p1; peepdptr = p1;
add_yomi(); add_yomi(SJ3_CONTEXT_PASS2);
p1 = getntag(p1); p1 = getntag(p1);
} while(p1 < p2); } while(p1 < p2);
@ -234,12 +234,12 @@ prev_douon() {
} }
static int static int
next_kanji() { next_kanji(SJ3_CONTEXT2) {
u_char* p1; u_char* p1;
p1 = skipkstr(peepkptr); p1 = skipkstr(peepkptr);
if(*p1 == HINSIBLKTERM) return next_hinsi(); if(*p1 == HINSIBLKTERM) return next_hinsi(SJ3_CONTEXT_PASS2);
peepkptr = p1; peepkptr = p1;
@ -247,12 +247,12 @@ next_kanji() {
} }
static int static int
next_hinsi() { next_hinsi(SJ3_CONTEXT2) {
u_char* p1; u_char* p1;
p1 = skiphblk(peephptr); p1 = skiphblk(peephptr);
if(p1 >= getntag(peepdptr)) return next_douon(); if(p1 >= getntag(peepdptr)) return next_douon(SJ3_CONTEXT_PASS2);
peephptr = p1; peephptr = p1;
@ -264,7 +264,7 @@ next_hinsi() {
} }
static int static int
next_douon() { next_douon(SJ3_CONTEXT2) {
u_char* p1; u_char* p1;
int nlen; int nlen;
@ -273,17 +273,17 @@ next_douon() {
if(segend(p1)) { if(segend(p1)) {
if(peepidx + 1 < curdict->segunit) { if(peepidx + 1 < curdict->segunit) {
(*curdict->getdic)(curdict, ++peepidx); (*curdict->getdic)(curdict, ++peepidx);
get_askknj(); get_askknj(SJ3_CONTEXT_PASS2);
peepdptr = segtop(); peepdptr = segtop();
set_idxyomi(); set_idxyomi(SJ3_CONTEXT_PASS2);
} else } else
return 0; return 0;
} else { } else {
peepdptr = p1; peepdptr = p1;
} }
add_yomi(); add_yomi(SJ3_CONTEXT_PASS2);
nlen = getnlen(peepdptr); nlen = getnlen(peepdptr);
peephptr = peepdptr + DOUONBLKSIZENUMBER + nlen; peephptr = peepdptr + DOUONBLKSIZENUMBER + nlen;
@ -296,10 +296,10 @@ next_douon() {
} }
static void static void
set_idxyomi() { set_idxyomi(SJ3_CONTEXT2) {
u_char *p1, *p2; u_char *p1, *p2;
if((p2 = get_idxptr(peepidx))) { if((p2 = get_idxptr(SJ3_CONTEXT_PASS peepidx))) {
p1 = peepyomi; p1 = peepyomi;
while(*p2) { while(*p2) {
cd2sjh_chr(*p2++, p1); cd2sjh_chr(*p2++, p1);
@ -310,7 +310,7 @@ set_idxyomi() {
} }
static void static void
add_yomi() { add_yomi(SJ3_CONTEXT2) {
int nlen; int nlen;
u_char *p1, *p2; u_char *p1, *p2;

View file

@ -38,7 +38,7 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
int ph2knj(u_char* zyomi, u_char* kanji, int knjlen) { int ph2knj(SJ3_CONTEXT u_char* zyomi, u_char* kanji, int knjlen) {
u_char* ptr; u_char* ptr;
u_char* dst; u_char* dst;
int i; int i;
@ -52,7 +52,7 @@ int ph2knj(u_char* zyomi, u_char* kanji, int knjlen) {
} }
*dst = 0; *dst = 0;
freework(); freework(SJ3_CONTEXT_PASS2);
prevclgrm = 0; prevclgrm = 0;
prevclrow = 0; prevclrow = 0;
@ -68,30 +68,30 @@ int ph2knj(u_char* zyomi, u_char* kanji, int knjlen) {
while(cnvlen && kanjilen) { while(cnvlen && kanjilen) {
if(!clt1st) { if(!clt1st) {
mkjiritu(DO_CLSTUDY | DO_IKKATU); mkjiritu(SJ3_CONTEXT_PASS DO_CLSTUDY | DO_IKKATU);
mkbunsetu(); mkbunsetu(SJ3_CONTEXT_PASS2);
if(!maxclptr) wakachi(); if(!maxclptr) wakachi(SJ3_CONTEXT_PASS2);
jrt1st = maxjptr; jrt1st = maxjptr;
clt1st = maxclptr; clt1st = maxclptr;
} }
mk2claus(); mk2claus(SJ3_CONTEXT_PASS2);
selclrec(); selclrec(SJ3_CONTEXT_PASS2);
prevclgrm = selcl->jnode->hinsi; prevclgrm = selcl->jnode->hinsi;
prevclrow = selcl->right; prevclrow = selcl->right;
clt1st = free_clst(clt1st, (int)selcl->cllen); clt1st = free_clst(SJ3_CONTEXT_PASS clt1st, (int)selcl->cllen);
jrt1st = free_jlst(jrt1st); jrt1st = free_jlst(jrt1st);
cnvstart += selcl->cllen; cnvstart += selcl->cllen;
cnvlen -= selcl->cllen; cnvlen -= selcl->cllen;
cvtphknj(); cvtphknj(SJ3_CONTEXT_PASS2);
clt1st = clt2nd; clt1st = clt2nd;
jrt1st = jrt2nd; jrt1st = jrt2nd;

View file

@ -38,15 +38,15 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
static void static void
ph_setsty(CLREC* clrec) { ph_setsty(SJ3_CONTEXT CLREC* clrec) {
JREC* jrec; JREC* jrec;
TypeDicOfs offset; TypeDicOfs offset;
u_char* ptr; u_char* ptr;
STDYIN* sptr; STDYIN* sptr;
if(!seldict((jrec = clrec->jnode)->dicid)) { if(!seldict(SJ3_CONTEXT_PASS(jrec = clrec->jnode)->dicid)) {
if(!khcount) if(!khcount)
ph_setkouho(clrec, (TypeDicOfs)1, (STDYIN*)NULL); ph_setkouho(SJ3_CONTEXT_PASS clrec, (TypeDicOfs)1, (STDYIN*)NULL);
return; return;
} }
@ -57,35 +57,35 @@ ph_setsty(CLREC* clrec) {
offset = ptr - dicbuf; offset = ptr - dicbuf;
sptr = srchstdy(jrec->jseg, offset, jrec->dicid); sptr = srchstdy(SJ3_CONTEXT_PASS jrec->jseg, offset, jrec->dicid);
if(!khcount) { if(!khcount) {
ph_setkouho(clrec, offset, sptr); ph_setkouho(SJ3_CONTEXT_PASS clrec, offset, sptr);
continue; continue;
} }
if(!sptr) continue; if(!sptr) continue;
if(sptr->styno < kouhotbl[0].styno) { if(sptr->styno < kouhotbl[0].styno) {
ph_setkouho(clrec, offset, sptr); ph_setkouho(SJ3_CONTEXT_PASS clrec, offset, sptr);
} }
else if(sptr->styno == kouhotbl->styno) { else if(sptr->styno == kouhotbl->styno) {
if(!(kouhotbl[0].ka_fg && if(!(kouhotbl[0].ka_fg &&
sptr->ka_kj == kouhotbl[0].ka_kj)) { sptr->ka_kj == kouhotbl[0].ka_kj)) {
ph_setkouho(clrec, offset, sptr); ph_setkouho(SJ3_CONTEXT_PASS clrec, offset, sptr);
} }
} }
} }
} }
int ph_khtbl(CLREC* clrec) { int ph_khtbl(SJ3_CONTEXT CLREC* clrec) {
JREC* jrec; JREC* jrec;
int flg = FALSE; int flg = FALSE;
switch((jrec = clrec->jnode)->class) { switch((jrec = clrec->jnode)->class) {
case C_DICT: case C_DICT:
ph_setsty(clrec); ph_setsty(SJ3_CONTEXT_PASS clrec);
break; break;
case C_N_ARABIA: case C_N_ARABIA:
@ -99,14 +99,14 @@ int ph_khtbl(CLREC* clrec) {
case C_N_KAZULCMA: case C_N_KAZULCMA:
case C_N_SUUJILONG: case C_N_SUUJILONG:
if(jrec->jofsst) { if(jrec->jofsst) {
ph_setsty(clrec); ph_setsty(SJ3_CONTEXT_PASS clrec);
break; break;
} else } else
flg = TRUE; flg = TRUE;
case C_BUNSETU: case C_BUNSETU:
case C_MINASI: case C_MINASI:
case C_WAKACHI: case C_WAKACHI:
if(!khcount) ph_setkouho(clrec, (TypeDicOfs)0, (STDYIN*)0); if(!khcount) ph_setkouho(SJ3_CONTEXT_PASS clrec, (TypeDicOfs)0, (STDYIN*)0);
break; break;
} }

View file

@ -94,7 +94,7 @@ sttcnt(TypeGram hinsi1, TypeGram hinsi2) {
return 4; return 4;
} }
int priority(CLREC* clrec) { int priority(SJ3_CONTEXT CLREC* clrec) {
int prty; int prty;
CLREC* cl2rec; CLREC* cl2rec;
int keeplen; int keeplen;
@ -234,7 +234,7 @@ finish:
return (prty + prev); return (prty + prev);
} }
void pritiny() { void pritiny(SJ3_CONTEXT2) {
CLREC* clrec; CLREC* clrec;
int keeplen; int keeplen;
int i, prty = 0; int i, prty = 0;

View file

@ -160,29 +160,29 @@ search_same_dict(ino_t ino) {
} }
static int static int
getofs(DictFile* dp) { getofs(SJ3_CONTEXT DictFile* dp) {
idxofs = dp->ofsptr; idxofs = dp->ofsptr;
return 0; return 0;
} }
static int static int
getidx(DictFile* dp) { getidx(SJ3_CONTEXT DictFile* dp) {
idxbuf = dp->buffer + dp->idxstrt; idxbuf = dp->buffer + dp->idxstrt;
return 0; return 0;
} }
/* XXX: not IFunc */ /* XXX: not IFunc */
static int static int
getdic(DictFile* dp, TypeDicSeg seg) { getdic(SJ3_CONTEXT DictFile* dp, TypeDicSeg seg) {
if(seg >= dp->dict.segunit) return -1; if(seg >= dp->dict.segunit) return -1;
dicbuf = dp->buffer + dp->segstrt + dp->dict.seglen * seg; dicbuf = dp->buffer + dp->segstrt + dp->dict.seglen * seg;
return 0; return 0;
} }
static int static int
putidx(DictFile* dp) { putidx(SJ3_CONTEXT DictFile* dp) {
return putfile(dp->fd, dp->idxstrt, dp->dict.idxlen, idxbuf); return putfile(dp->fd, dp->idxstrt, dp->dict.idxlen, idxbuf);
} }
/* XXX: not IFunc */ /* XXX: not IFunc */
static int static int
putdic(DictFile* dp, TypeDicSeg seg) { putdic(SJ3_CONTEXT DictFile* dp, TypeDicSeg seg) {
u_char* p; u_char* p;
long i, j; long i, j;
@ -210,7 +210,7 @@ putdic(DictFile* dp, TypeDicSeg seg) {
} }
/* XXX: not IFunc */ /* XXX: not IFunc */
static int static int
rszdic(DictFile* dp, TypeDicSeg seg) { rszdic(SJ3_CONTEXT DictFile* dp, TypeDicSeg seg) {
long i; long i;
u_char* p; u_char* p;
@ -235,7 +235,7 @@ rszdic(DictFile* dp, TypeDicSeg seg) {
} }
DictFile* DictFile*
opendict(char* name, char* passwd) { opendict(SJ3_CONTEXT char* name, char* passwd) {
FILE* fp; FILE* fp;
struct stat sbuf; struct stat sbuf;
DictFile* dfp; DictFile* dfp;
@ -315,7 +315,7 @@ opendict(char* name, char* passwd) {
serv_errno = SJ3_NotEnoughMemory; serv_errno = SJ3_NotEnoughMemory;
goto error3; goto error3;
} }
mkidxtbl(&(dfp->dict)); mkidxtbl(SJ3_CONTEXT_PASS & (dfp->dict));
dfp->link = dictlink; dfp->link = dictlink;
dictlink = dfp; dictlink = dfp;
@ -332,7 +332,7 @@ error1:
return NULL; return NULL;
} }
int closedict(DictFile* dfp) { int closedict(SJ3_CONTEXT DictFile* dfp) {
DictFile* df; DictFile* df;
if(--dfp->refcnt > 0) return 0; if(--dfp->refcnt > 0) return 0;
@ -538,7 +538,7 @@ int closestdy(StdyFile* sfp) {
return 0; return 0;
} }
int putstydic() { int putstydic(SJ3_CONTEXT2) {
int fd; int fd;
u_char* hd; u_char* hd;
StdyFile* sf; StdyFile* sf;
@ -558,7 +558,7 @@ int putstydic() {
return putfile(fd, get4byte(hd + STDYNORMPOS), len, (u_char*)sf->stdy.stdydic); return putfile(fd, get4byte(hd + STDYNORMPOS), len, (u_char*)sf->stdy.stdydic);
} }
int putcldic() { int putcldic(SJ3_CONTEXT2) {
int fd; int fd;
u_char* hd; u_char* hd;
StdyFile* sf; StdyFile* sf;
@ -712,8 +712,8 @@ error:
return ret; return ret;
} }
void sj_closeall() { void sj_closeall(SJ3_CONTEXT2) {
while(dictlink) closedict(dictlink); while(dictlink) closedict(SJ3_CONTEXT_PASS dictlink);
while(stdylink) closestdy(stdylink); while(stdylink) closestdy(stdylink);
} }
@ -722,7 +722,7 @@ int set_dictpass(DictFile* dp, char* pass) {
return putfile(dp->fd, 0, HEADERLENGTH + COMMENTLENGTH, dp->buffer); return putfile(dp->fd, 0, HEADERLENGTH + COMMENTLENGTH, dp->buffer);
} }
int set_stdypass(char* pass) { int set_stdypass(SJ3_CONTEXT char* pass) {
StdyFile* sp; StdyFile* sp;
sp = (StdyFile*)stdy_base; sp = (StdyFile*)stdy_base;
@ -740,7 +740,7 @@ int set_dictcmnt(DictFile* dp, char* cmnt) {
return putfile(dp->fd, 0, HEADERLENGTH + COMMENTLENGTH, dp->buffer); return putfile(dp->fd, 0, HEADERLENGTH + COMMENTLENGTH, dp->buffer);
} }
int set_stdycmnt(char* cmnt) { int set_stdycmnt(SJ3_CONTEXT char* cmnt) {
StdyFile* sp; StdyFile* sp;
sp = (StdyFile*)stdy_base; sp = (StdyFile*)stdy_base;
@ -748,7 +748,7 @@ int set_stdycmnt(char* cmnt) {
return putfile(sp->fd, 0, HEADERLENGTH + COMMENTLENGTH, sp->header); return putfile(sp->fd, 0, HEADERLENGTH + COMMENTLENGTH, sp->header);
} }
int get_stdysize(int* stynum, int* clstep, int* cllen) { int get_stdysize(SJ3_CONTEXT int* stynum, int* clstep, int* cllen) {
*stynum = STUDYMAX; *stynum = STUDYMAX;
*clstep = CLSTUDYSTEP; *clstep = CLSTUDYSTEP;
*cllen = CLSTUDYLEN; *cllen = CLSTUDYLEN;

View file

@ -36,7 +36,7 @@
#include "sj_kcnv.h" #include "sj_kcnv.h"
#include "sj_kanakan.h" #include "sj_kanakan.h"
void selclrec() { void selclrec(SJ3_CONTEXT2) {
int len; int len;
CLREC* rec; CLREC* rec;
@ -85,10 +85,10 @@ void selclrec() {
ch = *(cnvstart + len); ch = *(cnvstart + len);
*(cnvstart + len) = 0; *(cnvstart + len) = 0;
mkjiritu(DO_IKKATU); mkjiritu(SJ3_CONTEXT_PASS DO_IKKATU);
mkbunsetu(); mkbunsetu(SJ3_CONTEXT_PASS2);
if(!maxclptr) wakachi(); if(!maxclptr) wakachi(SJ3_CONTEXT_PASS2);
jrt1st = maxjptr; jrt1st = maxjptr;
selcl = clt1st = maxclptr; selcl = clt1st = maxclptr;

View file

@ -107,7 +107,7 @@ cnvrow(JREC* rec, TypeCnct row) {
return row; return row;
} }
int setconj(TypeGram hinsi, JREC* jrec, CREC* crec) { int setconj(SJ3_CONTEXT TypeGram hinsi, JREC* jrec, CREC* crec) {
u_char* yptr; u_char* yptr;
int cmp; int cmp;
TypeCnct right; TypeCnct right;

View file

@ -43,7 +43,7 @@ int setj_atrb(u_char* p) {
return 2; return 2;
} }
int setj_ofs(u_char* p) { int setj_ofs(SJ3_CONTEXT u_char* p) {
int contf = TRUE; int contf = TRUE;
p = dicbuf + ((*p & KANJICODEMASK) << 8) + *(p + 1); p = dicbuf + ((*p & KANJICODEMASK) << 8) + *(p + 1);
@ -60,7 +60,7 @@ int setj_ofs(u_char* p) {
break; break;
case OFFSETASSYUKU: case OFFSETASSYUKU:
p += setj_ofs(p); p += setj_ofs(SJ3_CONTEXT_PASS p);
break; break;
case AIATTRIBUTE: case AIATTRIBUTE:
@ -72,7 +72,7 @@ int setj_ofs(u_char* p) {
break; break;
case KANJIASSYUKU: case KANJIASSYUKU:
p += setj_knj(p); p += setj_knj(SJ3_CONTEXT_PASS p);
break; break;
case KANJISTREND: case KANJISTREND:
@ -87,7 +87,7 @@ int setj_ofs(u_char* p) {
return 2; return 2;
} }
int setj_knj(u_char* p) { int setj_knj(SJ3_CONTEXT u_char* p) {
int contf = TRUE; int contf = TRUE;
p = askknj[*p & KNJASSYUKUMASK]; p = askknj[*p & KNJASSYUKUMASK];
@ -104,7 +104,7 @@ int setj_knj(u_char* p) {
break; break;
case OFFSETASSYUKU: case OFFSETASSYUKU:
p += setj_ofs(p); p += setj_ofs(SJ3_CONTEXT_PASS p);
break; break;
case AIATTRIBUTE: case AIATTRIBUTE:
@ -116,7 +116,7 @@ int setj_knj(u_char* p) {
break; break;
case KANJIASSYUKU: case KANJIASSYUKU:
p += setj_knj(p); p += setj_knj(SJ3_CONTEXT_PASS p);
break; break;
case KANJISTREND: case KANJISTREND:
@ -144,7 +144,7 @@ int setj_norm3(u_char* p) {
} }
static u_char static u_char
chkhead(TypeGram gram) { chkhead(SJ3_CONTEXT TypeGram gram) {
if(!headcode) return TRUE; if(!headcode) return TRUE;
if(headcode == SETTOU_DAI) { if(headcode == SETTOU_DAI) {
@ -162,7 +162,7 @@ chkhead(TypeGram gram) {
return FALSE; return FALSE;
} }
void setjrec(u_char* tagp, int mode) { void setjrec(SJ3_CONTEXT u_char* tagp, int mode) {
TypeGram gram; TypeGram gram;
u_char* ptr; u_char* ptr;
u_char* endp; u_char* endp;
@ -195,7 +195,7 @@ void setjrec(u_char* tagp, int mode) {
break; break;
case OFFSETASSYUKU: case OFFSETASSYUKU:
tmp += setj_ofs(tmp); tmp += setj_ofs(SJ3_CONTEXT_PASS tmp);
break; break;
case AIATTRIBUTE: case AIATTRIBUTE:
@ -207,7 +207,7 @@ void setjrec(u_char* tagp, int mode) {
break; break;
case KANJIASSYUKU: case KANJIASSYUKU:
tmp += setj_knj(tmp); tmp += setj_knj(SJ3_CONTEXT_PASS tmp);
break; break;
case KANJISTREND: case KANJISTREND:
@ -221,9 +221,9 @@ void setjrec(u_char* tagp, int mode) {
if((gram = *ptr) == IKKATU && !(mode & DO_IKKATU)) continue; if((gram = *ptr) == IKKATU && !(mode & DO_IKKATU)) continue;
if(!chkhead(gram)) continue; if(!chkhead(SJ3_CONTEXT_PASS gram)) continue;
if(!(rec = argjrec(len, (JREC*)NULL))) continue; if(!(rec = argjrec(SJ3_CONTEXT_PASS len, (JREC*)NULL))) continue;
rec->jseg = prevseg; rec->jseg = prevseg;
rec->jofsst = ptr - dicbuf; rec->jofsst = ptr - dicbuf;
@ -235,7 +235,7 @@ void setjrec(u_char* tagp, int mode) {
} }
} }
void setnumrec(u_char* tagp, JREC* rec, TypeGram gram) { void setnumrec(SJ3_CONTEXT u_char* tagp, JREC* rec, TypeGram gram) {
u_char* ptr; u_char* ptr;
u_char* endp; u_char* endp;
u_char* tmp; u_char* tmp;
@ -263,7 +263,7 @@ void setnumrec(u_char* tagp, JREC* rec, TypeGram gram) {
break; break;
case OFFSETASSYUKU: case OFFSETASSYUKU:
tmp += setj_ofs(tmp); tmp += setj_ofs(SJ3_CONTEXT_PASS tmp);
break; break;
case AIATTRIBUTE: case AIATTRIBUTE:
@ -275,7 +275,7 @@ void setnumrec(u_char* tagp, JREC* rec, TypeGram gram) {
break; break;
case KANJIASSYUKU: case KANJIASSYUKU:
tmp += setj_knj(tmp); tmp += setj_knj(SJ3_CONTEXT_PASS tmp);
break; break;
case KANJISTREND: case KANJISTREND:
@ -289,7 +289,7 @@ void setnumrec(u_char* tagp, JREC* rec, TypeGram gram) {
if(gram != *ptr) continue; if(gram != *ptr) continue;
if(!(jrec = argjrec((int)(rec->jlen + len), rec))) continue; if(!(jrec = argjrec(SJ3_CONTEXT_PASS(int)(rec->jlen + len), rec))) continue;
jrec->jseg = prevseg; jrec->jseg = prevseg;
jrec->jofsst = ptr - dicbuf; jrec->jofsst = ptr - dicbuf;
@ -298,10 +298,10 @@ void setnumrec(u_char* tagp, JREC* rec, TypeGram gram) {
} }
} }
void setcrec(u_char* tagp) { void setcrec(SJ3_CONTEXT u_char* tagp) {
JREC* rec; JREC* rec;
if(!(rec = argjrec((int)ClYomiLen(tagp), (JREC*)NULL))) return; if(!(rec = argjrec(SJ3_CONTEXT_PASS(int) ClYomiLen(tagp), (JREC*)NULL))) return;
rec->jofsst = tagp - CLSTUDYDICT; rec->jofsst = tagp - CLSTUDYDICT;
rec->class = C_BUNSETU; rec->class = C_BUNSETU;

View file

@ -39,9 +39,9 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
static int hiraknj(u_char*); static int hiraknj(SJ3_CONTEXT u_char*);
void setkouho(CLREC* clrec, TypeDicOfs offs, int mode) { void setkouho(SJ3_CONTEXT CLREC* clrec, TypeDicOfs offs, int mode) {
JREC* jrec; JREC* jrec;
KHREC* kptr; KHREC* kptr;
u_char* fptr; u_char* fptr;
@ -85,7 +85,7 @@ void setkouho(CLREC* clrec, TypeDicOfs offs, int mode) {
kptr->sttfg = 1; kptr->sttfg = 1;
kptr->sttkj = 0; kptr->sttkj = 0;
i = hiraknj(dicbuf + offs); i = hiraknj(SJ3_CONTEXT_PASS dicbuf + offs);
if(offs > 1 && (i == 2 || i == 3)) return; if(offs > 1 && (i == 2 || i == 3)) return;
if(khcount >= MAXKOUHONUMBER) return; if(khcount >= MAXKOUHONUMBER) return;
@ -118,7 +118,7 @@ void setkouho(CLREC* clrec, TypeDicOfs offs, int mode) {
} }
} }
void ph_setkouho(CLREC* clrec, TypeDicOfs offs, STDYIN* sptr) { void ph_setkouho(SJ3_CONTEXT CLREC* clrec, TypeDicOfs offs, STDYIN* sptr) {
JREC* jrec; JREC* jrec;
u_char* p; u_char* p;
@ -154,7 +154,7 @@ void ph_setkouho(CLREC* clrec, TypeDicOfs offs, STDYIN* sptr) {
} }
static int static int
hiraknj(u_char* p) { hiraknj(SJ3_CONTEXT u_char* p) {
char flg = TRUE; char flg = TRUE;
int i; int i;
int result; int result;
@ -171,7 +171,7 @@ hiraknj(u_char* p) {
break; break;
case OFFSETASSYUKU: case OFFSETASSYUKU:
result = hiraknj_ofs(p, &i); result = hiraknj_ofs(SJ3_CONTEXT_PASS p, &i);
break; break;
case AIATTRIBUTE: case AIATTRIBUTE:
@ -183,7 +183,7 @@ hiraknj(u_char* p) {
break; break;
case KANJIASSYUKU: case KANJIASSYUKU:
result = hiraknj_knj(p, &i); result = hiraknj_knj(SJ3_CONTEXT_PASS p, &i);
break; break;
default: default:
@ -203,14 +203,14 @@ int hiraknj_atrb(u_char* p, int* len) {
return 0; return 0;
} }
int hiraknj_ofs(u_char* p, int* len) { int hiraknj_ofs(SJ3_CONTEXT u_char* p, int* len) {
*len = 2; *len = 2;
return hiraknj(dicbuf + ((*p & KANJICODEMASK) << 8) + *(p + 1)); return hiraknj(SJ3_CONTEXT_PASS dicbuf + ((*p & KANJICODEMASK) << 8) + *(p + 1));
} }
int hiraknj_knj(u_char* p, int* len) { int hiraknj_knj(SJ3_CONTEXT u_char* p, int* len) {
*len = 1; *len = 1;
return hiraknj(askknj[*p & KNJASSYUKUMASK]); return hiraknj(SJ3_CONTEXT_PASS askknj[*p & KNJASSYUKUMASK]);
} }
int hiraknj_hask(u_char* p, int* len) { int hiraknj_hask(u_char* p, int* len) {

View file

@ -45,7 +45,7 @@ getstb(TypeGram hinsi) {
return Stbadr(hinsi); return Stbadr(hinsi);
} }
void setubi(JREC* rec, u_char* stbtbl) { void setubi(SJ3_CONTEXT JREC* rec, u_char* stbtbl) {
u_char* stb; u_char* stb;
u_char* yptr; u_char* yptr;
u_char* sptr; u_char* sptr;
@ -68,7 +68,7 @@ void setubi(JREC* rec, u_char* stbtbl) {
if((cmp != MATCH) || isdpnd(*(yptr + slen))) continue; if((cmp != MATCH) || isdpnd(*(yptr + slen))) continue;
if(!(new = argjrec((int)(rec->jlen + slen), rec))) continue; if(!(new = argjrec(SJ3_CONTEXT_PASS(int)(rec->jlen + slen), rec))) continue;
new->stbofs = (u_char)(stb - stbtbl); new->stbofs = (u_char)(stb - stbtbl);
new->flags |= StbBakeru(stb) ? JFLAG_KA : 0; new->flags |= StbBakeru(stb) ? JFLAG_KA : 0;

View file

@ -37,7 +37,7 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
int yomicmp(u_char* ptr1, u_char* ptr2, u_char* saml) { int yomicmp(SJ3_CONTEXT u_char* ptr1, u_char* ptr2, u_char* saml) {
int i, j; int i, j;
int same; int same;
@ -47,7 +47,7 @@ int yomicmp(u_char* ptr1, u_char* ptr2, u_char* saml) {
j = getnlen(ptr2); j = getnlen(ptr2);
if(j == 0) { if(j == 0) {
ptr2 = get_idxptr(prevseg); ptr2 = get_idxptr(SJ3_CONTEXT_PASS prevseg);
for(i = same; i; i--) for(i = same; i; i--)
if(*ptr1++ != *ptr2++) return OVER; if(*ptr1++ != *ptr2++) return OVER;
@ -79,7 +79,7 @@ int yomicmp(u_char* ptr1, u_char* ptr2, u_char* saml) {
} }
u_char* u_char*
srchdict(u_char* tagp) { srchdict(SJ3_CONTEXT u_char* tagp) {
TypeDicSeg segno; TypeDicSeg segno;
int cmp; int cmp;
int maxlen; int maxlen;
@ -88,7 +88,7 @@ srchdict(u_char* tagp) {
while((int)dicinl <= maxlen) { while((int)dicinl <= maxlen) {
segno = srchidx(prevseg, (int)dicinl); segno = srchidx(SJ3_CONTEXT_PASS prevseg, (int)dicinl);
(*curdict->getdic)(curdict, segno); (*curdict->getdic)(curdict, segno);
@ -116,13 +116,13 @@ srchdict(u_char* tagp) {
} }
if(tagp == dicbuf) { if(tagp == dicbuf) {
get_askknj(); get_askknj(SJ3_CONTEXT_PASS2);
tagp += *tagp + 1; tagp += *tagp + 1;
} }
while(!segend(tagp)) { while(!segend(tagp)) {
cmp = yomicmp(cnvstart, tagp, &dicsaml); cmp = yomicmp(SJ3_CONTEXT_PASS cnvstart, tagp, &dicsaml);
if((int)dicsaml > maxlen) return NULL; if((int)dicsaml > maxlen) return NULL;

View file

@ -38,7 +38,7 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
int srchhead() { int srchhead(SJ3_CONTEXT2) {
if(*cnvstart == _O) { if(*cnvstart == _O) {
headcode = SETTOU_O; headcode = SETTOU_O;
headlen = 1; headlen = 1;

View file

@ -38,7 +38,7 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
TypeDicSeg TypeDicSeg
srchidx(TypeDicSeg low, int len) { srchidx(SJ3_CONTEXT TypeDicSeg low, int len) {
TypeDicSeg high; TypeDicSeg high;
TypeDicSeg mid; TypeDicSeg mid;
int cmp; int cmp;
@ -52,7 +52,7 @@ srchidx(TypeDicSeg low, int len) {
mid = (low + high) >> 1; mid = (low + high) >> 1;
target = get_idxptr(mid); target = get_idxptr(SJ3_CONTEXT_PASS mid);
cmp = istrcmp(cnvstart, target, len, sstrlen(target)); cmp = istrcmp(cnvstart, target, len, sstrlen(target));

View file

@ -41,10 +41,10 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
static void srch_kurai1(u_char*, u_char*), srch_kurai2(u_char*, u_char*); static void srch_kurai1(SJ3_CONTEXT u_char*, u_char*), srch_kurai2(SJ3_CONTEXT u_char*, u_char*);
static void static void
srch_josuu_sub(JREC* jrec, TypeGram gram) { srch_josuu_sub(SJ3_CONTEXT JREC* jrec, TypeGram gram) {
u_char* tagp; u_char* tagp;
DICTL* dp; DICTL* dp;
@ -53,12 +53,12 @@ srch_josuu_sub(JREC* jrec, TypeGram gram) {
dicinl = 1; dicinl = 1;
dicsaml = 0; dicsaml = 0;
prevseg = -1; prevseg = -1;
while((tagp = srchdict(tagp))) setnumrec(tagp, jrec, gram); while((tagp = srchdict(SJ3_CONTEXT_PASS tagp))) setnumrec(SJ3_CONTEXT_PASS tagp, jrec, gram);
} }
} }
static void static void
srch_josuu(JREC* jrec) { srch_josuu(SJ3_CONTEXT JREC* jrec) {
u_char* kp; u_char* kp;
int klen; int klen;
int len; int len;
@ -71,16 +71,16 @@ srch_josuu(JREC* jrec) {
cnvstart += (len = jrec->numlen); cnvstart += (len = jrec->numlen);
cnvlen -= len; cnvlen -= len;
srch_josuu_sub(jrec, JOSUUSI); srch_josuu_sub(SJ3_CONTEXT_PASS jrec, JOSUUSI);
if(!headcode) srch_josuu_sub(jrec, JOSUUSI2); if(!headcode) srch_josuu_sub(SJ3_CONTEXT_PASS jrec, JOSUUSI2);
cnvstart = kp; cnvstart = kp;
cnvlen = klen; cnvlen = klen;
} }
static void static void
setnrec_sub(u_char* p, u_short flag, int stb) { setnrec_sub(SJ3_CONTEXT u_char* p, u_short flag, int stb) {
JREC* rec; JREC* rec;
int len1; int len1;
int len2; int len2;
@ -101,7 +101,7 @@ setnrec_sub(u_char* p, u_short flag, int stb) {
return; return;
} }
if((rec = argjrec(len1, (JREC*)NULL))) { if((rec = argjrec(SJ3_CONTEXT_PASS len1, (JREC*)NULL))) {
rec->class = suuji_class; rec->class = suuji_class;
rec->hinsi = SUUSI; rec->hinsi = SUUSI;
rec->sttofs = headcode; rec->sttofs = headcode;
@ -109,16 +109,16 @@ setnrec_sub(u_char* p, u_short flag, int stb) {
rec->flags = flag; rec->flags = flag;
rec->numlen = (u_char)len2; rec->numlen = (u_char)len2;
if(!stb) srch_josuu(rec); if(!stb) srch_josuu(SJ3_CONTEXT_PASS rec);
} }
} }
static void static void
setnrec(u_char* p, u_short flag) { setnrec(SJ3_CONTEXT u_char* p, u_short flag) {
setnrec_sub(p, flag, 0); setnrec_sub(SJ3_CONTEXT_PASS p, flag, 0);
if(!headcode && (*p == Y_S_KIGOU2)) { if(!headcode && (*p == Y_S_KIGOU2)) {
setnrec_sub(p + 1, flag, -1); setnrec_sub(SJ3_CONTEXT_PASS p + 1, flag, -1);
} }
} }
@ -174,7 +174,7 @@ string_cmp(u_char* s, int l, u_char* d) {
} }
static int static int
check_num(u_char* ptr) { check_num(SJ3_CONTEXT u_char* ptr) {
int i; int i;
int j; int j;
int k; int k;
@ -256,13 +256,13 @@ check_num(u_char* ptr) {
if(cnt > 1) flag |= JFLAG_NSN; if(cnt > 1) flag |= JFLAG_NSN;
setnrec(ptr, flag); setnrec(SJ3_CONTEXT_PASS ptr, flag);
return TRUE; return TRUE;
} }
static void static void
srch_number1(u_char* ptr) { srch_number1(SJ3_CONTEXT u_char* ptr) {
u_char ch; u_char ch;
u_char mode; u_char mode;
u_char* p; u_char* p;
@ -291,19 +291,19 @@ srch_number1(u_char* ptr) {
case C_N_ARABIA: case C_N_ARABIA:
if(!(mode & SJTBLNARABIAF)) break; if(!(mode & SJTBLNARABIAF)) break;
check_num(tptr); check_num(SJ3_CONTEXT_PASS tptr);
srch_number1(tptr); srch_number1(SJ3_CONTEXT_PASS tptr);
srch_kurai2(tptr, (u_char*)NULL); srch_kurai2(SJ3_CONTEXT_PASS tptr, (u_char*)NULL);
break; break;
case C_N_SUUJI: case C_N_SUUJI:
if(mode & (SJTBLNARABIAF | SJTBLNYOMIF)) break; if(mode & (SJTBLNARABIAF | SJTBLNYOMIF)) break;
check_num(tptr); check_num(SJ3_CONTEXT_PASS tptr);
srch_number1(tptr); srch_number1(SJ3_CONTEXT_PASS tptr);
srch_kurai1(tptr, (u_char*)NULL); srch_kurai1(SJ3_CONTEXT_PASS tptr, (u_char*)NULL);
srch_kurai2(tptr, (u_char*)NULL); srch_kurai2(SJ3_CONTEXT_PASS tptr, (u_char*)NULL);
break; break;
@ -315,9 +315,9 @@ srch_number1(u_char* ptr) {
suuji_class = C_N_NANSUU; suuji_class = C_N_NANSUU;
} }
check_num(tptr); check_num(SJ3_CONTEXT_PASS tptr);
srch_kurai1(tptr, SjTblCnctP(p)); srch_kurai1(SJ3_CONTEXT_PASS tptr, SjTblCnctP(p));
srch_kurai2(tptr, SjTblCnctP(p)); srch_kurai2(SJ3_CONTEXT_PASS tptr, SjTblCnctP(p));
if(mode & SJTBLNNANSUUF) suuji_class = cls; if(mode & SJTBLNNANSUUF) suuji_class = cls;
break; break;
@ -325,9 +325,9 @@ srch_number1(u_char* ptr) {
default: default:
if(mode & SJTBLNARABIAF) { if(mode & SJTBLNARABIAF) {
suuji_class = C_N_ARABIA; suuji_class = C_N_ARABIA;
check_num(tptr); check_num(SJ3_CONTEXT_PASS tptr);
srch_number1(tptr); srch_number1(SJ3_CONTEXT_PASS tptr);
srch_kurai2(tptr, (u_char*)NULL); srch_kurai2(SJ3_CONTEXT_PASS tptr, (u_char*)NULL);
suuji_class = C_N_KAZU; suuji_class = C_N_KAZU;
} else if(mode & SJTBLNYOMIF) { } else if(mode & SJTBLNYOMIF) {
@ -335,21 +335,21 @@ srch_number1(u_char* ptr) {
suuji_class = C_N_NANSUU; suuji_class = C_N_NANSUU;
else else
suuji_class = C_N_KAZU; suuji_class = C_N_KAZU;
check_num(tptr); check_num(SJ3_CONTEXT_PASS tptr);
} else if(mode & SJTBLNNARABIF) { } else if(mode & SJTBLNNARABIF) {
suuji_class = C_N_SUUJI; suuji_class = C_N_SUUJI;
check_num(tptr); check_num(SJ3_CONTEXT_PASS tptr);
srch_number1(tptr); srch_number1(SJ3_CONTEXT_PASS tptr);
break; break;
} else { } else {
suuji_class = C_N_SUUJI; suuji_class = C_N_SUUJI;
srch_number1(tptr); srch_number1(SJ3_CONTEXT_PASS tptr);
suuji_class = C_N_KAZU; suuji_class = C_N_KAZU;
check_num(tptr); check_num(SJ3_CONTEXT_PASS tptr);
} }
srch_kurai1(tptr, SjTblCnctP(p)); srch_kurai1(SJ3_CONTEXT_PASS tptr, SjTblCnctP(p));
srch_kurai2(tptr, SjTblCnctP(p)); srch_kurai2(SJ3_CONTEXT_PASS tptr, SjTblCnctP(p));
break; break;
} }
@ -358,7 +358,7 @@ srch_number1(u_char* ptr) {
} }
static void static void
srch_kurai1(u_char* ptr, u_char* cnct) { srch_kurai1(SJ3_CONTEXT u_char* ptr, u_char* cnct) {
u_char ch; u_char ch;
u_char* p; u_char* p;
int l; int l;
@ -386,7 +386,7 @@ srch_kurai1(u_char* ptr, u_char* cnct) {
cls = suuji_class; cls = suuji_class;
suuji_class = (suuji_class == C_N_ARABIA) ? C_N_ARAKURA : C_N_KANKURA; suuji_class = (suuji_class == C_N_ARABIA) ? C_N_ARAKURA : C_N_KANKURA;
suuji_ubuf[suuji_keta - 1] |= (keta << 4); suuji_ubuf[suuji_keta - 1] |= (keta << 4);
check_num(tptr); check_num(SJ3_CONTEXT_PASS tptr);
suuji_class = cls; suuji_class = cls;
suuji_ubuf[suuji_keta - 1] &= 0xcf; suuji_ubuf[suuji_keta - 1] &= 0xcf;
continue; continue;
@ -401,11 +401,11 @@ srch_kurai1(u_char* ptr, u_char* cnct) {
suuji_ubuf[suuji_keta++] = (_NUM1 | (keta << 4)); suuji_ubuf[suuji_keta++] = (_NUM1 | (keta << 4));
} }
check_num(tptr); check_num(SJ3_CONTEXT_PASS tptr);
srch_number1(tptr); srch_number1(SJ3_CONTEXT_PASS tptr);
srch_kurai1(tptr, (u_char*)NULL); srch_kurai1(SJ3_CONTEXT_PASS tptr, (u_char*)NULL);
srch_kurai2(tptr, Kr1TblCnctP(p)); srch_kurai2(SJ3_CONTEXT_PASS tptr, Kr1TblCnctP(p));
if(cnct) if(cnct)
suuji_ubuf[suuji_keta - 1] &= 0xcf; suuji_ubuf[suuji_keta - 1] &= 0xcf;
@ -415,7 +415,7 @@ srch_kurai1(u_char* ptr, u_char* cnct) {
} }
static void static void
srch_kurai2(u_char* ptr, u_char* cnct) { srch_kurai2(SJ3_CONTEXT u_char* ptr, u_char* cnct) {
u_char ch; u_char ch;
u_char* p; u_char* p;
int l; int l;
@ -445,7 +445,7 @@ srch_kurai2(u_char* ptr, u_char* cnct) {
suuji_ubuf[suuji_keta - 1] |= (keta << 6); suuji_ubuf[suuji_keta - 1] |= (keta << 6);
cls = suuji_class; cls = suuji_class;
suuji_class = (suuji_class == C_N_ARABIA) ? C_N_ARAKURA : C_N_KANKURA; suuji_class = (suuji_class == C_N_ARABIA) ? C_N_ARAKURA : C_N_KANKURA;
check_num(tptr); check_num(SJ3_CONTEXT_PASS tptr);
suuji_class = cls; suuji_class = cls;
suuji_ubuf[suuji_keta - 1] &= 0x3f; suuji_ubuf[suuji_keta - 1] &= 0x3f;
continue; continue;
@ -459,10 +459,10 @@ srch_kurai2(u_char* ptr, u_char* cnct) {
suuji_ubuf[suuji_keta++] = (_NUM1 | (keta << 6)); suuji_ubuf[suuji_keta++] = (_NUM1 | (keta << 6));
} }
check_num(tptr); check_num(SJ3_CONTEXT_PASS tptr);
srch_number1(tptr); srch_number1(SJ3_CONTEXT_PASS tptr);
srch_kurai1(tptr, (u_char*)NULL); srch_kurai1(SJ3_CONTEXT_PASS tptr, (u_char*)NULL);
if(cnct) if(cnct)
suuji_ubuf[suuji_keta - 1] &= 0x3f; suuji_ubuf[suuji_keta - 1] &= 0x3f;
@ -472,7 +472,7 @@ srch_kurai2(u_char* ptr, u_char* cnct) {
} }
static void static void
srch_number2(u_char* p) { srch_number2(SJ3_CONTEXT u_char* p) {
u_char ch; u_char ch;
int i; int i;
@ -507,68 +507,68 @@ srch_number2(u_char* p) {
suuji_keta++; suuji_keta++;
if(!suuji_comma && suuji_keta > NUMKETALENGTH) { if(!suuji_comma && suuji_keta > NUMKETALENGTH) {
setnrec(p, 0); setnrec(SJ3_CONTEXT_PASS p, 0);
} else if(suuji_comma == 3) { } else if(suuji_comma == 3) {
if(suuji_keta <= NUMKETALENGTH) { if(suuji_keta <= NUMKETALENGTH) {
suuji_class = C_N_ARACMA; suuji_class = C_N_ARACMA;
check_num(p); check_num(SJ3_CONTEXT_PASS p);
} else { } else {
suuji_class = C_N_KAZULCMA; suuji_class = C_N_KAZULCMA;
setnrec(p, 0); setnrec(SJ3_CONTEXT_PASS p, 0);
} }
} }
} }
} }
static void static void
srchnum_sub(u_char* p) { srchnum_sub(SJ3_CONTEXT u_char* p) {
suuji_yptr = p; suuji_yptr = p;
suuji_comma = suuji_keta = 0; suuji_comma = suuji_keta = 0;
suuji_class = 0; suuji_class = 0;
srch_number1(p); srch_number1(SJ3_CONTEXT_PASS p);
suuji_keta = 0; suuji_keta = 0;
suuji_class = C_N_KAZU; suuji_class = C_N_KAZU;
srch_kurai1(p, (u_char*)NULL); srch_kurai1(SJ3_CONTEXT_PASS p, (u_char*)NULL);
if(suuji_exit) return; if(suuji_exit) return;
srch_number2(p); srch_number2(SJ3_CONTEXT_PASS p);
} }
void srchnum() { void srchnum(SJ3_CONTEXT2) {
suuji_len = suuji_exit = 0; suuji_len = suuji_exit = 0;
srchnum_sub(cnvstart); srchnum_sub(SJ3_CONTEXT_PASS cnvstart);
if(!headcode && (*cnvstart == Y_S_KIGOU1)) { if(!headcode && (*cnvstart == Y_S_KIGOU1)) {
headcode = SETTOU_KIGOU; headcode = SETTOU_KIGOU;
headlen = 1; headlen = 1;
srchnum_sub(cnvstart + 1); srchnum_sub(SJ3_CONTEXT_PASS cnvstart + 1);
headcode = headlen = 0; headcode = headlen = 0;
} }
} }
void setwdnum(u_char* p, int len, u_short* wd) { void setwdnum(SJ3_CONTEXT u_char* p, int len, u_short* wd) {
suuji_len = (u_char)len; suuji_len = (u_char)len;
suuji_wkeep = wd; suuji_wkeep = wd;
suuji_ukeep = NULL; suuji_ukeep = NULL;
headcode = headlen = 0; headcode = headlen = 0;
suuji_exit = 0; suuji_exit = 0;
srchnum_sub(p); srchnum_sub(SJ3_CONTEXT_PASS p);
} }
int setucnum(u_char* p, int len, u_char* ud) { int setucnum(SJ3_CONTEXT u_char* p, int len, u_char* ud) {
suuji_len = (u_char)len; suuji_len = (u_char)len;
suuji_wkeep = NULL; suuji_wkeep = NULL;
suuji_ukeep = ud; suuji_ukeep = ud;
headcode = headlen = 0; headcode = headlen = 0;
suuji_exit = 0; suuji_exit = 0;
srchnum_sub(p); srchnum_sub(SJ3_CONTEXT_PASS p);
return (int)suuji_exit; return (int)suuji_exit;
} }

View file

@ -37,7 +37,7 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
int study(STDYOUT* stdy) { int study(SJ3_CONTEXT STDYOUT* stdy) {
STDYOUT outp; STDYOUT outp;
STDYIN* p1; STDYIN* p1;
STDYIN* p2; STDYIN* p2;
@ -54,7 +54,7 @@ int study(STDYOUT* stdy) {
if(outp.stdy1.offset == 0) return STUDYNOTSTUDY; if(outp.stdy1.offset == 0) return STUDYNOTSTUDY;
p1 = srchstdy(outp.stdy1.seg, outp.stdy1.offset, outp.stdy1.dicid); p1 = srchstdy(SJ3_CONTEXT_PASS outp.stdy1.seg, outp.stdy1.offset, outp.stdy1.dicid);
if(p1) { if(p1) {
nm = p1->styno; nm = p1->styno;
@ -69,7 +69,7 @@ int study(STDYOUT* stdy) {
p1->nmflg = outp.stdy1.nmflg; p1->nmflg = outp.stdy1.nmflg;
putstydic(); putstydic(SJ3_CONTEXT_PASS2);
return STUDYNORMEND; return STUDYNORMEND;
} }
@ -127,13 +127,13 @@ int study(STDYOUT* stdy) {
p1->nmflg = outp.stdy1.nmflg; p1->nmflg = outp.stdy1.nmflg;
STUDYCOUNT += 1; STUDYCOUNT += 1;
putstydic(); putstydic(SJ3_CONTEXT_PASS2);
return ret; return ret;
} }
STDYIN* STDYIN*
srchstdy(TypeDicSeg seg, TypeDicOfs ofs, TypeDicID dicid) { srchstdy(SJ3_CONTEXT TypeDicSeg seg, TypeDicOfs ofs, TypeDicID dicid) {
int high; int high;
int mid; int mid;
int low; int low;

View file

@ -38,7 +38,7 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
int terminate(TypeCnct right, u_char* yomi) { int terminate(SJ3_CONTEXT TypeCnct right, u_char* yomi) {
u_char ch; u_char ch;
if((yomi > cnvstart) && (Chrtbl[*(yomi - 1)] & NUMBER)) if((yomi > cnvstart) && (Chrtbl[*(yomi - 1)] & NUMBER))

View file

@ -39,7 +39,7 @@
#include "sj_kanakan.h" #include "sj_kanakan.h"
void wakachi() { void wakachi(SJ3_CONTEXT2) {
JREC* jrec; JREC* jrec;
CLREC* clrec; CLREC* clrec;
@ -66,24 +66,24 @@ void wakachi() {
i = maxlen; i = maxlen;
} }
if(!(jrec = argjrec(i, (JREC*)NULL))) return; if(!(jrec = argjrec(SJ3_CONTEXT_PASS i, (JREC*)NULL))) return;
jrec->class = C_WAKACHI; jrec->class = C_WAKACHI;
jrec->hinsi = D_MEISI_1; jrec->hinsi = D_MEISI_1;
if(Chrtbl[*(next - 1)] & TAI_KGU) if(Chrtbl[*(next - 1)] & TAI_KGU)
srchfzk(jrec, next, R_DAIMEISI, 0); srchfzk(SJ3_CONTEXT_PASS jrec, next, R_DAIMEISI, 0);
} }
else { else {
if(!(jrec = argjrec(0, (JREC*)NULL))) return; if(!(jrec = argjrec(SJ3_CONTEXT_PASS 0, (JREC*)NULL))) return;
jrec->class = C_WAKACHI; jrec->class = C_WAKACHI;
jrec->hinsi = MEISI_6; jrec->hinsi = MEISI_6;
while((int)jrec->jlen < maxlen) { while((int)jrec->jlen < maxlen) {
count = setconj((TypeGram)MEISI_6, jrec, crec); count = setconj(SJ3_CONTEXT_PASS(TypeGram) MEISI_6, jrec, crec);
for(i = count; i-- > 0;) { for(i = count; i-- > 0;) {
@ -92,17 +92,17 @@ void wakachi() {
next = cnvstart + jrec->jlen + gobilen; next = cnvstart + jrec->jlen + gobilen;
if(gobilen) { if(gobilen) {
if(terminate(right, next)) { if(terminate(SJ3_CONTEXT_PASS right, next)) {
fzk_ka_flg = 0; fzk_ka_flg = 0;
setclrec(jrec, next, right); setclrec(SJ3_CONTEXT_PASS jrec, next, right);
} }
} else if((Chrtbl[*next] & NUMBER) && (jrec->jlen)) { } else if((Chrtbl[*next] & NUMBER) && (jrec->jlen)) {
fzk_ka_flg = 0; fzk_ka_flg = 0;
setclrec(jrec, next, right); setclrec(SJ3_CONTEXT_PASS jrec, next, right);
return; return;
} }
srchfzk(jrec, next, right, 0); srchfzk(SJ3_CONTEXT_PASS jrec, next, right, 0);
} }
if(maxclptr) break; if(maxclptr) break;
@ -115,7 +115,7 @@ void wakachi() {
return; return;
if(jrec->jlen) { if(jrec->jlen) {
if((clrec = argclrec((int)jrec->jlen))) { if((clrec = argclrec(SJ3_CONTEXT_PASS(int) jrec->jlen))) {
clrec->jnode = jrec; clrec->jnode = jrec;
clrec->right = R_MEISI; clrec->right = R_MEISI;
clrec->kubun = K_TAIGEN; clrec->kubun = K_TAIGEN;

View file

@ -7,20 +7,21 @@ int main(int argc, char** argv) {
int i = 0; int i = 0;
char c[64 * 1024]; char c[64 * 1024];
char b; char b;
Sj3Context ctx;
ctx.work = calloc(1, sizeof(Global));
work_base = calloc(1, sizeof(Global));
node = calloc(1, sizeof(DICTL)); node = calloc(1, sizeof(DICTL));
ctx.work->Jdictlist = node;
dictlist = node; initwork(&ctx);
initwork(); dict = opendict(&ctx, "dic.bin", "");
dict = opendict("dic.bin", "");
node->dict = &dict->dict; node->dict = &dict->dict;
node->next = NULL; node->next = NULL;
seldict(dict->dict.dicid); seldict(&ctx, dict->dict.dicid);
c[0] = 0; c[0] = 0;
@ -36,7 +37,7 @@ int main(int argc, char** argv) {
} }
i = 0; i = 0;
while((strlen(c) - i) > 0 && (i += cl2knj((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; STDYOUT* s = (STDYOUT*)out;
printf("> %s\n", out + sizeof(STDYOUT)); printf("> %s\n", out + sizeof(STDYOUT));