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) } }