#ifndef __INC_POS_PDOS_LOCK_H
#define __INC_POS_PDOS_LOCK_H
/*******************************************************************
 Includes Release 24
 (C) Copyright 1995-1997 proDAD
     All Rights Reserved

 $AUT Holger Burkarth
 $DAT >>Lock.h<<   02 Dec 1996    11:28:25 - (C) ProDAD
*******************************************************************/
#ifndef __INC_POS_PDOS_DOSTYPES_H
#include <pDOS/DosTypes.h>
#endif
#ifndef __INC_POS_PEXEC_LIST_H
#include <pExec/List.h>
#endif

/*----------------------------------
-----------------------------------*/
struct pOS_FileLock
{
  struct pOS_Node       fl_Node;
  struct pOS_DosDevice *fl_DosDev;  /*  */
  UBYTE                 fl_Access;  /* (enum pOS_FileLockAccess) */
  UBYTE                 fl_Flags;   /* (enum pOS_FileLockFlags) */
  UWORD                 fl_Count;   /* Mehrfachnutzung */

  UBYTE fl_Reserved[8]; /* *** must be null */
};


/** pOS_LockObject() **/
enum pOS_FileLockAccess /** fl_Access **/
{
  FILELKACC_Shared    = 0x0000,
  FILELKACC_Exclusive = 0x0001, /* nur einer darf */

  FILELKACC_Unique    = 0x0400, /* MultiAssigns werden NICHT berücksichtigt */
  FILELKACC_NoReq     = 0x0800  /* Es wird kein Report-Requester geöffnet */
};


enum pOS_FileLockFlags /** fl_Flags **/
{
  FILELKF_Assign       =0x01,   /* Lock auf Multi-Assign */
  FILELKF_Net          =0x04    /* Lock is Net-Lock */
};


/*\
*** result of pOS_SameDosObject()
***
*** if(pOS_SameDosObject(...) & FILELKSF_Object) => same lock
*** if(pOS_SameDosObject(...) & FILELKSF_Device) => same device
\*/
enum pOS_SameFileLockType
{
  FILELKSF_None      = 0x0000, /* */
  FILELKSF_Different = 0x0000, /* */
  FILELKSF_Device    = 0x0001, /* Locks on same Device and Unit (scsi.device,0) */
  FILELKSF_DDev      = 0x0002, /* Locks on same DosDevice (a:, df0:) */
  FILELKSF_Volume    = 0x0004, /* Locks on same Volume */
  FILELKSF_Object    = 0x0008, /* Locks on same Object (100%) */

  FILELKSF_Same = FILELKSF_Object
};

#endif
