public inbox for gcc-help@gcc.gnu.org
 help / color / mirror / Atom feed
* 3.4.4 vs 3.2.5 ; fabs: cant use as a function..
@ 2005-07-28  4:16 Ming-Xiang Fu
  2005-07-28  4:54 ` corey taylor
  0 siblings, 1 reply; 4+ messages in thread
From: Ming-Xiang Fu @ 2005-07-28  4:16 UTC (permalink / raw)
  To: gcc-help

[-- Attachment #1: Type: text/plain, Size: 1540 bytes --]



hi, I am having some problem to compile a code by gcc 3.4.4 which is
successfully compiled in gcc 3.2.5.


At the begining, it complains about abs(float) is ambiguous..and sin(), cos()
not declares.

And then, I include <cmath>, resolve some problem, and new problem occurs.

" ` fabs' cannot be used as a function "



please give me some guide, I will be appreciate about that.
Thanks anyway. :)


													RedMo
part of src code as below.

------------------------------------------------------------------------------------------------------------------------------------

// GlobalObject.cpp: implementation of the CGlobalObject class.
//
//////////////////////////////////////////////////////////////////////

#include "GlobalObject.h"
#include <iomanip>
#include <math.h>
#include "../../Node/DEBUG.H"

using namespace std;

void VsMathObject::Evaluate(int member, VsValue& value, VsExprList &args,
VsFunctionCall *parent)
{

	switch(member)
	{

	case fabs:
		value.SetNumber( fabs(arg0.GetNumber()) );
			// arg0.GetNumber() returns a float number. 
		break;
	case ffabs:
		value.SetNumber( fabs(arg0.GetNumber()) );
		break;
	case facos:
		value.SetNumber( acos(arg0.GetNumber()) );
		break;
	case fasin:
		value.SetNumber( asin(arg0.GetNumber()) );
		break;

	default:
		ASSERT(false);
	}
}

---------------------------------------------------------------------------------------------------------------------------





--
Communication and Multimedia Laboratory
Dept. of Computer Science and Information Engineering, NTU


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: GlobalObject.h --]
[-- Type: text/x-chdr; name="GlobalObject.h", Size: 6152 bytes --]

// GlobalObject.h: interface for the CGlobalObject class.
//
//////////////////////////////////////////////////////////////////////


#if !defined(AFX_GLOBALOBJECT_H__9459373A_82E4_4160_BB56_16DFA47BA0BB__INCLUDED_)
#define AFX_GLOBALOBJECT_H__9459373A_82E4_4160_BB56_16DFA47BA0BB__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//#pragma warning( disable : 4786)
#include "../../Node/script/vsfunction.h"
//#include "CameraTrack/Cameratk.h"
//#include "CameraTrack/CameraControl.h"
//#include "MapGrid/MapGrid.h"
//#include "Tear/ITear.h"
//#include "OCCDetection/OCCDetection.h"
#include "../../Node/node_Typedef.h"

//////////////////////////////////////////////////////////////////////////
// Fei-tian [1/20/2002]
// Global Object
//////////////////////////////////////////////////////////////////////////
//using ::abs;

class VsSystemObject : public VsObjectProxy
{
	enum FUNC {fNon = -1, fOut, fIn};

public:
	VsSystemObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};

class VsMathObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1, fE, fLN10, fLN2, fPI, fSQRT1_2, fSQRT2,
		// method
		fabs, facos, fasin, fatan, fceil, fcos, fexp, ffloor, flog, 
		fmax, fmin, fpow, frandom, fround, fsin, fsqrt, ftan, ffabs
	};

public:
	VsMathObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};

class VsBrowserObject : public VsObjectProxy
{
	enum FUNC {
		fgetName, fgetVersion, fgetCurrentSpeed, fgetCurrentFrameRate,
		fgetWorldURL, freplaceWorld, fcreateVrmlFromString, fcreateVrmlFromURL, 
		faddRoute, fdeleteRoute, floadURL, fsetDescription
	};

public:
	VsBrowserObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};


class SFVec3f;
class SFRotation;
//balama
/*
class VsCameraTrackObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fEnable, fDisable, fUpdate, fGetPosition, fGetOrientation
	};

	CameraTrack m_cameraTrack;
	DMatrix     m_cameraTrackResult;
	SFVec3f		m_cameraPosition;
	SFRotation	m_cameraOrientation;

public:
	VsCameraTrackObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};



class VsCameraControlObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fSetParameter, 
		fInsertCameraPath, 
		fSwitchToPath, 
		fSwitchToMode, 
		fUpdate, 
		fGetPosition, 
		fGetOrientation,
		fGetMode,
		fFollowObject
	};

	CameraControl	m_cameraControl;
	double			m_cam_transl[4];
	double			m_cam_orient[4];
	SFVec3f			m_cameraPosition;
	SFRotation		m_cameraOrientation;
	char			m_mode_str[32];

public:
	VsCameraControlObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};



class VsMapGridObject : public VsObjectProxy
{
	enum FUNC {
		//property
		fNon = -1,
		// method
		fSetPosition, fSetDirection, 
		fStep, fGetLabel, fGetXGrid, fGetZGrid, fGetDir, 
		fBlock, fUnBlock
	};

	MapGrid				m_grid;
	int					m_label;
	int					m_x_grid;
	int					m_z_grid;
	MapGrid::Direction	m_dir;

public:
	VsMapGridObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};
*/

// CCKAO
class VsAnsiStringObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fFromInt32, fFromFloat, fAddString, fCheckLength, fCheckLength2, fCheckLength3
	};

public:
	VsAnsiStringObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};

////////////////////////////////////////////////////
//HttpFile Object [Last update : 2002/03/22]
//KEIN
////////////////////////////////////////////////////
/*
class VsHttpFileObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fConnect,
		fOpenRequest, 
		fReadString,
		fCloseRequest,
		fDisconnect
	};	
	
	std::string SERVERNAME;

	typedef std::map<int, ITear*> TearMap;
	TearMap				m_tearmap;
	TearMap::iterator	m_tearIt;
	int m_tearKey;
	int port;

public:
	VsHttpFileObject();
	~VsHttpFileObject();

	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};


// Occlusion Detection by CCKAO, added by 2002/4/23
class VsOCCDetectionObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fSetFileWO, fSetCylinderWO, fSetBoxWO, fifOcclusion
	};
	OCCDetection	m_occDetection;
	double			objCenter[3], objSize[3], radius, height;
	double			viewPoint[3], targetObj[3];

public:
	VsOCCDetectionObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};

// MouseObject by ChiaLee [2002/10/11]
class VsMouseObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fGetPosition
	};
	SFVec2f m_position;
public:
	VsMouseObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
}; 
class VsBrowseCameraObject : public VsObjectProxy
{
	enum FUNC {
		fNon = -1,
		fGetGlobalPosition,
		fGetGlobalOrientation,
		fGetFront,
		fSetFront,
		fMoveForward,
		fMoveUp,
		fMoveRight,
	};
	SFVec3f			m_cameraPosition;
	SFRotation		m_cameraOrientation;
	SFVec3f			m_camerafront;
public:
	VsBrowseCameraObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};
*/
#endif // !defined(AFX_GLOBALOBJECT_H__9459373A_82E4_4160_BB56_16DFA47BA0BB__INCLUDED_)

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: GlobalObject.cpp --]
[-- Type: text/x-c++src; name="GlobalObject.cpp", Size: 26091 bytes --]

// GlobalObject.cpp: implementation of the CGlobalObject class.
//
//////////////////////////////////////////////////////////////////////

//#include "render_inc.h"
#include "GlobalObject.h"
// added by CCKAO
#include <iomanip>
#include <math.h>
//#include <strstream>
#include "../../Node/DEBUG.H"

using namespace std;

//////////////////////////////////////////////////////////////////////////
// System Global Object [1/20/2002]
// Fei-tian
//////////////////////////////////////////////////////////////////////////

