//=======================================================================// // File: debug2on.hpp // // Project: Architecture // // Author: J.M. Albertson // // 4-12-95 CPB added Str_Cat macro // //-----------------------------------------------------------------------// // Copyright (C) 1994, Virtual World Entertainments, All Rights reserved // // PROPRIETARY AND CONFIDENTIAL // //=======================================================================// #if !defined(OLD_DEBUG_LEVEL) # define OLD_DEBUG_LEVEL 2 #else # undef OLD_DEBUG_LEVEL # if DEBUG_LEVEL>=3 # define OLD_DEBUG_LEVEL 3 # elif DEBUG_LEVEL==1 # define OLD_DEBUG_LEVEL 1 # elif DEBUG_LEVEL==0 # define OLD_DEBUG_LEVEL 0 # endif #endif #undef DEBUG_LEVEL #undef Verify #undef Verify_And_Dump #undef Dump #undef Tell #undef Warn #undef Warn_And_Dump #undef Check_Signature #undef Check_Pointer #undef Check #undef Check_Fpu #undef Fail #undef Cast_Object #undef DEBUG_CODE #undef Mem_Copy #undef Str_Copy #undef Str_Cat #undef Sqrt #undef Arctan #undef Arccos #undef Arcsin #undef Power #define DEBUG_LEVEL 2 #define DEBUG_CODE(x) { x } #define Dump(v)\ (DEBUG_STREAM << __FILE__ "(" << __LINE__ << "): "#v" = " << (v) << endl << flush) #define Verify(c)\ if (!(c)) {\ Verify_Failed(#c,__FILE__,__LINE__);\ } #define Verify_And_Dump(c,v)\ if (!(c)) {\ DEBUG_STREAM << __FILE__ "(" << __LINE__ << "): "#v" = " << (v) << endl;\ Verify_Failed(#c,__FILE__,__LINE__);\ } #define Warn(c)\ if (c) {\ DEBUG_STREAM << __FILE__"(" << __LINE__ << "): Warning -> "#c"\n" << flush;\ } #define Warn_And_Dump(c,v)\ if (c) {\ DEBUG_STREAM << __FILE__ "(" << __LINE__ << "): "#v" = " << (v) << endl;\ DEBUG_STREAM << __FILE__"(" << __LINE__ << "): Warning -> "#c"\n" << flush;\ } #define Tell(m)\ (DEBUG_STREAM << m << flush) #define Check_Pointer(p) Verify(p) #define Check_Fpu() Verify(Fpu_Ok()) #define Mem_Copy(destination, source, length, available)\ {\ Check_Pointer(destination);\ Check_Pointer(source);\ Verify((length) <= (available));\ Verify(abs((char*)destination - (char*)source) >= length);\ memcpy(destination, source, length);\ } #define Str_Copy(destination, source, available)\ {\ Check_Pointer(destination);\ Check_Pointer(source);\ Verify((strlen(source) + 1) <= (available));\ Verify(abs(destination - source) >= (strlen(source) + 1));\ strcpy(destination, source);\ } #define Str_Cat(destination, source, available)\ {\ Check_Pointer(destination);\ Check_Pointer(source);\ Verify((strlen(destination) + strlen(source) + 1) <= (available));\ strcat(destination, source);\ } #define Sqrt(value)\ ((value>=0.0f) ? sqrt(value) : (Fail("Bad parameter to sqrt"),0.0f)) #define Arctan(y,x)\ (\ (!Small_Enough(y) || !Small_Enough(x))\ ? atan2((y),(x)) :\ (Fail("Zero Arctan!"),0.0f)\ ) #define Arccos(x)\ (\ ((x)>=-1.0f && (x)<=1.0f)\ ? acos(x) :\ (Fail("Out of range Arccos!"),0.0f)\ ) #define Arcsin(x)\ (\ ((x)>=-1.0f && (x)<=1.0f)\ ? asin(x) :\ (Fail("Out of range Arcsin!"),0.0f)\ ) #define Power(x,y)\ (\ ((x)<0.0f)\ ? (Fail("Out of range Power!"),0.0f) :\ pow(x,y)\ ) #if defined(USE_SIGNATURE) # define Check_Signature(p) {\ Check_Pointer(p);\ Verify_And_Dump(!Is_Signature_Bad(p),Is_Signature_Bad(p));\ } #else # define Check_Signature(p) Check_Pointer(p) #endif #if defined(USE_SIGNATURE) # define Check(p) {Check_Signature(p);Verify(!((LWord)p & 3));Check_Fpu();} #else # define Check(p) {Check_Pointer(p);Verify(!((LWord)p & 3));Check_Fpu();} #endif #define Fail(m)\ Fail_To_Debugger(m,__FILE__,__LINE__) #if defined(USE_SIGNATURE) # define Cast_Object(type, ptr) (\ (!ptr)\ ? (\ Verify_Failed(#ptr,__FILE__,__LINE__),(type)NULL\ )\ : (\ (Is_Signature_Bad((type)ptr))\ ? (\ Verify_Failed(\ "Is_Signature_Bad(("#type")"#ptr")",\ __FILE__,\ __LINE__\ ),(type)NULL\ )\ : ((type)(ptr))\ )\ ) #else # define Cast_Object(type, ptr) (\ (!ptr)\ ? (\ Verify_Failed(#ptr,__FILE__,__LINE__),(type)NULL\ )\ : ((type)(ptr))\ ) #endif