⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mmisatinput.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 4 页
字号:
	UBYTE * temp_buffer;
        UBYTE size;
        UBYTE outLen;

	switch (txt->code)
	{
	case MFW_DCS_7bits:
                size = (source->length/sizeof(wchar_t))+1;
		temp_buffer = (UBYTE *)ALLOC_MEMORY(size); 
                string_UCS2_to_GSM( 
                    MFW_DCS_7bits,	// gsm format 
                    (wstring_t *)source,// source unicode string, includes own length
                    size,	        // maximum output size
                    temp_buffer,	// destination byte array
                    &outLen		// actual length in bytes is stored here.
                    );
		txt->len = utl_cvt8To7 (temp_buffer, outLen, destination, 0);
		FREE_MEMORY ((U8 *)temp_buffer, size);
		break;
	case MFW_DCS_8bits:
                string_UCS2_to_GSM( 
                    MFW_DCS_7bits,	// gsm format 
                    (wstring_t *)source,// source unicode string, includes own length
                    size,	        // maximum output size
                    destination,	// destination byte array
                    &txt->len		// actual length in bytes is stored here.
                    );
		break;
	case MFW_DCS_UCS2:
                txt->len = source->length*sizeof(wchar_t); // txt count is in number of bytes
		memcpy(destination, source, txt->len);
		break;
	default:
		string_UCS2_to_GSM( 
                    MFW_DCS_7bits,	// gsm format 
                    (wstring_t *)source,// source unicode string, includes own length
                    size,	        // maximum output size
                    destination,	// destination byte array
                    &txt->len		// actual length in bytes is stored here.
                    );
		TRACE_EVENT("sat_UCODE_to_TEXT() unexp. DCS");
		break;
	}
}
#endif /* INTEGRATION_SEPT00 */

/*******************************************************************************

 $Function:    	sat_get_key_send_result

 $Description:	


 $Returns:		none

 $Arguments:	data  - key info

*******************************************************************************/

static void sat_get_key_send_result (T_sat_get_key * data)
{
    T_SAT_RES sat_res;
    struct {
        T_SAT_TXT txt;
        UBYTE      buffer[SAT_GET_KEY_BUFFER_SIZE]; /* buffer for result */ 
    } buf; /* NOTE: txt and buffer shall be packed */

    /* update the output parameter */

    /* set the required DCS for the result to be returned */
    if ((data->sat_command->qual & SAT_M_INKEY_UCS2) NEQ 0)
    {
        buf.txt.code = MFW_DCS_UCS2;
    }
    else
    {
        buf.txt.code = MFW_DCS_8bits; /* use the SMS default alphabet */
    }
    
    buf.txt.text = sizeof(T_SAT_TXT);
    buf.txt.len = 1;

    /* convert and send the result */
    sat_ASCII_to_TEXT(&buf.txt, buf.buffer, (UBYTE *)data->edt_buffer);
    sat_res[SAT_ERR_INDEX] = SatResSuccess;
    sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
    satString (data->sat_command,  &buf.txt, sat_res, sizeof(T_SAT_RES));
}

