/*

 * conv_file.c

 * This program reads an input file and converts it to upper or lower case.

 */

 

#include <stdio.h>

 

int main (int argc, char **argv)

{

  FILE   *p_infile;            /* The input file. */

  int    c;                    /* The current character read. */

  FILE   *p_outfile;           /* The output file. */

  int    to_upper;             /* Convert to upper or to lower case. */

  int    n_chars = 0;          /* Number of characters read. */

  int    n_conv = 0;           /* Number of characters converted. */

 

  /* Check the number of arguments to the program: */

  if (argc < 4)

  {

    printf ("Usage: %s <input file> <output file> -[l/u]\n", argv[0]);

    return (1);

  }

 

  /* Determine the work mode, determined by argv[3] */

  if (strcmp(argv[3], "-u") == 0 || strcmp(argv[3], "-U") == 0)

  {

    to_upper = 1;

  } 

  else if (strcmp(argv[3], "-l") == 0 || strcmp(argv[3], "-L") == 0)

  {

    to_upper = 0;

  }

  else

  {

    printf ("Unknown option: %s\n", argv[3]);

    return (1);

  }

 

  /* Open the input file, specified by argv[1] */

  p_infile = fopen (argv[1], "r");

 

  if (p_infile == NULL)

  {

    printf ("Failed to open the input file '%s'.\n", argv[1]);

    return (1);

  }

 

  /* Prepare the output file, specified by argv[2] */

  p_outfile = fopen (argv[2], "w");

 

  if (p_outfile == NULL)

  {

    printf ("Failed to open the output file '%s'.\n", argv[2]);

    fclose (p_infile);

    return (1);

  }

 

  /* Read the file, character by character. */

  while ((c = fgetc(p_infile)) != EOF)

  {

    n_chars++;

 

    /* Convert the character as needed. */

    if (to_upper && (c >= 'a' && c <= 'z'))

    {

      c += ('A' - 'a');

      n_conv++;

    }

    else if (!to_upper && (c >= 'A' && c <= 'Z'))

    {

      c += ('a' - 'A');

      n_conv++;

    }

 

    /* Write the character to the output file. */

    fputc (c, p_outfile);

  }

 

  /* Print statistics to the output file. */

  fprintf (p_outfile, "\n**************** Summary: ****************\n");

  fprintf (p_outfile, "Read %d characters.\n", n_chars);

  fprintf (p_outfile, "Converted %d characters.\n", n_conv);

  fprintf (p_outfile, "******************************************\n");

 

  /* Close the files. */

  fclose (p_infile);

  fclose (p_outfile);

 

  return (0);

}