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

void le_linha (FILE *_f,char _lin[]) {
      //le uma linha do arquivo
  char ch;
  int i = 0;

  ch = getc(_f);

  while ( (ch != EOF) && (ch != '\n')) {
    _lin[i++] = ch;
    //printf ("%c\n", ch);
    ch = getc(_f);
  }

  _lin[i] = '\0';
}

int main (int argc, char *argv[])
{
  FILE *fp;
  char linha[255];
  unsigned int width=0, height=0;
  unsigned int *histograma; //
  int i, j, k, r, g, b, indice;

  histograma = malloc (256*256*256 * sizeof(int)); //aloca espaco para a matriz

  printf ("\nComecando processamento.\n");

  if ((fp=fopen(argv[1], "r"))== NULL) { //abre arquivo
    printf ("O arquivo nao pode ser aberto");
    exit(1);
  }

  le_linha(fp, linha);

  printf ("\nPulando os comentarios:\n");
  le_linha(fp, linha);
  while (linha[0] == '#') {
    printf ("\t%s\n", linha);
    le_linha(fp, linha);
  }

  printf ("\nDimensoes da imagem:\n");
  sscanf (linha, "%d %d", &width, &height);
  printf ("\tlargura: %u\n\taltura:%u\n", width, height);

  printf ("\nValor maximo do byte que representa cor:\n");
  le_linha(fp, linha);
  printf ("\t%s\n", linha);

  printf ("\nInicializando histograma...\n");
  for (i = 0; i < 256; i++)
    for (j = 0; j < 256; j++)
      for (k = 0; k < 256; k++) {
        indice = i*256*256 + j*256 + k;
        histograma[indice] = 0;
      }

  printf ("\nCalculando histograma...\n");
  for (i = 0; i < width; i++) {
    for (j = 0; j < height; j++) {
      fscanf (fp, "%d%d%d", &r, &g, &b); // leu 3 inteiros do arquivo
      printf ("(i,j) = (%3d,%3d)\tRGB = (%3d,%3d,%3d)\t", i, j, r, g, b);
      histograma [r*256*256 + g*256 + b]++;
    }
  }


  printf ("\nHistograma Calculado.\n");
}