Reverse swaps the positions of all of the selected objects in the list. For example, if you have objects 3, 4, 8, 12, and 25 selected where 4 is the curr_object (or something like that) (this means that 3, 8, 12, and 25 are in the selected_objects array and 4 is curr_object), then 25 and 3 switch places in the order list and 4 and 12 switch places in the order list. Then, 4 is added to the selection array and 12 becomes the new cur_object (or whatever it's called). Note that the locations on-screen of the objects doesn't change, just their order in the list.
The selection array tells what other object are selected in addition to the current one (the other selected objects align to the current object when one of the align commands is used).
The way the arrange feature is supposed to work is as follows:
For bringing forward:
All of the selected objects (and the current object) are collected together and moved, in the same order, after the next object in the list after the last selected object or current object. For example:
If you have this: ABCDEFGHI
and B, D, and G are in the selection array and E is the current object, then doing a "bring forward" will make the list become: ACFHBDEGI
doing "bring to front" would cause it to become ACFHIBDEG.
If one of the selected objects or the current object is already at the end of the list (ABCD with D selected and B as the current object), do a bring forward or bring to front gives us ACBD).
The reverse is true for send backwards or send to back.
Lotta code needed for it, but that was the original vision, based on how vector drawing programs work (like Illustrator).