#include "stdafx.h"  
#include "symblsvr.h" 
#include "stkinit.h"
#include "varinit.h"
#include "varexp.h"

extern class VarServer varObject;

int WINAPI Var_AddVar( char *str )
{
	return varObject.AddVar(str); 
}
   
int WINAPI Var_AddLocalVar(SYM_DESCRIPTOR desc,CString name)
{
	return varObject.AddLocalVar(desc, name) ;
}
int WINAPI Var_Add( struct VarNode* node )
{
	return varObject.Add(node);
}
int WINAPI Var_Delete( struct VarNode* node )
{
	return varObject.Delete(node) ;
}

int WINAPI Var_DeleteLocal(SYM_DESCRIPTOR desc)
{
	return varObject.DeleteLocal(desc) ;
}

void WINAPI Var_DeleteAllLocal(void)
{
	 varObject.DeleteAllLocal() ;
}


void WINAPI Var_MaxLine(int& nLine)
{
	varObject.VarMaxLine(nLine) ;
}
    
int WINAPI Var_IsLegalValue(int nLine , CString str)
{
	return varObject.IsLegalValue(nLine,str) ;
}

int WINAPI Var_CheckValue(struct VarNode* node, char *str)
{
	return varObject.CheckValue(node,str);
}
    
int WINAPI Var_ModifyValue(int nLine , CString str)
{
	return varObject.ModifyValue(nLine,str) ;
}

int WINAPI Var_SetValue(struct VarNode* node, char *str)
{
	return varObject.SetValue(node,str) ;
}

void WINAPI Var_DeleteAll()
{
	varObject.VarDeleteAll() ;
}

int WINAPI Var_ExtendedNode( struct VarNode* node )
{
	return varObject.VarExtendedNode(node) ;
}

int WINAPI Var_CompressNode( struct VarNode* node )
{
	return varObject.VarCompressNode(node) ;
}

int WINAPI Var_UpdataExtendedNode( struct VarNode* node )
{
	return varObject.VarUpdataExtendedNode(node) ;
}


int WINAPI Var_EditNode(struct VarNode *node , char *str)
{
	return varObject.EditNode(node,str) ;
}


int WINAPI Var_UpdataAllLocal()
{
	return varObject.UpdataAllLocal() ;
}


int WINAPI Var_UpdataAllNode( )
{
	return varObject.UpdataAllNode() ;
}


int WINAPI Var_UpdataOneNode( struct VarNode* node )
{
	return varObject.UpdataOneNode(node) ;
}


int WINAPI Var_UpdataOneNodeValue( struct VarNode* node )
{
	return varObject.UpdataOneNodeValue(node) ;
}


void WINAPI Var_ShowOneNode( struct VarNode* node )
{
	varObject.ShowOneNode(node) ;
}



void WINAPI Var_ShowVarToShell()
{
	varObject.ShowVarToShell() ;
}


void WINAPI Var_ClearNode( struct VarNode* node )
{
	varObject.ClearNode(node) ;
}


int WINAPI Var_LineToNode(int nRow,struct VarNode *& node)
{
	return varObject.VarLineToNode(nRow,node) ;
}



void WINAPI  Var_UpdataLine( int nLine , struct VarNode * node )
{
	varObject.UpdataLine(nLine,node) ;
}

int WINAPI Var_NodeToPos(struct VarNode* node,int& nPos)
{
	return varObject.VarNodeToPos(node,nPos) ;
}


void WINAPI Var_AddrToStr(ADDRESS_TYPE addr,CString& str)
{
	varObject.VarAddrToStr(addr,str) ;
}


int WINAPI Var_Search( char *str , int & nLine )
{
	return varObject.Search(str,nLine) ;
}


int WINAPI Var_SearchNext( char *str , int nStartLine , int & nLine )
{
	return varObject.SearchNext(str,nStartLine,nLine) ;
}
 
extern "C" VarNode* WINAPI  Var_GetListHeader()
{
	return varObject.varListHeader ;
}  





extern "C" int WINAPI Var_CanBeModify(VarNode* pNode)
{
    if ( pNode->flag & VAR_COMPLEX ) return FAILURE;
    if ( pNode->flag1 ) {
      int nFlag ;
      if ( GOOD != pNode->pExp->IsSymbol(nFlag) ) {
         return FAILURE;
      }
      if ( 0 == nFlag ) return FAILURE;
    }       
    return GOOD;
}    