static void WFreeMenuEntry( GUIRMenuEntry *entry ) { if( entry ) { if( entry->item ) { ResFreeMenuItem( entry->item ); } GUIMemFree( entry ); } }
bool DumpMenu( uint_32 offset, uint_32 length, WResFileID handle ) /****************************************************************/ { bool error; WResFileOffset prevpos; int depth; /* number of menu levels deep */ MenuItem *item; MenuHeader head; length = length; prevpos = RCSEEK( handle, offset, SEEK_SET ); error = (prevpos == -1); if( !error ) { error = ResReadMenuHeader( &head, handle ); } if( !error ) { PrintHeader( &head ); } depth = 1; while( depth > 0 && !error ) { item = ResNewMenuItem(); error = ResReadMenuItem( item, handle ); if( !error ) { if( item->IsPopup ) { depth++; PrintPopupItem( &(item->Item.Popup) ); if (item->Item.Popup.ItemFlags & MENU_ENDMENU) { depth--; } } else { PrintNormalItem( &(item->Item.Normal) ); if (item->Item.Normal.ItemFlags & MENU_ENDMENU) { depth--; } } } ResFreeMenuItem( item ); } RCSEEK( handle, prevpos, SEEK_SET ); return( error ); }