爱技术

 找回密码
 注册会员

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 2981|回复: 25
收起左侧

[其它] [65/75/85]Function Library 讨论帖

[复制链接]
发表于 2008-9-20 22:22:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册会员 微信登录

x
本帖禁止其它一切废话。

发布新函数时请附上相关说明,及特征码。

有问题也请详细说明。
 楼主| 发表于 2008-9-20 22:30:35 | 显示全部楼层
几个新函数:

  1. typedef struct
  2. {
  3.         int flag; //8, 0
  4.         int (*onkey)(void *, GUI_MSG *);
  5.         void (*ghook)(void *, int );
  6.         void *proc3; //locret
  7.         const int *softkeys;
  8.         const SOFTKEYSTAB *softkeystab;
  9.         int flags2; //1
  10.         int lgp_null; //?
  11.         const int *icons;
  12.         int zero0; //0
  13.         int _2; //2
  14.         int _100;
  15.         int _101;
  16.         int zero1; //0
  17. }POPUP_DESC;

  18. #pragma swi_number=0x2A3
  19. __swi __arm void UpdateMenuCursorItem(void *gui, int n);
  20. //thumb
  21. //pattern_NSG=??,B5,??,1C,_blf(??,B5,??,1C,??,1C,??,??,??,??,??,1C,??,34,??,69,??,22,??,32,??,42,??,59),??,1C+1

  22. #pragma swi_number=0x2A4
  23. __swi __arm void *GetMenuGUI(void *malloc_adr, void *mfree_adr);
  24. //thumb
  25. //pattern_NSG=??,B5,??,1C,??,20,??,1C,??,00,??,47,??,1C,??,1C,??,??,??,??,??,BD+1

  26. #pragma swi_number=0x2A5
  27. __swi __arm void *GetMultiLinesMenuGUI(void *malloc_adr, void *mfree_adr);
  28. //thumb
  29. //pattern_NSG=??,B5,??,1C,??,20,??,1C,??,01,??,47,??,1C,??,1C,??,??,??,??,??,BD+1


  30. #pragma swi_number=0x2A6
  31. __swi __arm void SetHeaderToMenu(void *gui, const HEADER_DESC *hdr, void *malloc_adr);
  32. //thumb
  33. //pattern_NSG=??,B5,??,1C,??,22,_blf(??,B5,??,1C,??,1C,??,1C,??,??,??,??,??,28,??,D1,??,2A),??,BD+1


  34. #pragma swi_number=0x2A7
  35. __swi __arm void SetMenuToGUI(void *gui, const void *menu_desc);//MENU_DESC,ML_MENU_DESC
  36. //thumb
  37. //pattern_NSG=??,B5,??,1C,??,1C,??,??,??,??,??,21,??,1C,_blf(??,1C,??,68,??,20,??,69,??,43,??,D0,??,20,??,47),??,1C,??,36,??,36,??,28,??,D0,+1


  38. #pragma swi_number=0x2A8
  39. __swi __arm int GetMenuItemCount(void *gui);
  40. //thumb
  41. //pattern_NSG=??,21,??,31,??,58,??,30,??,69,??,29,??,D0,??,38,??,47+1


  42. //???
  43. #pragma swi_number=0x2A9
  44. __swi __arm int CreatePopupGUI(int flag, void *user_pointer, const POPUP_DESC *, int lgp_msg);
  45. //thumb
  46. //pattern_NSG=??,1C,??,99,??,??,??,??,??,B0,??,BD,??,B5,??,4C,??,1C,??,1C+D

  47. #pragma swi_number=0x2AA
  48. __swi __arm int CreatePopupGUI_ws(int flag, void *user_pointer, const POPUP_DESC *, WSHDR *msg);
  49. //thumb
  50. //pattern_NSG=??,B5,??,1C,??,1C,??,1C,??,49,??,B0,??,48,??,??,??,??,??,1C,??,1C,??,??,??,??,??,49,??,1C,??,??,??,??,??,1C,??,1C,??,??,??,??,??,1C,??,1C,??,??,??,??,??,1C,??,99,??,??,??,??,??,B0,??,BD+1

  51. #pragma swi_number=0x2AB
  52. __swi __arm void *GetPopupUserPointer(void *gui);
  53. //thumb
  54. //pattern_NSG=C0,30,00,68,70,47,80,30,40,68,70,47+1


复制代码
UpdateMenuCursorItem,设置菜单高亮到某一个条目。
效果和
SetCursorToMenuItem(gui, n);
RefreshGUI();
差不多,但是在带搜索的菜单中,UpdateMenuCursorItem更好,它不会使输入的文字消失,可以继续搜索,

下面一个创建菜单的例子:
  1. unsigned int CreateMLMenu(const ML_MENU_DESC *menu, const HEADER_DESC *hdr, int start_item, int n_items, void *user_pointer)
  2. {
  3.    void *ma=malloc_adr();
  4.    void *gui=GetMultiLinesMenuGUI(ma, mfree_adr());
  5.    SetMenuToGUI(gui, menu);
  6.    SetMenuItemCount(gui, n_items);
  7.    MenuSetUserPointer(gui, user_pointer);
  8.    SetCursorToMenuItem(gui, start_item);
  9.    SetHeaderToMenu(gui, hdr, ma);
  10.    return (CreateGUI(gui));
  11. }

  12. unsigned int CreateSLMenu(const MENU_DESC *menu, const HEADER_DESC *hdr, int start_item, int n_items, void *user_pointer)
  13. {
  14.      
  15.    void *ma=malloc_adr();
  16.    void *gui=GetMenuGUI(ma, mfree_adr());
  17.    SetMenuToGUI(gui, menu);
  18.    SetMenuItemCount(gui, n_items);
  19.    MenuSetUserPointer(gui, user_pointer);
  20.    SetCursorToMenuItem(gui, start_item);
  21.    SetHeaderToMenu(gui, hdr, ma);
  22.    return (CreateGUI(gui));
  23. }
