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

📄 mmismsread.c

📁 是一个手机功能的模拟程序
💻 C
📖 第 1 页 / 共 5 页
字号:
{
    0,
    &SmsRead_R_OPTArea,
    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
    -1,                                 /* use default font         */
    SmsRead_FST_OPTItems,                      /* with these items         */
    sizeof(SmsRead_FST_OPTItems)/sizeof(MfwMnuItem) /* number of items     */
};
static MfwMnuItem SmsRead_FSO_OPTItems [] =
{
    {(MfwIcnAttr *)&colist,0,0,(char *)TxtForward,0,(MenuFunc)SmsRead_R_OPTExeForward,item_flag_none},
    {(MfwIcnAttr *)&colist,0,0,(char *)TxtDelete,0,(MenuFunc)SmsRead_R_OPTExeDelete,item_flag_none}
};

static MfwMnuAttr SmsRead_FSO_OPTAttrib =
{
    0,
    &SmsRead_R_OPTArea,
    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
    -1,                                 /* use default font         */
    SmsRead_FSO_OPTItems,                      /* with these items         */
    sizeof(SmsRead_FSO_OPTItems)/sizeof(MfwMnuItem) /* number of items     */
};
static MfwMnuItem SmsRead_RO_OPTItems [] =
{
    {(MfwIcnAttr *)&colist,0,0,(char *)TxtForward,0,(MenuFunc)SmsRead_R_OPTExeForward,item_flag_none},
    {(MfwIcnAttr *)&colist,0,0,(char *)TxtDelete,0,(MenuFunc)SmsRead_R_OPTExeDelete,item_flag_none},
    {(MfwIcnAttr *)&colist,0,0,(char *)TxtSaveToNVM,0,(MenuFunc)SmsRead_R_OPTExeToNVM,item_flag_none}
};

static MfwMnuAttr SmsRead_RO_OPTAttrib =
{
    0,
    &SmsRead_R_OPTArea,
    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
    -1,                                 /* use default font         */
    SmsRead_RO_OPTItems,                      /* with these items         */
    sizeof(SmsRead_RO_OPTItems)/sizeof(MfwMnuItem) /* number of items     */
};

static MfwMnuItem SmsRead_R_OPTInvalidItems [] =
{
    {(MfwIcnAttr *)&colist,0,0,(char *)TxtDelete,0,(MenuFunc)SmsRead_R_OPTExeDelete,item_flag_none}
};
static MfwMnuAttr SmsRead_R_OPTInvalidAttrib =
{
    0,
    &SmsRead_R_OPTArea,
    MNU_LEFT | MNU_LIST | MNU_CUR_LINE, /* centered page menu       */
    -1,                                 /* use default font         */
    SmsRead_R_OPTInvalidItems,                      /* with these items         */
    sizeof(SmsRead_R_OPTInvalidItems)/sizeof(MfwMnuItem) /* number of items     */
};

SHORT g_sms_list_counter=0;

static SHORT g_nb_line_sms;

static  T_MFW_HND       info_win=0;
static T_MFW_HND        deleting_win = 0;
static  T_MFW_HND       list_win=0;

/* R is the identifier used for the function of the Read menu window */
static T_MFW_HND SmsRead_R_create (T_MFW_HND parent);
static void SmsRead_R_destroy (T_MFW_HND window);
static void SmsRead_R_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static int SmsRead_R_win_cb (MfwEvt e, MfwWin *w);
static int SmsRead_R_mfw_cb(MfwEvt event, void *parameter);
static int SmsRead_R_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason);
static void SmsRead_R_smslist_cb(T_MFW_HND * Parent, ListMenuData * ListData);
static void SmsRead_R_BuildList(T_MFW_HND win,int inUnicode);
void SmsRead_R_Flash_BuildList(T_MFW_HND win, int inUnicode);

// Fill an unicode structure for display
void string_CopyW2W(wstring_t *strDestination, charw_t *strSource, USHORT count );

static T_MFW_HND SmsRead_R_TEXTEDT_create (T_MFW_HND parent);
static void SmsRead_R_TEXTEDT_destroy (T_MFW_HND window);
static void SmsRead_R_TEXTEDT_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static int SmsRead_R_TEXTEDT_win_cb (MfwEvt e, MfwWin *w);
static void SmsRead_R_TEXTEDT_editor_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason);

