XPlor/definitions/cod/menulist.xscript

36 lines
957 B
Plaintext
Raw Normal View History

type menulist [display="Menu List"]
{
// MenuList header (12 bytes)
i32 name_ptr [ui, readonly, display="Name Ptr"];
u32 menu_count [ui, readonly, display="Menu Count"];
i32 menus_ptr [ui, readonly, display="Menus Ptr"];
// Name string (if inline)
if (name_ptr == -1) {
name = cstring() [ui, readonly, display="Name"];
_name = name;
}
// Menu definitions (if inline)
if (menus_ptr == -1 && 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 == -1) {
_menu = parse_here("menudef");
menus = push("menus", _menu);
}
}
menus = menus [table="Menus", columns="name"];
}
}