p2lzw / main.c
main.c
Raw
#include "encode.h"
#include "decode.h"
#include <string.h>
#include <libgen.h>
#include <stdlib.h>

#include "lzw.h"

int main(int argc, char *argv[])
{
  static char bin[64], bout[64];
  setvbuf(stdin, bin, _IOFBF, 64);
  setvbuf(stdout, bout, _IOFBF, 64);

  char *exec_name = basename(argv[0]);

  if (strcmp(exec_name, "encode") == 0) 
  {
    int maxBits = DEFAULT_BITS;
    int pruning = 0;
    for (int i = 1; i < argc; i++)
    {
      if (strcmp(argv[i], "-m") == 0)
      {
        maxBits = atoi(argv[i + 1]);
        if (maxBits < MIN_BITS || maxBits > MAX_BITS)
        {
          fprintf(stderr, "encode: maxBits must be between 9 and 20 (received '%s')\n", argv[i + 1]);
          exit(1);
        }
      } else if (strcmp(argv[i], "-p") == 0)
      {
        pruning = 1;
      }
    }
    encode(pruning, maxBits);
  } else if (strcmp(exec_name, "decode") == 0) {
    if (argc > 1) 
    {
      fprintf(stderr, "decode: invalid option '%s'\n", argv[1]);
      exit(1);
    }
    decode();
  } else {
    fprintf(stderr, "Usage: %s [-m MAXBITS] [-p] < input > output\n", argv[0]);
    fprintf(stderr, "       %s < input > output\n", argv[0]);
    exit(1);
  }
  exit(0);
}