/*--------------------------------------------------------------------------
	SICS needs variables. This header defines the datastructures
	and functions necessary to handle text, int and float variables.
	
	Mark Koennecke, November 1996
	
	copyright: See Implementation file.
----------------------------------------------------------------------------*/

#ifndef SICSVARIABLE
#define SICSVARIABLE
#include "obdes.h"

  /* Variable Types */
  typedef enum { veText, veInt, veFloat } VarType;
  
  
  
  /* the actual variable type, all in one to get rid of inheritance */
  typedef struct {
                        pObjectDescriptor pDescriptor;
  			VarType     eType;
  			int         iAccessCode;
  			float       fVal;
  			int         iVal;
  			int         iLock;
  			char        *text;
  			char *name;
  			pICallBack  pCall;
  		} SicsVariable;
  		
 		
  typedef SicsVariable *pSicsVariable;
 
 /* Create and Kill */ 
  pSicsVariable VarCreate(int iAccessCode, VarType eTyp, char *name);
  /*
     creates a new Variable 
  */
  int VarFactory(SConnection *pCon, SicsInterp *pSics, void *pData,
                 int argc, char *argv[]);
  /* 
     the factory method for creating variables
  */
  
  int VarKill(pSicsVariable self);
  
  /* setting and reading */
  int VarSetFloat(pSicsVariable self, float fNew, int iUserRight);
  int VarSetInt(pSicsVariable self , int iNew, int iUserRight);
  int VarSetText(pSicsVariable self, char *pNew, int iUserRight);
  		
  int VarGetFloat(pSicsVariable self, float *fNew);
  int VarGetInt(pSicsVariable self, int *iNew);
  int VarGetText(pSicsVariable self, char **pNew);
  
  /* Infomation and Configuration */
  VarType GetVarType(pSicsVariable self);
  int  VarSetRights(pSicsVariable self, int iNewRights, int iYourRights);
  /* 
     sets new userights for the variable, only Muggers are allowed to do 
     this
  */ 

  /* the  wrapper function to make variables objects */
  int VarWrapper(SConnection *pCon, SicsInterp *pInter, void *pData,
                 int argc, char *argv[]);

  /* a utility function to find a variable in the Sics interpreter */
  pSicsVariable FindVariable(SicsInterp *pSics, char *name);
                  

#endif

