+ int w = MW*3 + 2*3;
+ int x = COLS/2 - w/2;
+ int y = 0;
+ int h[4] = {};
+
+ /* Determine heights */
+ for (int m = 0; m < 12; m++) {
+ int weeks = weeks_in_month(YEAR, m);
+ h[m/3] = MAX(h[m/3], weeks+2);
+ }
+ int sum = h[0]+h[1]+h[2]+h[3];
+
+ /* Print Header */
+ mvwprintw(win, y++, COLS/2-2, "%d", YEAR);
+
+ /* Print Months */
+ for (int m = 0; m < 12; m++) {
+ print_month(m, y, x);
+ if (m % 3 == 2) {
+ x = COLS/2 - w/2;
+ y += h[m/3]+1;
+ } else {
+ x += 3+MW;
+ }
+ }
+
+ /* Print Lines */
+ y = 1;
+ mvwvline(win, y, x+(MW+3)*1-2, ACS_VLINE, sum+3);
+ mvwvline(win, y, x+(MW+3)*2-2, ACS_VLINE, sum+3);
+ for (int i = 0; i < 3; i++) {
+ y += h[i];
+ mvwhline(win, y, x, ACS_HLINE, w);
+ mvwaddch(win, y, x+(MW+3)*1-2, ACS_PLUS);
+ mvwaddch(win, y, x+(MW+3)*2-2, ACS_PLUS);
+ y++;
+ }