/*
 */

struct VM_FreeList {
   struct VM_FreeList *VM_Next ;
   ULONG VM_Offset ;
   ULONG VM_Length ;
   } ;

#define VM_INUSE    (1 << 0) 
#define VM_RESERVED (1 << 1)
#define VM_READONLY (1 << 2)

struct VM_Lock {
   struct MinNode VM_Node ;
   struct VM_Construct *VM_C ;
   struct VM_FreeList *VM_FL ;
   ULONG VM_Flags ;
   void *VM_Addr ;
   } ;

struct VM_Construct {
   BPTR VM_File ;
   char *VM_FileName ;
   ULONG VM_Length ;
   ULONG VM_NumLocks ;
   struct MinList VM_LockList ;
   struct VM_FreeList *VM_FreeList ;
   } ;

extern struct VM_Construct *VM_Open(char *VM_Filename) ;
extern ULONG VM_Close(struct VM_Construct *VM_C) ;
extern struct VM_FreeList *VM_Allocate(struct VM_FreeList **VM_F, long Size) ;
extern void VM_Free(struct VM_FreeList **VM_F, struct VM_FreeList *VM_A) ;
extern void *VM_Lock(struct VM_Lock *VM_L) ;
extern ULONG VM_FlushLockList (struct VM_Construct *VM_C) ;
extern ULONG VM_FlushLock (struct VM_Lock *VM_L) ;
extern ULONG VM_UnLock(struct VM_Lock *VM_L) ;
extern struct VM_Lock *VM_AllocMem(struct VM_Construct *VM_C, LONG Size) ;
extern ULONG VM_FreeMem(struct VM_Lock *VM_L) ;
extern ULONG VM_ReadLock(struct VM_Lock *VM_L) ;
extern void VM_ReadOnly(struct VM_Lock *VM_L) ;
extern void VM_FlushFreeList(struct VM_FreeList **VM_F) ;
