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);