#include <exec/types.h>
#include <exec/memory.h>
#include <dos/dos.h>
#include <dos/dosextens.h>
#include <dos/notify.h>
#include <string.h>
#include <intuition/classes.h>
#include <clib/macros.h>
#include "gaugeclass.h"
#include "tinymeter.h"

getVolsize(struct tm_data *data,char *volname)
{
    struct InfoData  inf;
    struct DevProc  *devproc;
    if(devproc=(struct DevProc *)GetDeviceProc(volname,NULL))
    {
	if( DoPkt(devproc->dvp_Port,ACTION_DISK_INFO,MKBADDR(&inf),NULL,NULL,NULL,NULL)==DOSTRUE)
	{
	    switch(inf.id_DiskType)
	    {
		case    0x42555359:
			data->volmax=0;
			data->volcur=GAU_err_busy;
			break;
		case    ID_UNREADABLE_DISK:
			data->volmax=0;
			data->volcur=GAU_err_unreadable;
			break;
		case    ID_NOT_REALLY_DOS:
			data->volmax=0;
			data->volcur=GAU_err_nodos;
			break;
		case    ID_NO_DISK_PRESENT:
			data->volmax=0;
			data->volcur=GAU_err_notpresent;
			break;
		case    ID_KICKSTART_DISK:
			data->volmax=0L;
			data->volcur=GAU_err_kickstart;
			break;
		default:
			data->volcur=(inf.id_NumBlocks-inf.id_NumBlocksUsed)*inf.id_BytesPerBlock;
			data->volmax=inf.id_NumBlocks*inf.id_BytesPerBlock;
			data->voltype=inf.id_DiskType;
			break;
	    }
	}
	FreeDeviceProc(devproc);
    }
    else
    {
	data->volmax=0;
	data->volcur=GAU_err_notmount;
    }
}

