Ejemplo n.º 1
0
/*****************************************************************************
 * FUNCTION
 *  mmi_vt_make_video_call
 * DESCRIPTION
 *  Make video call
 *  This function is exported to UCM
 * PARAMETERS
 *  strNumber       [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_vt_make_video_call(S8 *strNumber)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if ((GetExitScrnID() == SCR_ID_VT_INCALL) || (IsScreenPresent(SCR_ID_VT_INCALL)))
    {
        /* camera status should be set before entering vt incall screen */
    }
    else
    {
        if (g_vt_p->setting.dial_mode == MMI_VT_DIAL_MODE_STOP_CAMERA)
        {
            mmi_vt_set_camera_status(MMI_FALSE);
        }
        else
        {
            mmi_vt_set_camera_status(MMI_TRUE);
        }
    }
    
    mmi_ucs2ncpy((S8*)g_vt_p->mo_info.dial_pad_buffer, (S8*)strNumber, MMI_UCM_MAX_NUM_URI_LEN);    
    MakeCallEx(strNumber, FALSE, CSMCC_VIDEO_CALL);
}
Ejemplo n.º 2
0
/*****************************************************************************
 * FUNCTION
 *  srv_ctm_med_send_text_req
 * DESCRIPTION
 *  
 * PARAMETERS
 *  text        [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void srv_ctm_med_send_text_req(CHAR* text)
{
#ifndef __CTM_DEBUG
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    media_ctm_send_text_req_struct *param;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    MMI_TRACE(MMI_COMMON_TRC_G5_CALL, FUNC_SRV_CTM_MED_SEND_TEXT_REQ);

    ClearInputEventHandler(MMI_DEVICE_ALL);

    param = OslAllocDataPtr(media_ctm_send_text_req_struct);
    param->num_of_char = mmi_ucs2strlen(text);
    mmi_ucs2ncpy((CHAR*)param->text, text, CTM_SEND_TEXT_CHAR_MAX_NUM);

    SetProtocolEventHandler(srv_ctm_phdlr_send_text_rsp, MSG_ID_MEDIA_CTM_SEND_TEXT_CNF);
    mmi_frm_send_ilm(MOD_MED, MSG_ID_MEDIA_CTM_SEND_TEXT_REQ, (oslParaType*)param, NULL);

#else /* __CTM_DEBUG */ 
    StartTimer(CM_NOTIFYDURATION_TIMER, 2000, (FuncPtr) srv_ctm_phdlr_send_text_rsp);
#endif /* __CTM_DEBUG */ 
}
Ejemplo n.º 3
0
/*****************************************************************************
 * FUNCTION
 *  CBackCallDeflectNumberFromPB
 * DESCRIPTION
 *  Call deflect function specific for phonebook
 * PARAMETERS
 *  number      [IN]        
 * RETURNS
 *  void
 *****************************************************************************/
