diff options
-rw-r--r-- | miragextract.c | 23 |
1 files changed, 20 insertions, 3 deletions
diff --git a/miragextract.c b/miragextract.c index e67964f..3719f2a 100644 --- a/miragextract.c +++ b/miragextract.c @@ -53,6 +53,21 @@ const guint8 *apply_s_opt(const guint8 *buf, gint len) { return (const guint8 *)newbuf; } +void print_progress(void) { + static char spinner[] = "-/|\\"; + static int count = 0; + putchar(spinner[count++]); + putchar('\b'); + fflush(stdout); + if(count == 4) count = 0; +} + +char *human_mb(int bytes) { + static char buf[10]; + sprintf(buf, "%2.1f", (float)bytes / 1048576.0); + return buf; +} + void extract_track(int t, int extract) { MirageTrack *track; MirageSector *sector; @@ -134,6 +149,7 @@ void extract_track(int t, int extract) { } else { fwrite(buf, len, 1, out); } + if(isatty(1) && !(sec % 100)) print_progress(); } g_object_unref(sector); } @@ -141,7 +157,7 @@ void extract_track(int t, int extract) { if(sfout) sf_close(sfout); if(out) fclose(out); - printf("%d bytes (%d sectors)\n", bytes, sec); + printf("%d bytes (%sMB, %d sectors)\n", bytes, human_mb(bytes), sec); if(extract) printf(" Extracted to %s\n", outfile); total_bytes += bytes; @@ -247,6 +263,7 @@ int main(int argc, char **argv) { gchar *fn[2]; int s, t; + /* get rid of any path elements in our executable name */ self = argv[0]; for(p = self; *p; p++) if(p[0] == '/' && p[1]) self = p + 1; @@ -259,6 +276,7 @@ int main(int argc, char **argv) { if(!mirage_initialize(NULL)) die("couldn't initialize libmirage"); + /* TODO: find out what image formats require multiple filenames, if any */ fn[0] = imagefile; fn[1] = NULL; @@ -275,7 +293,6 @@ int main(int argc, char **argv) { int extract = 0; output_track_number++; - // printf("session %d, track %d\n", s + 1, t + 1); if(want_track == 0 || want_track == output_track_number) extract = 1; @@ -284,6 +301,6 @@ int main(int argc, char **argv) { } mirage_shutdown(NULL); - printf("Total size: %d bytes\n", total_bytes); + printf("Total size: %d bytes (%sMB)\n", total_bytes, human_mb(total_bytes)); return 0; } |