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 ) { unsigned char *buffer; size_t length; const char *rzxfile; libspectrum_rzx *rzx; libspectrum_error error; libspectrum_dword keyid = 0; libspectrum_signature signature; struct rzx_key *key; int c; int bad_option = 0; struct option long_options[] = { { "version", 0, NULL, 'V' }, { "help", 0, NULL, 'h' }, { 0, 0, 0, 0 } }; progname = argv[0]; while( ( c = getopt_long( argc, argv, "Vh", long_options, NULL ) ) != -1 ) { switch( c ) { case 'V': show_version(); exit( 0 ); case 'h': show_help(); exit( 0 ); case '?': /* getopt prints an error message to stderr */ bad_option = 1; break; default: bad_option = 1; fprintf( stderr, "%s: unknown option `%c'\n", progname, (char) c ); break; } } argc -= optind; argv += optind; if( bad_option ) { fprintf( stderr, "Try `%s --help' for more information.\n", progname ); return bad_option; } if( argc < 1 ) { fprintf( stderr, "%s: usage: %s <rzxfile>\n", progname, progname ); fprintf( stderr, "Try `%s --help' for more information.\n", progname ); return 2; } if( init_libspectrum() ) return 16; rzxfile = argv[0]; rzx = libspectrum_rzx_alloc(); if( read_file( rzxfile, &buffer, &length ) ) return 16; if( libspectrum_rzx_read( rzx, buffer, length ) ) { free( buffer ); return 16; } keyid = libspectrum_rzx_get_keyid( rzx ); if( !keyid ) { printf( "%s: no key ID found in '%s'\n", progname, rzxfile ); libspectrum_rzx_free( rzx ); free( buffer ); return 16; } for( key = known_keys; key->id; key++ ) if( keyid == key->id ) break; if( !key->id ) { printf( "%s: don't know anything about key ID %08x\n", progname, keyid ); libspectrum_rzx_free( rzx ); free( buffer ); return 16; } error = libspectrum_rzx_get_signature( rzx, &signature ); if( error ) { libspectrum_rzx_free( rzx ); free( buffer ); return 16; } error = libspectrum_verify_signature( &signature, &( key->key ) ); if( error && error != LIBSPECTRUM_ERROR_SIGNATURE ) { libspectrum_signature_free( &signature ); libspectrum_rzx_free( rzx ); free( buffer ); return 16; } free( buffer ); libspectrum_rzx_free( rzx ); free( rzx ); libspectrum_signature_free( &signature ); if( error == LIBSPECTRUM_ERROR_SIGNATURE ) { printf( "%s: BAD signature with key %08x (%s) in '%s'\n", progname, key->id, key->description, rzxfile ); return 1; } else { printf( "%s: good signature with key %08x (%s) in '%s'\n", progname, key->id, key->description, rzxfile ); 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; }
int main( int argc, char **argv ) { int c, error = 0; libspectrum_tape *tzx; progname = argv[0]; struct option long_options[] = { { "help", 0, NULL, 'h' }, { "version", 0, NULL, 'V' }, { 0, 0, 0, 0 } }; while( ( c = getopt_long( argc, argv, "a:s:i:bhV", long_options, NULL ) ) != -1 ) { switch( c ) { case 'a': archive_file = optarg ; break; case 'b': beautify = 1; break; case 's': scr_file = optarg ; break; case 'i': inlay_file = optarg ; 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 [-s <scr file>] [-a <archive info tzx>] " "[-b] [-i <inlay image>] <infile> <outfile>\n", progname, progname ); fprintf( stderr, "Try `%s --help' for more information.\n", progname ); return 1; } error = init_libspectrum(); if( error ) return error; if( read_tape( argv[0], &tzx ) ) return 1; if( archive_file && update_archive_file( archive_file, tzx ) ) { libspectrum_tape_free( tzx ); return 1; } if( scr_file && append_scr_file( scr_file, tzx ) ) { libspectrum_tape_free( tzx ); return 1; } if( inlay_file && append_inlay_file( inlay_file, tzx ) ) { libspectrum_tape_free( tzx ); return 1; } if( beautify && beautify_tzx_file( tzx ) ) { libspectrum_tape_free( tzx ); return 1; } if( write_tape( argv[1], tzx ) ) { libspectrum_tape_free( tzx ); return 1; } libspectrum_tape_free( tzx ); return 0; }