复制代码
以上特征码可能只有NOEWSGOLD机型可用。
不过已经为国外E71v45找到了相关函数:
  1. //E71v45

  2. 0A8C: 0xA0953319   ; 2A3:  __thumb void UpdateMenuCursorItem(void *gui, int n)
  3. 0A90: 0xA0950125   ; 2A4:  __thumb void *GetMenuGUI(void *malloc_adr, void *mfree_adr)
  4. 0A94: 0xA0957479   ; 2A5:  __thumb void *GetMultiLinesMenuGUI(void *malloc_adr, void *mfree_adr)
  5. 0A98: 0xA094F739   ; 2A6:  __thumb void SetHeaderToMenu(void *gui, const HEADER_DESC *hdr, void *malloc_adr)
  6. 0A9C: 0xA09540DB   ; 2A7:  __thumb void SetMenuToGUI(void *gui, const void *menu_desc)
  7. 0AA0: 0xA0950F33   ; 2A8:  __thumb int GetMenuItemCount(void *gui)
  8. 0AA4: 0xA094E8C1   ; 2A9:  __thumb int CreatePopupGUI(int flag, void *user_pointer, const POPUP_DESC *, int lgp_msg)
  9. 0AA8: 0xA094E803   ; 2AA:  __thumb int CreatePopupGUI_ws(int flag, void *user_pointer, const POPUP_DESC *, WSHDR *msg)
  10. 0AAC: 0xA09572F9   ; 2AB:  __thumb void *GetPopupUserPointer(void *gui)
  11. 0AB0: 0xA0B56FB3   ; 2AC:  __thumb int DeleteSMS(int index, int _1)
  12. 0AB4: 0xA0B575C5   ; 2AD:  __thumb int SetNewSMSToRead(int index, int _1)
复制代码
CreatePopupGUI
CreatePopupGUI_ws
为创建弹出窗口的函数。
前者使用lgp消息,后者使用WSHDR(使用AllocWS申请的)。

