/* debug.h 
 * Debugging declarations
 *
 * This file is part of TUA.
 * 
 *   Copyright (C) 1991,96  Lele Gaifax
 *
 *   This program is free software; you can redistribute it and/or modify
 *   it under the terms of the GNU General Public License as published by
 *   the Free Software Foundation; either version 2 of the license, or (at
 *   your option) any later version.
 *
 *   This program is distributed in the hope that it will be useful,
 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *   GNU General Public License for more details.
 *
 *   You should have received a copy of the GNU General Public License
 *   along with this program; if not, write to the Free Software
 *   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 *
 */

extern void EXFUN(dbg_set_current_file_name, (CONST char * filename));
extern void EXFUN(dbg_message, (CONST char * messg));
extern void EXFUN(dbg_print_new_line_number, (void));
extern void EXFUN(dbg_printf, (CONST char * fmt DOTS));
extern void EXFUN(dbg_end, (void));
     
#ifdef DEBUG
#define debug_filename(filename) dbg_set_current_file_name(filename)
#define debug_message(msg)	dbg_message(msg)
#define debug_newline() 	dbg_print_new_line_number()
#define debug_end()		dbg_end()

/*
 * Here I use a gcc 2.x feature: varargs macros. In Standard C I merely
 * #define a name, not a macro. Unfortunately this means that a function
 * call will occur also if the code is compiled without -DDEBUG, since in
 * no way a Standard C precompiler will skip this statement... Use gcc!
 *
 * NeXTstep 3.0 uses GCC 1.93, that do not support variable arguments to
 * macros. Too bad that it defines __GNUC__=2!. Fortunately, I can
 * isolate this by checking for __NeXT that is defined only by the FSF
 * GCC 2.x (at least 2.4.3).
 *
 */
#if defined(__GNUC__) && (__GNUC__ >= 2) && (!defined(__NeXT__) || defined(__NeXT))
     
#define debug_printf(msg, args...) dbg_printf(msg, ## args)
     
#else

#define debug_printf dbg_printf
     
#endif
     
#else /* NO DEBUG */
     
#define debug_message(msg)
#define debug_filename(filename)
#define debug_newline()
#define debug_end()

#if defined(__GNUC__) && (__GNUC__ >= 2) && (!defined(__NeXT__) || defined(__NeXT))

#define debug_printf(msg, args...)

#else

#define debug_printf dbg_printf
     
#endif

#endif

