utils.cpp
来自「PGP8.0源码 请认真阅读您的文件包然后写出其具体功能」· C++ 代码 · 共 569 行
CPP
569 行
/*____________________________________________________________________________
Copyright (C) 2002 PGP Corporation
All rights reserved.
$Id: Utils.cpp,v 1.13.2.1 2002/11/27 01:11:39 sdas Exp $
____________________________________________________________________________*/
#include "CPGPexch.h"
#include <crtdbg.h>
#include <process.h>
#include "Globals.h"
#include "Utils.h"
#include "resource.h"
#include "stdio.h"
#include "PGPsc.h"
#define WARN_BIT 0x0001
#define CONTINUE_BIT 0x0002
static HINSTANCE g_hInstance;
static char *szOldText = NULL;
typedef struct _HexDumpParam
{
char *szText;
int nLength;
} HexDumpParam;
BOOL CALLBACK WarnYesNoDlgProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
BOOL CALLBACK WarnOkDlgProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
BOOL CALLBACK HexDumpDlgProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam);
void DumpText(HWND hList, char *szText, int nLength);
HINSTANCE UIGetInstance(void)
{
return g_hInstance;
}
void UISetInstance(HINSTANCE hInstance)
{
g_hInstance = hInstance;
}
void UIGetString(char *szBuffer, size_t nLength, UINT nID)
{
LoadString(g_hInstance, nID, szBuffer, nLength);
return;
}
void UIFormatString(char *szBuffer, size_t nLength, UINT nID, char *szData)
{
char szTemp[1024];
LoadString(g_hInstance, nID, szTemp, 1023);
wsprintf(szBuffer, szTemp, szData);
return;
}
void UIDisplayString(HWND hwnd, char *szBuffer)
{
char szTitle[255];
LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
MessageBox(hwnd, szBuffer, szTitle, MB_ICONEXCLAMATION);
return;
}
void UIDisplayStringID(HWND hwnd, UINT nID)
{
char szTitle[255];
char szBuffer[1024];
LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
LoadString(g_hInstance, nID, szBuffer, 1023);
MessageBox(hwnd, szBuffer, szTitle, MB_ICONEXCLAMATION);
return;
}
BOOL UIAskYesNoStringID(HWND hwnd, UINT nID)
{
char szTitle[255];
char szBuffer[1024];
int nResult;
LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
LoadString(g_hInstance, nID, szBuffer, 1023);
nResult = MessageBox(hwnd, szBuffer, szTitle, MB_YESNO | MB_ICONQUESTION);
if (nResult == IDYES)
return TRUE;
else
return FALSE;
}
void UIDisplayErrorCode(char *szFile,
int nLine,
char *szModule,
int nCode,
BOOL bKeyrings)
{
char szErrorMsg[255];
char szTitle[255];
char szFileName[255];
if (bKeyrings)
{
if (UIAskYesNoStringID(NULL, IDS_Q_NOKEYRINGS))
{
char szPath[MAX_PATH];
PGPclGetPath(kPGPclPGPkeysExeFile, szPath, MAX_PATH-1);
PGPclExecute(szPath, SW_SHOW);
}
return;
}
else
PGPclEncDecErrorToString(nCode, szErrorMsg, 254);
if (szModule == NULL)
{
UIGetString(szFileName, sizeof(szFileName), IDS_DLL);
szModule = szFileName;
}
#ifdef _DEBUG
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW);
_CrtDbgReport(_CRT_ERROR, szFile, nLine, szModule, szErrorMsg);
#endif
LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
MessageBox(NULL, szErrorMsg, szTitle, MB_ICONEXCLAMATION);
return;
}
BOOL UIWarnYesNo(HWND hwnd, UINT nID, UINT nPrefIndex, BOOL bDefault)
{
char szMessage[1024];
PGPPrefRef prefRef;
PGPBoolean bWarn;
BOOL bContinue;
DWORD dwResult;
PGPError err = kPGPError_NoErr;
UIGetString(szMessage, 1023, nID);
err = PGPclPeekClientLibPrefRefs(&prefRef, NULL);
if (IsPGPError(err))
{
PGPclErrorBox(hwnd, err);
return FALSE;
}
err = PGPGetPrefBoolean(prefRef, nPrefIndex, &bWarn);
if (IsPGPError(err))
bWarn = TRUE;
if (!bWarn)
return bDefault;
dwResult = DialogBoxParam(UIGetInstance(), MAKEINTRESOURCE(IDD_WARN),
hwnd, (DLGPROC) WarnYesNoDlgProc, (LPARAM) szMessage);
bWarn = (dwResult & WARN_BIT) == WARN_BIT;
bContinue = (dwResult & CONTINUE_BIT) == CONTINUE_BIT;
err = PGPclPeekClientLibPrefRefs(&prefRef, NULL);
if (IsPGPError(err))
{
PGPclErrorBox(hwnd, err);
return FALSE;
}
PGPSetPrefBoolean(prefRef, nPrefIndex, bWarn);
PGPclFlushClientLibPrefs(prefRef, NULL);
return bContinue;
}
BOOL UIAskYesNo(HWND hwnd, UINT nID, UINT nPrefIndex)
{
char szMessage[1024];
PGPPrefRef prefRef;
PGPBoolean bWarn;
BOOL bContinue;
DWORD dwResult;
PGPSize nLength;
char *cDataIn;
char cDataOut[1];
PGPError err = kPGPError_NoErr;
UIGetString(szMessage, 1023, nID);
err = PGPclPeekClientLibPrefRefs(&prefRef, NULL);
if (IsPGPError(err))
{
PGPclErrorBox(hwnd, err);
return FALSE;
}
err = PGPGetPrefData(prefRef, nPrefIndex, &nLength, (void **) &cDataIn);
if (IsPGPError(err) || !nLength)
bWarn = TRUE;
else
{
bWarn = (cDataIn[0] & WARN_BIT) == WARN_BIT;
bContinue = (cDataIn[0] & CONTINUE_BIT) == CONTINUE_BIT;
PGPFreeData(cDataIn);
}
if (!bWarn)
return bContinue;
dwResult = DialogBoxParam(UIGetInstance(), MAKEINTRESOURCE(IDD_ASK),
hwnd, (DLGPROC) WarnYesNoDlgProc, (LPARAM) szMessage);
cDataOut[0] = (char) dwResult;
bWarn = (dwResult & WARN_BIT) == WARN_BIT;
bContinue = (dwResult & CONTINUE_BIT) == CONTINUE_BIT;
err = PGPclPeekClientLibPrefRefs(&prefRef, NULL);
if (IsPGPError(err))
{
PGPclErrorBox(hwnd, err);
return FALSE;
}
PGPSetPrefData(prefRef, nPrefIndex, 1, cDataOut);
PGPclFlushClientLibPrefs(prefRef, NULL);
return bContinue;
}
void UIWarnOk(HWND hwnd, UINT nID, UINT nPrefIndex)
{
char szMessage[1024];
PGPPrefRef prefRef;
PGPBoolean bWarn;
DWORD dwResult;
PGPError err = kPGPError_NoErr;
UIGetString(szMessage, 1023, nID);
err = PGPclPeekClientLibPrefRefs(&prefRef, NULL);
if (IsPGPError(err))
{
PGPclErrorBox(hwnd, err);
return;
}
err = PGPGetPrefBoolean(prefRef, nPrefIndex, &bWarn);
if (IsPGPError(err))
bWarn = TRUE;
if (!bWarn)
return;
dwResult = DialogBoxParam(UIGetInstance(), MAKEINTRESOURCE(IDD_WARNOK),
hwnd, (DLGPROC) WarnOkDlgProc, (LPARAM) szMessage);
bWarn = (dwResult & WARN_BIT) == WARN_BIT;
err = PGPclPeekClientLibPrefRefs(&prefRef, NULL);
if (IsPGPError(err))
{
PGPclErrorBox(hwnd, err);
return;
}
PGPSetPrefBoolean(prefRef, nPrefIndex, bWarn);
PGPclFlushClientLibPrefs(prefRef, NULL);
return;
}
void PGPDebugMessage(const char *szMessage)
{
char szTitle[255];
#ifdef _DEBUG
_CrtSetReportMode(_CRT_ERROR, _CRTDBG_MODE_WNDW);
_CrtDbgReport(_CRT_ERROR, NULL, NULL, NULL, szMessage);
#endif
LoadString(g_hInstance, IDS_TITLE, szTitle, 254);
MessageBox(NULL, szMessage, szTitle, MB_ICONEXCLAMATION);
return;
}
void UIHexDump(HWND hwnd, char *szMessage, int nLength)
{
HexDumpParam lParam;
lParam.szText = szMessage;
lParam.nLength = nLength;
DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_HEXDUMP), hwnd,
(DLGPROC) HexDumpDlgProc, (LPARAM) &lParam);
return;
}
BOOL CALLBACK WarnYesNoDlgProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturnCode = FALSE;
DWORD dwResult;
switch(uMsg)
{
case WM_INITDIALOG:
{
SetWindowText(GetDlgItem(hwndDlg, IDC_WARNING), (char *) lParam);
break;
}
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDC_YESCONTINUE:
if (IsDlgButtonChecked(hwndDlg, IDC_NOWARN) == BST_CHECKED)
dwResult = CONTINUE_BIT;
else
dwResult = CONTINUE_BIT | WARN_BIT;
EndDialog(hwndDlg, dwResult);
bReturnCode = TRUE;
break;
case IDC_NOCONTINUE:
if (IsDlgButtonChecked(hwndDlg, IDC_NOWARN) == BST_CHECKED)
dwResult = 0;
else
dwResult = WARN_BIT;
EndDialog(hwndDlg, dwResult);
bReturnCode = TRUE;
break;
}
break;
}
return(bReturnCode);
}
BOOL CALLBACK WarnOkDlgProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturnCode = FALSE;
DWORD dwResult;
switch(uMsg)
{
case WM_INITDIALOG:
{
SetWindowText(GetDlgItem(hwndDlg, IDC_WARNING), (char *) lParam);
break;
}
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
if (IsDlgButtonChecked(hwndDlg, IDC_NOWARN) == BST_CHECKED)
dwResult = 0;
else
dwResult = WARN_BIT;
EndDialog(hwndDlg, dwResult);
DestroyWindow(hwndDlg);
bReturnCode = TRUE;
break;
}
break;
}
return(bReturnCode);
}
BOOL CALLBACK HexDumpDlgProc(HWND hwndDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturnCode = FALSE;
HWND hList;
hList = GetDlgItem(hwndDlg, IDC_DUMP);
switch(uMsg)
{
case WM_INITDIALOG:
{
LV_COLUMN lvcText;
HexDumpParam *pParam;
// Setup the list control columns
lvcText.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
lvcText.fmt = LVCFMT_LEFT;
lvcText.cx = 500;
lvcText.pszText = "ASCII";
lvcText.iSubItem = -1;
ListView_InsertColumn(hList, 0, &lvcText);
lvcText.mask = LVCF_FMT | LVCF_TEXT | LVCF_WIDTH | LVCF_SUBITEM;
lvcText.fmt = LVCFMT_LEFT;
lvcText.cx = 1400;
lvcText.pszText = "Hex";
lvcText.iSubItem = 1;
ListView_InsertColumn(hList, 1, &lvcText);
pParam = (HexDumpParam *) lParam;
// Fill list control with text
DumpText(hList, pParam->szText, pParam->nLength);
break;
}
case WM_COMMAND:
switch (LOWORD(wParam))
{
case IDOK:
EndDialog(hwndDlg, FALSE);
bReturnCode = TRUE;
break;
}
break;
}
return(bReturnCode);
}
void DumpText(HWND hList, char *szText, int nLength)
{
int nX, nY;
int nHexIndex, nAsciiIndex;
int nLimit;
int nLines;
char szHex[241];
char szAscii[81];
LV_ITEM lviText;
nLines = 0;
for (nX=0; nX<nLength; nX+=80)
{
nHexIndex = 0;
nAsciiIndex = 0;
if ((nX+80) > nLength)
nLimit = nLength;
else
nLimit = nX+80;
for (nY=nX; nY<nLimit; nY++)
{
wsprintf(&(szHex[nHexIndex]), "%02X ", szText[nY]);
nHexIndex += 3;
if ((szText[nY] > 31) && (szText[nY] < 127))
wsprintf(&(szAscii[nAsciiIndex]), "%c", szText[nY]);
else if (szText[nY] == '\n')
{
nX = nY-79;
nY = nLimit;
}
else
wsprintf(&(szAscii[nAsciiIndex]), " ");
nAsciiIndex++;
}
szHex[nHexIndex] = 0;
szAscii[nAsciiIndex] = 0;
lviText.mask = LVIF_TEXT;
lviText.pszText = szAscii;
lviText.iItem = nLines;
lviText.iSubItem = 0;
ListView_InsertItem(hList, &lviText);
lviText.mask = LVIF_TEXT;
lviText.pszText = szHex;
lviText.iItem = nLines;
lviText.iSubItem = 1;
ListView_SetItem(hList, &lviText);
nLines++;
}
return;
}
int IsPlatform98OrME()
{
OSVERSIONINFO osiVerInfo={sizeof(OSVERSIONINFO), 0};
if(FALSE == GetVersionEx(&osiVerInfo))
return -1;
if(VER_PLATFORM_WIN32_WINDOWS == osiVerInfo.dwPlatformId)
return 1;
return 0;
}
void ExchPluginTrace(LPCTSTR lpszFormat, ...)
{
#ifdef _DEBUG
va_list args;
va_start(args, lpszFormat);
int nBuf;
char szBuffer[512]={0};
nBuf = _vsnprintf(szBuffer, sizeof(szBuffer), lpszFormat, args);
// was there an error? was the expanded string too long?
//pgpAssert(nBuf >= 0);
if(nBuf >= 0)
OutputDebugString(szBuffer);
va_end(args);
#endif
}
/*__Editor_settings____
Local Variables:
tab-width: 4
End:
vi: ts=4 sw=4
vim: si
_____________________*/
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?