From: Aleksandar Andrejevic Date: Fri, 1 May 2015 23:04:03 +0000 (+0000) Subject: [NTVDM] X-Git-Tag: backups/colins-printing-for-freedom@73041~113 X-Git-Url: https://git.reactos.org/?p=reactos.git;a=commitdiff_plain;h=9b5a4bf8a2f5865fa36e31bc9a17b311bc01141f;ds=sidebyside [NTVDM] Implement INT 21h, AH = 36h "Get Free Disk Space". svn path=/trunk/; revision=67504 --- 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: {