#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[]) {

  char* input_filename = NULL;
  long input_length = 0;
  char* output_filename = NULL;
  char* output_dirname = NULL;
  FILE* in = NULL;
  FILE* out = NULL;
  long count = 0;
  long i = 0;
  char* chunk = calloc(4, sizeof(char));
  size_t bytes_read = 0;

  if ( argc < 2 ) {
 
   printf("usage: %s <file>\n",argv[0]);
    exit(1);

  } else {
  
    input_filename = argv[1];

  }

  if ( ( in = fopen(input_filename, "r") ) == NULL ) {

    printf("Could not open %s\n",argv[1]);
    exit(1);

  } else {

    printf("Reading from %s\n",input_filename);
    count = 0;

    // Get directory and create "converted" subdirectory
    input_length = strlen(input_filename);
    output_filename = calloc(input_length+10, sizeof(char));
    output_dirname = calloc(input_length, sizeof(char));
    i = input_length;
    while ( i > 0 && input_filename[i--] != '.' )
      input_filename[i] = tolower(input_filename[i]);
    while ( i > 0 && input_filename[i--] != '/' );
    if ( i > 0 ) output_dirname = strncat(output_dirname, input_filename, i);
    output_dirname = strcat(output_dirname,"converted/");
    printf("Creating %s\n", output_dirname);
    mkdir(output_dirname,0755);

    output_filename = strcpy(output_filename,output_dirname);
    output_filename = strcat(output_filename,(input_filename+i));

    if ( ( out = fopen(output_filename, "w") ) == NULL ) {

      printf("Could not open %s\n",output_filename);
      exit(1);

    } else {
 
      printf("Writing to %s\n",output_filename);
      while ( !feof(in) && !ferror(in) ) {
	bytes_read = fread(chunk, (size_t)1, (size_t)4, in );
	count += bytes_read;
	if ( strcmp(chunk,"SEDG") == 0 ) {
	  printf("At %d: %s\n", count, chunk);
	  fwrite("DIVX",(size_t)1, (size_t)4, out);
	} else {
	  fwrite(chunk, (size_t)1, bytes_read, out);
	}
      }
      fclose(out);

    }

  }

  free(output_filename);
  free(output_dirname);
  free(chunk);

  exit(0);

}

