⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main-c.c

📁 huffman coding and decoding adaptive huffman coding and decoding it is a assignment from my cours
💻 C
字号:
/************************* Start of MAIN-C.C *************************//* * This is the driver program used when testing compression algorithms. * In order to cut back on repetitive code, this version of main is * used with all of the compression routines.  It in order to turn into * a real program, it needs to have another module that supplies one * routine and two strings, namely: * *     void CompressFile( FILE *input, BIT_FILE *output, *                        int argc, char *argv ); *     char *Usage; *     char *CompressionName; * * The main() routine supplied here has the job of checking for valid * input and output files, opening them, and then calling the * compression routine.  If the files are not present, or no arguments * are supplied, it prints out an error message, which includes the * Usage string supplied by the compression module.  All of the * routines and strings needed by this routine are defined in the * main.h header file. * * After this is built into a compression program of any sort, the * program can be called like this: * *   main-c infile outfile [ options ] * */#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 *output;    FILE *input;    setbuf( stdout, NULL );    if ( argc < 3 )        usage_exit( argv[ 0 ] );    input = fopen( argv[ 1 ], "rb" );    if ( input == NULL )        fatal_error( "Error opening %s for input\n", argv[ 1 ] );    output = OpenOutputBitFile( argv[ 2 ] );    if ( output == NULL )        fatal_error( "Error opening %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 );}/* * 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#endiflong 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 + -