5 /* node type specific functions */
8 typedef int (confnode_new_t)(struct confnode *n, const struct line *line);
9 typedef void (confnode_free_t)(struct confnode *n);
10 typedef int (confnode_add_attr_t)(struct confnode *n, const struct line *line,
12 typedef int (confnode_close_dir_t)(struct confnode *n, const struct line *line);
13 typedef int (confnode_dotconfig_write_t)(const struct confnode *n, FILE *f);
14 typedef int (confnode_strvalue_to_boolvalue_t)(const struct confnode *n,
15 const char *strvalue);
16 typedef int (confnode_set_user_strvalue_t)(struct confnode *n,
17 const char *strvalue);
18 typedef int (confnode_get_user_strvalue_t)(const struct confnode *n, char *buf,
20 typedef int (confnode_set_default_strvalue_t)(struct confnode *n,
21 const char *strvalue);
22 typedef int (confnode_get_default_strvalue_t)(const struct confnode *n, char *buf,
24 typedef const char *(confnode_get_type_str_t)(const struct confnode *n);
25 typedef void (confnode_display_short_t)(const struct confnode *n);
26 typedef void (confnode_display_long_t)(const struct confnode *n);
28 /* all node-specific operations */
32 confnode_free_t *free;
35 confnode_add_attr_t *add_attr;
36 confnode_close_dir_t *close_dir;
39 confnode_dotconfig_write_t *dotconfig_write;
42 confnode_strvalue_to_boolvalue_t *strvalue_to_boolvalue;
45 confnode_set_user_strvalue_t *set_user_strvalue;
46 confnode_get_user_strvalue_t *get_user_strvalue;
49 confnode_set_default_strvalue_t *set_default_strvalue;
50 confnode_get_default_strvalue_t *get_default_strvalue;
53 confnode_get_type_str_t *get_type_str;
54 confnode_display_short_t *display_short;
55 confnode_display_long_t *display_long;
59 /* generic node functions */
62 /* alloc a new root node */
63 struct confnode *confnode_new_root(void);
65 /* Parse the line, and return a new confnode if the line is a valid
66 * new confnode line (example: "menuconfig FOO\n"). Else, return
68 struct confnode *confnode_new(const struct line *line);
70 /* Free the node given as argument, and all its associated data */
71 void confnode_free(struct confnode *n);
73 /* Parse a line to get an attribute of confnode n. Return 0 if it
74 * matches an attribute for this node, else return -1. */
75 int confnode_add_attr(struct confnode *n, const struct line *line,
78 /* Parse a line and check if it closes the current node,
79 * "endmenu" closes "menu" node): in this case return 0. Else, return
81 int confnode_close_dir(struct confnode *n, const struct line *line);
83 /* write config value in file f in a dotconfig-like manner. Return 0
85 int confnode_dotconfig_write(const struct confnode *n, FILE *f);
87 /* Convert string value into boolean value (mainly used for
88 * dependancies). Return -1 on error, else return the boolean value (0
90 int confnode_strvalue_to_boolvalue(const struct confnode *n, const char *strvalue);
92 /* Get the string value that the user asked to set for this node
93 * 'n'. This function does not check if dependancies are met. Return 0
94 * on success, in this case the string is copied in buffer 'buf' of
95 * len 'buflen'. Return -1 if the value cannot be read. */
96 int confnode_get_user_strvalue(const struct confnode *n, char *buf, unsigned buflen);
98 /* Set the string value of the node n. Return 0 on success, or -1 if
99 * the value cannot be set. */
100 int confnode_set_user_strvalue(struct confnode *n, const char *strvalue);
102 /* Get user boolean value of the node. Return 0 if disabled, 1 if
103 * enabled, and -1 on error. */
104 int confnode_get_user_boolvalue(const struct confnode *n);
106 /* Set the default string value of the node n. Return 0 on success, or
107 * -1 if the value cannot be set. */
108 int confnode_set_default_strvalue(struct confnode *n, const char *strvalue);
110 /* Get the default string value for this node 'n'. This function does
111 * not check if dependancies are met. Return 0 on success, in this
112 * case the string is copied in buffer 'buf' of len 'buflen'. Return
113 * -1 if the value cannot be read. */
114 int confnode_get_default_strvalue(const struct confnode *n, char *buf, unsigned buflen);
116 /* Get string value of a node, including dep check. Return -1 on
117 * error. Return the boolean value of the node (0 or 1) on success: in
118 * this case, and if buf is no NULL, buf is filled with the strvalue. */
119 int confnode_get_value(const struct confnode *n, char *buf, unsigned buflen);
121 /* Get real boolean value of the node, checking deps first. Return 0
122 * if disabled, 1 if enabled, and -1 on error. */
123 int confnode_get_boolvalue(const struct confnode *n);
125 /* Return a string identifying the node type ("config", "menuconfig",
127 const char *confnode_get_type_str(const struct confnode *n);
129 /* Print one-line view of the node. */
130 void confnode_display_short(const struct confnode *n);
132 /* Print a detailed view of the node. */
133 void confnode_display_long(const struct confnode *n);
135 /* display the path of the current node */
136 void conf_display_path(const struct confnode *n);
138 /* register all nodes types */
139 void confnode_register_all(void);
141 /* structure describing a confnode type */
142 TAILQ_HEAD(confnode_type_list, confnode_type);
143 struct confnode_type {
144 TAILQ_ENTRY(confnode_type) next;
145 struct confnode_ops ops;
148 /* global list of all configuration node types */
149 extern struct confnode_type_list confnode_type_list;
151 #define MAX_NAME_SIZE 128
152 #define MAX_PROMPT_SIZE MAX_NAME_SIZE
153 #define MAX_VALUE_SIZE MAX_NAME_SIZE
154 #define MAX_HELP_SIZE 1024
156 TAILQ_HEAD(expr_node_list, expr_node);
159 TAILQ_HEAD(optname_list, optname);
161 TAILQ_ENTRY(optname) next;
166 * This structure defines a configuration node, for instance a "menu"
167 * entry, or a "bool" entry.
169 TAILQ_HEAD(confnode_list, confnode);
171 TAILQ_ENTRY(confnode) next; /* next in children list */
172 TAILQ_ENTRY(confnode) hnext; /* next in hash table */
173 TAILQ_ENTRY(confnode) user_next; /* next in user list */
174 #define CONFNODE_F_IS_DIR 0x0001 /* node can contain other nodes*/
175 #define CONFNODE_F_NO_SET_DEPS 0x0002 /* does not support the "requires" attribute */
176 #define CONFNODE_F_NO_SET_PROMPT 0x0004 /* does not support the "prompt" attribute */
177 #define CONFNODE_F_NO_SET_DEFAULT 0x0008 /* does not support the "default" attribute */
178 #define CONFNODE_F_IS_ROOT 0x0010 /* the root node */
179 #define CONFNODE_F_QUOTE_VALUE 0x0020 /* value needs quote to be displayed */
180 #define CONFNODE_F_INVISIBLE 0x0040 /* never seen from cmdline (like the IF node) */
181 #define CONFNODE_F_BOOL 0x0080 /* Stored value is a boolean */
182 #define CONFNODE_F_INT 0x0100 /* Stored value is a integer */
183 #define CONFNODE_F_STR 0x0200 /* Stored value is a string */
184 #define CONFNODE_F_CHOICE 0x0400 /* Stored value is a choice */
185 #define CONFNODE_F_FORCE_CHILD_DEPS 0x0800 /* if node is disabled, disable all children */
186 #define CONFNODE_F_NO_DEPS 0x1000 /* bypass dependency checks */
187 #define CONFNODE_F_NO_NAME 0x2000 /* node has no name (if, comments, ...) */
189 const struct confnode_ops *ops;
190 char name[MAX_NAME_SIZE];
191 char prompt[MAX_PROMPT_SIZE];
192 char help[MAX_HELP_SIZE];
193 char default_value[MAX_VALUE_SIZE];
194 char value[MAX_VALUE_SIZE];
195 struct confnode_list children;
196 struct confnode *parent;
197 struct expr_node_list depend;
200 #endif /* _CONFNODE_H_ */