/*!
	文字列を返す関数を処理する

	PPAから呼びだされる
	@date 2003.02.24 Moca CallHandleFunction対応
*/
void __stdcall CPPA::stdStrFunc(
	const char* FuncName, const int Index,
	const char* Argument[], const int ArgSize, int* Err_CD,
	char** ResultValue)
{
	NEVER_USED_PARAM(FuncName);

	VARIANT Ret;
	::VariantInit(&Ret);
	*Err_CD = 0;
	if( false != CallHandleFunction(Index, Argument, ArgSize, &Ret) ){
		if(VT_BSTR == Ret.vt){
			int len;
			char* buf;
			Wrap(&Ret.bstrVal)->Get(&buf,&len);
			m_CurInstance->m_cMemRet.SetString(buf,len); // Mar. 9, 2003 genta
			delete[] buf;
			*ResultValue = m_CurInstance->m_cMemRet.GetStringPtr();
			::VariantClear(&Ret);
			return;
		}
	}
	::VariantClear(&Ret);
	*Err_CD = Index + 1;
	*ResultValue = const_cast<char*>("");
	return;
}
/*!
	整数値を返す関数を処理する

	PPAから呼びだされる
	@author Moca
	@date 2003.02.24 Moca
*/
void __stdcall CPPA::stdIntFunc(
	const char* FuncName, const int Index,
	const char* Argument[], const int ArgSize, int* Err_CD,
	int* ResultValue)
{
	NEVER_USED_PARAM(FuncName);
	VARIANT Ret;
	::VariantInit(&Ret);

	*ResultValue = 0;
	*Err_CD = 0;
	if( false != CallHandleFunction(Index, Argument, ArgSize, &Ret) ){
		switch( Ret.vt ){
		case VT_I4:
			*ResultValue = Ret.lVal;
			break;
		case VT_INT:
			*ResultValue = Ret.intVal;
			break;
		case VT_UINT:
			*ResultValue = Ret.uintVal;
			break;
		default:
			*Err_CD = -2; // 2003.06.01 Moca 値変更
		}
		::VariantClear(&Ret);
		return;
	}
	*Err_CD = Index + 1; // 2003.06.01 Moca
	::VariantClear(&Ret);
	return;
}
int  DataProcessHelper::Initial(const string & Buffer)
{
	map<string,string> mapped_v;
	char *ptr = (char *)Buffer.c_str();
	cout << "I will handle buffer" << Buffer << endl;
		
	char *token = strtok(ptr,"&");
	while(token != NULL)
	{
		char *p = token;
		string index;
		string value;
		while(*p != '=')
		{
			index = index + *p;
			p++;
		}

		p++;
		while(*p != '\0')
		{
			value = value + *p;
			p++;
		}

		if(index.compare("Fcreid") == 0 || index.compare("Fmobile") 
				== 0 || index.compare("Fbankid") == 0 || index.compare("Fqqid") == 0)
		{
			index = "flag";
		}
		else if(index.compare("Fsign") == 0)
		{
			index = "sign";
		}
		
		cout << "index = " << index << endl;
		mapped_v.insert(pair<string,string>(index,value));
		token = strtok(NULL,"&");
	}

	/*call function,*/
	CallHandleFunction(mapped_v);
}