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

 $AUT Holger Burkarth
 $DAT >>Sema.h<<   29 Sep 1996    11:02:54 - (C) ProDAD
*******************************************************************/
#ifndef __INC_POS_PEXEC_NODE_H
#include <pExec/Node.h>
#endif

/*\
*** WICHTIG !
***
*** pOS_ProcureSemaphore,pOS_AttemptProcureSemaphore,ss_QueueReply
*** Immer wenn eine Message vom Semaphore-Manager replyed wird, befindet
*** sich in msg->mn_Node.ln_Name der Zeiger auf die Semaphore.
\*/


/*----------------------------------
-----------------------------------*/
struct pOS_SemaphoreRequest
{
  struct pOS_ExNode  sr_Link;
  struct pOS_Task   *sr_Waiter;
};


/*----------------------------------
 Semaphore data structure
-----------------------------------*/
struct pOS_Semaphore
{
  struct pOS_ExNode           ss_Link;
  UWORD                       ss_NestCount;
  struct pOS_ExList           ss_WaitQueue;
  struct pOS_SemaphoreRequest ss_MultipleLink;
  struct pOS_Task*            ss_Owner;
  UWORD                       ss_QueueCount;
  struct pOS_Message         *ss_QueueReply; /* wird bei ss_QueueCount++ zurückgesendet (pOS_ReplyMsg) */
  struct pOS_ExList           ss_ShList;
  UBYTE                       ss_Flags;      /* (enum pOS_SemaphoreFlags) */
  UBYTE                       ss_Reserved[19];
};



enum pOS_SemaphoreFlags
{
  SEMF_TPEnqueue= 0x01, /* Enqueue Request like Task-Priority */

  SEMF_Shared   = 0x80  /* pOS-private (never set this bit) */
};



#endif
