Files
HL2Overcharged/utils/sapi51/Tools/Comp/TTS/spgeterrormsg.cpp
2025-05-21 21:20:08 +03:00

176 lines
6.2 KiB
C++

//******************************************************************************
// Copyright (c) Microsoft Corporation. All rights reserved.
// spgeterrormsg.cpp
//
//******************************************************************************
#include "ttscomp.h"
#pragma warning (disable : 4786)
#include <map>
typedef std::map<HRESULT, LPCSTR> HRMAP;
typedef HRMAP::value_type HRPAIR;
void InitSpErrorMsg(HRMAP& rhrmap);
inline LPCSTR SpGetErrorMsg(HRESULT hr)
{
static char szMessageBuffer[MAX_PATH];
static bool s_fInit;
static HRMAP s_hrmap;
if(!s_fInit)
{
InitSpErrorMsg(s_hrmap);
s_fInit = true;
}
HRMAP::iterator it = s_hrmap.find(hr);
if(it != s_hrmap.end())
{
return it->second;
}
else if(FAILED(hr)) // FormatMessage will treat SUCCEEDED(hr) as Win32 error code
{
DWORD cbWrite = ::FormatMessageA(FORMAT_MESSAGE_FROM_SYSTEM, NULL, hr, MAKELANGID(LANG_ENGLISH, SUBLANG_DEFAULT), szMessageBuffer, 256, NULL);
if(cbWrite > 0)
{
// truncate the ending CRLF
szMessageBuffer[strlen(szMessageBuffer) - 2] = 0;
return szMessageBuffer;
}
}
sprintf(szMessageBuffer, "0x%08x", hr);
return szMessageBuffer;
}
inline void InitSpErrorMsg(HRMAP& rhrmap)
{
#define ADD_HR_PAIR(hr) rhrmap.insert(HRPAIR(hr, #hr))
#define ADD_WIN32_PAIR(errno) rhrmap.insert(HRPAIR(SpHrFromWin32(errno), "SpHrFromWin32("#errno")"))
ADD_HR_PAIR(S_OK);
ADD_HR_PAIR(S_FALSE);
// If we have two names for the same hr, the first one inserted will count.
// So the SAPI names are put before standard names.
// The following error codes are based on sperror.h#10
// Note: Please update the version number above when new codes added.
ADD_HR_PAIR(SPERR_UNINITIALIZED);
ADD_HR_PAIR(SPERR_ALREADY_INITIALIZED);
ADD_HR_PAIR(SPERR_UNSUPPORTED_FORMAT);
ADD_HR_PAIR(SPERR_INVALID_FLAGS);
ADD_HR_PAIR(SP_END_OF_STREAM);
ADD_HR_PAIR(SPERR_DEVICE_BUSY);
ADD_HR_PAIR(SPERR_DEVICE_NOT_SUPPORTED);
ADD_HR_PAIR(SPERR_DEVICE_NOT_ENABLED);
ADD_HR_PAIR(SPERR_NO_DRIVER);
ADD_HR_PAIR(SPERR_FILE_MUST_BE_UNICODE);
ADD_HR_PAIR(SP_INSUFFICIENT_DATA);
ADD_HR_PAIR(SPERR_INVALID_PHRASE_ID);
ADD_HR_PAIR(SPERR_BUFFER_TOO_SMALL);
ADD_HR_PAIR(SPERR_FORMAT_NOT_SPECIFIED);
ADD_HR_PAIR(SPERR_AUDIO_STOPPED);
ADD_HR_PAIR(SP_AUDIO_PAUSED);
ADD_HR_PAIR(SPERR_RULE_NOT_FOUND);
ADD_HR_PAIR(SPERR_TTS_ENGINE_EXCEPTION);
ADD_HR_PAIR(SPERR_TTS_NLP_EXCEPTION);
ADD_HR_PAIR(SPERR_ENGINE_BUSY);
ADD_HR_PAIR(SP_AUDIO_CONVERSION_ENABLED);
ADD_HR_PAIR(SP_NO_HYPOTHESIS_AVAILABLE);
ADD_HR_PAIR(SPERR_CANT_CREATE);
ADD_HR_PAIR(SP_ALREADY_IN_LEX);
ADD_HR_PAIR(SPERR_NOT_IN_LEX);
ADD_HR_PAIR(SP_LEX_NOTHING_TO_SYNC);
ADD_HR_PAIR(SPERR_LEX_VERY_OUT_OF_SYNC);
ADD_HR_PAIR(SPERR_UNDEFINED_FORWARD_RULE_REF);
ADD_HR_PAIR(SPERR_EMPTY_RULE);
ADD_HR_PAIR(SPERR_GRAMMAR_COMPILER_INTERNAL_ERROR);
ADD_HR_PAIR(SPERR_RULE_NOT_DYNAMIC);
ADD_HR_PAIR(SPERR_DUPLICATE_RULE_NAME);
ADD_HR_PAIR(SPERR_DUPLICATE_RESOURCE_NAME);
ADD_HR_PAIR(SPERR_TOO_MANY_GRAMMARS);
ADD_HR_PAIR(SPERR_CIRCULAR_REFERENCE);
ADD_HR_PAIR(SPERR_INVALID_IMPORT);
ADD_HR_PAIR(SPERR_INVALID_WAV_FILE);
ADD_HR_PAIR(SP_REQUEST_PENDING);
ADD_HR_PAIR(SPERR_ALL_WORDS_OPTIONAL);
ADD_HR_PAIR(SPERR_INSTANCE_CHANGE_INVALID);
ADD_HR_PAIR(SPERR_RULE_NAME_ID_CONFLICT);
ADD_HR_PAIR(SPERR_NO_RULES);
ADD_HR_PAIR(SPERR_CIRCULAR_RULE_REF);
ADD_HR_PAIR(SP_NO_PARSE_FOUND);
ADD_HR_PAIR(SPERR_INVALID_HANDLE);
ADD_HR_PAIR(SPERR_REMOTE_CALL_TIMED_OUT);
ADD_HR_PAIR(SPERR_AUDIO_BUFFER_OVERFLOW);
ADD_HR_PAIR(SPERR_NO_AUDIO_DATA);
ADD_HR_PAIR(SPERR_DEAD_ALTERNATE);
ADD_HR_PAIR(SPERR_HIGH_LOW_CONFIDENCE);
ADD_HR_PAIR(SPERR_INVALID_FORMAT_STRING);
ADD_HR_PAIR(SP_UNSUPPORTED_ON_STREAM_INPUT);
ADD_HR_PAIR(SPERR_APPLEX_READ_ONLY);
ADD_HR_PAIR(SPERR_NO_TERMINATING_RULE_PATH);
ADD_HR_PAIR(SP_WORD_EXISTS_WITHOUT_PRONUNCIATION);
ADD_HR_PAIR(SPERR_STREAM_CLOSED);
ADD_HR_PAIR(SPERR_NO_MORE_ITEMS);
ADD_HR_PAIR(SPERR_NOT_FOUND);
ADD_HR_PAIR(SPERR_INVALID_AUDIO_STATE);
ADD_HR_PAIR(SPERR_GENERIC_MMSYS_ERROR);
ADD_HR_PAIR(SPERR_MARSHALER_EXCEPTION);
ADD_HR_PAIR(SPERR_NOT_DYNAMIC_GRAMMAR);
ADD_HR_PAIR(SPERR_AMBIGUOUS_PROPERTY);
ADD_HR_PAIR(SPERR_INVALID_REGISTRY_KEY);
ADD_HR_PAIR(SPERR_INVALID_TOKEN_ID);
ADD_HR_PAIR(SPERR_XML_BAD_SYNTAX);
ADD_HR_PAIR(SPERR_XML_RESOURCE_NOT_FOUND);
ADD_HR_PAIR(SPERR_TOKEN_IN_USE);
ADD_HR_PAIR(SPERR_TOKEN_DELETED);
ADD_HR_PAIR(SPERR_MULTI_LINGUAL_NOT_SUPPORTED);
ADD_HR_PAIR(SPERR_EXPORT_DYNAMIC_RULE);
ADD_HR_PAIR(SPERR_STGF_ERROR);
ADD_HR_PAIR(SPERR_WORDFORMAT_ERROR);
ADD_HR_PAIR(SPERR_STREAM_NOT_ACTIVE);
ADD_HR_PAIR(SPERR_ENGINE_RESPONSE_INVALID);
ADD_HR_PAIR(SPERR_SR_ENGINE_EXCEPTION);
ADD_HR_PAIR(SPERR_STREAM_POS_INVALID);
ADD_HR_PAIR(SP_RECOGNIZER_INACTIVE);
ADD_HR_PAIR(SPERR_REMOTE_CALL_ON_WRONG_THREAD);
ADD_HR_PAIR(SPERR_REMOTE_PROCESS_TERMINATED);
ADD_HR_PAIR(SPERR_REMOTE_PROCESS_ALREADY_RUNNING);
ADD_HR_PAIR(SPERR_LANGID_MISMATCH);
ADD_HR_PAIR(SP_PARTIAL_PARSE_FOUND);
ADD_HR_PAIR(SPERR_NOT_TOPLEVEL_RULE);
ADD_HR_PAIR(SP_NO_RULE_ACTIVE);
ADD_HR_PAIR(SPERR_LEX_REQUIRES_COOKIE);
ADD_HR_PAIR(SP_STREAM_UNINITIALIZED);
ADD_HR_PAIR(SPERR_UNSUPPORTED_LANG);
ADD_HR_PAIR(SPERR_VOICE_PAUSED);
ADD_HR_PAIR(SPERR_AUDIO_BUFFER_UNDERFLOW);
ADD_HR_PAIR(SPERR_AUDIO_STOPPED_UNEXPECTEDLY);
ADD_HR_PAIR(SPERR_NO_WORD_PRONUNCIATION);
ADD_HR_PAIR(SPERR_ALTERNATES_WOULD_BE_INCONSISTENT);
// These are standard error codes:
ADD_HR_PAIR(E_NOTIMPL);
ADD_HR_PAIR(E_UNEXPECTED);
ADD_HR_PAIR(E_OUTOFMEMORY);
ADD_HR_PAIR(E_INVALIDARG);
ADD_HR_PAIR(E_NOINTERFACE);
ADD_HR_PAIR(E_POINTER);
ADD_HR_PAIR(E_HANDLE);
ADD_HR_PAIR(E_ABORT);
ADD_HR_PAIR(E_FAIL);
ADD_HR_PAIR(E_ACCESSDENIED);
ADD_HR_PAIR(REGDB_E_CLASSNOTREG);
ADD_HR_PAIR(REGDB_E_IIDNOTREG);
ADD_WIN32_PAIR(ERROR_BAD_EXE_FORMAT);
ADD_WIN32_PAIR(ERROR_RESOURCE_DATA_NOT_FOUND);
ADD_WIN32_PAIR(ERROR_RESOURCE_TYPE_NOT_FOUND);
ADD_WIN32_PAIR(ERROR_RESOURCE_NAME_NOT_FOUND);
ADD_WIN32_PAIR(ERROR_RESOURCE_LANG_NOT_FOUND);
#undef ADD_HR_PAIR
#undef ADD_WIN32_PAIR
}