//ConcoleInterface.cpp

#include <stdio.h>
#include <stdarg.h>
#include <time.h>
#include <string.h>

#include "Interface.h"
#include "glodef.h"

/******************************FUNCTION*COMMENT***********************************
*F
*F 函数名称            : inputCommand
*F
*F 函数类型            : bool
*F
*F 函数返回值          :
*F     如果找到需要参数格式并正确读出返回true，否则返回
*F     false
*F
*F 函数参数            :
*F     const char* p_strFormat  参数格式，如"-c=%d"，读入一个整型数;参数可以是单独的没有格式控制的串_shl
*F     void* p_pValue  读取参数的缓存
*F
*F 函数描述            :
*F     本函数从命令行参数中搜索指定格式的参数数据。搜索
*F     从第一个命令行参数开始，到第一个符合指定格式的数
*F     据为止。
*F
*F*******************************************************************************/
bool inputCommand(const char* p_strFormat,void* p_pValue, int p_nArgc,char** p_ppcArgv)
{
	for(int n1=0;n1<p_nArgc;n1++)
	{
		if(strcmp(p_strFormat,p_ppcArgv[n1])==0)
		{
			return true;
		}
		else
		if(sscanf(p_ppcArgv[n1],p_strFormat,p_pValue)==1)
		{
			// 2007-08-11 Zhijian: 解决输入字符串%s时的空格问题, e.g. 命令行 -filename="my file.txt"
			if ( (p_strFormat[strlen(p_strFormat)-2]=='%')&&(p_strFormat[strlen(p_strFormat)-1]=='s') )
				strcpy((char*)p_pValue, p_ppcArgv[n1]+strlen(p_strFormat)-2);
			
			return true;
		}
	}

	return false;
}
/******************************FUNCTION*COMMENT***********************************
*F
*F 函数名称            : outputPrompt
*F
*F 函数类型            : void
*F
*F 函数返回值          :
*F     无返回值
*F
*F 函数参数            :
*F     const char* p_pMessage    格式控制符,同printf
*F
*F 函数描述            :
*F     输出提示信息.
*F
*F*******************************************************************************/
void outputPrompt(const char* p_pMessage,...)
{
	char strBuffer[TS_SENTENCE_LEN];
	va_list vaParams;
	va_start(vaParams,p_pMessage);

	_vsnprintf(strBuffer,TS_SENTENCE_LEN,p_pMessage,vaParams);
	
	printf("%s",strBuffer);
		
	return;
}

static FILE *l_pfileResult=0;


/******************************FUNCTION*COMMENT***********************************
*F
*F 函数名称            : outputOpenResultFile
*F
*F 函数类型            : void
*F
*F 函数返回值          :
*F     无返回值
*F
*F 函数参数            :
*F     bool p_bAppend                文件打开方式,true表示追加方式,false表示新建方式
*F
*F 函数描述            :
*F     指定LOG文件名和打开方式.
*F
*F*******************************************************************************/
void outputOpenResultFile(bool p_bAppend)
{
	if(l_pfileResult!=NULL)
		fclose(l_pfileResult);

		char pathFileName[Max_Path_Len];
		strcpy(pathFileName,"TextFilter_debug.log");
		//char* pc=strchr(pathFileName,'.');
		//if(pc!=NULL)
		//	*pc=0;
		//strcat(pathFileName,".log");

	if(p_bAppend)
		l_pfileResult=fopen(pathFileName,"at");
	else
		l_pfileResult=fopen(pathFileName,"wt");

	return;
}

/******************************FUNCTION*COMMENT***********************************
*F
*F 函数名称            : outputCloseResultFile
*F
*F 函数类型            : void
*F
*F 函数返回值          :
*F     无返回值
*F
*F 函数参数            :
*F     无参数
*F
*F 函数描述            :
*F     关闭LOG文件
*F
*F*******************************************************************************/
void outputCloseResultFile()
{
	if(l_pfileResult!=NULL)
		fclose(l_pfileResult);

	l_pfileResult=NULL;

	return;
}

/******************************FUNCTION*COMMENT***********************************
*F
*F 函数名称            : outputResult
*F
*F 函数类型            : void
*F
*F 函数返回值          :
*F     无返回值
*F
*F 函数参数            :
*F     const char* p_pMessage    格式控制符,同printf
*F
*F 函数描述            :
*F     输出结果信息.
*F
*F*******************************************************************************/
void outputResult(const char* p_pMessage,...)
{
	char strBuffer[TS_SENTENCE_LEN];
	va_list vaParams;
	va_start(vaParams,p_pMessage);

	time_t localtime;
	char *ltime;
	localtime=time(NULL);
	
	_vsnprintf(strBuffer,TS_SENTENCE_LEN,p_pMessage,vaParams);
	//printf("%s",strBuffer);
		
	if(l_pfileResult==NULL)
		outputOpenResultFile(false);

	if (l_pfileResult!=NULL)
	{
		ltime=ctime(&localtime);
		ltime[strlen(ltime)-1]='\t';
		fprintf(l_pfileResult,ltime);
		fprintf(l_pfileResult,"%s",strBuffer);
		fflush(l_pfileResult);
	}

	return;
}