/*******************************************************************************

 $Function:    	sat_get_string_send_result

 $Description:	


 $Returns:		none

 $Arguments:	data  - string info

 SPR#1700 - DS - Modified to handle Chinese/Unicode

*******************************************************************************/
static void sat_get_string_send_result (T_sat_get_string * data)
{
    T_SAT_RES sat_res;
    T_sat_get_string_result * buf;
    U16 length;
    U16 size;

    TRACE_FUNCTION("sat_get_string_send_result()");

    /* allocate sufficient temporary space to return the result (avoid huge stack usage) */
    if (((data->sat_command->qual & SAT_M_INPUT_ALPHA) == 1) /* 0=digits, 1=alpha */
	    && (data->sat_command->qual & SAT_M_INPUT_UCS2)	/* Unicode input requested */
	    && (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE))
     {
        length = 2*ATB_string_UCLength((USHORT*)data->edt_buffer);
     }
     else /* Ascii */
     {
        length = strlen(data->edt_buffer);
     }
    size = sizeof(T_sat_get_string_result) + length;
     buf = (T_sat_get_string_result *) ALLOC_MEMORY(size); 
	
    /* update the output parameter */
    
    /* set the required DCS for the result to be returned */
    if ((data->sat_command->qual & SAT_M_INPUT_UCS2) NEQ 0)
    {
        buf->txt.code = MFW_DCS_UCS2;
    }
    else if ((data->sat_command->qual & SAT_M_INPUT_PACKING) NEQ 0)
    {
        buf->txt.code = MFW_DCS_7bits; /* use the packed SMS alphabet */
    }
    else 
    {
        buf->txt.code = MFW_DCS_8bits; /* use the SMS default alphabet */
    }
    
    buf->txt.text = sizeof(T_SAT_TXT);
    buf->txt.len = length;

    /* convert and send the result */
    if (((data->sat_command->qual & SAT_M_INPUT_ALPHA) == 1) /* 0=digits, 1=alpha */
	    && (data->sat_command->qual & SAT_M_INPUT_UCS2)	/* Unicode input requested */
	    && (Mmi_getCurrentLanguage() == CHINESE_LANGUAGE))
     {
        //Copy the data into the SAT txt buffer
        memcpy(buf->buffer, data->edt_buffer, length);
     }
     else
     {
        sat_ASCII_to_TEXT(&buf->txt, buf->buffer, (UBYTE *)data->edt_buffer);
     }
     
     sat_res[SAT_ERR_INDEX] = SatResSuccess;
    sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
    satString (data->sat_command,  &buf->txt, sat_res, sizeof(T_SAT_RES));

    FREE_MEMORY((U8 *)buf, size);
}

