--- language/modula3/m3compiler/m3where/src/Main.m3.orig	Mon Jun  7 10:12:38 1999
+++ language/modula3/m3compiler/m3where/src/Main.m3	Sat Sep  8 14:48:05 2001
@@ -302,9 +302,10 @@
     m3_template := Env.Get("M3_TEMPLATE_DIR");
     path        : TEXT;
     subpath     : TEXT;
-    nextsep     : INTEGER := 0;
-    prevsep     : INTEGER := 0;
+    nextsep     : INTEGER;
+    prevsep     : INTEGER := -1;
     sep         : CHAR;
+    filename    : TEXT;
   BEGIN
     IF m3_template # NIL THEN
       template_dir := m3_template;
@@ -321,13 +322,17 @@
       REPEAT
         nextsep := Text.FindChar(path, sep, prevsep + 1);
         IF nextsep # -1 THEN
-          subpath := Text.Sub(path, prevsep, nextsep - prevsep - 1);
+          subpath := Text.Sub(path, prevsep + 1, nextsep - prevsep - 1);
         ELSE
-          subpath := Text.Sub(path, prevsep);
+          subpath := Text.Sub(path, prevsep + 1);
         END;
-        IF M3File.IsReadable(subpath & template) THEN
-          template_dir := subpath;
-          RETURN;
+        IF Text.Length(subpath) > 0 THEN
+          filename := subpath & SL & template;
+          IF M3File.IsReadable(filename) AND
+            NOT M3File.IsDirectory(filename) THEN
+            template_dir := subpath;
+            RETURN;
+          END;
         END;
         prevsep := nextsep;
       UNTIL prevsep = -1;
