$NetBSD: patch-ab,v 1.4 2016/03/30 09:46:37 jperkin Exp $

Various fixes.

--- Dclock.c.orig	2007-04-19 18:51:51.000000000 +0200
+++ Dclock.c
@@ -21,8 +21,6 @@ static void
 #define CLOCK_WIDTH	256
 #define CLOCK_HEIGHT	80
 #define DATE_FMT	"%W, %M %d"
-#define when		break;case
-#define otherwise	break;default
 
 
 static Boolean SetValues(), show_time();
@@ -367,8 +365,8 @@ DclockWidget w;
 
     if (w->dclock.interval_id != (XtIntervalId)NULL)
 	XtRemoveTimeOut(w->dclock.interval_id);
-    XtReleaseGC (w, w->dclock.foreGC);
-    XtReleaseGC (w, w->dclock.backGC);
+    XtReleaseGC ((Widget) w, w->dclock.foreGC);
+    XtReleaseGC ((Widget) w, w->dclock.backGC);
     for (n = 0; n < 10; n++) {
 	XFreePixmap(XtDisplay(w), w->dclock.digits[n]);
 	XFreePixmap(XtDisplay(w), w->dclock.tiny_digits[n]);
@@ -388,7 +386,7 @@ DclockWidget    w;
     Pixmap pix;
     GC gc = w->dclock.foreGC;
 
-    if (!XtIsRealized(w))
+    if (!XtIsRealized((Widget) w))
 	return;
 
     winwidth = w->core.width;
@@ -450,7 +448,7 @@ DclockWidget    w;
 	    make_number(w, w->dclock.tiny_digits[i], gc, i, tiny_segment_pts);
 	}
 	else
-	    w->dclock.tiny_digits[i] = NULL;
+	    w->dclock.tiny_digits[i] = (Pixmap) NULL;
     }
     /* The colon[0] area is blank */
     if (w->dclock.colon[0])
@@ -627,9 +625,9 @@ DclockWidget    w;
 {
     Boolean save_scroll = w->dclock.scroll;
     Boolean save_fade = w->dclock.fade;
-    long t;
+    time_t t;
 
-    if (!XtIsRealized(w))
+    if (!XtIsRealized((Widget) w))
 	return;
 
     if (w->dclock.interval_id != (XtIntervalId)NULL) {
@@ -663,7 +661,7 @@ DclockWidget w;
 {
     char buf[11];
     Boolean alarm_went_off = False;
-    long t = time(0);
+    time_t t = time(0);
     register struct tm *l_time = localtime(&t);
     int digit_w = w->dclock.digit_w;
     int digit_h = w->dclock.digit_h;
@@ -802,7 +800,7 @@ register char *p;
 		turn_off[i] = oldmask & ~newmask;
 	    }
 	    else
-		tmp_pix[i] = NULL;
+		tmp_pix[i] = (Pixmap) NULL;
  
 	for (j = 1; j != FADE_ITER; ++j)
 	{
@@ -875,27 +873,36 @@ struct tm *now;
 	if (*p != '%')
 	    *datep++ = *p;
 	else switch (*++p) {
-	    when 'M':
+	    case 'M':
 		datep += strlen(strcpy(datep, Months[now->tm_mon]));
-	    when 'm':
+		break;
+	    case 'm':
 		datep += strlen(strcpy(datep, months[now->tm_mon]));
-	    when 'W':
+		break;
+	    case 'W':
 		datep += strlen(strcpy(datep, Days[now->tm_wday]));
-	    when 'w':
+		break;
+	    case 'w':
 		datep += strlen(strcpy(datep, days[now->tm_wday]));
-	    when 'd':
+		break;
+	    case 'd':
 		if (now->tm_mday >= 10)
 		    *datep++ = (now->tm_mday / 10 + '0');
 		*datep++ = now->tm_mday % 10 + '0';
-	    when 'Y':
-		*datep++ = '1', *datep++ = '9';
-		/* fall thru */
+		break;
+	    case 'Y':
+                *datep++ = (now->tm_year + 1900) / 1000 + '0';
+                *datep++ = (now->tm_year + 1900) % 1000 / 100 + '0';
+		/* FALLTHROUGH */
 	    case 'y':
-		*datep++ = now->tm_year / 10 + '0';
-		*datep++ = now->tm_year % 10 + '0';
-	    when '%':
+               *datep++ = now->tm_year % 100 / 10 + '0';
+               *datep++ = now->tm_year % 10 + '0';
+		break;
+	    case '%':
 		*datep++ = *p;
-	    otherwise: ; /* nothing */
+		break;
+	    default:
+		break; /* nothing */
 	}
     }
     *datep = 0;
@@ -906,7 +913,7 @@ struct tm *now;
 
     /* remove what was there in case the whole thing isn't overwritten */
     XFillRectangle(XtDisplay(w), XtWindow(w), w->dclock.backGC,
-	0, winheight - (w->dclock.font->ascent + w->dclock.font->descent),
+	0, winheight - (w->dclock.font->ascent + BORDER),
 	winwidth, w->dclock.font->ascent + w->dclock.font->descent);
 
     XDrawString(XtDisplay(w), XtWindow(w), w->dclock.foreGC,
@@ -924,7 +931,8 @@ XtIntervalId *id;
 {
     Boolean alarm_went_off = show_time(w);
     w->dclock.interval_id =
-	XtAddTimeOut((unsigned long)((alarm_went_off || w->dclock.seconds)? 1000 : 60000),
+	XtAddTimeOut((unsigned long)((alarm_went_off || w->dclock.seconds) ?
+			1000 : 60000 - ((time(0L) % 60) * 1000)),
 			timeout, (XtPointer)w);
 }
 
@@ -960,8 +968,8 @@ DclockWidget current, request, new;
     ||  new->dclock.tails != current->dclock.tails
     ||  new->dclock.fade != current->dclock.fade
     ||  new->dclock.miltime != current->dclock.miltime) {
-	XtReleaseGC (current, current->dclock.foreGC);
-	XtReleaseGC (current, current->dclock.backGC);
+	XtReleaseGC ((Widget) current, current->dclock.foreGC);
+	XtReleaseGC ((Widget) current, current->dclock.backGC);
 	GetGC(new);
 	Resize(new); /* pixmaps need to be redrawn */
 	do_redraw = True;
@@ -1024,7 +1032,7 @@ DclockWidget w;
     Arg arg;
 
     XtSetArg(arg, XtNreverseVideo, !w->dclock.reverse);
-    XtSetValues(w, &arg, 1);
+    XtSetValues((Widget) w, &arg, 1);
 }
 
 static void
@@ -1038,7 +1046,7 @@ DclockWidget w;
 	return;
     }
     XtSetArg(arg, XtNmilitaryTime, !w->dclock.miltime);
-    XtSetValues(w, &arg, 1);
+    XtSetValues((Widget) w, &arg, 1);
 }
 
 static void
@@ -1052,7 +1060,7 @@ DclockWidget w;
 	return;
     }
     XtSetArg(arg, XtNseconds, !w->dclock.seconds);
