Source code of Windows XP (NT5)
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//+---------------------------------------------------------------------------
//
// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1997.
//
// File: M A I N . C P P
//
// Contents: Tool for merging icons
//
// Author: jeffspr Nov-18-98
//
//----------------------------------------------------------------------------
#include "pch.h"
#pragma hdrstop
#include "ncdebug.h"
#include "icomerge.h"
#include "tchar.h"
//---[ Globals ]--------------------------------------------------------------
BOOL g_fVerbose = FALSE; BOOL g_fDebugOnly = FALSE;
WCHAR g_szInput1[MAX_PATH+1]; WCHAR g_szInput2[MAX_PATH+1]; WCHAR g_szOutput[MAX_PATH+1];
//---[ Prototypes ]-----------------------------------------------------------
BOOL WINAPI IcoMergeConsoleCrtlHandler(IN DWORD dwCtrlType); BOOL FParseCmdLine(INT argc, WCHAR* argv[]); void ShowUsage();
//+---------------------------------------------------------------------------
//
// Function: wmain
//
// Purpose: Standard main
//
// Arguments:
// argc [in] Count of args
// argv [in] args
//
// Returns:
//
// Author: jeffspr 18 Nov 1998
//
// Notes:
//
EXTERN_C int __cdecl wmain(int argc, WCHAR* argv[]) { HRESULT hr = S_OK; BOOL fVerbose = FALSE; LPICONRESOURCE pIR1 = NULL; LPICONRESOURCE pIR2 = NULL;
InitializeDebugging();
if (FParseCmdLine(argc, argv)) { SetConsoleCtrlHandler(IcoMergeConsoleCrtlHandler, TRUE);
if(g_fDebugOnly) { pIR1 = ReadIconFromICOFile(g_szInput1); if (pIR1) DebugPrintIconMasks(pIR1); } else { pIR1 = ReadIconFromICOFile(g_szInput1); if (pIR1) { if (g_fVerbose) { printf("Icon1:\n"); DebugPrintIconMasks(pIR1); } }
pIR2 = ReadIconFromICOFile(g_szInput2); if (pIR2) { if (g_fVerbose) { printf("Icon2:\n"); DebugPrintIconMasks(pIR2); } }
if (pIR1 && pIR2) { OverlayIcons(pIR1, pIR2);
if (g_fVerbose) { DebugPrintIconMasks(pIR1); }
WriteIconToICOFile(pIR1, g_szOutput); } else { printf("*** ERROR *** Not all icons were loaded. Can't generate overlay\n"); } } } else { ShowUsage(); }
if (pIR1) free(pIR1); if (pIR2) free(pIR2);
UnInitializeDebugging();
return hr; }
//+---------------------------------------------------------------------------
//
// Function: FParseCmdLine
//
// Purpose: Parse command line arguments
//
// Arguments:
// argc [in] Count of args
// argv [in] Args
//
// Returns:
//
// Author: jeffspr 18 Nov 1998
//
// Notes:
//
BOOL FParseCmdLine(IN int argc, IN WCHAR* argv[]) { BOOL fReturn = FALSE; INT iParamLoop = 0;
if (argc < 4) { if (argc == 3) { if ((argv[2][0] == '/') && ((argv[2][1] == 'd') || (argv[2][1] == 'D'))) { g_fDebugOnly = TRUE; lstrcpyW(g_szInput1, argv[1]); fReturn = TRUE; } else { ShowUsage(); goto Exit; } } else { ShowUsage(); goto Exit; } } else { lstrcpyW(g_szInput1, argv[1]); lstrcpyW(g_szInput2, argv[2]); lstrcpyW(g_szOutput, argv[3]);
for (iParamLoop = 4; iParamLoop < argc; iParamLoop++) { if (argv[iParamLoop][0] == '/') { switch(argv[iParamLoop][1]) { case '?': ShowUsage(); goto Exit; case 'v': g_fVerbose = TRUE; break; default: AssertSz(FALSE, "Unknown parameter"); ShowUsage(); goto Exit; } } }
fReturn = TRUE; }
Exit: return fReturn; }
#if 0
BOOL FParseCmdLine(IN int argc, IN WCHAR* argv[]) { AssertValidReadPtr(argv);
BOOL fStatus=FALSE; CHAR ch;
static const WCHAR c_szValidOptions[] = L"f:vVlLhH?"; WCHAR szFileFullPath[MAX_PATH+1]; PWSTR szFileComponent;
while ((ch = getopt(argc, argv, (WCHAR*) c_szValidOptions)) != EOF) { switch (ch) { #if 0
case 'f': int nChars; nChars = GetFullPathName(optarg, MAX_PATH, szFileFullPath, &szFileComponent); if (nChars) { pnaOptions->m_strAFileName = szFileFullPath; } fStatus = TRUE; break; #endif
case 'v': case 'V': g_fVerbose = TRUE; break;
default: case 'h': case 'H': case '?': case 0: fStatus = FALSE; break; } }
return fStatus; } #endif
//+---------------------------------------------------------------------------
//
// Function: ShowUsage
//
// Purpose: Show the cmd-line usage
//
// Arguments:
// (none)
//
// Returns:
//
// Author: jeffspr 18 Nov 1998
//
// Notes:
//
void ShowUsage() { static const WCHAR c_szUsage[] = L"\n" L"icomerge <input_file1> <input_file2> <output_file> [/v]\n" L" or\n" L"icomerge /?\n" L"\n" L" input_file1 and input_file2 are icon files with transparency\n" L" output_file is the destination icon for the merged icons\n" L"\n" L" /?\t Displays this help\n";
_tprintf(c_szUsage); }
// ----------------------------------------------------------------------
//
// Function: IcoMergeConsoleCrtlHandler
//
// Purpose: Release resources on abnormal exit
//
// Arguments:
// dwCtrlType [in] reason of abnormal exit
//
// Returns: FALSE --> so that netafx will be terminated
//
// Author: kumarp 15-April-98
//
// Notes:
//
BOOL WINAPI IcoMergeConsoleCrtlHandler(IN DWORD dwCtrlType) { return FALSE; }
|