VsSystemObject::VsSystemObject()
{
	static VsObjectSymbolTable tbl[] = {
		_ENTRY(Out)
		_ENTRY(In)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsSystemObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsSystemObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	value.SetVoid();

	VsValue var;
	if (args.size() > 0)
		var = args[0]->evaluate(parent);

	switch(member)
	{
	case fOut:
		if (var.GetType() == VsValue::vSTRING)
		{
			bool specChar = false;
			for (int i = 0; i < strlen(var.GetString()); i++)
			{
				if (specChar)
				{
					switch(var.GetString()[i])
					{
					case 'n':
						printf("\n");
						break;
					case 'r':
						printf("\r");
						break;
					case 't':
						printf("\t");
						break;
					case '\\':
						printf("\\");
						break;
					}
					specChar = false;
				}
				else
				{
					if (var.GetString()[i] == '\\')
						specChar = true;
					else
						printf("%c", var.GetString()[i]);
				}
			}
		}
		else if (var.GetType() == VsValue::vNUMBER) {
			printf("%f", var.GetNumber());
		}
		break;

	case fIn:
		{
			static char temp[256];
			scanf("%s", temp);
			value.SetString( temp );
		}
		break;
	}
}


//////////////////////////////////////////////////////////////////////////
// Math Global Object [1/20/2002]
// Fei-tian
//////////////////////////////////////////////////////////////////////////

VsMathObject::VsMathObject()
{
	static VsObjectSymbolTable tbl[] = {
		// property
		_ENTRY(E)		_ENTRY(LN10)		_ENTRY(LN2)
		_ENTRY(PI)		_ENTRY(SQRT1_2)		_ENTRY(SQRT2)
		// member
		_ENTRY(abs)		_ENTRY(acos)		_ENTRY(asin)
		_ENTRY(atan)	_ENTRY(ceil)		_ENTRY(cos)
		_ENTRY(exp)		_ENTRY(floor)		_ENTRY(log)
		_ENTRY(max)		_ENTRY(min)			_ENTRY(pow)
		_ENTRY(random)	_ENTRY(round)		_ENTRY(sin)
		_ENTRY(sqrt)	_ENTRY(tan)			_ENTRY(fabs)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsMathObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsMathObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	value.SetVoid();

	VsValue arg0(0.0), arg1(0.0);
	
	if (args.size() > 0)
		arg0 = args[0]->evaluate(parent);

	if (args.size() > 1)
		arg1 = args[1]->evaluate(parent);

	switch(member)
	{
	case fE:
		value.SetNumber( 2.7182818284590452354 );
		break;
	case fLN10:
		value.SetNumber( 2.30258509299404568402 );
		break;
	case fLN2:
		value.SetNumber( 0.69314718055994530942 );
		break;
	case fPI:
		value.SetNumber( 3.1415926535897932384626433832795 );
		break;
	case fSQRT1_2:
		value.SetNumber( 1.41421356237309504880 );
		break;
	case fSQRT2:
		value.SetNumber( 1.41421356237309504880 );
		break;
	case fabs:
		value.SetNumber( fabs(arg0.GetNumber()) );
		break;
	case ffabs:
		value.SetNumber( fabs(arg0.GetNumber()) );
		break;
	case facos:
		value.SetNumber( acos(arg0.GetNumber()) );
		break;
	case fasin:
		value.SetNumber( asin(arg0.GetNumber()) );
		break;
	case fatan:
		value.SetNumber( atan(arg0.GetNumber()) );
		break;
	case fceil:
		value.SetNumber( ceil(arg0.GetNumber()) );
		break;
	case fcos:
		value.SetNumber( cos(arg0.GetNumber()) );
		break;
	case fexp:
		value.SetNumber( exp(arg0.GetNumber()) );
		break;
	case ffloor:
		value.SetNumber( floor(arg0.GetNumber()) );
		break;
	case flog:
		value.SetNumber( log(arg0.GetNumber()) );
		break;
	case fmax:
		value.SetNumber( max(arg0.GetNumber(), arg1.GetNumber()) );
		break;
	case fmin:
		value.SetNumber( min(arg0.GetNumber(), arg1.GetNumber()) );
		break;
	case fpow:
		value.SetNumber( pow(arg0.GetNumber(), arg1.GetNumber()) );
		break;
	case frandom:
		value.SetNumber( double(rand()) / RAND_MAX );
		break;
	case fround:
		value.SetNumber( floor(arg0.GetNumber() + 0.5) );
		break;
	case fsin:
		value.SetNumber( sin(arg0.GetNumber()) );
		break;
	case fsqrt:
		value.SetNumber( sqrt(arg0.GetNumber()) );
		break;
	case ftan:
		value.SetNumber( tan(arg0.GetNumber()) );
		break;
	default:
		ASSERT(false);
	}
}


//////////////////////////////////////////////////////////////////////////
// Browser Global Object [12/11/2002]
// Cardy
//////////////////////////////////////////////////////////////////////////

VsBrowserObject::VsBrowserObject()
{
	static VsObjectSymbolTable tbl[] = {
		_ENTRY(getName)					_ENTRY(getVersion)
		_ENTRY(getCurrentSpeed)			_ENTRY(getCurrentFrameRate)
		_ENTRY(getWorldURL)				_ENTRY(replaceWorld)
		_ENTRY(createVrmlFromString)	_ENTRY(createVrmlFromURL)
		_ENTRY(addRoute)				_ENTRY(deleteRoute)
		_ENTRY(loadURL)					_ENTRY(setDescription)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsBrowserObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsBrowserObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
}

//////////////////////////////////////////////////////////////////////////
// CameraTrack Global Object [1/20/2002]
// Fei-tian, balama
//////////////////////////////////////////////////////////////////////////
/*
VsCameraTrackObject::VsCameraTrackObject()
{
	static VsObjectSymbolTable tbl[] = {
		_ENTRY(Enable)
		_ENTRY(Disable)
		_ENTRY(Update)
		_ENTRY(GetPosition)
		_ENTRY(GetOrientation)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsCameraTrackObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsCameraTrackObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	value.SetVoid();

	switch(member)
	{
	case fEnable:
		{
			SFVec3f*	viewPointPosition		= NULL;
			SFRotation*	viewPointOrientation	= NULL;
			SFVec3f*	targetPosition			= NULL;
			SFRotation*	targetOrientation		= NULL;
			double scale = 1.0;

			if (!(	GetFieldArg(viewPointPosition,		0) &&
					GetFieldArg(viewPointOrientation,	1) &&
					GetFieldArg(targetPosition,			2) &&
					GetFieldArg(targetOrientation,		3) &&
					GetNumberArg(scale,					4)))
				return;

			// todo: call CameraTrack::InitCameraAutoTrack()
			DVector v;
			double* const vp = v.Vec();
			double* dp;

			DMatrix sj_coord, cam_coord;
			double  sj_height;
			//fill parameters
			vp[0] = targetOrientation->GetX();
			vp[1] = targetOrientation->GetY();
			vp[2] = targetOrientation->GetZ();
			vp[3] = targetOrientation->GetANGLE() * DM_RADIAN_TO_DEGREE;
			sj_coord.RotateAboutVector(v);
			dp = sj_coord.Mat();
			dp[ 3] = targetPosition->GetX();
			dp[ 7] = targetPosition->GetY();
			dp[11] = targetPosition->GetZ();
			
			vp[0] = viewPointOrientation->GetX();
			vp[1] = viewPointOrientation->GetY();
			vp[2] = viewPointOrientation->GetZ();
			vp[3] = viewPointOrientation->GetANGLE() * DM_RADIAN_TO_DEGREE;
			cam_coord.RotateAboutVector(v);
			dp = cam_coord.Mat();
			dp[ 3] = viewPointPosition->GetX();
			dp[ 7] = viewPointPosition->GetY();
			dp[11] = viewPointPosition->GetZ();
			cam_coord.InverseQuick();

			sj_height = scale;

			m_cameraTrack.InitCameraAutoTrack(0, sj_coord, sj_height, cam_coord);
		}
		break;
	case fDisable:
		{
			// todo: call CameraTrack::DisableCameraTrack()
			m_cameraTrack.DisableCameraAutoTrack();
		}
		break;
	case fUpdate:
		{
			SFVec3f*	targetPosition		= NULL;
			SFRotation*	targetOrientation	= NULL;

			if (!(GetFieldArg(targetPosition,	 0) &&
				  GetFieldArg(targetOrientation, 1)))
				return;

			// todo: call CameraTrack::ApplyCameraTrack()
			DVector v;
			double* const vp = v.Vec();
			double* dp;

			DMatrix sj_coord;
			//fill parameters
			vp[0] = targetOrientation->GetX();
			vp[1] = targetOrientation->GetY();
			vp[2] = targetOrientation->GetZ();
			vp[3] = targetOrientation->GetANGLE() * DM_RADIAN_TO_DEGREE;
			sj_coord.RotateAboutVector(v);
			dp = sj_coord.Mat();
			dp[ 3] = targetPosition->GetX();
			dp[ 7] = targetPosition->GetY();
			dp[11] = targetPosition->GetZ();

			m_cameraTrackResult = m_cameraTrack.ApplyCameraAutoTrack(0, sj_coord);
			m_cameraTrackResult.InverseQuick();
		}
		break;
	case fGetPosition:
		{
			// todo : set m_cameraPosition;
			//NOTE: only valid after CameraTrack::ApplyCameraTrack() is called
			double* dp = m_cameraTrackResult.Mat();

			m_cameraPosition.SetX(dp[ 3]);
			m_cameraPosition.SetY(dp[ 7]);
			m_cameraPosition.SetZ(dp[11]);

			value.SetField( &m_cameraPosition );
		}
		break;
		
	case fGetOrientation:
		{
			// todo : set m_cameraOrientation;
			//NOTE: only valid after CameraTrack::ApplyCameraTrack() is called
			DVector v,q;
			double* const vp = v.Vec();
			double* const qp = q.Vec();
			MatToQuat(m_cameraTrackResult, q);
			QuatToRotationVector(q, v);

			m_cameraOrientation.SetX(vp[0]);
			m_cameraOrientation.SetY(vp[1]);
			m_cameraOrientation.SetZ(vp[2]);
			m_cameraOrientation.SetANGLE(vp[3] * DM_DEGREE_TO_RADIAN);
			
			value.SetField( &m_cameraOrientation );
		}
		break;
	}
}
*/
//////////////////////////////////////////////////////////////////////////
// CameraControl Global Object [Mar/07/2002]
// balama
//////////////////////////////////////////////////////////////////////////
/*
VsCameraControlObject::VsCameraControlObject()
{
	static VsObjectSymbolTable tbl[] = {
		_ENTRY(SetParameter)
		_ENTRY(InsertCameraPath)
		_ENTRY(SwitchToPath)
		_ENTRY(SwitchToMode)
		_ENTRY(Update)
		_ENTRY(GetPosition)
		_ENTRY(GetOrientation)
		_ENTRY(GetMode)
		_ENTRY(FollowObject)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsCameraControlObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsCameraControlObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	value.SetVoid();

	switch(member)
	{
	case fSetParameter:
		{
			std::string	param_name;
			double		param_value;
			
			if (!(	GetStrArg	(param_name,	0) &&
					GetNumberArg(param_value,	1) ))
				return;
			
			m_cameraControl.SetParameter(param_name.c_str(), param_value);
		}
		break;

	case fInsertCameraPath:
		{
			std::string path_url;
			std::string cam_name;
			std::string local;

			if (!(	GetStrArg(path_url, 0) &&
					GetStrArg(cam_name, 1) &&
					GetStrArg(local,    2) ))
				return;

			bool fLocal = true;
			if (stricmp(local.c_str(), "true") == 0)
				fLocal = true;
			else if (stricmp(local.c_str(), "false") == 0)
				fLocal = false;
			else
				return;

			CameraControl::CCStatus stat;
			bool fResult = 
			m_cameraControl.InsertCameraPathFromMemory(	
				(const BYTE *)path_url.c_str(),
				cam_name.c_str(),
				fLocal, &stat
			);
		}
		break;

	case fSwitchToPath:
		{
			std::string cam_name;
			SFVec3f*	objectPosition		= NULL;
			SFRotation*	objectOrientation	= NULL;
			std::string immediate;
			double		playback_time = 0.0;
			double		tm;

			if (!(	GetStrArg	(cam_name,			0) &&
					GetFieldArg	(objectPosition,	1) &&
					GetFieldArg	(objectOrientation,	2) &&
					GetNumberArg(playback_time,		3) &&
					GetStrArg	(immediate,			4) &&
					GetNumberArg(tm,				5) ))
				return;

			bool fImmediate = true;
			if (stricmp(immediate.c_str(), "true") == 0)
				fImmediate = true;
			else if (stricmp(immediate.c_str(), "false") == 0)
				fImmediate = false;
			else
				return;

			double obj_transl[4];
			double obj_orient[4];
			obj_transl[0] = objectPosition->GetX();
			obj_transl[1] = objectPosition->GetY();
			obj_transl[2] = objectPosition->GetZ();
			obj_orient[0] = objectOrientation->GetX();
			obj_orient[1] = objectOrientation->GetY();
			obj_orient[2] = objectOrientation->GetZ();
			obj_orient[3] = objectOrientation->GetANGLE();

			bool fResult = 
			m_cameraControl.SwitchToPath(cam_name.c_str(),
										 obj_transl,
										 obj_orient,
										 playback_time,
										 !fImmediate,//fPathFinding
										 tm);

		}
		break;
	
	case fSwitchToMode:
		{
			std::string	mode;
			std::string immediate;
			SFVec3f*	objectPosition		= NULL;
			SFRotation*	objectOrientation	= NULL;
			SFVec3f*	cameraPosition		= NULL;
			SFRotation*	cameraOrientation	= NULL;
			double		height = 1.0;
			double		tm;

			if (!(	GetStrArg   (mode,				0) &&
					GetFieldArg (objectPosition,	1) &&
					GetFieldArg (objectOrientation,	2) &&
					GetFieldArg (cameraPosition,	3) &&
					GetFieldArg (cameraOrientation,	4) &&
					GetNumberArg(height,			5) &&
					GetStrArg	(immediate,			6) &&
					GetNumberArg(tm,				7) ))
				return;
			
			CameraControl::Mode cam_mode = CameraControl::kNone;
			if (stricmp(mode.c_str(), "none") == 0)
				cam_mode = CameraControl::kNone;
			else if (stricmp(mode.c_str(), "follow") == 0)
				cam_mode = CameraControl::kFollow;
			else
				return;

			bool fImmediate = true;
			if (stricmp(immediate.c_str(), "true") == 0)
				fImmediate = true;
			else if (stricmp(immediate.c_str(), "false") == 0)
				fImmediate = false;
			else
				return;
			
			double obj_transl[4];
			double obj_orient[4];
			double cam_transl[4];
			double cam_orient[4];
			obj_transl[0] = objectPosition->GetX();
			obj_transl[1] = objectPosition->GetY();
			obj_transl[2] = objectPosition->GetZ();
			obj_orient[0] = objectOrientation->GetX();
			obj_orient[1] = objectOrientation->GetY();
			obj_orient[2] = objectOrientation->GetZ();
			obj_orient[3] = objectOrientation->GetANGLE();

			cam_transl[0] = cameraPosition->GetX();
			cam_transl[1] = cameraPosition->GetY();
			cam_transl[2] = cameraPosition->GetZ();
			cam_orient[0] = cameraOrientation->GetX();
			cam_orient[1] = cameraOrientation->GetY();
			cam_orient[2] = cameraOrientation->GetZ();
			cam_orient[3] = cameraOrientation->GetANGLE();

			bool fResult = 
			m_cameraControl.SwitchToMode(	cam_mode,
											obj_transl,
											obj_orient,
											cam_transl,
											cam_orient,
											height,
											!fImmediate, //fPathFinding
											tm);
		}
		break;

	case fUpdate:
		{
			SFVec3f*	objectPosition		= NULL;
			SFRotation*	objectOrientation	= NULL;
			double		tm;

			if (!(GetFieldArg (objectPosition,		0) &&
				  GetFieldArg (objectOrientation,	1) &&
				  GetNumberArg(tm,					2) ))
				return;

			double obj_transl[4];
			double obj_orient[4];
			obj_transl[0] = objectPosition->GetX();
			obj_transl[1] = objectPosition->GetY();
			obj_transl[2] = objectPosition->GetZ();
			obj_orient[0] = objectOrientation->GetX();
			obj_orient[1] = objectOrientation->GetY();
			obj_orient[2] = objectOrientation->GetZ();
			obj_orient[3] = objectOrientation->GetANGLE();

			m_cameraControl.GetCameraCoordinate(obj_transl, 
												obj_orient,
												tm,
												m_cam_transl, 
												m_cam_orient);
			m_cameraPosition.SetX((float)m_cam_transl[0]);
			m_cameraPosition.SetY((float)m_cam_transl[1]);
			m_cameraPosition.SetZ((float)m_cam_transl[2]);

			m_cameraOrientation.SetX	((float)m_cam_orient[0]);
			m_cameraOrientation.SetY	((float)m_cam_orient[1]);
			m_cameraOrientation.SetZ	((float)m_cam_orient[2]);
			m_cameraOrientation.SetANGLE((float)m_cam_orient[3]);
		}
		break;
	case fGetPosition:
		{
			value.SetField( &m_cameraPosition );
		}
		break;
	case fGetOrientation:
		{
			value.SetField( &m_cameraOrientation );
		}
		break;
	case fGetMode:
		{
			strcpy(m_mode_str, m_cameraControl.GetModeStr());
			value.AllocString(m_mode_str);
		}
		break;
	case fFollowObject:
		{
			SFVec3f*	objectPosition		= NULL;
			SFRotation*	objectOrientation	= NULL;
			if (!(GetFieldArg (objectPosition,		0) &&
				  GetFieldArg (objectOrientation,	1) ))
				return;
			
			double obj_transl[4];
			double obj_orient[4];
			obj_transl[0] = objectPosition->GetX();
			obj_transl[1] = objectPosition->GetY();
			obj_transl[2] = objectPosition->GetZ();
			obj_orient[0] = objectOrientation->GetX();
			obj_orient[1] = objectOrientation->GetY();
			obj_orient[2] = objectOrientation->GetZ();
			obj_orient[3] = objectOrientation->GetANGLE();

			m_cameraControl.FollowObject(obj_transl, obj_orient);
		}
		break;
	}
}
*/
//////////////////////////////////////////////////////////////////////////
// MapGrid Object [Mar/01/2002]
// balama
//////////////////////////////////////////////////////////////////////////
/*
VsMapGridObject::VsMapGridObject()
{
	static VsObjectSymbolTable tbl[] = {
		_ENTRY(SetPosition)
		_ENTRY(SetDirection)
		_ENTRY(Step)
		_ENTRY(GetLabel)
		_ENTRY(GetXGrid)
		_ENTRY(GetZGrid)
		_ENTRY(GetDir)
		_ENTRY(Block)
		_ENTRY(UnBlock)
		_ENTRY_END
	};
	m_tbl = tbl;

	m_label = 0;
	m_grid.GetPosition	(m_x_grid, m_z_grid);
	m_grid.GetDirection	(m_dir);
}

VsValue VsMapGridObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsMapGridObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	value.SetVoid();

	switch(member)
	{
	case fSetPosition:
		{
			double xGrid,zGrid;

			if (!(	GetNumberArg(xGrid,	0) &&
					GetNumberArg(zGrid,	1)  ))
				return;

			if (m_grid.SetPosition((int)xGrid, (int)zGrid))
			{
				m_grid.GetPosition(m_x_grid, m_z_grid);
			}
		}
		break;
	
	case fSetDirection:
		{
			MapGrid::Direction	dir = MapGrid::kNegZ;
			std::string			dir_str;
			char				dir_buf[8];

			if (!(GetStrArg(dir_str, 0)))
				return;
			
			strncpy(dir_buf, dir_str.c_str(),7);
			if (strlen(dir_buf) != 2) return;

			if		(stricmp(dir_buf,"+x") == 0)
				dir = MapGrid::kPosX;
			else if (stricmp(dir_buf,"-x") == 0)
				dir = MapGrid::kNegX;
			else if (stricmp(dir_buf,"+z") == 0)
				dir = MapGrid::kPosZ;
			else if (stricmp(dir_buf,"-z") == 0)
				dir = MapGrid::kNegZ;

			if (m_grid.SetDirection(dir))
			{
				m_grid.GetDirection(m_dir);
			}
		}
		break;

	case fStep:
		{
			m_grid.Step(m_label, m_x_grid, m_z_grid, m_dir);
		}
		break;
	
	case fGetLabel:
		{
			value.SetNumber( m_label );
		}
		break;

	case fGetXGrid:
		{
			value.SetNumber( m_x_grid );
		}
		break;

	case fGetZGrid:
		{
			value.SetNumber( m_z_grid );
		}
		break;

	case fGetDir:
		{
			double radian = 0.0;
			switch (m_dir)
			{
				case MapGrid::kPosZ:
						radian = 0.0;
						break;
				case MapGrid::kPosX:
						radian = 0.5;	// 0.5*PI
						break;
				case MapGrid::kNegZ:
						radian = 1;		// PI
						break;
				case MapGrid::kNegX:
						radian = 1.5;	// 1.5*PI
						break;
			}
			value.SetNumber( radian );
		}
		break;

	case fBlock:
		{
			double xGrid,zGrid;
			int blockedLabel;

			if (!(	GetNumberArg(xGrid,	0) &&
					GetNumberArg(zGrid,	1)  ))
				return;

			m_grid.Block(xGrid, zGrid, blockedLabel);

			value.SetNumber( blockedLabel );
		}
		break;
	
	case fUnBlock:
		{
			double xGrid,zGrid,label;

			if (!(	GetNumberArg(xGrid,	0) &&
					GetNumberArg(zGrid,	1) &&
					GetNumberArg(label, 2) ))
				return;

			m_grid.UnBlock(xGrid, zGrid, label);
		}
		break;
	}
}
*/
//////////////////////////////////////////////////////////////////////////
// AnsiString (String utility functions) Global Object [Mar/12/2002]
// CCKAO
//////////////////////////////////////////////////////////////////////////
/*
template<class T>
string StringConv(const T& obj)
{
    ostrstream os;
    os << obj << '\0';
    return string(os.str());

}

string StringConv(const double& dle, const int width)
{   
    ostrstream os;
    os << setprecision(width) << dle << '\0';
    return std::string(os.str());
}

VsAnsiStringObject::VsAnsiStringObject()
{
	static VsObjectSymbolTable tbl[] = {
		// property
		// member
		_ENTRY(FromInt32)
		_ENTRY(FromFloat)
		_ENTRY(AddString)
		_ENTRY(CheckLength)
		_ENTRY(CheckLength2)
		_ENTRY(CheckLength3)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsAnsiStringObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsAnsiStringObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	double		arg0;
	string		str, str_par2;
	static char	strBuf[40];

 //	Memory leak are caused in StringConv func
 
	switch(member)
	{
		case fFromInt32:
			if (args.size() == 1) GetNumberArg(arg0, 0); 
			else return;

			arg0 = floor(arg0);
			sprintf(strBuf, "%d", (int) arg0);
			value.AllocString(strBuf);
			break;
		
		case fFromFloat:
			if (args.size() == 1) GetNumberArg(arg0, 0); 
			else return;
			
			sprintf(strBuf, "%10lf", arg0);
			value.AllocString(strBuf);
			break;

		case fAddString:
			if (args.size() == 2) {
				GetStrArg(str, 0); 
				GetStrArg(str_par2, 1);
			} else return;

			str += str_par2;

			value.AllocString(str.c_str());
			break;

		case fCheckLength:
		{
			if (args.size() == 2) {
				GetStrArg(str, 0);
				GetNumberArg(arg0, 1);
			}
			else return;
			
			int i, j, len = (int)(floor(arg0));
			i = str.length();
			while (i>=len)
			{
				j = i/len;
				str.insert(j*len, "\n");
				i-=len;
			}
			value.AllocString(str.c_str());
			break;
		}

		case fCheckLength2:
		{
			if (args.size() == 2) {
				GetStrArg(str, 0);
				GetNumberArg(arg0, 1);
			}
			else return;

			int pos1 = 0, pos2 = 0, crlf = 0, len = (int)(floor(arg0));
			while ((pos1 = str.find(' ', pos1+1)) != std::string::npos)
			{
				if (pos1 > (crlf + len))	{
					str[pos2] = '\n';
					crlf = pos2;
				}
				pos2 = pos1;
			}
			if (str.length() > (crlf + len))
				str[pos2] = '\n';
			value.AllocString(str.c_str());
			break;
		}
		case fCheckLength3:
		{
			MFString* mfs = NULL;
			if (args.size() == 3) {
				GetStrArg(str, 0);
				GetFieldArg(mfs, 1);
				GetNumberArg(arg0, 2);
			}
			else return;

			mfs->Clear();

			int len = (int)(floor(arg0));
			int slen = str.length();
			for (int k = 0; k < (slen + len - 1) / len; k++)
			{
				mfs->InsertValue(mfs->GetSize(), str.substr(k * len, len));
			}
			value.AllocString(str.c_str());
			break;
		}
	}
}
*/
//////////////////////////////////////////////////////////////////////////
// HttpFile Global Object [Mar/22/2002]
// KEIN
//////////////////////////////////////////////////////////////////////////
/*
VsHttpFileObject::VsHttpFileObject()
{
	static VsObjectSymbolTable tbl[] = {
		// property
		// member
		_ENTRY(Connect)
		_ENTRY(OpenRequest)		
		_ENTRY(ReadString)
		_ENTRY(CloseRequest)
		_ENTRY(Disconnect)
		
		_ENTRY_END
	};
	m_tbl = tbl;
	m_tearKey = 0;
}

VsHttpFileObject::~VsHttpFileObject()
{
	TearMap::iterator iter = m_tearmap.begin();
	for (; iter!=m_tearmap.end(); iter++)
		delete iter->second;
}

VsValue VsHttpFileObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsHttpFileObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{	
	string str,str1,course,level,question;
	double arg0,arg1;
	int mapkey,i;
	ITear* Tear;
	
	switch (member)
	{
	case fConnect:						//Connect to a MySQL Server				
		GetStrArg(SERVERNAME, 0);
		GetNumberArg(arg0,1);
		port=(int)arg0;
		break;

	case fOpenRequest:					//Get a text file from th server
		GetStrArg(course, 0);
		GetNumberArg(arg0, 1);
		GetNumberArg(arg1, 2);

		i=(int)arg0;
		level = StringConv(i);

		i=(int)arg1;
		question = StringConv(i);

		Tear = CreateObject();

		if( Tear->OpenRequest(course.c_str(), level.c_str(), question.c_str(), SERVERNAME.c_str(), port) == S_OK )
		{
			m_tearmap.insert( TearMap::value_type( ++m_tearKey , Tear ) );
			value.SetNumber( m_tearKey );
		}
		else
			value.SetNumber( 0 );
		
		break;

		
	case fReadString:					//Read a string from the file

		GetNumberArg(arg0, 0); 
		mapkey = (int)arg0;

		m_tearIt = m_tearmap.find( mapkey );

		if(m_tearIt != m_tearmap.end() )
		{
			Tear = (*m_tearIt).second;
			Tear->ReadString(str1);

			value.AllocString(str1.c_str());
		}
		else
		{
			value.SetNumber( 0 );
		}
		break;

	case fCloseRequest:					//Close the file
		GetNumberArg(arg0,0);
		mapkey = (int)arg0;
		m_tearIt = m_tearmap.find( mapkey );
		if(m_tearIt != m_tearmap.end() )
		{
			Tear = (*m_tearIt).second;
			delete Tear;
		}
		m_tearmap.erase(m_tearIt);		
		break;

	case fDisconnect:					//Disconnect from the server
		for(m_tearIt = m_tearmap.begin() ; m_tearIt != m_tearmap.end() ; m_tearIt = m_tearmap.erase(m_tearIt))
		{
			Tear = (*m_tearIt).second;
			delete Tear;
		}
		m_tearKey = 0;
		break;
	}
}
*/

//////////////////////////////////////////////////////////////////////////
// Occlusion Detection Global Object [April/23/2002]
// CCKAO
//////////////////////////////////////////////////////////////////////////
/*
VsOCCDetectionObject::VsOCCDetectionObject()
{
	static VsObjectSymbolTable tbl[] = {
		// property
		// member
		_ENTRY(SetFileWO)
		_ENTRY(SetCylinderWO)
		_ENTRY(SetBoxWO)
		_ENTRY(ifOcclusion)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsOCCDetectionObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsOCCDetectionObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	SFVec3f*	center	= NULL;
	SFVec3f*	size	= NULL;
	SFVec3f*	vpPosition	= NULL;
	SFVec3f*	tgPosition	= NULL;
	std::string	objfile;

	switch(member)
	{
	case fSetFileWO:
		if (!GetStrArg(objfile, 0)) return;
		m_occDetection.SetWatchObjects((char*)objfile.c_str());
		break;
	
	case fSetCylinderWO:
		if (!(GetFieldArg(center, 0) && GetNumberArg(radius, 1) && GetNumberArg(height, 2))) 
			return;
		
		objCenter[0] = center->GetX();
		objCenter[1] = center->GetY();
		objCenter[2] = center->GetZ();
		m_occDetection.SetWatchObjects(objCenter, radius, height);
		break;

	case fSetBoxWO:
		if (!(GetFieldArg(center, 0) && GetFieldArg(size, 1))) return;
		
		objCenter[0] = center->GetX();
		objCenter[1] = center->GetY();
		objCenter[2] = center->GetZ();
		objSize[0] = size->GetX();
		objSize[1] = size->GetY();
		objSize[2] = size->GetZ();
		m_occDetection.SetWatchObjects(objCenter, objSize);
		break;

	case fifOcclusion:
		if (!(GetFieldArg(vpPosition, 0) && GetFieldArg(tgPosition, 1))) return;
		
		viewPoint[0] = vpPosition->GetX();
		viewPoint[1] = vpPosition->GetY();
		viewPoint[2] = vpPosition->GetZ();
		targetObj[0] = tgPosition->GetX();
		targetObj[1] = tgPosition->GetY();
		targetObj[2] = tgPosition->GetZ();
		value.SetBool(m_occDetection.ifOcclusion(viewPoint, targetObj));
		break;
	}
}
*/

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: 3.4.4 vs 3.2.5 ; fabs: cant use as a function..
  2005-07-28  4:16 3.4.4 vs 3.2.5 ; fabs: cant use as a function Ming-Xiang Fu
@ 2005-07-28  4:54 ` corey taylor
  0 siblings, 0 replies; 4+ messages in thread
From: corey taylor @ 2005-07-28  4:54 UTC (permalink / raw)
  To: Ming-Xiang Fu; +Cc: gcc-help

Hi Fu,

  The code you attached doesn't show an include of cmath, but I assume
that you did try it.

  What happens when you explicitly call std::fabs ?

corey

On 7/27/05, Ming-Xiang Fu <deadly@cmlab.csie.ntu.edu.tw> wrote:
> 
> 
> hi, I am having some problem to compile a code by gcc 3.4.4 which is
> successfully compiled in gcc 3.2.5.
> 
> 
> At the begining, it complains about abs(float) is ambiguous..and sin(), cos()
> not declares.
> 
> And then, I include <cmath>, resolve some problem, and new problem occurs.
> 
> " ` fabs' cannot be used as a function "
> 
> 
> 
> please give me some guide, I will be appreciate about that.
> Thanks anyway. :)
> 
> 
>                                                                                                         RedMo
> part of src code as below.
> 
> ------------------------------------------------------------------------------------------------------------------------------------
> 
> // GlobalObject.cpp: implementation of the CGlobalObject class.
> //
> //////////////////////////////////////////////////////////////////////
> 
> #include "GlobalObject.h"
> #include <iomanip>
> #include <math.h>
> #include "../../Node/DEBUG.H"
> 
> using namespace std;
> 
> void VsMathObject::Evaluate(int member, VsValue& value, VsExprList &args,
> VsFunctionCall *parent)
> {
> 
>         switch(member)
>         {
> 
>         case fabs:
>                 value.SetNumber( fabs(arg0.GetNumber()) );
>                         // arg0.GetNumber() returns a float number.
>                 break;
>         case ffabs:
>                 value.SetNumber( fabs(arg0.GetNumber()) );
>                 break;
>         case facos:
>                 value.SetNumber( acos(arg0.GetNumber()) );
>                 break;
>         case fasin:
>                 value.SetNumber( asin(arg0.GetNumber()) );
>                 break;
> 
>         default:
>                 ASSERT(false);
>         }
> }
> 
> ---------------------------------------------------------------------------------------------------------------------------
> 
> 
> 
> 
> 
> --
> Communication and Multimedia Laboratory
> Dept. of Computer Science and Information Engineering, NTU
> 
> 
> 
>

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: 3.4.4 vs 3.2.5 ; fabs: cant use as a function..
  2005-07-26 10:54 Ming-Xiang Fu
@ 2005-07-26 14:33 ` Eljay Love-Jensen
  0 siblings, 0 replies; 4+ messages in thread
From: Eljay Love-Jensen @ 2005-07-26 14:33 UTC (permalink / raw)
  To: Ming-Xiang Fu, gcc-help

Hi Ming-Xiang,

Are you using C (gcc) or C++ (g++)?

If you are using C, you are using #include <math.h>.

If you are using C++, you should be using #include <cmath>.

My advice is:  don't use C header files in a C++ program.  The C header file
may define a macro, when what you really want is a C++ function.

HTH,
--Eljay


^ permalink raw reply	[flat|nested] 4+ messages in thread

* 3.4.4 vs 3.2.5 ; fabs: cant use as a function..
@ 2005-07-26 10:54 Ming-Xiang Fu
  2005-07-26 14:33 ` Eljay Love-Jensen
  0 siblings, 1 reply; 4+ messages in thread
From: Ming-Xiang Fu @ 2005-07-26 10:54 UTC (permalink / raw)
  To: gcc-help

[-- Attachment #1: Type: text/plain, Size: 1537 bytes --]



hi, I am having some problem to compile a code by gcc 3.4.4 which is
successfully compiled in gcc 3.2.5.


At the begining, it complains about abs(float) is ambiguous..and sin(), cos()
not declares.
And then, I include <math.h>, resolve some problem, and new problem occurs.

"` fabs' cannot be used as a function "

please give me some guide, I will be appreciate about that.
Thanks anyway. :)


													RedMo
part of src code as below.

------------------------------------------------------------------------------------------------------------------------------------

// GlobalObject.cpp: implementation of the CGlobalObject class.
//
//////////////////////////////////////////////////////////////////////

#include "GlobalObject.h"
#include <iomanip>
#include <math.h>
#include "../../Node/DEBUG.H"

using namespace std;

void VsMathObject::Evaluate(int member, VsValue& value, VsExprList &args,
VsFunctionCall *parent)
{

	switch(member)
	{

	case fabs:
		value.SetNumber( fabs(arg0.GetNumber()) );
			// arg0.GetNumber() returns a float number. 
		break;
	case ffabs:
		value.SetNumber( fabs(arg0.GetNumber()) );
		break;
	case facos:
		value.SetNumber( acos(arg0.GetNumber()) );
		break;
	case fasin:
		value.SetNumber( asin(arg0.GetNumber()) );
		break;

	default:
		ASSERT(false);
	}
}

---------------------------------------------------------------------------------------------------------------------------





--
Communication and Multimedia Laboratory
Dept. of Computer Science and Information Engineering, NTU


[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #2: GlobalObject.cpp --]
[-- Type: text/x-c++src; name="GlobalObject.cpp", Size: 26091 bytes --]

// GlobalObject.cpp: implementation of the CGlobalObject class.
//
//////////////////////////////////////////////////////////////////////

//#include "render_inc.h"
#include "GlobalObject.h"
// added by CCKAO
#include <iomanip>
#include <math.h>
//#include <strstream>
#include "../../Node/DEBUG.H"

using namespace std;

//////////////////////////////////////////////////////////////////////////
// System Global Object [1/20/2002]
// Fei-tian
//////////////////////////////////////////////////////////////////////////

VsSystemObject::VsSystemObject()
{
	static VsObjectSymbolTable tbl[] = {
		_ENTRY(Out)
		_ENTRY(In)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsSystemObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsSystemObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	value.SetVoid();

	VsValue var;
	if (args.size() > 0)
		var = args[0]->evaluate(parent);

	switch(member)
	{
	case fOut:
		if (var.GetType() == VsValue::vSTRING)
		{
			bool specChar = false;
			for (int i = 0; i < strlen(var.GetString()); i++)
			{
				if (specChar)
				{
					switch(var.GetString()[i])
					{
					case 'n':
						printf("\n");
						break;
					case 'r':
						printf("\r");
						break;
					case 't':
						printf("\t");
						break;
					case '\\':
						printf("\\");
						break;
					}
					specChar = false;
				}
				else
				{
					if (var.GetString()[i] == '\\')
						specChar = true;
					else
						printf("%c", var.GetString()[i]);
				}
			}
		}
		else if (var.GetType() == VsValue::vNUMBER) {
			printf("%f", var.GetNumber());
		}
		break;

	case fIn:
		{
			static char temp[256];
			scanf("%s", temp);
			value.SetString( temp );
		}
		break;
	}
}


//////////////////////////////////////////////////////////////////////////
// Math Global Object [1/20/2002]
// Fei-tian
//////////////////////////////////////////////////////////////////////////

VsMathObject::VsMathObject()
{
	static VsObjectSymbolTable tbl[] = {
		// property
		_ENTRY(E)		_ENTRY(LN10)		_ENTRY(LN2)
		_ENTRY(PI)		_ENTRY(SQRT1_2)		_ENTRY(SQRT2)
		// member
		_ENTRY(abs)		_ENTRY(acos)		_ENTRY(asin)
		_ENTRY(atan)	_ENTRY(ceil)		_ENTRY(cos)
		_ENTRY(exp)		_ENTRY(floor)		_ENTRY(log)
		_ENTRY(max)		_ENTRY(min)			_ENTRY(pow)
		_ENTRY(random)	_ENTRY(round)		_ENTRY(sin)
		_ENTRY(sqrt)	_ENTRY(tan)			_ENTRY(fabs)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsMathObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsMathObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	value.SetVoid();

	VsValue arg0(0.0), arg1(0.0);
	
	if (args.size() > 0)
		arg0 = args[0]->evaluate(parent);

	if (args.size() > 1)
		arg1 = args[1]->evaluate(parent);

	switch(member)
	{
	case fE:
		value.SetNumber( 2.7182818284590452354 );
		break;
	case fLN10:
		value.SetNumber( 2.30258509299404568402 );
		break;
	case fLN2:
		value.SetNumber( 0.69314718055994530942 );
		break;
	case fPI:
		value.SetNumber( 3.1415926535897932384626433832795 );
		break;
	case fSQRT1_2:
		value.SetNumber( 1.41421356237309504880 );
		break;
	case fSQRT2:
		value.SetNumber( 1.41421356237309504880 );
		break;
	case fabs:
		value.SetNumber( fabs(arg0.GetNumber()) );
		break;
	case ffabs:
		value.SetNumber( fabs(arg0.GetNumber()) );
		break;
	case facos:
		value.SetNumber( acos(arg0.GetNumber()) );
		break;
	case fasin:
		value.SetNumber( asin(arg0.GetNumber()) );
		break;
	case fatan:
		value.SetNumber( atan(arg0.GetNumber()) );
		break;
	case fceil:
		value.SetNumber( ceil(arg0.GetNumber()) );
		break;
	case fcos:
		value.SetNumber( cos(arg0.GetNumber()) );
		break;
	case fexp:
		value.SetNumber( exp(arg0.GetNumber()) );
		break;
	case ffloor:
		value.SetNumber( floor(arg0.GetNumber()) );
		break;
	case flog:
		value.SetNumber( log(arg0.GetNumber()) );
		break;
	case fmax:
		value.SetNumber( max(arg0.GetNumber(), arg1.GetNumber()) );
		break;
	case fmin:
		value.SetNumber( min(arg0.GetNumber(), arg1.GetNumber()) );
		break;
	case fpow:
		value.SetNumber( pow(arg0.GetNumber(), arg1.GetNumber()) );
		break;
	case frandom:
		value.SetNumber( double(rand()) / RAND_MAX );
		break;
	case fround:
		value.SetNumber( floor(arg0.GetNumber() + 0.5) );
		break;
	case fsin:
		value.SetNumber( sin(arg0.GetNumber()) );
		break;
	case fsqrt:
		value.SetNumber( sqrt(arg0.GetNumber()) );
		break;
	case ftan:
		value.SetNumber( tan(arg0.GetNumber()) );
		break;
	default:
		ASSERT(false);
	}
}


//////////////////////////////////////////////////////////////////////////
// Browser Global Object [12/11/2002]
// Cardy
//////////////////////////////////////////////////////////////////////////

VsBrowserObject::VsBrowserObject()
{
	static VsObjectSymbolTable tbl[] = {
		_ENTRY(getName)					_ENTRY(getVersion)
		_ENTRY(getCurrentSpeed)			_ENTRY(getCurrentFrameRate)
		_ENTRY(getWorldURL)				_ENTRY(replaceWorld)
		_ENTRY(createVrmlFromString)	_ENTRY(createVrmlFromURL)
		_ENTRY(addRoute)				_ENTRY(deleteRoute)
		_ENTRY(loadURL)					_ENTRY(setDescription)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsBrowserObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsBrowserObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
}

//////////////////////////////////////////////////////////////////////////
// CameraTrack Global Object [1/20/2002]
// Fei-tian, balama
//////////////////////////////////////////////////////////////////////////
/*
VsCameraTrackObject::VsCameraTrackObject()
{
	static VsObjectSymbolTable tbl[] = {
		_ENTRY(Enable)
		_ENTRY(Disable)
		_ENTRY(Update)
		_ENTRY(GetPosition)
		_ENTRY(GetOrientation)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsCameraTrackObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsCameraTrackObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	value.SetVoid();

	switch(member)
	{
	case fEnable:
		{
			SFVec3f*	viewPointPosition		= NULL;
			SFRotation*	viewPointOrientation	= NULL;
			SFVec3f*	targetPosition			= NULL;
			SFRotation*	targetOrientation		= NULL;
			double scale = 1.0;

			if (!(	GetFieldArg(viewPointPosition,		0) &&
					GetFieldArg(viewPointOrientation,	1) &&
					GetFieldArg(targetPosition,			2) &&
					GetFieldArg(targetOrientation,		3) &&
					GetNumberArg(scale,					4)))
				return;

			// todo: call CameraTrack::InitCameraAutoTrack()
			DVector v;
			double* const vp = v.Vec();
			double* dp;

			DMatrix sj_coord, cam_coord;
			double  sj_height;
			//fill parameters
			vp[0] = targetOrientation->GetX();
			vp[1] = targetOrientation->GetY();
			vp[2] = targetOrientation->GetZ();
			vp[3] = targetOrientation->GetANGLE() * DM_RADIAN_TO_DEGREE;
			sj_coord.RotateAboutVector(v);
			dp = sj_coord.Mat();
			dp[ 3] = targetPosition->GetX();
			dp[ 7] = targetPosition->GetY();
			dp[11] = targetPosition->GetZ();
			
			vp[0] = viewPointOrientation->GetX();
			vp[1] = viewPointOrientation->GetY();
			vp[2] = viewPointOrientation->GetZ();
			vp[3] = viewPointOrientation->GetANGLE() * DM_RADIAN_TO_DEGREE;
			cam_coord.RotateAboutVector(v);
			dp = cam_coord.Mat();
			dp[ 3] = viewPointPosition->GetX();
			dp[ 7] = viewPointPosition->GetY();
			dp[11] = viewPointPosition->GetZ();
			cam_coord.InverseQuick();

			sj_height = scale;

			m_cameraTrack.InitCameraAutoTrack(0, sj_coord, sj_height, cam_coord);
		}
		break;
	case fDisable:
		{
			// todo: call CameraTrack::DisableCameraTrack()
			m_cameraTrack.DisableCameraAutoTrack();
		}
		break;
	case fUpdate:
		{
			SFVec3f*	targetPosition		= NULL;
			SFRotation*	targetOrientation	= NULL;

			if (!(GetFieldArg(targetPosition,	 0) &&
				  GetFieldArg(targetOrientation, 1)))
				return;

			// todo: call CameraTrack::ApplyCameraTrack()
			DVector v;
			double* const vp = v.Vec();
			double* dp;

			DMatrix sj_coord;
			//fill parameters
			vp[0] = targetOrientation->GetX();
			vp[1] = targetOrientation->GetY();
			vp[2] = targetOrientation->GetZ();
			vp[3] = targetOrientation->GetANGLE() * DM_RADIAN_TO_DEGREE;
			sj_coord.RotateAboutVector(v);
			dp = sj_coord.Mat();
			dp[ 3] = targetPosition->GetX();
			dp[ 7] = targetPosition->GetY();
			dp[11] = targetPosition->GetZ();

			m_cameraTrackResult = m_cameraTrack.ApplyCameraAutoTrack(0, sj_coord);
			m_cameraTrackResult.InverseQuick();
		}
		break;
	case fGetPosition:
		{
			// todo : set m_cameraPosition;
			//NOTE: only valid after CameraTrack::ApplyCameraTrack() is called
			double* dp = m_cameraTrackResult.Mat();

			m_cameraPosition.SetX(dp[ 3]);
			m_cameraPosition.SetY(dp[ 7]);
			m_cameraPosition.SetZ(dp[11]);

			value.SetField( &m_cameraPosition );
		}
		break;
		
	case fGetOrientation:
		{
			// todo : set m_cameraOrientation;
			//NOTE: only valid after CameraTrack::ApplyCameraTrack() is called
			DVector v,q;
			double* const vp = v.Vec();
			double* const qp = q.Vec();
			MatToQuat(m_cameraTrackResult, q);
			QuatToRotationVector(q, v);

			m_cameraOrientation.SetX(vp[0]);
			m_cameraOrientation.SetY(vp[1]);
			m_cameraOrientation.SetZ(vp[2]);
			m_cameraOrientation.SetANGLE(vp[3] * DM_DEGREE_TO_RADIAN);
			
			value.SetField( &m_cameraOrientation );
		}
		break;
	}
}
*/
//////////////////////////////////////////////////////////////////////////
// CameraControl Global Object [Mar/07/2002]
// balama
//////////////////////////////////////////////////////////////////////////
/*
VsCameraControlObject::VsCameraControlObject()
{
	static VsObjectSymbolTable tbl[] = {
		_ENTRY(SetParameter)
		_ENTRY(InsertCameraPath)
		_ENTRY(SwitchToPath)
		_ENTRY(SwitchToMode)
		_ENTRY(Update)
		_ENTRY(GetPosition)
		_ENTRY(GetOrientation)
		_ENTRY(GetMode)
		_ENTRY(FollowObject)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsCameraControlObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsCameraControlObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	value.SetVoid();

	switch(member)
	{
	case fSetParameter:
		{
			std::string	param_name;
			double		param_value;
			
			if (!(	GetStrArg	(param_name,	0) &&
					GetNumberArg(param_value,	1) ))
				return;
			
			m_cameraControl.SetParameter(param_name.c_str(), param_value);
		}
		break;

	case fInsertCameraPath:
		{
			std::string path_url;
			std::string cam_name;
			std::string local;

			if (!(	GetStrArg(path_url, 0) &&
					GetStrArg(cam_name, 1) &&
					GetStrArg(local,    2) ))
				return;

			bool fLocal = true;
			if (stricmp(local.c_str(), "true") == 0)
				fLocal = true;
			else if (stricmp(local.c_str(), "false") == 0)
				fLocal = false;
			else
				return;

			CameraControl::CCStatus stat;
			bool fResult = 
			m_cameraControl.InsertCameraPathFromMemory(	
				(const BYTE *)path_url.c_str(),
				cam_name.c_str(),
				fLocal, &stat
			);
		}
		break;

	case fSwitchToPath:
		{
			std::string cam_name;
			SFVec3f*	objectPosition		= NULL;
			SFRotation*	objectOrientation	= NULL;
			std::string immediate;
			double		playback_time = 0.0;
			double		tm;

			if (!(	GetStrArg	(cam_name,			0) &&
					GetFieldArg	(objectPosition,	1) &&
					GetFieldArg	(objectOrientation,	2) &&
					GetNumberArg(playback_time,		3) &&
					GetStrArg	(immediate,			4) &&
					GetNumberArg(tm,				5) ))
				return;

			bool fImmediate = true;
			if (stricmp(immediate.c_str(), "true") == 0)
				fImmediate = true;
			else if (stricmp(immediate.c_str(), "false") == 0)
				fImmediate = false;
			else
				return;

			double obj_transl[4];
			double obj_orient[4];
			obj_transl[0] = objectPosition->GetX();
			obj_transl[1] = objectPosition->GetY();
			obj_transl[2] = objectPosition->GetZ();
			obj_orient[0] = objectOrientation->GetX();
			obj_orient[1] = objectOrientation->GetY();
			obj_orient[2] = objectOrientation->GetZ();
			obj_orient[3] = objectOrientation->GetANGLE();

			bool fResult = 
			m_cameraControl.SwitchToPath(cam_name.c_str(),
										 obj_transl,
										 obj_orient,
										 playback_time,
										 !fImmediate,//fPathFinding
										 tm);

		}
		break;
	
	case fSwitchToMode:
		{
			std::string	mode;
			std::string immediate;
			SFVec3f*	objectPosition		= NULL;
			SFRotation*	objectOrientation	= NULL;
			SFVec3f*	cameraPosition		= NULL;
			SFRotation*	cameraOrientation	= NULL;
			double		height = 1.0;
			double		tm;

			if (!(	GetStrArg   (mode,				0) &&
					GetFieldArg (objectPosition,	1) &&
					GetFieldArg (objectOrientation,	2) &&
					GetFieldArg (cameraPosition,	3) &&
					GetFieldArg (cameraOrientation,	4) &&
					GetNumberArg(height,			5) &&
					GetStrArg	(immediate,			6) &&
					GetNumberArg(tm,				7) ))
				return;
			
			CameraControl::Mode cam_mode = CameraControl::kNone;
			if (stricmp(mode.c_str(), "none") == 0)
				cam_mode = CameraControl::kNone;
			else if (stricmp(mode.c_str(), "follow") == 0)
				cam_mode = CameraControl::kFollow;
			else
				return;

			bool fImmediate = true;
			if (stricmp(immediate.c_str(), "true") == 0)
				fImmediate = true;
			else if (stricmp(immediate.c_str(), "false") == 0)
				fImmediate = false;
			else
				return;
			
			double obj_transl[4];
			double obj_orient[4];
			double cam_transl[4];
			double cam_orient[4];
			obj_transl[0] = objectPosition->GetX();
			obj_transl[1] = objectPosition->GetY();
			obj_transl[2] = objectPosition->GetZ();
			obj_orient[0] = objectOrientation->GetX();
			obj_orient[1] = objectOrientation->GetY();
			obj_orient[2] = objectOrientation->GetZ();
			obj_orient[3] = objectOrientation->GetANGLE();

			cam_transl[0] = cameraPosition->GetX();
			cam_transl[1] = cameraPosition->GetY();
			cam_transl[2] = cameraPosition->GetZ();
			cam_orient[0] = cameraOrientation->GetX();
			cam_orient[1] = cameraOrientation->GetY();
			cam_orient[2] = cameraOrientation->GetZ();
			cam_orient[3] = cameraOrientation->GetANGLE();

			bool fResult = 
			m_cameraControl.SwitchToMode(	cam_mode,
											obj_transl,
											obj_orient,
											cam_transl,
											cam_orient,
											height,
											!fImmediate, //fPathFinding
											tm);
		}
		break;

	case fUpdate:
		{
			SFVec3f*	objectPosition		= NULL;
			SFRotation*	objectOrientation	= NULL;
			double		tm;

			if (!(GetFieldArg (objectPosition,		0) &&
				  GetFieldArg (objectOrientation,	1) &&
				  GetNumberArg(tm,					2) ))
				return;

			double obj_transl[4];
			double obj_orient[4];
			obj_transl[0] = objectPosition->GetX();
			obj_transl[1] = objectPosition->GetY();
			obj_transl[2] = objectPosition->GetZ();
			obj_orient[0] = objectOrientation->GetX();
			obj_orient[1] = objectOrientation->GetY();
			obj_orient[2] = objectOrientation->GetZ();
			obj_orient[3] = objectOrientation->GetANGLE();

			m_cameraControl.GetCameraCoordinate(obj_transl, 
												obj_orient,
												tm,
												m_cam_transl, 
												m_cam_orient);
			m_cameraPosition.SetX((float)m_cam_transl[0]);
			m_cameraPosition.SetY((float)m_cam_transl[1]);
			m_cameraPosition.SetZ((float)m_cam_transl[2]);

			m_cameraOrientation.SetX	((float)m_cam_orient[0]);
			m_cameraOrientation.SetY	((float)m_cam_orient[1]);
			m_cameraOrientation.SetZ	((float)m_cam_orient[2]);
			m_cameraOrientation.SetANGLE((float)m_cam_orient[3]);
		}
		break;
	case fGetPosition:
		{
			value.SetField( &m_cameraPosition );
		}
		break;
	case fGetOrientation:
		{
			value.SetField( &m_cameraOrientation );
		}
		break;
	case fGetMode:
		{
			strcpy(m_mode_str, m_cameraControl.GetModeStr());
			value.AllocString(m_mode_str);
		}
		break;
	case fFollowObject:
		{
			SFVec3f*	objectPosition		= NULL;
			SFRotation*	objectOrientation	= NULL;
			if (!(GetFieldArg (objectPosition,		0) &&
				  GetFieldArg (objectOrientation,	1) ))
				return;
			
			double obj_transl[4];
			double obj_orient[4];
			obj_transl[0] = objectPosition->GetX();
			obj_transl[1] = objectPosition->GetY();
			obj_transl[2] = objectPosition->GetZ();
			obj_orient[0] = objectOrientation->GetX();
			obj_orient[1] = objectOrientation->GetY();
			obj_orient[2] = objectOrientation->GetZ();
			obj_orient[3] = objectOrientation->GetANGLE();

			m_cameraControl.FollowObject(obj_transl, obj_orient);
		}
		break;
	}
}
*/
//////////////////////////////////////////////////////////////////////////
// MapGrid Object [Mar/01/2002]
// balama
//////////////////////////////////////////////////////////////////////////
/*
VsMapGridObject::VsMapGridObject()
{
	static VsObjectSymbolTable tbl[] = {
		_ENTRY(SetPosition)
		_ENTRY(SetDirection)
		_ENTRY(Step)
		_ENTRY(GetLabel)
		_ENTRY(GetXGrid)
		_ENTRY(GetZGrid)
		_ENTRY(GetDir)
		_ENTRY(Block)
		_ENTRY(UnBlock)
		_ENTRY_END
	};
	m_tbl = tbl;

	m_label = 0;
	m_grid.GetPosition	(m_x_grid, m_z_grid);
	m_grid.GetDirection	(m_dir);
}

VsValue VsMapGridObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsMapGridObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	value.SetVoid();

	switch(member)
	{
	case fSetPosition:
		{
			double xGrid,zGrid;

			if (!(	GetNumberArg(xGrid,	0) &&
					GetNumberArg(zGrid,	1)  ))
				return;

			if (m_grid.SetPosition((int)xGrid, (int)zGrid))
			{
				m_grid.GetPosition(m_x_grid, m_z_grid);
			}
		}
		break;
	
	case fSetDirection:
		{
			MapGrid::Direction	dir = MapGrid::kNegZ;
			std::string			dir_str;
			char				dir_buf[8];

			if (!(GetStrArg(dir_str, 0)))
				return;
			
			strncpy(dir_buf, dir_str.c_str(),7);
			if (strlen(dir_buf) != 2) return;

			if		(stricmp(dir_buf,"+x") == 0)
				dir = MapGrid::kPosX;
			else if (stricmp(dir_buf,"-x") == 0)
				dir = MapGrid::kNegX;
			else if (stricmp(dir_buf,"+z") == 0)
				dir = MapGrid::kPosZ;
			else if (stricmp(dir_buf,"-z") == 0)
				dir = MapGrid::kNegZ;

			if (m_grid.SetDirection(dir))
			{
				m_grid.GetDirection(m_dir);
			}
		}
		break;

	case fStep:
		{
			m_grid.Step(m_label, m_x_grid, m_z_grid, m_dir);
		}
		break;
	
	case fGetLabel:
		{
			value.SetNumber( m_label );
		}
		break;

	case fGetXGrid:
		{
			value.SetNumber( m_x_grid );
		}
		break;

	case fGetZGrid:
		{
			value.SetNumber( m_z_grid );
		}
		break;

	case fGetDir:
		{
			double radian = 0.0;
			switch (m_dir)
			{
				case MapGrid::kPosZ:
						radian = 0.0;
						break;
				case MapGrid::kPosX:
						radian = 0.5;	// 0.5*PI
						break;
				case MapGrid::kNegZ:
						radian = 1;		// PI
						break;
				case MapGrid::kNegX:
						radian = 1.5;	// 1.5*PI
						break;
			}
			value.SetNumber( radian );
		}
		break;

	case fBlock:
		{
			double xGrid,zGrid;
			int blockedLabel;

			if (!(	GetNumberArg(xGrid,	0) &&
					GetNumberArg(zGrid,	1)  ))
				return;

			m_grid.Block(xGrid, zGrid, blockedLabel);

			value.SetNumber( blockedLabel );
		}
		break;
	
	case fUnBlock:
		{
			double xGrid,zGrid,label;

			if (!(	GetNumberArg(xGrid,	0) &&
					GetNumberArg(zGrid,	1) &&
					GetNumberArg(label, 2) ))
				return;

			m_grid.UnBlock(xGrid, zGrid, label);
		}
		break;
	}
}
*/
//////////////////////////////////////////////////////////////////////////
// AnsiString (String utility functions) Global Object [Mar/12/2002]
// CCKAO
//////////////////////////////////////////////////////////////////////////
/*
template<class T>
string StringConv(const T& obj)
{
    ostrstream os;
    os << obj << '\0';
    return string(os.str());

}

string StringConv(const double& dle, const int width)
{   
    ostrstream os;
    os << setprecision(width) << dle << '\0';
    return std::string(os.str());
}

VsAnsiStringObject::VsAnsiStringObject()
{
	static VsObjectSymbolTable tbl[] = {
		// property
		// member
		_ENTRY(FromInt32)
		_ENTRY(FromFloat)
		_ENTRY(AddString)
		_ENTRY(CheckLength)
		_ENTRY(CheckLength2)
		_ENTRY(CheckLength3)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsAnsiStringObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsAnsiStringObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	double		arg0;
	string		str, str_par2;
	static char	strBuf[40];

 //	Memory leak are caused in StringConv func
 
	switch(member)
	{
		case fFromInt32:
			if (args.size() == 1) GetNumberArg(arg0, 0); 
			else return;

			arg0 = floor(arg0);
			sprintf(strBuf, "%d", (int) arg0);
			value.AllocString(strBuf);
			break;
		
		case fFromFloat:
			if (args.size() == 1) GetNumberArg(arg0, 0); 
			else return;
			
			sprintf(strBuf, "%10lf", arg0);
			value.AllocString(strBuf);
			break;

		case fAddString:
			if (args.size() == 2) {
				GetStrArg(str, 0); 
				GetStrArg(str_par2, 1);
			} else return;

			str += str_par2;

			value.AllocString(str.c_str());
			break;

		case fCheckLength:
		{
			if (args.size() == 2) {
				GetStrArg(str, 0);
				GetNumberArg(arg0, 1);
			}
			else return;
			
			int i, j, len = (int)(floor(arg0));
			i = str.length();
			while (i>=len)
			{
				j = i/len;
				str.insert(j*len, "\n");
				i-=len;
			}
			value.AllocString(str.c_str());
			break;
		}

		case fCheckLength2:
		{
			if (args.size() == 2) {
				GetStrArg(str, 0);
				GetNumberArg(arg0, 1);
			}
			else return;

			int pos1 = 0, pos2 = 0, crlf = 0, len = (int)(floor(arg0));
			while ((pos1 = str.find(' ', pos1+1)) != std::string::npos)
			{
				if (pos1 > (crlf + len))	{
					str[pos2] = '\n';
					crlf = pos2;
				}
				pos2 = pos1;
			}
			if (str.length() > (crlf + len))
				str[pos2] = '\n';
			value.AllocString(str.c_str());
			break;
		}
		case fCheckLength3:
		{
			MFString* mfs = NULL;
			if (args.size() == 3) {
				GetStrArg(str, 0);
				GetFieldArg(mfs, 1);
				GetNumberArg(arg0, 2);
			}
			else return;

			mfs->Clear();

			int len = (int)(floor(arg0));
			int slen = str.length();
			for (int k = 0; k < (slen + len - 1) / len; k++)
			{
				mfs->InsertValue(mfs->GetSize(), str.substr(k * len, len));
			}
			value.AllocString(str.c_str());
			break;
		}
	}
}
*/
//////////////////////////////////////////////////////////////////////////
// HttpFile Global Object [Mar/22/2002]
// KEIN
//////////////////////////////////////////////////////////////////////////
/*
VsHttpFileObject::VsHttpFileObject()
{
	static VsObjectSymbolTable tbl[] = {
		// property
		// member
		_ENTRY(Connect)
		_ENTRY(OpenRequest)		
		_ENTRY(ReadString)
		_ENTRY(CloseRequest)
		_ENTRY(Disconnect)
		
		_ENTRY_END
	};
	m_tbl = tbl;
	m_tearKey = 0;
}

VsHttpFileObject::~VsHttpFileObject()
{
	TearMap::iterator iter = m_tearmap.begin();
	for (; iter!=m_tearmap.end(); iter++)
		delete iter->second;
}

VsValue VsHttpFileObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsHttpFileObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{	
	string str,str1,course,level,question;
	double arg0,arg1;
	int mapkey,i;
	ITear* Tear;
	
	switch (member)
	{
	case fConnect:						//Connect to a MySQL Server				
		GetStrArg(SERVERNAME, 0);
		GetNumberArg(arg0,1);
		port=(int)arg0;
		break;

	case fOpenRequest:					//Get a text file from th server
		GetStrArg(course, 0);
		GetNumberArg(arg0, 1);
		GetNumberArg(arg1, 2);

		i=(int)arg0;
		level = StringConv(i);

		i=(int)arg1;
		question = StringConv(i);

		Tear = CreateObject();

		if( Tear->OpenRequest(course.c_str(), level.c_str(), question.c_str(), SERVERNAME.c_str(), port) == S_OK )
		{
			m_tearmap.insert( TearMap::value_type( ++m_tearKey , Tear ) );
			value.SetNumber( m_tearKey );
		}
		else
			value.SetNumber( 0 );
		
		break;

		
	case fReadString:					//Read a string from the file

		GetNumberArg(arg0, 0); 
		mapkey = (int)arg0;

		m_tearIt = m_tearmap.find( mapkey );

		if(m_tearIt != m_tearmap.end() )
		{
			Tear = (*m_tearIt).second;
			Tear->ReadString(str1);

			value.AllocString(str1.c_str());
		}
		else
		{
			value.SetNumber( 0 );
		}
		break;

	case fCloseRequest:					//Close the file
		GetNumberArg(arg0,0);
		mapkey = (int)arg0;
		m_tearIt = m_tearmap.find( mapkey );
		if(m_tearIt != m_tearmap.end() )
		{
			Tear = (*m_tearIt).second;
			delete Tear;
		}
		m_tearmap.erase(m_tearIt);		
		break;

	case fDisconnect:					//Disconnect from the server
		for(m_tearIt = m_tearmap.begin() ; m_tearIt != m_tearmap.end() ; m_tearIt = m_tearmap.erase(m_tearIt))
		{
			Tear = (*m_tearIt).second;
			delete Tear;
		}
		m_tearKey = 0;
		break;
	}
}
*/

//////////////////////////////////////////////////////////////////////////
// Occlusion Detection Global Object [April/23/2002]
// CCKAO
//////////////////////////////////////////////////////////////////////////
/*
VsOCCDetectionObject::VsOCCDetectionObject()
{
	static VsObjectSymbolTable tbl[] = {
		// property
		// member
		_ENTRY(SetFileWO)
		_ENTRY(SetCylinderWO)
		_ENTRY(SetBoxWO)
		_ENTRY(ifOcclusion)
		_ENTRY_END
	};
	m_tbl = tbl;
}

VsValue VsOCCDetectionObject::Assign(int member, const VsValue &v)
{
	return VsValue(0.0);
}

void VsOCCDetectionObject::Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent)
{
	SFVec3f*	center	= NULL;
	SFVec3f*	size	= NULL;
	SFVec3f*	vpPosition	= NULL;
	SFVec3f*	tgPosition	= NULL;
	std::string	objfile;

	switch(member)
	{
	case fSetFileWO:
		if (!GetStrArg(objfile, 0)) return;
		m_occDetection.SetWatchObjects((char*)objfile.c_str());
		break;
	
	case fSetCylinderWO:
		if (!(GetFieldArg(center, 0) && GetNumberArg(radius, 1) && GetNumberArg(height, 2))) 
			return;
		
		objCenter[0] = center->GetX();
		objCenter[1] = center->GetY();
		objCenter[2] = center->GetZ();
		m_occDetection.SetWatchObjects(objCenter, radius, height);
		break;

	case fSetBoxWO:
		if (!(GetFieldArg(center, 0) && GetFieldArg(size, 1))) return;
		
		objCenter[0] = center->GetX();
		objCenter[1] = center->GetY();
		objCenter[2] = center->GetZ();
		objSize[0] = size->GetX();
		objSize[1] = size->GetY();
		objSize[2] = size->GetZ();
		m_occDetection.SetWatchObjects(objCenter, objSize);
		break;

	case fifOcclusion:
		if (!(GetFieldArg(vpPosition, 0) && GetFieldArg(tgPosition, 1))) return;
		
		viewPoint[0] = vpPosition->GetX();
		viewPoint[1] = vpPosition->GetY();
		viewPoint[2] = vpPosition->GetZ();
		targetObj[0] = tgPosition->GetX();
		targetObj[1] = tgPosition->GetY();
		targetObj[2] = tgPosition->GetZ();
		value.SetBool(m_occDetection.ifOcclusion(viewPoint, targetObj));
		break;
	}
}
*/

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #3: GlobalObject.h --]
[-- Type: text/x-chdr; name="GlobalObject.h", Size: 6152 bytes --]

// GlobalObject.h: interface for the CGlobalObject class.
//
//////////////////////////////////////////////////////////////////////


#if !defined(AFX_GLOBALOBJECT_H__9459373A_82E4_4160_BB56_16DFA47BA0BB__INCLUDED_)
#define AFX_GLOBALOBJECT_H__9459373A_82E4_4160_BB56_16DFA47BA0BB__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//#pragma warning( disable : 4786)
#include "../../Node/script/vsfunction.h"
//#include "CameraTrack/Cameratk.h"
//#include "CameraTrack/CameraControl.h"
//#include "MapGrid/MapGrid.h"
//#include "Tear/ITear.h"
//#include "OCCDetection/OCCDetection.h"
#include "../../Node/node_Typedef.h"

//////////////////////////////////////////////////////////////////////////
// Fei-tian [1/20/2002]
// Global Object
//////////////////////////////////////////////////////////////////////////
//using ::abs;

class VsSystemObject : public VsObjectProxy
{
	enum FUNC {fNon = -1, fOut, fIn};

public:
	VsSystemObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};

class VsMathObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1, fE, fLN10, fLN2, fPI, fSQRT1_2, fSQRT2,
		// method
		fabs, facos, fasin, fatan, fceil, fcos, fexp, ffloor, flog, 
		fmax, fmin, fpow, frandom, fround, fsin, fsqrt, ftan, ffabs
	};

public:
	VsMathObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};

class VsBrowserObject : public VsObjectProxy
{
	enum FUNC {
		fgetName, fgetVersion, fgetCurrentSpeed, fgetCurrentFrameRate,
		fgetWorldURL, freplaceWorld, fcreateVrmlFromString, fcreateVrmlFromURL, 
		faddRoute, fdeleteRoute, floadURL, fsetDescription
	};

public:
	VsBrowserObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};


class SFVec3f;
class SFRotation;
//balama
/*
class VsCameraTrackObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fEnable, fDisable, fUpdate, fGetPosition, fGetOrientation
	};

	CameraTrack m_cameraTrack;
	DMatrix     m_cameraTrackResult;
	SFVec3f		m_cameraPosition;
	SFRotation	m_cameraOrientation;

public:
	VsCameraTrackObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};



class VsCameraControlObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fSetParameter, 
		fInsertCameraPath, 
		fSwitchToPath, 
		fSwitchToMode, 
		fUpdate, 
		fGetPosition, 
		fGetOrientation,
		fGetMode,
		fFollowObject
	};

	CameraControl	m_cameraControl;
	double			m_cam_transl[4];
	double			m_cam_orient[4];
	SFVec3f			m_cameraPosition;
	SFRotation		m_cameraOrientation;
	char			m_mode_str[32];

public:
	VsCameraControlObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};



class VsMapGridObject : public VsObjectProxy
{
	enum FUNC {
		//property
		fNon = -1,
		// method
		fSetPosition, fSetDirection, 
		fStep, fGetLabel, fGetXGrid, fGetZGrid, fGetDir, 
		fBlock, fUnBlock
	};

	MapGrid				m_grid;
	int					m_label;
	int					m_x_grid;
	int					m_z_grid;
	MapGrid::Direction	m_dir;

public:
	VsMapGridObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};
*/

// CCKAO
class VsAnsiStringObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fFromInt32, fFromFloat, fAddString, fCheckLength, fCheckLength2, fCheckLength3
	};

public:
	VsAnsiStringObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};

////////////////////////////////////////////////////
//HttpFile Object [Last update : 2002/03/22]
//KEIN
////////////////////////////////////////////////////
/*
class VsHttpFileObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fConnect,
		fOpenRequest, 
		fReadString,
		fCloseRequest,
		fDisconnect
	};	
	
	std::string SERVERNAME;

	typedef std::map<int, ITear*> TearMap;
	TearMap				m_tearmap;
	TearMap::iterator	m_tearIt;
	int m_tearKey;
	int port;

public:
	VsHttpFileObject();
	~VsHttpFileObject();

	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};


// Occlusion Detection by CCKAO, added by 2002/4/23
class VsOCCDetectionObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fSetFileWO, fSetCylinderWO, fSetBoxWO, fifOcclusion
	};
	OCCDetection	m_occDetection;
	double			objCenter[3], objSize[3], radius, height;
	double			viewPoint[3], targetObj[3];

public:
	VsOCCDetectionObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};

// MouseObject by ChiaLee [2002/10/11]
class VsMouseObject : public VsObjectProxy
{
	enum FUNC {
		// property
		fNon = -1,
		// method
		fGetPosition
	};
	SFVec2f m_position;
public:
	VsMouseObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
}; 
class VsBrowseCameraObject : public VsObjectProxy
{
	enum FUNC {
		fNon = -1,
		fGetGlobalPosition,
		fGetGlobalOrientation,
		fGetFront,
		fSetFront,
		fMoveForward,
		fMoveUp,
		fMoveRight,
	};
	SFVec3f			m_cameraPosition;
	SFRotation		m_cameraOrientation;
	SFVec3f			m_camerafront;
public:
	VsBrowseCameraObject();
	virtual VsValue Assign(int member, const VsValue &v);
	virtual void	Evaluate(int member, VsValue& value, VsExprList &args, VsFunctionCall *parent);
};
*/
#endif // !defined(AFX_GLOBALOBJECT_H__9459373A_82E4_4160_BB56_16DFA47BA0BB__INCLUDED_)

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2005-07-28  4:54 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-07-28  4:16 3.4.4 vs 3.2.5 ; fabs: cant use as a function Ming-Xiang Fu
2005-07-28  4:54 ` corey taylor
  -- strict thread matches above, loose matches on Subject: below --
2005-07-26 10:54 Ming-Xiang Fu
2005-07-26 14:33 ` Eljay Love-Jensen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).