+ struct env_entry *env;
+ char *prefix, *sep;
+
+ list_init(&script->environment);
+
+ /* use location of the parsed config file to determine the prefix */
+ env = talloc(script, struct env_entry);
+
+ prefix = NULL;
+ if (script->filename) {
+ sep = strrchr(script->filename, '/');
+ if (sep)
+ prefix = talloc_strndup(env, script->filename,
+ sep - script->filename);
+ }
+
+ script_env_set(script, "prefix", prefix ? : default_prefix);
+ if (prefix)
+ talloc_free(prefix);
+
+ /* establish feature settings */
+ script_env_set(script, "feature_menuentry_id", "y");
+}
+
+void script_register_function(struct grub2_script *script,
+ const char *name, grub2_function fn,
+ void *data)
+{
+ struct grub2_symtab_entry *entry;
+
+ entry = talloc(script, struct grub2_symtab_entry);
+ entry->fn = fn;
+ entry->name = name;
+ entry->data = data;
+ list_add(&script->symtab, &entry->list);