comparison src/modplug/load_umx.cxx @ 136:6b5a52635b3b trunk

[svn] - like with so many other things, modplug is now maintained by us.
author nenolod
date Sun, 29 Oct 2006 01:04:52 -0700
parents
children 032053ca08ab
comparison
equal deleted inserted replaced
135:33d24bd94ccc 136:6b5a52635b3b
1 /*
2 * This source code is public domain.
3 *
4 * Authors: Olivier Lapicque <olivierl@jps.net>
5 */
6
7 #include "stdafx.h"
8 #include "sndfile.h"
9
10 #define MODMAGIC_OFFSET (20+31*30+130)
11
12
13 BOOL CSoundFile::ReadUMX(const BYTE *lpStream, DWORD dwMemLength)
14 //---------------------------------------------------------------
15 {
16 if ((!lpStream) || (dwMemLength < 0x800)) return FALSE;
17 // Rip Mods from UMX
18 if ((bswapLE32(*((DWORD *)(lpStream+0x20))) < dwMemLength)
19 && (bswapLE32(*((DWORD *)(lpStream+0x18))) <= dwMemLength - 0x10)
20 && (bswapLE32(*((DWORD *)(lpStream+0x18))) >= dwMemLength - 0x200))
21 {
22 for (UINT uscan=0x40; uscan<0x500; uscan++)
23 {
24 DWORD dwScan = bswapLE32(*((DWORD *)(lpStream+uscan)));
25 // IT
26 if (dwScan == 0x4D504D49)
27 {
28 DWORD dwRipOfs = uscan;
29 return ReadIT(lpStream + dwRipOfs, dwMemLength - dwRipOfs);
30 }
31 // S3M
32 if (dwScan == 0x4D524353)
33 {
34 DWORD dwRipOfs = uscan - 44;
35 return ReadS3M(lpStream + dwRipOfs, dwMemLength - dwRipOfs);
36 }
37 // XM
38 if (!strnicmp((LPCSTR)(lpStream+uscan), "Extended Module", 15))
39 {
40 DWORD dwRipOfs = uscan;
41 return ReadXM(lpStream + dwRipOfs, dwMemLength - dwRipOfs);
42 }
43 // MOD
44 if ((uscan > MODMAGIC_OFFSET) && (dwScan == 0x2e4b2e4d))
45 {
46 DWORD dwRipOfs = uscan - MODMAGIC_OFFSET;
47 return ReadMod(lpStream+dwRipOfs, dwMemLength-dwRipOfs);
48 }
49 }
50 }
51 return FALSE;
52 }
53