16 #if defined(APPLE_APP)
17 #include <CoreFoundation/CoreFoundation.h>
20 #if defined(HAVE_MALLOC_H)
29 bool env_enabled =
false;
30 bool cell_enabled =
false;
35 #define MAX_BUF_SIZE 1024
36 static char buffer[MAX_BUF_SIZE], buffer_tmp[MAX_BUF_SIZE];
40 #include <malloc/malloc.h>
41 #define MALLOC_USABLE(pointer) malloc_size(pointer)
42 #elif defined(SCP_SOLARIS)
43 #define MALLOC_USABLE(pointer) (*((size_t*)(pointer)-1))
47 #include <malloc_np.h>
49 #define MALLOC_USABLE(pointer) malloc_usable_size(pointer)
73 if (fstat (fd, &
buf) == -1)
86 uint then = SDL_GetTicks() + mili;
88 while (then > SDL_GetTicks());
98 fprintf(stderr,
"ASSERTION FAILED: \"%s\" at %s:%d\n", text, filename, line);
101 mprintf((
"ASSERTION: \"%s\" at %s:%d\n", text, strrchr(filename,
'/')+1, line ));
104 if (Cmdline_nowarn) {
117 void WinAssert(
char * text,
char *filename,
int line,
const char *
format, ... )
125 memset( buffer_tmp, 0,
sizeof(buffer_tmp) );
127 va_start(args, format);
128 vsnprintf(buffer_tmp,
sizeof(buffer_tmp) - 1, format, args);
131 slen = strlen(buffer_tmp);
134 for (i = 0; i < slen; i++){
135 if (buffer_tmp[i] == (
char)0x0a) {
143 if (
buffer[slen-1] == (
char)0x20) {
150 fprintf(stderr,
"ASSERTION FAILED: \"%s\" at %s:%d %s\n", text, filename, line,
buffer);
153 mprintf((
"ASSERTION: \"%s\" at %s:%d %s\n", text, strrchr(filename,
'/')+1, line,
buffer ));
156 if (Cmdline_nowarn) {
168 void WarningEx(
char *filename,
int line,
const char *format, ... )
172 char msg[2 * MAX_BUF_SIZE];
174 va_start(args, format);
177 Warning(filename, line,
"%s", msg);
183 void Warning(
char * filename,
int line,
const char * format, ... )
193 memset( buffer_tmp, 0,
sizeof(buffer_tmp) );
195 va_start(args, format);
196 vsnprintf(buffer_tmp,
sizeof(buffer_tmp) - 1, format, args);
199 slen = strlen(buffer_tmp);
202 for (i = 0; i < slen; i++){
203 if (buffer_tmp[i] == (
char)0x0a) {
211 if (
buffer[slen-1] == (
char)0x20) {
218 mprintf((
"WARNING: \"%s\" at %s:%d\n",
buffer, strrchr(filename,
'/')+1, line));
221 fprintf(stderr,
"WARNING: \"%s\" at %s:%d\n",
buffer, filename, line);
226 void ReleaseWarning(
char * filename,
int line,
const char * format, ... )
235 memset( buffer_tmp, 0,
sizeof(buffer_tmp) );
237 va_start(args, format);
238 vsnprintf(buffer_tmp,
sizeof(buffer_tmp) - 1, format, args);
241 slen = strlen(buffer_tmp);
244 for (i = 0; i < slen; i++){
245 if (buffer_tmp[i] == (
char)0x0a) {
253 if (
buffer[slen-1] == (
char)0x20) {
260 mprintf((
"WARNING: \"%s\" at %s:%d\n",
buffer, strrchr(filename,
'/')+1, line));
263 fprintf(stderr,
"WARNING: \"%s\" at %s:%d\n",
buffer, filename, line);
267 void Error(
const char * filename,
int line,
const char * format, ... )
278 memset( buffer_tmp, 0,
sizeof(buffer_tmp) );
280 va_start(args, format);
281 vsnprintf(buffer_tmp,
sizeof(buffer_tmp) - 1, format, args);
284 mprintf((
"ERROR: %s\nFile: %s\nLine: %d\n", buffer_tmp, filename, line));
286 #if defined(APPLE_APP)
287 CFStringRef AsMessage;
291 snprintf(AsText, 1024,
"Error: %s\n\nFile: %s\nLine %d\n", buffer_tmp, filename, line);
292 AsMessage = CFStringCreateWithCString(NULL, AsText, kCFStringEncodingASCII);
294 CFUserNotificationDisplayAlert(0, kCFUserNotificationStopAlertLevel, NULL, NULL, NULL, CFSTR(
"Error!"), AsMessage, CFSTR(
"Exit"), NULL, NULL, &result);
296 slen = strlen(buffer_tmp);
299 for (i = 0; i < slen; i++){
300 if (buffer_tmp[i] == (
char)0x0a) {
308 if (
buffer[slen-1] == (
char)0x20) {
316 fprintf(stderr,
"ERROR: \"%s\" at %s:%d\n",
buffer, filename, line);
323 void LuaError(
struct lua_State *L,
const char *format, ...)
328 if (format == NULL) {
330 snprintf(
buffer,
sizeof(
buffer) - 1,
"%s", lua_tostring(L, -1) );
333 va_start(args, format);
339 fprintf(stderr,
"LUA ERROR: \"%s\"\n",
buffer);
340 fprintf(stderr,
"\n");
342 fprintf(stderr,
"------------------------------------------------------------------\n");
343 fprintf(stderr,
"ADE Debug:\n");
344 fprintf(stderr,
"\n");
345 fprintf(stderr,
"Name: %s\n", Ade_debug_info.name);
346 fprintf(stderr,
"Name of: %s\n", Ade_debug_info.namewhat);
347 fprintf(stderr,
"Function type: %s\n", Ade_debug_info.what);
348 fprintf(stderr,
"Defined on: %d\n", Ade_debug_info.linedefined);
349 fprintf(stderr,
"Upvalues: %d\n", Ade_debug_info.nups);
350 fprintf(stderr,
"\n" );
351 fprintf(stderr,
"Source: %s\n", Ade_debug_info.source);
352 fprintf(stderr,
"Short source: %s\n", Ade_debug_info.short_src);
353 fprintf(stderr,
"Current line: %d\n", Ade_debug_info.currentline);
355 fprintf(stderr,
"------------------------------------------------------------------\n");
356 fprintf(stderr,
"LUA Stack:\n");
357 fprintf(stderr,
"\n");
359 fprintf(stderr,
"%s\n",
buffer);
360 fprintf(stderr,
"\n");
368 SDL_RWops *handle = NULL;
379 if ( szFilename != NULL ) {
380 Assert( lpmmioinfo == NULL );
382 handle = SDL_RWFromFile( szFilename, mode );
383 }
else if ( lpmmioinfo != NULL ) {
384 Assert( szFilename == NULL );
394 return (
long) SDL_RWseek( hmmio, lOffset, iOrigin );
399 return (
long) SDL_RWread( hmmio, pch, 1, cch );
409 rc = SDL_RWclose( hmmio );
420 char *p = name + strlen(name)-1;
423 while( (p > name) && (*p !=
'\\') && (*p !=
'/') && (*p !=
':') )
434 struct timeval timer_now;
436 gettimeofday(&timer_now, NULL);
448 DCF_BOOL(watch_malloc, Watch_malloc )
462 if (getcwd(out_buf, len) == NULL) {
463 Error(__FILE__, __LINE__,
"buffer overflow in getcwd (buf size = %u)", len);
472 int status = chdir(path);
478 Warning(__FILE__, __LINE__,
"Cannot chdir to %s: %s", path, strerror(m_error));
486 int _mkdir(
const char *path)
492 strncpy(tmp_path, path,
MAX_PATH-1);
502 status = mkdir(tmp_path, 0755);
507 if (status && (m_error != EEXIST) ) {
508 Warning(__FILE__, __LINE__,
"Cannot mkdir %s: %s", tmp_path, strerror(m_error));
518 void _splitpath (
char *path,
char *drive,
char *dir,
char *fname,
char *ext)
520 if ( (path == NULL) || (fname == NULL) )
524 Assert( (dir == NULL) && (ext == NULL) );
528 const char *ls = strrchr(path,
'/');
536 const char *lp = strrchr(path,
'.');
539 lp = ls + strlen(ls);
547 strncpy(fname, ls, dist);
555 if ( (h != NULL) && (i > -1) ) {
559 fprintf(stderr,
"%s: \"%s\"\n", s2, s1);
569 if (denominator == 0)
616 void *ptr = malloc( size );
627 size_t used_size = MALLOC_USABLE(ptr);
628 if ( Watch_malloc ) {
630 fprintf( stdout,
"Malloc %zu bytes [%s(%d)]\n", used_size,
clean_filename(filename), line );
633 TotalRam += used_size;
640 void *
_vm_realloc(
void *ptr,
int size,
char *filename,
int line,
int quiet )
642 void *
_vm_realloc(
void *ptr,
int size,
int quiet )
649 size_t old_size = MALLOC_USABLE(ptr);
652 void *ret_ptr = realloc( ptr, size );
655 if (quiet && (size > 0) && (ptr != NULL)) {
664 size_t used_size = MALLOC_USABLE(ret_ptr);
665 if ( Watch_malloc ) {
667 fprintf( stdout,
"Realloc %zu bytes [%s(%d)]\n", used_size,
clean_filename(filename), line );
670 TotalRam += (used_size - old_size);
677 char *
_vm_strdup(
const char *ptr,
char *filename,
int line )
683 int len = strlen(ptr);
696 char *
_vm_strndup(
const char *ptr,
int size,
char *filename,
int line )
708 strncpy( dst, ptr, size );
716 void _vm_free(
void *ptr,
char *filename,
int line )
725 mprintf((
"Why are you trying to free a NULL pointer?\n"));
731 TotalRam -= MALLOC_USABLE(ptr);
GLenum GLsizei GLenum format
const char * clean_filename(const char *name)
GLfloat GLfloat GLfloat GLfloat h
bool QueryPerformanceCounter(LARGE_INTEGER *pcount)
void _cdecl void void _cdecl void _cdecl Warning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
void _cdecl void void _cdecl void _cdecl void _cdecl WarningEx(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
MMRESULT mmioClose(HMMIO hmmio, uint wFlags)
GLenum GLuint GLenum GLsizei const GLchar * buf
void _vm_free(void *ptr, char *filename=NULL, int line=-1)
int _getcwd(char *buffer, unsigned int len)
typedef int(SCP_EXT_CALLCONV *SCPDLL_PFVERSION)(SCPDLL_Version *)
void vsprintf(SCP_string &dest, const char *format, va_list ap)
int _mkdir(const char *path)
int vm_init(int min_heap_size)
int _chdir(const char *path)
long mmioSeek(HMMIO hmmio, long lOffset, int iOrigin)
char * _vm_strndup(const char *ptr, int size, char *filename, int line)
GLsizei const GLchar ** string
char * strnset(char *string, int fill, size_t count)
void * _vm_realloc(void *ptr, int size, char *filename=NULL, int line=-1, int quiet=0)
void _splitpath(char *path, char *drive, char *dir, char *fname, char *ext)
void _cdecl void void _cdecl Error(const char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
GLuint const GLchar * name
INT32 INT32 * denominator
void ade_stackdump(lua_State *L, char *stackdump)
int MulDiv(int number, int numerator, int denominator)
char * _vm_strdup(const char *ptr, char *filename, int line)
#define DCF_BOOL(function_name, bool_variable)
#define MMIOERR_CANNOTWRITE
void * _vm_malloc(int size, char *filename=NULL, int line=-1, int quiet=0)
GLsizei const GLchar ** path
An overhauled/updated debug console to allow monitoring, testing, and general debugging of new featur...
int MessageBox(HWND h, const char *s1, const char *s2, int i)
long mmioRead(HMMIO hmmio, HPSTR pch, long cch)
void _cdecl void void _cdecl void _cdecl void _cdecl void _cdecl ReleaseWarning(char *filename, int line, SCP_FORMAT_STRING const char *format,...) SCP_FORMAT_STRING_ARGS(3
void _cdecl WinAssert(char *text, char *filename, int line)
void windebug_memwatch_init()
void _cdecl void void _cdecl void _cdecl void _cdecl void _cdecl int Global_warning_count
void _cdecl void LuaError(struct lua_State *L, SCP_FORMAT_STRING const char *format=NULL,...) SCP_FORMAT_STRING_ARGS(2
HMMIO mmioOpen(LPSTR szFilename, LPMMIOINFO lpmmioinfo, DWORD dwOpenFlags)