I did a bit of work last night on an ordered list function that would organize my list in a correct, human-readable order for dialogs (given LSL’s method of stacking dialog list buttons backward), split it up into multiple pages, and put nav (”<<" and ">>” buttons in the list). It’s not perfect yet (I need to put in some adjustments to remove unnecessary nav buttons, etcetera), but I thought I’d post it here for anybody who’s had the same issue:

//This function takes a list of options, organizes it into a human-readable list (i.e. in the right order), and paginates it in groups of 12 with << and >> nav buttons.  All you then have to do is offer the list up one set of twelve at a time.

list Ordered(list items)
{  
    list temp_list;
    integer n;
    for(n=0;n< llGetListLength(items);n+=10)
    {
        list temp_strided = llListInsertList(llList2List(items,n,n+9),["<<"], llGetListLength(llList2List(items,n,n+9))-1)+[">>"];
        integer i;
        for (i=0;i< llGetListLength(temp_strided);i+=3)
            temp_strided = llListInsertList(llDeleteSubList(temp_strided,-3,-1), llList2List(temp_strided,-3,-1),i);
        temp_list += temp_strided;
    }
    return temp_list;
}

If you’re still unclear on what I mean by “human-readable,” I mean that if you were to use this on a list of letters in alphabetical order (["A","B","C"...]), it would produce the buttons in correct alphabetical order, with pagination to the next set.