/**************************************************************************** * 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; char input[] = "Chan"; int input_len = strlen(input); char *output = (char *)malloc(sizeof(char) * (input_len + 1)); /* initialize data */ fpIn = NULL; fpOut = NULL; mode = ENCODE; /* parse command line */ optList = GetOptList(argc, argv, "c:h?"); thisOpt = optList; while (thisOpt != NULL) { switch(thisOpt->option) { case 'c': /* compression mode */ mode = ENCODE; break; case 'h': case '?': 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"); FreeOptList(optList); return(EXIT_SUCCESS); } optList = thisOpt->next; free(thisOpt); thisOpt = optList; } /* we have valid parameters encode or decode */ if (mode == ENCODE) { printf("Before encoding\n"); EncodeLZSSByArray(input, output); } return EXIT_SUCCESS; }
/**************************************************************************** * 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; }