summaryrefslogtreecommitdiff
path: root/test/compression/armain.c
diff options
context:
space:
mode:
authorGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2008-08-09 08:06:33 +0000
committerGravatar xleroy <xleroy@fca1b0fc-160b-0410-b1d3-a4f43f01ea2e>2008-08-09 08:06:33 +0000
commit285f5bec5bb03d4e825e5d866e94008088dd6155 (patch)
tree9df69ded9ed4f4049e0b3887fdd99fcdf3b1746f /test/compression/armain.c
parenta83f0c1710cc5143dd885e84c94e14f7d3216f93 (diff)
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/armain.c')
-rwxr-xr-xtest/compression/armain.c266
1 files changed, 266 insertions, 0 deletions
diff --git a/test/compression/armain.c b/test/compression/armain.c
new file mode 100755
index 0000000..8f37c4f
--- /dev/null
+++ b/test/compression/armain.c
@@ -0,0 +1,266 @@
+/***************************************************************************
+* Sample Program Using Arithmetic Encoding Library
+*
+* File : sample.c
+* Purpose : Demonstrate usage of arithmetic encoding library
+* Author : Michael Dipperstein
+* Date : March 10, 2004
+*
+****************************************************************************
+* UPDATES
+*
+* $Id: sample.c,v 1.3 2007/09/08 15:48:14 michael Exp $
+* $Log: sample.c,v $
+* Revision 1.3 2007/09/08 15:48:14 michael
+* Replace getopt with optlist.
+* Changes required for LGPL v3.
+*
+* Revision 1.2 2004/08/13 13:08:43 michael
+* Add support for adaptive encoding
+*
+* Use executable name in help messages
+*
+* Revision 1.1.1.1 2004/04/04 14:54:13 michael
+* Initial version
+*
+*
+****************************************************************************
+*
+* SAMPLE: Sample usage of the arcode Arithmetic Encoding Library
+* Copyright (C) 2004, 2007 by Michael Dipperstein (mdipper@cs.ucsb.edu)
+*
+* This file is part of the arcode library.
+*
+* The arcode 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 arcode 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 "optlist.h"
+#include "arcode.h"
+
+/***************************************************************************
+* PROTOTYPES
+***************************************************************************/
+char *RemovePath(char *fullPath);
+
+/***************************************************************************
+* FUNCTIONS
+***************************************************************************/
+
+/****************************************************************************
+* Function : main
+* Description: This is the main function for this program, it validates
+* the command line input and, if valid, it will call
+* functions to encode or decode a file using the arithmetic
+* coding 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;
+ char *inFile, *outFile; /* name of input & output files */
+ char encode; /* encode/decode */
+ char staticModel; /* static/adaptive model*/
+
+ /* initialize data */
+ inFile = NULL;
+ outFile = NULL;
+ encode = TRUE;
+ staticModel = TRUE;
+
+ /* parse command line */
+ optList = GetOptList(argc, argv, "acdi:o:h?");
+ thisOpt = optList;
+
+ while (thisOpt != NULL)
+ {
+ switch(thisOpt->option)
+ {
+ case 'a': /* adaptive model vs. static */
+ staticModel = FALSE;
+ break;
+
+ case 'c': /* compression mode */
+ encode = TRUE;
+ break;
+
+ case 'd': /* decompression mode */
+ encode = FALSE;
+ break;
+
+ case 'i': /* input file name */
+ if (inFile != NULL)
+ {
+ fprintf(stderr, "Multiple input files not allowed.\n");
+ free(inFile);
+
+ if (outFile != NULL)
+ {
+ free(outFile);
+ }
+
+ FreeOptList(optList);
+ exit(EXIT_FAILURE);
+ }
+ else if ((inFile =
+ (char *)malloc(strlen(thisOpt->argument) + 1)) == NULL)
+ {
+ perror("Memory allocation");
+
+ if (outFile != NULL)
+ {
+ free(outFile);
+ }
+
+ FreeOptList(optList);
+ exit(EXIT_FAILURE);
+ }
+
+ strcpy(inFile, thisOpt->argument);
+ break;
+
+ case 'o': /* output file name */
+ if (outFile != NULL)
+ {
+ fprintf(stderr, "Multiple output files not allowed.\n");
+ free(outFile);
+
+ if (inFile != NULL)
+ {
+ free(inFile);
+ }
+
+ FreeOptList(optList);
+ exit(EXIT_FAILURE);
+ }
+ else if ((outFile =
+ (char *)malloc(strlen(thisOpt->argument) + 1)) == NULL)
+ {
+ perror("Memory allocation");
+
+ if (inFile != NULL)
+ {
+ free(inFile);
+ }
+
+ FreeOptList(optList);
+ exit(EXIT_FAILURE);
+ }
+
+ strcpy(outFile, thisOpt->argument);
+ 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(" -a : Use adaptive model instead of static.\n");
+ printf(" -h | ? : Print out command line options.\n\n");
+ printf("Default: %s -c\n", RemovePath(argv[0]));
+
+ FreeOptList(optList);
+ return(EXIT_SUCCESS);
+ }
+
+ optList = thisOpt->next;
+ free(thisOpt);
+ thisOpt = optList;
+ }
+
+ /* validate command line */
+ if (inFile == NULL)
+ {
+ fprintf(stderr, "Input file must be provided\n");
+ fprintf(stderr, "Enter \"%s -?\" for help.\n", RemovePath(argv[0]));
+
+ if (outFile != NULL)
+ {
+ free(outFile);
+ }
+
+ exit (EXIT_FAILURE);
+ }
+ else if (outFile == NULL)
+ {
+ fprintf(stderr, "Output file must be provided\n");
+ fprintf(stderr, "Enter \"%s -?\" for help.\n", RemovePath(argv[0]));
+
+ if (inFile != NULL)
+ {
+ free(inFile);
+ }
+
+ exit (EXIT_FAILURE);
+ }
+
+ /* we have valid parameters encode or decode */
+ if (encode)
+ {
+ ArEncodeFile(inFile, outFile, staticModel);
+ }
+ else
+ {
+ ArDecodeFile(inFile, outFile, staticModel);
+ }
+
+ free(inFile);
+ free(outFile);
+ 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;
+}