From 285f5bec5bb03d4e825e5d866e94008088dd6155 Mon Sep 17 00:00:00 2001 From: xleroy Date: Sat, 9 Aug 2008 08:06:33 +0000 Subject: Ajout nouveaux tests git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@708 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e --- test/compression/lzssmain.c | 278 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 test/compression/lzssmain.c (limited to 'test/compression/lzssmain.c') diff --git a/test/compression/lzssmain.c b/test/compression/lzssmain.c new file mode 100644 index 00000000..30fc5ab2 --- /dev/null +++ b/test/compression/lzssmain.c @@ -0,0 +1,278 @@ +/*************************************************************************** +* 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.5 2007/09/20 04:34:45 michael Exp $ +* $Log: sample.c,v $ +* Revision 1.5 2007/09/20 04:34:45 michael +* Replace getopt with optlist. +* Changes required for LGPL v3. +* +* Revision 1.4 2006/12/26 04:09:09 michael +* Updated e-mail address and minor text clean-up. +* +* 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, 2006, 2007 by +* Michael Dipperstein (mdipper@alumni.engr.ucsb.edu) +* +* This file is part of the lzss library. +* +* The lzss 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 3 of the +* License, or (at your option) any later version. +* +* The lzss 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 program. If not, see . +* +***************************************************************************/ + +/*************************************************************************** +* INCLUDED FILES +***************************************************************************/ +#include +#include +#include +#include "lzss.h" +#include "optlist.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[]) +{ + option_t *optList, *thisOpt; + FILE *fpIn, *fpOut; /* pointer to open input & output files */ + MODES mode; + + /* initialize data */ + fpIn = NULL; + fpOut = NULL; + mode = ENCODE; + + /* parse command line */ + optList = GetOptList(argc, argv, "cdi:o:h?"); + thisOpt = optList; + + while (thisOpt != NULL) + { + switch(thisOpt->option) + { + 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); + } + + FreeOptList(optList); + exit(EXIT_FAILURE); + } + + /* open input file as binary */ + fpIn = fopen(thisOpt->argument, "rb"); + if (fpIn == NULL) + { + perror("Opening input file"); + + if (fpOut != NULL) + { + fclose(fpOut); + } + + FreeOptList(optList); + 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); + } + + FreeOptList(optList); + exit(EXIT_FAILURE); + } + + /* open output file as binary */ + fpOut = fopen(thisOpt->argument, "wb"); + if (fpOut == NULL) + { + perror("Opening output file"); + + if (fpIn != NULL) + { + fclose(fpIn); + } + + FreeOptList(optList); + exit(EXIT_FAILURE); + } + break; + + case 'h': + case '?': + printf("Usage: %s \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 : Name of input file.\n"); + printf(" -o : 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])); + + FreeOptList(optList); + return(EXIT_SUCCESS); + } + + optList = thisOpt->next; + free(thisOpt); + thisOpt = optList; + } + + + /* 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; +} -- cgit