[ 本帖最后由 BingK 于 2008-9-25 12:33 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2008-9-21 10:51:55 | 显示全部楼层
冰,2A3的特征码找出来的跟你下面发的E71v45的不一样?
对了,2A0-2A2的特征码麻烦也发一下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-21 10:59:22 | 显示全部楼层

2A3就是这个啊。
E71Cv41: 0xA0979879
  1. #pragma swi_number=0x82A0
  2. __swi __arm short *RAM_SMS_dat_FileHandler();
  3. //arm
  4. //pattern_NSG=&(??,4E,??,3E,??,68,??,28,??,D0,??,27,??,1C,??,20,??,??,??,??,??,28,??,D0)-8

  5. #pragma swi_number=0x82A1
  6. __swi __arm short *RAM_WB_dat_FileHandler();
  7. //arm
  8. //pattern_NSG=&(??,4E,??,3E,??,68,??,28,??,D0,??,27,??,1C,??,20,??,??,??,??,??,28,??,D0)-6

  9. #pragma swi_number=0x82A2
  10. __swi __arm short *RAM_EMS_Admin_dat_FileHandler();
  11. //arm
  12. //pattern_ELKA=&(??,4E,??,D0,??,AB,??,33,??,6A,??,42,??,D0,??,AB,??,33,??,1C,??,49,??,A8)
复制代码
回复 支持 反对

使用道具 举报

发表于 2008-9-21 11:10:38 | 显示全部楼层
我晕,这个要咋找,用SMELTER也搜不到-.=
237,253,2A0,2A1,2A2
这个E71Cv41的能不能帮我找下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-21 11:16:02 | 显示全部楼层
原帖由 闪到腰 于 2008-9-21 11:10 发表
我晕,这个要咋找,用SMELTER也搜不到-.=
237,253,2A0,2A1,2A2
这个E71Cv41的能不能帮我找下

237,没用,
253,不清楚
2A0,2A1,2A2用4楼的特征码就行啊
回复 支持 反对

使用道具 举报

发表于 2008-9-21 11:18:49 | 显示全部楼层
不好意思-.=
太久没用,我把前面的&也删了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-21 14:16:55 | 显示全部楼层

  1. #pragma swi_number=0x2AC
  2. __swi __arm int DeleteSMS(int index, int n); //return 0x3E8
  3. //thumb
  4. //pattern_NSG=??,B5,??,4E,??,1C,??,1C,??,1C,??,49,??,B0,??,??,??,??,??,1C,??,1C+1


  5. #pragma swi_number=0x2AD
  6. __swi __arm int SetNewSMSToRead(int index, int _1); //return 0x3E8
  7. //thumb
  8. //pattern_NSG=??,B5,??,1C,??,4C,??,49,??,B0,??,1C,??,??,??,??,??,AB,??,8A,??,1C+1
复制代码
这两个函数重新说明。
int DeleteSMS(int index, int n);
index为这条(短信在sms.dat中的字节位置-2)除以sizeof(PDU)+1,中间有ems的只算一条。
表示这条短信的数量,普通短信就是1,ems的话,一次性删除不了,要多次删除,如果这条ems占用的是3条短信的空间,就是
DeleteSMS(index, 1);
DeleteSMS(index, 2);
DeleteSMS(index, 3);

[ 本帖最后由 BingK 于 2008-9-25 12:33 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-23 23:16:02 | 显示全部楼层
  1. #pragma swi_number=0x2AE
  2. __swi __arm void *GetHeaderPointer(void *gui);
  3. //thumb
  4. //pattern_NSG=??,B5,02,21,_blf(??,B5,??,??,??,??,??,28,??,D0,??,68,??,BD,??,20,??,BD),??,BD+1

  5. #pragma swi_number=0x2AF
  6. __swi __arm void SetHeaderText(void *hdr_pointer, WSHDR *txt, void *malloc_adr, void *mfree_adr);
  7. //thumb
  8. //pattern_NSG=??,B5,??,1C,??,1C,??,1C,??,1C,??,28,??,D0,??,2E,??,D0,??,2D,??,D0,??,6A,??,28,??,D0,??,??,??,??,??,90,??,28,??,D0,??,1C,??,6A+1
复制代码
增加两个!

同时删除3个:
  1. /* //删除,直接使用有风险,可能会造成和系统的冲突,读取可以直接打开sms.dat,删除可以使用DeleteSMS
  2. #pragma swi_number=0x82A0
  3. __swi __arm short *RAM_SMS_dat_FileHandler();
  4. //arm
  5. //pattern_NSG=&(??,4E,??,3E,??,68,??,28,??,D0,??,27,??,1C,??,20,??,??,??,??,??,28,??,D0)-8

  6. #pragma swi_number=0x82A1
  7. __swi __arm short *RAM_WB_dat_FileHandler();
  8. //arm
  9. //pattern_NSG=&(??,4E,??,3E,??,68,??,28,??,D0,??,27,??,1C,??,20,??,??,??,??,??,28,??,D0)-6

  10. #pragma swi_number=0x82A2
  11. __swi __arm short *RAM_EMS_Admin_dat_FileHandler();
  12. //arm
  13. //pattern_NSG=&(??,4E,??,D0,??,AB,??,33,??,6A,??,42,??,D0,??,AB,??,33,??,1C,??,49,??,A8)
  14. */
复制代码
例子:
  1. WSHDR *hdr_t=AllocWS(64);
  2. wsprintf(hdr_t, "Hi!");
  3. SetHeaderText(GetHeaderPointer(gui), hdr_t, malloc_adr(), mfree_adr());
复制代码
找到新的读取删除短信的方法,对于EMS支持在一些特殊条件下会不好,
EMS_Admin.dat从0x9A4开始,结构如下:
typedef struct
{
        char unk0;
        char unk1;
        unsigned short index_id; //0xFFFF, no
        char num[12]; //hex, num[0],len
        short txt_len;
        short w_char[7]; //
        char unk2;
        char unk3;
        short unk_0x160F;
        char unk4[8];
        int opmsg_id;
        unsigned short data_id;//SMS: (data_id-0x2A)*sizeof(PDU)= 在sms.dat中的位置, EMS: 0xFFF4 ?
        short unk5; //0xA800 ?
}EMS_ADM;
用index_id删除!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-23 23:16:20 | 显示全部楼层
  1. #pragma swi_number=0x2AE
  2. __swi __arm void *GetHeaderPointer(void *gui);
  3. //thumb
  4. //pattern_NSG=??,B5,02,21,_blf(??,B5,??,??,??,??,??,28,??,D0,??,68,??,BD,??,20,??,BD),??,BD+1

  5. #pragma swi_number=0x2AF
  6. __swi __arm void SetHeaderText(void *hdr_pointer, WSHDR *txt, void *malloc_adr, void *mfree_adr);
  7. //thumb
  8. //pattern_NSG=??,B5,??,1C,??,1C,??,1C,??,1C,??,28,??,D0,??,2E,??,D0,??,2D,??,D0,??,6A,??,28,??,D0,??,??,??,??,??,90,??,28,??,D0,??,1C,??,6A+1
复制代码
增加两个!

同时删除3个:
  1. /* //删除,直接使用有风险,可能会造成和系统的冲突,读取可以直接打开sms.dat,删除可以使用DeleteSMS
  2. #pragma swi_number=0x82A0
  3. __swi __arm short *RAM_SMS_dat_FileHandler();
  4. //arm
  5. //pattern_NSG=&(??,4E,??,3E,??,68,??,28,??,D0,??,27,??,1C,??,20,??,??,??,??,??,28,??,D0)-8

  6. #pragma swi_number=0x82A1
  7. __swi __arm short *RAM_WB_dat_FileHandler();
  8. //arm
  9. //pattern_NSG=&(??,4E,??,3E,??,68,??,28,??,D0,??,27,??,1C,??,20,??,??,??,??,??,28,??,D0)-6

  10. #pragma swi_number=0x82A2
  11. __swi __arm short *RAM_EMS_Admin_dat_FileHandler();
  12. //arm
  13. //pattern_NSG=&(??,4E,??,D0,??,AB,??,33,??,6A,??,42,??,D0,??,AB,??,33,??,1C,??,49,??,A8)
  14. */
复制代码
例子:
  1. WSHDR *hdr_t=AllocWS(64);
  2. wsprintf(hdr_t, "Hi!");
  3. SetHeaderText(GetHeaderPointer(gui), hdr_t, malloc_adr(), mfree_adr());
复制代码
找到新的读取删除短信的方法,对于EMS支持在一些特殊条件下会不好,
EMS_Admin.dat从0x9A4开始,结构如下:
typedef struct
{
        char unk0;
        char unk1;
        unsigned short index_id; //0xFFFF, no
        char num[12]; //hex, num[0],len
        short txt_len;
        short w_char[7]; //
        char unk2;
        char unk3;
        short unk_0x160F;
        char unk4[8];
        int opmsg_id;
        unsigned short data_id;//SMS: (data_id-0x2A)*sizeof(PDU)= 在sms.dat中的位置, EMS: 0xFFF4 ?
        short unk5; //0xA800 ?
}EMS_ADM;
用index_id删除!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-24 12:16:47 | 显示全部楼层
  1. E71Cv41
  2. 0A8C: 0xA0979879   ; 2A3:  __thumb void UpdateMenuCursorItem(void *gui, int n)
  3. 0A90: 0xA0976685   ; 2A4:  __thumb void *GetMenuGUI(void *malloc_adr, void *mfree_adr)
  4. 0A94: 0xA097D9D9   ; 2A5:  __thumb void *GetMultiLinesMenuGUI(void *malloc_adr, void *mfree_adr)
  5. 0A98: 0xA0975C99   ; 2A6:  __thumb void SetHeaderToMenu(void *gui, const HEADER_DESC *hdr, void *malloc_adr)
  6. 0A9C: 0xA097A63B   ; 2A7:  __thumb void SetMenuToGUI(void *gui, const void *menu_desc)
  7. 0AA0: 0xA0977493   ; 2A8:  __thumb int GetMenuItemCount(void *gui)
  8. 0AA4: 0xA0974E21   ; 2A9:  __thumb int CreatePopupGUI(int flag, void *user_pointer, const POPUP_DESC *, int lgp_msg)
  9. 0AA8: 0xA0974D63   ; 2AA:  __thumb int CreatePopupGUI_ws(int flag, void *user_pointer, const POPUP_DESC *, WSHDR *msg)
  10. 0AAC: 0xA097D859   ; 2AB:  __thumb void *GetPopupUserPointer(void *gui)
  11. 0AB0: 0xA0B8D8C7   ; 2AC:  __thumb int DeleteSMS(int index, int n)
  12. 0AB4: 0xA0B8DED9   ; 2AD:  __thumb int SetNewSMSToRead(int index, int _1)
  13. 0AB8: 0xA097B39D   ; 2AE:  __thumb void *GetHeaderPointer(void *gui)
  14. 0ABC: 0xA0A5373D   ; 2AF:  __thumb void SetHeaderText(void *hdr_pointer, WSHDR *txt, void *malloc_adr, void *mfree_adr)
复制代码

[ 本帖最后由 BingK 于 2008-9-25 12:34 编辑 ]
回复 支持 反对

使用道具 举报

发表于 2008-9-24 16:12:19 | 显示全部楼层

ELC1V41

  1. 0A8C: 0xA0980039   ; 2A3:  __thumb void UpdateMenuCursorItem(void *gui, int n)
  2. 0A90: 0xA097CE45   ; 2A4:  __thumb void *GetMenuGUI(void *malloc_adr, void *mfree_adr)
  3. 0A94: 0xA0984199   ; 2A5:  __thumb void *GetMultiLinesMenuGUI(void *malloc_adr, void *mfree_adr)
  4. 0A98: 0xA097C459   ; 2A6:  __thumb void SetHeaderToMenu(void *gui, const HEADER_DESC *hdr, void *malloc_adr)
  5. 0A9C: 0xA0980DFB   ; 2A7:  __thumb void SetMenuToGUI(void *gui, const void *menu_desc)
  6. 0AA0: 0xA097DC53   ; 2A8:  __thumb int GetMenuItemCount(void *gui)
  7. 0AA4: 0xA097B5E1   ; 2A9:  __thumb int CreatePopupGUI(int flag, void *user_pointer, const POPUP_DESC *, int lgp_msg)
  8. 0AA8: 0xA097B523   ; 2AA:  __thumb int CreatePopupGUI_ws(int flag, void *user_pointer, const POPUP_DESC *, WSHDR *msg)
  9. 0AAC: 0xA0984019   ; 2AB:  __thumb void *GetPopupUserPointer(void *gui)
  10. 0AB0: 0xA0B96BA3   ; 2AC:  __thumb int DeleteSMS(int index, int _1)
  11. 0AB4: 0xA0B971B5   ; 2AD:  __thumb int SetNewSMSToReaded(int index, int _1)
  12. 0AB8: 0xA0981B5D   ; 2AE:  __thumb void *GetHeaderPointer(void *gui)
  13. 0ABC: 0xA0A59F25   ; 2AF:  __thumb void SetHeaderText(void *hdr_pointer, WSHDR *txt, void *malloc_adr, void *mfree_adr)
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-25 12:35:35 | 显示全部楼层
int SetNewSMSToRead(int index, int _1)
其实可以把已读短信设置为未读,SetNewSMSToRead(index, 3),但是在信息收件箱中看到的却还是已读的,虽然sms.dat已经被改写了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-9-26 12:59:11 | 显示全部楼层
  1. #pragma swi_number=0x2B0
  2. __swi __arm void SetMenuSoftKey(void *gui, const SOFTKEY_DESC *,int n);
  3. //thumb
  4. //pattern_NSG=??,BD,??,21,??,??,??,??,??,1C,??,1C,_blf(??,B5,??,68,??,00,??,19,??,68,??,68,??,60,??,60,??,1C,??,??,??,??,??,BD),??,BD,-39
复制代码
这个函数,其实已经有一个SetSoftKey但是那个用在菜单中会有几率性的死机,但SetMenuSoftKey其实可以替换那个SetSoftKey的,不过在国外讨论无果,直接加上算了。
中键的n为2
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-7 10:03:27 | 显示全部楼层
  1. typedef struct
  2. {
  3.   char unk0;
  4.   char unk1;
  5.   short pos_index; //the correct position of the sms in sms.dat = pos_index*sizeof(PDU)+2
  6. }SMS_POS_INDEX_DATA;

  7. typedef struct
  8. {
  9.   void *unk_proc0; //0xA09D901D S7Cv47
  10.   void *unk_proc1; //0xA09D9025 S7Cv47
  11.   short index; //1,2,3 ...
  12.   char unk[6];
  13.   short unk1; //another index ?
  14.   char cnt0;
  15.   char cnt1; // =cnt0;
  16.   short *data_id; //depend on cnt, for GetSmsPosIndex to get pos_index
  17. }INDEX_ID_DATA;

  18. typedef struct
  19. {
  20.   void *next;
  21.   void *prev;
  22.   INDEX_ID_DATA *index_id_data;
  23.   //short unk0; //0xB2 pdu_size ?
  24.   //short unk1; //0x4077 SMS_SIMIF_SM_CEPID ?
  25.   //int unk2; //0x190 ?
  26.   //void *unk3; //a list ?
  27. }SMS_DATA_LIST;

  28. typedef struct
  29. {
  30.   SMS_DATA_LIST *first;
  31.   SMS_DATA_LIST *last;
  32.   void *unk_proc; //0xA09DA18D //S7Cv47
  33. }SMS_DATA_LLIST;

  34. typedef struct
  35. {
  36.   SMS_DATA_LLIST in_msg;
  37.   SMS_DATA_LLIST out_msg;
  38. }SMS_DATA_ROOT;

  39. #pragma swi_number=0x82B1
  40. __swi __arm SMS_DATA_ROOT *SmsDataRoot();
  41. //arm
  42. //pattern_NSG=&(??,22,??,49,??,00,??,B5,??,39,??,??,??,??,??,BD,+2)+0x12C

  43. #pragma swi_number=0x2B2
  44. __swi __arm int GetSmsPosIndex(SMS_POS_INDEX_DATA *buf, int data_id);
  45. //arm
  46. //pattern_NSG=??,B5,??,1C,??,1C,??,??,??,??,??,1C,??,??,??,??,??,42,??,D3,??,20,??,70,??,80,??,E0,??,2E,??,D0,+1
复制代码
同时将这个函数改名:
#pragma swi_number=0x2AD
__swi __arm int SetNewSMSToRead(int index, int _1); //return 0x3E8

为:
  1. #pragma swi_number=0x2AD
  2. __swi __arm int SetSmsStatus(int index, int type); //return 0x3E8, type, 1: new to read, 3: read to new
复制代码
  1. //#define SmsDataRootPointer 0xA8DED874 // S7Cv47
  2. //#define SmsDataRootPointer 0xA8EB99B8 // E71Cv41
  3. //#define SmsDataRootPointer 0xA8EB992C // ELC1v41
  4. //#define SmsDataRootPointer 0xA8EB9A84 // E71v45
  5. //#define SmsDataRootPointer 0xA8EB99F8 // EL71v45

  6. //defadr GetSmsPosIndex,0xA0E43EB5 //int GetSmsPosIndex(SMS_POS_INDEX_DATA *buf, int data_id); S7Cv47
  7. //defadr GetSmsPosIndex,0xA0D637F9 //E71Cv41
  8. //defadr GetSmsPosIndex,0xA0D6E0D5 //ELC1v41
  9. //defadr GetSmsPosIndex,0xA0D35895 //E71v45
  10. //defadr GetSmsPosIndex,0xA0D42039 //EL71v45
复制代码

[ 本帖最后由 BingK 于 2008-10-7 10:06 编辑 ]
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-21 13:30:58 | 显示全部楼层
  1. #pragma swi_number=0x2AC
  2. __swi __arm int DeleteSMS(int index, short *del_cnt); //return 0x3E8
  3. //thumb
  4. //pattern_NSG=??,B5,??,B0,??,1C,??,D1,??,48,??,BD,??,20,??,80,??,48,??,49,+1
  5. //thumb
  6. //pattern_ELKA=??,B5,??,B0,??,1C,??,D1,??,48,??,38,??,B0,??,BD,??,9A,??,A1,??,91,??,23,??,92,+1
复制代码
替换原来的0x2AC : int DeleteSMS(int index, int n) 函数。
例子:
  1. int deletesms(int index)
  2. {
  3. short cnt;
  4. if(DeleteSMS(index, &cnt)!=0x3E8)
  5. return 0;
  6. return 1;
  7. }
复制代码
用这个函数删除将不会再留下空白短信。
——————————————————————————————————
新函数:
  1. typedef struct{
  2.         int unk0; //0
  3.         int unk1; //0
  4.         int flag_data; //type?
  5.         void *num_data;
  6. }AbNum;

  7. typedef struct{
  8.         AbNum *an1;
  9.         AbNum *an2; //an1=an2;
  10.         void *mfree_adr;
  11.         void *unk;
  12. }NativeAbData;

  13. #pragma swi_number=0x2B3
  14. __swi __arm NativeAbData *AllocNativeAbData(void);
  15. //arm
  16. //pattern_NSG=??,??,??,E9,??,??,??,E3,??,??,??,EB,??,??,??,E1,??,??,??,1A,??,??,??,E5,??,??,??,E3
  17. //thumb
  18. //pattern_ELKA=??,B5,??,20,??,??,??,??,??,1C,??,25,??,28,??,D1,??,4E,??,1C,??,20,??,??,??,??,??,28,??,D0,??,DF,??,1C,??,1C,??,22,??,20,??,??,??,??,??,E0,??,DF,??,1C,??,1C,??,22,??,20,??,??,??,??,??,48,??,60,??,60,??,60,??,60,??,1C,??,BD,+1

  19. #pragma swi_number=0x2B4
  20. __swi __arm int FreeNativeAbData(NativeAbData *ab_data);
  21. //arm
  22. //pattern_NSG=??,??,??,E9,??,??,??,E1,??,??,??,EB,??,??,??,E3,??,??,??,08,??,??,??,E1,??,??,??,EB,??,??,??,E1,??,??,??,EB,??,??,??,E3,??,??,??,E8
  23. //thumb
  24. //pattern_ELKA=??,B5,??,1C,??,??,??,??,??,28,??,D0,??,1C,??,??,??,??,??,1C,??,??,??,??,??,20,??,BD,??,20,??,BD,+1

  25. #pragma swi_number=0x2B5
  26. __swi __arm int GetNativeAbDataType(NativeAbData *nab, int unk0); //unk0=0
  27. //arm
  28. //pattern_NSG=??,??,??,E9,??,??,??,E3,??,??,??,EB,??,??,??,E3,??,??,??,15,??,??,??,12,??,??,??,E1,??,??,??,E8
  29. //thumb
  30. //pattern_ELKA=??,B5,??,24,??,??,??,??,??,28,??,D0,??,68,??,40,??,1C,??,BD,+1

  31. #pragma swi_number=0x2B6
  32. __swi __arm WSHDR *GetNumFromNativeAbData(NativeAbData *nab, int type, int unk0); //unk0=0
  33. //arm
  34. //pattern_NSG=??,??,??,E9,??,??,??,E3,??,??,??,E5,??,??,??,E2,??,??,??,E5,??,??,??,E3,??,??,??,E3,??,??,??,EB,??,??,??,E1,??,??,??,E5,??,??,??,1A
  35. //thumb
  36. //pattern_ELKA=??,B5,??,AB,??,26,??,72,??,1C,??,AA,??,92,??,1C,??,24+1

  37. #pragma swi_number=0x2B7
  38. __swi __arm int GetNativeAbDataStatus(NativeAbData *nab, int _0); //9,not filled, 1, filled
  39. //arm
  40. //pattern_NSG=??,??,??,E9,??,??,??,E3,??,??,??,EB,??,??,??,E3,??,??,??,15,??,??,??,11,??,??,??,11,??,??,??,E1,??,??,??,E8
  41. //thumb
  42. //pattern_ELKA=??,B5,??,24,??,??,??,??,??,28,??,D0,??,68,??,04,??,0E,??,1C,??,BD,+1

  43. #pragma swi_number=0x2B8
  44. __swi __arm int SetNumToNativeAbData(NativeAbData *abd, int unk, WSHDR *num); //unk=0x1D, maxlen ?, type ?
  45. //arm
  46. //pattern_NSG=??,??,??,E9,??,??,??,E1,??,??,??,E3,??,??,??,E1,??,??,??,E1,??,??,??,EB,??,??,??,E1,??,??,??,E3,??,??,??,E3,??,??,??,8A,??,??,??,E3,??,??,??,1A,??,??,??,E3,??,??,??,EA,??,??,??,E3,??,??,??,E3,??,??,??,E8,??,??,??,E8
  47. //thumb
  48. //pattern_ELKA=??,B5,??,1C,??,1C,??,20,??,??,??,??,??,1C,??,25,??,2E,??,D8,??,2C,??,D1,??,25,??,E0,+1

  49. #pragma swi_number=0x2B9
  50. __swi __arm unsigned int OpenNativeAddressbook(int type, int unk1, int unk2, void *data); //type, 0x4, select num,
  51. //arm
  52. //pattern_NSG=??,??,??,E9,??,??,??,E1,??,??,??,E3,??,??,??,E1,??,??,??,E3,??,??,??,E5,??,??,??,E9,??,??,??,E1,??,??,??,E1,??,??,??,E1,??,??,??,E1,_blf(??,??,??,E9,??,??,??,E2,??,??,??,E5,??,??,??,E5,??,??,??,E5,??,??,??,E1,??,??,??,E1,??,??,??,E1),??,??,??,E2,??,??,BD,E8
  53. //thumb
  54. //pattern_ELKA=??,B5,??,1C,??,21,??,1C,??,22,??,92,??,91,??,91,??,1C,??,1C,??,1C,??,1C,_blf(??,B5,??,B0,??,1C,??,1C,??,28,??,9C,??,D2,??,A3,??,5C,??,00,??,44),??,BD,+1

  55. /*
  56. OpenNativeAddressbook(x,y,z,s)

  57. x,y,z,s
  58. //p: point, NativeAbData
  59. 0,0,0,0 //CONTACTS_LIST
  60. 0,0,2,0 //?
  61. 0,0,4,0 //CONTACT_ONLINE
  62. 0,0,3,0 //CONTACT_SIM
  63. 0,0,5,0 //CONTACT_MOSTUSE
  64. 0,0,6,0 //CONTACT_GROUPS
  65. 1,0,0,0 //CONTACT_NEW
  66. 1,0,0,p //?,select menu, sim/phone
  67. 4,1,0,p //?,NativeAbData *, no init,
  68. 4,1,1,p //?
  69. 4,1,2,p //?
  70. 4,8,2,p //?
  71. 6,0,0,p //, save, num
  72. 6,0,1,p //?
  73. 6,1,0,p //?
  74. B,0,0,p //select, NativeAbData *, no init
  75. */
复制代码
svn目录下的swilib.h已更新,用法请看mysmsys的源码。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-10-28 18:49:16 | 显示全部楼层
  1. #pragma swi_number=0x2BA
  2. __swi __arm void SetHeaderIcon(void *hdr_pointer, const int *icon, void *malloc_adr, void *mfree_adr);
  3. //thumb
  4. //pattern_NSG/ELKA=??,B5,??,1C,??,1C,??,28,??,D0,??,69,??,28,??,D0,??,1C,+1
复制代码
菜单,编辑对话框中都可以使用。
  1. void sethdricon(void *gui)
  2. {
  3. const int icon[]={0x2B8, 0};
  4. SetHeaderIcon(GetHeaderPointer(gui), icon, malloc_adr(), mfree_adr());
  5. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-11-6 14:26:25 | 显示全部楼层
  1. typedef struct
  2. {
  3.   CSM_RAM ss_csm;
  4.   void *unk;
  5.   int ss_gui_id; //draw screensaver
  6.   int keylock_gui_id; //show keylock screen
  7. }SS_RAM;

  8. #pragma swi_number=0x68
  9. __swi __arm SS_RAM *GetScreenSaverRAM(void);
  10. //arm
  11. //pattern_NSG/ELKA=??,48,??,68,??,47,??,48,??,B5,??,68,??,29,??,D1,??,68,??,28,??,D1,+1
复制代码
  1. int IsSSOnTop(void)
  2. {
  3.   SS_RAM *ss_ram;
  4.   if(!(ss_ram=GetScreenSaverRAM())) return 0;
  5.   if((ss_ram->ss_gui_id) && IsGuiOnTop(ss_ram->ss_gui_id))
  6.     return 1;
  7.   if((ss_ram->keylock_gui_id) && IsGuiOnTop(ss_ram->keylock_gui_id))
  8.     return 1;
  9.   return 0;
  10. }
复制代码
回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-10 13:07:19 | 显示全部楼层
用于创建标签式界面。
  1. typedef struct
  2. {
  3.   int flag; //8,a,b
  4.   int (*onkey)(void *, GUI_MSG *); //,null
  5.   void (*ghook)(void *, int ); //,null
  6.   void *locret; //,null
  7.   const int *softkeys;//,null
  8.   const SOFTKEYSTAB *softkeystab; //,null
  9. }TABGUI_DESC;

  10. #pragma swi_number=0x2BB
  11. __swi __arm void *GetTabGUI(void *malloc_adr, void *mfree_adr);
  12. //thumb
  13. //pattern_NSG=??,1C,??,30,??,21,??,30,??,66,??,??,??,??,??,1C,??,B0,??,BD,??,22,??,E7,??,22,??,E7,+0x19

  14. #pragma swi_number=0x2BC
  15. __swi __arm void SetGUIDefinition(void *gui, const void *definition);
  16. //thumb
  17. //pattern_NSG=81,60,70,47,01,21,01,73,70,47,+1

  18. #pragma swi_number=0x2BD
  19. __swi __arm int SetGUIToTabGUI(void *tabgui, int n, const int *tabicons, void *gui);
  20. //thumb
  21. //pattern_NSG=??,B5,??,26,??,28,??,B0,??,D0,??,1C,??,37,??,??,??,2C,??,D0,??,A8,??,22,??,C0,??,C0,??,??,??,1C,??,??,??,18,+1

  22. #pragma swi_number=0x2BE
  23. __swi __arm int SetCursorTab(void *tab_gui, int n);
  24. //thumb
  25. //pattern_NSG=??,1C,??,20,??,2A,??,B5,??,D0,??,32,??,??,??,2A,??,D0,??,1C,??,30,??,30,_blf(??,B5,??,1C,??,1C,??,1C,??,D0,??,1C,??,1C),??,BD,+1

  26. #pragma swi_number=0x2BF
  27. __swi __arm int UpdateTab1stItem(void *tab_gui, int unk_0);
  28. //thumb
  29. //pattern_NSG=??,22,??,28,??,B5,??,D0,??,30,??,??,??,28,??,D0,+1

  30. #pragma swi_number=0x2C0
  31. __swi __arm int GetCursorTab(void *tab_gui);
  32. //thumb
  33. //pattern_NSG=??,21,??,43,??,28,??,B5,??,D0,??,30,??,??,??,28,??,D0,+1

  34. #pragma swi_number=0x2C1
  35. __swi __arm void *GetGuiByTab(void *tab_gui, int n);
  36. //thumb
  37. //pattern_NSG=??,B5,??,24,??,28,??,D0,??,30,??,??,??,28,??,D0,??,??,??,??,??,28,??,D0,??,6E,??,1C,??,BD,+1
复制代码
例子,这是MySMSYS的一部分:
  1. typedef struct
  2. {
  3.   int type;
  4.   int is_tab;
  5.   DLG_CSM *dlg_csm;
  6. }SML_OP; //sms list menu user pointer

  7. #define TAB_N 5

  8. int TabIcons[5][4]=
  9. {
  10.   0x5C7,0x5C7,0x5C7,0x5C7,
  11.   0x5C7,0x5C7,0x5C7,0x5C7,
  12.   0x5C7,0x5C7,0x5C7,0x5C7,
  13.   0x5C7,0x5C7,0x5C7,0x5C7,
  14.   0x5C7,0x5C7,0x5C7,0x5C7,
  15. };

  16. int TabGuiOnKey(void *gui, GUI_MSG *msg)
  17. {
  18.   return 0;
  19. }

  20. void TabGuiGHook(void *gui, int cmd)
  21. {
  22.   if(cmd==0x18)
  23.   {
  24.     //redraw
  25.     //REDRAW();
  26.     int n=GetCursorTab(gui);
  27.     if(n)
  28.     {
  29.       int type, cnt, cur;
  30.       void *m_gui;
  31.       switch(n)
  32.       {
  33.       case 1: type=TYPE_IN_ALL;break;
  34.       case 2: type=TYPE_OUT;break;
  35.       case 3: type=TYPE_DRAFT;break;
  36.       case 4: type=0;break;
  37.       default : type=0;
  38.       }
  39.       m_gui=GetGuiByTab(gui, n);
  40.       if(m_gui)
  41.       {
  42.         cnt=getCountByType(type);
  43.         cur=GetCurMenuItem(m_gui);
  44.         if(cur>=cnt) SetCursorToMenuItem(m_gui, 0);
  45.         Menu_SetItemCountDyn(m_gui, cnt);
  46.         //SendSimpleIpcMsg(SMSYS_IPC_SMS_DATA_UPDATE);
  47.       }
  48.     }
  49.     void **methods=((GUI *)gui)->methods;
  50.     ((void (*)(void *))methods[0])(gui);
  51.   }
  52.   else if(cmd==0xA)
  53.   {
  54.     DisableIDLETMR();
  55.   }
  56. }

  57. void TabGuiLocret(void)
  58. {
  59. }

  60. const TABGUI_DESC TabGui=
  61. {
  62.   8,
  63.   TabGuiOnKey,
  64.   TabGuiGHook,
  65.   (void *)TabGuiLocret,
  66.   NULL,
  67.   NULL
  68. };

  69. int CreateTabMenu(void *dlg_csm)
  70. {
  71.   void *m_gui;
  72.   void *ma=malloc_adr();
  73.   void *mf=mfree_adr();
  74.   void *tab_gui=GetTabGUI(ma, mf);
  75.   int n, gui_id;
  76.   //mainmenu
  77.   extern const MENU_DESC main_menu;
  78.   extern HEADER_DESC main_menuhdr;
  79.   
  80.   SetGUIDefinition(tab_gui, &TabGui);
  81.   
  82. #define MAIN_MENU_N 6
  83.   m_gui=GetMenuGUI(ma, mf);
  84.   SetMenuToGUI(m_gui, &main_menu);
  85.   SetMenuItemCount(m_gui, MAIN_MENU_N);
  86.   MenuSetUserPointer(m_gui, dlg_csm);
  87.   SetCursorToMenuItem(m_gui, 0);
  88.   patch_header(&main_menuhdr);
  89.   SetHeaderToMenu(m_gui, &main_menuhdr, ma);
  90.   SetGUIToTabGUI(tab_gui, 0, TabIcons[0], m_gui);
  91.   //sms list
  92.   extern const HEADER_DESC sms_menuhdr;
  93.   extern const ML_MENU_DESC sms_menu;
  94.   for(n=1; n<TAB_N; n++)
  95.   {
  96.     SML_OP *so;
  97.     int type;
  98.     m_gui=GetMultiLinesMenuGUI(ma, mf);
  99.     switch(n)
  100.     {
  101.     case 1: type=TYPE_IN_ALL;break;
  102.     case 2: type=TYPE_OUT;break;
  103.     case 3: type=TYPE_DRAFT;break;
  104.     case 4: type=0;break;
  105.     }
  106.     so=malloc(sizeof(SML_OP));
  107.     so->type=type;
  108.     so->is_tab=1;
  109.     so->dlg_csm=dlg_csm;
  110.     SetMenuToGUI(m_gui, &sms_menu);
  111.     SetMenuItemCount(m_gui, getCountByType(type));
  112.     MenuSetUserPointer(m_gui, so);
  113.     SetCursorToMenuItem(m_gui, 0);
  114.     patch_header(&sms_menuhdr);
  115.     SetHeaderToMenu(m_gui, &sms_menuhdr, ma);
  116.     SetGUIToTabGUI(tab_gui, n, TabIcons[n], m_gui);
  117.   }
  118.   SetCursorTab(tab_gui, 0);
  119.   UpdateTab1stItem(tab_gui, 0);
  120.   gui_id=CreateGUI(tab_gui);
  121.   pushGS(dlg_csm, gui_id);
  122.   return gui_id;
  123. }
复制代码
截图看看:
1.jpg 2.jpg

评分

参与人数 1实力分 +2 金钱数 +200 收起 理由
砂哥 + 2 + 200 奖励

查看全部评分

回复 支持 反对

使用道具 举报

 楼主| 发表于 2008-12-31 15:34:17 | 显示全部楼层
国外发布两个。

#pragma swi_number=0x2C2
__swi __arm int GetSubprovider(WSHDR* ws);
//thumb
//30,B5,05,1C,85,B0,68,46,00,24 + 1

#pragma swi_number=0x2C3
__swi __arm int GetRoamingState();
//thumb
//10,B5,??,??,??,??,04,1C,01,28,05,D1,12,48 + 1
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员 微信登录

本版积分规则

小黑屋|Archiver|手机版|爱技术 ( 沪ICP备08115260号-3 )

GMT+8, 2024-5-19 18:22

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表