void CBackCallDeflectNumberFromPB(PS8 number)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    memset(g_ucm_p->mo_info.dial_pad_buffer, 0x00, sizeof(g_ucm_p->mo_info.dial_pad_buffer));
    mmi_ucs2ncpy((S8*)g_ucm_p->mo_info.dial_pad_buffer, (S8*)number, MMI_UCM_MAX_NUM_URI_LEN);
    mmi_ucm_deflect();   
}
Ejemplo n.º 4
0
S32 mmi_rmgr_get_alias_item(S32 start_index, gui_iconlist_menu_item *menu_data, S32 data_size)
{
	/*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
	kal_wchar *ptr;
    kal_int32 result;
	S32 index =0;
    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
	for (index = 0; index < data_size; index++)
	{
		result = DRM_get_ro_list((start_index+index), (char *)&ro_alias[0], SRV_FMGR_PATH_MAX_FILE_NAME_LEN * ENCODING_LENGTH,DRM_DB_GET_VALID);
		if (result < 0)
		{
			return index;
		}
		menu_data[index].image_list[0] = get_image(IMG_ID_RMGR_UNLOCK);
		mmi_ucs2ncpy((S8 *)menu_data[index].item_list[0], (const S8 *)&ro_alias[0], MAX_SUBMENU_CHARACTERS);
		ptr = app_ucs2_strstr(menu_data[index].item_list[0] + (app_ucs2_strlen((kal_int8 *)menu_data[index].item_list[0]) - 4), (kal_wchar *)L".mp3");

		if (ptr)
		{
			*ptr = 0;
		}

		ptr = app_ucs2_strstr(menu_data[index].item_list[0] + (app_ucs2_strlen((kal_int8 *)menu_data[index].item_list[0]) - 4), (kal_wchar *)L".mp2");

		if (ptr)
		{
			*ptr = 0;
		}
	}
	return data_size;
}
Ejemplo n.º 5
0
/*****************************************************************************
 * FUNCTION
 *  jma_audio_recorder_set_record_location
 * DESCRIPTION
 *  The function sets record location
 * PARAMETERS
 *  mma_type          [IN]
 *  java_recorder       [IN]
 *  path          [?]
 * RETURNS
 *  int - 0
 *****************************************************************************/
kal_bool jma_mvm_audio_recorder_set_record_location(kal_int32 vm_id, kal_int32 java_recorder, kal_char *path)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    kal_int32 file_handle;
    kal_int32 result, length;
    kal_wchar *ext_name;
    kal_char *file_name;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    kal_trace(TRACE_GROUP_4, FUNC_J2ME_JMA_MVM_AUDIO_RECORDER_SET_RECORD_LOCATION, vm_id, java_recorder, audio_recorder[vm_id].state);
    JMA_CS_ENTER(vm_id, KAL_FALSE);

    if (audio_recorder[vm_id].id != java_recorder)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_RESOURCE_ERROR, audio_recorder[vm_id].id);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    mmi_ucs2ncpy((PS8) audio_recorder[vm_id].filename, (PS8) path, J2ME_PATH_BUFFER_SIZE);

    length = mmi_ucs2strlen((S8*) audio_recorder[vm_id].filename);
    if (length < 4)
    {
        JMA_CS_LEAVE(KAL_FALSE);
    }

    /* Drive name can not equal to SYSTEM DRIVE */
    if ((int)audio_recorder[vm_id].filename[0] == SRV_FMGR_SYSTEM_DRV)
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    /* assign format */
    ext_name = &audio_recorder[vm_id].filename[length - 4];
    if (kal_wstrcmp(ext_name, L".amr") == 0 || kal_wstrcmp(ext_name, L".AMR") == 0)
    {
        audio_recorder[vm_id].format = MED_TYPE_AMR;
    }
    else if (kal_wstrcmp(ext_name, L".wav") == 0 || kal_wstrcmp(ext_name, L".WAV") == 0)
    {
        audio_recorder[vm_id].format = MED_TYPE_WAV;
    }
#if defined (AMRWB_ENCODE)
    else if (kal_wstrcmp(ext_name, L".awb") == 0 || kal_wstrcmp(ext_name, L".AWB") == 0)
    {
        audio_recorder[vm_id].format = MED_TYPE_AMR_WB;
    }
#endif
#if defined (__VORBIS_ENCODE__)
    else if (kal_wstrcmp(ext_name, L".ogg") == 0 || kal_wstrcmp(ext_name, L".OGG") == 0)
    {
        audio_recorder[vm_id].format = MED_TYPE_VORBIS;
    }
