diff -Naur xjdic24/Makefile xjdic24/Makefile --- xjdic24/Makefile 2003-05-28 08:15:43.000000000 +0200 +++ xjdic24/Makefile 2009-08-27 11:05:31.000000000 +0200 @@ -54,7 +54,8 @@ # #LIBS= -lsocket -lnsl # -CC=gcc -g +#CC=gcc -g +CC=gcc all: xjdic_sa xjdic_cl xjdserver xjdxgen exjdxgen client: xjdic_cl server: xjdserver diff -Naur xjdic24/exjdxgen.c xjdic24/exjdxgen.c --- xjdic24/exjdxgen.c 1998-05-24 17:43:37.000000000 +0200 +++ xjdic24/exjdxgen.c 2009-08-27 11:05:31.000000000 +0200 @@ -22,7 +22,7 @@ #include #include -/*#include */ +#include #include #include #include "xjdic.h" @@ -32,7 +32,7 @@ #define EXLIM 100 unsigned char *db; -unsigned char ENVname[50]; +__thread unsigned char ENVname[50]; unsigned char *dicenv; struct stat *buf; unsigned long dbyte; diff -Naur xjdic24/xjdclient.c xjdic24/xjdclient.c --- xjdic24/xjdclient.c 1998-08-31 12:56:56.000000000 +0200 +++ xjdic24/xjdclient.c 2009-08-27 11:05:31.000000000 +0200 @@ -36,14 +36,14 @@ #include #include #include +#include #include "xjdic.h" #define CVERBOSE 0 int chk_cnt=0; -extern int errno; -unsigned char host[51] = {"localhost"}; +__thread unsigned char host[51] = {"localhost"}; unsigned char yn[2]; -unsigned int portno = XJ_PORTNO; +__thread unsigned int portno = XJ_PORTNO; char protocol[4] = {"udp"}; int s, elapse; struct timeval timeout; @@ -59,8 +59,8 @@ fd_set fildesc; int nfds; unsigned char *sptr; -int NoDics,CurrDic; -char Dnamet[10][100]; +__thread int NoDics,CurrDic; +__thread char Dnamet[10][100]; void xjdserver (int type, int dic_no, long index_posn, int sch_str_len, unsigned char *sch_str, int *sch_resp, long *res_index, diff -Naur xjdic24/xjdcomm.c xjdic24/xjdcomm.c --- xjdic24/xjdcomm.c 2003-05-28 07:43:27.000000000 +0200 +++ xjdic24/xjdcomm.c 2009-08-27 11:05:31.000000000 +0200 @@ -36,11 +36,11 @@ #define TRUE 1 #ifdef XJDCLSERV -extern int portno; -extern unsigned char host[]; +extern __thread int portno; +extern __thread unsigned char host[]; #endif -extern unsigned char Dnamet[10][100]; +extern __thread unsigned char Dnamet[10][100]; int stringcomp(unsigned char *s1, unsigned char *s2); struct stat buf; @@ -58,7 +58,7 @@ { int fx; - extern char DicDir[]; + extern __thread char DicDir[]; char *fnbuff; fnbuff = (char *)malloc(strlen(DicDir) + strlen(file_name)+10); @@ -109,7 +109,7 @@ { FILE *fx, *fopen(); - extern char DicDir[]; + extern __thread char DicDir[]; char *fnbuff; /* printf ("XFOPEN: fn=%s mode=%s stream_p=%p\n",file_name,file_mode,fx); */ @@ -164,27 +164,27 @@ { unsigned char xjdicdir[128],rcstr[80],*rcwd; int ft,fn; - extern int thisdic; - extern char DicDir[]; + extern __thread int thisdic; + extern __thread char DicDir[]; FILE *fm,*fopen(); #ifdef XJDDIC - extern unsigned char Dnamet[10][100],XJDXnamet[10][100]; - extern unsigned char *dicbufft[10]; - extern unsigned long diclent[10], indkent[10],indptrt[10]; - extern int NoDics; -#endif - extern unsigned char ENVname[], KDNSlist[]; - extern unsigned char EXTJDXname[], EXTname[], Rname[], Vname[], ROMname[]; - extern unsigned char RKname[]; - extern unsigned char filtnames[NOFILT][50],filtcodes[NOFILT][10][10]; - extern int Omode, Jverb, nofilts, filtact[], filtcoden[], filttype[], filton[]; - extern int RVACTIVE; - extern unsigned char cl_rcfile[]; + extern __thread unsigned char Dnamet[10][100],XJDXnamet[10][100]; + extern __thread unsigned char *dicbufft[10]; + extern __thread unsigned long diclent[10], indkent[10],indptrt[10]; + extern __thread int NoDics; +#endif + extern __thread unsigned char ENVname[], KDNSlist[]; + extern __thread unsigned char EXTJDXname[], EXTname[], Rname[], Vname[], ROMname[]; + extern __thread unsigned char RKname[]; + extern __thread unsigned char filtnames[NOFILT][50],filtcodes[NOFILT][10][10]; + extern __thread int Omode, Jverb, nofilts, filtact[], filtcoden[], filttype[], filton[]; + extern __thread int RVACTIVE; + extern __thread unsigned char cl_rcfile[]; #ifdef XJDFRONTEND - extern unsigned char GPL_File[]; - extern unsigned char Clip_File[]; - extern int KImode; + extern __thread unsigned char GPL_File[]; + extern __thread unsigned char Clip_File[]; + extern __thread int KImode; #endif strcpy(DicDir,ENVname); /* added by nakahara@debian.org */ diff -Naur xjdic24/xjdfrontend.c xjdic24/xjdfrontend.c --- xjdic24/xjdfrontend.c 2003-05-28 09:14:29.000000000 +0200 +++ xjdic24/xjdfrontend.c 2009-08-27 11:05:31.000000000 +0200 @@ -59,29 +59,29 @@ static struct termio orig,new; #endif -extern unsigned char CBname[100]; -extern unsigned char Dnamet[10][100],XJDXnamet[10][100]; -extern unsigned char *dicbufft[10]; -extern unsigned long diclent[10], indkent[10],indptrt[10]; -extern int NoDics,CurrDic; -int thisdic = 0; +extern __thread unsigned char CBname[100]; +extern __thread unsigned char Dnamet[10][100],XJDXnamet[10][100]; +extern __thread unsigned char *dicbufft[10]; +extern __thread unsigned long diclent[10], indkent[10],indptrt[10]; +extern __thread int NoDics,CurrDic; +__thread int thisdic = 0; int gdicnos[10],gdicmax=0,GDmode=FALSE,gdiclen; int GDALLmode=FALSE; FILE *fe, *fex, *fclip, *fopen(); #ifdef XJDCLSERV -extern int portno; -extern unsigned char host[]; +extern __thread int portno; +extern __thread unsigned char host[]; #endif #ifdef XJDDIC -extern unsigned long dichits[10],dicmiss[10]; -extern unsigned long indhits[10],indmiss[10]; -extern unsigned long vbkills; +extern __thread unsigned long dichits[10],dicmiss[10]; +extern __thread unsigned long indhits[10],indmiss[10]; +extern __thread unsigned long vbkills; #endif -char DicDir[100]; +__thread char DicDir[100]; int xfilelen; pid_t pid; @@ -90,28 +90,28 @@ unsigned char instr[256],radkanj[250][2]; int radnos[250]; unsigned char kanatab[NRKANA*2][7]; -int Omode = 0,Smode = 0,Dmode = 0,AKanaMode; +__thread int Omode = 0,Smode = 0,Dmode = 0,AKanaMode; int DRow,DCol,MaxY=MAXLINES,MaxX=MAXCOLS-1,KFlushRes,nok; unsigned long hittab[NOHITS]; int verblen,DispHit,ksp,hitind,FirstKanj = 0,prieng = FALSE,Extopen=FALSE,NoSkip; int extlen,extjdxlen; unsigned char kmodes[2][10] = {"ON","OFF"}; unsigned char kmodes_r[2][10] = {"OFF","ON"}; -unsigned long chline,chpos,it; +__thread unsigned long chline,chpos,it; unsigned char strfilt[10],tempout[80]; unsigned char KSname[50] = {"kanjstroke"}; -unsigned char RKname[50] = {"radkfile"}; -unsigned char Rname[50] = {"radicals.tm"}; -unsigned char ROMname[60] = {"romkana.cnv"}; -unsigned char EXTJDXname[80] = {"edictext.xjdx"}; -unsigned char EXTname[80] = {"edictext"}; -unsigned char Vname[60] = {"vconj"}; -unsigned char ENVname[100]; -unsigned char cl_rcfile[100]; -unsigned char Clip_File[100] = {"clipboard"}; -unsigned char GPL_File[100] = {"gnu_licence"}; -unsigned char KDNSlist[50]; -int jiver = 14; /*The last time the index structure changed was Version1.4*/ +__thread unsigned char RKname[50] = {"radkfile"}; +__thread unsigned char Rname[50] = {"radicals.tm"}; +__thread unsigned char ROMname[60] = {"romkana.cnv"}; +__thread unsigned char EXTJDXname[80] = {"edictext.xjdx"}; +__thread unsigned char EXTname[80] = {"edictext"}; +__thread unsigned char Vname[60] = {"vconj"}; +__thread unsigned char ENVname[100]; +__thread unsigned char cl_rcfile[100]; +__thread unsigned char Clip_File[100] = {"clipboard"}; +__thread unsigned char GPL_File[100] = {"gnu_licence"}; +__thread unsigned char KDNSlist[50]; +__thread int jiver = 14; /*The last time the index structure changed was Version1.4*/ unsigned char sver[] = {SVER}; unsigned char fbuff[512],KLine[KFBUFFSIZE],karray[KANJARRAYSIZE][5]; unsigned char LogLine[200]; @@ -148,12 +148,12 @@ }; unsigned char RVon[] = {0x1b,'[','7','m',0}; unsigned char RVoff[] = {0x1b,'[','m',0}; -int nofilts=FALSE,filton[NOFILT],filtact[NOFILT],filttype[NOFILT],filtcoden[NOFILT]; -unsigned char filtnames[NOFILT][50],filtcodes[NOFILT][10][10]; +__thread int nofilts=FALSE,filton[NOFILT],filtact[NOFILT],filttype[NOFILT],filtcoden[NOFILT]; +__thread unsigned char filtnames[NOFILT][50],filtcodes[NOFILT][10][10]; unsigned char testline[1025],SingleFilter[50]; unsigned char vdicf[VMAX][7],vinfl[VMAX][21],vcomms[41][50]; -int strf,Jverb = TRUE,SFFlag=FALSE,vcommno[VMAX]; -int ROmode = 1,EMmode = 1,KLmode = 1,KImode = 1,KLRmode,KLcount; +__thread int strf,Jverb = TRUE,SFFlag=FALSE,vcommno[VMAX]; +__thread int ROmode = 1,EMmode = 1,KLmode = 1,KImode = 1,KLRmode,KLcount; unsigned char vline[250],vstr[13]; unsigned char RadK1[300],RadK2[300],*RKanj1,*RKanj2,*RKSet[10]; unsigned char RKTarg[21]; @@ -163,9 +163,9 @@ int clipmode=FALSE; unsigned char clipstring1[51]; unsigned char clipstring2[51]={"XXXX"}; -int RVACTIVE = TRUE; +__thread int RVACTIVE = TRUE; -int DicNum; +__thread int DicNum; long DicLoc; /*====== Prototypes========================================================*/ diff -Naur xjdic24/xjdic.h xjdic24/xjdic.h --- xjdic24/xjdic.h 2003-12-24 04:27:00.000000000 +0100 +++ xjdic24/xjdic.h 2009-08-27 14:41:18.000000000 +0200 @@ -3,7 +3,7 @@ #define NRKANA 250*2 /* size of the romaji to kana tables*/ #define NOFILT 10 /* maximum number of general filters */ #define VMAX 600 /* maximum entries in the verb table */ -#define DEFAULT_DICDIR "" /* could be: "/usr/local/lib/xjdic" */ +#define DEFAULT_DICDIR "/usr/share/xjdic" /* could be: "/usr/local/lib/xjdic" */ #define NOHITS 1000 /* size of hittab */ #define SPTAG '@' /* character that flags priority entries */ #define KFBUFFSIZE 2000 /* size of the KFlush buffer */ diff -Naur xjdic24/xjdrad.c xjdic24/xjdrad.c --- xjdic24/xjdrad.c 2003-05-28 07:57:33.000000000 +0200 +++ xjdic24/xjdrad.c 2009-08-27 11:05:31.000000000 +0200 @@ -34,7 +34,7 @@ struct stat *xbuf; -unsigned char RKname[50] = {"radkfile"}; +__thread unsigned char RKname[50] = {"radkfile"}; unsigned char IRKname[50] = {"radkfile"}; unsigned char DicDir[100]; unsigned char sver[] = {SVER}; diff -Naur xjdic24/xjdsa.c xjdic24/xjdsa.c --- xjdic24/xjdsa.c 1998-08-30 02:31:20.000000000 +0200 +++ xjdic24/xjdsa.c 2009-08-27 11:05:31.000000000 +0200 @@ -30,11 +30,11 @@ #include #include "xjdic.h" -unsigned char Dnamet[10][100],XJDXnamet[10][100]; +//__thread unsigned char Dnamet[10][100],XJDXnamet[10][100]; unsigned char CBname[100]; unsigned char *dicbufft[10]; -unsigned long diclent[10], indlent[10],indptrt[10]; -int NoDics,CurrDic; +extern __thread unsigned long diclent[10], indlent[10],indptrt[10]; +extern __thread int NoDics,CurrDic; int iterlimit; /* extern int TRIGGER; */ @@ -67,7 +67,7 @@ */ { long lo, hi, itok, lo2, hi2, schix, schiy; - extern long it; + extern __thread long it; int res, i; hi = indptrt[dic_no]; diff -Naur xjdic24/xjdservcomm.c xjdic24/xjdservcomm.c --- xjdic24/xjdservcomm.c 2003-05-28 07:44:32.000000000 +0200 +++ xjdic24/xjdservcomm.c 2009-08-27 11:05:31.000000000 +0200 @@ -41,14 +41,15 @@ unsigned long dbyte; -unsigned char Dnamet[10][100],XJDXnamet[10][100]; +__thread unsigned char Dnamet[10][100],XJDXnamet[10][100]; unsigned char *dicbufft[10],dntemp[100]; unsigned long *jdxbufft[10]; -unsigned long dichits[10],dicmiss[10]; -unsigned long indhits[10],indmiss[10]; -unsigned long vbkills=0; -unsigned long diclent[10], indlent[10],indptrt[10]; -int i,NoDics,CurrDic; +__thread unsigned long dichits[10],dicmiss[10]; +__thread unsigned long indhits[10],indmiss[10]; +__thread unsigned long vbkills=0; +__thread unsigned long diclent[10], indlent[10],indptrt[10]; +extern __thread int i; +__thread int NoDics,CurrDic; int xfilelen; /*====== Prototypes========================================================*/ @@ -97,7 +98,7 @@ int vbo, vbc,ibuff; char *myp; long it2; - extern int DicNum; + extern __thread int DicNum; it2 = it-1; /* indordic=0; @@ -130,7 +131,7 @@ int vbo, vbl,ibuff; long *myp; long it2; - extern int DicNum; + extern __thread int DicNum; /* indordic=1; */ it2 = it*sizeof(long); @@ -160,7 +161,7 @@ { int ibuff,i,iores; long maxu,seekoff; - extern int DicNum; + extern __thread int DicNum; /* printf("getvbuff - DN: %d offp: %d vbo: %ld\n",DicNum,offp,vbo); */ /* find a free buffer, or free the LRU one */ @@ -235,7 +236,7 @@ long testwd[1]; int diclenx; - extern int jiver; + extern __thread int jiver; FILE *fpd,*fopen(); dichits[dn] = 0; @@ -265,7 +266,7 @@ int nodread; /* struct stat *buf; no longer used here */ - extern int jiver; + extern __thread int jiver; FILE *fpd,*fopen(); printf("Loading Dictionary: %d [%s]\n",dn,DicName(dn)); @@ -381,7 +382,7 @@ unsigned char dbchar(unsigned long xit) { - extern int DicNum; + extern __thread int DicNum; return(dicbufft[DicNum][xit]); } @@ -394,7 +395,7 @@ unsigned char dbchar(unsigned long xit) { - extern int DicNum; + extern __thread int DicNum; long it2; it2 = xit-1; @@ -408,7 +409,7 @@ unsigned long jindex(unsigned long xit) { - extern int DicNum; + extern __thread int DicNum; return(jdxbufft[DicNum][xit]); } @@ -422,7 +423,7 @@ { unsigned c1,c2; int i,rc1,rc2; - extern long it; + extern __thread long it; /* effectively does a strnicmp on two "strings" except it will make katakana and hiragana match (EUC A4 & A5) */ diff -Naur xjdic24/xjdserver.c xjdic24/xjdserver.c --- xjdic24/xjdserver.c 2003-05-28 07:58:02.000000000 +0200 +++ xjdic24/xjdserver.c 2009-08-27 11:05:31.000000000 +0200 @@ -28,6 +28,7 @@ #include #include #include +#include #include "xjdic.h" #define SVERBOSE 0 @@ -36,10 +37,10 @@ void DicSet (); unsigned char *DicName(int dn); -int portno=XJ_PORTNO; +__thread int portno=XJ_PORTNO; int DontFork = FALSE; int alen; -char host[51]; +__thread char host[51]; REQ_PDU pdu_in; RSP_PDU pdu_out; @@ -48,22 +49,20 @@ int sock; long lo, hi, itok, lo2, hi2, schix, schiy; -int res, i; -long it; -unsigned char ENVname[50]; -unsigned char cl_rcfile[100]; -int jiver = 14; -int thisdic = 0; -int DicNum; - -extern int errno; - -extern unsigned char Dnamet[10][100],XJDXnamet[10][100]; -extern unsigned char *dicbufft[10]; -extern unsigned long diclent[10], indlent[10],indptrt[10]; -extern int NoDics,CurrDic; +__thread int res, i; +__thread long it; +__thread unsigned char ENVname[50]; +__thread unsigned char cl_rcfile[100]; +__thread int jiver = 14; +__thread int thisdic = 0; +__thread int DicNum; + +extern __thread unsigned char Dnamet[10][100],XJDXnamet[10][100]; +extern __thread unsigned char *dicbufft[10]; +extern __thread unsigned long diclent[10], indlent[10],indptrt[10]; +extern __thread int NoDics,CurrDic; -char DicDir[100]; +__thread char DicDir[100]; int passiveUDP(int portno) { diff -Naur xjdic24/xjdxgen.c xjdic24/xjdxgen.c --- xjdic24/xjdxgen.c 2003-05-28 07:58:29.000000000 +0200 +++ xjdic24/xjdxgen.c 2009-08-27 11:06:19.000000000 +0200 @@ -23,7 +23,7 @@ #include #include -/*#include */ +#include #include #include #include "xjdic.h"