static T_MFW_HND SmsRead_R_TEXTEDT2_create (T_MFW_HND parent);
static void SmsRead_R_TEXTEDT2_destroy (T_MFW_HND window);
static void SmsRead_R_TEXTEDT2_exec_cb (T_MFW_HND win, USHORT event, SHORT value, void * parameter);
static int SmsRead_R_TEXTEDT2_win_cb (MfwEvt e, MfwWin *w);
static void SmsRead_R_TEXTEDT2_editor_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason);
static void SmsRead_R_TEXTEDT2_smslist_cb(T_MFW_HND * Parent, ListMenuData * ListData);
int SmsRead_R_KINDExeIncoming(MfwMnu* m, MfwMnuItem* i);
int SmsRead_R_KINDExeOutgoing(MfwMnu* m, MfwMnuItem* i);
int FlashSMS_DEL_OPT_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason);
void FLASH_Sms_DELETED_Dialog(T_MFW_HND win,  int TextId, ULONG duration);
int FLASH_Sms_DELETED_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason);
int FlashSMS_DEL_OPT_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason);
// Added new dialog for searching for numbers in SMS message.
static T_MFW_HND smsRead_NumberName_info_screen(T_MFW_HND parent_window, T_SmsUserData *UserData,char* name);
UBYTE check_assoc_name(char *name, T_MFW_SMS_ADDR sms_addr);
char sms_text_ascii[MAX_MSG_LEN+3];//[MAX_LISTSMS_LEN];
char sms_readtext[MAX_MSG_LEN+3];
char sms_text_buffer[MAX_LISTSMS_LEN+3];
MfwEdtAttr  sms_editor_attr;

/* we need this variable "read_status" to know which sms message we are going
   to edit (user pressed in the sms menu-> EDIT)
   because SMS_MT & SMS_MO have different size of character 
   (current length saved in "current_sms_len") !!
   SMS_MT includes additional TIME, DATE and NUMBER and we dont want
   to show it when we are editing.
*/
//static UBYTE read_status;
static USHORT current_sms_len= 0;

static T_SmsUserData   SmsData;
char buf[MAX_EDITOR_LEN];
//char indexsms[5];
static T_MFW_SMS_STAT sms_list_type;
static T_MFW_SMS_MO    MO;
static T_MFW_SMS_MT    MT;
static char sms_list_time[30];
static int type;
//int type;/* 2004/4/20, wangyan modify */
static int ModifyMenuList=0;

static BOOL Search_forNextNumber(T_SmsUserData *UserData);
int ComTime(UINT16 y1,UINT16 m1,UINT16 d1,UINT16 h1,UINT16 mi1,
            UINT16 y2,UINT16 m2,UINT16 d2,UINT16 h2,UINT16 mi2);
void SortSms(SHORT l_found,T_MFW_SMS_MSG * msg_list) ;
int Flash_sms_delete(SHORT index,ListMenuData *menu_list_data);
int Moveup_Flash_sms(SHORT index,ListMenuData *menu_list_data);
extern UINT8 g_pcsyncstatus ;//hxl add ,if  pcsync run ,return,2003-2-13
int SmsDel_Useless_dialog_cb(T_MFW_HND win, USHORT Identifier, USHORT Reason);
int Moveup_List_sms(SHORT index,T_SMS_LIST_DATA * list_data,ListMenuData *menu_list_data);
extern unsigned char no_wait;
#define TIME_THREESEC     3000//every 6 seconds read SMS PBK state
static MfwHnd smsphkchecktimer;          /* clock via software timer */

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

 $Function:    	charPtrToUBYTEPtr

 $Description:	Converts a char ptr to a UBYTE ptr. The procedures can be replaced by macro 
                once all conversions are confirmed as valid.
                
 $Returns:		data set to new type

 $Arguments:	data -data item of input type.
 
*******************************************************************************/
#ifndef MMI_USE_MACROS
UBYTE   charToUBYTE             ( char chr )    {   return((UBYTE)chr);}
UBYTE*  charPtrToUBYTEPtr       ( char *ptr )   {   return((UBYTE*)ptr);}
UBYTE   SHORTToUBYTE            ( SHORT data )  {   return((UBYTE)data);}

char    UBYTEToChar             ( UBYTE data)   {   return((char)data);}
char*   UBYTEPtrToCharPtr       ( UBYTE* data)  {   return((char*)data);}
char*   USHORTPtrToCharPtr  ( USHORT* data) {   return((char*)data);}

USHORT  charToUSHORT            ( char chr )    {   return((USHORT)chr);}
USHORT  UBYTEToUSHORT           ( UBYTE data)   {   return((USHORT)data);}
USHORT* charPtrToUSHORTPtr  (char* data)        {   return((USHORT*)data);}

#else
    #define 	charToUBYTE			(UBYTE)
    #define 	charPtrToUBYTEPtr	(UBYTE*)
    #define 	SHORTToUBYTE		(UBYTE)	

    #define		UBYTEPtrToCharPtr	(char*)
    #define		UBYTEToChar			(char)
    #define		USHORTPtrToCharPtr	(char*)

    #define 	charToUSHORT		(USHORT)	
    #define 	UBYTEToUSHORT		(USHORT)
    #define		charPtrToUSHORTPtr	(USHORT*)
