Blame src/debug.c

Packit d36e9b
/*
Packit d36e9b
 * libieee1284 - IEEE 1284 library
Packit d36e9b
 * Copyright (C) 2001, 2002  Tim Waugh <twaugh@redhat.com>
Packit d36e9b
 *
Packit d36e9b
 * This program is free software; you can redistribute it and/or modify
Packit d36e9b
 * it under the terms of the GNU General Public License as published by
Packit d36e9b
 * the Free Software Foundation; either version 2 of the License, or
Packit d36e9b
 * (at your option) any later version.
Packit d36e9b
 *
Packit d36e9b
 * This program is distributed in the hope that it will be useful,
Packit d36e9b
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit d36e9b
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
Packit d36e9b
 * GNU General Public License for more details.
Packit d36e9b
 *
Packit d36e9b
 * You should have received a copy of the GNU General Public License
Packit d36e9b
 * along with this program; if not, write to the Free Software
Packit d36e9b
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit d36e9b
 */
Packit d36e9b
Packit d36e9b
#ifdef HAVE_CONFIG_H
Packit d36e9b
# include "config.h"
Packit d36e9b
#endif /* HAVE_CONFIG_H */
Packit d36e9b
Packit d36e9b
#include <errno.h>
Packit d36e9b
#include <fcntl.h>
Packit d36e9b
#include <stdarg.h>
Packit d36e9b
#include <stdio.h>
Packit d36e9b
#include <stdlib.h>
Packit d36e9b
#ifndef _MSC_VER
Packit d36e9b
#include <sys/time.h>
Packit d36e9b
#endif
Packit d36e9b
#include <sys/types.h>
Packit d36e9b
#include <time.h>
Packit d36e9b
Packit d36e9b
#include "debug.h"
Packit d36e9b
#include "detect.h"
Packit d36e9b
#include "ieee1284.h"
Packit d36e9b
Packit d36e9b
#define ENVAR "LIBIEEE1284_DEBUG"
Packit d36e9b
static int debugging_enabled = -1;
Packit d36e9b
Packit d36e9b
static unsigned char soft_ctr = 0xff;
Packit d36e9b
Packit d36e9b
static const char *
Packit d36e9b
timeofday (void)
Packit d36e9b
{
Packit d36e9b
  static char str[100];
Packit d36e9b
  struct timeval tod;
Packit d36e9b
#if !(defined __MINGW32__ || defined _MSC_VER)
Packit d36e9b
  if (gettimeofday (&tod, NULL))
Packit d36e9b
    {
Packit d36e9b
      str[0] = '\0';
Packit d36e9b
    }
Packit d36e9b
  else
Packit d36e9b
#endif
Packit d36e9b
    {
Packit d36e9b
      struct tm *tm = localtime (&tod.tv_sec);
Packit d36e9b
      char *p = str + strftime (str, 50, "%H:%M:%S.", tm);
Packit d36e9b
      sprintf (p, "%06ld", tod.tv_usec);
Packit d36e9b
    }
Packit d36e9b
  return str;
Packit d36e9b
}
Packit d36e9b
Packit d36e9b
unsigned char
Packit d36e9b
debug_display_status (unsigned char st)
Packit d36e9b
{
Packit d36e9b
  static unsigned char last_status = 0xff;
Packit d36e9b
Packit d36e9b
  if (!debugging_enabled)
Packit d36e9b
    goto out;
Packit d36e9b
Packit d36e9b
  if (last_status == st)
Packit d36e9b
    goto out;
Packit d36e9b
Packit d36e9b
  last_status = st;
Packit d36e9b
  debugprintf ("%s STATUS: %cnFault %cSelect %cPError %cnAck %cBusy\n",
Packit d36e9b
	   timeofday (),
Packit d36e9b
	   st & S1284_NFAULT ? ' ' : '!',
Packit d36e9b
	   st & S1284_SELECT ? ' ' : '!',
Packit d36e9b
	   st & S1284_PERROR ? ' ' : '!',
Packit d36e9b
	   st & S1284_NACK ? ' ' : '!',
Packit d36e9b
	   st & S1284_BUSY ? ' ' : '!');
Packit d36e9b
Packit d36e9b
 out:
Packit d36e9b
  return st;
Packit d36e9b
}
Packit d36e9b
Packit d36e9b
unsigned char
Packit d36e9b
debug_display_control (unsigned char ct)
Packit d36e9b
{
Packit d36e9b
  if (!debugging_enabled)
Packit d36e9b
    goto out;
Packit d36e9b
Packit d36e9b
  if (soft_ctr == ct)
Packit d36e9b
    goto out;
Packit d36e9b
Packit d36e9b
  soft_ctr = ct;
Packit d36e9b
  debugprintf ("%s CONTROL: %cnStrobe %cnAutoFd %cnInit %cnSelectIn\n",
Packit d36e9b
	   timeofday (),
Packit d36e9b
	   ct & C1284_NSTROBE ? ' ' : '!',
Packit d36e9b
	   ct & C1284_NAUTOFD ? ' ' : '!',
Packit d36e9b
	   ct & C1284_NINIT ? ' ' : '!',
Packit d36e9b
	   ct & C1284_NSELECTIN ? ' ' : '!');
Packit d36e9b
Packit d36e9b
 out:
Packit d36e9b
  return ct;
Packit d36e9b
}
Packit d36e9b
Packit d36e9b
void
Packit d36e9b
debug_frob_control (unsigned char mask, unsigned char val)
Packit d36e9b
{
Packit d36e9b
  if (debugging_enabled)
Packit d36e9b
    {
Packit d36e9b
      unsigned char new_ctr = (soft_ctr & ~mask) ^ val;
Packit d36e9b
      debug_display_control (new_ctr);
Packit d36e9b
    }
Packit d36e9b
}
Packit d36e9b
Packit d36e9b
void
Packit d36e9b
debugprintf (const char *fmt, ...)
Packit d36e9b
{
Packit d36e9b
  if (!debugging_enabled)
Packit d36e9b
    return;
Packit d36e9b
Packit d36e9b
  if (debugging_enabled == -1) {
Packit d36e9b
    int dummy;
Packit d36e9b
    (void) dummy; /* warning remover for MinGW and VC++ */
Packit d36e9b
Packit d36e9b
    if (!getenv (ENVAR))
Packit d36e9b
      {
Packit d36e9b
	debugging_enabled = 0;
Packit d36e9b
	return;
Packit d36e9b
      }
Packit d36e9b
Packit d36e9b
#if !(defined __MINGW32__ || defined _MSC_VER)
Packit d36e9b
    /* Is stderr open? */
Packit d36e9b
    if (fcntl (fileno (stderr), F_GETFL, &dummy) == -1 && errno == EBADF)
Packit d36e9b
      {
Packit d36e9b
	debugging_enabled = 0;
Packit d36e9b
	return;
Packit d36e9b
      }
Packit d36e9b
#endif
Packit d36e9b
Packit d36e9b
    debugging_enabled = 1;
Packit d36e9b
  }
Packit d36e9b
  
Packit d36e9b
  {
Packit d36e9b
    va_list ap;
Packit d36e9b
    va_start (ap, fmt);
Packit d36e9b
    vfprintf (stderr, fmt, ap);
Packit d36e9b
    va_end (ap);
Packit d36e9b
  }
Packit d36e9b
}
Packit d36e9b
Packit d36e9b
/*
Packit d36e9b
 * Local Variables:
Packit d36e9b
 * eval: (c-set-style "gnu")
Packit d36e9b
 * End:
Packit d36e9b
 */