/***************************************************************************/ // "Меркурий"-"Правда" - open source переводчик // распространяется в соответсвии с лицензией GNU v 2.0 // // "Человеческий" словарь (ядро) // Анисимов Д.В. сегодня /***************************************************************************/ # include # include # include # include # include # include # include "mylib.h" # include "slowo.h" # define uchar unsigned char //char **Files ; //short n_Files ; static uchar *SC, SC1[256], // сортировка по-русски SC2[256] ;// сортировка по-европейски char StrWord[40],StrTrans[40]; char *StrAnswer=NULL ; long l_StrAnswer=0 ; # define is_divider(SS) (0==strncmp( SS,Divider,l_Divider )) short my_strncmp( char *Str1, char *Str2, short L ); void SC_init( void ); /***************************************************************************/ t_Slowo :: t_Slowo( void ) { sy_Word = NULL ; f_disk = 0 ; Paragraf = NULL ; n_sy_Word = 0 ; n_Paragraf = 0 ; NameFile[0]= 0 ; i_Paragraf =-1 ; Buf = NULL ; l_Buf = 0; strcpy( Divider,"=" ); l_Divider=strlen( Divider ); } /***************************************************************************/ // прочесть словарь из файла и построить все его структуры // /***************************************************************************/ char t_Slowo :: make( char *File ) { FILE *fr ; size_t k,k1 ; long i,i1,ii,j,j1 ; char f1=0,f2=0 ; char *m,Name[200] ; try { SC_init(); fr=Fopen( File,"rb" ); if( Buf !=NULL ) Free(Buf); if( sy_Word !=NULL ) Free(sy_Word); if( Paragraf!=NULL ) Free(Paragraf); Buf=m=(char *)Calloc( 4000,sizeof(char) ); n_sy_Word=1 ; while( 1 ) { k=fread( m,1,2000,fr ); for( i=0 ; i4000 ) { Free(Buf); Buf =(char *)Calloc( k,sizeof(char) ); } k1=0 ; for( i=1 ; il_StrAnswer ) { if( StrAnswer!=NULL ) free( StrAnswer ); StrAnswer =(char *)Calloc( k1,sizeof(char) ); l_StrAnswer =k1 ; } return 0 ; } catch( int E ) { return -1 ; } } /***************************************************************************/ // найти индекс строки, в которой есть слово, максимально похожее на Str // /***************************************************************************/ long t_Slowo :: find( char *_Str ) { long b,e,i,i1,i2,L ; long w,i_Save,i_Ret=-1 ; char Str2[80] ; b=0 ; e=n_Paragraf ; i_Save=i_Paragraf ; while( 1 ) { if( e-b<=1 ) break ; i=(b+e)/2 ; if( 0') ) StrAnswer[j++]='\n' ; StrAnswer[j++]=Str[i] ; if( Str[i]==';' ) StrAnswer[j++]='\n' ; } StrAnswer[j]=0 ; } for( B=i=0 ; i