-
Notifications
You must be signed in to change notification settings - Fork 9
/
ErrorMsg.cpp
159 lines (127 loc) · 5.02 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
155
156
157
158
159
//--------------------------------------------------------------------------------------
// 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)(const char *, const char *) = DefaultErrorMessageCallback;
//--------------------------------------------------------------------------------------
// SetErrorMessageCallback
//
//--------------------------------------------------------------------------------------
void DefaultErrorMessageCallback(const char *a_Title, const char *a_Message )
{
MessageBox(NULL, a_Message, a_Title, MB_OK);
}
//--------------------------------------------------------------------------------------
// SetErrorMessageCallback
//
//--------------------------------------------------------------------------------------
void SetErrorMessageCallback( void(*a_MessageOutputFunc)(const char *, const char *) )
{
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(const char *a_Title, const char *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(const char *a_Message, ... )
{
int32 numCharOutput = 0;
char msgBuffer[EM_MAX_MESSAGE_LENGTH];
va_list args;
va_start(args, a_Message);
numCharOutput = snprintf( msgBuffer, EM_MAX_MESSAGE_LENGTH, a_Message, args);
//va_end(args, a_Message);
OutputMessageString("Message:", msgBuffer);
}
//--------------------------------------------------------------------------------------
// displays the message with a YES / NO response; returns true on YES and false on NO
//--------------------------------------------------------------------------------------
bool OutputQuestion( const char *a_Message, ... )
{
#ifndef WIN32
exit(-1);
#else
char msgBuffer[ EM_MAX_MESSAGE_LENGTH ];
va_list args;
va_start( args, a_Message );
snprintf( msgBuffer, EM_MAX_MESSAGE_LENGTH, a_Message, args );
switch( sg_MessageType )
{
case EM_MESSAGE_MEDIUM_MESSAGEBOX:
return MessageBox( NULL, msgBuffer, "Question:", MB_YESNO ) == IDYES;
break;
case EM_MESSAGE_MEDIUM_CALLBACK_FUNCTION:
sg_MessageOutputCallback( "Question:", msgBuffer );
break;
default:
break;
}
#endif
return false;
}
//--------------------------------------------------------------------------------------
// output message if HRESULT indicates failure
//
//--------------------------------------------------------------------------------------
HRESULT OutputMessageOnFail(HRESULT a_hr, const char *a_Message, ... )
{
int32 numCharOutput = 0;
char msgBuffer[EM_MAX_MESSAGE_LENGTH];
va_list args;
if(FAILED(a_hr))
{
va_start(args, a_Message);
numCharOutput = snprintf( msgBuffer, EM_MAX_MESSAGE_LENGTH, a_Message, args);
//va_end(args, a_Message);
OutputMessageString("Error!", msgBuffer);
}
return a_hr;
}
//--------------------------------------------------------------------------------------
// output message and exit program if HRESULT indicates failure
//
//--------------------------------------------------------------------------------------
HRESULT OutputFatalMessageOnFail(HRESULT a_hr, const char *a_Message, ... )
{
int32 numCharOutput = 0;
char msgBuffer[EM_MAX_MESSAGE_LENGTH];
va_list args;
if(FAILED(a_hr))
{
va_start(args, a_Message);
numCharOutput = snprintf( msgBuffer, EM_MAX_MESSAGE_LENGTH, a_Message, args);
//va_end(args, a_Message);
OutputMessageString("Fatal Error!", msgBuffer);
exit(EM_FATAL_ERROR);
}
return a_hr;
}