Mercurial > audlegacy-plugins
comparison src/adplug/core/ksm.cxx @ 703:cae46214b8bf trunk
[svn] - rework AdPlug to use VFS properly
see http://sacredspiral.co.uk/~nenolod/adplug-vfs-ng.diff for a diff.
author | nenolod |
---|---|
date | Fri, 23 Feb 2007 20:23:34 -0800 |
parents | 3da1b8942b8b |
children | 4709ce4e209e |
comparison
equal
deleted
inserted
replaced
702:d25b51e90542 | 703:cae46214b8bf |
---|---|
38 CPlayer *CksmPlayer::factory(Copl *newopl) | 38 CPlayer *CksmPlayer::factory(Copl *newopl) |
39 { | 39 { |
40 return new CksmPlayer(newopl); | 40 return new CksmPlayer(newopl); |
41 } | 41 } |
42 | 42 |
43 bool CksmPlayer::load(const std::string &filename, const CFileProvider &fp) | 43 bool CksmPlayer::load(VFSFile *fd, const CFileProvider &fp) |
44 { | 44 { |
45 binistream *f; | 45 binistream *f; |
46 int i; | 46 int i; |
47 std::string filename(fd->uri); | |
47 char *fn = new char[filename.length() + 9]; | 48 char *fn = new char[filename.length() + 9]; |
48 | 49 |
49 // file validation section | 50 // file validation section |
50 if(!fp.extension(filename, ".ksm")) { | 51 if(!fp.extension(filename, ".ksm")) { |
51 AdPlug_LogWrite("CksmPlayer::load(,\"%s\"): File doesn't have '.ksm' " | 52 AdPlug_LogWrite("CksmPlayer::load(,\"%s\"): File doesn't have '.ksm' " |
59 for(i = strlen(fn) - 1; i >= 0; i--) | 60 for(i = strlen(fn) - 1; i >= 0; i--) |
60 if(fn[i] == '/' || fn[i] == '\\') | 61 if(fn[i] == '/' || fn[i] == '\\') |
61 break; | 62 break; |
62 strcpy(fn + i + 1, "insts.dat"); | 63 strcpy(fn + i + 1, "insts.dat"); |
63 AdPlug_LogWrite("Instruments file: \"%s\"\n", fn); | 64 AdPlug_LogWrite("Instruments file: \"%s\"\n", fn); |
64 f = fp.open(fn); | 65 VFSFile *instfd = vfs_fopen(fn, "rb"); |
66 f = fp.open(instfd); | |
65 delete [] fn; | 67 delete [] fn; |
66 if(!f) { | 68 if(!f) { |
67 AdPlug_LogWrite("Couldn't open instruments file! Aborting!\n"); | 69 AdPlug_LogWrite("Couldn't open instruments file! Aborting!\n"); |
68 AdPlug_LogWrite("--- CksmPlayer::load ---\n"); | 70 AdPlug_LogWrite("--- CksmPlayer::load ---\n"); |
69 return false; | 71 return false; |
70 } | 72 } |
71 loadinsts(f); | 73 loadinsts(f); |
72 fp.close(f); | 74 fp.close(f); |
73 | 75 vfs_fclose(instfd); |
74 f = fp.open(filename); if(!f) return false; | 76 |
77 f = fp.open(fd); if(!f) return false; | |
75 for(i = 0; i < 16; i++) trinst[i] = f->readInt(1); | 78 for(i = 0; i < 16; i++) trinst[i] = f->readInt(1); |
76 for(i = 0; i < 16; i++) trquant[i] = f->readInt(1); | 79 for(i = 0; i < 16; i++) trquant[i] = f->readInt(1); |
77 for(i = 0; i < 16; i++) trchan[i] = f->readInt(1); | 80 for(i = 0; i < 16; i++) trchan[i] = f->readInt(1); |
78 f->ignore(16); | 81 f->ignore(16); |
79 for(i = 0; i < 16; i++) trvol[i] = f->readInt(1); | 82 for(i = 0; i < 16; i++) trvol[i] = f->readInt(1); |