1 /****************************************************************************
3 * ____ ___ ____ __ ______ ___ ____ ____/ / *
4 * / __ `__ \/ __ `/ |/ / __ `__ \/ __ \/ __ / *
5 * / / / / / / /_/ /> </ / / / / / /_/ / /_/ / *
6 * /_/ /_/ /_/\__,_/_/|_/_/ /_/ /_/\____/\__,_/ *
8 * Copyright (c) 2008, Mukunda Johnson (mukunda@maxmod.org) *
10 * Permission to use, copy, modify, and/or distribute this software for any *
11 * purpose with or without fee is hereby granted, provided that the above *
12 * copyright notice and this permission notice appear in all copies. *
14 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES *
15 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF *
16 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR *
17 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES *
18 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN *
19 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF *
20 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. *
21 ****************************************************************************/
31 bool file_exists( char* filename )
33 fin = fopen( filename, "rb" );
40 int file_size( char* filename )
44 f = fopen( filename, "rb" );
47 fseek( f, 0, SEEK_END );
53 int file_open_read( char* filename )
55 fin = fopen( filename, "rb" );
57 return FILE_OPEN_ERROR;
58 return FILE_OPEN_OKAY;
61 int file_open_write( char* filename )
63 fout = fopen( filename, "wb" );
65 return FILE_OPEN_ERROR;
66 return FILE_OPEN_OKAY;
69 int file_open_write_end( char* filename )
71 fout = fopen( filename, "r+b" );
73 return FILE_OPEN_ERROR;
74 fseek( fout, 0, SEEK_END );
75 return FILE_OPEN_OKAY;
78 void file_close_read( void )
83 void file_close_write( void )
88 int file_seek_read( int offset, int mode )
90 return fseek( fin, offset, mode );
93 int file_seek_write( int offset, int mode )
95 return fseek( fout, offset, mode );
98 int file_tell_read( void )
103 int file_tell_write( void )
105 return ftell( fout );
108 int file_tell_size( void )
110 int pos = ftell(fin);
111 fseek( fin, 0, SEEK_END );
112 int size = ftell(fin);
113 fseek(fin, pos, SEEK_SET );
120 fread( &a, 1, 1, fin );
128 a |= ((u16)read8()) << 8;
136 a |= ((u32)read8())<<8;
137 a |= ((u32)read8())<<16;
145 a |= ((u32)read16()) << 16;
149 u8 read8f( FILE* p_fin )
152 fread( &a, 1, 1, p_fin );
156 u16 read16f( FILE* p_fin )
160 a |= ((u16)read8f( p_fin )) << 8;
164 u32 read32f( FILE* p_fin )
167 a = read16f( p_fin );
168 a |= ((u32)read16f( p_fin )) << 16;
172 void write8( u8 p_v )
174 fwrite( &p_v, 1, 1, fout );
178 void write16( u16 p_v )
180 write8( (u8)(p_v & 0xFF) );
181 write8( (u8)(p_v >> 8) );
182 file_byte_count += 2;
185 void write24( u32 p_v )
187 write8( (u8)(p_v & 0xFF) );
188 write8( (u8)((p_v >> 8) & 0xFF) );
189 write8( (u8)((p_v >> 16) & 0xFF) );
190 file_byte_count += 3;
193 void write32( u32 p_v )
195 write16( (u16)(p_v & 0xFFFF) );
196 write16( (u16)(p_v >> 16) );
197 file_byte_count += 4;
202 if( ftell( fout ) & 1 )
203 write8( BYTESMASHER );
208 if( ftell( fout ) & 3 )
209 write8( BYTESMASHER );
210 if( ftell( fout ) & 3 )
211 write8( BYTESMASHER );
212 if( ftell( fout ) & 3 )
213 write8( BYTESMASHER );
216 void align32f( FILE* p_file )
218 if( ftell( p_file ) & 3 )
219 write8( BYTESMASHER );
220 if( ftell( p_file ) & 3 )
221 write8( BYTESMASHER );
222 if( ftell( p_file ) & 3 )
223 write8( BYTESMASHER );
226 void skip8( u32 count )
228 fseek( fin, count, SEEK_CUR );
236 void skip8f( u32 count, FILE* p_file )
238 fseek( p_file, count, SEEK_CUR );
239 // while( count ) // this was a major slowdown!
241 // //read8f( p_file );
247 void file_delete( char* filename )
249 if( file_exists( filename ) )
253 int file_get_byte_count( )
255 int a = file_byte_count;