diff -ur global-4.8.orig/gozilla/gozilla.c global-4.8/gozilla/gozilla.c
--- global-4.8.orig/gozilla/gozilla.c	2004-08-26 12:45:12.000000000 +1000
+++ global-4.8/gozilla/gozilla.c	2004-09-10 15:32:36.000000000 +1000
@@ -264,7 +264,14 @@
 		 * assume a Windows browser if it's not on the path.
 		 */
 		if (!(path = usable(browser)))
-			snprintf(com, sizeof(com), "start %s \"%s\"", browser, strbuf_value(URL));
+		{
+			/*
+			 * START is an internal command in XP, external in 9X.
+			 */
+			if (!(path = usable("start")))
+				path = "cmd /c start";
+			snprintf(com, sizeof(com), "%s %s \"%s\"", path, browser, strbuf_value(URL));
+		}
 		else
 			snprintf(com, sizeof(com), "%s \"%s\"", path, strbuf_value(URL));
 #else
diff -ur global-4.8.orig/htags/src2html.c global-4.8/htags/src2html.c
--- global-4.8.orig/htags/src2html.c	2004-08-26 12:45:12.000000000 +1000
+++ global-4.8/htags/src2html.c	2004-09-10 11:47:46.000000000 +1000
@@ -107,7 +107,11 @@
  * reverse of atoi
  */
 static char *
+#ifdef __DJGPP__
+_itoa(n)
+#else
 itoa(n)
+#endif
 	int n;
 {
 	static char buf[32];
@@ -115,6 +119,9 @@
 	snprintf(buf, sizeof(buf), "%d", n);
 	return buf;
 }
+#ifdef __DJGPP__
+#define itoa _itoa
+#endif
 void
 echoc(int c)
 {
diff -ur global-4.8.orig/libutil/path.c global-4.8/libutil/path.c
--- global-4.8.orig/libutil/path.c	2004-08-26 12:45:14.000000000 +1000
+++ global-4.8/libutil/path.c	2004-09-10 11:38:58.000000000 +1000
@@ -32,7 +32,6 @@
 #endif
 
 #ifdef __DJGPP__
-#include <dos.h>			/* for intdos() */
 #include <fcntl.h>			/* for _USE_LFN */
 #endif
 
@@ -77,34 +76,47 @@
 	char *p;
 
 	if (_USE_LFN) {
-		/* Ensure we're using a complete long name, not a mixture
+		char name[260], sfn[13];
+		char *base;
+
+		/*
+		 * Ensure we're using a complete long name, not a mixture
 		 * of long and short.
 		 */
-		union REGS regs;
-		regs.x.ax = 0x7160;
-		regs.x.cx = 0x8002;
-		regs.x.si = (unsigned)path;
-		regs.x.di = (unsigned)path;
-		intdos( &regs, &regs );
+		_truename(path, path);
 		/*
-		 * A non-existant file returns error code 3; get the path,
-		 * strip the filename, LFN the path and put the filename back.
+		 * _truename will successfully convert the path of a non-
+		 * existant file, but it's probably still a mixture of long and
+		 * short components - convert the path separately.
 		 */
-		if (regs.x.cflag && regs.h.al == 3) {
-			char filename[261];
-			regs.x.ax = 0x7160;
-			regs.h.cl = 0;
-			intdos(&regs, &regs);
-			p = basename(path);
-			strlimcpy(filename, p, sizeof(filename));
-			*p = 0;
-			regs.x.ax = 0x7160;
-			regs.h.cl = 2;
-			intdos( &regs, &regs );
-			strcat(path, filename);
+		if (access(path, F_OK) != 0) {
+			base = basename(path);
+			strcpy(name, base);
+			*base = '\0';
+			_truename(path, path);
+			strcat(path, name);
+		}
+		/*
+		 * Convert the case of 8.3 names, as other djgpp functions do.
+		 */
+		if (!_preserve_fncase()) {
+			for (p = path+3, base = p-1; *base; p++) {
+				if (*p == '\\' || *p == '\0') {
+					memcpy(name, base+1, p-base-1);
+					name[p-base-1] = '\0';
+					if (!strcmp(_lfn_gen_short_fname(name, sfn), name)) {
+						while (++base < p)
+							if (*base >= 'A' && *base <= 'Z')
+								*base += 'a' - 'A';
+					} else
+					   base = p;
+				}
+			}
 		}
 	}
-	/* Lowercase the drive letter and convert to slashes. */
+	/*
+	 * Lowercase the drive letter and convert to slashes.
+	 */
 	path[0] = tolower(path[0]);
 	for (p = path+2; *p; ++p)
 		if (*p == '\\')
