ChLibarry.cpp
上传用户:hyb6888
上传日期:2016-01-24
资源大小:5186k
文件大小:17k
- // loadmylib.cpp: implementation of the loadmylib class.
- //
- //////////////////////////////////////////////////////////////////////
- #include "stdafx.h"
- #include "ChLibarry.h"
- #include "stdio.h"
- //////////////////////////////////////////////////////////////////////
- // Construction/Destruction
- //////////////////////////////////////////////////////////////////////
- ChLibarry::ChLibarry()
- {
- LIBHead=NULL;
- Base=0;
- GoldeNum=0; //单个的编码
- GoldeLen=0;
- LibName[0]=0;
- hMapFile = NULL;
- lpMapFileBase = NULL;
- }
- ChLibarry::~ChLibarry()
- {
- if(lpMapFileBase!=NULL)
- UnmapViewOfFile(lpMapFileBase);
- if(hMapFile!=NULL)
- CloseHandle(hMapFile);
- return ;
- }
- //
- long ChLibarry::reloadmylib()
- {
- HANDLE hfile;
- if(lpMapFileBase!=NULL)
- {
- UnmapViewOfFile(lpMapFileBase);
- lpMapFileBase=NULL;
- }
- if(hMapFile!=NULL)
- {
- CloseHandle(hMapFile);
- hMapFile=NULL;
- }
- if(strlen(LibName)==0)
- return -1;
- if(hMapFile==NULL||lpMapFileBase==NULL)
- {
- hfile=CreateFile(LibName,
- GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE|FILE_SHARE_READ ,NULL,
- OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
- if(hfile==INVALID_HANDLE_VALUE){
- //MessageBox(0,"函数打开文件失败","错误",0);
- return -2;
- }
- if ( (hMapFile=CreateFileMapping(hfile,NULL,PAGE_READWRITE,0,0,"temfile0")) == NULL)
- {
- //MessageBox(NULL,"建立映像文件失败",LibName,MB_OK);
- return -3;
- }
- if ( (lpMapFileBase = (LPVOID) MapViewOfFile( hMapFile, FILE_MAP_ALL_ACCESS,0,0,0)) == NULL)
- {
- //MessageBox(NULL,"打开现有映像视图失败",LibName,MB_OK);
- return -4;
- }
- LIBHead=(char*)lpMapFileBase;
- Headlon =(long*)&LIBHead[0];
- IndexNum =(long*)&LIBHead[4];
- NullIndex =(long*)&LIBHead[8];
- CLIB_Start =(long*)&LIBHead[12];
- CLIB_lon =(long*)&LIBHead[16];
- ExCodeStart=(long*)&LIBHead[20];
- ExCdlon =(long*)&LIBHead[24];
- FileLong =(long*)&LIBHead[28];
- LIBIndex =(long*)&LIBHead[*Headlon]; //读入索引
- CLIB_EnCh=(char*)&LIBHead[*CLIB_Start];
- ExCdLIB =(char*)&LIBHead[*ExCodeStart];
- {
- char ss[1000];
- sprintf(ss,"Headlon%dnHeadlon%dn",Headlon,IndexNum);
- //MessageBox(0,ss,inputLibName,0);
- }
- CloseHandle(hfile);
- }
- return 0;
- }
- ChLibarry::Unloadmylib()
- {
- if(lpMapFileBase!=NULL)
- {
- UnmapViewOfFile(lpMapFileBase);
- lpMapFileBase=NULL;
- }
- if(hMapFile!=NULL)
- {
- CloseHandle(hMapFile);
- hMapFile=NULL;
- }
- }
- ////////////////////////////////////////////////////////////////
- // 装汉字码表库
- //外部条件:1、需要CLIBnum、CLIBlong变量。
- // 2、需要CL、LP、CLIB数组
- //返回0才是成功
- //装载编码库到内存中
- int ChLibarry::loadChiLib(char *inputLibName,long Locbase, long LocGoldeNum, long LocGoldeLen)
- {
- HANDLE hfile;
- Base=Locbase;
- GoldeLen=LocGoldeLen;
- GoldeNum=LocGoldeNum;
- strcpy(LibName,inputLibName);
- if(strlen(LibName)==0)
- return -1;
- if(hMapFile==NULL||lpMapFileBase==NULL)
- {
- hfile=CreateFile(LibName,
- GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE|FILE_SHARE_READ ,NULL,
- OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
- if(hfile==INVALID_HANDLE_VALUE){
- //MessageBox(0,"函数打开文件失败","错误",0);
- return -2;
- }
- if ( (hMapFile=CreateFileMapping(hfile,NULL,PAGE_READWRITE,0,0,"temfile0")) == NULL)
- {
- //MessageBox(NULL,"建立映像文件失败",LibName,MB_OK);
- return -3;
- }
- if ( (lpMapFileBase = (LPVOID) MapViewOfFile( hMapFile, FILE_MAP_ALL_ACCESS,0,0,0)) == NULL)
- {
- //MessageBox(NULL,"打开现有映像视图失败",LibName,MB_OK);
- return -4;
- }
- LIBHead=(char*)lpMapFileBase;
- Headlon =(long*)&LIBHead[0];
- IndexNum =(long*)&LIBHead[4];
- NullIndex =(long*)&LIBHead[8];
- CLIB_Start =(long*)&LIBHead[12];
- CLIB_lon =(long*)&LIBHead[16];
- ExCodeStart=(long*)&LIBHead[20];
- ExCdlon =(long*)&LIBHead[24];
- FileLong =(long*)&LIBHead[28];
- LIBIndex =(long*)&LIBHead[*Headlon]; //读入索引
- CLIB_EnCh=(char*)&LIBHead[*CLIB_Start];
- ExCdLIB =(char*)&LIBHead[*ExCodeStart];
- {
- char ss[1000];
- sprintf(ss,"Headlon%dnHeadlon%dn",Headlon,IndexNum);
- //MessageBox(0,ss,inputLibName,0);
- }
- CloseHandle(hfile);
- }
- return 0;
- }
- bool ChLibarry::isWBcode(char *inputEn)
- {
- bool ret=1;
- long low=0,hight,mid;
- char temss[100];
- &ExCdLIB[0];
- hight=(*ExCdlon)/5-1;
- strcpy(temss,inputEn);
- temss[4]=0;
- strupr(temss);
- while(hight>=low)
- {
- mid=low+(hight-low)/2;
- if(strcmp(&ExCdLIB[mid*5],temss)==0)
- {
- ret=0;
- break;
- }
- else
- {
- if(strcmp(&ExCdLIB[mid*5],temss)>0)
- hight=mid-1;
- else
- low=mid+1;
- }
- }
- return ret;
- }
- //////////////////////////////////////////////////////////////
- // 外部条件:1、需要LP,CLIB数据
- //
- // 返回第一字的位置
- char *ChLibarry::EntoCh(char*Enss)
- {
- long index=0;
- char* pchi;
- Midtems[0]=0;
- //char ss[1000];
- char kk[5000];
- // 汉字库的结构为:每个字串以空0结束,以13作为间隔符.
- if(Enss[0]==0)
- {
- Midtems[0]=0;;
- FirstChiNum=-1;
- }
- else
- {
- FirstChiNum=GetChss(Enss,kk);//第一个汉字的位置
- /* findNextChiAndID(Enss,ss);
- if(kk[0]==0)
- sprintf(Midtems,"%s;",ss);
- else
- sprintf(Midtems,"%s",kk);
- */
- sprintf(Midtems,"%s",kk);
- }
- pchi=Midtems;
- return pchi;
- }
- //////////////////////////////////////////////////////////////
- // 根据编码得出,查表得出对应汉字串
- // 外部条件:1、需要CLIB_EnCh,LIBIndex数据
- //
- // 返回地址表中位置
- long ChLibarry::GetChss(char *enss,char *ss)
- {
- long lpp=-1;
- long pp,len;
- char *lch;
- pp=GetIndex(enss);
- if(pp==-1)
- pp=findNextID(enss);
- if(pp>-1)
- {
- lch=&CLIB_EnCh[LIBIndex[pp]];
- len=strlen(lch);
- lch+=len+1;
- strcpy(ss,lch);
- }
- else
- ss[0]=0;
- return pp;
- }
- //根据指定的ID值,取出编码及汉字串
- ///返回为-1说明有错误发生
- long ChLibarry::GetChss(long ID,char *ss1,char *ss2,char *EE)
- {
- long len,ret=0;
- char *lch=NULL;
- if(ID>-1)
- {
- lch=&CLIB_EnCh[LIBIndex[ID]];
- strcpy(EE,lch);
- len=strlen(lch);
- lch+=len+1;
- strcpy(ss1,lch);
- len=strlen(lch);
- lch+=len+1;
- strcpy(ss2,lch);
- }
- else
- {
- ss1[0]=0;
- ss2[0]=0;
- EE[0]=0;
- ret=-1;
- }
- return ret;
- }
- //由编码查找下一个有效位置
- //编码可能是一个无效编码没有下一个。
- //nextindex为在库中下顺序号,要由它得到汉字串还必须由它查地址码,再到汉字库中取汉字串
- //Cdindex编码索引值
- long ChLibarry::findNextChiAndID(char *Enss,char *Nextchiss)
- {
- long Cdindex=0;
- long Low=0, High=*IndexNum-1;
- long ret=-1,mid=0,temmid=-1,len;
- char ss[100],*p;
- Nextchiss[0]=0;
- //返回为-1表示失败
- //二分法查找
- strcpy(ss,Enss);
- strupr(ss);
- if ((strcmp(ss,&CLIB_EnCh[LIBIndex[Low]])>=0) && (strcmp(ss,&CLIB_EnCh[LIBIndex[High]])<0))
- {
- while( (High-Low)>-1 && temmid==-1)
- {
- mid=Low+(High-Low)/2;
- if(strcmp(ss,&CLIB_EnCh[LIBIndex[mid]])==0)
- temmid=mid;
- else
- if(strcmp(ss,&CLIB_EnCh[LIBIndex[mid]])>0)
- Low=mid+1;
- else
- High=mid-1;
- }
- ret=mid;
-
- if(strcmp(ss,&CLIB_EnCh[LIBIndex[ret]])>=0)//midindex停留在下一个的前面
- ret++;
- //if(temmid==-1)//仅当出现无效编码时当提示。
- {
- p=&CLIB_EnCh[LIBIndex[ret]];
- strcpy(Nextchiss,p);
- len=strlen(p);
- p+=len;
- strcat(Nextchiss,p);
- strlwr(Nextchiss);
- }
- }
-
- return ret;
- }
- long ChLibarry::findNextID(char *Enss)
- {
- long Cdindex=0;
- long Low=0, High=*IndexNum-1;
- long ret=-1,mid=0,temmid=-1;
- char ss[100];
- //返回为-1表示失败
- //二分法查找
- strcpy(ss,Enss);
- strupr(ss);
- if ((strcmp(ss,&CLIB_EnCh[LIBIndex[Low]])>=0) && (strcmp(ss,&CLIB_EnCh[LIBIndex[High]])<0))
- {
- while( (High-Low)>-1 && temmid==-1)
- {
- mid=Low+(High-Low)/2;
- if(strcmp(ss,&CLIB_EnCh[LIBIndex[mid]])==0)
- temmid=mid;
- else
- if(strcmp(ss,&CLIB_EnCh[LIBIndex[mid]])>0)
- Low=mid+1;
- else
- High=mid-1;
- }
- ret=mid;
-
- if(strcmp(ss,&CLIB_EnCh[LIBIndex[ret]])>=0)//midindex停留在下一个的前面
- ret++;
- //if(temmid==-1)//仅当出现无效编码时当提示。
- }
- return ret;
- }
- //根据指定的ID值,得到其汉字串的长度
- long ChLibarry::GetChlen(long ID)
- {
- long ret=0;
- char *p;
- p=&CLIB_EnCh[LIBIndex[ID]];
- p+=strlen(p);
- ret=strlen(p);
- return ret;
- }
- ///////////////////////////////////////////////////////////////////
- //private
- //由英文得到索引。
- /////////////////////////////////////////////
- // 由英文编码得到汉字索引值
- // 完全相同则得到完全相同者,
- // 没有完全相同的则得到最相近的后续者
- //返回为-1空说明未找到有效字符
- long ChLibarry::GetIndex(char *En)
- {
- //返回为-1表示失败
- //二分法查找
- long L1=0, L2=*IndexNum-1;
- long ret=-1,i=0;
- char temss[5000];
- //char tem[100];
- strcpy(temss,En);
- strupr(temss); //将代码变成大写,
- while( (L2-L1)>-1 && ret==-1)
- {
- i=L1+(L2-L1)/2;
- //sprintf(tem,"%s %s %s n%s %d %d %d",&CLIB_En[CL[L1]],&CLIB_En[CL[i]],&CLIB_En[CL[L2]],temss,strcmp(&CLIB_En[CL[i]],temss),L1,L2);
- //MessageBox(0,tem,0,0);
- if(strcmp(&CLIB_EnCh[LIBIndex[i]],temss)==0)
- {
- ret=i;
- break;
- }
- else
- if(strcmp(&CLIB_EnCh[LIBIndex[i]],temss)<0)
- L1=i+1;
- else
- L2=i-1;
- }
-
- return ret;
- }
- //chi中基本区在前,扩展区在后,最后跟一个0作为结束
- long ChLibarry::GetIndex(char *En,char *chi)
- {
- //返回为-1表示失败
- //二分法查找
- long L1=0, L2=*IndexNum-1,len=0;
- long ret=-1,i=0;
- char temss[100],*cp,*tp,*tt;
- //char tem[100];
- tp=&CLIB_EnCh[LIBIndex[5644]];
- strcpy(temss,En);
- strupr(temss); //将代码变成大写,
- while( (L2-L1)>-1 && ret==-1)
- {
- i=L1+(L2-L1)/2;
- //sprintf(tem,"%s %s %s n%s %d %d %d",&CLIB_En[CL[L1]],&CLIB_En[CL[i]],&CLIB_En[CL[L2]],temss,strcmp(&CLIB_En[CL[i]],temss),L1,L2);
- //MessageBox(0,tem,0,0);
- tt=&CLIB_EnCh[LIBIndex[i]];
- if(strcmp(&CLIB_EnCh[LIBIndex[i]],temss)==0)
- {
- ret=i;
- break;
- }
- else
- if(strcmp(&CLIB_EnCh[LIBIndex[i]],temss)<0)
- L1=i+1;
- else
- L2=i-1;
- }
- if(ret>-1)
- {
- cp=&CLIB_EnCh[LIBIndex[ret]];
- cp+=strlen(cp)+1;
- strcpy(chi,cp); //基本区
- len=strlen(cp)+1;
- cp+=len;
- chi+=len;
- strcpy(chi,cp); //扩展区
- chi[strlen(cp)+1]=0;
- }
-
- return ret;
- }
- //求指定方次
- unsigned long ChLibarry::Sqrt(long num, int p)
- {
- int i;
- unsigned long ret=1;
- for(i=0;i<p;i++)
- {
- ret=ret*num;
- }
- return ret;
- }
- /////////////////////////////////////////////////////////
- ///////////////////////////////////////////////////////
- // 库中使用的函数
- ///////////////////////////////////////////////////////
- //把一个新词插入汉字库中
- //tag 为1表示在基本区中插入,2表示在扩展区中插入.
- long ChLibarry::insertID(char *En,char *chi,int tag)
- {
- long LID,len,nexindexvar;
- char *pcEx=NULL,*pcBs=NULL,*pc=NULL,ss[2000],ss1[2000];
-
- //strcpy(En,"d");
- //strcpy(chi,"王0");
- LID=GetIndex(En,ss);//SS中基本区在前,扩展区在后,最后跟一个0作为结束
- if(LID>-1)
- {
- if(FindSameWord(ss,chi,tag)==1)
- return 1;
- len=GetSpaceLon(LID,&pcBs,&pcEx);//得到当前ID后的空闲区域长度,pcfree返回,扩展区
- if(len>(long)strlen(chi))
- {
- if(tag==1)//基本区
- {
- if(*pcBs==0)//基本区为空
- {
- strcpy(ss1,pcEx);
- strcpy(pcBs,chi);
- pcEx=pcBs+strlen(pcBs)+1;//重新修定扩展区位置
- strcpy(pcEx,ss);
- }
- else
- {
- strcpy(ss,pcBs);
- strcpy(ss1,pcEx);
- sprintf(pcBs,"%s;%s",chi,ss);
- pcEx=pcBs+strlen(pcBs)+1;//重新修定扩展区位置
- strcpy(pcEx,ss);
- }
- }
- ///////////////////////////////////////////
- if(tag==2)//扩展区
- {
- if(*pcEx==0)//基本区为空
- {
- strcpy(pcEx,chi);
- }
- else
- {
- strcpy(ss,pcEx);
- sprintf(pcEx,"%s;%s",chi,ss);
- }
- }
- }
- else//空闲区域长度不足
- {
- if(tag==1)//基本区
- {
- if(*pcBs!=0)
- sprintf(ss,"%s;%s",chi,pcBs);
- else
- sprintf(ss,"%s",chi);
- strcpy(ss1,pcEx);
- strupr(En);
- nexindexvar=insertNewtoEnd(En,ss,ss1);
- DeleteSpace(LID);
- LIBIndex[LID]=nexindexvar;
- }
- //////////////////////////////////////
- if(tag==2)///
- {
- if(*pcEx!=0)
- sprintf(ss1,"%s;%s",chi,pcEx);
- else
- sprintf(ss1,"%s",chi);
- strcpy(ss,pcBs);
- strupr(En);
- nexindexvar=insertNewtoEnd(En,ss,ss1);
- DeleteSpace(LID);
- LIBIndex[LID]=nexindexvar;
- }
- }
- }
- else//没有找到
- {
-
- strupr(En);
- //生成新的数据,把数据写到文件尾部;
-
- if(tag==1)
- nexindexvar=insertNewtoEnd(En,chi,"");
- ////////////////////////////////////////
- if(tag==2)
- nexindexvar=insertNewtoEnd(En,"",chi);
- if(*NullIndex<=0)//先检查是否有空索引,有则插入
- {
- MessageBox(0,"已没有空索引了","新词插入",0);
- //需要移动数据4K
- }
- insertNewIndex(En,nexindexvar);//在索引中插入新的索引
- }
- return 0;
- }
- //返回为1表示有相同的,
- //SS中基本区在前,扩展区在后,最后跟一个0作为结束.
- //tag 为0表示在所有区域中查找
- //tag 为1表示在基本区中查找
- //tag 为2表示在扩展区中查找
- //
- long ChLibarry::FindSameWord(char* ss,char *chi,int tag)
- {
- char *cp,temss[1000];
- int i,len1,len2;
- long ret=0;
- len1=strlen(ss);
- len2=strlen(chi);
- if(tag<2)
- cp=ss;
- if(tag==2)
- cp=&ss[len1+1];
- //MessageBox(0,cp,chi,0);
- while(*cp!=0)
- {
- //---------------------------
- //取一个词
- i=0;
- while(*cp!=0)
- {
- if(*cp==';'||*cp==0)
- break;
- temss[i]=*cp;
- i++;
- cp++;
- }
- temss[i]=0;
- //取词后CP停在字符串的后面。
- //---------------------------
- //MessageBox(0,temss,"FindSameWord",0);
- if(strcmp(temss,chi)==0)//判断取的词是否相同
- {
- ret=1;
- break;
- }
- if(*cp!=0 && tag>0)
- break;
- cp++;//指向下一个词
- }
- return ret;
- }
- ////////////////////////////////////////////
- //
- //在索引中插入新索引
- long ChLibarry::insertNewIndex(char *En,long nexindexvar)
- {
- long ID,i;
- ID=findNextID(En);
- if(ID>-1)
- {
- for(i=(*IndexNum)-1;i>=ID;i--)
- {
- LIBIndex[i+1]=LIBIndex[i];
- }
- LIBIndex[i+1]=nexindexvar; //设置新值
- (*NullIndex)--;
- (*IndexNum)++;
- }
- else
- {
- MessageBox(0,"insertNewIndex","插入失败",0);
- }
- return 0;
- }
- //
- //返回值为生成词相对于CLIB_Start的位置
- long ChLibarry::insertNewtoEnd(char *En,char *pcBs,char *pcEx)
- {
- long ret=0,lenEn,lenBs,lenEx;
- char *cp,ss[3000];
- HANDLE hfile;
- DWORD retbyteNum;
- hfile=CreateFile(LibName,
- GENERIC_READ|GENERIC_WRITE,FILE_SHARE_WRITE|FILE_SHARE_READ ,NULL,
- OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);
- if(hfile==INVALID_HANDLE_VALUE){
- //MessageBox(0,"函数打开文件失败","错误",0);
- return -2;
- }
- lenBs=strlen(pcBs);
- lenEx=strlen(pcEx);
- lenEn=strlen(En);
- Unloadmylib();//卸下文件
- //在尾部生成结点
- cp=ss;
- strcpy(cp,En);
- cp+=lenEn+1;
- strcpy(cp,pcBs);
- cp+=lenBs+1;
- strcpy(cp,pcEx);
- SetFilePointer(hfile,0,0,FILE_END);
- WriteFile(hfile,&ss,lenEn+lenBs+lenEx+3,&retbyteNum,0); // headlon;
- //MessageBox(0,0,"insertNewtoEnd",0);
- CloseHandle(hfile);
- reloadmylib(); //重新装载修改后的文件
- ret=*FileLong-*CLIB_Start;
- *FileLong+=lenEn+lenBs+lenEx+3; // 修正文件长度
- return ret;
- }
- //将指定索引清空
- long ChLibarry::DeleteSpace(long LID)
- {
- long ret=0;
- char *cp;
- cp=&CLIB_EnCh[LIBIndex[LID]];
-
- while(*cp!=0)
- {
- *cp=' ';
- cp++;
- }
- *cp=' ';
- cp++;
- while(*cp!=0)
- {
- *cp=' ';
- cp++;
- }
- ////////////////////////
- *cp=' ';
- cp++;
- while(*cp!=0)
- {
- *cp=' ';
- cp++;
- }
- return ret;
- }
- //测试空区域的长度,本结点后面有多少空闲区域
- //pcfree返回,扩展区
- long ChLibarry::GetSpaceLon(long LID,char **pcBs,char **pcEx)
- {
- long ret=0,len;
- char *pc,*temfree;
- pc=&CLIB_EnCh[LIBIndex[LID]];
- pc+=strlen(pc)+1;//越过英文
- *pcBs=pc;
- pc+=strlen(pc)+1;//越过基本区
- *pcEx=pc;
- temfree=pc;
- temfree+=strlen(pc)+1;//越过扩展区
- if(*temfree==' ')
- {
- len=0;
- while(*temfree==' ')
- {
- len+=strlen(temfree)+1;
- temfree+=len;
- }
- ret=len;
- }
- else
- {
- ret=0;
- }
- return ret;
- }
- ////////////////////////////////////////////////////////
- //从汉字库中删除指定的汉字串
- //
- ChLibarry::deleteID(char *En,char *Chi,int tag)//删除指定的汉字串
- {
- char tem[1000],*pc;
- long LID;
- LID=GetIndex(En);
- if(LID>-1) //查找英文编码,并把找到的英文对应的汉字串填写在tem中
- {
- pc=&CLIB_EnCh[LIBIndex[LID]];
- pc+=strlen(pc)+1; //越过编码区
- if(deletestr(pc,Chi,tag)>0) //检查并删除指定的汉字串,并返回删除数
- {
- if(tem[0]=0) //说明本索引已为空了
- {
- IndexNum--;
- LIBIndex[LID]=-1; // 设计指针为-1等扫描程序进行删除。
- }
- }
-
- }
- }
- //PC中的数据是两个字符串,基本汉字在前,扩展汉字在后
- //根据标志和指定的汉字串在PC中的相应区域删除相同的串
- //返回值0表示PC中已为空.
- long ChLibarry::deletestr(char *pc,char *Chi,int tag)
- {
- return 0;
- }
- ///////////////////////////////////////////////////////
- //扫描索引,查看是否有空的索引值,并删除掉
- //
- ChLibarry::ScanID()
- {
- int i,t=0;
- for(i=0;i<*IndexNum;i++)
- {
- if(LIBIndex[i]!=-1)
- LIBIndex[t]=LIBIndex[i];
- }
- }
- //////////////////////////////////////////////////////////
- //功能:对正确进行选择的操作排序
- //运行条件:1、能正确选择(在词内),2、选择必须大于0
- ChLibarry::MySort(long CurID ,int n, char *sle)
- {
- int lon;
- char sc[2000],ss[2000],*chi,*p=0;
- if(CurID!=-1 && strlen(sle)>0)
- {
- chi=&CLIB_EnCh[LIBIndex[CurID]];
- lon=strlen(chi);
- chi+=lon+1;
- lon=strlen(chi);
- if(ss!=NULL && sc!=NULL )
- {
- sprintf(sc,"%s;",chi);
- sprintf(ss,"%s;",sle);
- p=strstr(sc,ss);
- //sprintf(tem,"%s %s %s",chi,sle,p);
- //MessageBox(0,tem,chi,0);
- if(p!=NULL&&p!=&sc[0])
- {
- p--;*p=0;p++;
- p+=strlen(sle)+1;
- sprintf(ss,"%s;%s;%s",sle,sc,p);
- ss[lon]=0;
- strcpy(chi,ss);
- }
- else
- {
- ///sprintf(ss,"%s %s",sc,sle);
- //MessageBox(0,ss," ",0);
- }
- }
- }
- return 0;
- }