From 250cc7003788a51437e298f5ef416da44169b8a3 Mon Sep 17 00:00:00 2001 From: Přemysl Janouch Date: Fri, 27 Jan 2017 03:55:22 +0100 Subject: Pull a progress bar out of our ass --- hex.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/hex.c b/hex.c index 5aa9220..7280629 100644 --- a/hex.c +++ b/hex.c @@ -149,6 +149,8 @@ static struct app_context lua_State *L; ///< Lua state int ref_format; ///< Reference to "string.format" struct str_map coders; ///< Map of coders by name + + int progress; ///< Decoding progressbar #endif // HAVE_LUA // Data: @@ -999,9 +1001,26 @@ app_lua_chunk_newindex (lua_State *L) return 0; } +static void +app_update_progress (int64_t real_offset) +{ + // Updating too often causes unnecessary slowdowns + int progress = real_offset * 20 / g_ctx.data_len; + if (progress <= g_ctx.progress) + return; + + g_ctx.progress = progress; + printf ("\rDecoding... %3d%%", progress * 5); + fflush (stdout); +} + static void app_lua_mark (int64_t offset, int64_t len, const char *desc) { + // XXX: not all decoders go sequentially over the file + if (!g_ctx.polling && g_ctx.data_len) + app_update_progress (offset - g_ctx.data_offset); + // That would cause stupid entries, making trouble in marks_by_offset if (len <= 0) return; @@ -2015,6 +2034,9 @@ main (int argc, char *argv[]) exit_fatal ("Lua: decoding failed: %s", lua_tostring (g_ctx.L, -1)); lua_pop (g_ctx.L, 1); + + if (g_ctx.progress) + fputc ('\n', stdout); #endif // HAVE_LUA app_flatten_marks (); -- cgit v1.2.3-70-g09d2