36 lines
957 B
Plaintext
36 lines
957 B
Plaintext
|
|
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"];
|
||
|
|
}
|
||
|
|
}
|