/*++ Copyright (c) 1998 Microsoft Corporation Module Name: isudump.c Abstract: Calls InstallShield APIs to dump out an install log file (foo.isu) Author: Jim Schmidt (jimschm) 19-Feb-1999 Revision History: () --*/ #include "pch.h" #include "ismig.h" HANDLE g_hHeap; HINSTANCE g_hInst; BOOL WINAPI MigUtil_Entry (HINSTANCE, DWORD, PVOID); BOOL pCallEntryPoints ( DWORD Reason ) { HINSTANCE Instance; // // Simulate DllMain // Instance = g_hInst; // // Initialize the common libs // if (!MigUtil_Entry (Instance, Reason, NULL)) { return FALSE; } return TRUE; } BOOL Init ( VOID ) { g_hHeap = GetProcessHeap(); g_hInst = GetModuleHandle (NULL); return pCallEntryPoints (DLL_PROCESS_ATTACH); } VOID Terminate ( VOID ) { pCallEntryPoints (DLL_PROCESS_DETACH); } VOID HelpAndExit ( VOID ) { // // This routine is called whenever command line args are wrong // _ftprintf ( stderr, TEXT("Command Line Syntax:\n\n") TEXT(" isudump \n") TEXT("\nDescription:\n\n") TEXT(" isudump dumps an InstallShield log file. It requires ismig.dll.\n") TEXT("\nArguments:\n\n") TEXT(" Specifies full path to InstallShield log file\n") ); exit (1); } INT __cdecl _tmain ( INT argc, PCTSTR argv[] ) { INT i; PCTSTR FileArg = NULL; PISUGETALLSTRINGS ISUGetAllStrings; HANDLE Lib; BOOL LoadError = FALSE; HGLOBAL List; PCSTR MultiSz; MULTISZ_ENUMA e; PCSTR AnsiFileName; INT Count; for (i = 1 ; i < argc ; i++) { if (argv[i][0] == TEXT('/') || argv[i][0] == TEXT('-')) { HelpAndExit(); } else { // // Parse other args that don't require / or - // if (FileArg) { HelpAndExit(); } FileArg = argv[i]; } } if (!FileArg) { HelpAndExit(); } // // Begin processing // if (!Init()) { return 0; } Lib = LoadLibrary (TEXT("ismig.dll")); if (Lib) { ISUGetAllStrings = (PISUGETALLSTRINGS) GetProcAddress (Lib, "ISUGetAllStrings"); if (!ISUGetAllStrings) { LoadError = TRUE; } } else { LoadError = TRUE; } if (!LoadError) { AnsiFileName = CreateDbcs (FileArg); List = ISUGetAllStrings (AnsiFileName); if (!List) { fprintf ( stderr, "ERROR: Can't get strings from %s (rc=%u)\n", AnsiFileName, GetLastError() ); } else { MultiSz = (PCSTR) GlobalLock (List); Count = 0; if (EnumFirstMultiSzA (&e, MultiSz)) { do { Count++; printf ("%s\n", e.CurrentString); } while (EnumNextMultiSzA (&e)); } printf ("\n%i total string%s\n", Count, i == 1 ? "" : "s"); GlobalUnlock (List); GlobalFree (List); } DestroyDbcs (AnsiFileName); } else { _ftprintf (stderr, TEXT("ERROR: Can't load ISMIG.DLL (rc=%u)\n"), GetLastError()); } if (Lib) { FreeLibrary (Lib); } // // End of processing // Terminate(); return 0; }