|  | @@ -6,3 +6,88 @@
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  // TODO: 在 STDAFX.H 中
 | 
	
		
			
				|  |  |  // 引用任何所需的附加头文件,而不是在此文件中引用
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +bool parse_key(std::string &value, TCHAR *lpszBuffer, TCHAR *lpszText)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	TCHAR szText[MAX_PATH] = {0};
 | 
	
		
			
				|  |  | +	TCHAR szValue[MAX_PATH] = {0};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	if ( 2 == _stscanf_s(lpszBuffer, _T("%[^=]=%s"), szText, MAX_PATH, szValue, MAX_PATH) )
 | 
	
		
			
				|  |  | +	{
 | 
	
		
			
				|  |  | +		if ( _tcsstr(szText, lpszText) )
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			value = szValue;
 | 
	
		
			
				|  |  | +			return true;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return false;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +int parse_cmd_param_from_file(char *file_name)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	char buf[256];
 | 
	
		
			
				|  |  | +	TCHAR name[MAX_PATH] = {0};
 | 
	
		
			
				|  |  | +	TCHAR head[MAX_PATH] = {0};
 | 
	
		
			
				|  |  | +	TCHAR code[MAX_PATH] = {0};
 | 
	
		
			
				|  |  | +	TCHAR mark[MAX_PATH] = {0};
 | 
	
		
			
				|  |  | +	TCHAR multicode[MAX_PATH] = {0};
 | 
	
		
			
				|  |  | +	TCHAR cmd_wait_time[MAX_PATH] = {0};
 | 
	
		
			
				|  |  | +	TCHAR read_wait_time[MAX_PATH] = {0};
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	int ret = -1;
 | 
	
		
			
				|  |  | +	FILE *fp = NULL;
 | 
	
		
			
				|  |  | +	
 | 
	
		
			
				|  |  | +	if(!file_name)
 | 
	
		
			
				|  |  | +		return ret;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	fp = fopen(file_name, "r");
 | 
	
		
			
				|  |  | +	if(!fp)
 | 
	
		
			
				|  |  | +		goto EXIT;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	while((fgets((char*)buf, MAX_PATH, fp) != NULL)) {
 | 
	
		
			
				|  |  | +		int tmp_len = 0;
 | 
	
		
			
				|  |  | +		unsigned short keycode = 0;
 | 
	
		
			
				|  |  | +		unsigned int protocol = 0;
 | 
	
		
			
				|  |  | +		unsigned int scancode = 0;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		tmp_len = strlen((char*)buf);
 | 
	
		
			
				|  |  | +		if(tmp_len >= 1) {
 | 
	
		
			
				|  |  | +			if (buf[tmp_len - 1] == '\r' || buf[tmp_len - 1] == '\n')
 | 
	
		
			
				|  |  | +				buf[tmp_len - 1] = 0;
 | 
	
		
			
				|  |  | +			if(tmp_len >= 2) {
 | 
	
		
			
				|  |  | +				if(buf[tmp_len - 2] == '\r' || buf[tmp_len - 2] == '\n')
 | 
	
		
			
				|  |  | +					buf[tmp_len - 2] = 0;
 | 
	
		
			
				|  |  | +			} 
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		// 先去除空格;
 | 
	
		
			
				|  |  | +		//std::string strline = buf;
 | 
	
		
			
				|  |  | +		// strline.erase(std::remove_if(strline.begin(), strline.end(), [](unsigned char x){return std::isspace(x); }), strline.end()); //C++17
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#if _MSC_VER >= 1500 
 | 
	
		
			
				|  |  | +		//if ( sscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, MAX_PATH, head, MAX_PATH, code, MAX_PATH, mark, MAX_PATH, multicode, MAX_PATH, cmd_wait_time, MAX_PATH, read_wait_time, MAX_PATH) == 7)
 | 
	
		
			
				|  |  | +		if ( sscanf_s(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%s", name, MAX_PATH, head, MAX_PATH, code, MAX_PATH, mark, MAX_PATH, multicode, MAX_PATH, cmd_wait_time, MAX_PATH, read_wait_time, MAX_PATH) == 7)
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +#if _MSC_VER < 1500 
 | 
	
		
			
				|  |  | +		if ( sscanf(buf, "%[^;];%[^;];%[^;];%[^;];%[^;];%[^;];%[^;]", name, head, code, mark, multicode, cmd_wait_time, read_wait_time) == 7)
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			CommandParam cp;
 | 
	
		
			
				|  |  | +			parse_key(cp.name, name, _T("Name"));
 | 
	
		
			
				|  |  | +			parse_key(cp.head, head, _T("HeadCode"));
 | 
	
		
			
				|  |  | +			parse_key(cp.code, code, _T("Command"));
 | 
	
		
			
				|  |  | +			parse_key(cp.mark, mark, _T("CMDParam"));
 | 
	
		
			
				|  |  | +			std::string value;
 | 
	
		
			
				|  |  | +			parse_key(value, multicode, _T("MultiParams"));
 | 
	
		
			
				|  |  | +			parse_key(value, cmd_wait_time, _T("ReadWaitTime"));
 | 
	
		
			
				|  |  | +			parse_key(value, read_wait_time, _T("CMDWaitTime"));
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	ret = 0;
 | 
	
		
			
				|  |  | +EXIT:
 | 
	
		
			
				|  |  | +	if(fp)
 | 
	
		
			
				|  |  | +		fclose(fp);
 | 
	
		
			
				|  |  | +	return ret;
 | 
	
		
			
				|  |  | +}
 |