forked from gscept/CubeMapGen
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathErrorMsg.cpp
154 lines (123 loc) · 5.03 KB
/
ErrorMsg.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
//--------------------------------------------------------------------------------------
// ErrorMsg.cpp
//
// Common error message handling functions
//
//--------------------------------------------------------------------------------------
// (C) 2005 ATI Research, Inc., All rights reserved.
//--------------------------------------------------------------------------------------
#include "Types.h"
#include "ErrorMsg.h"
uint32 sg_MessageType = EM_DEFAULT_MESSAGE_MEDIUM;
//MessageOutputCallback
void (*sg_MessageOutputCallback)(WCHAR *, WCHAR *) = DefaultErrorMessageCallback;
//--------------------------------------------------------------------------------------
// SetErrorMessageCallback
//
//--------------------------------------------------------------------------------------
void DefaultErrorMessageCallback(WCHAR *a_Title, WCHAR *a_Message )
{
MessageBox(NULL, a_Message, a_Title, MB_OK);
}
//--------------------------------------------------------------------------------------
// SetErrorMessageCallback
//
//--------------------------------------------------------------------------------------
void SetErrorMessageCallback( void(*a_MessageOutputFunc)(WCHAR *, WCHAR *) )
{
sg_MessageType = EM_MESSAGE_MEDIUM_CALLBACK_FUNCTION;
sg_MessageOutputCallback = a_MessageOutputFunc;
}
//--------------------------------------------------------------------------------------
// Pulls up a message box, or calls a custom message function with an error message
//
// note: this function is used to route all error messages though a common output
// mechanism.. in the future output could be rerouted through the console using
// this mechanism.
//--------------------------------------------------------------------------------------
void OutputMessageString(WCHAR *a_Title, WCHAR *a_Message )
{
switch(sg_MessageType)
{
case EM_MESSAGE_MEDIUM_MESSAGEBOX:
MessageBox(NULL, a_Message, a_Title, MB_OK);
break;
case EM_MESSAGE_MEDIUM_CALLBACK_FUNCTION:
sg_MessageOutputCallback(a_Title, a_Message);
break;
default:
break;
}
}
//--------------------------------------------------------------------------------------
// variable arguement version of output message
//--------------------------------------------------------------------------------------
void OutputMessage(WCHAR *a_Message, ... )
{
int32 numCharOutput = 0;
WCHAR msgBuffer[EM_MAX_MESSAGE_LENGTH];
va_list args;
va_start(args, a_Message);
numCharOutput = _vsnwprintf_s( msgBuffer, EM_MAX_MESSAGE_LENGTH, EM_MAX_MESSAGE_LENGTH, a_Message, args);
//va_end(args, a_Message);
OutputMessageString(L"Message:", msgBuffer);
}
//--------------------------------------------------------------------------------------
// displays the message with a YES / NO response; returns true on YES and false on NO
//--------------------------------------------------------------------------------------
bool OutputQuestion( WCHAR *a_Message, ... )
{
WCHAR msgBuffer[ EM_MAX_MESSAGE_LENGTH ];
va_list args;
va_start( args, a_Message );
_vsnwprintf_s( msgBuffer, EM_MAX_MESSAGE_LENGTH, EM_MAX_MESSAGE_LENGTH, a_Message, args );
switch( sg_MessageType )
{
case EM_MESSAGE_MEDIUM_MESSAGEBOX:
return MessageBox( NULL, msgBuffer, L"Question:", MB_YESNO ) == IDYES;
break;
case EM_MESSAGE_MEDIUM_CALLBACK_FUNCTION:
sg_MessageOutputCallback( L"Question:", msgBuffer );
break;
default:
break;
}
return false;
}
//--------------------------------------------------------------------------------------
// output message if HRESULT indicates failure
//
//--------------------------------------------------------------------------------------
HRESULT OutputMessageOnFail(HRESULT a_hr, WCHAR *a_Message, ... )
{
int32 numCharOutput = 0;
WCHAR msgBuffer[EM_MAX_MESSAGE_LENGTH];
va_list args;
if(FAILED(a_hr))
{
va_start(args, a_Message);
numCharOutput = _vsnwprintf_s( msgBuffer, EM_MAX_MESSAGE_LENGTH, EM_MAX_MESSAGE_LENGTH, a_Message, args);
//va_end(args, a_Message);
OutputMessageString(L"Error!", msgBuffer);
}
return a_hr;
}
//--------------------------------------------------------------------------------------
// output message and exit program if HRESULT indicates failure
//
//--------------------------------------------------------------------------------------
HRESULT OutputFatalMessageOnFail(HRESULT a_hr, WCHAR *a_Message, ... )
{
int32 numCharOutput = 0;
WCHAR msgBuffer[EM_MAX_MESSAGE_LENGTH];
va_list args;
if(FAILED(a_hr))
{
va_start(args, a_Message);
numCharOutput = _vsnwprintf_s( msgBuffer, EM_MAX_MESSAGE_LENGTH, EM_MAX_MESSAGE_LENGTH, a_Message, args);
//va_end(args, a_Message);
OutputMessageString(L"Fatal Error!", msgBuffer);
exit(EM_FATAL_ERROR);
}
return a_hr;
}