home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / compiler / nasm20b / nasm_src / debug.c < prev    next >
C/C++ Source or Header  |  1993-01-19  |  7KB  |  299 lines

  1. /* ---------------------------------------------------------------------- */
  2. /*                   Copyright (C) 1992 by Natürlich!                     */
  3. /*                      This file is copyrighted!                         */
  4. /*                Refer to the documentation for details.                 */
  5. /* ---------------------------------------------------------------------- */
  6. #include <stdio.h>
  7. #include <stddef.h>
  8. #define lword unsigned long
  9.  
  10. #define DBG_LONG  0
  11. #define DBG_INT   1
  12. #define DBG_CHARP 2
  13. #define DBG_CHAR  3
  14.  
  15. #define DEBUGDEBUG 0
  16. #define MAXRECURS 1000
  17. #define ESTREAM   stdout
  18. #define dswitch turn_debug_off_while_in_a_debugger
  19.  
  20. char          *__debug_prefix;
  21.  
  22. static char   *cproc[MAXRECURS];
  23. static int    pcproc = 0;
  24. int           dswitch;
  25. static int    fstflag;
  26.  
  27. #define check()                                       \
  28.    if( pcproc > MAXRECURS || pcproc < 0)              \
  29.       nierror("debug: Internal pointer corrupted")
  30.  
  31. void ENTER( name)
  32. char   *name;
  33. {
  34.    int   i = pcproc;
  35.  
  36.    if( ! fstflag)
  37.    {
  38.       fstflag = 1;
  39.       setvbuf( ESTREAM, NULL, _IONBF, (size_t) 0);
  40.    }
  41.    if( dswitch)
  42.       return;
  43.    check();
  44.    if( ! name)
  45.       nierror("debug: ENTER called w/o name");
  46. # if DEBUGDEBUG
  47.    fprintf( ESTREAM,
  48.          "ENTER with %s. pcproc = %d  cproc[ pcproc -1 ]=\"%s\"\n",
  49.          name,
  50.          pcproc,
  51.          pcproc || cproc[ pcproc - 1] ? cproc[ pcproc - 1] : "(nil)");
  52. # endif
  53.    while( i--)
  54.    {
  55.       putc( ' ', ESTREAM);
  56.       putc( ' ', ESTREAM);
  57.    }
  58.    if( __debug_prefix)
  59.       fprintf( ESTREAM, "<%s> [ENTER: \"%s\"]\n", __debug_prefix, name);
  60.    else
  61.       fprintf( ESTREAM, "[ENTER: \"%s\"]\n",  name);
  62.    if( pcproc == MAXRECURS - 1)
  63.       nierror("\tdebug: Recursion depth exceeded");
  64.    else
  65.       cproc[ pcproc++] = name;
  66. }
  67.  
  68.  
  69. void SMESS( mess)
  70. char *mess;
  71. {
  72.    if( dswitch)
  73.       return;
  74.    check();
  75.    if( ! mess)
  76.       nierror("debug: SMESS called w/o message");
  77. # if DEBUGDEBUG
  78.    fprintf( ESTREAM,
  79.          "SMESS with %s.  pcproc = %d  cproc[ pcproc -1 ]=\"%s\"\n",
  80.          mess,
  81.          pcproc,
  82.          pcproc || cproc[ pcproc - 1] ? cproc[ pcproc - 1] : "(nil)");
  83. # endif
  84.    if( ! cproc[ pcproc - 1])
  85.       nierror("debug: MESS Internal stack corrupted");
  86.    if( __debug_prefix)
  87.       fprintf( ESTREAM, "<%s> %s\n", __debug_prefix, mess);
  88.    else
  89.       fprintf( ESTREAM, mess);
  90. }
  91.  
  92.  
  93. void MESS( mess)
  94. char *mess;
  95. {
  96.    int   i = pcproc;
  97.  
  98.    if( dswitch)
  99.       return;
  100.    check();
  101.    if( ! mess)
  102.       nierror("debug: MESS called w/o message");
  103. # if DEBUGDEBUG
  104.    fprintf( ESTREAM,
  105.          "MESS with %s.  pcproc = %d  cproc[ pcproc -1 ]=\"%s\"\n",
  106.          mess,
  107.          pcproc,
  108.          pcproc || cproc[ pcproc - 1] ? cproc[ pcproc - 1] : "(nil)");
  109. # endif
  110.    while( i--)
  111.    {
  112.       putc( ' ', ESTREAM);
  113.       putc( ' ', ESTREAM);
  114.    }
  115.    if( ! cproc[ pcproc - 1])
  116.       nierror("debug: MESS Internal stack corrupted");
  117.    if( __debug_prefix)
  118.       fprintf( ESTREAM, "<%s> [<%s>: \"%s\"]\n",
  119.                __debug_prefix, cproc[ pcproc - 1], mess);
  120.    else
  121.       fprintf( ESTREAM, "[<%s>: \"%s\"]\n",
  122.                cproc[ pcproc - 1], mess);
  123. }
  124.  
  125.  
  126. void IMESS( form, value, bytes)
  127. char           *form;
  128. lword          value;
  129. int            bytes;
  130. {
  131.    int   i = pcproc;
  132.  
  133.    if( dswitch)
  134.       return;
  135.    check();
  136. # if DEBUGDEBUG
  137.    fprintf( ESTREAM,
  138.          "IMESS with %s.  pcproc = %d  cproc[ pcproc -1 ]=\"%s\"\n",
  139.          form,
  140.          pcproc,
  141.          pcproc || cproc[ pcproc - 1] ? cproc[ pcproc - 1] : "(nil)");
  142. # endif
  143.    while( i--)
  144.    {
  145.       putc( ' ', ESTREAM);
  146.       putc( ' ', ESTREAM);
  147.    }
  148.    if( ! cproc[ pcproc - 1])
  149.       nierror("debug: IMESS Internal stack corrupted");
  150.    if( __debug_prefix)
  151.       fprintf( ESTREAM, "<%s> [<%s>: \"",
  152.                __debug_prefix, cproc[ pcproc - 1]);
  153.    else
  154.       fprintf( ESTREAM, "[<%s>: \"", cproc[ pcproc - 1]);
  155.  
  156.    switch( bytes)
  157.    {
  158.       case DBG_CHARP : 
  159.          fprintf( ESTREAM, form, (char *) value); 
  160.          break;
  161.  
  162.       case DBG_INT   : 
  163.          fprintf( ESTREAM, form, (int) value);
  164.          break;
  165.  
  166.       case DBG_CHAR  :
  167.          fprintf( ESTREAM, form, (char) value);
  168.          break;
  169.          
  170.       default: 
  171.          fprintf( ESTREAM, form, value);
  172.    }
  173.    fprintf( ESTREAM, "\"]\n");
  174. }
  175.  
  176. #if EXPERIMENTAL
  177. void VMESS( form, ...)
  178. char  *form;
  179. {
  180.    va_list  p;
  181.    int   i = pcproc;
  182.  
  183.    if( dswitch)
  184.       return;
  185.    check();
  186. # if DEBUGDEBUG
  187.    fprintf( ESTREAM,
  188.          "VMESS ... pcproc = %d  cproc[ pcproc -1 ]=\"%s\"\n",
  189.          pcproc,
  190.          pcproc || cproc[ pcproc - 1] ? cproc[ pcproc - 1] : "(nil)");
  191. # endif
  192.    while( i--)
  193.    {
  194.       putc( ' ', ESTREAM);
  195.       putc( ' ', ESTREAM);
  196.    }
  197.    if( ! cproc[ pcproc - 1])
  198.       nierror("debug: VMESS Internal stack corrupted");
  199.    va_start( p, form);
  200.    if( __debug_prefix)
  201.       fprintf( ESTREAM, "<%s> [<%s>: \"",
  202.                __debug_prefix, cproc[ pcproc - 1]);
  203.    else
  204.       fprintf( ESTREAM, "[<%s>: \"", cproc[ pcproc - 1]);
  205.    vfprintf( ESTREAM, form, p);
  206.    va_end( p);
  207.    fprintf( ESTREAM, "]\n");
  208. }
  209. #endif
  210.  
  211. void LEAVE()
  212. {
  213.    int   i;
  214.  
  215.    if( dswitch)
  216.       return;
  217.    if( (i = pcproc) <= 0)
  218.       nierror("LEAVE counter was 0 or negative");
  219.    check();
  220. # if DEBUGDEBUG
  221.    fprintf( ESTREAM,
  222.          "LEAVE.  pcproc = %d  cproc[ pcproc -1 ]=\"%s\"\n",
  223.          pcproc,
  224.          pcproc || cproc[ pcproc - 1] ? cproc[ pcproc - 1] : "(nil)");
  225. # endif
  226.    while( --i)
  227.    {
  228.       putc( ' ', ESTREAM);
  229.       putc( ' ', ESTREAM);
  230.    }
  231.    if( ! cproc[ pcproc - 1])
  232.       nierror("debug: LEAVE Internal stack corrupted");
  233.    if( __debug_prefix)
  234.       fprintf( ESTREAM, "<%s> [LEAVE: \"%s\"]\n", 
  235.               __debug_prefix, cproc[ --pcproc]);
  236.    else
  237.       fprintf( ESTREAM, "[LEAVE: \"%s\"]\n", cproc[ --pcproc]);
  238. }
  239.  
  240. void ALEAVE()
  241. {
  242.    int   i;
  243.  
  244.    if( dswitch)
  245.       return;
  246.    if( (i = pcproc) <= 0)
  247.       nierror("LEAVE counter was 0 or negative");
  248.    check();
  249. # if DEBUGDEBUG
  250.    fprintf( ESTREAM,
  251.          "ALEAVE.  pcproc = %d  cproc[ pcproc -1 ]=\"%s\"\n",
  252.          pcproc,
  253.          pcproc || cproc[ pcproc - 1] ? cproc[ pcproc - 1] : "(nil)");
  254. # endif
  255.    while( --i)
  256.    {
  257.       putc( ' ', ESTREAM);
  258.       putc( ' ', ESTREAM);
  259.    }
  260.    if( ! cproc[ pcproc - 1])
  261.       nierror("debug: ALEAVE Internal stack corrupted");
  262.    if( __debug_prefix)
  263.       fprintf( ESTREAM, "<%s> [DONE with: \"%s\"]\n", 
  264.               __debug_prefix, cproc[ --pcproc]);
  265.    else
  266.       fprintf( ESTREAM, "[DONE with: \"%s\"]\n", cproc[ --pcproc]);
  267. }
  268.  
  269. void SETBACK( i)
  270. {
  271.    if( dswitch)
  272.       return;
  273.    check();
  274. # if DEBUGDEBUG
  275.    fprintf( ESTREAM,
  276.          "SETBACK.  pcproc = %d  cproc[ pcproc -1 ]=\"%s\"\n",
  277.          pcproc,
  278.          pcproc || cproc[ pcproc - 1] ? cproc[ pcproc - 1] : "(nil)");
  279. # endif
  280.    if( i > pcproc || ! i)
  281.       fprintf( ESTREAM, "debug: SETBACKing now would be an ERROR!!\n");
  282.    else
  283.    pcproc = i;
  284. }
  285.  
  286. void   SAVESTATE( p)
  287. int   *p;
  288. {
  289.    check();
  290. # if DEBUGDEBUG
  291.    fprintf( ESTREAM,
  292.          "SAVESTATE.  pcproc = %d  cproc[ pcproc -1 ]=\"%s\"\n",
  293.          pcproc,
  294.          pcproc || cproc[ pcproc - 1] ? cproc[ pcproc - 1] : "(nil)");
  295. # endif
  296.    *p = pcproc;
  297. }
  298.  
  299.