Skip to content

Commit 333ac60

Browse files
committed
Get RTEError from RTE source
1 parent 3d6f7e0 commit 333ac60

File tree

3 files changed

+128
-289
lines changed

3 files changed

+128
-289
lines changed

System/RTEError.cpp

Lines changed: 65 additions & 133 deletions
Original file line numberDiff line numberDiff line change
@@ -1,134 +1,66 @@
1-
//////////////////////////////////////////////////////////////////////////////////////////
2-
// File: RTEError.cpp
3-
//////////////////////////////////////////////////////////////////////////////////////////
4-
// Description: Source file for general error handling functions.
5-
// Project: Retro Terrain Engine
6-
// Author(s): Daniel Tabar
7-
8-
// http://www.datarealms.com
9-
10-
11-
//////////////////////////////////////////////////////////////////////////////////////////
12-
// Inclusions of header files
13-
141
#include "RTEError.h"
15-
16-
17-
18-
namespace RTE
19-
{
20-
21-
static BITMAP *g_pScreendumpBuffer = 0;
22-
23-
24-
//////////////////////////////////////////////////////////////////////////////////////////
25-
// Global function: DDTAbortFunc
26-
//////////////////////////////////////////////////////////////////////////////////////////
27-
// Description: Abort on Error function. Will try to dump a screenshot, show an
28-
// abortion message, and then quit the program immediately.
29-
// Arguments: The description of the abortion.
30-
// The source file in which the abortion is made.
31-
// The line where the abortion is made.
32-
// Return value: None.
33-
34-
extern bool DDTAbortFunc(const char *description,
35-
const char *file,
36-
int line)
37-
{
38-
// Save out the screen bitmap, after making a copy of it, faster sometimes
39-
if (screen) {
40-
if (!g_pScreendumpBuffer)
41-
g_pScreendumpBuffer = create_bitmap(screen->w, screen->h);
42-
blit(screen, g_pScreendumpBuffer, 0, 0, 0, 0, screen->w, screen->h);
43-
PALETTE palette;
44-
get_palette(palette);
45-
save_bmp("abortscreen.bmp", g_pScreendumpBuffer, palette);
46-
}
47-
48-
// Ditch the video mode so the messagebox appears without problems
49-
if (screen != 0)
50-
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
51-
52-
// Set title of the messagebox
53-
set_window_title("RTE Aborted! (x_x)");
54-
55-
// Show messagebox with explanation
56-
// allegro_message("Abortion in file %s, line %i, because:\n\n%s\n\nThe last frame has been dumped to 'abortscreen.bmp'", file, line, description);
57-
// Shortened and less confusing one.. users have no use of knowing which source file and where
58-
#ifdef WIN32
59-
allegro_message("%s\n\nThe last frame has been dumped to 'abortscreen.bmp'\n\nYou can copy this message with Ctrl+C", description);
60-
#else // WIN32
61-
allegro_message("%s\n\nThe last frame has been dumped to 'abortscreen.bmp'", description);
62-
#endif // WIN32
63-
// True so that the asm_ { int 3 } code is run and the debugger goes there.
64-
// exit(-1);
65-
return true;
66-
}
67-
68-
69-
extern bool DDTAbortFunc(const std::string description,
70-
const char *file,
71-
int line)
72-
{
73-
return DDTAbortFunc(description.c_str(), file, line);
74-
}
75-
76-
77-
//////////////////////////////////////////////////////////////////////////////////////////
78-
// Global function: DDTAssert
79-
//////////////////////////////////////////////////////////////////////////////////////////
80-
// Description: A souped-up, customized assert function that brings up a nice dialog
81-
// box on assert failure, where the user can choose to: break, ignore
82-
// the particular assertion failure once, or to always ignore.
83-
84-
bool DDTAssert(bool expression,
85-
const char *description,
86-
const char *file,
87-
int line,
88-
bool &alwaysIgnore)
89-
{
90-
// ASSERT(expression);
91-
92-
if (!expression) {
93-
/*
94-
int response;
95-
char string[512];
96-
sprintf(string, "What: %s\nWhere: %s - Line %i", description, file, line);
97-
response = MessageBox(0,
98-
string,
99-
"Assertion Failure!",
100-
MB_ABORTRETRYIGNORE | MB_ICONSTOP | MB_SETFOREGROUND | MB_TOPMOST);
101-
if (response == IDABORT)
102-
return true;
103-
if (response == IDRETRY)
104-
return false;
105-
if (response == IDIGNORE) {
106-
alwaysIgnore = true;
107-
return false;
108-
}
109-
*/
110-
// TODO: Make this display a box in the game asking whether to ignore or abort")
111-
// For now, always abort.
112-
char error[512];
113-
sprintf(error, "Assertion failed: %s", description);
114-
DDTAbortFunc(error, __FILE__, __LINE__);
115-
116-
// True so that the asm_ { int 3 } code is run and the debugger goes there.
117-
return true;
118-
}
119-
120-
// Assert didn't fail
121-
return false;
122-
}
123-
124-
125-
extern bool DDTAssert(bool expression,
126-
std::string description,
127-
const char *file,
128-
int line,
129-
bool &alwaysIgnore)
130-
{
131-
return DDTAssert(expression, description.c_str(), file, line, alwaysIgnore);
132-
}
133-
134-
} // namespace RTE
2+
//#include "Constants.h"
3+
4+
namespace RTE {
5+
6+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
7+
8+
extern void ShowMessageBox(std::string message) { allegro_message(message.c_str()); }
9+
10+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
11+
12+
extern bool RTEAbortFunc(const char *description, const char *file, int line) {
13+
// Save out the screen bitmap, after making a copy of it, faster sometimes
14+
if (screen) {
15+
BITMAP *abortScreenBuffer = create_bitmap(screen->w, screen->h);
16+
blit(screen, abortScreenBuffer, 0, 0, 0, 0, screen->w, screen->h);
17+
PALETTE palette;
18+
get_palette(palette);
19+
save_bmp("abortscreen.bmp", abortScreenBuffer, palette);
20+
destroy_bitmap(abortScreenBuffer);
21+
}
22+
// Ditch the video mode so the message box appears without problems
23+
if (screen != 0) { set_gfx_mode(GFX_TEXT, 0, 0, 0, 0); }
24+
// Set title of the messagebox
25+
set_window_title("RTE Aborted! (x_x)");
26+
27+
char message[512];
28+
29+
#if defined DEBUG_BUILD || defined MIN_DEBUG_BUILD
30+
// Show message box with explanation
31+
std::snprintf(message, sizeof(message), "Runtime Error in file %s, line %i, because:\n\n%s\n\nThe last frame has been dumped to 'abortscreen.bmp'", file, line, description);
32+
allegro_message(message);
33+
#else
34+
// Shortened and less confusing one. users have no use of knowing which source file and where.
35+
std::snprintf(message, sizeof(message), "%s\n\nThe last frame has been dumped to 'abortscreen.bmp'", description);
36+
allegro_message(message);
37+
#endif
38+
// True so that the debugbreak code is run and the debugger goes there.
39+
return true;
40+
}
41+
42+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
43+
44+
extern bool RTEAbortFunc(const std::string description, const char *file, int line) {
45+
return RTEAbortFunc(description.c_str(), file, line);
46+
}
47+
48+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
49+
50+
bool RTEAssertFunc(bool expression, const char *description, const char *file, int line, bool &alwaysIgnore) {
51+
if (!expression) {
52+
// TODO: Make this display a box in the game asking whether to ignore or abort. For now, always abort.
53+
RTEAbortFunc(description, __FILE__, __LINE__);
54+
55+
// True so that the debugbreak code is run and the debugger goes there.
56+
return true;
57+
}
58+
return false;
59+
}
60+
61+
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
62+
63+
extern bool RTEAssertFunc(bool expression, std::string description, const char *file, int line, bool &alwaysIgnore) {
64+
return RTEAssertFunc(expression, description.c_str(), file, line, alwaysIgnore);
65+
}
66+
}

0 commit comments

Comments
 (0)