home *** CD-ROM | disk | FTP | other *** search
/ Amiga Developer CD v1.2 / amidev_cd_12.iso / devcon / milan_1991 / devcon91.3 / debug / examples / mydebug.h < prev    next >
C/C++ Source or Header  |  1992-09-01  |  3KB  |  108 lines

  1. /*
  2.  * mydebug.h - #include this file sometime after stdio.h
  3.  * Set MYDEBUG to 1 to turn on debugging, 0 to turn off debugging
  4.  */
  5. #ifndef MYDEBUG_H
  6. #define MYDEBUG_H
  7.  
  8. #define MYDEBUG     0
  9.  
  10. #if MYDEBUG
  11. /*
  12.  * MYDEBUG User Options
  13.  */
  14.  
  15. /* Set to 1 to turn second level D2(bug()) statements */
  16. #define DEBUGLEVEL2    1
  17.  
  18. /* Set to a non-zero # of ticks if a delay is wanted after each debug message */
  19. #define DEBUGDELAY        0
  20.  
  21. /* Always non-zero for the DDx macros */
  22. #define DDEBUGDELAY        50
  23.  
  24. /* Set to 1 for serial debugging (link with debug.lib) */
  25. #define KDEBUG        0
  26.  
  27. /* Set to 1 for parallel debugging (link with ddebug.lib) */
  28. #define DDEBUG        0
  29.  
  30. #endif /* MYDEBUG */
  31.  
  32.  
  33. /* Prototypes for Delay, kprintf, dprintf. Or use proto/dos.h or functions.h. */
  34. #include <clib/dos_protos.h>
  35. void kprintf(UBYTE *fmt,...);
  36. void dprintf(UBYTE *fmt,...);
  37.  
  38. /*
  39.  * D(bug()), D2(bug()), DQ((bug()) only generate code if MYDEBUG is non-zero
  40.  *
  41.  * Use D(bug()) for general debugging, D2(bug()) for extra debugging that
  42.  * you usually won't need to see, DD(bug()) for debugging statements that
  43.  * you always want followed by a delay, and DQ(bug()) for debugging that
  44.  * you'll NEVER want a delay after (ie. debugging inside a Forbid, Disable,
  45.  * Task, or Interrupt)
  46.  *
  47.  * Some example uses (all are used the same):
  48.  * D(bug("about to do xyz. variable = $%lx\n",myvariable)); 
  49.  * D2(bug("v1=$%lx v2=$%lx v3=$%lx\n",v1,v2,v3)); 
  50.  * DQ(bug("in subtask: variable = $%lx\n",myvariable));
  51.  * DD(bug("About to do xxx\n"));
  52.  *
  53.  * Set MYDEBUG above to 1 when debugging is desired and recompile the modules
  54.  *  you wish to debug.  Set to 0 and recompile to turn off debugging.
  55.  *
  56.  * User options set above:
  57.  * Set DEBUGDELAY to a non-zero # of ticks (ex. 50) when a delay is desired.
  58.  * Set DEBUGLEVEL2 nonzero to turn on second level (D2) debugging statements
  59.  * Set KDEBUG to 1 and link with debug.lib for serial debugging.
  60.  * Set DDEBUG to 1 and link with ddebug.lib for parallel debugging.
  61.  */
  62.  
  63.  
  64. /* 
  65.  * Debugging function automaticaly set to printf, kprintf, or dprintf
  66.  */
  67.  
  68. #if KDEBUG
  69. #define bug kprintf
  70. #elif DDEBUG
  71. #define bug dprintf
  72. #else    /* else changes all bug's to printf's */
  73. #define bug printf
  74. #endif
  75.  
  76. /*
  77.  * Debugging macros
  78.  */
  79.  
  80. /* D(bug(     delays DEBUGDELAY if DEBUGDELAY is > 0
  81.  * DD(bug(    always delays DDEBUGDELAY
  82.  * DQ(bug(      (debug quick) never uses Delay.  Use in forbids,disables,ints
  83.  * The similar macros with "2" in their names are second level debugging
  84.  */
  85. #if MYDEBUG    /* Turn on first level debugging */
  86. #define D(x)  (x); if(DEBUGDELAY>0) Delay(DEBUGDELAY)
  87. #define DD(x) (x); Delay(DDEBUGDELAY)
  88. #define DQ(x) (x)
  89. #if DEBUGLEVEL2 /* Turn on second level debugging */
  90. #define D2(x)  (x); if(DEBUGDELAY>0) Delay(DEBUGDELAY)
  91. #define DD2(x) (x); Delay(DDEBUGDELAY)
  92. #define DQ2(x) (x)
  93. #else  /* Second level debugging turned off */
  94. #define D2(x) ;
  95. #define DD2(x) ;
  96. #define DQ2(x) ;
  97. #endif /* DEBUGLEVEL2 */
  98. #else  /* First level debugging turned off */
  99. #define D(x) ;
  100. #define DQ(x) ;
  101. #define D2(x) ;
  102. #define DD(x) ;
  103. #endif
  104.  
  105.  
  106. #endif /* MYDEBUG_H */
  107.  
  108.