[hackers] [PATCH][sbase] cal: Centre month and year above calendar

From: Richard Ipsum <richardipsum_AT_fastmail.co.uk>
Date: Sat, 27 Apr 2019 16:48:44 +0100

---
 cal.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/cal.c b/cal.c
index bf4f537..d347113 100644
--- a/cal.c
+++ b/cal.c
_AT_@ -3,6 +3,7 @@
 #include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <string.h>
 #include <time.h>
 #include <unistd.h>
 
_AT_@ -93,12 +94,13 @@ printgrid(size_t year, int month, int fday, int line)
 static void
 drawcal(size_t year, int month, size_t ncols, size_t nmons, int fday)
 {
-	char *smon[] = {"  January", " February", "    March", "    April",
-	                "      May", "     June", "     July", "   August",
-	                "September", "  October", " November", " December" };
+	char *smon[] = { "January", "February", "March", "April",
+	                 "May", "June", "July", "August",
+	                 "September", "October", "November", "December" };
 	char *days[] = { "Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", };
 	size_t m, n, col, cur_year, cur_month, dow;
-	int line;
+	int line, width_d, width = sizeof("Su Mo Tu We Th Fr Sa") - 1;
+	char month_year[width + 1];
 
 	for (m = 0; m < nmons; ) {
 		n = m;
_AT_@ -109,8 +111,9 @@ drawcal(size_t year, int month, size_t ncols, size_t nmons, int fday)
 				cur_month -= 12;
 				cur_year += 1;
 			}
-			printf("   %s %-4zu    ", smon[cur_month], cur_year);
-			printf("  ");
+			snprintf(month_year, sizeof(month_year), "%s %zu", smon[cur_month], cur_year);
+			width_d = width - strlen(month_year);
+			printf("%*s%s%*s   ", width_d / 2 + width_d % 2, "", month_year, width_d / 2, "");
 		}
 		putchar('\n');
 		for (col = 0, m = n; m < nmons && col < ncols; ++col, ++m) {
-- 
2.21.0
Received on Sat Apr 27 2019 - 17:48:44 CEST

This archive was generated by hypermail 2.3.0 : Sat Apr 27 2019 - 18:00:22 CEST