From dce795bd8b27806272b33e02b6bd54eaf61df317 Mon Sep 17 00:00:00 2001 From: Niclas Hofmann Date: Mon, 18 Mar 2019 18:04:06 +0100 Subject: [PATCH 1/2] Add 1k divider for numerical output --- README.md | 4 ++++ version.h | 2 +- xwin.c | 49 +++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 48 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 0522947..868fa64 100644 --- a/README.md +++ b/README.md @@ -34,6 +34,10 @@ This release was tested against MarIuX. ## Revision History +### Version 3.0p12 - Mar 20 2019 +- use , as 1k divider for numerical output +- Niclas Hofmann, `niclas@molgen.mpg.de` + ### Version 3.0p11 - Jan 23 2019 - remove newline in window title - Niclas Hofmann, `niclas@molgen.mpg.de` diff --git a/version.h b/version.h index 41d6980..7712305 100644 --- a/version.h +++ b/version.h @@ -1 +1 @@ -#define XDU_VERSION "3.0p11" +#define XDU_VERSION "3.0p12" diff --git a/xwin.c b/xwin.c index e10aa43..b60ea4d 100644 --- a/xwin.c +++ b/xwin.c @@ -491,11 +491,46 @@ void xrepaint_noclear() repaint(xwa.width, xwa.height); } +void readable_float(float number, char* number_label) +{ + char number_string[1024]; + int i, j, length; + sprintf(number_string, "%.2f", number); + length = (strlen(number_string) - 3) / 4 + strlen(number_string); + + for (i = 0, j = 0; i < length; ++i) { + if ((length - 3 - i) % 4 == 0 && i < length - 3) { + number_label[i] = ','; + continue; + } + number_label[i] = number_string[j++]; + } + number_label[length] = 0; +} + +void readable_long_long(long long number, char* number_label) +{ + char number_string[1024]; + int i, j, length; + sprintf(number_string, "%lld", number); + length = (strlen(number_string) - 1) / 3 + strlen(number_string); + + for (i = 0, j = 0; i < length; ++i) { + if ((length - i) % 4 == 0 && i != 0) { + number_label[i] = ','; + continue; + } + number_label[i] = number_string[j++]; + } + number_label[length] = 0; +} + void xdrawrect(char* name, long long size, int x, int y, int width, int height) { int textx, texty; char label[1024]; + char number_label[1024]; XCharStruct overall; int ascent, descent, @@ -509,21 +544,23 @@ void xdrawrect(char* name, long long size, int x, int y, int width, int height) switch (res.showsize) { case 1: - sprintf(label, "%s (%lldk)", name, size); + readable_long_long(size, number_label); + sprintf(label, "%s (%sk)", name, number_label); name = label; break; case 2: - sprintf(label, "%s (%.2fM)", name, (double)size / (double)1024); + readable_float((double)size / (double)1024, number_label); + sprintf(label, "%s (%sM)", name, number_label); name = label; break; case 3: - sprintf(label, "%s (%.2fG)", name, - (double)size / (double)(1024 * 1024)); + readable_float((double)size / (double)(1024 * 1024), number_label); + sprintf(label, "%s (%sG)", name, number_label); name = label; break; case 4: - sprintf(label, "%s (%.2fT)", name, - (double)size / (double)(1024 * 1024 * 1024)); + readable_float((double)size / (double)(1024 * 1024 * 1024), number_label); + sprintf(label, "%s (%sT)", name, number_label); name = label; break; default: From 99a44ddc5ddc659345332be8552ed18ad3f68878 Mon Sep 17 00:00:00 2001 From: Niclas Hofmann Date: Wed, 20 Mar 2019 18:52:25 +0100 Subject: [PATCH 2/2] Little improvment for repainting --- xwin.c | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) diff --git a/xwin.c b/xwin.c index b60ea4d..a2a08bc 100644 --- a/xwin.c +++ b/xwin.c @@ -35,6 +35,8 @@ #include /* for exit() */ #endif +#include + /* * IMPORTS: routines that this module vectors out to */ @@ -67,6 +69,11 @@ extern void xdrawrect(); */ static void help_popup(); static void help_popdown(); +static struct timeval last_repaint; +static long int timediff(struct timeval* t1, struct timeval* t2) +{ + return 1000000 * (t2->tv_sec - t1->tv_sec) + t2->tv_usec - t1->tv_usec; +} static String fallback_resources[] = { "*window.width: 600", @@ -338,10 +345,20 @@ static void c_resize(Widget w, XtPointer data, XEvent* event, Boolean* continue_to_dispatch) { UNUSED(w, data, event, continue_to_dispatch); - /* - * printf("Resize\n"); - */ + /* + * printf("Resize\n"); + */ + long int diff; + struct timeval t; + + gettimeofday(&t, NULL); + diff = timediff(&last_repaint, &t); + + if (diff < (long int)50000) + return; xrepaint(); + + gettimeofday(&last_repaint, NULL); } static void @@ -351,6 +368,14 @@ c_repaint(Widget w, XtPointer data, XEvent* event, Boolean* continue_to_dispatch /* * printf("Expose\n"); */ + long int diff; + struct timeval t; + + gettimeofday(&t, NULL); + diff = timediff(&last_repaint, &t); + + if (diff < (long int)50000) + return; xrepaint_noclear(); }