194 lines
3.7 KiB
C
194 lines
3.7 KiB
C
#include "wstune.h"
|
|
|
|
#define WSTUNEVER "0.3"
|
|
|
|
|
|
|
|
#define COMMAND_LINE_LEN 128
|
|
#define FILE_NAME_LEN 40
|
|
|
|
#define FAKE_IT 1
|
|
|
|
#define ERR fprintf(stderr
|
|
|
|
VOID wsTuneUsage(VOID);
|
|
|
|
|
|
CHAR *szProgname; /* so all parts of the program will know the name */
|
|
INT nMode;
|
|
|
|
/* main()
|
|
*
|
|
* parses command line args
|
|
*/
|
|
INT _CRTAPI1 main(INT argc,CHAR **argv)
|
|
{
|
|
CHAR szBaseName[24];
|
|
CHAR szFileWSP[24];
|
|
CHAR szFileWSR[24];
|
|
CHAR szFileTMI[24];
|
|
CHAR szFileDAT[24];
|
|
CHAR szVar[24];
|
|
CHAR szTemp[24];
|
|
CHAR *szNull;
|
|
CHAR *vargv[8];
|
|
BOOL fVerbose = FALSE;
|
|
BOOL fOutPut = FALSE;
|
|
BOOL fNoReduce = FALSE;
|
|
BOOL fNoDump = TRUE;
|
|
INT cArgCnt = 0;
|
|
|
|
ConvertAppToOem( argc, argv );
|
|
szProgname = *argv; // argv will soon be clobbered
|
|
nMode = 0; // default flags set
|
|
|
|
while (--argc && (**(++argv) == '-' || **argv=='/'))
|
|
{
|
|
while(*(++(*argv))) switch (**argv)
|
|
{
|
|
case '?':
|
|
wsTuneUsage();
|
|
break;
|
|
|
|
case 'f':
|
|
case 'F':
|
|
nMode |= FAKE_IT;
|
|
break;
|
|
case 'V':
|
|
case 'v':
|
|
fVerbose = TRUE;
|
|
break;
|
|
case 'O':
|
|
case 'o':
|
|
fOutPut = TRUE;
|
|
break;
|
|
case 'N':
|
|
case 'n':
|
|
fNoDump = FALSE;
|
|
break;
|
|
case 'D':
|
|
case 'd':
|
|
|
|
fNoReduce = TRUE;
|
|
break;
|
|
|
|
|
|
default: ERR,"%s: Unrecognized switch: %c\n",
|
|
szProgname,**argv);
|
|
return(-1);
|
|
}
|
|
}
|
|
|
|
/* any files */
|
|
if (argc <1)
|
|
{
|
|
wsTuneUsage();
|
|
return(-1);
|
|
}
|
|
|
|
/* now we go to work -- walk through the file names on the command line */
|
|
while (argc--)
|
|
{
|
|
strcpy (szBaseName, *(argv++));
|
|
|
|
printf("%s: using \042%s\042\n",szProgname,szBaseName);
|
|
|
|
if (szNull = strchr(szBaseName, '.')) {
|
|
*szNull = '\0';
|
|
}
|
|
|
|
/* WSREDUCE file.WSP */
|
|
sprintf(szTemp, "wsReduce");
|
|
vargv[0] = szTemp;
|
|
sprintf(szFileWSP, "%s.WSP", szBaseName);
|
|
vargv[1] = szFileWSP;
|
|
if (!(nMode & FAKE_IT)){
|
|
if(!fNoReduce){
|
|
if ((wsReduceMain(2, vargv))!=NO_ERROR){
|
|
ERR,"Unable to call wsreduce for %s\n", vargv[1]);
|
|
return(FALSE);
|
|
}
|
|
}
|
|
}
|
|
|
|
if(fNoDump){
|
|
|
|
/* WSPDUMP /V /Ffile.WSP /Tfile.TMI /Rfile.WSR > file.DT */
|
|
sprintf(szTemp,"%s", "wspDump");
|
|
sprintf(szVar, "%s", "/V");
|
|
sprintf(szFileWSP, "/F%s.WSP", szBaseName);
|
|
sprintf(szFileTMI, "/T%s.TMI", szBaseName);
|
|
sprintf(szFileWSR, "/R%s.WSR", szBaseName);
|
|
cArgCnt = 5;
|
|
if (fOutPut) {
|
|
sprintf(szFileDAT, "/D%s.DT", szBaseName);
|
|
vargv[5] = szFileDAT;
|
|
cArgCnt = 6;
|
|
}
|
|
|
|
vargv[0] = szTemp;
|
|
vargv[1] = szVar;
|
|
vargv[2] = szFileWSP;
|
|
vargv[3] = szFileTMI;
|
|
vargv[4] = szFileWSR;
|
|
|
|
if(!(nMode & FAKE_IT)){
|
|
if ((wspDumpMain (cArgCnt, vargv))!=NO_ERROR) {
|
|
ERR,"Unable to dump random data\n");
|
|
return(FALSE);
|
|
|
|
}
|
|
}
|
|
|
|
/* wspdump /Ffile.wsp /Tfile.tmi > file.DN */
|
|
vargv[1] = szFileWSP;
|
|
vargv[2] = szFileTMI;
|
|
cArgCnt = 3;
|
|
if (fOutPut) {
|
|
sprintf(szFileDAT, "/D%s.DN", szBaseName);
|
|
vargv[3] = szFileDAT;
|
|
cArgCnt = 4;
|
|
}
|
|
vargv[4] = NULL;
|
|
vargv[5] = NULL;
|
|
|
|
if (!(nMode & FAKE_IT)){
|
|
if ((wspDumpMain(cArgCnt, vargv))!=NO_ERROR ){
|
|
ERR,"Unable to dump sequential data\n");
|
|
return(FALSE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
/*
|
|
*
|
|
* VOID wsTuneUsage (VOID)
|
|
*
|
|
*
|
|
* Effects:
|
|
*
|
|
* Prints out usage message, and exits with an error.
|
|
*
|
|
* Returns:
|
|
*
|
|
* Exits with ERROR.
|
|
*/
|
|
|
|
VOID wsTuneUsage(VOID)
|
|
{
|
|
fprintf(stdout,"\nUsage: %s [/O] [/D] [/N] [?] moduleName.WSP\n", szProgname);
|
|
fprintf(stdout," /O Dump analysis data to file (*.DT tuned *.DN not tuned)\n");
|
|
fprintf(stdout," /D Dump analysis data only\n");
|
|
fprintf(stdout," /N Analyize bitstring data, don't dump any data\n");
|
|
fprintf(stdout," /? Causes this usage message to be displayed.\n");
|
|
|
|
exit(ERROR);
|
|
}
|
|
|
|
|
|
|