[Scummvm-cvs-logs] CVS: scummvm/scumm resource.cpp,1.15,1.16
Max Horn
fingolfin at users.sourceforge.net
Sun Sep 29 10:35:02 CEST 2002
Update of /cvsroot/scummvm/scummvm/scumm
In directory usw-pr-cvs1:/tmp/cvs-serv32109/scumm
Modified Files:
resource.cpp
Log Message:
patch #616195
Index: resource.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/scumm/resource.cpp,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -d -r1.15 -r1.16
--- resource.cpp 29 Sep 2002 15:14:54 -0000 1.15
+++ resource.cpp 29 Sep 2002 17:34:00 -0000 1.16
@@ -929,8 +929,13 @@
}
/* copy the instrument data in another memory area */
- instr = (byte *)calloc(8 * 16, 1);
- memcpy(instr, ptr + 0x19, 8*16);
+ if (size >= 0x19 + 8*16) {
+ instr = (byte *)calloc(8 * 16, 1);
+ if (instr)
+ memcpy(instr, ptr + 0x19, 8*16);
+ } else {
+ instr = 0;
+ }
ptr += skip; // size + instruments
size -= skip; // drop instruments for now
@@ -976,55 +981,58 @@
*ptr++ = (byte)(dw & 0xFF);
memcpy(ptr, OLD256_MIDI_HACK, sizeof(OLD256_MIDI_HACK) - 1);
- /* now fill in the instruments */
- for (int i = 0; i < 8; i++) {
+ if (instr) {
- /* flags_1 */
- ptr[95 * i + 30 + 0] = (instr[i * 16 + 3] >> 4) & 0xf;
- ptr[95 * i + 30 + 1] = instr[i * 16 + 3] & 0xf;
+ /* now fill in the instruments */
+ for (int i = 0; i < 8; i++) {
- /* oplvl_1 */
- ptr[95 * i + 30 + 2] = (instr[i * 16 + 4] >> 4) & 0xf;
- ptr[95 * i + 30 + 3] = instr[i * 16 + 4] & 0xf;
+ /* flags_1 */
+ ptr[95 * i + 30 + 0] = (instr[i * 16 + 3] >> 4) & 0xf;
+ ptr[95 * i + 30 + 1] = instr[i * 16 + 3] & 0xf;
- /* atdec_1 */
- ptr[95 * i + 30 + 4] = ((~instr[i * 16 + 5]) >> 4) & 0xf;
- ptr[95 * i + 30 + 5] = (~instr[i * 16 + 5]) & 0xf;
+ /* oplvl_1 */
+ ptr[95 * i + 30 + 2] = (instr[i * 16 + 4] >> 4) & 0xf;
+ ptr[95 * i + 30 + 3] = instr[i * 16 + 4] & 0xf;
- /* sustrel_1 */
- ptr[95 * i + 30 + 6] = ((~instr[i * 16 + 6]) >> 4) & 0xf;
- ptr[95 * i + 30 + 7] = (~instr[i * 16 + 6]) & 0xf;
+ /* atdec_1 */
+ ptr[95 * i + 30 + 4] = ((~instr[i * 16 + 5]) >> 4) & 0xf;
+ ptr[95 * i + 30 + 5] = (~instr[i * 16 + 5]) & 0xf;
- /* waveform_1 */
- ptr[95 * i + 30 + 8] = (instr[i * 16 + 7] >> 4) & 0xf;
- ptr[95 * i + 30 + 9] = instr[i * 16 + 7] & 0xf;
+ /* sustrel_1 */
+ ptr[95 * i + 30 + 6] = ((~instr[i * 16 + 6]) >> 4) & 0xf;
+ ptr[95 * i + 30 + 7] = (~instr[i * 16 + 6]) & 0xf;
- /* flags_2 */
- ptr[95 * i + 30 + 10] = (instr[i * 16 + 8] >> 4) & 0xf;
- ptr[95 * i + 30 + 11] = instr[i * 16 + 8] & 0xf;
+ /* waveform_1 */
+ ptr[95 * i + 30 + 8] = (instr[i * 16 + 7] >> 4) & 0xf;
+ ptr[95 * i + 30 + 9] = instr[i * 16 + 7] & 0xf;
- /* oplvl_2 */
- ptr[95 * i + 30 + 12] = 3;
- ptr[95 * i + 30 + 13] = 0xF;
+ /* flags_2 */
+ ptr[95 * i + 30 + 10] = (instr[i * 16 + 8] >> 4) & 0xf;
+ ptr[95 * i + 30 + 11] = instr[i * 16 + 8] & 0xf;
- /* atdec_2 */
- ptr[95 * i + 30 + 14] = ((~instr[i * 16 + 10]) >> 4) & 0xf;
- ptr[95 * i + 30 + 15] = (~instr[i * 16 + 10]) & 0xf;
+ /* oplvl_2 */
+ ptr[95 * i + 30 + 12] = 3;
+ ptr[95 * i + 30 + 13] = 0xF;
- /* sustrel_2 */
- ptr[95 * i + 30 + 16] = ((~instr[i * 16 + 11]) >> 4) & 0xf;
- ptr[95 * i + 30 + 17] = (~instr[i * 16 + 11]) & 0xf;
+ /* atdec_2 */
+ ptr[95 * i + 30 + 14] = ((~instr[i * 16 + 10]) >> 4) & 0xf;
+ ptr[95 * i + 30 + 15] = (~instr[i * 16 + 10]) & 0xf;
- /* waveform_2 */
- ptr[95 * i + 30 + 18] = (instr[i * 16 + 12] >> 4) & 0xf;
- ptr[95 * i + 30 + 19] = instr[i * 16 + 12] & 0xf;
+ /* sustrel_2 */
+ ptr[95 * i + 30 + 16] = ((~instr[i * 16 + 11]) >> 4) & 0xf;
+ ptr[95 * i + 30 + 17] = (~instr[i * 16 + 11]) & 0xf;
- /* feedback */
- ptr[95 * i + 30 + 20] = (instr[i * 16 + 2] >> 4) & 0xf;
- ptr[95 * i + 30 + 21] = instr[i * 16 + 2] & 0xf;
- }
+ /* waveform_2 */
+ ptr[95 * i + 30 + 18] = (instr[i * 16 + 12] >> 4) & 0xf;
+ ptr[95 * i + 30 + 19] = instr[i * 16 + 12] & 0xf;
- free(instr);
+ /* feedback */
+ ptr[95 * i + 30 + 20] = (instr[i * 16 + 2] >> 4) & 0xf;
+ ptr[95 * i + 30 + 21] = instr[i * 16 + 2] & 0xf;
+ }
+
+ free(instr);
+ }
ptr += sizeof(OLD256_MIDI_HACK) - 1;
memcpy(ptr, track, size);
More information about the Scummvm-git-logs
mailing list