int main( int argc, char *argv[] ) { GSList *actions = NULL; options_t options; unsigned char *buffer = NULL; size_t length = 0; libspectrum_rzx *rzx; int error; progname = argv[0]; error = init_libspectrum(); if( error ) return error; error = get_creator( &creator, "rzxtool" ); if( error ) return error; error = parse_options( argc, argv, &actions, &options ); if( error ) { fprintf( stderr, "Try `%s --help' for more information.\n", progname ); return error; } error = read_file( options.rzxfile, &buffer, &length ); if( error ) return error; rzx = libspectrum_rzx_alloc(); error = libspectrum_rzx_read( rzx, buffer, length ); if( error ) return error; free( buffer ); g_slist_foreach( actions, apply_action, rzx ); if( options.outfile ) { error = write_rzx( options.outfile, rzx, !options.uncompressed ); if( error ) return error; } return 0; }
int main( int argc, char **argv ) { libspectrum_snap *snap; libspectrum_id_t type; libspectrum_class_t class; unsigned char *buffer; size_t length; libspectrum_creator *creator; int flags; int compress = 0; int fix = 0; FILE *f; int error = 0; int c; struct option long_options[] = { { "help", 0, NULL, 'h' }, { "version", 0, NULL, 'V' }, { 0, 0, 0, 0 } }; progname = argv[0]; while( ( c = getopt_long( argc, argv, "cnfhV", long_options, NULL ) ) != -1 ) { switch( c ) { case 'c': compress = LIBSPECTRUM_FLAG_SNAPSHOT_ALWAYS_COMPRESS; break; case 'n': compress = LIBSPECTRUM_FLAG_SNAPSHOT_NO_COMPRESSION; break; case 'f': fix = 1; break; case 'h': show_help(); return 0; case 'V': show_version(); return 0; case '?': /* getopt prints an error message to stderr */ error = 1; break; default: error = 1; fprintf( stderr, "%s: unknown option `%c'\n", progname, (char) c ); break; } } argc -= optind; argv += optind; if( error ) { fprintf( stderr, "Try `%s --help' for more information.\n", progname ); return error; } if( argc < 2 ) { fprintf( stderr, "%s: usage: %s [-c] [-n] [-f] <infile> <outfile>\n", progname, progname ); fprintf( stderr, "Try `%s --help' for more information.\n", progname ); return 1; } error = init_libspectrum(); if( error ) return error; snap = libspectrum_snap_alloc(); if( read_file( argv[0], &buffer, &length ) ) { libspectrum_snap_free( snap ); return 1; } error = libspectrum_snap_read( snap, buffer, length, LIBSPECTRUM_ID_UNKNOWN, argv[0] ); if( error ) { libspectrum_snap_free( snap ); free( buffer ); return error; } free( buffer ); if( fix ) fix_snapshot( snap ); error = libspectrum_identify_file_with_class( &type, &class, argv[1], NULL, 0 ); if( error ) { libspectrum_snap_free( snap ); return error; } if( class != LIBSPECTRUM_CLASS_SNAPSHOT ) { fprintf( stderr, "%s: '%s' is not a snapshot file\n", progname, argv[1] ); libspectrum_snap_free( snap ); return 1; } error = get_creator( &creator, "snapconv" ); if( error ) { libspectrum_snap_free( snap ); return error; } length = 0; error = libspectrum_snap_write( &buffer, &length, &flags, snap, type, creator, compress ); if( error ) { libspectrum_creator_free( creator ); libspectrum_snap_free( snap ); return error; } if( flags & LIBSPECTRUM_FLAG_SNAPSHOT_MAJOR_INFO_LOSS ) { fprintf( stderr, "%s: warning: major information loss during conversion\n", progname ); } else if( flags & LIBSPECTRUM_FLAG_SNAPSHOT_MINOR_INFO_LOSS ) { fprintf( stderr, "%s: warning: minor information loss during conversion\n", progname ); } error = libspectrum_creator_free( creator ); if( error ) { free( buffer ); libspectrum_snap_free( snap ); return error; } error = libspectrum_snap_free( snap ); if( error ) { free( buffer ); return error; } f = fopen( argv[1], "wb" ); if( !f ) { fprintf( stderr, "%s: couldn't open '%s': %s\n", progname, argv[1], strerror( errno ) ); free( buffer ); return 1; } if( fwrite( buffer, 1, length, f ) != length ) { fprintf( stderr, "%s: error writing to '%s'\n", progname, argv[1] ); free( buffer ); fclose( f ); return 1; } free( buffer ); fclose( f ); return 0; }