aboutsummaryrefslogtreecommitdiffstats
path: root/test/compression/lzssmain.c
diff options
context:
space:
mode:
authorxleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2008-08-09 08:06:33 +0000
committerxleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2008-08-09 08:06:33 +0000
commit285f5bec5bb03d4e825e5d866e94008088dd6155 (patch)
tree9df69ded9ed4f4049e0b3887fdd99fcdf3b1746f /test/compression/lzssmain.c
parenta83f0c1710cc5143dd885e84c94e14f7d3216f93 (diff)
downloadcompcert-kvx-285f5bec5bb03d4e825e5d866e94008088dd6155.tar.gz
compcert-kvx-285f5bec5bb03d4e825e5d866e94008088dd6155.zip
Ajout nouveaux tests
git-svn-id: https://yquem.inria.fr/compcert/svn/compcert/trunk@708 fca1b0fc-160b-0410-b1d3-a4f43f01ea2e
Diffstat (limited to 'test/compression/lzssmain.c')
-rw-r--r--test/compression/lzssmain.c278
1 files changed, 278 insertions, 0 deletions
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 <http://www.gnu.org/licenses/>.
+*
+***************************************************************************/
+
+/***************************************************************************
+* INCLUDED FILES
+***************************************************************************/
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#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 <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]));
+
+ 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;
+}