#include "std.h"
#include "lpc_incl.h"

#ifdef DEBUG_MACRO

mapping_t *debug_levels PROT((void));

typedef struct {
    char *name;
    int bit;
} debug_t;

#define E(x) { #x, DBG_##x }

debug_t levels[] = {
    E(call_out),
    E(d_flag),
    E(connections),
    E(mapping),
    E(sockets),
    E(comp_func_tab),
    E(LPC),
    E(LPC_line)
};

#define NELEM(x) (sizeof(x)/sizeof(x[0]))

mapping_t *debug_levels() {
    int dl = debug_level;
    mapping_t *ret = allocate_mapping(10);
    int i;
    
    for (i = 0; i < NELEM(levels); i++) {
	add_mapping_pair(ret, levels[i].name, dl & levels[i].bit);
	dl &= ~levels[i].bit;
    }

    if (dl)
	add_mapping_pair(ret, "unknown", dl);
    
    return ret;
}

void debug_level_set P1(char *, level) {
    int i;
    
    for (i = 0; i < NELEM(levels); i++) {
	if (strcmp(level, levels[i].name) == 0) {
	    debug_level |= levels[i].bit;
	    return;
	}
    }
}

void debug_level_clear P1(char *, level) {
    int i;
    
    for (i = 0; i < NELEM(levels); i++) {
	if (strcmp(level, levels[i].name) == 0) {
	    debug_level &= ~levels[i].bit;
	    return;
	}
    }
}

#endif
