4 #include <discover/device-handler.h>
21 struct grub2_word *next;
22 struct grub2_word *last;
23 struct list_item argv_list;
29 /* postprocessing (with process_expansions) populates these to hand to
30 * the grub2_command callbacks */
35 struct grub2_statements {
39 struct grub2_statement {
40 struct list_item list;
47 int (*exec)(struct grub2_script *,
48 struct grub2_statement *);
51 struct grub2_statement_simple {
52 struct grub2_statement st;
53 struct grub2_argv *argv;
56 struct grub2_statement_menuentry {
57 struct grub2_statement st;
58 struct grub2_argv *argv;
59 struct grub2_statements *statements;
62 struct grub2_statement_if {
63 struct grub2_statement st;
64 struct grub2_statement *condition;
65 struct grub2_statements *true_case;
66 struct grub2_statements *false_case;
69 struct grub2_statement_block {
70 struct grub2_statement st;
71 struct grub2_statements *statements;
74 struct grub2_command {
76 int (*exec)(struct grub2_script *script,
77 int argc, char *argv[]);
78 struct list_item list;
82 struct grub2_statements *statements;
83 struct list environment;
90 struct grub2_script *script;
97 struct grub2_statements *create_statements(struct grub2_parser *parser);
99 struct grub2_statement *create_statement_simple(struct grub2_parser *parser,
100 struct grub2_argv *argv);
102 struct grub2_statement *create_statement_menuentry(struct grub2_parser *parser,
103 struct grub2_argv *argv, struct grub2_statements *stmts);
105 struct grub2_statement *create_statement_if(struct grub2_parser *parser,
106 struct grub2_statement *condition,
107 struct grub2_statements *true_case,
108 struct grub2_statements *false_case);
110 struct grub2_statement *create_statement_block(struct grub2_parser *parser,
111 struct grub2_statements *stmts);
113 struct grub2_word *create_word_text(struct grub2_parser *parser,
116 struct grub2_word *create_word_var(struct grub2_parser *parser,
117 const char *name, bool split);
119 struct grub2_argv *create_argv(struct grub2_parser *parser);
121 void statement_append(struct grub2_statements *stmts,
122 struct grub2_statement *stmt);
124 void argv_append(struct grub2_argv *argv, struct grub2_word *word);
126 void word_append(struct grub2_word *w1, struct grub2_word *w2);
128 /* script interface */
129 void script_execute(struct grub2_script *script);
131 int statement_simple_execute(struct grub2_script *script,
132 struct grub2_statement *statement);
133 int statement_if_execute(struct grub2_script *script,
134 struct grub2_statement *statement);
135 int statement_menuentry_execute(struct grub2_script *script,
136 struct grub2_statement *statement);
138 struct grub2_script *create_script(void *ctx);
140 const char *script_env_get(struct grub2_script *script, const char *name);
142 void script_env_set(struct grub2_script *script,
143 const char *name, const char *value);
145 void script_register_command(struct grub2_script *script,
146 struct grub2_command *command);
148 struct grub2_command *script_lookup_command(struct grub2_script *script,
151 void register_builtins(struct grub2_script *script);
154 struct resource *create_grub2_resource(void *ctx,
155 struct discover_device *orig_device,
156 struct grub2_root *root, const char *path);
158 bool resolve_grub2_resource(struct device_handler *handler,
159 struct resource *res);
161 /* external parser api */
162 struct grub2_parser *grub2_parser_create(void *ctx);
163 void grub2_parser_parse(struct grub2_parser *parser, char *buf, int len);