From 9b5a4bf8a2f5865fa36e31bc9a17b311bc01141f Mon Sep 17 00:00:00 2001 From: Aleksandar Andrejevic Date: Fri, 1 May 2015 23:04:03 +0000 Subject: [PATCH] [NTVDM] Implement INT 21h, AH = 36h "Get Free Disk Space". svn path=/trunk/; revision=67504 --- .../subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c index ccf106f1048..084f027f1c5 100644 --- a/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c +++ b/reactos/subsystems/mvdm/ntvdm/dos/dos32krnl/dos.c @@ -832,6 +832,38 @@ VOID WINAPI DosInt21h(LPWORD Stack) break; } + /* Get Free Disk Space */ + case 0x36: + { + CHAR RootPath[3] = "X:\\"; + DWORD SectorsPerCluster; + DWORD BytesPerSector; + DWORD NumberOfFreeClusters; + DWORD TotalNumberOfClusters; + + if (getDL() == 0) RootPath[0] = 'A' + CurrentDrive; + else RootPath[0] = 'A' + getDL() - 1; + + if (GetDiskFreeSpaceA(RootPath, + &SectorsPerCluster, + &BytesPerSector, + &NumberOfFreeClusters, + &TotalNumberOfClusters)) + { + setAX(LOWORD(SectorsPerCluster)); + setCX(LOWORD(BytesPerSector)); + setBX(LOWORD(NumberOfFreeClusters)); + setDX(LOWORD(TotalNumberOfClusters)); + } + else + { + /* Error */ + setAX(0xFFFF); + } + + break; + } + /* SWITCH character - AVAILDEV */ case 0x37: {