/*****************************************************************************/ // сжать-разжать словари /*****************************************************************************/ # include # include # include # include # include struct t_Ende { char str[50][50] ; long n ; // число таких шаблонов short index ; char cmp( t_Ende &other, short n_Form ); }; struct t_Ende1 { t_Ende *Mass ; long l_Mass ; long z_first ; } ; char Full[300] ="../dicts/" ; // каталог полных файлов char Reduce[300]="../dictsr/" ; // каталог сокращенных файлов void compress( char *Name, short n_Form, t_Ende1 *EE=NULL ); void express ( char *Name, short n_Form, short LL, char f_shapka=1 ); void split_ru_verb( void ); void merge_ru_verb( void ); void print_ends( FILE *fw, t_Ende *Ende, long j_Ende, long n_Form ); void last_braket( FILE *fr ); int read_cword( FILE *fr, char *Str1, long *index ); int read_cword1( FILE *fr, char *Str1 ); /*****************************************************************************/ int main( int argc, char * argv[] ) { char f=0 ; char Str[500] ; if( argc<2 ) { printf( " используйте следующим образом\n" ); printf( " zcompress <ключ> <каталог полных файлов> <каталог сжатых файлов>\n" ); printf( " значение ключа: c (латинское) - сжать, e - разжать\n" ); printf( " если каталоги полных и сжатых файлов не заданы, то они считаются\n" ); printf( " ../dicts/ и ../dictsr/ соответственно.\n" ); exit(-1); } else f=argv[1][0] ; if( 2Mass=Ende ; EE->l_Mass=j_Ende ; } Free( Mass ); // Ende сознательно не освобождается fclose(fw); } /************************************************************************/ // найти скобку, закрывающую массив шаблонов /************************************************************************/ void last_braket( FILE *fr ) { char Str[100] ; while( 1 ) { if( EOF==fscanf(fr,"%s",&Str) ) return ; if( Str[0]=='}' ) break ; } } /************************************************************************/ int read_cword( FILE *fr, char *Str1, long *index ) { char Str[100] ; if( EOF==fscanf(fr,"%s",&Str) ) return EOF ; strcpy( Str1,Str ); if( EOF==fscanf(fr,"%s",&Str) ) return EOF ; *index=atoi( Str ); if( EOF==fscanf(fr,"%s",&Str) ) return EOF ; if( Str[0]!=';' ) { printf("Error cword"); exit(-1) ; } return 1 ; } /************************************************************************/ int read_cword1( FILE *fr, char *Str1 ) { char Str[100] ; if( EOF==fscanf(fr,"%s",&Str) ) return EOF ; strcpy( Str1,Str ); if( EOF==fscanf(fr,"%s",&Str) ) return EOF ; if( Str[0]!=';' ) { printf("Error cword"); exit(-1) ; } return 1 ; } /************************************************************************/ // Напечатать шаблоны /************************************************************************/ void print_ends( FILE *fw, t_Ende *Ende, long j_Ende, long n_Form ) { long i,i1,i_best,n_best ; for( i=0 ; i