home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Source / GNU / uucp / Uucp.framework / uucp.subproj / debug.c < prev    next >
C/C++ Source or Header  |  1995-10-09  |  3KB  |  174 lines

  1. /* debug.c
  2.    UUCP debugging functions.
  3.  
  4.    Copyright (C) 1991, 1992 Ian Lance Taylor
  5.  
  6.    This file is part of the Taylor UUCP package.
  7.  
  8.    This program is free software; you can redistribute it and/or
  9.    modify it under the terms of the GNU General Public License as
  10.    published by the Free Software Foundation; either version 2 of the
  11.    License, or (at your option) any later version.
  12.  
  13.    This program is distributed in the hope that it will be useful, but
  14.    WITHOUT ANY WARRANTY; without even the implied warranty of
  15.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  16.    General Public License for more details.
  17.  
  18.    You should have received a copy of the GNU General Public License
  19.    along with this program; if not, write to the Free Software
  20.    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  21.  
  22.    The author of the program may be contacted at ian@airs.com or
  23.    c/o Cygnus Support, 48 Grove Street, Somerville, MA 02144.
  24.    */
  25.  
  26. #include "uucp.h"
  27.  
  28. #include <ctype.h>
  29.  
  30. #include "uudefs.h"
  31.  
  32. #if DEBUG > 1
  33.  
  34. /* The debugging level.  */
  35. int iDebug;
  36.  
  37. /* Parse a debugging string.  This may be a simple number, which sets
  38.    the given number of bits in iDebug, or it may be a series of single
  39.    letters.  */
  40.  
  41. static const char * const azDebug_names[] = DEBUG_NAMES;
  42.  
  43. int
  44. idebug_parse (z)
  45.      const char *z;
  46. {
  47.   char *zend;
  48.   int i, iret;
  49.   char *zcopy, *ztok;
  50.  
  51.   if (strncasecmp (z, DEBUG_NONE, sizeof DEBUG_NONE - 1) == 0)
  52.     return 0;
  53.  
  54.   i = (int) strtol ((char *) z, &zend, 0);
  55.   if (*zend == '\0')
  56.     {
  57.       if (i > 15)
  58.     i = 15;
  59.       else if (i < 0)
  60.     i = 0;
  61.       return (1 << i) - 1;
  62.     }
  63.  
  64.   zcopy = zbufcpy (z);
  65.  
  66.   iret = 0;
  67.  
  68.   for (ztok = strtok (zcopy, ", \t");
  69.        ztok != NULL;
  70.        ztok = strtok ((char *) NULL, ", \t"))
  71.     {
  72.       if (strcasecmp (ztok, "all") == 0)
  73.     {
  74.       iret = DEBUG_MAX;
  75.       break;
  76.     }
  77.       for (i = 0; azDebug_names[i] != NULL; i++)
  78.     {
  79.       if (strncasecmp (ztok, azDebug_names[i],
  80.                strlen (azDebug_names[i])) == 0)
  81.         {
  82.           iret |= 1 << i;
  83.           break;
  84.         }
  85.     }
  86.       if (azDebug_names[i] == NULL)
  87.     ulog (LOG_ERROR, "Unrecognized debugging option \"%s\"",
  88.           ztok);
  89.     }
  90.  
  91.   ubuffree (zcopy);
  92.  
  93.   return iret;
  94. }
  95.  
  96. #endif /* DEBUG > 1 */
  97.  
  98. /* A debugging routine used when displaying buffers.  */
  99.  
  100. size_t
  101. cdebug_char (z, ichar)
  102.      char *z;
  103.      int ichar;
  104. {
  105.   char b;
  106.  
  107.   if (isprint (BUCHAR (ichar))
  108.       && ichar != '\"'
  109.       && ichar != '\\')
  110.     {
  111.       *z++ = (char) ichar;
  112.       *z = '\0';
  113.       return 1;
  114.     }
  115.  
  116.   *z++ = '\\';
  117.  
  118.   switch (ichar)
  119.     {
  120.     case '\n':
  121.       b = 'n';
  122.       break;
  123.     case '\r':
  124.       b = 'r';
  125.       break;
  126.     case '\"':
  127.       b = '\"';
  128.       break;
  129.     case '\\':
  130.       b = '\\';
  131.       break;
  132.     default:
  133.       sprintf (z, "%03o", (unsigned int) BUCHAR (ichar));
  134.       return strlen (z) + 1;
  135.     }
  136.  
  137.   *z++ = b;
  138.   *z = '\0';
  139.   return 2;
  140. }      
  141.  
  142. #if DEBUG > 1
  143.  
  144. /* Display a buffer when debugging.  */
  145.  
  146. void
  147. udebug_buffer (zhdr, zbuf, clen)
  148.      const char *zhdr;
  149.      const char *zbuf;
  150.      size_t clen;
  151. {
  152.   char *z, *zalc;
  153.   int i;
  154.  
  155.   zalc = zbufalc (clen * 4 + 1);
  156.  
  157.   z = zalc;
  158.   for (i = 0; i < clen && i < 80; i++)
  159.     z += cdebug_char (z, zbuf[i]);
  160.   if (i < clen)
  161.     {
  162.       *z++ = '.';
  163.       *z++ = '.';
  164.       *z++ = '.';
  165.     }
  166.   *z = '\0';
  167.  
  168.   ulog (LOG_DEBUG, "%s %lu \"%s\"", zhdr, (unsigned long) clen, zalc);
  169.  
  170.   ubuffree (zalc);
  171. }
  172.  
  173. #endif
  174.