Mercurial > audlegacy
annotate Plugins/Input/modplug/archive/open.cpp @ 622:09888c08e5e5 trunk
[svn] Vorbis linking fix by Kiyoshi Aman.
author | chainsaw |
---|---|
date | Mon, 06 Feb 2006 16:41:01 -0800 |
parents | 37316876ef6e |
children | d539e5c5f730 |
rev | line source |
---|---|
278
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
1 /* Modplug XMMS Plugin |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
2 * Authors: Kenton Varda <temporal@gauge3d.org> |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
3 * |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
4 * This source code is public domain. |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
5 */ |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
6 |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
7 #include "open.h" |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
8 #include "arch_raw.h" |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
9 #include "arch_gzip.h" |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
10 #include "arch_zip.h" |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
11 #include "arch_rar.h" |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
12 #include "arch_bz2.h" |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
13 |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
14 Archive* OpenArchive(const string& aFileName) |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
15 { |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
16 string lExt; |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
17 uint32 lPos; |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
18 |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
19 lPos = aFileName.find_last_of('.'); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
20 if(lPos < 0) |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
21 return NULL; |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
22 lExt = aFileName.substr(lPos); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
23 for(uint32 i = 0; i < lExt.length(); i++) |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
24 lExt[i] = tolower(lExt[i]); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
25 |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
26 if (lExt == ".mdz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
27 return new arch_Zip(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
28 if (lExt == ".mdr") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
29 return new arch_Rar(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
30 if (lExt == ".mdgz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
31 return new arch_Gzip(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
32 if (lExt == ".mdbz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
33 return new arch_Bzip2(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
34 if (lExt == ".s3z") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
35 return new arch_Zip(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
36 if (lExt == ".s3r") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
37 return new arch_Rar(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
38 if (lExt == ".s3gz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
39 return new arch_Gzip(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
40 if (lExt == ".xmz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
41 return new arch_Zip(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
42 if (lExt == ".xmr") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
43 return new arch_Rar(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
44 if (lExt == ".xmgz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
45 return new arch_Gzip(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
46 if (lExt == ".itz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
47 return new arch_Zip(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
48 if (lExt == ".itr") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
49 return new arch_Rar(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
50 if (lExt == ".itgz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
51 return new arch_Gzip(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
52 if (lExt == ".zip") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
53 return new arch_Zip(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
54 if (lExt == ".rar") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
55 return new arch_Rar(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
56 if (lExt == ".gz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
57 return new arch_Gzip(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
58 if (lExt == ".bz2") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
59 return new arch_Bzip2(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
60 |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
61 return new arch_Raw(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
62 } |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
63 |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
64 bool ContainsMod(const string& aFileName) |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
65 { |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
66 string lExt; |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
67 uint32 lPos; |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
68 |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
69 lPos = aFileName.find_last_of('.'); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
70 if(lPos < 0) |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
71 return false; |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
72 lExt = aFileName.substr(lPos); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
73 for(uint32 i = 0; i < lExt.length(); i++) |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
74 lExt[i] = tolower(lExt[i]); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
75 |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
76 if (lExt == ".mdz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
77 return arch_Zip::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
78 if (lExt == ".mdr") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
79 return arch_Rar::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
80 if (lExt == ".mdgz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
81 return arch_Gzip::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
82 if (lExt == ".mdbz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
83 return arch_Bzip2::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
84 if (lExt == ".s3z") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
85 return arch_Zip::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
86 if (lExt == ".s3r") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
87 return arch_Rar::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
88 if (lExt == ".s3gz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
89 return arch_Gzip::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
90 if (lExt == ".xmz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
91 return arch_Zip::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
92 if (lExt == ".xmr") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
93 return arch_Rar::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
94 if (lExt == ".xmgz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
95 return arch_Gzip::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
96 if (lExt == ".itz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
97 return arch_Zip::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
98 if (lExt == ".itr") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
99 return arch_Rar::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
100 if (lExt == ".itgz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
101 return arch_Gzip::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
102 if (lExt == ".zip") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
103 return arch_Zip::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
104 if (lExt == ".rar") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
105 return arch_Rar::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
106 if (lExt == ".gz") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
107 return arch_Gzip::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
108 if (lExt == ".bz2") |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
109 return arch_Bzip2::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
110 |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
111 return arch_Raw::ContainsMod(aFileName); |
37316876ef6e
[svn] Use modplug instead of mikmod. Supports more formats & compressed files.
chainsaw
parents:
diff
changeset
|
112 } |