From e262a46487aa23137e35c7ede8c5078c0bbc089d Mon Sep 17 00:00:00 2001 From: Hermes Agent Date: Fri, 29 May 2026 10:15:23 +0200 Subject: [PATCH] Add path=c:\ to autoexec for DOS extender findability When the main executable is in a subdirectory but DOS4GW.EXE (or other DOS extender) is at the ZIP root, DOS/4GW fails with 'No such file or directory' because it only searches the current directory and PATH. Adding 'path=c:\' before the 'cd' command ensures root-level DOS extenders are always findable regardless of where the game EXE lives. --- src/main/java/com/dostalgia/UploadResource.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) 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");