Exemple #1
0
/**
 * 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;
}
Exemple #2
0
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);
}
Exemple #3
0
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)
Exemple #4
0
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;
}