// Find a menu by userdata ID struct MenuItem *find_menu_item( struct Menu *menu, UWORD id) { // Go through all menus for (;menu;menu=menu->NextMenu) { struct MenuItem *item; // Is this what we're looking for? if (id==(UWORD)GTMENU_USERDATA(menu)) return (struct MenuItem *)menu; // Go through items for (item=menu->FirstItem;item;item=item->NextItem) { struct MenuItem *sub; // Is this what we're looking for? if (id==(UWORD)GTMENUITEM_USERDATA(item)) return item; // Go through sub items for (sub=item->SubItem;sub;sub=sub->NextItem) { // Is this what we're looking for? if (id==(UWORD)GTMENUITEM_USERDATA(sub)) return sub; } } } // Not found return 0; }
struct Menu * makemenutitle(struct NewMenu * newmenu, struct TagItem * taglist) { struct Menu * menu = NULL; ULONG * p; p = (ULONG *)AllocMem(sizeof(ULONG)+sizeof(struct Menu)+sizeof(APTR), MEMF_CLEAR); if (NULL != p) { *p = 0; menu = (struct Menu *)(p + 1); menu->Flags = (newmenu->nm_Flags & NM_MENUDISABLED) ^ MENUENABLED; menu->MenuName = newmenu->nm_Label; GTMENU_USERDATA(menu) = newmenu->nm_UserData; } return menu; }
struct Menu * makemenutitle(struct NewMenu * newmenu, UBYTE **MyMenuMemPtr, struct TagItem * taglist) { struct Menu * menu = NULL; ULONG * p; p =(ULONG*) *MyMenuMemPtr; memset(p,0,sizeof(ULONG)+sizeof(struct Menu)+sizeof(APTR)); *MyMenuMemPtr += sizeof(ULONG)+sizeof(struct Menu)+sizeof(APTR); *p = 0; menu = (struct Menu *)(p + 1); menu->Flags = (newmenu->nm_Flags & NM_MENUDISABLED) ^ MENUENABLED; menu->MenuName = newmenu->nm_Label; GTMENU_USERDATA(menu) = newmenu->nm_UserData; return menu; }