/*

Add this script to a SFposer/PMAC object to remove the unused animations from inventory

Add the script, then say 'remove' in public chat

*/



list ans;
list toRemove;

default
{
    state_entry()
    {
        integer i=0;
        integer tot = llGetInventoryNumber(INVENTORY_NOTECARD);
        
        for (i=0; i < tot; i++)
        {
            string nc = llGetInventoryName(INVENTORY_NOTECARD, i);

            if (llGetSubString(nc, 0, 4) == ".menu")
            {
                llOwnerSay("Processing "+nc);
                list lines = llParseStringKeepNulls(osGetNotecard(nc), ["\n"], []);
                integer ln ;
                for (ln=0; ln < llGetListLength(lines) ; ln++)
                {
                    list tok = llParseStringKeepNulls( llList2String(lines, ln), ["|"], []);
                    integer tk;
                    for (tk = 2; tk < llGetListLength(tok); tk += 3)
                    {
                        if (llListFindList(ans, [llList2String(tok, tk) ]) < 0)
                            ans += llList2String(tok, tk);
                    }
                }
            }
        }
        
        tot = llGetInventoryNumber(INVENTORY_ANIMATION);
        for (i=0; i < tot; i++)
        {
            string an = llGetInventoryName(INVENTORY_ANIMATION, i);
            if (llListFindList(ans, [an]) < 0)
            {
                if (llGetSubString(an, 0, 0) != "~")
                {
                    llOwnerSay("Not used= " + an);
                    toRemove += an;
                }
            }
        }
        llOwnerSay("Found "+(string)llGetListLength(toRemove)+" unused animations");
        llOwnerSay("Say 'remove'  to delete them");
        llListen(0, "", llGetOwner(), "remove");
    }
    
    
    
    listen(integer n, string nm, key id, string msg)
    {
        if (msg == "remove")
        {
            integer i;
            for (i=0; i < llGetListLength(toRemove); i++)
            {
                string an = llList2String(toRemove, i);
                llOwnerSay("Removing " + an);
                llRemoveInventory(an);
            }
            llOwnerSay("Removing myself");
            llRemoveInventory(llGetScriptName());
        }
    }
    
}