Ticket #3073: imuse_fix.diff

File imuse_fix.diff, 3.0 KB (added by eriktorbjorn, 17 years ago)

Patch against current SVN

  • engines/scumm/imuse/sysex_scumm.cpp

     
    106106                ++p; // Skip hardware type
    107107                part = player->getPart(a);
    108108                if (part) {
    109                         if (len == 63) {
    110                                 player->decode_sysex_bytes(p, buf, len - 3);
     109                        if (len == 62) {
     110                                player->decode_sysex_bytes(p, buf, len - 2);
    111111                                part->set_instrument((byte *)buf);
    112112                        } else {
    113                                 // SPK tracks have len == 49 here, and are not supported
     113                                // SPK tracks have len == 48 here, and are not supported
    114114                                part->programChange(254); // Must be invalid, but not 255 (which is reserved)
    115115                        }
    116116                }
     
    119119        case 17: // Adlib instrument definition(Global)
    120120                p += 2; // Skip hardware type and... whatever came right before it
    121121                a = *p++;
    122                 player->decode_sysex_bytes(p, buf, len - 4);
     122                player->decode_sysex_bytes(p, buf, len - 3);
    123123                se->setGlobalAdlibInstrument(a, buf);
    124124                break;
    125125
    126126        case 33: // Parameter adjust
    127127                a = *p++ & 0x0F;
    128128                ++p; // Skip hardware type
    129                 player->decode_sysex_bytes(p, buf, len - 3);
     129                player->decode_sysex_bytes(p, buf, len - 2);
    130130                part = player->getPart(a);
    131131                if (part)
    132132                        part->set_param(READ_BE_UINT16(buf), READ_BE_UINT16(buf + 2));
     
    135135        case 48: // Hook - jump
    136136                if (player->_scanning)
    137137                        break;
    138                 player->decode_sysex_bytes(p + 1, buf, len - 2);
     138                player->decode_sysex_bytes(p + 1, buf, len - 1);
    139139                player->maybe_jump(buf[0], READ_BE_UINT16(buf + 1), READ_BE_UINT16(buf + 3), READ_BE_UINT16(buf + 5));
    140140                break;
    141141
    142142        case 49: // Hook - global transpose
    143                 player->decode_sysex_bytes(p + 1, buf, len - 2);
     143                player->decode_sysex_bytes(p + 1, buf, len - 1);
    144144                player->maybe_set_transpose(buf);
    145145                break;
    146146
    147147        case 50: // Hook - part on/off
    148148                buf[0] = *p++ & 0x0F;
    149                 player->decode_sysex_bytes(p, buf + 1, len - 2);
     149                player->decode_sysex_bytes(p, buf + 1, len - 1);
    150150                player->maybe_part_onoff(buf);
    151151                break;
    152152
    153153        case 51: // Hook - set volume
    154154                buf[0] = *p++ & 0x0F;
    155                 player->decode_sysex_bytes(p, buf + 1, len - 2);
     155                player->decode_sysex_bytes(p, buf + 1, len - 1);
    156156                player->maybe_set_volume(buf);
    157157                break;
    158158
    159159        case 52: // Hook - set program
    160160                buf[0] = *p++ & 0x0F;
    161                 player->decode_sysex_bytes(p, buf + 1, len - 2);
     161                player->decode_sysex_bytes(p, buf + 1, len - 1);
    162162                player->maybe_set_program(buf);
    163163                break;
    164164
    165165        case 53: // Hook - set transpose
    166166                buf[0] = *p++ & 0x0F;
    167                 player->decode_sysex_bytes(p, buf + 1, len - 2);
     167                player->decode_sysex_bytes(p, buf + 1, len - 1);
    168168                player->maybe_set_transpose_part(buf);
    169169                break;
    170170
    171171        case 64: // Marker
    172172                p++;
    173                 len -= 2;
     173                len--;
    174174                while (len--) {
    175175                        se->handle_marker(player->_id, *p++);
    176176                }
    177177                break;
    178178
    179179        case 80: // Loop
    180                 player->decode_sysex_bytes(p + 1, buf, len - 2);
     180                player->decode_sysex_bytes(p + 1, buf, len - 1);
    181181                player->setLoop
    182182                        (READ_BE_UINT16(buf), READ_BE_UINT16(buf + 2),
    183183                         READ_BE_UINT16(buf + 4), READ_BE_UINT16(buf + 6),