/*************************************************************************
**                                 FC                                   **
**                                                                      **
**      Ein FileCompare-Util geschrieben von Alex Holler.               **
**      Das Proggi sowie der Source dazu sind vollkommen PD.            **
*************************************************************************/

#include <stdio.h>
#include <ctype.h>

unsigned char cfilea[8],cfileb[8];
int zeichen;

void typeout(void)
{
int j;

    for(j=0;j<zeichen;j++)
        printf("%02hx ",cfilea[j]);
    for(;j<8;j++)
        printf("   ");
    for(j=0;j<zeichen;j++)
        if(isprint(cfilea[j]))
            printf("%c",cfilea[j]);
        else
            printf(".");
    for(;j<8;j++)
        printf(" ");
    printf("   ");
    for(j=0;j<zeichen;j++)
        printf("%02hx ",cfileb[j]);
    for(;j<8;j++)
        printf("   ");
    for(j=0;j<zeichen;j++)
        if(isprint(cfileb[j]))
            printf("%c",cfileb[j]);
        else
            printf(".");
    puts("");
}

int main(int argc,char *argv[])
{
long unsigned int i;
FILE *filea,*fileb;

    if(argc!=3) {
        puts("Usage: FC FileA FileB");
        return 1;
    }
    if(!(filea=fopen(argv[1],"rb"))) {
        printf("Can't open File %s\n",argv[1]);
        return 2;
    }
    if(!(fileb=fopen(argv[2],"rb"))) {
        printf("Can't open File %s\n",argv[2]);
        fclose(filea);
        return 3;
    }
    printf("\nOffset    File %-27s   File %-27s\n",argv[1],argv[2]);
    for(i=0;i<76;i++)
        printf("-");
    puts("");
    for(i=zeichen=0;!feof(filea)&&!feof(fileb);i++) {
        cfilea[zeichen]=fgetc(filea);
        cfileb[zeichen]=fgetc(fileb);
        if(!feof(filea)&&!feof(fileb)) {
            if(cfilea[zeichen]!=cfileb[zeichen]) {
                zeichen++;
                if(zeichen==8) {
                    printf("%08lx  ",(long)(i+1-zeichen));
                    typeout();
                    zeichen=0;
                }
            }
            else if(zeichen) {
                printf("%08lx  ",(long)(i-zeichen));
                typeout();
                zeichen=0;
            }
        }
    }
    printf("\n $%lx Bytes compared\n\n",(long)(i-1L));
    if(feof(filea)&&!feof(fileb))
        printf(" File %s < File %s\n\n",argv[1],argv[2]);
    else if(!feof(filea)&&feof(fileb))
        printf(" File %s > File %s\n\n",argv[1],argv[2]);
    fclose(filea);
    fclose(fileb);
    return 0;
}