#endif
    else
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
        JMA_CS_LEAVE(KAL_FALSE);
    }

    kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, audio_recorder[vm_id].format);
    /* Check if valid file path and delete the file */
    result = FS_GetDevStatus(audio_recorder[vm_id].filename[0], FS_MOUNT_STATE_ENUM);
    if (result == FS_NO_ERROR)
    {
        /* Check if valid file name */
        file_name = kal_dchar_strrchr((S8*) audio_recorder[vm_id].filename, '\\');

        if (file_name)
        {
            file_name += 2;
            if (!srv_fmgr_path_is_filename_valid((const WCHAR*)file_name))
            {
                kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
                JMA_CS_LEAVE(KAL_FALSE);
            }
            /* File name can not start with space: FS API restriction */
            if (*file_name == ' ' && *(file_name + 1) == 0)
            {
                kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
                JMA_CS_LEAVE(KAL_FALSE);
            }
        }
        else /* Do not contain '\\' */
        {
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
            JMA_CS_LEAVE(KAL_FALSE);
        }

        /* Check if dir exist or if valid dir */
        *((kal_int16*)file_name) = 0;
        file_handle = FS_Open(audio_recorder[vm_id].filename, FS_OPEN_DIR | FS_READ_ONLY);
        if (file_handle > 0)
        {
            FS_Close(file_handle);
        }
        else
        {
            kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
            JMA_CS_LEAVE(KAL_FALSE);
        }

        /* Copy again to repair audio_recorder.filename */
        mmi_ucs2ncpy((PS8) audio_recorder[vm_id].filename, (PS8) path, J2ME_PATH_BUFFER_SIZE);

        /* Check if file exist */
        file_handle = FS_Open(audio_recorder[vm_id].filename, FS_READ_ONLY);
        if (file_handle > 0)
        {
            result = FS_Close(file_handle); /* need to close file before delete */
            result = FS_Delete(audio_recorder[vm_id].filename);
            if (result != FS_NO_ERROR)
            {
                kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, result);
                JMA_CS_LEAVE(KAL_FALSE);
            }
        }

        JMA_CS_LEAVE(KAL_TRUE);
    }
    else
    {
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_MARKER_FAIL);
        kal_trace(TRACE_GROUP_4, INFO_J2ME_MMA_D, result);
        JMA_CS_LEAVE(KAL_FALSE);
    }

}
Ejemplo n.º 6
0
/*****************************************************************************
 * FUNCTION
 *  mmi_brw_service_inbox_list_get_item
 * DESCRIPTION
 *  Item call back function for dynamic list of push messages
 * PARAMETERS
 *  item_index          [IN]
 *  str_buff            [IN]
 *  img_buff_p          [IN]
 *  str_img_mask        [IN]
 * RETURNS
 *  void
 *****************************************************************************/
