Ticket #8917: defaultsearchmanager.patch
File defaultsearchmanager.patch, 22.9 KB (added by , 16 years ago) |
---|
-
base/main.cpp
39 39 40 40 #include "common/config-manager.h" 41 41 #include "common/events.h" 42 #include "common/ file.h"42 #include "common/archive.h" 43 43 #include "common/fs.h" 44 44 #include "common/system.h" 45 45 #include "gui/newgui.h" … … 156 156 } 157 157 158 158 // Add the game path to the directory search list 159 Common::File::addDefaultDirectory(path);159 SearchMan.addDirectory(path); 160 160 161 // Add extrapath (if any) to the directory search list162 if (ConfMan.hasKey("extrapath"))163 Common::File::addDefaultDirectoryRecursive(ConfMan.get("extrapath"));164 165 // If a second extrapath is specified on the app domain level, add that as well.166 if (ConfMan.hasKey("extrapath", Common::ConfigManager::kApplicationDomain))167 Common::File::addDefaultDirectoryRecursive(ConfMan.get("extrapath", Common::ConfigManager::kApplicationDomain));168 169 #ifdef DATA_PATH170 // Add the global DATA_PATH to the directory search list171 Common::File::addDefaultDirectoryRecursive(DATA_PATH);172 #endif173 174 161 // On creation the engine should've set up all debug levels so we can use 175 162 // the command line arugments here 176 163 Common::enableSpecialDebugLevelList(edebuglevels); … … 198 185 // Free up memory 199 186 delete engine; 200 187 201 // Reset the file/directory mappings202 Common::File::resetDefaultDirectories();203 204 188 // Return result (== 0 means no error) 205 189 return result; 206 190 } … … 229 213 ConfMan.loadDefaultConfigFile(); 230 214 } 231 215 216 // Add extrapath (if any) to the directory search list 217 if (ConfMan.hasKey("extrapath")) 218 SearchMan.addDirectoryRecursive(ConfMan.get("extrapath")); 219 220 // If a second extrapath is specified on the app domain level, add that as well. 221 if (ConfMan.hasKey("extrapath", Common::ConfigManager::kApplicationDomain)) 222 SearchMan.addDirectoryRecursive(ConfMan.get("extrapath", Common::ConfigManager::kApplicationDomain)); 223 224 #ifdef DATA_PATH 225 // Add the global DATA_PATH to the directory search list 226 SearchMan.addDirectoryRecursive(DATA_PATH); 227 #endif 228 232 229 // Update the config file 233 230 ConfMan.set("versioninfo", gScummVMVersion, Common::ConfigManager::kApplicationDomain); 234 231 … … 285 282 286 283 // Try to run the game 287 284 int result = runGame(plugin, system, specialDebug); 288 285 289 286 // Did an error occur ? 290 287 if (result != 0) { 291 288 // TODO: Show an informative error dialog if starting the selected game failed. 292 289 } 293 290 294 291 // Quit unless an error occurred, or Return to launcher was requested 295 292 if (result == 0 && !g_system->getEventManager()->shouldRTL()) 296 293 break; … … 319 316 PluginManager::destroy(); 320 317 Common::ConfigManager::destroy(); 321 318 GUI::NewGui::destroy(); 319 Common::DefaultSearchManager::destroy(); 322 320 323 321 return 0; 324 322 } -
common/advancedDetector.cpp
25 25 26 26 #include "base/plugins.h" 27 27 28 #include "common/archive.h" 28 29 #include "common/util.h" 29 30 #include "common/hash-str.h" 30 #include "common/file.h"31 31 #include "common/md5.h" 32 32 #include "common/advancedDetector.h" 33 33 #include "common/config-manager.h" … … 362 362 363 363 debug(3, "> %s: %s", fname.c_str(), md5str); 364 364 365 File testFile;366 if (testFile .open(allFiles[fname])) {367 filesSize[fname] = (int32)testFile .size();368 testFile.close();365 SeekableReadStream *testFile = SearchMan.openFile(allFiles[fname]); 366 if (testFile) { 367 filesSize[fname] = (int32)testFile->size(); 368 delete testFile; 369 369 } 370 370 } 371 371 … … 449 449 if (matched.empty()) { 450 450 if (!filesMD5.empty()) 451 451 reportUnknown(filesMD5, filesSize); 452 452 453 453 // Filename based fallback 454 454 if (params.fileBasedFallback != 0) 455 455 matched = detectGameFilebased(allFiles, params); … … 488 488 489 489 if (!fileMissing) { 490 490 debug(4, "Matched: %s", agdesc->gameid); 491 491 492 492 if (numMatchedFiles > maxNumMatchedFiles) { 493 493 matchedDesc = agdesc; 494 494 maxNumMatchedFiles = numMatchedFiles; 495 495 496 496 debug(4, "and overriden"); 497 497 } 498 498 } -
common/archive.cpp
25 25 26 26 #include "common/archive.h" 27 27 #include "common/fs.h" 28 #include "common/file.h"29 28 #include "common/util.h" 30 29 31 30 namespace Common { … … 285 284 } 286 285 287 286 287 288 DECLARE_SINGLETON(DefaultSearchManager); 289 290 void DefaultSearchManager::addArchive(const String &name, ArchivePtr archive) { 291 _searchSet.add(name, archive); 292 } 293 294 void DefaultSearchManager::addDirectory(const String &directory) { 295 addDirectoryRecursive(directory, 1); 296 } 297 298 void DefaultSearchManager::addDirectoryRecursive(const String &directory, int depth) { 299 _searchSet.add(directory, SharedPtr<FSDirectory>(new FSDirectory(directory, depth))); 300 } 301 302 void DefaultSearchManager::clear() { 303 _searchSet.clear(); 304 } 305 306 bool DefaultSearchManager::hasFile(const String &name) { 307 return _searchSet.hasFile(name); 308 } 309 310 int DefaultSearchManager::matchPattern(StringList &list, const String &pattern) { 311 return _searchSet.matchPattern(list, pattern); 312 } 313 314 SeekableReadStream *DefaultSearchManager::openFile(const String &name) { 315 return _searchSet.openFile(name); 316 } 317 318 288 319 } // namespace Common -
common/archive.h
31 31 #include "common/hash-str.h" 32 32 #include "common/list.h" 33 33 #include "common/ptr.h" 34 #include "common/singleton.h" 34 35 #include "common/stream.h" 35 36 36 37 namespace Common { … … 144 145 }; 145 146 146 147 147 148 148 /** 149 149 * SearchSet enables access to a group of Archives through the Archive interface. 150 150 * Its intended usage is a situation in which there are no name clashes among names in the … … 200 200 virtual SeekableReadStream *openFile(const String &name); 201 201 }; 202 202 203 204 class DefaultSearchManager : public Singleton<DefaultSearchManager>, public Archive { 205 206 SearchSet _searchSet; 207 208 public: 209 /** 210 * Add an existing Archive. This is meant to support searching in system-specific 211 * archives, namely the MACOSX/IPHONE bundles. 212 */ 213 void addArchive(const String &name, ArchivePtr archive); 214 215 /** 216 * Create and add a FSDirectory by name 217 */ 218 void addDirectory(const String &directory); 219 220 /** 221 * Create and add a FSDirectory and its subdirectories by name 222 */ 223 void addDirectoryRecursive(const String &directory, int depth = 4); 224 225 /** 226 * Clears the archive 227 */ 228 void clear(); 229 230 231 virtual bool hasFile(const String &name); 232 virtual int matchPattern(StringList &list, const String &pattern); 233 234 /** 235 * Implements openFile from Archive base class. The current policy is 236 * opening the first file encountered that matches the name. 237 */ 238 virtual SeekableReadStream *openFile(const String &name); 239 }; 240 241 /** Shortcut for accessing the configuration manager. */ 242 #define SearchMan Common::DefaultSearchManager::instance() 243 203 244 } // namespace Common 204 245 205 246 #endif -
common/config-file.cpp
23 23 * 24 24 */ 25 25 26 #include "common/archive.h" 27 #include "common/file.h" // included for DumpFile 26 28 #include "common/config-file.h" 27 #include "common/file.h"28 29 #include "common/savefile.h" 29 30 #include "common/system.h" 30 31 #include "common/util.h" … … 57 58 } 58 59 59 60 bool ConfigFile::loadFromFile(const String &filename) { 60 File file; 61 if (file.open(filename)) 62 return loadFromStream(file); 63 else 64 return false; 61 SeekableReadStream *file = SearchMan.openFile(filename); 62 bool result = false; 63 64 if (file) 65 result = loadFromStream(*file); 66 67 delete file; 68 return result; 65 69 } 66 70 67 71 bool ConfigFile::loadFromSaveFile(const char *filename) { … … 135 139 assert(isValidName(section.name)); 136 140 } else { 137 141 // This line should be a line with a 'key=value' pair, or an empty one. 138 142 139 143 // Skip leading whitespaces 140 144 const char *t = line.c_str(); 141 145 while (isspace(*t)) … … 158 162 // Extract the key/value pair 159 163 kv.key = String(t, p); 160 164 kv.value = String(p + 1); 161 165 162 166 // Trim of spaces 163 167 kv.key.trim(); 164 168 kv.value.trim(); -
common/config-manager.cpp
23 23 * 24 24 */ 25 25 26 #include "common/archive.h" 27 #include "common/file.h" // included for DumpFile 26 28 #include "common/config-manager.h" 27 #include "common/file.h"28 29 #include "common/util.h" 29 30 #include "common/system.h" 30 31 … … 67 68 // ... load it, if available ... 68 69 if (stream) 69 70 loadFromStream(*stream); 70 71 71 72 // ... and close it again. 72 73 delete stream; 73 74 … … 77 78 void ConfigManager::loadConfigFile(const String &filename) { 78 79 _filename = filename; 79 80 80 File cfg_file;81 if (!cfg_file .open(filename)) {81 SeekableReadStream *cfg_file = SearchMan.openFile(filename); 82 if (!cfg_file) { 82 83 printf("Creating configuration file: %s\n", filename.c_str()); 83 84 } else { 84 85 printf("Using configuration file: %s\n", _filename.c_str()); 85 loadFromStream( cfg_file);86 loadFromStream(*cfg_file); 86 87 } 88 delete cfg_file; 87 89 } 88 90 89 91 void ConfigManager::loadFromStream(SeekableReadStream &stream) { … … 140 142 _domainSaveOrder.push_back(domain); 141 143 } else { 142 144 // This line should be a line with a 'key=value' pair, or an empty one. 143 145 144 146 // Skip leading whitespaces 145 147 const char *t = line.c_str(); 146 148 while (isspace(*t)) … … 163 165 // Extract the key/value pair 164 166 String key(t, p); 165 167 String value(p + 1); 166 168 167 169 // Trim of spaces 168 170 key.trim(); 169 171 value.trim(); … … 200 202 delete dump; 201 203 return; 202 204 } 203 205 204 206 stream = dump; 205 207 } 206 208 -
common/file.cpp
23 23 * 24 24 */ 25 25 26 #include "common/file.h" 26 #include "common/file.h" // this is file.cpp! 27 27 #include "common/fs.h" 28 28 #include "common/hashmap.h" 29 29 #include "common/util.h" … … 485 485 486 486 String fname(filename); 487 487 fname.toLowercase(); 488 488 489 489 _handle = fopenNoCase(filename, "", "wb"); 490 490 491 491 if (_handle == NULL) -
common/md5.cpp
28 28 * this program is licensed under the GPL. 29 29 */ 30 30 31 #include "common/ file.h"31 #include "common/archive.h" 32 32 #include "common/fs.h" 33 33 #include "common/md5.h" 34 34 #include "common/util.h" … … 262 262 } 263 263 264 264 bool md5_file(const char *name, uint8 digest[16], uint32 length) { 265 File f;265 SeekableReadStream *f = SearchMan.openFile(name); 266 266 267 f.open(name); 268 if (!f.isOpen()) { 267 if (!f) { 269 268 warning("md5_file couldn't open '%s'", name); 270 269 return false; 271 270 } 272 271 273 return md5_file(f, digest, length); 272 bool result = md5_file(*f, digest, length); 273 delete f; 274 return result; 274 275 } 275 276 276 277 -
common/system.cpp
126 126 Port specific variants should be pushed into the respective ports. 127 127 128 128 Ideally, the default OSystem::openConfigFileForReading/Writing methods 129 should be removed completely. 129 should be removed completely. 130 130 */ 131 131 132 #include "common/file.h"133 132 134 133 #ifdef __PLAYSTATION2__ 135 134 #include "backends/platform/ps2/systemps2.h" -
common/unzip.cpp
29 29 */ 30 30 31 31 #include "common/scummsys.h" 32 #include "common/stream.h" 32 33 33 34 #ifdef USE_ZLIB 34 35 … … 43 44 #endif 44 45 45 46 #include "common/unzip.h" 46 #include "common/file.h"47 47 48 48 #ifdef STDC 49 49 # include <stddef.h> … … 131 131 uLong crc32_wait; /* crc32 we must obtain after decompress all */ 132 132 uLong rest_read_compressed; /* number of byte to be decompressed */ 133 133 uLong rest_read_uncompressed;/*number of byte to be obtained after decomp*/ 134 Common:: File*file; /* io structore of the zipfile */134 Common::SeekableReadStream *file; /* io structore of the zipfile */ 135 135 uLong compression_method; /* compression method (0==store) */ 136 136 uLong byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ 137 137 } file_in_zip_read_info_s; … … 141 141 */ 142 142 typedef struct 143 143 { 144 Common:: Filefile; /* io structore of the zipfile */144 Common::SeekableReadStream *file; /* io structore of the zipfile */ 145 145 unz_global_info gi; /* public global information */ 146 146 uLong byte_before_the_zipfile; /* byte before the zipfile, (>0 for sfx)*/ 147 147 uLong num_file; /* number of the current file in the zipfile*/ … … 166 166 */ 167 167 168 168 169 /*local int unzlocal_getByte( Common::File&fin, int *pi)169 /*local int unzlocal_getByte(SeekableReadStream &fin, int *pi) 170 170 { 171 171 unsigned char c = fin.readByte(); 172 172 *pi = (int)c; … … 185 185 /* =========================================================================== 186 186 Reads a long in LSB order from the given gz_stream. Sets 187 187 */ 188 local int unzlocal_getShort (Common:: File&fin, uLong *pX)188 local int unzlocal_getShort (Common::SeekableReadStream &fin, uLong *pX) 189 189 { 190 190 *pX = fin.readUint16LE(); 191 191 return UNZ_OK; 192 192 } 193 193 194 local int unzlocal_getLong (Common:: File&fin, uLong *pX)194 local int unzlocal_getLong (Common::SeekableReadStream &fin, uLong *pX) 195 195 { 196 196 *pX = fin.readUint32LE(); 197 197 return UNZ_OK; … … 255 255 Locate the Central directory of a zipfile (at the end, just before 256 256 the global comment) 257 257 */ 258 local uLong unzlocal_SearchCentralDir(Common:: File&fin)258 local uLong unzlocal_SearchCentralDir(Common::SeekableReadStream &fin) 259 259 { 260 260 unsigned char* buf; 261 261 uLong uSizeFile; … … 333 333 334 334 int err=UNZ_OK; 335 335 336 336 337 if (!us->file.open(path)) { 337 338 delete us; 338 339 return NULL; -
engines/engine.cpp
31 31 32 32 #include "engines/engine.h" 33 33 #include "common/config-manager.h" 34 #include "common/file.h"35 34 #include "common/timer.h" 36 35 #include "common/savefile.h" 37 36 #include "common/system.h" … … 76 75 77 76 Engine::~Engine() { 78 77 _mixer->stopAll(); 79 78 80 79 delete _mainMenuDialog; 81 80 g_engine = NULL; 82 81 } … … 135 134 // if it's running from CD. 136 135 137 136 #ifdef USE_VORBIS 138 if ( Common::File::exists("track1.ogg"))137 if (SearchMan.hasFile("track1.ogg")) 139 138 return; 140 139 #endif 141 140 #ifdef USE_FLAC 142 if ( Common::File::exists("track1.fla") || Common::File::exists("track1.flac"))141 if (SearchMan.hasFile("track1.fla") || SearchMan.hasFile("track1.flac")) 143 142 return; 144 143 #endif 145 144 #ifdef USE_MAD 146 if ( Common::File::exists("track1.mp3"))145 if (SearchMan.hasFile("track1.mp3")) 147 146 return; 148 147 #endif 149 148 … … 224 223 } 225 224 226 225 int Engine::runDialog(Dialog &dialog) { 227 226 228 227 pauseEngine(true); 229 228 230 229 int result = dialog.runModal(); … … 258 257 Common::String gameid = ConfMan.get("gameid"); 259 258 gameid.toLowercase(); 260 259 EngineMan.findGame(gameid, &plugin); 261 260 262 261 return ( (*plugin)->hasFeature((MetaEngine::MetaEngineFeature)f) ); 263 262 } 264 263 -
graphics/font.cpp
23 23 */ 24 24 25 25 #include "common/stream.h" 26 #include "common/file.h" 26 #include "common/file.h" // included for DumpFile 27 27 #include "common/endian.h" 28 28 #include "graphics/font.h" 29 29 -
gui/theme.cpp
25 25 #include "gui/theme.h" 26 26 #include "gui/eval.h" 27 27 28 #include "common/archive.h" 28 29 #include "common/unzip.h" 29 30 30 31 namespace GUI { … … 34 35 _defaultConfig.loadFromStream(s); 35 36 36 37 _evaluator = new Eval(); 38 39 // FIXME: should path be added in runGame()? 40 if (ConfMan.hasKey("themepath")) 41 SearchMan.addDirectory(ConfMan.get("themepath")); 37 42 } 38 43 39 44 Theme::~Theme() { … … 59 64 const Graphics::Font *Theme::loadFont(const char *filename) { 60 65 const Graphics::NewFont *font = 0; 61 66 Common::String cacheFilename = genCacheFilename(filename); 62 Common:: FilefontFile;67 Common::SeekableReadStream *fontFile; 63 68 64 69 if (!cacheFilename.empty()) { 65 if (fontFile.open(cacheFilename)) 66 font = Graphics::NewFont::loadFromCache(fontFile); 70 fontFile = SearchMan.openFile(cacheFilename); 71 if (fontFile) { 72 font = Graphics::NewFont::loadFromCache(*fontFile); 73 delete fontFile; 74 } 67 75 if (font) 68 76 return font; 69 77 … … 92 100 } 93 101 94 102 // normal open 95 if (fontFile.open(filename)) { 96 font = Graphics::NewFont::loadFont(fontFile); 103 fontFile = SearchMan.openFile(filename); 104 if (fontFile) { 105 font = Graphics::NewFont::loadFont(*fontFile); 106 delete fontFile; 97 107 } 98 108 99 109 #ifdef USE_ZLIB … … 147 157 } 148 158 149 159 bool Theme::loadConfigFile(const Common::String &stylefile) { 150 if (ConfMan.hasKey("themepath"))151 Common::File::addDefaultDirectory(ConfMan.get("themepath"));152 153 #ifdef DATA_PATH154 Common::File::addDefaultDirectoryRecursive(DATA_PATH);155 #endif156 157 if (ConfMan.hasKey("extrapath"))158 Common::File::addDefaultDirectoryRecursive(ConfMan.get("extrapath"));159 160 160 if (!_configFile.loadFromFile(stylefile + ".ini")) { 161 161 #ifdef USE_ZLIB 162 162 // Maybe find a nicer solution to this … … 191 191 } 192 192 193 193 bool Theme::themeConfigUseable(const Common::String &stylefile, const Common::String &style, Common::String *cStyle, Common::ConfigFile *cfg) { 194 if (ConfMan.hasKey("themepath")) 195 Common::File::addDefaultDirectory(ConfMan.get("themepath")); 196 197 #ifdef DATA_PATH 198 Common::File::addDefaultDirectoryRecursive(DATA_PATH); 199 #endif 200 201 if (ConfMan.hasKey("extrapath")) 202 Common::File::addDefaultDirectoryRecursive(ConfMan.get("extrapath")); 203 204 Common::File file; 194 Common::SeekableReadStream *file; 205 195 Common::ConfigFile configFile; 206 196 if (!cfg && (cStyle || !style.empty())) 207 197 cfg = &configFile; 208 198 209 if (!file.open(stylefile + ".ini")) { 199 file = SearchMan.openFile(stylefile + ".ini"); 200 if (!file) { 210 201 #ifdef USE_ZLIB 211 202 // Maybe find a nicer solution to this 212 203 unzFile zipFile = unzOpen((stylefile + ".zip").c_str()); … … 239 230 } 240 231 241 232 if (!style.empty() || cStyle || cfg) { 242 if (file .isOpen()) {243 if (!cfg->loadFromStream( file))233 if (file) { 234 if (!cfg->loadFromStream(*file)) 244 235 return false; 245 file.close();236 delete file; 246 237 } 247 238 248 239 Common::String temp; -
gui/theme.h
28 28 #include "common/system.h" 29 29 #include "common/rect.h" 30 30 #include "common/str.h" 31 #include "common/file.h"32 31 #include "common/config-file.h" 33 32 34 33 #include "graphics/surface.h" -
gui/ThemeModern.cpp
33 33 #include "graphics/cursorman.h" 34 34 35 35 #include "common/config-manager.h" 36 #include "common/file.h"37 36 38 37 #define kShadowTr0 8 39 38 #define kShadowTr1 16 -
sound/audiocd.cpp
29 29 #include "sound/vorbis.h" 30 30 #include "sound/flac.h" 31 31 #include "engines/engine.h" 32 #include "common/file.h"33 32 #include "common/util.h" 34 33 #include "common/system.h" 35 34 -
sound/flac.cpp
27 27 28 28 #ifdef USE_FLAC 29 29 30 #include "common/ file.h"30 #include "common/stream.h" 31 31 #include "common/util.h" 32 32 33 33 #include "sound/audiostream.h" -
sound/mixer.cpp
23 23 * 24 24 */ 25 25 26 #include "common/file.h"27 26 #include "common/util.h" 28 27 #include "common/system.h" 29 28 … … 208 207 assert(samples); 209 208 210 209 Common::StackLock lock(_mutex); 211 210 212 211 int16 *buf = (int16 *)samples; 213 212 len >>= 2; 214 213 -
sound/mp3.cpp
27 27 28 28 #ifdef USE_MAD 29 29 30 #include "common/ file.h"30 #include "common/stream.h" 31 31 #include "common/util.h" 32 32 33 33 #include "sound/audiocd.h" … … 117 117 // Calculate play time 118 118 mad_timer_t length; 119 119 120 mad_timer_set(&length, 0, 0, 1000); 120 mad_timer_set(&length, 0, 0, 1000); 121 121 mad_timer_add(&length, start); 122 122 mad_timer_negate(&length); 123 123 … … 175 175 } 176 176 177 177 _totalPlayTime = mad_timer_count(length, MAD_UNITS_MILLISECONDS); 178 178 179 179 if (numLoops && mad_timer_sign(length) >= 0) 180 180 _totalPlayTime *= numLoops; 181 181 else -
sound/softsynth/mt32.cpp
34 34 35 35 #include "common/config-manager.h" 36 36 #include "common/events.h" 37 #include "common/file.h"38 37 #include "common/system.h" 39 38 #include "common/util.h" 40 39 … … 80 79 }; 81 80 82 81 class MT32File : public MT32Emu::File { 83 Common:: File_in;82 Common::SeekableReadStream *_in; 84 83 Common::DumpFile _out; 85 84 public: 85 MT32File() : _in(0) { } 86 ~MT32File() { close(); } 86 87 bool open(const char *filename, OpenMode mode) { 87 88 if (mode == OpenMode_read) 88 return _in.open(filename);89 return (_in = SearchMan.openFile(filename)); 89 90 else 90 91 return _out.open(filename); 91 92 } 92 93 void close() { 93 _in.close();94 delete _in; _in = 0; 94 95 _out.close(); 95 96 } 96 97 size_t read(void *in, size_t size) { 97 return _in .read(in, size);98 return _in->read(in, size); 98 99 } 99 100 bool readBit8u(MT32Emu::Bit8u *in) { 100 byte b = _in .readByte();101 if (_in .eof())101 byte b = _in->readByte(); 102 if (_in->eof()) 102 103 return false; 103 104 *in = b; 104 105 return true; … … 111 112 return !_out.ioFailed(); 112 113 } 113 114 bool isEOF() { 114 return _in .isOpen() ? _in.eof() : _out.eof();115 return _in ? _in->eof() : _out.eof(); 115 116 } 116 117 }; 117 118 … … 511 512 } 512 513 513 514 MidiDriver *MidiDriver_MT32_create(Audio::Mixer *mixer) { 514 // HACK: It will stay here until engine plugin loader overhaul515 if (ConfMan.hasKey("extrapath"))516 Common::File::addDefaultDirectory(ConfMan.get("extrapath"));517 518 515 MidiDriver *mididriver; 519 516 520 517 MT32EmuMusicPlugin p; -
sound/vorbis.cpp
27 27 28 28 #ifdef USE_VORBIS 29 29 30 #include "common/ file.h"30 #include "common/stream.h" 31 31 #include "common/util.h" 32 32 33 33 #include "sound/audiostream.h"