19 struct grub2_word *next;
20 struct grub2_word *last;
21 struct list_item argv_list;
27 /* postprocessing (with process_expansions) populates these to hand to
28 * the grub2_command callbacks */
33 struct grub2_statements {
37 struct grub2_statement {
38 struct list_item list;
45 int (*exec)(struct grub2_script *,
46 struct grub2_statement *);
49 struct grub2_statement_simple {
50 struct grub2_statement st;
51 struct grub2_argv *argv;
54 struct grub2_statement_menuentry {
55 struct grub2_statement st;
56 struct grub2_argv *argv;
57 struct grub2_statements *statements;
60 struct grub2_statement_if {
61 struct grub2_statement st;
62 struct grub2_statement *condition;
63 struct grub2_statements *true_case;
64 struct grub2_statements *false_case;
67 struct grub2_statement_block {
68 struct grub2_statement st;
69 struct grub2_statements *statements;
72 struct grub2_command {
74 int (*exec)(struct grub2_script *script,
75 int argc, char *argv[]);
76 struct list_item list;
80 struct grub2_statements *statements;
81 struct list environment;
88 struct grub2_script *script;
91 struct grub2_statements *create_statements(struct grub2_parser *parser);
93 struct grub2_statement *create_statement_simple(struct grub2_parser *parser,
94 struct grub2_argv *argv);
96 struct grub2_statement *create_statement_menuentry(struct grub2_parser *parser,
97 struct grub2_argv *argv, struct grub2_statements *stmts);
99 struct grub2_statement *create_statement_if(struct grub2_parser *parser,
100 struct grub2_statement *condition,
101 struct grub2_statements *true_case,
102 struct grub2_statements *false_case);
104 struct grub2_statement *create_statement_block(struct grub2_parser *parser,
105 struct grub2_statements *stmts);
107 struct grub2_word *create_word_text(struct grub2_parser *parser,
110 struct grub2_word *create_word_var(struct grub2_parser *parser,
111 const char *name, bool split);
113 struct grub2_argv *create_argv(struct grub2_parser *parser);
115 void statement_append(struct grub2_statements *stmts,
116 struct grub2_statement *stmt);
118 void argv_append(struct grub2_argv *argv, struct grub2_word *word);
120 void word_append(struct grub2_word *w1, struct grub2_word *w2);
122 /* script interface */
123 void script_execute(struct grub2_script *script);
125 int statement_simple_execute(struct grub2_script *script,
126 struct grub2_statement *statement);
127 int statement_if_execute(struct grub2_script *script,
128 struct grub2_statement *statement);
129 int statement_menuentry_execute(struct grub2_script *script,
130 struct grub2_statement *statement);
132 struct grub2_script *create_script(void *ctx);
134 const char *script_env_get(struct grub2_script *script, const char *name);
136 void script_env_set(struct grub2_script *script,
137 const char *name, const char *value);
139 void script_register_command(struct grub2_script *script,
140 struct grub2_command *command);
142 struct grub2_command *script_lookup_command(struct grub2_script *script,
145 void register_builtins(struct grub2_script *script);