From: <pa...@us...> - 2003-10-30 01:02:41
|
Update of /cvsroot/fuse-emulator/fuse In directory sc8-pr-cvs1:/tmp/cvs-serv9079 Modified Files: machine.c machine.h tape.c utils.c utils.h Log Message: Merge machine_find_rom and utils_find_lib into one utils_find_auxiliary_file routine. Index: machine.c =================================================================== RCS file: /cvsroot/fuse-emulator/fuse/machine.c,v retrieving revision 1.72 retrieving revision 1.73 diff -C2 -d -r1.72 -r1.73 *** machine.c 30 Oct 2003 00:16:46 -0000 1.72 --- machine.c 30 Oct 2003 01:02:37 -0000 1.73 *************** *** 262,266 **** utils_file rom; ! fd = machine_find_rom( filename ); if( fd == -1 ) { ui_error( UI_ERROR_ERROR, "couldn't find ROM '%s'", filename ); --- 262,266 ---- utils_file rom; ! fd = utils_find_auxiliary_file( filename, UTILS_AUXILIARY_ROM ); if( fd == -1 ) { ui_error( UI_ERROR_ERROR, "couldn't find ROM '%s'", filename ); *************** *** 282,286 **** *data = malloc( rom.length * sizeof( libspectrum_byte ) ); if( !(*data) ) { ! ui_error( UI_ERROR_ERROR, "couldn't find ROM '%s'", filename ); return 1; } --- 282,286 ---- *data = malloc( rom.length * sizeof( libspectrum_byte ) ); if( !(*data) ) { ! ui_error( UI_ERROR_ERROR, "out of memory at %s:%d", __FILE__, __LINE__ ); return 1; } *************** *** 395,444 **** return 0; - } - - /* Find a ROM called `filename' in some likely locations; returns a fd - for the ROM on success or -1 if it couldn't find the ROM */ - int machine_find_rom( const char *filename ) - { - int fd; - char fuse_path[ PATHNAME_MAX_LENGTH ], path[ PATHNAME_MAX_LENGTH ]; - char *fuse_dir; - - /* If this is an absolute path, just look there */ - if( filename[0] == '/' ) return open( filename, O_RDONLY | O_BINARY ); - - /* If not, look in some likely places. Firstly, relative to the current - directory */ - fd = open( filename, O_RDONLY | O_BINARY ); if( fd != -1 ) return fd; - - /* Then in a 'roms' subdirectory off where the Fuse executable is - (useful when Fuse hasn't been installed into /usr/local or - wherever) */ - if( fuse_progname[0] == '/' ) { - strncpy( fuse_path, fuse_progname, PATHNAME_MAX_LENGTH ); - } else { - strncpy( fuse_path, fuse_directory, PATHNAME_MAX_LENGTH ); - strncat( fuse_path, fuse_progname, PATHNAME_MAX_LENGTH ); - } - fuse_dir = dirname( fuse_path ); - - snprintf( path, PATHNAME_MAX_LENGTH, "%s/roms/%s", fuse_dir, filename ); - fd = open( path, O_RDONLY | O_BINARY ); - if( fd != -1 ) return fd; - - /* Then look where Fuse may have installed the ROMs */ - snprintf( path, PATHNAME_MAX_LENGTH, "%s/%s", FUSEDATADIR, filename ); - fd = open( path, O_RDONLY | O_BINARY ); - if( fd != -1 ) return fd; - - #ifdef ROMSDIR - /* Finally look in a system-wide directory for ROMs. Debian uses - /usr/share/spectrum-roms/ here */ - snprintf( path, PATHNAME_MAX_LENGTH, "%s/%s", ROMSDIR, filename ); - fd = open( path, O_RDONLY | O_BINARY ); - if( fd != -1 ) return fd; - #endif - - return -1; } --- 395,398 ---- Index: machine.h =================================================================== RCS file: /cvsroot/fuse-emulator/fuse/machine.h,v retrieving revision 1.38 retrieving revision 1.39 diff -C2 -d -r1.38 -r1.39 *** machine.h 11 Jul 2003 11:03:25 -0000 1.38 --- machine.h 30 Oct 2003 01:02:38 -0000 1.39 *************** *** 110,114 **** int machine_load_rom( libspectrum_byte **data, char *filename, size_t expected_length ); - int machine_find_rom( const char *filename ); int machine_reset( void ); --- 110,113 ---- Index: tape.c =================================================================== RCS file: /cvsroot/fuse-emulator/fuse/tape.c,v retrieving revision 1.96 retrieving revision 1.97 diff -C2 -d -r1.96 -r1.97 *** tape.c 5 Oct 2003 00:06:04 -0000 1.96 --- tape.c 30 Oct 2003 01:02:38 -0000 1.97 *************** *** 161,165 **** snprintf( filename, 80, "tape_%s.z80", id ); ! fd = utils_find_lib( filename ); if( fd == -1 ) { ui_error( UI_ERROR_ERROR, --- 161,165 ---- snprintf( filename, 80, "tape_%s.z80", id ); ! fd = utils_find_auxiliary_file( filename, UTILS_AUXILIARY_LIB ); if( fd == -1 ) { ui_error( UI_ERROR_ERROR, Index: utils.c =================================================================== RCS file: /cvsroot/fuse-emulator/fuse/utils.c,v retrieving revision 1.33 retrieving revision 1.34 diff -C2 -d -r1.33 -r1.34 *** utils.c 30 Oct 2003 00:16:46 -0000 1.33 --- utils.c 30 Oct 2003 01:02:38 -0000 1.34 *************** *** 107,111 **** int fd; utils_file snap; ! fd = utils_find_lib( "disk_plus3.z80" ); if( fd == -1 ) { ui_error( UI_ERROR_ERROR, "Couldn't find +3 disk autoload snap" ); --- 107,111 ---- int fd; utils_file snap; ! fd = utils_find_auxiliary_file( "disk_plus3.z80", UTILS_AUXILIARY_LIB ); if( fd == -1 ) { ui_error( UI_ERROR_ERROR, "Couldn't find +3 disk autoload snap" ); *************** *** 165,179 **** } ! /* Find the auxillary file called `filename'; look in the lib ! directory below where the Fuse executable is and the defined ! package data directory; returns a fd for the file on success, -1 if ! it couldn't find the file */ ! int utils_find_lib( const char *filename ) { int fd; char fuse_path[ PATHNAME_MAX_LENGTH ], path[ PATHNAME_MAX_LENGTH ]; ! char *fuse_dir; if( fuse_progname[0] == '/' ) { strncpy( fuse_path, fuse_progname, PATHNAME_MAX_LENGTH ); --- 165,197 ---- } ! /* Find the auxillary file called `filename'; returns a fd for the ! file on success, -1 if it couldn't find the file */ ! int ! utils_find_auxiliary_file( const char *filename, utils_aux_type type ) { int fd; char fuse_path[ PATHNAME_MAX_LENGTH ], path[ PATHNAME_MAX_LENGTH ]; ! char *fuse_dir, *path_segment; ! ! switch( type ) { ! ! case UTILS_AUXILIARY_LIB: path_segment = "lib"; break; ! case UTILS_AUXILIARY_ROM: path_segment = "roms"; break; ! default: ! ui_error( UI_ERROR_ERROR, "unknown auxiliary file type %d", type ); ! return -1; ! } ! ! /* If given an absolute path, just look there */ ! if( filename[0] == '/' ) return open( filename, O_RDONLY | O_BINARY ); + /* Otherwise look in some likely locations; first, relative to the + current directory */ + fd = open( filename, O_RDONLY | O_BINARY ); if( fd != -1 ) return fd; + + /* Otherwise look in some likely locations; first, in a directory + off where the Fuse executable is; (useful when Fuse hasn't been + installed into /usr/local or wherever) */ if( fuse_progname[0] == '/' ) { strncpy( fuse_path, fuse_progname, PATHNAME_MAX_LENGTH ); *************** *** 184,195 **** fuse_dir = dirname( fuse_path ); ! snprintf( path, PATHNAME_MAX_LENGTH, "%s/lib/%s", fuse_dir, filename ); fd = open( path, O_RDONLY | O_BINARY ); if( fd != -1 ) return fd; snprintf( path, PATHNAME_MAX_LENGTH, "%s/%s", FUSEDATADIR, filename ); fd = open( path, O_RDONLY | O_BINARY ); if( fd != -1 ) return fd; return -1; } --- 202,229 ---- fuse_dir = dirname( fuse_path ); ! snprintf( path, PATHNAME_MAX_LENGTH, "%s/%s/%s", fuse_dir, path_segment, ! filename ); fd = open( path, O_RDONLY | O_BINARY ); if( fd != -1 ) return fd; + /* Then in the defined Fuse data directory */ snprintf( path, PATHNAME_MAX_LENGTH, "%s/%s", FUSEDATADIR, filename ); fd = open( path, O_RDONLY | O_BINARY ); if( fd != -1 ) return fd; + /* If we were given a specific directory for ROMs, look there; + Debian uses /usr/share/spectrum-roms/ here */ + #ifdef ROMSDIR + if( type == UTILS_AUXILIARY_ROM ) { + snprintf( path, PATHNAME_MAX_LENGTH, "%s/%s", ROMSDIR, filename ); + fd = open( path, O_RDONLY | O_BINARY ); + if( fd != -1 ) return fd; + } + #endif + + /* Finally, look relative to the current directory */ + fd = open( filename, O_RDONLY | O_BINARY ); if( fd != -1 ) return fd; + + /* Give up. Couldn't find this file */ return -1; } Index: utils.h =================================================================== RCS file: /cvsroot/fuse-emulator/fuse/utils.h,v retrieving revision 1.10 retrieving revision 1.11 diff -C2 -d -r1.10 -r1.11 *** utils.h 29 Oct 2003 16:24:26 -0000 1.10 --- utils.h 30 Oct 2003 01:02:38 -0000 1.11 *************** *** 47,53 **** } utils_file; int utils_open_file( const char *filename, int autoload, libspectrum_id_t *type ); ! int utils_find_lib( const char *filename ); int utils_read_file( const char *filename, utils_file *file ); int utils_read_fd( int fd, const char *filename, utils_file *file ); --- 47,61 ---- } utils_file; + /* The types of auxillary file we can look for */ + typedef enum utils_aux_type { + + UTILS_AUXILIARY_LIB, /* Something from the lib/ directory */ + UTILS_AUXILIARY_ROM, /* Something from the roms/ directory */ + + } utils_aux_type; + int utils_open_file( const char *filename, int autoload, libspectrum_id_t *type ); ! int utils_find_auxiliary_file( const char *filename, utils_aux_type type ); int utils_read_file( const char *filename, utils_file *file ); int utils_read_fd( int fd, const char *filename, utils_file *file ); |