pBOOL mmi_brw_service_inbox_list_get_item(S32 item_index, UI_string_type str_buff, PU8 *img_buff_p, U8 str_img_mask)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    struct tm expiry_timestamp = {0};
    U64 expiry_secs_since_1970 = {0};
    U64 current_secs_since_1970 = {0};
    U32 rcvd_message_href_len = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if ((item_index < 0) || (item_index > g_mmi_brw_push_cntx.max_push_messages))
    {
        return FALSE;
    }

    /* Edited by Vivek - 5th july 2006 */
    if (g_mmi_brw_push_cntx.service_msg_list_p[item_index]->service_flag == SERVICE_INDICATION)
    {
        if ((NULL == g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pmMessage) ||
                !mmi_ucs2strlen((S8*) g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pmMessage))
        {
            rcvd_message_href_len = mmi_ucs2strlen((S8*) g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pmHref);
            if (rcvd_message_href_len > MAX_SUBMENU_CHARACTERS - 1)
            {
                mmi_ucs2ncpy(
                    (S8*) str_buff,
                    (S8*) g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pmHref,
                    MAX_SUBMENU_CHARACTERS - 3);
                mmi_ucs2cat((S8*) str_buff, ".\0.\0.\0");
            }
            else
            {
                mmi_ucs2cpy((S8*) str_buff, (S8*) g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pmHref);
            }
        }
        else
        {
            rcvd_message_href_len = mmi_ucs2strlen((S8*) g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pmMessage);
            if (rcvd_message_href_len > MAX_SUBMENU_CHARACTERS - 1)
            {
                mmi_ucs2ncpy(
                    (S8*) str_buff,
                    (S8*) g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pmMessage,
                    MAX_SUBMENU_CHARACTERS - 3);
                mmi_ucs2cat((S8*) str_buff, ".\0.\0.\0");
            }
            else
            {
                mmi_ucs2cpy((S8*) str_buff, (S8*) g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pmMessage);
            }
        }
    }
    else if (g_mmi_brw_push_cntx.service_msg_list_p[item_index]->service_flag == SERVICE_LOADING)
    {
        rcvd_message_href_len = mmi_ucs2strlen((S8*) g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pmHref);
        if (rcvd_message_href_len > MAX_SUBMENU_CHARACTERS - 1)
        {
            mmi_ucs2ncpy(
                (S8*) str_buff,
                (S8*) g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pmHref,
                MAX_SUBMENU_CHARACTERS - 3);
            mmi_ucs2cat((S8*) str_buff, ".\0.\0.\0");
        }
        else
        {
            mmi_ucs2cpy((S8*) str_buff, (S8*) g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pmHref);
        }
    }
    else
    {
        /* ERROR */
    }

    /* Expiry time is to be calculated in case of SI to display expired message in case of expired message */
    if (g_mmi_brw_push_cntx.service_msg_list_p[item_index]->service_flag == SERVICE_INDICATION)
    {
        if (g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pSIExpires != NULL)
        {
            expiry_timestamp.tm_mon = g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pSIExpires->month - 1;        /* month scale to 0 to 11 */
            expiry_timestamp.tm_year = g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pSIExpires->year - 1900;     /* offset since 1900 */
            expiry_timestamp.tm_mday = g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pSIExpires->day;
            expiry_timestamp.tm_hour = g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pSIExpires->hour;
            expiry_timestamp.tm_min = g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pSIExpires->minute;
            expiry_timestamp.tm_sec = g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pSIExpires->seconds;

            /* Get difference of seconds of expiry time from 1970 (as per UTC standard) */
            expiry_secs_since_1970 = (time_t) mktime(&expiry_timestamp);
            /* Get difference of seconds of current time from 1970 (as per UTC standard) */
            current_secs_since_1970 = get_current_utc_time();
        }

        /* Show icon depending on whether it is read,unread,read but expired and unread but expired */
        if (g_mmi_brw_push_cntx.service_msg_list_p[item_index]->bIsRead == 0)
        {
            if ((expiry_secs_since_1970 > current_secs_since_1970) ||
                    (g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pSIExpires == NULL))
            {
                *img_buff_p = get_image(IMG_ID_BRW_PUSH_UNREAD);
            }
            else
            {
                *img_buff_p = get_image(IMG_ID_BRW_PUSH_EXPIRED_UNREAD);
            }
        }
        else
        {
            if ((expiry_secs_since_1970 > current_secs_since_1970) ||
                    (g_mmi_brw_push_cntx.service_msg_list_p[item_index]->pSIExpires == NULL))
            {
                *img_buff_p = get_image(IMG_ID_BRW_PUSH_READ);
            }
            else
            {
                *img_buff_p = get_image(IMG_ID_BRW_PUSH_EXPIRED_READ);
            }
        }
    }
    else if (g_mmi_brw_push_cntx.service_msg_list_p[item_index]->service_flag == SERVICE_LOADING)
    {
        if (g_mmi_brw_push_cntx.service_msg_list_p[item_index]->bIsRead == 0)
        {
            *img_buff_p = get_image(IMG_ID_BRW_PUSH_UNREAD);
        }
        else
        {
            *img_buff_p = get_image(IMG_ID_BRW_PUSH_READ);
        }
    }
    else
    {
        /* error */
    }

    return TRUE;
}
Ejemplo n.º 7
0
Archivo: BIDI.c Proyecto: 12019/mtktest
/*****************************************************************************
 * FUNCTION
 *  bidi_main
 * DESCRIPTION
 *  fill the string buffer to bidirectional algorithm
 * PARAMETERS
 *  logicalStr              [IN]        Input string for bidi
 *  logicalStrLen           [IN]        String length of input string
 *  logicalCurPos           [IN]        Current cursor position of input string
 *  visualStr               [OUT]       Final output string from bidi algorithm
 *  visualStrLen            [OUT]       String length of final output string
 *  visualCurPos            [OUT]       Cursor position of final output string
 *  fSwap                   [IN]        If true, then reserse the string after apply bidi algorithm
 *  inputMode               [IN]        
 *  logicalHilightStart     [IN]        Word hilight start position of input string
 *  logicalHilightEnd       [IN]        Word hilight end position of input string
 *  visualHilightStart      [OUT]       Word hilight start position of output string
 *  visualHilightEnd        [OUT]       Word hilight end position of output string
 * RETURNS
 *  void
 *****************************************************************************/
void bidi_main(
        U8 *logicalStr,
        U16 logicalStrLen,
        U16 logicalCurPos,
        U8 *visualStr,
        U16 *visualStrLen,
        U16 *visualCurPos,
        pBOOL fSwap,
        U8 inputMode,
        U16 logicalHilightStart,
        U16 logicalHilightEnd,
        U16 *visualHilightStart,
        U16 *visualHilightEnd)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/

    U8 paragraphEmbeddingLevel = 0;

