/* gccPj003.c */ /* Originally, 5Diff.3.c */ /* 3Diff - executable file posted */ /* History: The same as the other; PC -> Classic Mac -> ApGCC-3.3 here. */ /* (2004-11-30) For better handling of Macintosh foldernames, filenames, * I modified 'firstwd.c'(First Word), to 'spacedwd.c'(Spaced Words). * Right now, most of space including foldernames are properly handled. */ /* (2005-01-31) I ported "Grand_Summary.Txt" codes here from PC version. */ /* (2005-03-10) I found a bug when I tested this "5Diff.2.c" at AFOC. * The 5Diff.2.c did write Diff reports at USC, but not at AFOC. When I look at * today, I saw "openedOutputFN [64]" for output filenames. I think this comes * from old days of PC codes, when I couldn't figure out a way of lnog * filenames. Now, all PC codes use 'catlg00x.Txt' and Rename Batch file, * so I don't need any special handling of output filenames. * In PC -> 'catlg00x.Txt' and Rename * In MAC -> use all the way Same one; better fix MacOS7/8/9 too. * since it may have this bad code. * Sill I did't find any wrong code regarding "openedOutputFN [64]" * as it is just redundant, but let me see how it runs. * One possibility is how to address the current folder in MacOSX. * I used, * ./SDW/Erased/ * ./ZIP/Erased/ * ./DIFF/ * but at AFOC, it may like * SDW/Erased/ * ZIP/Erased/ * DIFF/ * If the problem persists, try which way goes better to many OSX. * For this moment, I haven't decided which way is better, so I keep * the mixed content as seen in below. */ /* (2005-03-15) Regarding ABSOLUTE and RELATIVE: * Batch.Txt -> ABSOLUTE is better, then I can use CD, DVD. * /Erased/; /DIFF/ -> RELATIVE is better, because flexible. */ /* (2005-03-10) Now, I want to do a little Adventure on MISSING ONE LINE * of SDW catalog. As I planned, still while Eating The LINE, * print (SDWline); count up. * Not completed yet. */ #include <stdio.h> #include <stdlib.h> #include <string.h> char lineSDW [256]; char lineZIP [256]; char FNToOpen [64]; /* = filenamesToOpen */ char openedFN [64]; /* = opendFilename */ char openedSDW_FNP [64], openedZIP_FNP [64]; /* = openedSDW_FilenameWithPath, = openedZIP_FilenameWithPath */ char writingFile [64]; extern char *spacedwd (char *to, char *from); /* = spaced words, to capture blank-containing foldername */ main() { int lengthSDW, iFlag, iSDW, iZIP; /* iFlag is counting output lines in a file to see which folders doesn't change. */ FILE *infpSDW, *infpOUT; /* These Pointers read fileNames list */ FILE *infp1, *infp2, *outfp, *outfp2; /* infp1->SDW_files; infp2->ZIP_files; outfp->Diff_Output; outfp2->Grand_Summary */ /* infpSDW reads Foldernames at 'HEADER.(TXT)' to compare the two files contents */ if ( (infpSDW=fopen("Header", "r"))!= NULL) ; else if ( (infpSDW=fopen("Header.Txt", "r"))!= NULL) ; else{ exit (0); } outfp2=fopen("Grand_Summary.Txt", "w"); printf("\n\n\nMaking final reports at each folder level at ./DIFF/.\n"); printf("From the size of each report file, you can estimate which folder \n"); printf("likely have a big change. No change folder appears as 2 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 folders. \n"); printf("The good thing is that you always have the Master ZIP disk safely.\n"); printf("And this dual way is somehow different from backup-&-restoration. \n\n"); printf("\"Grand_Summary.Txt\" is included for a quick review.\n\n\n"); iFlag=iSDW=iZIP=0; /* Read all lines from the file stream pointing to "Ref.txt" */ while( (fgets(FNToOpen, 64, infpSDW))!=NULL ) { spacedwd (openedFN, &FNToOpen[0]); /* Opening filename, one-by-one */ sprintf (openedSDW_FNP, "./SDW/Erased/%s.txt", openedFN); sprintf (openedZIP_FNP, "./ZIP_FLASH/Erased/%s.txt", openedFN); sprintf (writingFile, "DIFF/%s.txt", openedFN); infp1=fopen(openedSDW_FNP, "r"); infp2=fopen(openedZIP_FNP, "r"); outfp=fopen(writingFile, "w"); lengthSDW=iFlag=0; /* Reading both lines from two files simultaneously, the pair */ while( (fgets(lineSDW, 256, infp1))!=NULL && (fgets(lineZIP, 256, infp2))!=NULL ){ lengthSDW = strlen(lineSDW); if ( strncmp(lineSDW, lineZIP, (lengthSDW-1) )==0 ) ; else{ /* reporting difference */ fprintf (outfp, "SDW :%s", lineSDW); fprintf (outfp, "ZIP_FLASH:%s", lineZIP); iFlag++; /* Counter for Grand_Summary.Txt */ } } /* closing Two Lines Comparison WHILE-LOOP */ /* In case ZIP Catalog is longer */ if(infp2!=NULL){ while( (fgets(lineZIP, 256, infp2))!=NULL ){ fprintf(outfp, "ZIP: %s", lineZIP); iFlag++; iZIP++; } } *lineZIP=0; /* ***** WORKING ON MISSING LINE **** */ /* This approach didn't work, since although the same catalog size, it printed extra SDW line */ /* I'd better think later. */ /* I thought about it, and I want to introduce an control Flag, OR else, but it * it isn't the final conclusive good idea. So still goes on (2005-03-15). */ // if (*lineSDW != 0 && *lineZIP ==0 ){ // fprintf (outfp, "SDW:%s", lineSDW); // iSDW++; // } /* In case SDW Catalog is longer */ if(infp1!=NULL){ while( (fgets(lineSDW, 256, infp1))!=NULL ){ fprintf(outfp, "SDW: %s", lineSDW); iFlag++; iSDW++; } } *lineSDW=0; /* Since iFlag counter is still counting up when either catalog is longer, */ /* so, the following Grand_Sum.Txt must be after them. */ /* The Grand Summary report only needs to know iFlag count for each one set of comparison. */ if (iFlag==1) fprintf (outfp2, " No change at : %s\n", openedFN); else if ( iFlag>=1 && iSDW==0 && iZIP==0 ){ fprintf (outfp2, " May be O.K. : - %s\n", openedFN); }else fprintf (outfp2, " Watch out at : **** %s\n", openedFN); iFlag=iSDW=iZIP=0; /* Reset, in case */ *FNToOpen=*openedFN=0; /* Reset, in case */ *openedSDW_FNP=0; *openedZIP_FNP=0; fclose (infp1); fclose (infp2); fclose (outfp); } /* closing, filenames opened by While-loop */ fclose (infpSDW); }