/* Pro139C.c */
/* "5DIFF.Exe" */
/* Compare Two Similar Files Line-by-Line */
/* This write all 'diff' results into '\DIFF\ -directory. */
/* 2005-01-22
* I fixed the BUG in which Pointer stops at the shorter catalog
* becomes NULL and didn't report the Longer catalog (file).
* However, between the WHILE-Loops switch, there have One
* line omission. I tried it out, but didn't come out well,
* so leave it later. I think that is trivial.
*/
/* 2005-02-06
* From MacDualWay, I learned that Flag Counter for "GrandSum.Txt"
* must be placed in all three LOOPS (Comparison, SDW-long, ZIP-long).
* So I do.
*/
#include<stdio.h>
#include<string.h>
/* FN stands for = Filename */
char FNtoOpen [64], openedFN [64], openedFNGrndSum [256];
char openedSDWFNP [64], openedZIPFNP [64];
char writingFile [64];
char lineSDW [256], lineZIP[256];
extern char *firstwd (char *to, char *from); /* Recycling Object */
extern char *spacedwd (char *to, char *from); /* Recycling Object */
void main (void)
{
char strPause[16];
int lengthSDW, iFlag, iSDW, iZIP; /* Flag Counters */
FILE *infp; /* This Pointer reads fileNames in "LOOKUP.Txt" */
FILE *infp1, *infp2, *outfp, *outfp2;
/* infp1 for SDW; inpf2 for ZIP; outfp for DIFF; outfp2 for GrandSum.Txt */
infp=fopen ("LOOKUP.TXT", "r"); /* Catalog names are the same between SDW and ZIP, just locations are different */
outfp2=fopen("GrandSum.TXT", "w");
/* This output Pointer is Once in the whole main.*/
/* Can't repeat opening in the following Sub-WHILE-loop */
printf("Making final reports at each directory level at sub-directory \\DIFF. \n");
printf("From the size of each report file, you can estimate which directory \n");
printf("likely have a big change. No change directory appears as 4 lines. \n");
printf("Any file change should appear.\n\n");
printf("The mechanism of this 'diff' report is based on reading two files\n");
printf("at the same time from top of both files. So, in case there is a \n");
printf("line shift near the top, then all lines followed are reported.\n");
printf("So, in a sense, this is not a sophisticated program, but just to \n");
printf("quickly review whether any change is there at given directories.\n\n");
printf("Since a ZIP disk is more vulnerable than a Hard disk, this Shadow\n");
printf("(SDW) and the Master ZIP disk, Dual System, keep your documents\n");
printf("safer. You always have the Master ZIP disk. And this dual way is\n");
printf("somehow different from backup-&-restoration.\n\n");
printf("\"GrandSum.Txt\" is added, and in order to review the cataglos \n");
printf("and DIFF reports by the folder names, please run final \"5Rename.Exe\" \n");
printf("then double click the resultant \"Rename.Bat\" batch file. \n\n");
printf("Type any character key and [ENTER] to close this message: ");
scanf("%s", &strPause);
while( (fgets(FNtoOpen, 64, infp))!=NULL ) /* Opening files two at a time, a pair */
{
firstwd (openedFN, &FNtoOpen[2]); /* This is processing. */
spacedwd (openedFNGrndSum, &FNtoOpen[2]); /* This is for "GrandSum.Txt". */
/* The two 'sprintf()' for Reading, one 'sprintf()' for Writing */
sprintf(openedSDWFNP, "SDW\\Erased\\%s.Txt", openedFN);
sprintf(openedZIPFNP, "ZIP\\Erased\\%s.Txt", openedFN);
sprintf(writingFile, "DIFF\\%s.TXT", openedFN);
/* All three pass to the Pointers */
infp1 =fopen(openedSDWFNP, "r");
infp2 =fopen(openedZIPFNP, "r");
outfp =fopen(writingFile, "w");
lengthSDW=0;
iFlag=iSDW=iZIP=0; /* Counter Initiation */
/* Reading both lines from two files simultaneously, the pair */
while( (fgets(lineSDW, 256, infp1))!=NULL && (fgets(lineZIP, 256, infp2))!=NULL )
{
lengthSDW=strlen(lineSDW); /* Measuring the size of line in the first one */
if( strncmp(lineSDW, lineZIP, (lengthSDW-1))==0)
;
else{
fprintf (outfp, "SDW: %s", lineSDW);
fprintf (outfp, "ZIP: %s", lineZIP);
iFlag++;
}
} /* Closing Two Lines Comparison WHILE-LOOP */
/* In case ZIP catalog is longer, ZIP continues. */
if (infp2!=NULL){
while( (fgets(lineZIP, 265, infp2))!=NULL ){
fprintf(outfp, "ZIP: %s", lineZIP);
iFlag++; iZIP++;
}
}
*lineZIP=0; /* reset in case */
/* In case SDW catalog is longer, SDW continues. */
if (infp1!=NULL){
while( (fgets(lineSDW, 265, infp1))!=NULL ){
fprintf(outfp, "SDW: %s", lineSDW);
iFlag++; iSDW++;
}
}
*lineSDW=0; /* reset in case */
/* Now, after Three(3) Loops we can report "GrandSum.Txt". */
if (iFlag==2) fprintf (outfp2, " No change at : %s\n", openedFNGrndSum);
else if (iFlag>=2 && iSDW==0 && iZIP==0){
fprintf (outfp2, " May be O.K. : - %s\n", openedFNGrndSum);
}else fprintf (outfp2, " Watch out at : **** %s\n", openedFNGrndSum);
iFlag=iSDW=iZIP=0;
*FNtoOpen=*openedFN=*openedFNGrndSum=0;
*openedSDWFNP=0;
*openedZIPFNP=0;
*writingFile=0;
fclose(infp1);
fclose(infp2);
fclose(outfp);
} /* Closing WHILE-LOOP, which reads directory names list in "Header.Txt" */
fclose(outfp2);
}