#include "includes.h"

char                    *LoadedVolList[64],
                        *LoadedVolList_1[64];
UBYTE                    numofvols;
extern ULONG             all_o_ram[32],
                         bas_o_ram[32],
                         act_o_ram[32];

loadvols()
{
    UBYTE   *my_file;
    int     i=0;
    char    temp_str[64];
    numofvols=0;
    my_file=(UBYTE *)Open("ENV:TinyMeter_Volumes",MODE_OLDFILE);
    if(my_file)
    {
        while( FGets(my_file,&temp_str[0],64L) )
        {
            temp_str[63]=0;
            LoadedVolList[numofvols]  =(char *)malloc(64L);
            LoadedVolList_1[numofvols]=(char *)malloc(64L);
            i=0;
            while(temp_str[i]!=0)
            {
                if(temp_str[i]==10)
                {
                    temp_str[i]=0;
                    break;
                }
                i++;
            }
            strcpy((char *)LoadedVolList[numofvols],(char *)&temp_str[0]);
            strcpy((char *)LoadedVolList_1[numofvols],(char *)&temp_str[0]);
            LoadedVolList_1[numofvols][my_strlen(LoadedVolList_1[numofvols])-1]=0;
            numofvols++;
        }
        LoadedVolList[numofvols]=0L;
        LoadedVolList_1[numofvols]=0L;
        Close(my_file);
    }
}

freevols()
{
    ULONG df=0L;
    while(LoadedVolList[df]>0L)
    {
        free(LoadedVolList[df]);
        free(LoadedVolList_1[df]);
        df++;
    }
}

getvolsizes(int what)
{
    int    k;
    struct InfoData  inf;
    struct DevProc  *devproc;
    struct DosList  *dl=0;

    if(dl = (struct DosList *)LockDosList(LDF_VOLUMES|LDF_DEVICES|LDF_READ));
    {
        for(k=0;k<numofvols;k++)
        {
            if(FindDosEntry(dl,LoadedVolList_1[k],LDF_VOLUMES|LDF_DEVICES))
            {
                if(devproc=(struct DevProc *)GetDeviceProc(LoadedVolList[k],NULL))
                {
                    if( DoPkt(devproc->dvp_Port,ACTION_DISK_INFO,MKBADDR(&inf),NULL,NULL,NULL,NULL)==DOSTRUE)
                    {
                        switch(inf.id_DiskType)
                        {
                            case    ID_UNREADABLE_DISK:
                            case    ID_NOT_REALLY_DOS:
                            case    ID_NO_DISK_PRESENT:
                                    act_o_ram[k]=0;
                                    bas_o_ram[k]=0;
                                    all_o_ram[k]=0;
                                    break;
                            default:
                                    switch(what)
                                    {
                                        case    0:
                                                act_o_ram[k]=(inf.id_NumBlocks-inf.id_NumBlocksUsed)*inf.id_BytesPerBlock;
                                                break;
                                        case    1:
                                                bas_o_ram[k]=(inf.id_NumBlocks-inf.id_NumBlocksUsed)*inf.id_BytesPerBlock;
                                                break;
                                        case    2:
                                                all_o_ram[k]=inf.id_NumBlocks*inf.id_BytesPerBlock;
                                                break;
                                    }
                                    if(all_o_ram[k]==0)
                                    {
                                        all_o_ram[k]=inf.id_NumBlocks*inf.id_BytesPerBlock;
                                        bas_o_ram[k]=(inf.id_NumBlocks-inf.id_NumBlocksUsed)*inf.id_BytesPerBlock;
                                    }
                                    break;
                        }
                    }
                    FreeDeviceProc(devproc);
                }
            }
        }
        UnLockDosList(LDF_VOLUMES|LDF_DEVICES|LDF_READ);
    }
}

