XPlor/definitions/cod/menulist.xscript

43 lines
948 B
Plaintext
Raw Normal View History

type menulist [display="Menu List"]
{
const PTR_INLINE = -1;
i32 name_ptr;
ui("name_ptr", "Name Ptr");
u32 menu_count;
ui("menu_count", "Menu Count");
i32 menus_ptr;
ui("menus_ptr", "Menus Ptr");
// Inline data
if (name_ptr == PTR_INLINE) {
name = cstring();
ui("name", "Name");
set_name(name);
}
// Menu definitions (complex - need two passes)
if (menus_ptr == PTR_INLINE && menu_count > 0) {
// First pass: parse all menu pointers
menu_ptrs = 0;
repeat(menu_count) {
_ptr = parse_here("menuptr");
menu_ptrs = push("menu_ptrs", _ptr);
}
// Second pass: parse menudefs for inline pointers
menus = 0;
repeat(menu_count) {
_ptr_obj = get(menu_ptrs, _i);
_ptr_val = get(_ptr_obj, "ptr");
if (_ptr_val == PTR_INLINE) {
_menu = parse_here("menudef");
menus = push("menus", _menu);
}
}
// Table: menus (columns: name)
}
}