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

📄 mmismsbroadcast.c

📁 GSM手机设计软件代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	default:
	    return;
	}
}

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

 $Function:    	smscb_CB_EDT_TEXTEDT_editor_cb

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void smscb_CB_EDT_TEXTEDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event)
    /* smscb_CB_EDT_TEXTEDT editor event handler */
{
    T_MFW_WIN    * win_data = ((T_MFW_HDR *)win)->data;
    T_CB_EDT_TEXTEDT * data = (T_CB_EDT_TEXTEDT *)win_data->user;
    T_MFW_HND    * l_parent;
    SHORT          l_id;

    TRACE_FUNCTION ("smscb_CB_EDT_TEXTEDT_editor_cb()");

    switch(event)
    	{
	case INFO_KCD_LEFT:
	    //on OK: menucreate CB_EDT_MIDEDT(data)
	    smscb_CB_EDT_MIDEDT_start (win, &data->CB_EDT_MIDEDT_param);
	    break;
	case INFO_KCD_RIGHT:
	case INFO_KCD_HUP: /* defaultreaction */
	    l_parent = data->parent;
	    l_id = data->id;
	    smscb_CB_EDT_TEXTEDT_destroy(data->win);
	    SEND_EVENT (l_parent, E_RETURN, l_id, NULL); // c007 rsa
	    break;
	default:
	    break;
    	}
    return;
}

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

			CB_EDT_MIDEDT	 DYNAMIC MENU WINDOW. DECLARATION

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

typedef struct
{
    /* administrative data */

    T_MMI_CONTROL   mmi_control;
    T_MFW_HND       win;
    SHORT           id;
    T_MFW_HND       parent;

    /* associated handlers */

    T_MFW_HND       editor;

    /* internal data */
    T_CB_EDT_MIDEDT_param * param; /* pointer to parameter space in parent (buffer for editing) */
#ifdef NEW_EDITOR
	T_AUI_EDITOR_DATA editor_info;	/* SPR#1428 - SH - New Editor data */
#else
    T_EDITOR_DATA   editor_info; /* storage for editor attributes */
#endif
} T_CB_EDT_MIDEDT;

static T_MFW_HND smscb_CB_EDT_MIDEDT_create (T_MFW_HND parent);
static void smscb_CB_EDT_MIDEDT_destroy (T_MFW_HND window);
static void smscb_CB_EDT_MIDEDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static void smscb_CB_EDT_MIDEDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event);

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

			CB_EDT_MIDEDT	DYNAMIC MENU WINDOW. IMPLEMENTATION

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

T_MFW_HND smscb_CB_EDT_MIDEDT_start(T_MFW_HND parent_window, T_CB_EDT_MIDEDT_param * parameter)
{
    T_MFW_HND win;

    TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_start()");

    win = smscb_CB_EDT_MIDEDT_create (parent_window);

    if (win NEQ NULL)
	{
	    SEND_EVENT (win, E_INIT, smscb_CB_EDT_MIDEDT_ID, (void *)parameter);
	}
    return win;
}

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

 $Function:    	smscb_CB_EDT_MIDEDT_create

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static T_MFW_HND smscb_CB_EDT_MIDEDT_create(MfwHnd parent_window)
{
    T_CB_EDT_MIDEDT      * data = (T_CB_EDT_MIDEDT *)ALLOC_MEMORY (sizeof (T_CB_EDT_MIDEDT));
    T_MFW_WIN  * win;

    TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_create()");

    /*
     * Create window handler
     */

    data->win = win_create (parent_window, 0, 0, NULL);
    
    if (data->win EQ NULL)
	{
	    return NULL;
	}

    /* 
     * connect the dialog data to the MFW-window
     */

    data->mmi_control.dialog = (T_DIALOG_FUNC)smscb_CB_EDT_MIDEDT_exec_cb;
    data->mmi_control.data   = data;
    win                      = ((T_MFW_HDR *)data->win)->data;
    win->user                = (void *)data;
    data->parent             = parent_window;

    /*
     * return window handle
     */

    winShow(data->win);
    return data->win;
}


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

 $Function:    	smscb_CB_EDT_MIDEDT_destroy

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void smscb_CB_EDT_MIDEDT_destroy(MfwHnd own_window)
{
    T_MFW_WIN           * win_data;
    T_CB_EDT_MIDEDT     * data;


    TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_destroy()");

    if (own_window)
	{
	    win_data = ((T_MFW_HDR *)own_window)->data;
	    data     = (T_CB_EDT_MIDEDT *)win_data->user;

	    if (data)
		{
		    /*
		     * Delete WIN handler
		     */ 
		    win_delete (data->win);

		    /*     
		     * Free Memory
		     */
		    FREE_MEMORY ((void *)data, sizeof (T_CB_EDT_MIDEDT));
		}
	    else
		{
		    TRACE_EVENT ("smscb_CB_EDT_MIDEDT_destroy() called twice");
		}
	}
}


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

 $Function:    	smscb_CB_EDT_MIDEDT_exec_cb

 $Description:	
 
 $Returns:		

 $Arguments:	
 
*******************************************************************************/
void smscb_CB_EDT_MIDEDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter)
    /* callback handler for events sent to to trigger execution */
{

    T_MFW_WIN          * win_data = ((T_MFW_HDR *) win)->data;
    T_CB_EDT_MIDEDT    * data     = (T_CB_EDT_MIDEDT *)win_data->user;
    T_MFW_HND          * l_parent;
    SHORT                l_id;
    int                  index;

    TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_exec_cb()");

    switch (event)
	{
	case E_INIT:
	    /* initialization of administrative data */
	    data->id = value;
	    data->param = (T_CB_EDT_MIDEDT_param *)parameter; /* store the pointer to the parameter for later use */

	    /* initialization of the dialog data */
	    index = data->param->index;
	    if (g_smscb_data.CBTopics.entry[index].msg_id NEQ NO_MID)
		{
		    data->param->number[0] = '\0'; /* provide empty entry */

		}
	    else
		{
		    data->param->number[0] = '\0'; /* provide empty entry */
		}
	    //on INIT: call editor (Type=numeric, Length=3, Prompt="Enter MID Number", 
	    //                      Number=data->List.Number[data->ListIndex], SoftLeft=OK, SoftRight=BACK)

		/* SPR#1428 - SH - New Editor changes */
#ifdef NEW_EDITOR
		AUI_edit_SetDefault(&data->editor_info);
		AUI_edit_SetDisplay(&data->editor_info, ZONE_FULL_SK_TITLE, COLOUR_EDITOR, EDITOR_FONT);
		AUI_edit_SetEvents(&data->editor_info, value, TRUE, TEN_SECS,  (T_AUI_EDIT_CB)smscb_CB_EDT_MIDEDT_editor_cb);
		AUI_edit_SetTextStr(&data->editor_info, TxtSoftOK, TxtDelete, TxtEnterMid, NULL);
		AUI_edit_SetAltTextStr(&data->editor_info, 1, TxtNull, TRUE, TxtSoftBack);
		AUI_edit_SetBuffer(&data->editor_info, ATB_DCS_ASCII, (UBYTE *)data->param->number, CB_MID_LENGTH);
		AUI_edit_SetMode(&data->editor_info, 0, ED_CURSOR_BAR);

	    data->editor = AUI_edit_Start(data->win,&data->editor_info);  /* start the editor */
#else /* NEW_EDITOR */
		editor_attr_init(&data->editor_info.editor_attr, ZONE_SMALL_EDITOR, edtCurBar1, 0, data->param->number, CB_MID_LENGTH, COLOUR_EDITOR );
	    editor_data_init(&data->editor_info,(T_EDIT_CB)smscb_CB_EDT_MIDEDT_editor_cb,TxtSoftOK,TxtDelete,TxtEnterMid,1 ,DIGITS_MODE, TEN_SECS);
		data->editor_info.destroyEditor		= TRUE;
		data->editor_info.Identifier		= value;
	    data->editor_info.hide                 = FALSE;
	    data->editor_info.TextString           = NULL;

	    /* create the dialog handler */
	    data->editor = editor_start(data->win,&data->editor_info);  /* start the editor */ 
#endif /* NEW_EDITOR */
	    break;
	case E_ABORT:
	case E_EXIT: /* defaultreaction */
	    l_parent = data->parent;
	    l_id = data->id;
	    smscb_CB_EDT_MIDEDT_destroy(data->win);
        SEND_EVENT (l_parent, event, l_id, NULL); /* forward event to parent */
	    break;
	default:
	    return;
	}
}


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

 $Function:    	smscb_CB_EDT_MIDEDT_editor_cb

 $Description:	

 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static void smscb_CB_EDT_MIDEDT_editor_cb (T_MFW_HND win, USHORT Identifier, USHORT event)
    /* smscb_CB_EDT_MIDEDT editor event handler */
{
    T_MFW_WIN       * win_data = ((T_MFW_HDR *)win)->data;
    T_CB_EDT_MIDEDT * data = (T_CB_EDT_MIDEDT *)win_data->user;
    T_MFW_HND       * l_parent;
    SHORT             l_id;
    int               index;

#ifdef DEBUG_SMS_CB
    char buf[80];
	UBYTE ii;
#endif

    TRACE_FUNCTION ("smscb_CB_EDT_MIDEDT_editor_cb()");

    l_parent = data->parent;
    l_id     = data->id;

    switch(event)
    	{
	case INFO_KCD_LEFT:
	    index = data->param->index;

		//nm "-1"the zero is counted as well
	    if (index < MAX_MIDS -1 )
		{
		    /* add a new entry */

		    strncpy (g_smscb_data.CBTopics.entry[index].name, data->param->name, CB_TAG_LENGTH);
		    g_smscb_data.CBTopics.entry[index].msg_id = atoi(data->param->number);

#ifdef DEBUG_SMS_CB
    sprintf (buf, "the index is %d", index);
    TRACE_EVENT (buf);
#endif

		    /* add a new entry */
		    index += 1;
		    g_smscb_data.CBTopics.length = index;

		    smscb_setCBsettings(SMSCB_SWITCH_ON); /* save in SIM */ 

		    info_screen(win, TxtSaved ,TxtNull, NULL); 

		}
		else
		{
		    info_screen (win, TxtFull, TxtNull, NULL);
		}


#ifdef DEBUG_SMS_CB

	   TRACE_EVENT ("after add a new one !"); 
	for (ii = 0; ii < MAX_MIDS; ii++)
	{
	   sprintf (buf, " 04 midlist:%d, i:%d", g_smscb_data.CBTopics.entry[ii].msg_id,ii);
	   TRACE_EVENT (buf); 
	}
	   sprintf (buf, "04 midlist:%d", g_smscb_data.CBTopics.length);
	   TRACE_EVENT (buf); 
#endif



    
	    smscb_CB_EDT_MIDEDT_destroy(data->win);
	    SEND_EVENT (l_parent, E_EXIT, l_id, NULL);
	    break;
	case INFO_KCD_RIGHT:
	case INFO_KCD_HUP: /* defaultreaction */
	    smscb_CB_EDT_MIDEDT_destroy(data->win);
	    SEND_EVENT (l_parent, E_RETURN, l_id, NULL); // c007 rsa
	    break;
	default:
	    break;
    	}
    return;
}

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

			cell broadcast routines IMPLEMENTATION

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


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

 $Function:    	smscb_InitData

 $Description:	Initialises CB message storage

 $Returns:		none.

 $Arguments:	
 
