/* Pro136i.c */
/* Automatic generation of a pair of DOS Batch Programs. */
/* Read 'DIR.TXT' */
/* Write 'SDWBatch.TXT', 'ZIPBatch.TXT', and 'LookUp.Txt' */
/* Since introduction of "/b (brief)" switch, no OS difference. */
/* dir /b /on > C:\1Dual\DIR.txt */
/* Now,
1. Win3.1 [0]
2. Win95/98 [0]
3. WinXP [0]
4. Win2000 [0] */
/* Regarding OS switch, Win95/98/2000/XP needs double quotes
"directory name" for blank space, while Win3.1 shouldn't use
double quotes. But I haven't impremented Win3.1 here. */
#include <stdio.h>
#include <string.h>
#include <conio.h>
#include <dos.h>
#include <stdlib.h>
char inline [256];
char id [128];
extern char *spacedwd (char *to, char *from); /* Recycling Object */
void main(void){
char str[64], strPause[16];
int i, JUMP_NO;
/* i is "catlg000 couting up */
/* Jump_No used to use as MagicNumber depend on OS version. */
FILE *infp, *outfp1, *outfp2, *outfp3;
/* infp reads "Dir.Txt" (three times) */
/* outfp1 writes "SDWBatch.Txt", outfp2 writes "ZIPBatch.Txt" */
/* outpf3 writes "LookUp.Txt" */
i=1;
JUMP_NO=0;
/* The following codes infp=fopen() is out of place, but COPIED UP HERE */
/* Because, missing notice "Dir.Txt" should be earlier than user's input. */
/* See below the Origirnal place of to read the codes. */
/* The following ";" is meant to continue. */
if ( (infp=fopen("DIR.txt", "r"))!= NULL )
;
else{
printf("!!! Please put a \"Dir.Txt\" file about your disk\'s directory information.\n");
printf("!!! Please refer to an introductory .PDF about \"Dir.Txt\". \n");
printf("!!! And do this again. \n\n");
printf("Type any character key and [ENTER] to close this message: ");
scanf("%s", &strPause);
exit (0);
}
printf("\nPlease type this working directory\'s drive name, colon(:), \n");
printf("backslash(\\) and path. \n\n");
printf("For example, \n");
printf(" C:\\1temp [Enter] \n");
printf(" D:\\Dual [Enter] \n");
printf(" f:\\1dual [Enter] \n");
printf("Type here: ");
scanf("%s", &str);
clrscr();
printf("\nWorking Directory is set to \"%s\"\n\n", str);
/* ======================================================= */
/* Original Place, missing "Dir.Txt" notice */
/* The following ";" is meant to continue. */
// if ( (infp=fopen("DIR.txt", "r"))!= NULL )
// ;
// else{
// printf("!!! Please put a \"Dir.Txt\" file about your directory information.\n");
// printf("!!! And do this again. \n\n");
// exit (0);
// }
outfp1=fopen("SDWBatch.TXT", "w");
fgets(inline, 256, infp); /* The 1st one starts without ..(go up) */
spacedwd(id, &inline[JUMP_NO]);
fprintf (outfp1, "cd \"%s\"\n", id); /* id = directories in Master ZIP */
fprintf (outfp1, "dir /s /on > %s\\SDW\\catlg00%d.Txt\n", str, i++);
/* The 2nd one and later need ..(go up) */
while(fgets(inline, 256, infp)!=NULL){
if(strncmp(inline, " ", 6)==0)break; /* To deal the last two incoming lines */
spacedwd(id, &inline[JUMP_NO]);
fprintf (outfp1, "cd ..\\\"%s\"\n", id);
if (i<=9) fprintf (outfp1, "dir /s /on > %s\\SDW\\catlg00%d.Txt\n", str, i);
if (i>=10 && i<=99) fprintf (outfp1, "dir /s /on > %s\\SDW\\catlg0%2d.Txt\n", str, i);
if (i>=100 && i<=999) fprintf (outfp1, "dir /s /on > %s\\SDW\\catlg%3d.Txt\n", str, i);
i++;
}
fclose (infp);
fclose (outfp1);
/* =========== ANOTHER SET, ZIP_FLASH =================*/
i=1;
infp=fopen("DIR.txt", "r");
outfp2=fopen("ZIPBatch.TXT", "w");
fgets(inline, 256, infp); /* The 1st one starts without ..(go up) */
spacedwd(id, &inline[JUMP_NO]);
fprintf (outfp2, "cd \"%s\"\n", id);
fprintf (outfp2, "dir /s /on > %s\\ZIP_FL\\catlg00%d.Txt\n", str, i++);
/* The 2nd one and later need ..(go up) */
while(fgets(inline, 256, infp)!=NULL){
if(strncmp(inline, " ", 6)==0)break; /* To deal the last two incoming lines */
spacedwd(id, &inline[JUMP_NO]);
fprintf (outfp2, "cd ..\\\"%s\"\n", id);
if (i<=9) fprintf (outfp2, "dir /s /on > %s\\ZIP_FL\\catlg00%d.Txt\n", str, i);
if (i>=10 && i<=99) fprintf (outfp2, "dir /s /on > %s\\ZIP_FL\\catlg0%2d.Txt\n", str, i);
if (i>=100 && i<=999) fprintf (outfp2, "dir /s /on > %s\\ZIP_FL\\catlg%3d.Txt\n", str, i);
i++;
}
fclose (infp);
fclose (outfp2);
i=0; /* reset */
/* ===== ANOTHER OUTPUT, NOT BATCH FILE BUT LOOKUP.TXT =============*/
/* ===== Making "LOOKUP.TXT" file for '4Eraser.exe' and
'5Diff.exe', behind the scene. ===========================*/
infp=fopen("DIR.txt", "r");
outfp3=fopen("LOOKUP.TXT", "w");
i=1;
while(fgets(inline, 256, infp)!=NULL){
if(strncmp(inline, " ", 6)==0)break; /* To deal the last two incoming lines */
spacedwd(id, &inline[JUMP_NO]);
if (i<=9) fprintf (outfp3, " catlg00%d <=> %s\n", i, id);
if (i>=10 && i<=99) fprintf (outfp3, " catlg0%2d <=> %s\n", i, id);
if (i>=100 && i<=999) fprintf (outfp3, " catlg%3d <=> %s\n", i, id);
i++;
}
i=0; /* reset */
fclose (infp);
fclose (outfp3);
printf("\n\nType any character key and [ENTER] to close this message: ");
scanf("%s", &strPause);
}