-    XtSetValues(w, &arg, 1);
+    XtSetValues((Widget) w, &arg, 1);
 }
 
 static void
@@ -1062,7 +1070,7 @@ DclockWidget w;
     Arg arg;
 
     XtSetArg(arg, XtNfade, !w->dclock.fade);
-    XtSetValues(w, &arg, 1);
+    XtSetValues((Widget) w, &arg, 1);
     if (w->dclock.fade && w->dclock.scroll)
 	toggle_scroll(w);
 }
@@ -1074,7 +1082,7 @@ DclockWidget w;
     Arg arg;
 
     XtSetArg(arg, XtNtails, !w->dclock.tails);
-    XtSetValues(w, &arg, 1);
+    XtSetValues((Widget) w, &arg, 1);
 }
 
 static void
@@ -1084,7 +1092,7 @@ DclockWidget w;
     Arg arg;
 
     XtSetArg(arg, XtNalarm, !w->dclock.alarm);
-    XtSetValues(w, &arg, 1);
+    XtSetValues((Widget) w, &arg, 1);
 }
 
 static void
@@ -1124,20 +1132,24 @@ XButtonEvent *event;
 		    int digit = w->dclock.alarm_time[i>1?i+1:i] - '0';
 		    int mod;
 		    switch (i) {
-			when 0:
+			case 0:
 			    if (Alarm.hrs > 13 && digit == 1)
 				digit++;
 			    mod = 3;
 			    before.tm_hour = -1;
-			when 1 :
+			    break;
+			case 1 :
 			    mod = (Alarm.hrs < 20)? 10 : 4;
 			    before.tm_hour = -1;
-			when 2:
+			    break;
+			case 2:
 			    mod = 6;
 			    before.tm_min = -1;
-			when 3 :
+			    break;
+			case 3 :
 			    mod = 10;
 			    before.tm_min = -1;
+			    break;
 		    }
 		    if (event->button == 1)
 			digit = (digit + 1) % mod;
