windows-nt/Source/XPSP1/NT/printscan/fax/samples/ncfsp/util.cpp
2020-09-26 16:20:57 +08:00

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 );
}