// ZASSERT AND STACKTRACE are an improved assertion system which augments
// the WIN32 assert.h standard _assert.
// (c) 1999 Zachary B. Simpson
// Code may be used and distributed freely as long as all
// changes are noted appropriately.

#ifndef STACKTRACE_H
#define STACKTRACE_H

char *stackTrace( int skipAssert );
	// This function traces up the stack and creates a useful
	// stack dump good for printing after an assert of fatal.
	// It parses the symbol tables inside of the exe file
	// in order to print a useful report.  However, it
	// only understands COFF format debugging.  You must enable
	// COFF in the Project Settings Linker Options.  You may,
	// if you choose, enable both COFF and MS formats.
	//   If COFF data is not available, it will print out using
	// a hex dump, and may print more information than is valid.
	// The traversal of the stack is predicated on assumptions
	// about non-optimized MSVC stack frames.  Thus, if optimizations
	// are on, results may not be predicatble.
	//   If the skipAssert flag is true, it will not dump
	// and functions with the word assert in them.  Useful
	// for ignoring the call to assert which is not helpful.

#ifdef WIN32
char *demangleMSDEVFuncName(
	char *mangledName, 
	char funcName[], int funcNameMax,
	char args[], int maxArgs, 
	int &numArgs
);
#endif
	// This function is used by the stackTrace function in
	// order to deceipher the mangled C++ function names
	// generated by MSDEV in order to determine the argument list.  
	// The parser for this is very complicated and unfortunately
	// may not be able to parse all names.  In these cases,
	// stackTrace should resort to printing a hex dump.

#endif