$OpenBSD: patch-interp_c,v 1.2 2016/03/16 22:22:34 naddy Exp $
--- interp.c.orig	Tue Nov  7 03:17:26 1995
+++ interp.c	Wed Mar 16 23:20:06 2016
@@ -32,9 +32,8 @@
 #include <signal.h>
 #include <setjmp.h>
 #include <ctype.h>
+#include <errno.h>
 
-extern int errno;		/* set by math functions */
-
 #include "sc.h"
 
 #ifdef HAVE_X11_X_H
@@ -103,7 +102,7 @@ static char *	docapital PROTO((char *));
 static char *	docase PROTO((int, char *));
 static char *	docat PROTO((char *, char *));
 static double	docount PROTO((int, int, int, int));
-static char *	dodate PROTO((long));
+static char *	dodate PROTO((time_t));
 static double	doeqs PROTO((char *, char *));
 static char *	doext PROTO((char *, double));
 static char *	dofmt PROTO((char *, double));
@@ -508,7 +507,7 @@ double
 dodts(mo, day, yr)
 int mo, day, yr;
 {
-    long trial;
+    time_t trial;
     register struct tm *tp; 
     register int i;
     register long jdate;
@@ -516,7 +515,7 @@ int mo, day, yr;
     mdays[1] = 28 + (yr%4 == 0);
 
     if (mo < 1 || mo > 12 || day < 1 || day > mdays[--mo] ||
-		yr > 1999 || yr < 1970) {
+		yr > 2099 || yr < 1970) {
 	scerror("@dts: invalid argument");
 	cellerror = CELLERROR;
 	return(0.0);
@@ -577,11 +576,11 @@ double when;
 	static long t_cache;
 	static struct tm tm_cache;
 	struct tm *tp;
-	long tloc;
+	time_t tloc;
 
 	if (which == NOW) 
-	    return (double)time((long *)0);
-	tloc = (long)when;
+	    return (double)time(NULL);
+	tloc = (time_t)when;
 
 	if (tloc != t_cache) {
 	    tp = localtime(&tloc);
@@ -1002,7 +1001,7 @@ register char *s1, *s2;
 
 static char *
 dodate(tloc)
-long tloc;
+time_t tloc;
 {
     char *tp;
     char *p;
@@ -1274,7 +1273,7 @@ register struct enode *se;
 	case IF:
 	case '?':    return(eval(se->e.o.left) ? seval(se->e.o.right->e.o.left)
 					     : seval(se->e.o.right->e.o.right));
-	case DATE:   return(dodate((long)(eval(se->e.o.right))));
+	case DATE:   return(dodate((eval(se->e.o.right))));
 	case FMT:    return(dofmt(seval(se->e.o.left), eval(se->e.o.right)));
 	case UPPER:  return(docase(UPPER, seval(se->e.o.right)));
 	case LOWER:  return(docase(LOWER, seval(se->e.o.right)));
