From 5f414352d6b1acafa8c1ac5f1452d2c7eb7876ad Mon Sep 17 00:00:00 2001 From: "B. Watson" Date: Thu, 7 May 2020 13:44:26 -0400 Subject: add -a and -d options --- miragextract.c | 41 ++++++++++++++++++++++++++++++++--------- 1 file changed, 32 insertions(+), 9 deletions(-) (limited to 'miragextract.c') diff --git a/miragextract.c b/miragextract.c index 9d63476..6861aef 100644 --- a/miragextract.c +++ b/miragextract.c @@ -22,6 +22,9 @@ char *outfmt = "wav"; int want_track = 0; /* -1 = no tracks, 0 = all, 1-99 = just that one */ double quality = 0.7l; int swap_bytes = 0; +int autoname = 0; +int want_data = 1; +int want_audio = 1; void die(char *msg) { fprintf(stderr, "%s: %s\n", self, msg); @@ -65,29 +68,24 @@ void extract_track(int t, int extract) { switch(sector_type) { case MIRAGE_SECTOR_MODE1: case MIRAGE_SECTOR_MODE2_FORM1: - // printf("Track %d is data, extracting\n", output_track_number); printf("data, "); ext = "iso"; + if(!want_data) extract = 0; break; case MIRAGE_SECTOR_AUDIO: - // printf("Track %d is audio, extracting\n", output_track_number); printf("audio, "); + if(!want_audio) extract = 0; ext = outfmt; break; default: - // printf("Track %d is unsupported type, dumping raw\n", output_track_number); printf(", "); ext = "raw"; + if(!want_data) extract = 0; break; } sector = mirage_track_get_sector(track, 0, 0, NULL); - /* - mirage_sector_get_data(sector, &buf, &len, NULL); - printf("got %d bytes per sector\n", len); - */ - sprintf(outfile, "%s%02d.%s", outfilebase, output_track_number, ext); if(extract) { @@ -142,10 +140,22 @@ void extract_track(int t, int extract) { return; } +void set_auto_name(void) { + static char autoname[4096]; + char *p; + + strcpy(autoname, imagefile); + if((p = strrchr(autoname, '.'))) { + *p = '\0'; + } + + outfilebase = autoname; +} + void usage(int exit_code) { fprintf(exit_code ? stderr : stdout, "miragextract v" VERSION " by B. Watson, WTFPL\n" - "Usage: %s [-l] [-s] [-t track] [-b base] [-f fmt ] [-q quality ] image-file\n" + "Usage: %s [-l] [-s] [-n] [-a] [-d] [-t track] [-b base] [-f fmt ] [-q quality ] image-file\n" "See man page for details\n", self); exit(exit_code); } @@ -161,6 +171,14 @@ void parse_args(int argc, char **argv) { case 'l': want_track = -1; break; + case 'a': + want_audio = 1; + want_data = 0; + break; + case 'd': + want_audio = 0; + want_data = 1; + break; case 's': swap_bytes = 1; break; @@ -196,6 +214,9 @@ void parse_args(int argc, char **argv) { } else die("-t option requires track argument"); break; + case 'n': + autoname = 1; + break; default: die("unrecognized option"); break; @@ -208,6 +229,8 @@ void parse_args(int argc, char **argv) { } if(!imagefile) die("missing image file argument"); + + if(autoname) set_auto_name(); } int main(int argc, char **argv) { -- cgit v1.2.3