/* gccPj002_4.c */ /* = Kdo.c + gccPj002.c (MacOSX) */ /* 2Er - executable file posted */ /* (2005-04-01) The whole "gccPj002.c" inserted into Kdo's main.c, and * then "Header.Txt" is Case-Insensitive. File Pointer "file" * is adjusted to "infpSDW", "infpNET", that's all. */ /* (2007-05-03) There is a wierd 3 Appending Phenomenon on NET_Erased, * It turns out the unstable UPPER OBJECT without ('\0'). * I fixed it by ONE OBJECT version here. */ #include <stdlib.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #include <dirent.h> char line [256]; char upField [128], downField [128]; char FNToOpen [64]; /* = filenamesToOpen */ char openedFN [64]; /* = opendFilename */ char openedFNP [64]; /* = opendFilenameWithPath */ char writingFile [64]; int OPTION; /* Following Two(2) Subroutines from Kdo.c */ FILE *OpenAnyFile (char *FileName); void *strupr (void *buffer); extern char *spacedwd (char *to, char *from); /* = spaced words, to capture blank-containing foldername */ /* In UNIX_Linux, an user prefers no blank file and folder names. */ /* But let me see for a little while. */ /* Erasing Field, 1 */ extern char *copy_a_2_3_4_5_6_7_8_9 (char *to, char *from); /* Erasing Field, 4 */ extern char *copy_b_1_2_3_and_5_6_7_8_9 (char *to, char *from); /* Erasing Fields, 3+4 */ extern char *copy_c_1_2_and_5_6_7_8_9 (char *to, char *from); /* Erasing Fields, 1, 3+4 */ extern char *copy_d_2_and_5_6_7_8_9 (char *to, char *from); /* Erasing Fields, 1, 6+7+8 */ extern char *copy_e_2_3_4_5_and_9 (char *to, char *from); main () { int JUMP_NO; FILE *infpSDW, *infpNET; JUMP_NO=0; infpSDW = OpenAnyFile ("header.txt"); if (infpSDW) printf ("\nReading Header.txt...\n"); else{ printf("\n!!!!! Please put a \"Header.txt\" file about your \n"); printf("!!!!! Folder information. And do this again.\n\n"); exit (0); } /* Reading Header.txt... 2nd time is silent. */ infpNET = OpenAnyFile ("header.txt"); if (infpNET){ printf (" \n"); }else{ exit (0); } /* Now, let's get started. */ printf("Since different UNIX_Linux OS makes slightly different \n"); printf("\"Catalog.txt\", please examine your catalogs at \"SDW\" \n"); printf("and \"NET\" folders, and find out which columns are \n"); printf("different among total nine(9) columns(fields), and come \n"); printf("back here to continue. \n\n"); printf("Please select which combination of column(s)(fields) you \n"); printf("want to erase for easy comparison. \n\n"); printf(" 1. Erasing Field No. 1 \n"); printf(" 2. Erasing Field No. 4 \n"); printf(" 3. Erasing Fields No. 3+4 \n"); printf(" 4. Erasing Fields No. 1, 3+4 \n"); printf(" 5. Erasing Fields No. 1, 6+7+8, Permission + Date,Time \n\n"); printf("Select Your Field(s)_Erasing_Option by Number [1, 2, 3, 4 or 5] : "); scanf("%d", &OPTION); printf(" \n\n\n"); // OPTION==1; OR // OPTION==2; OR // OPTION==3; OR // OPTION==4; OR // OPTION==5; /* ****** Here starts the body of "gccPj002.c" import ******** */ printf("\n\n\nOne moment. Then, go to see if a part of OWNER stamps erased \n"); printf("files are there at SDW/Erased/ and NET/Erased/. If there, we \n"); printf("can go to the last step \"3Diff\". \n\n\n"); /* Read all lines in each catalogs in the SDW folder, and apply Eraser ===== */ while( (fgets(FNToOpen, 64, infpSDW))!=NULL ) { FILE *infp1, *outfp1; /* These fp1s are for SDW */ spacedwd (openedFN, &FNToOpen[0]); /* Opening filename, one-by-one */ sprintf (openedFNP, "./SDW/%s.txt", openedFN); sprintf (writingFile, "./SDW/Erased/%s.txt", openedFN); infp1=fopen(openedFNP, "r"); outfp1=fopen(writingFile, "w"); fprintf (outfp1, "SDW\n"); while( fgets(line, 256, infp1)!=NULL ){ if ( strncmp(line, "total", 5)==0 ) fprintf (outfp1, "total\n"); else if ( strncmp(line, ".:", 2)==0 ) fprintf (outfp1, "%s", line); else if ( strncmp(line, "./", 2)==0 ) fprintf (outfp1, "%s", line); else if ( strncmp(line, "\n", 1)==0 ) fprintf (outfp1, "\n"); else{ /* At here, I need to apply OWNER Stamp Erasing */ /* ** For my Reading convenience, Indent was removed in this section */ /* ***************************************************************** */ /* All Field Sandwitch Eraser Objects starts from &line[0] */ /* The [0] is reminiscence of fixed column control prototype. */ if (OPTION==1) { copy_a_2_3_4_5_6_7_8_9 (upField, &line[0]); /* Erasing Field No.1 Only */ fprintf (outfp1, "%s", upField); /* Blanks for " -rwxrwxr-x" */ } if (OPTION==2) { copy_b_1_2_3_and_5_6_7_8_9 (upField, &line[0]); /* Erasing Field, No.4 Only */ fprintf (outfp1, "%s", upField); /* Blanks for "mkido" OR else */ } if (OPTION==3) { copy_c_1_2_and_5_6_7_8_9 (upField, &line[0]); /* Erasing Fields, 3+4 */ fprintf (outfp1, "%s", upField); /* Blanks for "mkido mkido" OR else */ } if (OPTION==4) { copy_d_2_and_5_6_7_8_9 (upField, &line[0]); /* Erasing Fields, 1, 3+4 */ fprintf (outfp1, "%s", upField); /* Blanks for "-rwxrwxr-x mkido mkido" OR else */ } if (OPTION==5) { copy_e_2_3_4_5_and_9 (upField, &line[0]); /* Erasing Fields, 1, 6+7+8 */ fprintf (outfp1, "%s", upField); /* DEBUG Switch */ /* Blanks for 1st "-rwxrwxr-x" 6th_7th_8th "Apr 11 20:23" */ } /* ** End of Reading convenience, return to normal Indent ************ */ } /* closing Else-loop */ } /* closing While-loop of SDW catalog Reading*/ *openedFN=0; /* Reset, in case */ *openedFNP=0; fclose (infp1); fclose (outfp1); } /* closing, one-by-one file opening While-loop */ fclose (infpSDW); /* RESET, RESET, RESET, it doesn't seems to matter */ *upField = *downField = 0; /* THE 2nd, 2nd, 2nd, 2nd, 2nd for NET, NET, NET, NET */ /* THE 2nd, 2nd, 2nd, 2nd, 2nd for NET, NET, NET, NET */ /* Read all lines in each catalogs in the NET folder, and apply Eraser */ while( (fgets(FNToOpen, 64, infpNET))!=NULL ) { FILE *infp2, *outfp2; /* These fp2s are for NET */ spacedwd (openedFN, &FNToOpen[0]); /* Opening filename, one-by-one */ sprintf (openedFNP, "./NET/%s.txt", openedFN); sprintf (writingFile, "./NET/Erased/%s.txt", openedFN); infp2=fopen(openedFNP, "r"); outfp2=fopen(writingFile, "w"); fprintf (outfp2, "NET\n"); while( fgets(line, 256, infp2)!=NULL ){ if ( strncmp(line, "total", 5)==0 ) fprintf (outfp2, "total\n"); else if ( strncmp(line, ".:", 2)==0 ) fprintf (outfp2, "%s", line); else if ( strncmp(line, "./", 2)==0 ) fprintf (outfp2, "%s", line); else if ( strncmp(line, "\n", 1)==0 ) fprintf (outfp2, "\n"); else{ /* At here, I need to apply OWNER Stamp Erasing */ /* ** For my Reading convenience, Indent was removed in this section */ /* ***************************************************************** */ if (OPTION==1) { copy_a_2_3_4_5_6_7_8_9 (upField, &line[0]); /* Erasing Field No.1 Only*/ fprintf (outfp2, "%s", upField, downField); /* Blanks for " -rwxrwxr-x" */ } if (OPTION==2) { copy_b_1_2_3_and_5_6_7_8_9 (upField, &line[0]); /* Erasing Field No.4 Only*/ fprintf (outfp2, "%s", upField, downField); /* Blanks for "root" (in case of CD) OR else */ } if (OPTION==3) { copy_c_1_2_and_5_6_7_8_9 (upField, &line[0]); /* Erasing Fields, 3+4 */ fprintf (outfp2, "%s", upField); /* Blanks for "root root" OR else */ } if (OPTION==4) { copy_d_2_and_5_6_7_8_9 (upField, &line[0]); /* Erasing Fields, 1, 3+4 */ fprintf (outfp2, "%s", upField); /* Blanks for " -rwxrwxr-x" and "root root" OR else */ } if (OPTION==5) { copy_e_2_3_4_5_and_9 (upField, &line[0]); /* Erasing Fields, 1, 6+7+8 */ fprintf (outfp2, "%s", upField); /* Blanks for 1st "-rwxrwxr-x" and 6th_7th_8th "Apr 11 20:23" */ } /* ** End of Reading convenience, return to normal Indent ************ */ } /* closing Else-loop */ } /* closing While-loop of NET catalog Reading */ *openedFN=0; /* Reset, in case */ *openedFNP=0; fclose (infp2); fclose (outfp2); } /* closing, one-by-one file opening While-loop */ fclose (infpNET); } /* ******** END of "gccPj002.c" import ******************** */ /* Here are two SUBROUTINEs by Kdo. */ /* ******************************** */ /* Find any file with same spelling regardless of capitalization */ /* Return a stream to the file, opened for read access */ FILE *OpenAnyFile (char *FileName) { DIR *Dir; struct dirent *DirEnt; char *Target; char *Temp; FILE *Stream = NULL; Target = strdup (FileName); // make an upper case version of the name. strupr (Target); Dir = opendir ("."); /* any suitable directory name */ while (DirEnt = readdir (Dir)) { Temp = strdup (DirEnt->d_name); strupr (Temp); // convert the found name to upper case if (strcmp (Temp, Target) == 0) // names match { Stream = fopen (DirEnt->d_name, "r"); // open the file for read free (Temp); break; } free (Temp); } free (Target); closedir (Dir); return (Stream); } /* strupr() isn't universal. You can make one very easily. */ /* Pass void so you can pass either char or unsigned char */ /* void *strupr (void *buffer); */ void *strupr (void *Buffer) { unsigned char *ptr; ptr = (unsigned char *)Buffer; while (*ptr) { if (*ptr >= 'a' && *ptr <= 'z') *(ptr++) = (*ptr) - 'a' + 'A'; else ptr++; } return (Buffer); }