Fix DOS drive root and initial working directory mapping
authorRobert Pengelly <robertapengelly@hotmail.com>
Sun, 18 Oct 2026 08:29:17 +0000 (09:29 +0100)
committerRobert Pengelly <robertapengelly@hotmail.com>
Sun, 18 Oct 2026 08:29:17 +0000 (09:29 +0100)
interrupts.c

index d990a5daeb156f89d8c3c87a9010d6b341e4b0aa..29c89f3a199014fbf04c6841e60cca25047180ba 100644 (file)
@@ -5896,6 +5896,49 @@ void init_ivt (CPU8086 *cpu) {
         dos_drive_root[0] = '\0';
         dos_append_bounded (dos_drive_root, sizeof (dos_drive_root), env_p);
     
+    } else {
+    
+        char cwd[260];
+        
+        const char *relative;
+        size_t i;
+        
+#if     defined (_WIN32)
+        if (_getcwd (cwd, sizeof (cwd)) != NULL && cwd[0] && cwd[1] == ':') {
+        
+            dos_drive_root[0] = cwd[0];
+            dos_drive_root[1] = ':';
+            dos_drive_root[2] = '/';
+            dos_drive_root[3] = '\0';
+            
+            relative = cwd + 2;
+        
+#else
+        if (getcwd (cwd, sizeof (cwd)) != NULL && cwd[0] == '/') {
+        
+            dos_drive_root[0] = '/';
+            dos_drive_root[1] = '\0';
+            
+            relative = cwd;
+        
+#endif
+            while (*relative == '/' || *relative == '\\') {
+                relative++;
+            }
+            
+            dos_current_dir[0] = '\0';
+            dos_append_bounded (dos_current_dir, sizeof (dos_current_dir), relative);
+            
+            for (i = 0; dos_current_dir[i]; i++) {
+            
+                if (dos_current_dir[i] == '\\') {
+                    dos_current_dir[i] = '/';
+                }
+            
+            }
+        
+        }
+    
     }
     
     file_handles[0] = stdin;