/*
+-------------------------+
| COMPARACION DE FICHEROS |
+-------------------------+

        Este  programa  compara  dos  ficheros  y  determina  si son
iguales o distintos.
*/

#include <stdio.h> /* printf (), gets (), fprintf (), stderr, EOF,
                   fopen (), fclose (), fgets (), fputs (), NULL */
#include <conio.h>  /* getch () */
#include <string.h> /* strcpy (), strstr () */
#include <ctype.h>  /* toupper () */

#define BOOLEAN int
#define TRUE    1
#define FALSE   0

#define ESC 27
#define ENTER '\r'

#define NUMMAXCARACTERES 255

void main (void)
{
  BOOLEAN salir = FALSE;
  char nombre_fichero_1[NUMMAXCARACTERES],
       nombre_fichero_2[NUMMAXCARACTERES];
  FILE *pf1, *pf2; /* punteros a fichero de entrada y fichero de
                   salida resp. */
  char ch;

  while (! salir)
    {
      puts ("\n\nCOMPARAR DOS FICHEROS:\n");
      printf ("Introduzca nombre de primer fichero (ENTER o CON para "
               "teclado): ");
      gets (nombre_fichero_1);
      if (*nombre_fichero_1 == '\0')
        strcpy (nombre_fichero_1, "con");
      printf ("Introduzca nombre de segundo fichero (ENTER o CON "
               "para teclado): ");
      gets (nombre_fichero_2);
      if (*nombre_fichero_2 == '\0')
        strcpy (nombre_fichero_2, "con");

      if ((pf1 = fopen (nombre_fichero_1, "r")) == NULL)
        fprintf (stderr, "\nERROR: No es posible abrir el fichero "
                 "%s.\n", nombre_fichero_1);
      else if ((pf2 = fopen (nombre_fichero_2, "r")) == NULL)
        {
          fprintf (stderr, "\nERROR: No es posible abrir el fichero "
                   %"s.\n", nombre_fichero_2);
          fclose (pf1);
        }
      else
        {
          int ch1, ch2;

          while ((ch1 = fgetc (pf1)) == (ch2 = fgetc (pf2)) && ch1
                != EOF) ;

          printf ("\nLos dos ficheros comparados son %s.\n", feof
                   (pf1) && feof (pf2) ? "iguales" : "distintos");

          fclose (pf1);
          fclose (pf2);
        }

      printf ("\n\n¿Desea comparar otros dos ficheros (S o ENTER: "
               "Sí; N o ESC: No)? ");
      do
        {
          ch = getch ();
        } while (ch != ENTER && toupper (ch) != 'S' &&
                 ch != ESC && toupper (ch) != 'N');
      salir = ch == ESC || toupper (ch) == 'N';
    }
}