cb28d2b611
uiselectsave is a Save/Load/Delete slot picker built on save/save.h's SAVE_SLOT_COUNT: a scrolling list of framed uisaveslot_t rows (slot number + file name, or an "Empty Slot" placeholder), navigated via the same uimenu_t/focus-stack convention as every other menu. Load and Delete modes add a trailing action row (switch to delete / cancel) fixed below the scrollable area. Selecting a slot in Delete mode routes through uiConfirmOpen before actually blanking the slot via saveSlotInit + saveDeviceSlotWrite. uiScrollingEnsureVisible in uiscrolling.c is now a real implementation instead of the earlier placeholder. Main menu collapses New Game/Load Game into a single Start Game entry that opens uiselectsave in Load mode; backing out reopens the main menu via uiselectsave's result callback. Also fixes a real reentrancy bug in uiFocusPop: it invoked the popped item's closed callback before decrementing UI_FOCUS.count, so a push triggered from within that callback (e.g. reopening the main menu once select-save reports no result) landed one slot past the true stack top and got silently dropped, stranding the new item outside navigation. Count is now decremented first. Adds a uikeyboard placeholder widget, registered in uielementlist with no behavior yet. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>