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

void ArraySize(FILE *fptr, int *maxLine, int *lineMaxChar);
void Initialize(char ***data, int maxLine, int lineMaxChar);
void FreeMalloc(char ***data, int maxLine);

int main(int argc, char *argv[])
{
     FILE *fptr;
     char **data;
     int lineMaxChar = 0, maxLine = 0;
     int i,j;
     char buf[100];

     if(argc == 2)
     {
         fptr = fopen(argv[1], "r");
         ArraySize(fptr, &maxLine, &lineMaxChar);
         Initialize(&data, maxLine, lineMaxChar);
         rewind(fptr);
         for(i = 0;fgets(data[i], lineMaxChar, fptr) != NULL; i++);
         {
             fgets(data[i], lineMaxChar, fptr);
         }
         FreeMalloc(&data, maxLine);

     }

}

void ArraySize(FILE *fptr, int *maxLine, int *lineMaxChar)
{
     int ch, count = 0;
     while((ch = fgetc(fptr)) != EOF)
     {
         count++;
         if(ch == '\n')
         {
             (*maxLine)++;
             if(count > *lineMaxChar)
             {
                 *lineMaxChar = count;
             }
             count = 0;
         }
     }
}

void Initialize(char ***data, int maxLine, int lineMaxChar)
{
     int i;
     *data = calloc(maxLine, sizeof(char *));
     for(i = 0; i < maxLine; i++)
     {
         (*data)[i] = calloc(lineMaxChar, sizeof(char));
     }

}

void FreeMalloc(char ***data, int maxLine)
{
     int i;
     for(i = 0; i < maxLine; i++)
     {
         free((*data)[i]);
     }
     free(*data);
}