/* vi:set ts=8 sw=8 noet:
 *
 * VIM - Vi IMproved	by Bram Moolenaar
 *			Visual Workshop integration by Gordon Prieur
 *
 * Do ":help uganda"  in Vim to read copying and usage conditions.
 * Do ":help credits" in Vim to see a list of people who contributed.
 */


#ifndef NBDEBUG_H
#define NBDEBUG_H

#ifdef NBDEBUG

#ifndef ASSERT
#define ASSERT(c) \
    if (!(c)) { \
	fprintf(stderr, "Assertion failed: line %d, file %s\n", \
		__LINE__, __FILE__); \
	fflush(stderr); \
	abort(); \
    }
#endif

#define nbdebug(a) nbdbg a

#define NB_TRACE		0x00000001
#define NB_TRACE_VERBOSE	0x00000002
#define NB_TRACE_COLONCMD	0x00000004
#define NB_PRINT		0x00000008
#define NB_DEBUG_ALL		0xffffffff

#define NBDLEVEL(flags)		(nb_debug != NULL && (nb_dlevel & (flags)))

#define NBDEBUG_TRACE	1

typedef enum {
		WT_ENV = 1,		/* look for env var if set */
		WT_WAIT,		/* look for ~/.gvimwait if set */
		WT_STOP			/* look for ~/.gvimstop if set */
} WtWait;


void		 nbdbg(char *, ...);

void nbdebug_wait(u_int wait_flags, char *wait_var, u_int wait_secs);
void nbdebug_log_init(char *log_var, char *level_var);

extern FILE	*nb_debug;
extern u_int	 nb_dlevel;		/* nb_debug verbosity level */

# else		/* not NBDEBUG */

#ifndef ASSERT
# define ASSERT(c)
#endif

/*
 * The following 3 stubs are needed because a macro cannot be used because of
 * the variable number of arguments.
 */

void
nbdbg(
	char		*fmt,
	...)
{
}

#endif /* NBDEBUG */
#endif /* NBDEBUG_H */
