/*
	FS1541

	volume.h

*/

#include <dos/dosextens.h>

LONG InitVolumeSS(void);
void QuitVolumeSS(void);
void DoDiskInsert(void);
void DoDiskRemove(void);

UWORD AllocBlock(UBYTE fromt, UBYTE froms);
void FreeBlock(UBYTE t, UBYTE s);
UWORD UsedBlocks(void);

void OptimizeDirectory(void);

void StartUDSTimer(void);
void StopUDSTimer(void);
void UpdateDiskStructure(void);

BPTR makelock(LONG flkey, LONG axs);
void freelock(struct FileLock *fl);
BOOL lockable(UBYTE t, UBYTE s, LONG mode);



extern BYTE diskchgintbit;
extern struct VolumeNode *curvolumenode;
extern struct DosList *curdoslist;
extern int disk_inserted;

extern struct timerequest *UDStimer;

extern struct BAM *bam;
extern struct DirEntry directory[144];
extern int dirsize;

extern UBYTE interleave;

struct VolumeNode {
	struct MinNode node;
	struct DosList *volnode;
	struct FileLock *locklist;
	UBYTE name[30];	/* this is a BCPL string */
	ULONG dollarlen;
	UBYTE dollarbuf[30*(144+2)];
};

struct BAM {
	UBYTE dirt,dirs;
	UBYTE id;
	UBYTE dside;
	ULONG tracks[35];
	UBYTE name[16];
	UBYTE pad1[2];
	UBYTE name2[5];
	UBYTE pad2[89];
};

struct DirEntry {
	UBYTE t,s;
	UBYTE type;
	UBYTE datat,datas;
	UBYTE name[16];
	UBYTE relsst,relsss;
	UBYTE rellen;
	UBYTE pad[4];
	UBYTE tmpdatat,tmpdatas;
	UBYTE lengthl,lengthh;
};

struct DataBlock {
	UBYTE t,s;
	UBYTE data[254];
};
