diff --git a/src/main/java/com/dostalgia/UploadResource.java b/src/main/java/com/dostalgia/UploadResource.java index 1b14b28..c15522a 100644 --- a/src/main/java/com/dostalgia/UploadResource.java +++ b/src/main/java/com/dostalgia/UploadResource.java @@ -488,15 +488,19 @@ public class UploadResource { } private byte[] buildJsdosJson(String relExe) { - // DOS uses \ as path separator; / is a switch character. + // DOS uses \\ as path separator; / is a switch character. // If the executable is in a subdirectory, cd into it first. var parts = splitDirExe(relExe); - String script = parts[0] != null - ? "cd " + parts[0] + "\n" + parts[1] - : relExe; + StringBuilder script = new StringBuilder(); + if (parts[0] != null) { + // Set PATH to include root so DOS extenders (DOS4GW etc.) are findable + script.append("path=c:\\\n"); + script.append("cd ").append(parts[0]).append("\n"); + } + script.append(parts[1]); String json = "{" + "\"autoexec\":{" - + "\"options\":{\"script\":{\"value\":\"" + escapeJson(script) + "\"}}" + + "\"options\":{\"script\":{\"value\":\"" + escapeJson(script.toString()) + "\"}}" + "}," + "\"output\":{" + "\"options\":{\"autolock\":{\"value\":true}}}" @@ -539,8 +543,8 @@ public class UploadResource { sb.append("@echo off\n"); sb.append("mount c .\n"); sb.append("c:\n"); - sb.append("cls\n"); if (dir != null) { + sb.append("path=c:\\\n"); sb.append("cd ").append(dir).append("\n"); } sb.append(exe).append("\n");