/****************************************************************************/
/*                                                                          */
/*  WFDOS.C -                                                               */
/*                                                                          */
/*      Ported code from wfdos.asm                                          */
/*                                                                          */
/****************************************************************************/

#include "winfile.h"

DWORD
APIENTRY
GetExtendedError()
{
    return (GetLastError());     // temp fix, called by IsDiskReallyThere().
}


VOID
APIENTRY
DosGetDTAAddress()
{
}


VOID
APIENTRY
DosResetDTAAddress()
{
}


DWORD
APIENTRY
GetFreeDiskSpace(
                WORD wDrive
                )
{
    DWORD dwSectorsPerCluster;
    DWORD dwBytesPerSector;
    DWORD dwFreeClusters;
    DWORD dwTotalClusters;

    if (GetDiskFreeSpace(GetRootPath(wDrive),
                         &dwSectorsPerCluster,
                         &dwBytesPerSector,
                         &dwFreeClusters,
                         &dwTotalClusters)) {
        return (dwFreeClusters * dwSectorsPerCluster * dwBytesPerSector);
    } else {
        return (0);
    }
}


DWORD
APIENTRY
GetTotalDiskSpace(
                 WORD wDrive
                 )
{
    DWORD dwSectorsPerCluster;
    DWORD dwBytesPerSector;
    DWORD dwFreeClusters;
    DWORD dwTotalClusters;

    if (GetDiskFreeSpace(GetRootPath(wDrive),
                         &dwSectorsPerCluster,
                         &dwBytesPerSector,
                         &dwFreeClusters,
                         &dwTotalClusters)) {
        return (dwTotalClusters * dwSectorsPerCluster * dwBytesPerSector);
    } else {
        return (0);
    }
}


INT
APIENTRY
ChangeVolumeLabel(
                 INT nDrive,
                 LPSTR lpNewVolName
                 )
{
    UNREFERENCED_PARAMETER(nDrive);
    UNREFERENCED_PARAMETER(lpNewVolName);
    return (0);

}



INT
APIENTRY
GetVolumeLabel(
              INT nDrive,
              LPSTR lpszVol,
              BOOL bBrackets
              )
{
    *lpszVol = 0;

    if (apVolInfo[nDrive] == NULL)
        FillVolumeInfo(nDrive);

    if (apVolInfo[nDrive]) {

        if ((BOOL)*apVolInfo[nDrive]->szVolumeName)
            lstrcpy(&lpszVol[bBrackets ? 1 : 0],
                    apVolInfo[nDrive]->szVolumeName);
        else
            return (0);

    } else {
        return (0);
    }

    if (bBrackets) {
        lpszVol[0] = '[';
        lstrcat(lpszVol, "]");
    }
    return (1);
}


INT
APIENTRY
DeleteVolumeLabel(
                 INT nDrive
                 )
{
    UNREFERENCED_PARAMETER(nDrive);
    return (0);
}


HFILE
APIENTRY
CreateVolumeFile(
                LPSTR lpFileName
                )
{
    UNREFERENCED_PARAMETER(lpFileName);
    return (0);
}



VOID
APIENTRY
FillVolumeInfo(
              INT iVol
              )
{
    VOLINFO vi;

    vi.dwDriveType = rgiDriveType[iVol];

    if (GetVolumeInformation(
                            GetRootPath((WORD)iVol),
                            &vi.szVolumeName[0], MAX_VOLNAME,
                            &vi.dwVolumeSerialNumber,
                            &vi.dwMaximumComponentLength,
                            &vi.dwFileSystemFlags,
                            &vi.szFileSysName[0], MAX_FILESYSNAME)) {;

        if (apVolInfo[iVol] == NULL)
            apVolInfo[iVol] = LocalAlloc(LPTR, sizeof(VOLINFO));
        
        if (apVolInfo[iVol])
            *apVolInfo[iVol] = vi;
    }
}