#if BIDI_CONSIDER_DIFF_INPUT_METHOD_BEHAVIOR
    U8 lastType;
    pBOOL flag = FALSE;
#endif /* BIDI_CONSIDER_DIFF_INPUT_METHOD_BEHAVIOR */ 
    pBOOL bCheckFlag;
    S16 iCount, nParaCount = 0;
    U8 *pInputType = input_types;
    U8 *pInputLevels = input_levels;
    U8 *pDestLevels = dest_levels;
    U8 *pDestTypes = dest_types;
    U8 *pLogicalBuffer = localLogicalBuffer;
    U8 *pVisualBuffer = visualStr;
    U16 mark;

    /* START TARUN PMT 20050202 */
    U8 newLineflag = 0;

    /* END TARUN PMT 20050202 */
    U8 testHilighOneCharFlag = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    memset(input_types, 0,sizeof(input_types));
    memset(input_levels, 0,sizeof(input_levels));
    memset(dest_levels, 0,sizeof(dest_levels));
    memset(dest_types, 0,sizeof(dest_types));
    memset(localLogicalBuffer, 0,sizeof(localLogicalBuffer));

    if (logicalStrLen == 0)
    {
        /* *visualCurPos = 0; */
        *visualCurPos = 0xFFFF;
        *visualStr = 0;
        *(visualStr + 1) = 0;
        *visualStrLen = 0;
        *visualHilightStart = 0;
        *visualHilightEnd = 0;
        return;
    }

    if (logicalCurPos != 0xFFFF)
    {
        if (logicalCurPos < logicalHilightEnd)
        {
            logicalCurPos = logicalHilightEnd;
        }
        if (logicalHilightStart > logicalHilightEnd)
        {
            logicalHilightStart = logicalHilightEnd;
        }
    }


/*PMT IRE START*/
/*removed unwanted code*/
/*PMT IRE END*/
    mmi_ucs2ncpy((S8*) localLogicalBuffer, (const S8*)logicalStr, (U32) logicalStrLen);

#if BIDI_CONSIDER_DIFF_INPUT_METHOD_BEHAVIOR
    if (inputMode == BIDI_R)
    {
        bidi_get_char_type((U8*) & localLogicalBuffer[(logicalStrLen - 1) * BIDI_ENCODING_LENGTH], (U8*) & lastType);
        if (lastType == WS)
        {
            localLogicalBuffer[(logicalStrLen - 1) * BIDI_ENCODING_LENGTH] = 0;
            localLogicalBuffer[(logicalStrLen - 1) * BIDI_ENCODING_LENGTH + 1] = 0;
            if (logicalCurPos == logicalStrLen)
            {
                flag = TRUE;
                logicalCurPos--;
            }
            logicalStrLen--;
        }

        set_bidi_cursor_pos((U8*) localLogicalBuffer, logicalCurPos, (U16) CURSOR_MARK);

        logicalStrLen = (U16) mmi_ucs2strlen((const S8*)localLogicalBuffer);

        set_bidi_cursor_pos((U8*) localLogicalBuffer, logicalStrLen, (U16) LAST_MARK);
    }
    else
