www.pudn.com > HuffmanForFile.zip > MAIN-C.C


#include  
#include  
#include  
#include "bitio.h" 
#include "errhand.h" 
#include "main.h" 
#include "bitio.c" 
#include "errhand.c" 
#include "lzw15v.c" 
 
 
void usage_exit( char * prog_name ); 
void print_ratios( char * input,char * output ); 
long file_size( char * name ); 
 
 
int main( int argc,char * argv[] ) 
{ 
  BIT_FILE  * output; 
  FILE * input; 
 
  setbuf( stdout,NULL ); 
  if( argc<3 )  usage_exit( argv[0] ); 
  input=fopen( argv[1],"r" ); 
  if( input==NULL ) 
      fatal_error( "Error opening %s for input!\n",argv[1] ); 
  output=OpenOutputBitFile( argv[2] ); 
  if( output==NULL ) 
      fatal_error( "Error oprning %s for output!\n",argv[2] ); 
  printf( "\nCompressing %s to %s\n",argv[1],argv[2] ); 
  printf( "Using %s\n",CompressionName ); 
  CompressFile( input,output,argc-3,argv+3 ); 
  CloseOutputBitFile( output ); 
  fclose( input ); 
  print_ratios( argv[1],argv[2] ); 
  return( 0 ); 
} 
 
void usage_exit( char * prog_name ) 
{ 
  char * short_name; 
  char * extension; 
 
  short_name=strrchr( prog_name,'\\' ); 
  if( short_name==NULL ) 
      short_name=strrchr( prog_name,'/' ); 
  if( short_name==NULL ) 
      short_name=strrchr( prog_name,'.' ); 
  if( short_name!=NULL ) 
      short_name++; 
  else 
      short_name=prog_name; 
  extension=strrchr( short_name,'.' ); 
  if( extension!=NULL ) 
      * extension='\0'; 
  printf( "\nUsage: %s %s\n",short_name,Usage ); 
  exit( 0 ); 
} 
 
#ifndef SEEK_END 
#define SEEK_END 2 
#endif 
 
long file_size( char * name ) 
{ 
  long eof_ftell; 
  FILE * file; 
 
  file=fopen( name,"r" ); 
  if( file==NULL ) 
      return( 0l ); 
  fseek( file,0l,SEEK_END ); 
  eof_ftell=ftell( file ); 
  fclose( file ); 
  return( eof_ftell ); 
} 
 
void print_ratios( char * input,char * output ) 
{ 
  long input_size; 
  long output_size; 
  int ratio; 
 
  input_size=file_size( input ); 
  if( input_size==0 ) 
      input_size=1; 
  output_size=file_size( output ); 
  ratio=100-( int )( output_size * 100l/input_size ); 
  printf( "\nInput bytes:   %ld\n",input_size ); 
  printf( "Output bytes:   %ld\n",output_size ); 
  if( output_size==0 ) 
      output_size=1; 
  printf( "Compression ratio: %d%%\n",ratio ); 
}