Mercurial > audlegacy-plugins
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 |