2 * Adplug - Replayer for many OPL2/OPL3 audio file formats.
3 * Copyright (C) 1999 - 2008 Simon Peter <dn.tlp@gmx.net>, et al.
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 * adplug.cpp - CAdPlug utility class, by Simon Peter <dn.tlp@gmx.net>
29 /***** Replayer includes *****/
74 // List of all players that come with the standard AdPlug distribution
75 const CPlayerDesc CAdPlug::allplayers[] = {
76 CPlayerDesc(ChscPlayer::factory, "HSC-Tracker", ".hsc\0"),
77 CPlayerDesc(CsngPlayer::factory, "SNGPlay", ".sng\0"),
78 CPlayerDesc(CimfPlayer::factory, "Apogee IMF", ".imf\0.wlf\0.adlib\0"),
79 CPlayerDesc(Ca2mLoader::factory, "Adlib Tracker 2", ".a2m\0"),
80 CPlayerDesc(CadtrackLoader::factory, "Adlib Tracker", ".sng\0"),
81 CPlayerDesc(CamdLoader::factory, "AMUSIC", ".amd\0"),
82 CPlayerDesc(CbamPlayer::factory, "Bob's Adlib Music", ".bam\0"),
83 CPlayerDesc(CcmfPlayer::factory, "Creative Music File", ".cmf\0"),
84 CPlayerDesc(Cd00Player::factory, "Packed EdLib", ".d00\0"),
85 CPlayerDesc(CdfmLoader::factory, "Digital-FM", ".dfm\0"),
86 CPlayerDesc(ChspLoader::factory, "HSC Packed", ".hsp\0"),
87 CPlayerDesc(CksmPlayer::factory, "Ken Silverman Music", ".ksm\0"),
88 CPlayerDesc(CmadLoader::factory, "Mlat Adlib Tracker", ".mad\0"),
89 CPlayerDesc(CmidPlayer::factory, "MIDI", ".mid\0.sci\0.laa\0"),
90 CPlayerDesc(CmkjPlayer::factory, "MKJamz", ".mkj\0"),
91 CPlayerDesc(CcffLoader::factory, "Boomtracker", ".cff\0"),
92 CPlayerDesc(CdmoLoader::factory, "TwinTeam", ".dmo\0"),
93 CPlayerDesc(Cs3mPlayer::factory, "Scream Tracker 3", ".s3m\0"),
94 CPlayerDesc(CdtmLoader::factory, "DeFy Adlib Tracker", ".dtm\0"),
95 CPlayerDesc(CfmcLoader::factory, "Faust Music Creator", ".sng\0"),
96 CPlayerDesc(CmtkLoader::factory, "MPU-401 Trakker", ".mtk\0"),
97 CPlayerDesc(CradLoader::factory, "Reality Adlib Tracker", ".rad\0"),
98 CPlayerDesc(CrawPlayer::factory, "RdosPlay RAW", ".raw\0"),
99 CPlayerDesc(Csa2Loader::factory, "Surprise! Adlib Tracker", ".sat\0.sa2\0"),
100 CPlayerDesc(CxadbmfPlayer::factory, "BMF Adlib Tracker", ".xad\0"),
101 CPlayerDesc(CxadflashPlayer::factory, "Flash", ".xad\0"),
102 CPlayerDesc(CxadhybridPlayer::factory, "Hybrid", ".xad\0"),
103 CPlayerDesc(CxadhypPlayer::factory, "Hypnosis", ".xad\0"),
104 CPlayerDesc(CxadpsiPlayer::factory, "PSI", ".xad\0"),
105 CPlayerDesc(CxadratPlayer::factory, "rat", ".xad\0"),
106 CPlayerDesc(CldsPlayer::factory, "LOUDNESS Sound System", ".lds\0"),
107 CPlayerDesc(Cu6mPlayer::factory, "Ultima 6 Music", ".m\0"),
108 CPlayerDesc(CrolPlayer::factory, "Adlib Visual Composer", ".rol\0"),
109 CPlayerDesc(CxsmPlayer::factory, "eXtra Simple Music", ".xsm\0"),
110 CPlayerDesc(CdroPlayer::factory, "DOSBox Raw OPL v0.1", ".dro\0"),
111 CPlayerDesc(Cdro2Player::factory, "DOSBox Raw OPL v2.0", ".dro\0"),
112 CPlayerDesc(CmscPlayer::factory, "Adlib MSC Player", ".msc\0"),
113 CPlayerDesc(CrixPlayer::factory, "Softstar RIX OPL Music", ".rix\0"),
114 CPlayerDesc(CadlPlayer::factory, "Westwood ADL", ".adl\0"),
115 CPlayerDesc(CjbmPlayer::factory, "JBM Adlib Music", ".jbm\0"),
119 const CPlayers &CAdPlug::init_players(const CPlayerDesc pd[])
121 static CPlayers initplayers;
124 for(i = 0; pd[i].factory; i++)
125 initplayers.push_back(&pd[i]);
130 const CPlayers CAdPlug::players = CAdPlug::init_players(CAdPlug::allplayers);
131 CAdPlugDatabase *CAdPlug::database = 0;
133 CPlayer *CAdPlug::factory(const std::string &fn, Copl *opl, const CPlayers &pl,
134 const CFileProvider &fp)
137 CPlayers::const_iterator i;
140 AdPlug_LogWrite("*** CAdPlug::factory(\"%s\",opl,fp) ***\n", fn.c_str());
142 // Try a direct hit by file extension
143 for(i = pl.begin(); i != pl.end(); i++)
144 for(j = 0; (*i)->get_extension(j); j++)
145 if(fp.extension(fn, (*i)->get_extension(j))) {
146 AdPlug_LogWrite("Trying direct hit: %s\n", (*i)->filetype.c_str());
147 if((p = (*i)->factory(opl))) {
148 if(p->load(fn, fp)) {
149 AdPlug_LogWrite("got it!\n");
150 AdPlug_LogWrite("--- CAdPlug::factory ---\n");
157 // Try all players, one by one
158 for(i = pl.begin(); i != pl.end(); i++) {
159 AdPlug_LogWrite("Trying: %s\n", (*i)->filetype.c_str());
160 if((p = (*i)->factory(opl))) {
161 if(p->load(fn, fp)) {
162 AdPlug_LogWrite("got it!\n");
163 AdPlug_LogWrite("--- CAdPlug::factory ---\n");
171 AdPlug_LogWrite("End of list!\n");
172 AdPlug_LogWrite("--- CAdPlug::factory ---\n");
176 void CAdPlug::set_database(CAdPlugDatabase *db)
181 std::string CAdPlug::get_version()
183 return std::string(VERSION);
186 void CAdPlug::debug_output(const std::string &filename)
188 AdPlug_LogFile(filename.c_str());
189 AdPlug_LogWrite("CAdPlug::debug_output(\"%s\"): Redirected.\n",filename.c_str());