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

 $AUT Holger Burkarth
 $DAT >>Parsing.h<<   31 Jul 1996    09:12:46 - (C) ProDAD
*******************************************************************/
#ifndef __INC_POS_PDOS_DOSTYPES_H
#include <pDOS/DosTypes.h>
#endif
#ifndef __INC_POS_PEXEC_MEMORY_H
#include <pExec/Memory.h>
#endif


/*----------------------------------
-----------------------------------*/
struct pOS_Parse
{
  struct pOS_MemPool       ptmt_MemPool;    /* Handler private */
  struct pOS_ParseObject **ptmt_StackLower;
  struct pOS_ParseObject **ptmt_StackUpper;
  struct pOS_ParseObject **ptmt_Stack;
  SWORD                    ptmt_Error;
  UBYTE                    ptmt_ActChar;     /* Handler private */
  UBYTE                    ptmt_Pri;
  const CHAR              *ptmt_String;      /* Handler private */
  ULONG                    ptmt_UserData[2];

  struct pOS_ParseObject *(*ptmt_Parse)(struct pOS_Parse*,UBYTE priLevel);

  UBYTE ptmt_Reserved[16];
};


/*----------------------------------
-----------------------------------*/
struct pOS_ParseObject
{
  struct pOS_ParseObject *ptob_Left;
  struct pOS_ParseObject *ptob_Right;
  struct pOS_ParseObject *ptob_Parent;
};


VOID pOS_PUSHPARSESTK(struct pOS_Parse*,struct pOS_ParseObject*);
struct pOS_ParseObject* pOS_POPPARSESTK(struct pOS_Parse*);
BOOL pOS_EMPTYPARSESTK(struct pOS_Parse*);
BOOL pOS_FULLPARSESTK(struct pOS_Parse*);

#define pOS_PUSHPARSESTK(parse,nd)  ( *--(parse)->ptmt_Stack=nd )
#define pOS_POPPARSESTK(parse)      ( *(parse)->ptmt_Stack++ )
#define pOS_EMPTYPARSESTK(parse)    ( (parse)->ptmt_Stack[0]==NULL )
#define pOS_FULLPARSESTK(parse)     ( (ULONG)(parse)->ptmt_Stack<=(ULONG)(parse)->ptmt_StackLower )


#endif