#endif
T_MMI_FLASH_SORT_INDEX Flash_sms_sort_index[FLSAH_SMS_NUM];
int total=0;
FlashSms * tmp_flash;
/*******************************************************************************

 $Function:  smsphkchecktimeEvent

 $Description:   times event  clock

 $Returns:    none.

 $Arguments:

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

static int smsphkchecktimeEvent (MfwEvt e, MfwTim *t)
{
    static int wait=2;/**/

    if( no_wait )
    {
        if( (bookPhoneBookLoading()==BOOK_SUCCESS) && smsidle_get_ready_state() )
        {
            if( wait )
            {
                timStart(smsphkchecktimer);
                wait--;
            }
            else
            {
                timStop(smsphkchecktimer);
                timDelete(smsphkchecktimer);
                smsphkchecktimer=0;
                //yq added for set phbwaitflag
                no_wait=0;
                if( info_win )
                {
                    SEND_EVENT(info_win,DIALOG_DESTROY,0,0 );
                    info_win = 0;
                }
                SmsRead_R_start(NULL,(T_MFW_SMS_STAT*) &sms_list_type);
            }
        }
        else
            timStart(smsphkchecktimer);
    }
    else
    {
        timStop(smsphkchecktimer);
        timDelete(smsphkchecktimer);
        smsphkchecktimer=0;
        if( info_win )
        {
            SEND_EVENT(info_win,DIALOG_DESTROY,0,0 );
            info_win = 0;
        }
        SmsRead_R_start(NULL,(T_MFW_SMS_STAT*) &sms_list_type);
    }
    return 1;
}
/*******************************************************************************

 $Function:    	Moveup_List_sms

 $Description:	move flash sms up 
            
 $Returns:		if success return 1 else return 0

 $Arguments:	
*******************************************************************************/
int Moveup_List_sms(SHORT index,T_SMS_LIST_DATA * list_data,ListMenuData *menu_list_data)
{
    SHORT  i=index,Count;
    TRACE_FUNCTION ("Moveup_List_sms()");

    Count = list_data->nb_sms_stored;
    sprintf(buf,">>>> ,list_data->nb_sms_stored=%d",list_data->nb_sms_stored);
    TRACE_EVENT(buf);
    /* Move the list data up one. */
    while( i < Count-1 ) //c005 rsa avoid copying from behind the array
    {
        list_data->sms_messages[i] = list_data->sms_messages[i+1] ; 
        memcpy(menu_list_data->List[i].str,menu_list_data->List[i+1].str,MENU_TEXT_LENGTH);
        menu_list_data->List[i].icon=menu_list_data->List[i+1].icon;
        i++;
    }
    //list_data->nb_sms_stored--;
    g_nb_line_sms =list_data->nb_sms_stored-1;
    return MFW_SMS_OK;
}
/*******************************************************************************

 $Function:    	Find_avail

 $Description:	find available flash sms table location 
            
 $Returns:		if success return location else return 0

 $Arguments:	
*******************************************************************************/
int Find_avail()
{
    int i,j=0,k=-1;

    TRACE_FUNCTION ("Find_avail()");
    /*first find the available item in current table   */
    for( i=0;i<FlashSMS_table_len;i++ )
    {
        if( Flash_sms_messages[CurrentFlashSmsTable*FlashSMS_table_len+i].flag==FALSE )
        {
            k=i;
            break;
        }
    }
    if( k!=-1 )
        /*if find one return the index*/
        return k;
    else
    {
        for( i=0;i<FLSAH_SMS_NUM;i++ )
            if( Flash_sms_messages[i].flag==FALSE )
            {
                k=i;
                break;
            }
        CurrentFlashSmsTable=k/FlashSMS_table_len;
        flash_Smsread(FlashSMSTable[CurrentFlashSmsTable]);
        /*if find one return the index*/
        return(k%FlashSMS_Table);
    }
}
/*******************************************************************************

 $Function:    	Find_Del_Table

 $Description:	find which table has the right id sms
            
 $Returns:		if success return location else return 0

 $Arguments:	
*******************************************************************************/
int Find_Del_Table(UBYTE id)
{
    int  i,j=0,k=-1;

    TRACE_FUNCTION ("Find_Del_Table()");

    for( i=0;i<FlashSMS_table_len;i++ )
        if( Flash_sms_messages[CurrentFlashSmsTable*FlashSMS_table_len+i].id==id )
        {
            k=i;
            break;
            //return i;
        }
    if( k!=-1 )
        return k;
    else
    {
        for( j=0;((j<FlashSMS_Table)&&(j !=CurrentFlashSmsTable));j++ )//
        {
            for( i=0;i<FlashSMS_table_len;i++ )
                if( Flash_sms_messages[j*FlashSMS_table_len+i].id==id )
                {
                    k=i;
                    //return i;
                    sprintf(buf,">>>> ,Find_CurrentFlashSmsTable=%d,i=%d",CurrentFlashSmsTable,i);
                    TRACE_EVENT(buf);
                    break;
                }
            if( k!=-1 )
                break;
        }
        flash_Smsread(FlashSMSTable[j]);
        CurrentFlashSmsTable=j;
        return k;
    }
}

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

 $Function:    	FreshTableId

 $Description:	Fresh every item's id for deleted one

⌨️ 快捷键说明

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