Well, I already implemented it for the music list... though I rewrote pretty much all functions for handling the music theme objects for that, to remove a bunch of bugs and oddities in it, and to fix the displayed length of the hidden remix versions in the music playlist ingame. Besides that, the basic way is just the same as TS; a continuous index list which holds the filenames without extensions, and then a specific info section for each of those names:http://nyerguds.arsaneus-design.com/cnc95upd/inirules/themes.ini
Internally, it uses Westwood's Vector class, and I hacked my new vectors into the global game variables list so they are initialized on startup and cleaned up on exit, and I used the ini read functions already in the game for opening and reading the actual ini file. And I wrote my own ini read function (built on the basic "get string") for reading booleans. (Same lazy method WW uses in Dune II for that, by only checking the first character
Oh, and I added an extra vector for custom names, so people can add music without any need to edit the game's strings file. Though technically this conflicts with my language switching system, since those names aren't overridable. Heh.
There seem to be two vector types; one to hold objects and one to just hold ints. I think the 'objects' variant's destructor automatically cleans up the allocated heap space for the objects in the list. Pretty handy. If you want to see the dumbest use of vectors ever, though... look into how they used it for the multiplayer map names in the original unpatched game. They make the vector hold consecutive addresses for fixed length strings, reserved in the actual non-heap memory of the program. Basically it's a vector abused to serve as nothing more than an array index value