#endif /* BIDI_CONSIDER_DIFF_INPUT_METHOD_BEHAVIOR */ 
    {
        if (logicalCurPos != 0xFFFF)
        {
            set_bidi_cursor_pos((U8*) localLogicalBuffer, logicalCurPos, (U16) CURSOR_MARK);
        }
    }

    set_bidi_cursor_pos((U8*) localLogicalBuffer, logicalHilightEnd, (U16) SECOND_HIGHLT);
    set_bidi_cursor_pos((U8*) localLogicalBuffer, (U16) (logicalHilightStart), (U16) FIRST_HIGHLT);

    mmi_ucs2cpy((S8*) visualStr, (const S8*)localLogicalBuffer);
    logicalStrLen = get_direction_codes((U8*) input_types, (U8*) localLogicalBuffer, 0);

    iCount = 0;

    while (iCount < logicalStrLen)
    {
        bCheckFlag = FALSE;
        nParaCount = identify_paragraphs(pInputType, (U16) (logicalStrLen - iCount), &bCheckFlag);
        if (logicalCurPos < nParaCount)
        {
            newLineflag = 1;
        }
        copy_direction_codes(pDestTypes, pInputType, (U16) nParaCount);
        if (bCheckFlag)
        {
            pDestTypes[nParaCount] = 0;
            pInputType[nParaCount] = 0;
            if (pInputType[nParaCount - 1] == BIDI_B)
            {
                pDestTypes[nParaCount - 1] = 0;
                pInputType[nParaCount - 1] = 0;
            }
        }

        /*----------------------------------------------------------------*/
        /* We use bidi_main line by line, so we can't get the paragraph   */
        /* embedding level from the current line.                         */
        /* Now change to set the paragraph embedding                      */
        /* level by the flag: fSwap.                                       */
        /*----------------------------------------------------------------*/
        /* paragraphEmbeddingLevel = get_para_embedding_level(pInputType, nParaCount); */
        paragraphEmbeddingLevel = (fSwap == 1) ? 1 : 0;
        set_dest_levels(0, nParaCount, paragraphEmbeddingLevel, pDestLevels);

        get_run_level(nParaCount, paragraphEmbeddingLevel, pDestLevels, pDestTypes);
        resolve_lines(paragraphEmbeddingLevel, pVisualBuffer, nParaCount, TRUE, pDestTypes, pDestLevels);

        if (bCheckFlag)
        {
            nParaCount++;
        }
        pInputType += nParaCount;
        pInputLevels += nParaCount;
        pDestLevels += nParaCount;
        pDestTypes += nParaCount;
        pLogicalBuffer += nParaCount * 2;
        pVisualBuffer += nParaCount * 2;
        iCount += nParaCount;
    }

    *visualStrLen = (U16) mmi_ucs2strlen((const S8*)visualStr);

    if (fSwap)
    {
        bidi_reverse((U8*) visualStr, *visualStrLen);
    }

    *visualCurPos = 0xFFFF;
    /* START Changed by YOGESH PMT 20050912 */
    while (find_mark(visualStr, *visualStrLen, &mark, (U16*) & iCount))
        /* END YOGESH PMT 20050912 */
    {
        switch (mark)
        {
            case LAST_MARK:
            case CURSOR_MARK:
        #if BIDI_CONSIDER_DIFF_INPUT_METHOD_BEHAVIOR
                if (inputMode == BIDI_R)
                {
                    *visualCurPos = get_bidi_cursor_pos(visualStr, (U16) LAST_MARK);

                    if (lastType == WS)
                    {
                        set_bidi_cursor_pos(visualStr, *visualCurPos, (U16) (0x0020));
                    }

                    *visualCurPos = get_bidi_cursor_pos(visualStr, (U16) CURSOR_MARK);
                }
                else
        #endif /* BIDI_CONSIDER_DIFF_INPUT_METHOD_BEHAVIOR */ 
                {
                    *visualCurPos = get_bidi_cursor_pos(visualStr, (U16) CURSOR_MARK);
                }
                testHilighOneCharFlag = 1;
                break;
            case SECOND_HIGHLT:
                *visualHilightEnd = get_bidi_cursor_pos(visualStr, (U16) SECOND_HIGHLT);
                testHilighOneCharFlag = 0;
                break;
            case FIRST_HIGHLT:
                *visualHilightStart = get_bidi_cursor_pos(visualStr, (U16) FIRST_HIGHLT);
                testHilighOneCharFlag = 0;

                break;
        }
    }

    if (testHilighOneCharFlag == 0 && *visualHilightEnd == *visualHilightStart)
    {
        *visualHilightEnd = *visualHilightStart = *visualCurPos + 1;
    }

    if ((logicalHilightStart == 0) && (logicalHilightEnd == 0))
    {
        *visualHilightEnd = 0;
        *visualHilightStart = 0;
    }

    if ((*visualHilightEnd <
         /*=*/ *visualHilightStart) /* && (!(*visualHilightStart == 0 && *visualHilightEnd == 0)) */ )
    {
        (*visualHilightEnd)++;
        (*visualHilightStart)++;
    }

    *visualStrLen = (U16) mmi_ucs2strlen((const S8*)visualStr);
}