335 lines
9.6 KiB
C++
335 lines
9.6 KiB
C++
|
#include "main.h"
|
||
|
#include "depends.h"
|
||
|
#include "resource.h"
|
||
|
|
||
|
//
|
||
|
// Code by AaronL
|
||
|
// copied most of it from the depends source code.
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// prototypes...
|
||
|
//
|
||
|
int __cdecl main(int ,char *argv[]);
|
||
|
void ShowHelp(void);
|
||
|
|
||
|
void ProcessManyFiles(char * szTheDir, char * szTheFileNameOrWildCard);
|
||
|
void ProcessOneFile(LPSTR szTempFileName);
|
||
|
void OutputToScreen(char * szTheString1, char * szTheString2);
|
||
|
|
||
|
//
|
||
|
// Globals
|
||
|
//
|
||
|
int g_Flag_R = FALSE;
|
||
|
|
||
|
HINSTANCE g_hModuleHandle = NULL;
|
||
|
|
||
|
#define ALL_FILES 0xff
|
||
|
|
||
|
//-------------------------------------------------------------------
|
||
|
// purpose: main
|
||
|
//-------------------------------------------------------------------
|
||
|
int __cdecl main(int argc,char *argv[])
|
||
|
{
|
||
|
LPSTR pArg = NULL;
|
||
|
LPSTR pCmdStart = NULL;
|
||
|
|
||
|
int argno;
|
||
|
int nflags=0;
|
||
|
char szTempFileName[MAX_PATH];
|
||
|
char szTempString[MAX_PATH];
|
||
|
szTempFileName[0] = '\0';
|
||
|
|
||
|
g_hModuleHandle = GetModuleHandle(NULL);
|
||
|
|
||
|
// process command line arguments
|
||
|
for(argno=1; argno<argc; argno++)
|
||
|
{
|
||
|
if ( argv[argno][0] == '-' || argv[argno][0] == '/' )
|
||
|
{
|
||
|
nflags++;
|
||
|
switch (argv[argno][1])
|
||
|
{
|
||
|
case 'r':
|
||
|
case 'R':
|
||
|
g_Flag_R = TRUE;
|
||
|
break;
|
||
|
case '?':
|
||
|
goto main_exit_with_help;
|
||
|
break;
|
||
|
}
|
||
|
} // if switch character found
|
||
|
else
|
||
|
{
|
||
|
if ( *szTempFileName == '\0' )
|
||
|
{
|
||
|
// if no arguments, then
|
||
|
strcpy(szTempFileName, argv[argno]);
|
||
|
}
|
||
|
} // non-switch char found
|
||
|
} // for all arguments
|
||
|
|
||
|
char szTheDriveOnly[_MAX_DRIVE];
|
||
|
char szTheDirOnly[_MAX_DIR];
|
||
|
char szTheFileNameOnly[_MAX_FNAME];
|
||
|
char szTheEXTOnly[_MAX_EXT];
|
||
|
|
||
|
char szTheFileNameAndExt[_MAX_FNAME + _MAX_EXT];
|
||
|
char szTheDriveAndDir[_MAX_PATH];
|
||
|
|
||
|
if (strcmp(szTempFileName, "") == 0)
|
||
|
{
|
||
|
goto main_exit_with_help;
|
||
|
}
|
||
|
_splitpath(szTempFileName, szTheDriveOnly, szTheDirOnly, szTheFileNameOnly, szTheEXTOnly);
|
||
|
sprintf(szTheFileNameAndExt, "%s%s", szTheFileNameOnly, szTheEXTOnly);
|
||
|
sprintf(szTheDriveAndDir, "%s%s", szTheDriveOnly, szTheDirOnly);
|
||
|
|
||
|
ProcessManyFiles(szTheDriveAndDir, szTheFileNameAndExt);
|
||
|
|
||
|
goto main_exit_gracefully;
|
||
|
|
||
|
main_exit_gracefully:
|
||
|
return TRUE;
|
||
|
|
||
|
main_exit_with_help:
|
||
|
ShowHelp();
|
||
|
return FALSE;
|
||
|
}
|
||
|
|
||
|
|
||
|
void ShowHelp()
|
||
|
{
|
||
|
char szModuleName[_MAX_PATH];
|
||
|
char szFilename_only[_MAX_FNAME];
|
||
|
char szMyBigString[255];
|
||
|
char szMyPrintString[255 + _MAX_PATH];
|
||
|
GetModuleFileName(NULL, szModuleName, _MAX_PATH);
|
||
|
|
||
|
// Trim off the filename only.
|
||
|
_tsplitpath(szModuleName, NULL, NULL, szFilename_only, NULL);
|
||
|
|
||
|
MyLoadString(IDS_STRING1, szMyBigString);
|
||
|
sprintf(szMyPrintString, szMyBigString, szFilename_only);
|
||
|
printf(szMyPrintString);
|
||
|
|
||
|
MyLoadString(IDS_STRING2, szMyBigString);
|
||
|
printf(szMyBigString);
|
||
|
|
||
|
MyLoadString(IDS_STRING3, szMyBigString);
|
||
|
sprintf(szMyPrintString, szMyBigString, szFilename_only);
|
||
|
printf(szMyPrintString);
|
||
|
|
||
|
MyLoadString(IDS_STRING4, szMyBigString);
|
||
|
sprintf(szMyPrintString, szMyBigString, szFilename_only);
|
||
|
printf(szMyPrintString);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
void ProcessOneFile(char * szTempFileName)
|
||
|
{
|
||
|
CDepends DependsStuff;
|
||
|
char szMyPrintString[_MAX_PATH + 50];
|
||
|
sprintf(szMyPrintString, "%s\r\n", (LPSTR) szTempFileName);
|
||
|
printf(szMyPrintString);
|
||
|
|
||
|
DependsStuff.SetInitialFilename(szTempFileName);
|
||
|
|
||
|
if (DependsStuff.m_fOutOfMemory)
|
||
|
{
|
||
|
char szMyBigString[_MAX_PATH + 50];
|
||
|
MyLoadString(IDS_STRING5, szMyBigString);
|
||
|
sprintf(szMyPrintString, szMyBigString, (LPSTR) szTempFileName);
|
||
|
printf(szMyPrintString);
|
||
|
}
|
||
|
|
||
|
// Display a message if the module contains a circular dependency error.
|
||
|
if (DependsStuff.m_fCircularError)
|
||
|
{
|
||
|
char szMyBigString[_MAX_PATH + 50];
|
||
|
MyLoadString(IDS_STRING6, szMyBigString);
|
||
|
sprintf(szMyPrintString, szMyBigString, (LPSTR) szTempFileName);
|
||
|
printf(szMyPrintString);
|
||
|
}
|
||
|
|
||
|
// Display a message if the module contains a mixed machine error.
|
||
|
if (DependsStuff.m_fMixedMachineError)
|
||
|
{
|
||
|
//sprintf(szMyPrintString, " MixedMachineError:%s\r\n", (LPSTR) szTempFileName);
|
||
|
//printf(szMyPrintString);
|
||
|
}
|
||
|
|
||
|
DependsStuff.LoopThruAndPrintLosers(DependsStuff.m_pModuleRoot);
|
||
|
DependsStuff.DeleteContents();
|
||
|
}
|
||
|
|
||
|
|
||
|
void ProcessManyFiles(char * szTheDir, char * szTheFileNameOrWildCard)
|
||
|
{
|
||
|
WIN32_FIND_DATA FindFileData;
|
||
|
char szTheFullMonty[_MAX_PATH];
|
||
|
char szTheRealWildcards[_MAX_PATH];
|
||
|
int iFoundWildCard = FALSE;
|
||
|
|
||
|
if (0 == strcmp(szTheDir, ""))
|
||
|
{
|
||
|
// if there is no specified directory
|
||
|
strcpy(szTheFullMonty, szTheFileNameOrWildCard);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// if there is a dir, check if ends with a '\'
|
||
|
// if it does, then kool, if it doesn't then add it.
|
||
|
// then tack them together
|
||
|
char *pTemp = NULL;
|
||
|
pTemp = strrchr(szTheDir, (int) '\\');
|
||
|
if (pTemp != NULL)
|
||
|
{
|
||
|
sprintf(szTheFullMonty, "%s%s", szTheDir, szTheFileNameOrWildCard);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprintf(szTheFullMonty, "%s\\%s", szTheDir, szTheFileNameOrWildCard);
|
||
|
}
|
||
|
}
|
||
|
//printf(szTheFullMonty);printf("<--\n");
|
||
|
|
||
|
// if the fullmonty is a directory
|
||
|
// then we have a directory.
|
||
|
// get out.
|
||
|
int retCode = GetFileAttributes(szTheFullMonty);
|
||
|
if (retCode == 0xFFFFFFFF || (retCode & FILE_ATTRIBUTE_DIRECTORY))
|
||
|
{
|
||
|
// if there are wildcards in there, then
|
||
|
// let it come thru, if not get out.
|
||
|
char szFileNamePart[_MAX_FNAME];
|
||
|
char *pdest = NULL;
|
||
|
strcpy(szFileNamePart, szTheFileNameOrWildCard);
|
||
|
pdest = strrchr(szFileNamePart, (int) '?');
|
||
|
if (pdest != NULL)
|
||
|
{
|
||
|
iFoundWildCard = TRUE;
|
||
|
}
|
||
|
|
||
|
if (FALSE == iFoundWildCard)
|
||
|
{
|
||
|
pdest = NULL;
|
||
|
pdest = strrchr(szFileNamePart,(int) '*');
|
||
|
if (pdest != NULL)
|
||
|
{
|
||
|
iFoundWildCard = TRUE;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if (FALSE == iFoundWildCard)
|
||
|
{
|
||
|
return;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// if we have something which includes wildcards,
|
||
|
// then change it to *.*
|
||
|
if (TRUE == iFoundWildCard)
|
||
|
{
|
||
|
char szTheDriveOnly[_MAX_DRIVE];
|
||
|
char szTheDirOnly[_MAX_DIR];
|
||
|
char szTheFileNameOnly[_MAX_FNAME];
|
||
|
char szTheEXTOnly[_MAX_EXT];
|
||
|
char szTheFileNameAndExt[_MAX_FNAME + _MAX_EXT];
|
||
|
char szTheDriveAndDir[_MAX_PATH];
|
||
|
|
||
|
_splitpath(szTheFullMonty, szTheDriveOnly, szTheDirOnly, szTheFileNameOnly, szTheEXTOnly);
|
||
|
sprintf(szTheFileNameAndExt, "%s%s", szTheFileNameOnly, szTheEXTOnly);
|
||
|
sprintf(szTheDriveAndDir, "%s%s", szTheDriveOnly, szTheDirOnly);
|
||
|
|
||
|
printf(szTheFullMonty);
|
||
|
printf("\n");
|
||
|
printf(szTheFileNameAndExt);
|
||
|
printf("\n");
|
||
|
printf(szTheFileNameAndExt);
|
||
|
printf("\n");
|
||
|
}
|
||
|
|
||
|
HANDLE hFile = FindFirstFile(szTheFullMonty, &FindFileData);
|
||
|
if (hFile != INVALID_HANDLE_VALUE)
|
||
|
{
|
||
|
do {
|
||
|
//printf("=%s\n",FindFileData.cFileName);
|
||
|
if ( _tcsicmp(FindFileData.cFileName, _T(".")) != 0 && _tcsicmp(FindFileData.cFileName, _T("..")) != 0 )
|
||
|
{
|
||
|
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
|
||
|
{
|
||
|
// this is a directory, so let's skip it
|
||
|
// if it's supposed to recurse thru dirs, then let's go into it.
|
||
|
if (TRUE == g_Flag_R)
|
||
|
{
|
||
|
char szSubDir[_MAX_PATH];
|
||
|
_stprintf(szSubDir, _T("%s"), FindFileData.cFileName);
|
||
|
|
||
|
//printf("found dir=%s,filename=%s\n",szSubDir,szTheFileNameOrWildCard);
|
||
|
ProcessManyFiles(szSubDir, szTheFileNameOrWildCard);
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
// this is a file, so let's do something
|
||
|
char szTempFileName[_MAX_PATH];
|
||
|
|
||
|
if (0 == strcmp(szTheDir, ""))
|
||
|
{
|
||
|
// if there is no specified directory
|
||
|
strcpy(szTempFileName,FindFileData.cFileName);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
char *pTemp = NULL;
|
||
|
pTemp = strrchr(szTheDir, (int) '\\');
|
||
|
if (pTemp != NULL)
|
||
|
{
|
||
|
sprintf(szTempFileName, "%s%s", szTheDir, FindFileData.cFileName);
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
sprintf(szTempFileName, "%s\\%s", szTheDir, FindFileData.cFileName);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// This is a file so lets act upon it.
|
||
|
ProcessOneFile(szTempFileName);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// get the next file
|
||
|
if ( !FindNextFile(hFile, &FindFileData) )
|
||
|
{
|
||
|
FindClose(hFile);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
} while (TRUE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
void OutputToScreen(char * szTheString1, char * szTheString2)
|
||
|
{
|
||
|
char szMyPrintString[_MAX_PATH + _MAX_PATH];
|
||
|
sprintf(szMyPrintString, szTheString1, szTheString2);
|
||
|
printf(szMyPrintString);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
|
||
|
void MyLoadString(int nID, char *szResult)
|
||
|
{
|
||
|
char buf[1024];
|
||
|
|
||
|
if (g_hModuleHandle == NULL) {return;}
|
||
|
|
||
|
if (LoadString(g_hModuleHandle, nID, buf, sizeof(buf)))
|
||
|
{strcpy(szResult, buf);}
|
||
|
|
||
|
return;
|
||
|
}
|