/* Pro134E.c */
/* "3Eraser.Exe" */
/* Word Capture in the middle of 'inline' by Memory Location '&inline[]'. */
/* This is Portable version of 'Pro134D.exe' (DATE-TIME Stamp Eraser)
* to share.
*/
/* Read 'LOOKUP.TXT' file.
* Two Magic Numbers, MgPath[SDW,ZIP], became a user's input.
* MgDrive was added as a user's Drive name.
* OS was added as an user's Catalogs' Creator OS version.
*/
/* User's input Drive name is introduced, and bypassed in one way,
* and strictly recognized in another way. See deails in comment.
*/
/* (2005-02-09) */
/* I simplified the codes before Switch (Win3.1; Win95/98; WinXP).
* Now is to try Global Variable to pass to Object, ColAdvPt
* Column Advancing Pointer. Before do that, I test the OS
* version switch, intermediate step just for OS1-Win95/98.
* OS1-Win95/98 works. Now is the time to try Global.
* Global variable passing to Recycle Object is working,
* at lest OS1(Win95/98). Let me try to consolidate the
* ColAdPt1 and ColAdPt2, because the matter is only
* Advancing Column Numbers.
* During the development, I used two different Column_Advancing_Pointer
* with fixed ADV_NO1 and ADV_NO2.
* ColAdvPt1 (wordColumnBegin, &inline[iBegin], ADV_NO1);
* ColAdvPt2 (wordColumnErase, &inline[iErase], ADV_NO2);
* Now, I simplified to only one.
* ColAdvPtr (wordColumnBegin, &inline[iBegin], ADV_NO1);
* ColAdvPtr (wordColumnErase, &inline[iErase], ADV_NO2);
* so that Recycle Object is taking any ADV_NO which is assinged in
* the main.c Codes. The compiler claimed a warning about
* "int *adv_no"
* but it is working as a whole. So I keep.
* One more test in Win95/98, then test in WinXP.
*/
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <conio.h>
char inline [256];
char jumpThere [128];
char wordColumnBegin [128];
char wordColumnErase [128];
char wordColumnFinish [128];
char openingFile [64];
char openedFN [64]; /* openedFN = openedFilename */
char openedFNP [128]; /* openedFNP = openedFileNameWithPath */
char writingFile [64];
// char name1 [64];
char name2 [64]; /* About user's input Drive name + alpha */
static int ADV_NO1, ADV_NO2; /* For Eraser, "ColAdvPtr.o", Global Fixed Numbers for Pointer Advancing */
extern char *firstwd (char *to, char *from);
extern char *shiftedLine (char *to, char *from); /* Pro998-2.c */
extern char *ColAdvPt (char *to, char *from, int ADV_NO1); /* Column_Advancing_Pointer */
extern char *ColAdvPt (char *to, char *from, int ADV_NO2); /* Column_Advancing_Pointer */
//extern char *ColAdvPt2 (char *to, char *from, int *position); /* Column_Advancing_Pointer */
extern char *ColFinPt (char *to, char *from); /* Column_Finishing_Pointer */
//extern char *ColFinPt (char *to, char *from, int *position); /* Column_Finishing_Pointer */
void main(void){
char MgDrive[16], UpperLetterMgDrive[16];
char strPause[16];
int i, MgPathSDW, MgPathZIP;
int OS;
int iBegin, iErase, iFinish;
FILE *infpSDW, *infpZIP;
infpSDW=fopen ("LOOKUP.TXT", "r");
infpZIP=fopen ("LOOKUP.TXT", "r");
/* Right now, both 'SDW(ZIP)-head.TXT' are the same, so this doesn't make sense. But for convenience of opening another set of file listing. */
i=MgPathSDW=MgPathZIP=0;
iBegin=iErase=iFinish=0; /* This is local variables */
printf("Now we need a little adjustment about Path differences in files.\n");
printf("For example, your files in \\SDW\\ and \\ZIP\\ looks like this.\n\n");
printf("Directory of C:\\TO-CD\\CORP.02\\001-DIRC.TRY (SDW in Hard disk)\n");
printf("Directory of E:\\001-DIRC.TRY (From ZIP disk)\n");
printf("1...5....0....5....0....5....0....5\n");
printf("1 10 20 30 \n\n");
printf("In this case, if we erase 29 charaters for SDW and 15 for ZIP, \n");
printf("then, they become the same \\001-DIRC.TRY. Thus, erase the path \n");
printf("difference by setting,\n");
printf(" MgPathSDW is 29,\n");
printf(" MgPathZIP is 15.\n");
printf("Count carefully by using a cursor. And come back here to go to \n");
printf("the next step below. To exit now, as always [Ctrl]-key + [C]-key.\n\n");
printf("Type Number of MgPathSDW : ");
scanf("%d", &MgPathSDW);
printf("Magic Path for SDW is set to %d.\n\n", MgPathSDW);
printf("Type Number of MgPathZIP : ");
scanf("%d", &MgPathZIP);
printf("Magic Path for ZIP is set to %d.\n\n", MgPathZIP);
printf("Type Drive Name of Your ZIP Disk: ");
scanf("%s", &MgDrive);
UpperLetterMgDrive[0]=toupper(MgDrive[0]);
UpperLetterMgDrive[1]='\0'; /* Without this, the Drive name was unstable. */
printf("Drive name for ZIP is set to %s.\n\n", UpperLetterMgDrive );
clrscr();
/* ======================================================= */
printf("Since different OS makes slightly different Catalog.Txt, \n");
printf("please select the OS version where you are running here now. \n\n");
printf(" 1. Win95\/Win98\n");
printf(" 2. WinXP\n\n");
printf("Select Your OS verions by Number [1 or 2] : ");
scanf("%d", &OS);
clrscr();
if (OS==1) { ADV_NO1=28; ADV_NO2=15; } /* I can recycle this to be Global variable to Objects */
if (OS==2) { ADV_NO2=20; }
// printf("ADV_NO1 and ADV_NO2 are set to %d and %d respectively.\n\n", ADV_NO1, ADV_NO2 );
/* ======================================================= */
printf("One moment. Then, go to see if DATE-TIME stamps erased\n");
printf("files are there at \\SDW\\ERASED and \\ZIP\\ERASED.\n");
printf("If there, we can go to the final step '4Diff.exe'.\n");
printf("In case directory Path difference are not erased, count \n");
printf("Magic Path (SDW and ZIP) again, and run this Program again.\n\n");
printf("Type any character key and [ENTER] to close this message : ");
scanf("%s", &strPause);
while( (fgets(openingFile, 64, infpSDW))!=NULL )
{
FILE *infp1, *outfp1;
firstwd (openedFN, &openingFile[2]); /* This firstwd() is important to capture the filename */
/* without extra blanks and a carrige return. */
sprintf(openedFNP, "SDW\\%s.Txt", openedFN);
infp1=fopen ( openedFNP, "r");
sprintf(writingFile, "SDW\\ERASED\\%s.Txt", openedFN);
outfp1=fopen( writingFile, "w");
i++; /* Maximum i is the MgFileNo in Array version */
while(fgets(inline, 256, infp1)!=NULL){
if (strncmp(inline, " Volume in drive C", 18)==0)
fprintf (outfp1, "C\:\n");
else if(strncmp(inline, " Volume Serial", 14)==0)
;
else if(strncmp(inline, "Directory of C", 14)==0){ /* Win95/98 */
shiftedLine(jumpThere, &inline[MgPathSDW]);
fprintf (outfp1, "%s", jumpThere);
}else if(strncmp(inline, " Directory of C", 15)==0){ /* WinXP */
shiftedLine(jumpThere, &inline[MgPathSDW]);
fprintf (outfp1, "%s", jumpThere);
}else if(strncmp(inline, "\n", 1)==0)
fprintf (outfp1, "\n");
else if(strncmp(inline, " ", 6)==0)
fprintf (outfp1, "%s", inline);
else if(strncmp(inline, "Total", 5)==0)
fprintf (outfp1, "%s", inline);
/* For this moment, I do ELSE, assuming Win95/98, if getting work, else if for Others */
// else if (OS=2) /* At here, I need to apply DATE-TIME Stamp Erasing */
else /* At here, I need to apply DATE-TIME Stamp Erasing */
{
if(OS==1) { iBegin=0; iErase=29; iFinish=44; }
if(OS==2) { iErase=0; iFinish=21; }
if(OS==1) ColAdvPt (wordColumnBegin, &inline[iBegin], ADV_NO1);
ColAdvPt (wordColumnErase, &inline[iErase], ADV_NO2);
ColFinPt (wordColumnFinish, &inline[iFinish]);
fprintf (outfp1, "%s", wordColumnBegin);
if(OS==1){ fprintf (outfp1, " "); }
if(OS==2){ fprintf (outfp1, " "); }
fprintf (outfp1, "%s", wordColumnFinish);
*wordColumnBegin =0; /* Reset */
*wordColumnErase =0;
*wordColumnFinish =0;
iBegin=iErase=iFinish=0; /* reset, in case */
}
}
*openedFN=0; /* Reset, in case */
*openedFNP=0;
fclose (infp1);
fclose (outfp1);
} /* Close the first Filename changing WHILE-LOOP for SDW */
MgPathSDW=0; /* Reset */
fclose (infpSDW);
/* ============ SECOND SET FOR ZIP ========================*/
/* ============ ========================*/
/* ========================================================*/
while( (fgets(openingFile, 64, infpZIP))!=NULL )
{
FILE *infp2, *outfp2;
firstwd (openedFN, &openingFile[2]);
sprintf(openedFNP, "ZIP\\%s.Txt", openedFN);
infp2=fopen ( openedFNP, "r");
sprintf(writingFile, "ZIP\\ERASED\\%s.Txt", openedFN);
outfp2=fopen( writingFile, "w");
/* Appending user's input Drive name to strings */
// strcat(name1, " Volume in drive ");
// strcat(name1, UpperLetterMgDrive);
if (OS==1) strcat(name2, "Directory of ");
if (OS==2) strcat(name2, " Directory of ");
strcat(name2, UpperLetterMgDrive);
i++; /* Maximum i is the MgFileNo in Array version */
while(fgets(inline, 256, infp2)!=NULL){
if(strncmp(inline, " Volume in drive", 16)==0){
fprintf (outfp2, "%s\:\n", UpperLetterMgDrive);
/* Bypassing strict recognition of Drive name */
// else if(strncmp(inline, name1, 18)==0)
// fprintf (outfp2, "%s\:\n", UpperLetterMgDrive);
/* This recognition worked only partially, see comment. */
}else if(strncmp(inline, " Volume Serial", 14)==0)
;
else if(strncmp(inline, name2, 14)==0){
shiftedLine(jumpThere, &inline[MgPathZIP]);
fprintf (outfp2, "%s", jumpThere);
/* Keeping strict recognition of Drive name */
}else if(strncmp(inline, "\n", 1)==0)
fprintf (outfp2, "\n");
else if(strncmp(inline, " ", 6)==0)
fprintf (outfp2, "%s", inline);
else if(strncmp(inline, "Total", 5)==0)
fprintf (outfp2, "%s", inline);
/* For this moment, I do ELSE, assuming Win95/98, if getting work, else if for Others */
// else if (OS=2) /* At here, I need to apply DATE-TIME Stamp Erasing */
else /* At here, I need to apply DATE-TIME Stamp Erasing */
{
if(OS==1) { iBegin=0; iErase=29; iFinish=44; }
if(OS==2) { iErase=0; iFinish=21; }
if(OS==1) ColAdvPt (wordColumnBegin, &inline[iBegin], ADV_NO1);
ColAdvPt (wordColumnErase, &inline[iErase], ADV_NO2);
ColFinPt (wordColumnFinish, &inline[iFinish]);
fprintf (outfp2, "%s", wordColumnBegin);
if(OS==1){ fprintf (outfp2, " "); }
if(OS==2){ fprintf (outfp2, " "); }
// fprintf (outfp2, " ");
fprintf (outfp2, "%s", wordColumnFinish);
*wordColumnBegin =0; /* Reset */
*wordColumnErase =0;
*wordColumnFinish =0;
iBegin=iErase=iFinish=0; /* reset, in case */
}
}
fclose (infp2);
fclose (outfp2);
} /* Close the second Filename changing WHILE-LOOP for ZIP */
MgPathZIP=0; /* Reset */
// *name1=0;
*name2=0;
fclose (infpZIP);
}