Basically, every cat file is made of multiple wav files. You need to know offset and length of every wav - those are stored in header - two 4 bytes integers for every object (sound in this case). After that you can simply read
length bytes from
offset.
As you see i've added +3 to offset. Now, i don't remember why
Maybe there were some garbage at those 3 bytes.
In CE version those wavs contain headers, in dos versions they probably don't.
[/quote]
Just so you know, I found out by looking at other Microprose games that those 3 bytes of "garbage" are actually the filename of the wav. This is handy for referencing individual wavs in a pack, but sadly all the X-Com wavs are just named "0" (1 byte for the string size + 1 byte for '0' and 1 byte for '\0' = 3 bytes)
but if you wanna write a foolproof converter, you just have to read the first byte to get the string size, and skip that amount.
You're right that the DOS wavs don't contain headers and SDL_mixer doesn't seem to like it, I hope I can add them in manually.