/*******************************************************************************

 $Function:    	sat_editor_cb

 $Description:	Sat editor call back function.


 $Returns:		none

 $Arguments:	win  - window
 				Identifier - unique id
 				event - event id
 				
*******************************************************************************/
/* SPR#1428 - SH - New Editor: minor change so function matches callback type */
#ifdef NEW_EDITOR
static void sat_editor_cb (T_MFW_HND win, USHORT Identifier, SHORT event)
#else
static void sat_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event)
#endif
{
    T_MFW_WIN    * win_data = ((T_MFW_HDR *)win)->data;
    T_SAT_RES sat_res;
    
    TRACE_EVENT ("sat_editor_cb()");
	  {
		  char temp[60];
		  sprintf(temp,"event number %d",event);
		  TRACE_EVENT(temp);
    }
    if ((win EQ NULL) || (win_data EQ NULL))
        return;
    
    switch (Identifier)
    {
    case SAT_GET_KEY:
	{
	    T_sat_get_key * data = (T_sat_get_key *)win_data->user;
	    
            if (data EQ NULL)
                return;
		
	    switch(event)
	    {
	    case INFO_KCD_LEFT: /* OK or single digit key or YES */
		/* update the output parameter */
		if ((data->sat_command->qual & SAT_M_INKEY_YES_NO) NEQ 0)
		{
		    data->edt_buffer[0] = 0x01; /* means YES */
		    data->edt_buffer[1] = 0x00; /* means YES */
		}
		
		sat_get_key_send_result (data);
		break;
	    case INFO_KCD_ALTERNATELEFT: /* help */
		sat_res[SAT_ERR_INDEX] = SAT_RES_USER_HELP;
		sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
		sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
		break;
	    case INFO_KCD_RIGHT: /* back or NO */
		if ((data->sat_command->qual & SAT_M_INKEY_YES_NO) NEQ 0)
		{
		    data->edt_buffer[0] = 0x00; /* means NO */
		    data->edt_buffer[1] = 0x00; /* means NO */
		    sat_get_key_send_result (data);
		}
		else
		{
		    sat_res[SAT_ERR_INDEX] = SAT_RES_USER_BACK;
		    sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
		    sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
		}
		break;
	    case INFO_KCD_CLEAR: /* clear on empty buffer or long clear */
		case INFO_KCD_HUP:		
			sat_res[SAT_ERR_INDEX] = SAT_RES_USER_ABORT;
			sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
			sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
		break;
	    case INFO_TIMEOUT: /* timeout */
		sat_res[SAT_ERR_INDEX] = SAT_RES_USER_NO_RESP;
		sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
		sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
		break;
            default:
                TRACE_EVENT("sat_editor_cb() unexp. event");
                break;
	    }
	    sat_get_key_destroy (data->win);
	}
	break;
    case SAT_GET_STRING:
	{
	    T_sat_get_string * data = (T_sat_get_string *)win_data->user;
	    
            if (data EQ NULL)
                return;

	    switch(event)
	    {
	    case INFO_KCD_LEFT: /* OK */	        
	      sat_get_string_send_result (data);
		SEND_EVENT(data->win, SAT_DESTROY_WINDOW, 0, 0); /* SPR#1700 - DS - Destroy SAT string data */
             break;		
	    case INFO_KCD_ALTERNATELEFT: /* help */
		sat_res[SAT_ERR_INDEX] = SAT_RES_USER_HELP;
		sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
		sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
		break;
	    case INFO_KCD_RIGHT: /* back */
		sat_res[SAT_ERR_INDEX] = SAT_RES_USER_BACK;
		sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
		sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
		break;
	    case INFO_KCD_CLEAR: /* clear on empty buffer or long clear */	
		sat_res[SAT_ERR_INDEX] = SAT_RES_USER_ABORT;
		sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
		sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
		break;
	    case INFO_TIMEOUT: /* timeout */
		sat_res[SAT_ERR_INDEX] = SAT_RES_USER_NO_RESP;
		sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
		sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
		break;
            default:
                TRACE_EVENT("sat_editor_cb() unexp. event");
                break;
	    }

	    /* SPR#1700 - DS - Only destroy string if not already destroyed */
	    if (data->win)
	    {
	        sat_get_string_destroy (data->win);
	        data->win = NULL;
	    }
	}
	break;

    case SAT_DISPLAY_TEXT:
        {
            T_sat_display_text   * data     = (T_sat_display_text *)win_data->user;
            
            switch (event)
            {
            case INFO_KCD_RIGHT: /* back */
                sat_res[SAT_ERR_INDEX] = SAT_RES_USER_BACK;
                sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
                sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
                break;
            case INFO_TIMEOUT: /* timeout */
            case INFO_KCD_LEFT: /* OK */
                sat_res[SAT_ERR_INDEX] = SatResSuccess;
                sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
                sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
                break;
            case INFO_KCD_CLEAR: /* abort */
			case INFO_KCD_HUP:		
                sat_res[SAT_ERR_INDEX] = SAT_RES_USER_ABORT;
                sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
                sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
                break;
            default:
                TRACE_EVENT("sat_editor_cb() unexp. event");
                break;
            }
            sat_display_text_destroy (data->win);
        }
        break;
        
    case SAT_DISPLAY_TEXT_WAIT:
        {
            T_sat_display_text   * data     = (T_sat_display_text *)win_data->user;
            
            switch (event)
            {
            case INFO_TIMEOUT: /* timeout */
                sat_res[SAT_ERR_INDEX] = SAT_RES_USER_NO_RESP;
                sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
                sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
                break;
            case INFO_KCD_LEFT: /* OK */
                sat_res[SAT_ERR_INDEX] = SatResSuccess;
                sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
                sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
                break;
            case INFO_KCD_RIGHT: /* back */
                sat_res[SAT_ERR_INDEX] = SAT_RES_USER_BACK;
                sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
                sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
                break;
            case INFO_KCD_CLEAR: /* abort */
			case INFO_KCD_HUP:		
                sat_res[SAT_ERR_INDEX] = SAT_RES_USER_ABORT;
                sat_res[SAT_AI_INDEX]  = SatResAiNoCause;
                sat_done (data->sat_command, sat_res, sizeof(T_SAT_RES));
                break;
            default:
                TRACE_EVENT("sat_editor_cb() unexp. event");
                break;
            }
            sat_display_text_destroy (data->win);
        }
        break;
    default:
        TRACE_EVENT("sat_editor_cb() unexp. Identifier");
        break;
    }
    return;
}
// end c014 rsa

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -