/************************************
***			          ***
***       Binary Diff v1.0        ***
***       =========== ====        ***
***			          ***
***  (c) 22.2.91 by Andreas Ley   ***
***			          ***
***  (u) 21.1.2003                ***
***			          ***
************************************/

char header[]="Binary Diff v1.0\n(c) 1991,2003 by Andreas Ley\n";

#include <stdio.h>

#ifdef vms
#include "getopt.c"
#endif /* vms */

#define	screen(c)	(((c)&0x7f)<0x20?'.':(c))


void bdiff(src1,src2)
FILE *src1,*src2;
{
  unsigned char	c1,c2;
  long		loc=0;

  while (!feof(src1) && !feof(src2)) {
    c1=fgetc(src1);
    c2=fgetc(src2);
    if (c1!=c2)
      printf("%06lx: %02x %c %02x %c\n",loc,c1,screen(c1),c2,screen(c2));
    loc++;
  }
  if (!feof(src1))
    printf("First file is longer than second file.\n");
  if (!feof(src2))
    printf("Second file is longer than first file.\n");
}



void usage(image)
char *image;
{
  fprintf(stderr,"Usage: %s [-h] file1 file2\n",image);
  exit(1);
}



main(argc,argv)
int argc;
char *argv[];
{
  int		c;
  extern char	*optarg;
  extern int	optind;
  FILE		*src1,*src2;

  while ((c=getopt(argc,argv,"h?")) != EOF)
    switch ((char)c) {
      case 'h': fprintf(stderr,header);
      case '?': usage(argv[0]);
    }

  if (optind!=argc-2)
    usage(argv[0]);

  if (src1=fopen(argv[optind],"r")) {
    if (src2=fopen(argv[optind+1],"r")) {
      bdiff(src1,src2);
      fclose(src2); }
    else {
      fprintf(stderr,"Unable to open ");
      perror(argv[optind+1]);
    }
    fclose(src1); }
  else {
    fprintf(stderr,"Unable to open '%s'\n",argv[optind]);
    perror(argv[optind]);
  }
}

