340 lines
6.2 KiB
C++
340 lines
6.2 KiB
C++
#include "nc.h"
|
|
#pragma hdrstop
|
|
|
|
typedef struct _STRING_TABLE {
|
|
DWORD ResourceId;
|
|
BOOL UseTitle;
|
|
LPWSTR String;
|
|
} STRING_TABLE, *PSTRING_TABLE;
|
|
|
|
|
|
static STRING_TABLE StringTable[] =
|
|
{
|
|
{ IDS_TITLE, FALSE, NULL },
|
|
{ IDS_ERR_TITLE, TRUE, NULL },
|
|
{ IDS_WRN_TITLE, TRUE, NULL },
|
|
{ IDS_BAD_SERVER, FALSE, NULL },
|
|
{ IDS_MISSING_INFO, FALSE, NULL },
|
|
{ IDS_MISSING_ACCNT, FALSE, NULL },
|
|
{ IDS_MISSING_BILLING, FALSE, NULL },
|
|
{ IDS_CC_AMEX, FALSE, NULL },
|
|
{ IDS_CC_DINERS, FALSE, NULL },
|
|
{ IDS_CC_DISCOVER, FALSE, NULL },
|
|
{ IDS_CC_MASTERCARD, FALSE, NULL },
|
|
{ IDS_CC_VISA, FALSE, NULL },
|
|
{ IDS_BAD_ISP, FALSE, NULL }
|
|
};
|
|
|
|
#define CountStringTable (sizeof(StringTable)/sizeof(STRING_TABLE))
|
|
|
|
|
|
VOID
|
|
InitializeStringTable(
|
|
VOID
|
|
)
|
|
{
|
|
DWORD i;
|
|
WCHAR Buffer[512];
|
|
|
|
|
|
for (i=0; i<CountStringTable; i++) {
|
|
|
|
if (LoadString(
|
|
MyhInstance,
|
|
StringTable[i].ResourceId,
|
|
Buffer,
|
|
sizeof(Buffer)/sizeof(WCHAR)
|
|
)) {
|
|
|
|
StringTable[i].String = (LPWSTR) MemAlloc( StringSize( Buffer ) + 256 );
|
|
if (!StringTable[i].String) {
|
|
StringTable[i].String = L"";
|
|
} else {
|
|
if (StringTable[i].UseTitle) {
|
|
swprintf( StringTable[i].String, Buffer, StringTable[0].String );
|
|
} else {
|
|
wcscpy( StringTable[i].String, Buffer );
|
|
}
|
|
}
|
|
|
|
} else {
|
|
|
|
StringTable[i].String = L"";
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
LPWSTR
|
|
GetString(
|
|
DWORD ResourceId
|
|
)
|
|
{
|
|
DWORD i;
|
|
|
|
for (i=0; i<CountStringTable; i++) {
|
|
if (StringTable[i].ResourceId == ResourceId) {
|
|
return StringTable[i].String;
|
|
}
|
|
}
|
|
|
|
return NULL;
|
|
}
|
|
|
|
|
|
int
|
|
PopUpMsg(
|
|
HWND hwnd,
|
|
DWORD ResourceId,
|
|
BOOL Error,
|
|
DWORD Type
|
|
)
|
|
{
|
|
return MessageBox(
|
|
hwnd,
|
|
GetString( ResourceId ),
|
|
GetString( Error ? IDS_ERR_TITLE : IDS_WRN_TITLE ),
|
|
MB_SETFOREGROUND | (Error ? MB_ICONEXCLAMATION : MB_ICONINFORMATION) | (Type == 0 ? MB_OK : Type)
|
|
);
|
|
}
|
|
|
|
|
|
int
|
|
PopUpMsgString(
|
|
HWND hwnd,
|
|
LPSTR String,
|
|
BOOL Error,
|
|
DWORD Type
|
|
)
|
|
{
|
|
int Rslt = 0;
|
|
|
|
LPWSTR StringW = AnsiStringToUnicodeString( String );
|
|
if (!StringW) {
|
|
return 0;
|
|
}
|
|
|
|
Rslt = MessageBox(
|
|
hwnd,
|
|
StringW,
|
|
GetString( Error ? IDS_ERR_TITLE : IDS_WRN_TITLE ),
|
|
MB_SETFOREGROUND | (Error ? MB_ICONEXCLAMATION : MB_ICONINFORMATION) | (Type == 0 ? MB_OK : Type)
|
|
);
|
|
|
|
MemFree( StringW );
|
|
|
|
return Rslt;
|
|
}
|
|
|
|
|
|
LPTSTR
|
|
StringDup(
|
|
LPTSTR String
|
|
)
|
|
{
|
|
LPTSTR NewString;
|
|
|
|
if (!String) {
|
|
return NULL;
|
|
}
|
|
|
|
NewString = (LPTSTR) MemAlloc( (_tcslen( String ) + 1) * sizeof(TCHAR) );
|
|
if (!NewString) {
|
|
return NULL;
|
|
}
|
|
|
|
_tcscpy( NewString, String );
|
|
|
|
return NewString;
|
|
}
|
|
|
|
|
|
LPSTR
|
|
UnicodeStringToAnsiString(
|
|
LPWSTR UnicodeString
|
|
)
|
|
{
|
|
DWORD Count;
|
|
LPSTR AnsiString;
|
|
|
|
|
|
//
|
|
// first see how big the buffer needs to be
|
|
//
|
|
Count = WideCharToMultiByte(
|
|
CP_ACP,
|
|
0,
|
|
UnicodeString,
|
|
-1,
|
|
NULL,
|
|
0,
|
|
NULL,
|
|
NULL
|
|
);
|
|
|
|
//
|
|
// i guess the input string is empty
|
|
//
|
|
if (!Count) {
|
|
return NULL;
|
|
}
|
|
|
|
//
|
|
// allocate a buffer for the unicode string
|
|
//
|
|
Count += 1;
|
|
AnsiString = (LPSTR) MemAlloc( Count );
|
|
if (!AnsiString) {
|
|
return NULL;
|
|
}
|
|
|
|
//
|
|
// convert the string
|
|
//
|
|
Count = WideCharToMultiByte(
|
|
CP_ACP,
|
|
0,
|
|
UnicodeString,
|
|
-1,
|
|
AnsiString,
|
|
Count,
|
|
NULL,
|
|
NULL
|
|
);
|
|
|
|
//
|
|
// the conversion failed
|
|
//
|
|
if (!Count) {
|
|
MemFree( AnsiString );
|
|
return NULL;
|
|
}
|
|
|
|
return AnsiString;
|
|
}
|
|
|
|
|
|
LPWSTR
|
|
AnsiStringToUnicodeString(
|
|
LPSTR AnsiString
|
|
)
|
|
{
|
|
DWORD Count;
|
|
LPWSTR UnicodeString;
|
|
|
|
|
|
//
|
|
// first see how big the buffer needs to be
|
|
//
|
|
Count = MultiByteToWideChar(
|
|
CP_ACP,
|
|
MB_PRECOMPOSED,
|
|
AnsiString,
|
|
-1,
|
|
NULL,
|
|
0
|
|
);
|
|
|
|
//
|
|
// i guess the input string is empty
|
|
//
|
|
if (!Count) {
|
|
return NULL;
|
|
}
|
|
|
|
//
|
|
// allocate a buffer for the unicode string
|
|
//
|
|
Count += 1;
|
|
UnicodeString = (LPWSTR) MemAlloc( Count * sizeof(UNICODE_NULL) );
|
|
if (!UnicodeString) {
|
|
return NULL;
|
|
}
|
|
|
|
//
|
|
// convert the string
|
|
//
|
|
Count = MultiByteToWideChar(
|
|
CP_ACP,
|
|
MB_PRECOMPOSED,
|
|
AnsiString,
|
|
-1,
|
|
UnicodeString,
|
|
Count
|
|
);
|
|
|
|
//
|
|
// the conversion failed
|
|
//
|
|
if (!Count) {
|
|
MemFree( UnicodeString );
|
|
return NULL;
|
|
}
|
|
|
|
return UnicodeString;
|
|
}
|
|
|
|
|
|
void
|
|
dprintf(
|
|
LPTSTR Format,
|
|
...
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Prints a debug string
|
|
|
|
Arguments:
|
|
|
|
format - printf() format string
|
|
... - Variable data
|
|
|
|
Return Value:
|
|
|
|
None.
|
|
|
|
--*/
|
|
|
|
{
|
|
TCHAR buf[1024];
|
|
DWORD len;
|
|
static TCHAR AppName[16];
|
|
va_list arg_ptr;
|
|
SYSTEMTIME CurrentTime;
|
|
|
|
|
|
if (AppName[0] == 0) {
|
|
if (GetModuleFileName( NULL, buf, sizeof(buf) )) {
|
|
_tsplitpath( buf, NULL, NULL, AppName, NULL );
|
|
}
|
|
}
|
|
|
|
va_start(arg_ptr, Format);
|
|
|
|
GetLocalTime( &CurrentTime );
|
|
_stprintf( buf, TEXT("%x %02d:%02d:%02d.%03d %s: "),
|
|
GetCurrentThreadId(),
|
|
CurrentTime.wHour,
|
|
CurrentTime.wMinute,
|
|
CurrentTime.wSecond,
|
|
CurrentTime.wMilliseconds,
|
|
AppName[0] ? AppName : TEXT("")
|
|
);
|
|
len = _tcslen( buf );
|
|
|
|
_vsntprintf(&buf[len], sizeof(buf)-len, Format, arg_ptr);
|
|
|
|
len = _tcslen( buf );
|
|
if (buf[len-1] != TEXT('\n')) {
|
|
buf[len] = TEXT('\r');
|
|
buf[len+1] = TEXT('\n');
|
|
buf[len+2] = 0;
|
|
}
|
|
|
|
OutputDebugString( buf );
|
|
}
|