windows-nt/Source/XPSP1/NT/sdktools/wst/wstune/wstune.c
2020-09-26 16:20:57 +08:00

192 lines
4 KiB
C

/*
* Module Name: WSTUNE.C
*
* Program: WSTUNE
*
*
* Description:
*
* Shell to call former programs WSDUMP and WSREDUCE
*
*
* Microsoft Confidential
*
* Copyright (c) Microsoft Corporation 1992-1998
*
* All Rights Reserved
*
* Modification History:
*
* 8-31-92: Made single exe from wspdump, wsreduce and wstune marklea
* 4-13-98: QFE DerrickG (mdg):
* - support for long file names (LFN) of input/output files
* - based .TMI file name exclusively on .WSP name for consistency
* - removed limit on symbol name lengths
* - removed -F & -V flags for non-debug; made verbose global for WsRed...()
* - made program name & version global; read version from ntverp.h
*
*
*/
#include "wstune.h"
#include <ntverp.h>
#define COMMAND_LINE_LEN 128
#define FILE_NAME_LEN 40
#define FAKE_IT 1
#define ERR fprintf(stderr
VOID wsTuneUsage(VOID);
CHAR *szProgName = "WSTUNE";
CHAR *pszVersion = VER_PRODUCTVERSION_STR; // Current product version number
INT nMode;
#ifdef DEBUG
BOOL fDbgVerbose = FALSE;
#endif // DEBUG
/* main()
*
* parses command line args
*/
INT __cdecl main(INT argc,CHAR **argv)
{
CHAR *szBaseName = NULL;
CHAR *szNull;
BOOL fOutPut = FALSE;
BOOL fNoReduce = FALSE;
BOOL fNoDump = FALSE;
INT cArgCnt = 0;
ConvertAppToOem( argc, argv );
nMode = 0; // default flags set
while (--argc && (**(++argv) == '-' || **argv=='/'))
{
while(*(++(*argv))) switch (**argv)
{
case '?':
wsTuneUsage();
break;
#ifdef DEBUG
case 'f':
case 'F':
nMode |= FAKE_IT;
break;
#endif // DEBUG
case 'O':
case 'o':
fOutPut = TRUE;
break;
case 'N':
case 'n':
fNoDump = TRUE;
break;
case 'D':
case 'd':
fNoReduce = TRUE;
break;
#ifdef DEBUG
case 'V':
case 'v':
fDbgVerbose = TRUE;
break;
#endif // DEBUG
case 'P':
case 'p':
fWsIndicator = 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--)
{
szBaseName = *(argv++);
printf("%s: using \042%s\042\n",szProgName,szBaseName);
if (szNull = strchr(szBaseName, '.'), szNull) {
*szNull = '\0';
}
/* WSREDUCE file.WSP */
if (!(nMode & FAKE_IT)){
if (!fNoReduce){
wsReduceMain( szBaseName );
}
}
if (!fNoDump){
/* WSPDUMP /V /Ffile.WSP /Tfile.TMI /Rfile.WSR > file.DT */
if(!(nMode & FAKE_IT)){
wspDumpMain( szBaseName, (fOutPut ? ".DT" : NULL), TRUE, TRUE );
}
/* wspdump /Ffile.wsp /Tfile.tmi > file.DN */
if (!(nMode & FAKE_IT) && fOutPut){
wspDumpMain( szBaseName, ".DN", FALSE, FALSE );
}
}
}
return 0; // mdg 98/4
}
/*
*
* VOID wsTuneUsage (VOID)
*
*
* Effects:
*
* Prints out usage message, and exits with an error.
*
* Returns:
*
* Exits with ERROR.
*/
VOID wsTuneUsage(VOID)
{
printf("\nUsage: %s [/O] [/D] [/N] [?] moduleName1[.WSP] [...]\n\n", szProgName);
printf(
" /O Dump analysis data to file (*.DT tuned, *.DN not tuned)\n"
" /N Analyze bitstring data only, create .WSR and .PRF files (turns off /O)\n"
" /D Dump analysis data only; use existing .WSR file (turns off /N)\n"
#ifdef DEBUG
" /F Fake run for command-line parser debugging\n"
" /V Verbose mode for debugging\n"
#endif // DEBUG
" /P Display a progress indicator\n"
" /? Display this usage message\n\n"
" \"moduleNameX\" is the name(s) of the module file(s) to tune.\n\n"
);
printf("%s %s\n", szProgName, pszVersion);
exit(ERROR);
}