--- hack/hack.unix.c.orig	2009-09-24 10:46:30.000000000 +0200
+++ hack/hack.unix.c	2009-11-04 18:49:58.645035610 +0100
@@ -19,7 +19,9 @@
 
 #include	<sys/types.h>		/* for time_t and stat */
 #include	<sys/stat.h>
+#include	<sys/param.h>
 #include	<time.h>
+#include	<err.h>
 
 static struct tm	*getlt(void);
 static bool		 veryold(int);
@@ -95,13 +97,32 @@
 void
 gethdate(const char *name)
 {
-/* old version - for people short of space */
-char *np;
+	char *p, *np, *path;
+	char filename[MAXPATHLEN+1];
 
-	name = "/usr/games/hide/hack";
-	if(stat(name, &hbuf))
-		error("Cannot get status of %s.",
-			(np = rindex(name, '/')) ? np+1 : name);
+	if (strchr(name, '/') != NULL || (p = getenv("PATH")) == NULL)
+		p = "";
+	np = path = strdup(p);	/* Make a copy for strsep. */
+	if (path == NULL)
+		err(1, NULL);
+
+	for (;;) {
+		if ((p = strsep(&np, ":")) == NULL)
+			break;
+		if (*p == '\0')			/* :: */
+			(void) strlcpy(filename, name, sizeof filename);
+		else
+			(void) snprintf(filename, sizeof filename,
+			    "%s/%s", p, name);
+
+		if (stat(filename, &hbuf) == 0) {
+			free(path);
+			return;
+		}
+	}
+	error("Cannot get status of %s.",
+		(p = strrchr(name, '/')) ? p+1 : name);
+	free(path);
 }
 
 bool
