comparison Plugins/Input/console/Spc_Emu.cpp @ 479:0b9507985f0d trunk

[svn] Use the VFS subsystem and delete the unused demo source.
author chainsaw
date Sat, 21 Jan 2006 06:32:50 -0800
parents 8fc500c08b61
children 7c5e886205ef
comparison
equal deleted inserted replaced
478:5064517c685c 479:0b9507985f0d
16 more details. You should have received a copy of the GNU Lesser General 16 more details. You should have received a copy of the GNU Lesser General
17 Public License along with this module; if not, write to the Free Software 17 Public License along with this module; if not, write to the Free Software
18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ 18 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
19 19
20 #include BLARGG_SOURCE_BEGIN 20 #include BLARGG_SOURCE_BEGIN
21
22 #ifndef RAISE_ERROR
23 #define RAISE_ERROR( str ) return str
24 #endif
25
26 typedef Spc_Reader::error_t error_t;
27 21
28 Spc_Emu::Spc_Emu() 22 Spc_Emu::Spc_Emu()
29 { 23 {
30 resample_ratio = 1.0; 24 resample_ratio = 1.0;
31 use_resampler = false; 25 use_resampler = false;
123 117
124 Spc_Reader::~Spc_Reader() { 118 Spc_Reader::~Spc_Reader() {
125 close(); 119 close();
126 } 120 }
127 121
128 error_t Spc_Reader::open( const char* path ) 122 blargg_err_t Spc_Reader::read_head(Spc_Emu::header_t *header) {
129 { 123 vfs_fread(&header->tag, 1,35,file);
130 file = fopen( path, "rb" ); 124 vfs_fread(&header->format, 1, 1,file);
131 if ( !file ) 125 vfs_fread(&header->version, 1, 1,file);
132 RAISE_ERROR( "Couldn't open file" ); 126 vfs_fread(&header->pc, 1, 2,file);
133 return NULL; 127 vfs_fread(&header->a, 1, 1,file);
128 vfs_fread(&header->x, 1, 1,file);
129 vfs_fread(&header->y, 1, 1,file);
130 vfs_fread(&header->psw, 1, 1,file);
131 vfs_fread(&header->sp, 1, 1,file);
132 vfs_fread(&header->unused, 1, 2,file);
133 vfs_fread(&header->song, 1,32,file);
134 vfs_fread(&header->game, 1,32,file);
135 vfs_fread(&header->dumper, 1,16,file);
136 vfs_fread(&header->comment, 1,32,file);
137 vfs_fread(&header->date, 1,11,file);
138 vfs_fread(&header->len_secs,1, 3,file);
139 vfs_fread(&header->fade_msec,1,5,file);
140 vfs_fread(&header->author, 1,32,file);
141 vfs_fread(&header->mute_mask,1,1,file);
142 vfs_fread(&header->emulator,1, 1,file);
143 vfs_fread(&header->unused2, 1,45,file);
134 } 144 }
135
136 blargg_err_t Spc_Reader::read_head(Spc_Emu::header_t *header) {
137 fread(&header->tag, 1,35,file);
138 fread(&header->format, 1, 1,file);
139 fread(&header->version, 1, 1,file);
140 fread(&header->pc, 1, 2,file);
141 fread(&header->a, 1, 1,file);
142 fread(&header->x, 1, 1,file);
143 fread(&header->y, 1, 1,file);
144 fread(&header->psw, 1, 1,file);
145 fread(&header->sp, 1, 1,file);
146 fread(&header->unused, 1, 2,file);
147 fread(&header->song, 1,32,file);
148 fread(&header->game, 1,32,file);
149 fread(&header->dumper, 1,16,file);
150 fread(&header->comment, 1,32,file);
151 fread(&header->date, 1,11,file);
152 fread(&header->len_secs,1, 3,file);
153 fread(&header->fade_msec,1,5,file);
154 fread(&header->author, 1,32,file);
155 fread(&header->mute_mask,1,1,file);
156 fread(&header->emulator,1, 1,file);
157 fread(&header->unused2, 1,45,file);
158 }
159
160 long Spc_Reader::size() const
161 {
162 long pos = tell();
163 fseek( file, 0, SEEK_END );
164 long result = tell();
165 fseek( file, pos, SEEK_SET );
166 return result;
167 }
168
169 long Spc_Reader::read_avail( void* p, long s ) {
170 return fread( p, 1, s, file );
171 }
172
173 long Spc_Reader::tell() const {
174 return ftell( file );
175 }
176
177 error_t Spc_Reader::seek( long n )
178 {
179 if ( fseek( file, n, SEEK_SET ) != 0 )
180 RAISE_ERROR( "Error seeking in file" );
181 return NULL;
182 }
183
184 void Spc_Reader::close()
185 {
186 if ( file ) {
187 fclose( file );
188 file = NULL;
189 }
190 }