/* ---------------------------------------------------------------------- */
/*                   Copyright (C) 1991 by Natrlich!                     */
/*                      This file is copyrighted!                         */
/*                Refer to the documentation for details.                 */
/* ---------------------------------------------------------------------- */
#ifndef _PROCESS_
# define _PROCESS_
#  ifndef _CODE_
#   include "code.h"
#  endif
#  ifndef _FIX_
#   include "fix.h"
#  endif

# define DS_THRESHOLD      5
# define MAX_SAFETY        0x200

# define _advance( x)      __p += x
# define _retreat( x)      __p -= x
# define advance( x)       _advance( x); __pc += x
# define _deposit( val)    *__p++ = (val)
# define deposit( val)     _deposit(val); __pc++
# define wdeposit( val)                               \
    pdpoke( __p, val);                                \
    __pc += 2

# define  wddeposit( val)                             \
    pdbyte( __p, val);                                \
    __pc += 2

# define cmddeposit( tab, mode)                       \
    if( ! (__c = tab[mode]))                          \
    {                                                 \
       nerror( invadr);                               \
       LEAVE();                                       \
       return;                                        \
    }                                                 \
    deposit( __c);

# define ex_chk( ex)                                  \
   if( ! ex)                                          \
   {                                                  \
      gen_error();                                    \
      return;                                         \
   }

# define wex_chk( ex)                                 \
   if( ! ex)                                          \
   {                                                  \
      wgen_error();                                   \
      return;                                         \
   }

# define ex_deposit( ex, ip, flag)                    \
    if( ! flag)                                       \
    {                                                 \
       fix_up( ex, (imm huge *) ip, FIX_ZCODE);       \
       deposit( 0);                                   \
    }                                                 \
    else                                              \
    {                                                 \
       deposit( ex->val);                             \
       expr_tryfree( ex);                             \
    }

# define wex_deposit( ex, flag)                       \
    if( ! flag)                                       \
    {                                                 \
       fix_up( ex, (imm huge *) 0, FIX_WCODE);        \
       wdeposit( 0);                                  \
    }                                                 \
    else                                              \
    {                                                 \
       wdeposit( ex->val);                            \
       expr_tryfree( ex);                             \
    }
#endif
