/* ======================================================================
**
** debugging constants and macros
**
** History:
**       Date       Who      Description
**      -------     ---      --------------------------------------------
**      01/2001     SL       Create
**      07/2001     rme      Modified DPRINTF to clear line before printing
**                           Added CLEAR_STDOUT
**    07/06/2003    SL       Updated for GeoMag Observatory. Renamed from 
**			     veh_debug.h to debug.h
** ======================================================================
*/

#ifndef DEBUG_INC
#define DEBUG_INC

extern int utime2dsltime_str(double time, char *str);


//For debugging, define types for using DPRINTF
//Messages <= type specified will be printed
#define ALL  0 //Only us as type within DPRINTF call
#define ERR  1
#define WNG  2
#define MSG  3
#define DBG  4
#define DBG1 5
#define DBG2 6
#define DBG3 7

//   {if (type <= level) {msg;} fflush(stdout); }

#define DPRINTF_ENABLE 1
#if DPRINTF_ENABLE
#define DPRINTF(type,level,msg) \
   {if (type <= level) \
     {char timestr[25]; \
      utime2dsltime_str(-1,timestr); \
      printf("\r%125s\r"," "); \
      printf("%s ",timestr); \
      {msg;} \
      fflush(stdout); \
      } \
     }
#else
# define DPRINTF(type,level,msg)
#endif

#define CLEAR_STDOUT  {printf("\r%125s\r"," "); fflush(stdout);}


//
//Define macros for err_abort and err_print
//
#define err_abort(code,text) \
    {fprintf(stderr, "%s at \"%s\":%d:%s (err=%d, %s)\n", \
	        text, __FILE__, __LINE__, __PRETTY_FUNCTION__, code, strerror(code)); \
     abort(); \
     }
	
#define err_print(code,text) \
    {fprintf(stderr, "%s at \"%s\":%d:%s (err=%d, %s)\n", \
	        text, __FILE__, __LINE__, __PRETTY_FUNCTION__, code, strerror(code)); \
     }


#endif