*******************************************************************************/
void smscb_InitData (void)
{
    UBYTE i;

    g_smscb_data.CBTopics.length = 0;
    for (i = 0; i < MAX_MIDS; i++)
	{
	    g_smscb_data.CBTopics.entry[i].msg_id = NO_MID; /* Set MID list default values. */
	    g_smscb_data.CBTopics.entry[i].name[0] = '\0';
	    g_smscb_data.CBTopics.entry[i].dcs = 0;
	}

}

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

 $Function:    	smscb_delete_topic



 $Description: : This function is used to delete an MID from the
            current list <g_smscb_data.CBTopics>.


 $Returns:		

 $Arguments:	
 
*******************************************************************************/
static T_MFW smscb_delete_topic(UBYTE MidOffset)
{
    SHORT Mid;
    UBYTE MidCount;
    UBYTE i;

#ifdef DEBUG_SMS_CB
    UBYTE ii;
    char buf[80];
#endif

    Mid = g_smscb_data.CBTopics.entry[MidOffset].msg_id;

    /* Find out how many messages are stored. 
     * set MidCount to first entry which contains NO_MID or 
     * set MidCount to MAX_MIDS if list is full
     */
	// 
    MidCount = g_smscb_data.CBTopics.length + 1;

    /* Move the MID data up one. */
    while (MidOffset < (MidCount)) //c005 rsa avoid co

⌨️ 快捷键说明

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