home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Magazyn Amiga Shareware Floppies
/
ma30.dms
/
ma30.adf
/
Difference
/
difference.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-09-07
|
2KB
|
98 lines
/************************************************/
/* Difference v1.1 (27.08.94) - a file comparer */
/* Public Domain (c) 1994 by BSZ */
/************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define max(x,y) ((x)>(y) ? (x):(y))
#define min(x,y) ((x)>(y) ? (y):(x))
/* modyfikacja funkcji standardowej strncmp tak, aby zwracaîa
offset (rzeczywisty, nie numer elementu tablicy liczony przecieû
od zera), na którym wystëpuje róznica */
int strn_cmp(char *string1, char *string2, int size)
{
int position;
for (position=0; position<size; position++)
{
if (string1[position]!=string2[position])
{
return (position+1);
}
}
return 0;
}
void clean(char *buffer, int size)
{
int loop;
for(loop=0; loop<size; loop++)
buffer[loop]=0;
}
main(int argc, char *argv[])
{
long offset, size1, size2, size, c, d;
int cmp;
char io_buffer1[1024], io_buffer2[1024];
FILE *in1, *in2;
char *path_1[30], *path_2[30];
*path_1=argv[1];
*path_2=argv[2];
if(argc!=3)
{
printf("\n
Difference v1.1 (27.08.94)
- a file comparer\n");
printf("
Public Domain (c) 1994 by BSZ
\n");
printf("Usage: %s <file 1> <file 2>\n", argv[0]);
exit(0);
}
if( !(in1=fopen(*path_1, "rb")))
{
fprintf(stderr,">>>Error opening %s\n", *path_1);
exit(1);
}
else
fseek(in1,0L,SEEK_END);
if( !(in2=fopen(*path_2, "rb")))
{
fprintf(stderr, ">>>Error opening %s\n", *path_2);
exit(1);
}
else
fseek(in2,0L,SEEK_END);
size1=ftell(in1);
size2=ftell(in2);
size=min(size1, size2);
rewind(in1);
rewind(in2);
for(offset=1; offset<=size ; offset+=1024)
{
printf("%02d%c completed",100*offset/size,'%');
fflush(stdout);
clean(io_buffer1,1024);
clean(io_buffer2,1024);
c=fread(io_buffer1, 1, 1024, in1);
d=fread(io_buffer2, 1, 1024, in2);
cmp=strn_cmp(io_buffer1, io_buffer2, 1024);
printf("\b\b\b\b\b\b\b\b\b\b\b\b\b");
if (cmp)
{
offset+=cmp-1;
printf("100%c completed. Files differ at position %d ($%x) \n",'%', offset,offset);
exit(0);
}
}
printf ("100%c completed. Files DO NOT differ\n",'%');
fclose(in1);
fclose(in2);
}