#ifndef INCL_XDATA_H
#define INCL_XDATA_H
#include "util.h"
typedef struct _xdata_st *xdata_t;
typedef struct _xdata_field_st *xdata_field_t;
typedef struct _xdata_option_st *xdata_option_t;
typedef struct _xdata_item_st *xdata_item_t;
typedef enum {
xd_type_NONE,
xd_type_FORM,
xd_type_RESULT,
xd_type_SUBMIT,
xd_type_CANCEL
} xdata_type_t;
struct _xdata_st {
pool p;
xdata_type_t type;
char *title;
char *instructions;
xdata_field_t fields, flast;
xdata_field_t rfields, rflast;
xdata_item_t items, ilast;
};
typedef enum {
xd_field_NONE,
xd_field_BOOLEAN,
xd_field_FIXED,
xd_field_HIDDEN,
xd_field_JID_MULTI,
xd_field_JID_SINGLE,
xd_field_LIST_MULTI,
xd_field_LIST_SINGLE,
xd_field_TEXT_MULTI,
xd_field_TEXT_PRIVATE,
xd_field_TEXT_SINGLE
} xdata_field_type_t;
struct _xdata_field_st {
pool p;
xdata_field_type_t type;
char *var;
char *label;
char *desc;
int required;
char **values;
int nvalues;
xdata_option_t options, olast;
xdata_field_t next;
};
struct _xdata_option_st {
pool p;
char *label;
char *value;
xdata_option_t next;
};
struct _xdata_item_st {
pool p;
xdata_field_t fields, flast;
xdata_item_t next;
};
xdata_t xdata_new(xdata_type_t type, char *title, char *instructions);
xdata_t xdata_parse(nad_t nad, int root);
xdata_field_t xdata_field_new(xdata_t xd, xdata_field_type_t type, char *var, char *label, char *desc, int required);
xdata_item_t xdata_item_new(xdata_t xd);
void xdata_add_field(xdata_t xd, xdata_field_t xdf);
void xdata_add_rfield(xdata_t xd, xdata_field_t xdf);
void xdata_add_field_item(xdata_item_t item, xdata_field_t xdf);
void xdata_add_item(xdata_t xd, xdata_item_t xdi);
void xdata_add_option(xdata_field_t xdf, char *value, int lvalue, char *label, int llabel);
void xdata_add_value(xdata_field_t xdf, char *value, int vlen);
#endif