From 07928d50d4c19c15b485b674eb842b6e7341555d Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Mon, 24 Jun 2013 18:15:53 +0000 Subject: [PATCH] [NTVDM] Implement several directory operations. svn path=/branches/ntvdm/; revision=59331 --- subsystems/ntvdm/dos.c | 61 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/subsystems/ntvdm/dos.c b/subsystems/ntvdm/dos.c index 8e9290b95e5..450f6f63cc1 100644 --- a/subsystems/ntvdm/dos.c +++ b/subsystems/ntvdm/dos.c @@ -701,6 +701,67 @@ VOID DosInt21h(WORD CodeSegment) break; } + /* Create Directory */ + case 0x39: + { + String = (PCHAR)((ULONG_PTR)BaseAddress + + TO_LINEAR(DataSegment, LOWORD(Edx))); + + if (CreateDirectoryA(String, NULL)) + { + EmulatorClearFlag(EMULATOR_FLAG_CF); + } + else + { + EmulatorSetFlag(EMULATOR_FLAG_CF); + EmulatorSetRegister(EMULATOR_REG_AX, + (Eax & 0xFFFF0000) | LOWORD(GetLastError())); + } + + break; + } + + /* Remove Directory */ + case 0x3A: + { + String = (PCHAR)((ULONG_PTR)BaseAddress + + TO_LINEAR(DataSegment, LOWORD(Edx))); + + if (RemoveDirectoryA(String)) + { + EmulatorClearFlag(EMULATOR_FLAG_CF); + } + else + { + EmulatorSetFlag(EMULATOR_FLAG_CF); + EmulatorSetRegister(EMULATOR_REG_AX, + (Eax & 0xFFFF0000) | LOWORD(GetLastError())); + } + + + break; + } + + /* Set Current Directory */ + case 0x3B: + { + String = (PCHAR)((ULONG_PTR)BaseAddress + + TO_LINEAR(DataSegment, LOWORD(Edx))); + + if (SetCurrentDirectoryA(String)) + { + EmulatorClearFlag(EMULATOR_FLAG_CF); + } + else + { + EmulatorSetFlag(EMULATOR_FLAG_CF); + EmulatorSetRegister(EMULATOR_REG_AX, + (Eax & 0xFFFF0000) | LOWORD(GetLastError())); + } + + break; + } + /* Allocate Memory */ case 0x48: { -- 2.17.1