/*
    This file is part of the FElt finite element analysis package.
    Copyright (C) 1993-2000 Jason I. Gobat and Darren C. Atkinson

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

/************************************************************************
 * File:	execute.h						*
 *									*
 * Description:	This file contains the public function, type, and	*
 *		variable definitions for execution of the virtual	*
 *		machine code.						*
 ************************************************************************/

# ifndef _EXECUTE_H
# define _EXECUTE_H
# include "globals.h"		/* global variable array declaration */
# include "descriptor.h"	/* Code and descriptor types	     */

# define top()		sp
# define pop()		sp --
# define push()		++ sp
# define ntop(n)	(sp - (n))
# define argument(x)	(argp + (x))
# define local(x)	(varp + (x))
# define global(x)	(var_array + (x))
# define dbllit(x)	(dbl_array + (x))
# define strlit(x)	(str_array + (x))
# define deref(d)	(D_Type (d) == T_Variable ? D_Variable (d) : (d))
# define assignable(d)  (D_Type (d) == T_Variable || D_Trapped (d) != F_False)

typedef struct {
    Code	cs;
    Address     pc;
    descriptor *sp;
    descriptor *argp;
    descriptor *varp;
    int		line;
    int		file;
} ExecState;


extern Address	   pc;			/* program counter	  */
extern descriptor *sp;			/* stack pointer	  */
extern descriptor *argp;		/* argument pointer	  */
extern descriptor *varp;		/* local variable pointer */
extern descriptor *stack;		/* run-time stack	  */

extern int  execute	  PROTO ((Code, descriptor *, descriptor *));
extern void SaveState	  PROTO ((ExecState *));
extern void RestoreState  PROTO ((ExecState *));
extern void TypeError	  PROTO ((char *, descriptor *, descriptor *, descriptor *, int));
extern void MatrixError	  PROTO ((char *, Matrix, Matrix, int, int));
extern void MathException PROTO ((char *));

# endif /* _EXECUTE_H */


syntax highlighted by Code2HTML, v. 0.9.1