/** * Format an ElasticSearch request URL prefix: the URL ending with "from=", * ready for the addition of the message index. * * @param purl_pfx The location for the dynamically-allocated URL prefix. * @param curl The CURL handle to escape with. * @param base_url The base URL to request ElasticSearch, without the query * or the fragment parts. * @param query The query string to send to ElastiSearch. * @param size Number of messages to request from ElasticSearch in one * HTTP request. * * @return Global return code. */ static tlog_grc tlog_es_reader_format_url_pfx(char **purl_pfx, CURL *curl, const char *base_url, const char *query, size_t size) { static const char *sort = "id:asc"; tlog_grc grc; char *url_pfx; char *esc_query = NULL; char *esc_sort = NULL; assert(purl_pfx != NULL); assert(curl != NULL); assert(tlog_es_reader_base_url_is_valid(base_url)); assert(query != NULL); assert(size >= TLOG_ES_READER_SIZE_MIN); #define ESC(_token) \ do { \ esc_##_token = curl_easy_escape(curl, _token, 0); \ if (esc_##_token == NULL) { \ grc = TLOG_GRC_FROM(errno, ENOMEM); \ goto cleanup; \ } \ } while (0) ESC(query); ESC(sort); #undef ESC if (asprintf(&url_pfx, "%s?q=%s&fields=&_source&sort=%s&size=%zu&from=", base_url, esc_query, esc_sort, size) < 0) { grc = TLOG_GRC_FROM(errno, ENOMEM); goto cleanup; } *purl_pfx = url_pfx; grc = TLOG_RC_OK; cleanup: if (esc_sort != NULL) { curl_free(esc_sort); } if (esc_query != NULL) { curl_free(esc_query); } return grc; }
static __inline escape_t * find_escape(escape_list *set, int ch) { escape_t *escape; TAILQ_FOREACH(escape, set, entry) { if (ESC(escape) == ch) break; } return (escape); }
int Test_fgetc(void) { uint8_t ch = 0; while (1) { if(ESC(escape)==1) break; } while(DBGU_RxBufferHead == DBGU_RxBufferTail); ch = DBGU_RxBuffer[DBGU_RxBufferTail]; DBGU_RxBufferTail = (DBGU_RxBufferTail + 1) % DBGU_RX_BUFFER_SIZE; if (DBGU_RxBufferHead == DBGU_RxBufferTail) { DBGU_InputReady = 0; escape = 0; } while (USART_GetFlagStatus(USART2, USART_FLAG_TC) == RESET); return ch; }int ESC(int escape)
BOOL CARIB8CharDecode::C0( const BYTE* pbSrc, DWORD* pdwReadSize ) { if( pbSrc == NULL || pdwReadSize == NULL ){ return FALSE; } DWORD dwReadSize = 0; DWORD dwReadBuff = 0; BOOL bRet = TRUE; switch(pbSrc[0]){ case 0x20: //SP 空白 //空白は文字サイズの影響あり if( IsSmallCharMode() == FALSE ){ m_strDecode += " "; }else{ m_strDecode += ' '; } dwReadSize = 1; break; case 0x0D: //APR 改行 m_strDecode += "\r\n"; dwReadSize = 1; break; case 0x0E: //LS1 GLにG1セット m_GL = &m_G1; dwReadSize = 1; break; case 0x0F: //LS0 GLにG0セット m_GL = &m_G0; dwReadSize = 1; break; case 0x19: //SS2 シングルシフト if( SS2( pbSrc+1, &dwReadBuff ) == FALSE ){ return FALSE; } dwReadSize = 1+dwReadBuff; break; case 0x1D: //SS3 シングルシフト if( SS3( pbSrc+1, &dwReadBuff ) == FALSE ){ return FALSE; } dwReadSize = 1+dwReadBuff; break; case 0x1B: //ESC エスケープシーケンス if( ESC( pbSrc+1, &dwReadBuff ) == FALSE ){ return FALSE; } dwReadSize = 1+dwReadBuff; break; default: //未サポートの制御コード if( pbSrc[0] == 0x16 ){ //PAPF dwReadSize = 2; }else if( pbSrc[0] == 0x1C ){ //APS CheckModify(); m_wPosY=m_wCharH*(pbSrc[1]-0x40); m_wPosX=m_wCharW*(pbSrc[2]-0x40); if( m_emStrSize == STR_SMALL || m_emStrSize == STR_MEDIUM ){ m_wPosX=m_wPosX/2; } dwReadSize = 3; }else if( pbSrc[0] == 0x0C ){ //CS dwReadSize = 1; CAPTION_DATA Item; Item.bClear = TRUE; Item.dwWaitTime = m_dwWaitTime*100; if( m_pCaptionList != NULL ){ m_pCaptionList->push_back(Item); } bRet = 2; m_dwWaitTime = 0; }else{ //APB、APF、APD、APU dwReadSize = 1; } break; } *pdwReadSize = dwReadSize; return bRet; }
BOOL CARIB8CharDecode::C0( const BYTE* pbSrc, DWORD dwSrcSize, DWORD* pdwReadSize ) { if( dwSrcSize == 0 ){ return FALSE; } DWORD dwReadSize = 0; DWORD dwReadBuff = 0; m_bSpacing = FALSE; switch(pbSrc[0]){ case 0x20: //SP 背景色空白 m_strDecode += L' '; ActivePositionForward(1); m_bSpacing = TRUE; dwReadSize = 1; break; case 0x0D: //APR 改行 CheckModify(); m_bPosInit = TRUE; m_wPosX = m_wClientX; m_wPosY += GetLineDirSize(); if( m_wPosY >= m_wClientY + m_wClientH ){ m_wPosY = m_wClientY + GetLineDirSize() - 1; } m_wPosStartX = m_wPosX; dwReadSize = 1; break; case 0x0E: //LS1 GLにG1セット m_GL = &m_G1; dwReadSize = 1; break; case 0x0F: //LS0 GLにG0セット m_GL = &m_G0; dwReadSize = 1; break; case 0x19: //SS2 シングルシフト //G2で呼ぶ(マクロ展開を考慮してGLは入れ替えない) if( GL_GR( pbSrc+1, dwSrcSize-1, &dwReadBuff, &m_G2 ) == FALSE ){ return FALSE; } dwReadSize = 1+dwReadBuff; break; case 0x1D: //SS3 シングルシフト //G3で呼ぶ(マクロ展開を考慮してGLは入れ替えない) if( GL_GR( pbSrc+1, dwSrcSize-1, &dwReadBuff, &m_G3 ) == FALSE ){ return FALSE; } dwReadSize = 1+dwReadBuff; break; case 0x1B: //ESC エスケープシーケンス if( ESC( pbSrc+1, dwSrcSize-1, &dwReadBuff ) == FALSE ){ return FALSE; } dwReadSize = 1+dwReadBuff; break; case 0x08: //APB 動作位置後退 { CheckModify(); m_bPosInit = TRUE; WORD wDirX = GetCharDirSize(); if( m_wPosX < m_wClientX + wDirX ){ WORD wDirY = GetLineDirSize(); m_wPosX = m_wClientX + m_wClientW / wDirX * wDirX; if( m_wPosY < m_wClientY + wDirY*2-1 ){ m_wPosY = m_wClientY + (m_wClientH/wDirY+1) * wDirY - 1; } m_wPosY -= wDirY; } m_wPosX -= wDirX; m_wPosStartX = m_wPosX; dwReadSize = 1; } break; case 0x09: //APF 動作位置前進 CheckModify(); ActivePositionForward(1); //文字出力がないのでm_wPosStartXを更新しないと進行に矛盾がおこる m_wPosStartX = m_wPosX; dwReadSize = 1; break; case 0x0A: //APD 動作行前進 CheckModify(); m_bPosInit = TRUE; m_wPosY += GetLineDirSize(); if( m_wPosY >= m_wClientY + m_wClientH ){ m_wPosY = m_wClientY + GetLineDirSize() - 1; } m_wPosStartX = m_wPosX; dwReadSize = 1; break; case 0x0B: //APU 動作行後退 { CheckModify(); m_bPosInit = TRUE; WORD wDirY = GetLineDirSize(); if( m_wPosY < m_wClientY + wDirY*2-1 ){ m_wPosY = m_wClientY + (m_wClientH/wDirY+1) * wDirY - 1; } m_wPosY -= wDirY; m_wPosStartX = m_wPosX; dwReadSize = 1; } break; case 0x16: //PAPF 指定動作位置前進 if( dwSrcSize < 2 ){ return FALSE; } CheckModify(); ActivePositionForward(pbSrc[1] - 0x40); m_wPosStartX = m_wPosX; dwReadSize = 2; break; case 0x1C: //APS 動作位置指定 if( dwSrcSize < 3 ){ return FALSE; } CheckModify(); m_bPosInit = TRUE; //動作位置基準点は左下なので1行前進しておく(参考:mark10als) m_wPosY = m_wClientY + GetLineDirSize() * (pbSrc[1] - 0x40 + 1) - 1; m_wPosX = m_wClientX + GetCharDirSize() * (pbSrc[2] - 0x40); m_wPosStartX = m_wPosX; dwReadSize = 3; break; case 0x0C: //CS { dwReadSize = 1; CheckModify(); CAPTION_DATA Item; Item.bClear = TRUE; Item.dwWaitTime = m_dwWaitTime; m_pCaptionList->push_back(Item); m_wSWFMode = m_wInitSWFMode; InitCaption(); } break; default: dwReadSize = 1; break; } *pdwReadSize = dwReadSize; //DEBUG_OUT(pbSrc[0]==0x0E ? TEXT(__FUNCTION__) TEXT("(): GL<-G1\n") : // pbSrc[0]==0x0F ? TEXT(__FUNCTION__) TEXT("(): GL<-G0\n") : NULL); return TRUE; }