/*
 * let_hist.c
 * This program reads an input file and prints out a histogram of all the
 * Latin letters it contains.
 */

#include <stdio.h>

int main (int argc, char **argv)
{
  FILE   *p_file;              /* The input file. */
  int    c;                    /* The current character read. */
  int    hist['Z' - 'A' + 1];  /* Histogram of all latin letters. */
  int    sum_let;              /* The total number of letters in the file. */
  float  freq;                 /* The frequency of the current letter. */

  /* Check the number of arguments to the program: */
  if (argc < 2)
  {
    printf ("Usage: %s <input file>\n", argv[0]);
    return (1);
  }

  /* Open the input file, specified by argv[1] */
  p_file = fopen (argv[1], "r");

  if (p_file == NULL)
  {
    printf ("Failed to open the input file '%s'.\n", argv[1]);
    return (1);
  }

  /* Zero the histogram. */
  for (c = 'A'; c <= 'Z'; c++)
    hist[c - 'A'] = 0;

  /* Read the file, character by character. */
  sum_let = 0;
  while ((c = fgetc(p_file)) != EOF)
  {
    /* Change to upper case, if needed. */
    if (c >= 'a' && c <= 'z')
      c += ('A' - 'a');

    /* Update the histogram, if we have a letter. */
    if (c >= 'A' && c <= 'Z')
    {
      (hist[c - 'A'])++;
      sum_let++;
    }
  }

  /* Close the input file. */
  fclose (p_file);

  /* Print the histogram. */
  for (c = 'A'; c <= 'Z'; c++)
  {
    freq = 100 * (float)hist[c - 'A'] / (float)sum_let;
    printf ("%c : %4d    (%5.2f %%)\n", c, hist[c - 'A'], freq);
  }

  return (0);
}

