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/armain.c | 266 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100755 test/compression/armain.c (limited to 'test/compression/armain.c') diff --git a/test/compression/armain.c b/test/compression/armain.c new file mode 100755 index 00000000..8f37c4ff --- /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 . +* +***************************************************************************/ + +/*************************************************************************** +* INCLUDED FILES +***************************************************************************/ +#include +#include +#include +#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 \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(" -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; +} -- cgit