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

📄 sample.c

📁 LZSS 压缩/解压算法 算法简单
💻 C
字号:
/****************************************************************************                     Sample Program Using LZSS Library**   File    : sample.c*   Purpose : Demonstrate usage of LZSS library*   Author  : Michael Dipperstein*   Date    : February 21, 2004******************************************************************************   UPDATES**   Revision 1.1  2004/02/22 17:36:30  michael*   Initial revision.  Mostly code form old lzss.c.**   11/07/04	Name changed to sample.c**   $Id: sample.c,v 1.3 2004/11/13 22:51:01 michael Exp $*   $Log: sample.c,v $*   Revision 1.3  2004/11/13 22:51:01  michael*   Provide distinct names for by file and by name functions and add some*   comments to make their usage clearer.**   Revision 1.2  2004/11/11 14:37:26  michael*   Open input and output files as binary.**   Revision 1.1  2004/11/08 05:54:18  michael*   1. Split encode and decode routines for smarter linking*   2. Renamed lzsample.c sample.c to match my other samples*   3. Makefile now builds code as libraries for better LGPL compliance.******************************************************************************** SAMPLE: Sample usage of LZSS Library* Copyright (C) 2004 by Michael Dipperstein (mdipper@cs.ucsb.edu)** This library is free software; you can redistribute it and/or* modify it under the terms of the GNU Lesser General Public* License as published by the Free Software Foundation; either* version 2.1 of the License, or (at your option) any later version.** This library is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU* Lesser General Public License for more details.** You should have received a copy of the GNU Lesser General Public* License along with this library; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA****************************************************************************//****************************************************************************                             INCLUDED FILES***************************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include "lzss.h"#include "getopt.h"/****************************************************************************                            TYPE DEFINITIONS***************************************************************************/typedef enum{    ENCODE,    DECODE} MODES;/****************************************************************************                                CONSTANTS***************************************************************************/char *RemovePath(char *fullPath);/****************************************************************************                            GLOBAL VARIABLES***************************************************************************//****************************************************************************                               PROTOTYPES***************************************************************************//****************************************************************************                                FUNCTIONS***************************************************************************//*****************************************************************************   Function   : main*   Description: This is the main function for this program, it validates*                the command line input and, if valid, it will either*                encode a file using the LZSS algorithm or decode a*                file encoded with the LZSS algorithm.*   Parameters : argc - number of parameters*                argv - parameter list*   Effects    : Encodes/Decodes input file*   Returned   : EXIT_SUCCESS for success, otherwise EXIT_FAILURE.****************************************************************************/int main(int argc, char *argv[]){    int opt;    FILE *fpIn, *fpOut;      /* pointer to open input & output files */    MODES mode;    /* initialize data */    fpIn = NULL;    fpOut = NULL;    mode = ENCODE;    /* parse command line */    while ((opt = getopt(argc, argv, "cdtni:o:h?")) != -1)    {        switch(opt)        {            case 'c':       /* compression mode */                mode = ENCODE;                break;            case 'd':       /* decompression mode */                mode = DECODE;                break;            case 'i':       /* input file name */                if (fpIn != NULL)                {                    fprintf(stderr, "Multiple input files not allowed.\n");                    fclose(fpIn);                    if (fpOut != NULL)                    {                        fclose(fpOut);                    }                    exit(EXIT_FAILURE);                }                /* open input file as binary */                fpIn = fopen(optarg, "rb");                if (fpIn == NULL)                {                    perror("Opening input file");                    if (fpOut != NULL)                    {                        fclose(fpOut);                    }                    exit(EXIT_FAILURE);                }                break;            case 'o':       /* output file name */                if (fpOut != NULL)                {                    fprintf(stderr, "Multiple output files not allowed.\n");                    fclose(fpOut);                    if (fpIn != NULL)                    {                        fclose(fpIn);                    }                    exit(EXIT_FAILURE);                }                /* open output file as binary */                fpOut = fopen(optarg, "wb");                if (fpOut == NULL)                {                    perror("Opening output file");                    if (fpIn != NULL)                    {                        fclose(fpIn);                    }                    exit(EXIT_FAILURE);                }                break;            case 'h':            case '?':                printf("Usage: %s <options>\n\n", RemovePath(argv[0]));                printf("options:\n");                printf("  -c : Encode input file to output file.\n");                printf("  -d : Decode input file to output file.\n");                printf("  -i <filename> : Name of input file.\n");                printf("  -o <filename> : Name of output file.\n");                printf("  -h | ?  : Print out command line options.\n\n");                printf("Default: %s -c -i stdin -o stdout\n",                    RemovePath(argv[0]));                return(EXIT_SUCCESS);        }    }    /* use stdin/out if no files are provided */    if (fpIn == NULL)    {        fpIn = stdin;    }    if (fpOut == NULL)    {        fpOut = stdout;    }    /* we have valid parameters encode or decode */    if (mode == ENCODE)    {        EncodeLZSSByFile(fpIn, fpOut);    }    else    {        DecodeLZSSByFile(fpIn, fpOut);    }    /* remember to close files */    fclose(fpIn);    fclose(fpOut);    return EXIT_SUCCESS;}/****************************************************************************   Function   : RemovePath*   Description: This is function accepts a pointer to the name of a file*                along with path information and returns a pointer to the*                character that is not part of the path.*   Parameters : fullPath - pointer to an array of characters containing*                           a file name and possible path modifiers.*   Effects    : None*   Returned   : Returns a pointer to the first character after any path*                information.***************************************************************************/char *RemovePath(char *fullPath){    int i;    char *start, *tmp;                          /* start of file name */    const char delim[3] = {'\\', '/', ':'};     /* path deliminators */    start = fullPath;    /* find the first character after all file path delimiters */    for (i = 0; i < 3; i++)    {        tmp = strrchr(start, delim[i]);        if (tmp != NULL)        {            start = tmp + 1;        }    }    return start;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -