|
@@ -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;
|
|
|
+}
|