#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>

#ifdef __unix__
      #include <unistd.h>
      #include <sys/stat.h>
      #include <sys/types.h>
#elif __MSDOS__
      #include <io.h>
      #include <sys\stat.h>
#endif

#define ERROPEN "Konnte %s nicht oeffnen\n"

char error[]= "Benutzung: Programmname Datei1 Datei2";

int main(int argc, char *argv[])
{
 int handle1,handle2,gelesen1,gelesen2;
 char puffer1[2],puffer2[2];
 unsigned long i=1;

 if(argc != 3)
  {
   write(2,&error,sizeof(error));
   exit (0);
  }

/*Öffnen der beiden Dateien*/

 if((handle1=open(argv[1],O_RDONLY)) != -1)
  {
   if((handle2=open(argv[2],O_RDONLY)) == -1)
    {
     printf(ERROPEN,argv[2]);
     exit(1);
    }
   }
 else
  {
   printf(ERROPEN,argv[1]);
   exit (0);
  }

/*Wir prüfen die Bytes nacheinander*/

 while(1) /*Endlosschleife*/
  {
   if((gelesen1=read(handle1, &puffer1, 1)) != -1)
    if((gelesen2=read(handle2, &puffer2, 1)) != -1)
     if(gelesen1==0 && gelesen2==0)
      {
       printf("%s und %s sind identisch\n",argv[1],argv[2]);
       return 0;
      }
     else if(gelesen1==0)
      {
       printf("%s ist kleiner als %s\n",argv[1],argv[2]);
       exit (1);
      }
     else if(gelesen2==0)
      {
       printf("%s ist grösser als %s\n",argv[1],argv[2]);
       exit (1);
      }
     else
      {
       if(puffer1[0] != puffer2[0])
        {
          printf("%ld. Bytenr.:(%s:x0%02x) <> (%s:x0%02x)\n",
          i,argv[1],puffer1[0],argv[2],puffer2[0]);
          exit (1);
         }
        else
           i++;
        }
     } /*Ende while(1)*/
 return 0;
}

