youtube: make util function from format printing thousand separated numbers - frontends - front-ends for some sites (experiment) (DIR) Log (DIR) Files (DIR) Refs (DIR) README (DIR) LICENSE --- (DIR) commit a9e2584bc6c2b314c4f1b6d6a5f4715161d64bc5 (DIR) parent 634c895fbf8796d04bea2c0fef6615110c9ef951 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org> Date: Tue, 7 Mar 2023 19:32:47 +0100 youtube: make util function from format printing thousand separated numbers In other programs print views this way too. Diffstat: M util.c | 26 ++++++++++++++++++++++++++ M util.h | 1 + M youtube/cgi.c | 7 ++++--- M youtube/cli.c | 5 +++-- M youtube/gopher.c | 30 ++---------------------------- 5 files changed, 36 insertions(+), 33 deletions(-) --- (DIR) diff --git a/util.c b/util.c @@ -221,3 +221,29 @@ durationstr(long secs, char *buf, size_t bufsiz) return r; } + +/* print views with thousand separators */ +void +printnumsep(const char *s) +{ + const char *p; + int ndigits = 0; + + /* first count all digits */ + for (p = s; *p; p++) + if (*p >= '0' && *p <= '9') + ndigits++; + + for (p = s; *p; p++) { + if (!(*p >= '0' && *p <= '9')) + continue; + + putchar(*p); + ndigits--; + + /* show separator on every 3 digits and when there are + digits remaining */ + if ((ndigits % 3) == 0 && ndigits > 0) + putchar(','); + } +} (DIR) diff --git a/util.h b/util.h @@ -14,6 +14,7 @@ int friendlytime(time_t now, time_t t); char *getparam(const char *query, const char *s); void gophertext(FILE *fp, const char *s, size_t len); int hexdigit(int c); +void printnumsep(const char *s); int uriencode(const char *s, char *buf, size_t bufsiz); int utf8pad(char *buf, size_t bufsiz, const char *s, size_t len, int pad); void xmlencode(const char *s); (DIR) diff --git a/youtube/cgi.c b/youtube/cgi.c @@ -281,9 +281,9 @@ render_search(struct search_response *r) OUT("</span><br/>\n"); } OUT(" <span class=\"stats\">"); - OUT(v->viewcount); + printnumsep(v->viewcount); OUT( - "</span><br/>\n" + " views</span><br/>\n" " </td>\n" " <td align=\"right\" class=\"a-r\">\n" " <span class=\"duration\">"); @@ -366,7 +366,8 @@ render_video(struct video_response *r) } OUT("<tr><td><b>Views:</b></td><td>"); - printf("%ld", r->viewcount); + snprintf(buf, sizeof(buf), "%ld", r->viewcount); + printnumsep(buf); OUT("</td></tr>\n"); if (r->publishdate[0]) { (DIR) diff --git a/youtube/cli.c b/youtube/cli.c @@ -149,7 +149,7 @@ render_search(struct search_response *r) } if (v->viewcount[0]) { OUT("Views: "); - OUTESCAPE(v->viewcount); + printnumsep(v->viewcount); OUT("\n"); } OUT("\n"); @@ -182,7 +182,8 @@ render_video(struct video_response *r) } OUT("Views: "); - printf("%ld", r->viewcount); + snprintf(buf, sizeof(buf), "%ld", r->viewcount); + printnumsep(buf); OUT("\n"); if (r->publishdate[0]) { (DIR) diff --git a/youtube/gopher.c b/youtube/gopher.c @@ -42,32 +42,6 @@ info(const char *s) line('i', s, ""); } -/* print views with thousand separators */ -static void -printviews(const char *s) -{ - const char *p; - int ndigits = 0; - - /* first count all digits */ - for (p = s; *p; p++) - if (*p >= '0' && *p <= '9') - ndigits++; - - for (p = s; *p; p++) { - if (!(*p >= '0' && *p <= '9')) - continue; - - putchar(*p); - ndigits--; - - /* show separator on every 3 digits and when there are - digits remaining */ - if ((ndigits % 3) == 0 && ndigits > 0) - putchar(','); - } -} - void header(void) { @@ -177,7 +151,7 @@ render_search(struct search_response *r) } if (v->viewcount[0]) { OUT("iViews: "); - printviews(v->viewcount); + printnumsep(v->viewcount); printf("\t%s\t%s\t%s\r\n", "", host, port); } } @@ -238,7 +212,7 @@ render_video(struct video_response *r) OUT("iViews: "); snprintf(buf, sizeof(buf), "%ld", r->viewcount); - printviews(buf); + printnumsep(buf); printf("\t%s\t%s\t%s\r\n", "", host, port); if (r->publishdate[0]) {