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

 $AUT Holger Burkarth
 $DAT >>Process.h<<   08 Mar 1997    17:06:20 - (C) ProDAD
*******************************************************************/
#ifndef __INC_POS_PEXEC_TASK_H
#include <pExec/Task.h>
#endif
#ifndef __INC_POS_PEXEC_MSGPORT_H
#include <pExec/MsgPort.h>
#endif
#ifndef __INC_POS_PEXEC_MEMORY_H
#include <pExec/Memory.h>
#endif
 #ifndef __INC_POS_PDOS_DOSBASE_H
 #include <pDOS/DosBase.h>
 #endif



/*----------------------------------
-----------------------------------*/
struct pOS_Process
{
  struct pOS_Task         pr_Task;
  struct pOS_MsgPort      pr_MsgPort;

  UBYTE pr_Pad[80];

  struct pOS_SegmentLst  *pr_SegList;      /* segment used by this process */
  UWORD                   pr_TaskNum;
  SWORD                   pr_Error2;       /* Value of secondary result from last IO (same as pOS_GetIoErr()) */
  struct pOS_FileLock    *pr_CurrentDir;   /* Lock associated with current directory */
  struct pOS_FileHandle  *pr_CIS;          /* Current Input Stream  */
  struct pOS_FileHandle  *pr_COS;          /* Current Output Stream */
  struct pOS_FileHandle  *pr_CES;          /* Error stream          */
  struct pOS_Shell       *pr_HomeShell;
  struct pOS_Window      *pr_ReqWindow;    /* Window for error printing (~0 => no requester) */
  ULONG                   pr_Flags;        /* (enum pOS_ProcessFlags) */
  VOID  (*pr_Exit_func)(_R_LB struct pOS_DosBase*,_R_A0 struct pOS_Process*);
  ULONG                   pr_ExitData;     /* Passed as an argument to pr_ExitCode. */

  const CHAR             *pr_Arguments;    /* Arguments passed to the process at start */
  struct pOS_FileHandle  *pr_ConsoleFH;    /* only in shell-mode */
  struct pOS_FileLock    *pr_ProgDirLock;  /* Shared lock on Program-Directory (PROGDIR:) */
  struct pOS_MonLock     *pr_CurrentMon;

  struct pOS_MemPool     pr_MemPool;       /* Pool for (4096 Bytes, MEMF_PUBLIC) (pr_LocalVars,) */
                                    /* ACHTUNG: Pool ist nur für Single-Task ausgelegt. */
  struct pOS_ExList      pr_LocalVars;     /* Local env. variables (struct pOS_LocalVar*) */

  VOID (*pr_Signal_func)(_R_LB struct pOS_DosBase*,_R_A0 struct pOS_Process*,_R_A1 struct pOS_FileHandle*,_R_D0 ULONG);

  UBYTE pr_Reserved[64];
};



enum pOS_ProcessFlags
{
  PROCF_FreeSegList     = 0x0001, /* pr_SegList wird beim Ende freigegeben */
  PROCF_FreeCurrDir     = 0x0002, /* pr_CurrentDir */
  PROCF_FreeCIS         = 0x0004, /* pr_CIS */
  PROCF_FreeCOS         = 0x0008, /* */
  PROCF_FreeCES         = 0x0010, /* */
  PROCF_FreeConsoleFH   = 0x0020, /* pr_ConsoleFH */
  PROCF_FreeProgDir     = 0x0040, /* pr_ProgDirLock */
  PROCF_FreeProcNum     = 0x0080  /* pr_TaskNum */
};

#endif
