#include <htable.h>
#include <argv.h>
#include <dict.h>
#define SHOW_NONDEF (1<<0)
#define SHOW_DEFS (1<<1)
#define SHOW_NAME (1<<2)
#define SHOW_MAPS (1<<3)
#define EDIT_MAIN (1<<4)
#define SHOW_LOCKS (1<<5)
#define SHOW_EVAL (1<<6)
#define SHOW_SASL_SERV (1<<7)
#define SHOW_SASL_CLNT (1<<8)
#define COMMENT_OUT (1<<9)
#define SHOW_MASTER (1<<10)
#define FOLD_LINE (1<<11)
#define DEF_MODE SHOW_NAME
typedef struct {
int flags;
char *param_data;
const char *(*convert_fn) (char *);
} PC_PARAM_NODE;
#define PC_PARAM_FLAG_RAW (1<<0)
#define PC_PARAM_FLAG_BUILTIN (1<<1)
#define PC_PARAM_FLAG_SERVICE (1<<2)
#define PC_PARAM_FLAG_USER (1<<3)
#define PC_PARAM_MASK_CLASS \
(PC_PARAM_FLAG_BUILTIN | PC_PARAM_FLAG_SERVICE | PC_PARAM_FLAG_USER)
#define PC_PARAM_CLASS_OVERRIDE(node, class) \
((node)->flags = (((node)->flags & ~PC_PARAM_MASK_CLASS) | (class)))
#define PC_RAW_PARAMETER(node) ((node)->flags & PC_PARAM_FLAG_RAW)
#define PC_PARAM_NO_DATA ((char *) 0)
#define PC_PARAM_TABLE HTABLE
#define PC_PARAM_INFO HTABLE_INFO
extern PC_PARAM_TABLE *param_table;
#define PC_PARAM_TABLE_CREATE(size) htable_create(size);
#define PC_PARAM_NODE_CAST(ptr) ((PC_PARAM_NODE *) (ptr))
#define PC_PARAM_TABLE_LIST(table) htable_list(table)
#define PC_PARAM_INFO_NAME(ht) ((const char *) (ht)->key)
#define PC_PARAM_INFO_NODE(ht) PC_PARAM_NODE_CAST((ht)->value)
#define PC_PARAM_TABLE_FIND(table, name) \
PC_PARAM_NODE_CAST(htable_find((table), (name)))
#define PC_PARAM_TABLE_LOCATE(table, name) htable_locate((table), (name))
#define PC_PARAM_TABLE_ENTER(table, name, flags, data, func) \
htable_enter((table), (name), (char *) make_param_node((flags), \
(data), (func)))
PC_PARAM_NODE *make_param_node(int, char *, const char *(*) (char *));
const char *convert_param_node(int, const char *, PC_PARAM_NODE *);
extern VSTRING *param_string_buf;
typedef struct {
char *name_space;
ARGV *argv;
DICT *all_params;
HTABLE *valid_names;
} PC_MASTER_ENT;
#define PC_MASTER_MIN_FIELDS 8
PC_MASTER_ENT *master_table;
#define LINE_LIMIT 80
#define SEPARATORS " \t\r\n"
#define INDENT_LEN 4
#define INDENT_TEXT " "
extern int cmd_mode;
extern void set_config_dir(void);
extern void read_parameters(void);
extern void set_parameters(void);
extern void show_parameters(int, int, char **);
extern void edit_parameters(int, int, char **);
extern void read_master(int);
extern void show_master(int, char **);
#define WARN_ON_OPEN_ERROR 0
#define FAIL_ON_OPEN_ERROR 1
extern void register_builtin_parameters(void);
extern void register_service_parameters(void);
extern void register_user_parameters(void);
extern void register_dbms_parameters(const char *,
const char *(*) (const char *, int, char *),
PC_MASTER_ENT *);
extern void flag_unused_main_parameters(void);
extern void flag_unused_master_parameters(void);
extern void show_maps(void);
extern void show_locks(void);
extern void show_sasl(int);