📄 main-e.c
字号:
/************************* Start of MAIN-E.C *************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "bitio.h"#include "errhand.h"#include "main.h"#ifdef __STDC__void usage_exit( char *prog_name );void print_ratios( char *input, char *output );long file_size( char *name );#elsevoid usage_exit();void print_ratios();long file_size();#endifint main( argc, argv )int argc;char *argv[];{ BIT_FILE *input; FILE *output;
setbuf( stdout, NULL );
if ( argc < 3 ) usage_exit( argv[ 0 ] ); input = OpenInputBitFile( argv[ 1 ] ); if ( input == NULL ) fatal_error( "Error opening %s for input\n", argv[ 1 ] ); output = fopen( argv[ 2 ], "wb" ); if ( output == NULL ) fatal_error( "Error opening %s for output\n", argv[ 2 ] ); printf( "\nDecompressing %s to %s\n", argv[ 1 ], argv[ 2 ] ); printf( "Using %s\n", CompressionName );f ExpandFile( input, output, argc - 3, argv + 3 ); printf("\n"); CloseInputBitFile( input ); fclose( output );
print_ratios( argv[ 1 ], argv[ 2 ] ); return( 0 );}/* * This routine just wants to print out the usage message that is * called for when the program is run with no parameters. The first * part of the Usage statement is supposed to be just the program * name. argv[ 0 ] generally holds the fully qualified path name * of the program being run. I make a half-hearted attempt to strip * out that path info and file extension before printing it. It should * get the general idea across. */void usage_exit( prog_name )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 );}
/*
* This routine is used by main to print out get the size of a file after
* it has been closed. It does all the work, and returns a long. The
* main program gets the file size for the plain text, and the size of
* the compressed file, and prints the ratio.
*/
#ifndef SEEK_END
#define SEEK_END 2
#endif
long file_size( name )
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 );
}
/*
* This routine prints out the compression ratios after the input
* and output files have been closed.
*/
void print_ratios( input, output )
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 );
}/************************** End of MAIN-C.C **************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -