pll_entry lexer_parse_brwords(pll_entry tokens, plinkedlist* list) { *list = ll_new(); ptoken t = GETTKN(tokens); char even = 0; CHECK_TOKEN(t, TOKEN_BRSTART); tokens = NEXTTKN(tokens); t = GETTKN(tokens); while(t->base.type != TOKEN_BREND) { if(!even) { CHECK_TOKEN(t, TOKEN_WORD); ll_push(*list, t->string); } else CHECK_TOKEN(t, TOKEN_COMMA); even = !even; tokens = NEXTTKN(tokens); t = GETTKN(tokens); } return tokens; }
XnStatus PrimeClient::RunPresetFile(const XnChar* strFileName) { XnStatus nRetVal = XN_STATUS_OK; xnLogVerbose(XN_MASK_PRIME_CLIENT, "Executing preset file '%s'...", strFileName); // Check that file exists XnBool bFileExists; nRetVal = xnOSDoesFileExist(strFileName, &bFileExists); XN_IS_STATUS_OK(nRetVal); if (!bFileExists) { xnLogError(XN_MASK_PRIME_CLIENT, "File '%s' does not exist", strFileName); return XN_STATUS_OS_FILE_NOT_FOUND; } FILE* pFile = fopen(strFileName, "r"); XN_ASSERT(pFile != NULL); XnChar strLine[1024]; // read header if (NULL == fgets(strLine, sizeof(strLine), pFile)) { xnLogError(XN_MASK_PRIME_CLIENT, "File '%s' is empty - no header", strFileName); return XN_STATUS_ERROR; } XnUInt32 nAddress; XnUInt32 nValue; XnUInt8 nBitOffset; XnUInt8 nBitWidth; for (;;) { // read a line if (NULL == fgets(strLine, sizeof(strLine), pFile)) { // end of file reached break; } // skip empty lines if (xnOSStrCmp(strLine, "\n") == 0 || xnOSStrCmp(strLine, "\r\n") == 0) { continue; } // block name XnChar* pToken = strtok(strLine, ","); CHECK_TOKEN(pToken, strLine, pFile); // reg name pToken = strtok(NULL, ","); CHECK_TOKEN(pToken, strLine, pFile); // Address pToken = strtok(NULL, ","); CHECK_TOKEN(pToken, strLine, pFile); sscanf(pToken, "0x%x", &nAddress); // field name pToken = strtok(NULL, ","); CHECK_TOKEN(pToken, strLine, pFile); // bit offset pToken = strtok(NULL, ","); CHECK_TOKEN(pToken, strLine, pFile); nBitOffset = (XnUInt8)atoi(pToken); // bit width pToken = strtok(NULL, ","); CHECK_TOKEN(pToken, strLine, pFile); nBitWidth = (XnUInt8)atoi(pToken); // value pToken = strtok(NULL, ","); CHECK_TOKEN(pToken, strLine, pFile); sscanf(pToken, "0x%x", &nValue); // execute nRetVal = WriteAHB(nAddress, nValue, nBitOffset, nBitWidth); if (nRetVal != XN_STATUS_OK) { fclose(pFile); return nRetVal; } } fclose(pFile); xnLogInfo(XN_MASK_PRIME_CLIENT, "Preset file '%s' was executed", strFileName); return (XN_STATUS_OK); }