home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / MISC / MAILBOX.ZIP / MPBUG.H < prev    next >
Encoding:
C/C++ Source or Header  |  1988-06-27  |  4.6 KB  |  104 lines

  1. /****************************************************************************/
  2. /* mpbug.h -- Mike Parker's HANDY "C" DEBUGGING UTILITIES (INTERFACE)        */
  3. /* Created:  10/1/87        Release:  0.7        Version:  06/27/88  */
  4. /****************************************************************************
  5. (c) Copyright 1987, 1988 by Michael Benjamin Parker     (USA SS# 557-49-4130)
  6.  
  7. All Rights Reserved unless specified in the following include files: */
  8. #include "mptsk.cpy" /*
  9.  
  10. DO NOT REMOVE OR ALTER THIS NOTICE AND ITS PROVISIONS.
  11. ****************************************************************************/
  12. /* OVERVIEW:
  13. This file includes a set of macros handy for debugging "C" code.
  14. The file may be included in a program to be tested.  When the program is
  15. debugged, defining NDEBUG will nullify the effect of all mpbug calls.
  16. However, if the code ever gets buggy again, undefining NDEBUG quickly
  17. includes all the debugging statements.
  18.  
  19. See macros below for more details.
  20. */
  21. /****************************************************************************/
  22. /****************************************************************************/
  23. /****************************************************************************/
  24. /*     #ifndef    MPBUG_H
  25.     #define MPBUG_H    */
  26. /****************************************************************************/
  27. #ifndef    NDEBUG
  28. /****************************************************************************/
  29. #ifdef    __TURBOC__
  30. #ifndef    DOS_H
  31. #define    DOS_H
  32. #include <dos.h>
  33. #endif    /* DOS_H */
  34. #else
  35. #include <signal.h>
  36. #endif
  37. #include <stdio.h>
  38. /****************************************************************************/
  39. /****************************************************************************/
  40. #ifdef    ANSI_C
  41. int    mpbug_usrbrk(void);
  42. #else
  43. int    mpbug_usrbrk();
  44. #endif
  45. /****************************************************************************/
  46. #ifdef    __TURBOC__
  47. #define mpbug_init(bps)        ctrlbrk(mpbug_usrbrk);    mpbug_level(bps)
  48. #else
  49. #define    mpbug_init(bps)        signal(SIGINT,mpbug_usrbrk);    mpbug_level(bps)
  50. #endif
  51. /* Initialize:  Initializes the debugging routines:
  52.     Control-Break will halt program,
  53.     mpbug_lev() will indent bps bytes per space for every byte on stack.
  54. */
  55. /****************************************************************************/
  56. #ifdef    ANSI_C
  57. #define    mpbug_val(var,fmt)    fprintf(stderr,#var "= %" #fmt "\t",var)
  58. #define    mpbug_vali(var)        mpbug_val(var,ld)
  59. #define    mpbug_valp(var)        fprintf(stderr,#var "= %lX (%p)\t",ptr_2int(var),var)
  60. #define    mpbug_vals(var)        mpbug_val(var,s)
  61. #else
  62. #define    mpbug_val(var,fmt)    fprintf(stderr,"?var= %ld\t",var)
  63. #define    mpbug_vali(var)        fprintf(stderr,"?intvar= %ld\t",var)
  64. #define    mpbug_valp(var)        fprintf(stderr,"?ptrvar = %lX\t",var)
  65. #define    mpbug_vals(var)        fprintf(stderr,"?strvar %s\t",var)
  66.     /* WARNING: ASSUMES fmt IS SIGNED LONG */
  67. #endif
  68. /* Value:  Prints the name & value of a variable var of "printf" format fmt */
  69. /****************************************************************************/
  70. #define    mpbug_pos()    fprintf(stderr,"PC= %s %d\t",__FILE__,__LINE__)
  71. /* Position: Prints the current position (file & line) in the source code.  */
  72. /****************************************************************************/
  73. #define    mpbug_lev()        mpbug_level(0)
  74. /* Level:  Starts a new line indented according to the current stack depth. */
  75. /****************************************************************************/
  76. #define    mpbug_cmt(string)    fprintf(stderr,string)
  77. /* Comment:  An ordinary printf.                        */
  78. /****************************************************************************/
  79. #define    mpbug_bp()        putc('\007',stderr);getc(stdin);
  80. /* Breakpoint:  Beeps stdout.  Pressing return continues.            */
  81. /****************************************************************************/
  82. #ifdef    ANSI_C
  83.     void    mpbug_level(unsigned bytesperspace);
  84. #else
  85.     void    mpbug_level();
  86. #endif
  87. /****************************************************************************/
  88. /****************************************************************************/
  89. #else /* NDEBUG DEFINED -- NO DEBUGGING */
  90. #define    mpbug_init(bps)        (bps)
  91. #define    mpbug_val(var,fmt)    (var)
  92. #define    mpbug_valp(var)        (var)
  93. #define    mpbug_vali(var)        (var)
  94. #define    mpbug_vals(var)        (var)
  95. #define    mpbug_pos()
  96. #define    mpbug_lev()
  97. #define    mpbug_cmt(string)    (string)
  98. #define    mpbug_bp()
  99. #endif
  100. /****************************************************************************/
  101. /****************************************************************************/
  102. /****************************************************************************/
  103. /*    #endif    MPBUG_H */
  104.