/* mcPj009A.c */ /* After the success of File Reading and Folder Structure Handling, */ /* Now, get into the Real World Business, porting PC "5Diff" to Macintosh. */ /* (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. */ /* (2004-12-17) In this occasion of porting, I also want to simplify the * Columns chopping into 7 parts to 3 parts. Beginning-Erasing-Ending. * Many chopping doesn't make sense, although it did have a testing purpose. */ /* (2004-12-20) While testing the codes, I used ABSOLUTE, now is RELATIVE. * Here are the testing Fixed Filename Codes, which worked well. * * sprintf (openedSDWFNWithPath, "Mac-3:1DualWay:SDW:Erased:%s", openedFN); * sprintf (openedZIPFNWithPath, "Mac-3:1DualWay:ZIP:Erased:%s", openedFN); * sprintf (writingFile, "Mac-3:1DualWay:DIFF:%s", openedOutputFN); * */ /* (2004-01-22) Read through to the longer file by Pointer is introduced. * I noticed this bug a few weeks ago, and finally fixed it. */ /* (2005-01-31) I ported "Grand_Summary.Txt" codes here from PC version. * And it works fine. (2005-02-05) And I am finalizing it for the * convenience of users. Note the end of this, and MPW command line * in "3_MPWBatch" to make it Double-Clicks open. */ #include <stdio.h> #include <stdlib.h> #include <string.h> char lineSDW [256]; char lineZIP [256]; char FNToOpen [64]; /* = filenamesToOpen */ char openedFN [64]; /* = opendFilename */ char openedSDWFNWithPath [64], openedZIPFNWithPath [64]; char outputFNToOpen [64]; char openedOutputFN [64]; char writingFile [64]; extern char *spacedwd (char *to, char *from); /* = spaced words, to capture blank-containing foldername */ main() { int lengthSDW, iFlag; /* 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=fopen("HEADER", "r"); /* infpSDW reads Any and All Filenames at 'HEADER.TXT', the same as 'Dual-Way.Exe' */ infpOUT=fopen("HEADER", "r"); /* infpOUT reads corresponding Filenames at 'OUT-HEAD.TXT', actually this is a trick for 8+3 rule to comply with .TXT extension appending. In Macintosh I con modify. */ outfp2=fopen("Grand_Summary.Txt", "w"); printf("Making 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("To make final reports openable by double clicks, go to MPW Shell and \n"); printf("select all command lines under :DIFF: by a mouse. Execute them by \n"); printf("the right-most [enter]. \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("To review \"Grand_Summary.Txt\" by SimpleText, you may use a line\n"); printf("at the beginning of \"Batch\" file, which looks like.\n\n"); printf(" SetFile -c ttxt \"(Your_working_folder_Path):Grand_Summary.Txt\"\n\n"); /* 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 */ fgets (outputFNToOpen, 64, infpOUT); /* For output filename */ spacedwd (openedOutputFN, &outputFNToOpen[0]); sprintf (openedSDWFNWithPath, ":SDW:Erased:%s", openedFN); sprintf (openedZIPFNWithPath, ":ZIP:Erased:%s", openedFN); sprintf (writingFile, ":DIFF:%s", openedOutputFN); infp1=fopen(openedSDWFNWithPath, "r"); infp2=fopen(openedZIPFNWithPath, "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:%s", lineZIP); iFlag++; /* Counter for Grand_Summary.Txt */ } } /* closing Two Lines Comparison WHILE-LOOP */ /* In case SDW Catalog is longer */ if(infp1!=NULL){ while( (fgets(lineSDW, 256, infp1))!=NULL ){ fprintf(outfp, "SDW: %s", lineSDW); iFlag++; } } *lineSDW=0; /* In case ZIP Catalog is longer */ if(infp2!=NULL){ while( (fgets(lineZIP, 256, infp2))!=NULL ){ fprintf(outfp, "ZIP: %s", lineZIP); iFlag++; } } *lineZIP=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 fprintf (outfp2, " Watch out at : **** %s\n", openedFN); iFlag=0; *FNToOpen=*openedFN=0; /* Reset, in case */ *openedSDWFNWithPath=0; *openedZIPFNWithPath=0; fclose (infp1); fclose (infp2); fclose (outfp); } /* closing, filenames opened by While-loop */ fclose (infpSDW); fclose (infpOUT); }