aboutsummaryrefslogtreecommitdiff
path: root/miragextract.c
diff options
context:
space:
mode:
authorB. Watson <yalhcru@gmail.com>2020-05-07 13:44:26 -0400
committerB. Watson <yalhcru@gmail.com>2020-05-07 13:44:26 -0400
commit5f414352d6b1acafa8c1ac5f1452d2c7eb7876ad (patch)
tree21ce9a369e1032a5fffebf0364d7b5ded61f35f2 /miragextract.c
parent6da702b80b131da67e50b7ec5fafe9f2a6fba43b (diff)
downloadmiragextract-5f414352d6b1acafa8c1ac5f1452d2c7eb7876ad.tar.gz
add -a and -d options
Diffstat (limited to 'miragextract.c')
-rw-r--r--miragextract.c41
1 files changed, 32 insertions, 9 deletions
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("<unknown>, ");
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) {