www.pudn.com > 82325543.rar > sim2lib1.c
#include#include #include #include #include #include #include #include #include #define MAX_PHRASE_LEN 8 #define MAX_PY_NUM 420 #define MAX_EACH_PY_NUM 41 #define MAX_EACH_HZ_NUM 945 typedef struct { WORD wKey; TCHAR szPY[8]; } PINYIN,FAR *LPPINYIN; PINYIN aPYTab[26][MAX_EACH_PY_NUM] = {0}; TCHAR aHZTab[MAX_PY_NUM][MAX_EACH_HZ_NUM] = {0}; void LoadHZDictionary( LPTSTR lpStr) { TCHAR szPY[20],szHZ[1000]; static int i=0,j=0,nPre=0; WORD wPYHead=1; LPPINYIN lpPYTab = (LPPINYIN)aPYTab; LPTSTR lpHZTab = (LPTSTR)aHZTab; _stscanf(lpStr,"%s %s",szPY,szHZ); _tcscpy( (lpHZTab+i*MAX_EACH_HZ_NUM),szHZ); wPYHead=(WORD)szPY[0] - (WORD)_T('a'); if(wPYHead != nPre) j=0; _tcscpy( (lpPYTab+wPYHead*MAX_EACH_PY_NUM+j)->szPY,szPY); (lpPYTab+wPYHead*MAX_EACH_PY_NUM+j)->wKey=i+1; nPre=wPYHead; i++,j++; return; } WORD GetSegment(LPTSTR buf) { if(*buf == _T('\0')) return 1; //END_SEGMENT else if(*buf == _T('#')) return 2; //COMMENT else if( _tcsstr(buf,_T("[PUNCTUATION]")) != NULL ) return 3; else if( _tcsstr(buf,_T("[DICTIONARY]")) != NULL) return 4; else return 0; } void GetStr(FILE *pf,LPTSTR pbuf) { while( !feof(pf) ) { *pbuf = _fgettc(pf); if(*pbuf == _T('\n')) break; pbuf++; } *pbuf = _T('\0'); } void LoadTable() { FILE *stream; TCHAR szStr[1000]; TCHAR szTabFileName[200]; LPTSTR lpTabFileName = szTabFileName; lpTabFileName += GetSystemDirectory(szTabFileName,200); if (*(lpTabFileName-1) != _T('\\')) *lpTabFileName++ = _T('\\'); _tcscpy(lpTabFileName,_T("freepy.tab")); if( (stream = _tfopen( szTabFileName, "r" )) == NULL ){ _stprintf(szStr,"%s can not found",szTabFileName); MessageBox(NULL,szStr,"init",MB_OK); exit(1); } while( !feof( stream )) { GetStr(stream,szStr); switch( GetSegment(szStr)) { case 1: //END_SEGMENT break; case 2: //COMMENT break; case 3: //PUNCTUATION if( feof( stream ) ) goto my_exit; GetStr(stream,szStr); while(GetSegment(szStr) != 1) { if( GetSegment(szStr) != 2){ //LoadPunct( szStr ); } if( feof( stream ) ) goto my_exit; GetStr(stream,szStr); } break; case 4: //DICTIONARY if( feof( stream ) ) goto my_exit; GetStr(stream,szStr); while(GetSegment(szStr) != 1) { if( GetSegment(szStr) != 2){ LoadHZDictionary( szStr ); } if( feof( stream ) ) goto my_exit; GetStr(stream,szStr); } break; default: break; } } my_exit: fclose(stream); return; } int sim2lib(LPTSTR lpInName,LPTSTR lpOutName) { FILE *stream,*out; int i,j; TCHAR szStr[250],szTempStr[4]; WORD wLen,wResult; LPTSTR lpDest; BYTE abKey[MAX_PHRASE_LEN+2],bLen; WORD awKey[MAX_PHRASE_LEN]; WORD wCount; if( (stream = _tfopen( lpInName, _T("r") )) == NULL ){ fprintf(stderr,"%s cant open.\n",lpInName); exit(1); } if( (out = _tfopen( lpOutName, _T("wb") )) == NULL ){ fprintf(stderr,"%s cant open.\n",lpOutName); exit(1); } szTempStr[2]=_T('\0'); while( !feof( stream )) { if( _fgetts(szStr,1000,stream)!=NULL){ wLen=_tcslen(szStr)/2; if(wLen > MAX_PHRASE_LEN) continue; for(i=0;i > (8-i); bLen=(BYTE)wLen; fwrite(&bLen,1,1,out); fwrite(&abKey,1,wLen+1,out); fwrite(szStr,1,wLen*2,out); } } fclose(stream); fclose(out); return (0); } void main(int argc,char **argv) { if(argc != 3) { fprintf(stderr,"usage: %s \n",argv[0]); return; } LoadTable(); sim2lib(argv[1],argv[2]); return; }