############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 27/Feb/2008 23:00:28 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\mainmenu.c # # Command line = "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\mainmenu.c" -D NEWSGOLD -D ELKA -D # # EVILFOX --preprocess "D:\Pasha\elf\mod_src\naticq_2n # # d_mod to all(17.02.08)\EVILFOX_ICQ\List\" -lC # # "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\EVILFOX_ICQ\List\" -o # # "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\EVILFOX_ICQ\Obj\" -s9 --no_unroll # # --cpu_mode arm --endian little --cpu ARM926EJ-S # # --stack_align 4 --interwork -e --fpu None # # --dlib_config "D:\Pasha\ARM_Embedded_Workbench\Embed # # ded Workbench 4.0 Evaluation\ARM\LIB\dl5tpainl8n.h" # # -I "D:\Pasha\ARM_Embedded_Workbench\Embedded # # Workbench 4.0 Evaluation\ARM\INC\" # # --inline_threshold=2 # # List file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\EVILFOX_ICQ\List\mainmenu.lst # # Object file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\EVILFOX_ICQ\Obj\mainmenu.r79 # # # # # ############################################################################## D:\Pasha\elf\mod_src\naticq_2nd_mod to all(17.02.08)\mainmenu.c 1 #include "../inc/swilib.h" 2 #include "../inc/cfg_items.h" 3 #include "../inc/pnglist.h" 4 #include "NatICQ.h" 5 #include "history.h" 6 #include "mainmenu.h" 7 #include "main.h" 8 #include "conf_loader.h" 9 #include "status_change.h" 10 #include "language.h" 11 #include "revision.h" 12 #include "manage_cl.h" 13 #include "rect_patcher.h" 14 #include "cl_work.h" 15 16 //============================================================================== 17 int MainMenu_ID; 18 19 extern int CurrentStatus; 20 extern int CurrentXStatus; 21 extern DYNPNGICONLIST *XStatusesImgList; 22 extern int *XStatusesIconArray; 23 extern int S_ICONS[]; 24 extern const SOFTKEYSTAB menu_skt; 25 26 #ifdef EVILFOX 27 #ifdef ELKA 28 extern int Is_SLI_On; 29 #endif 30 extern int Is_ILU_On; 31 extern int Is_INC_On; 32 extern int in_count; 33 extern int out_count; 34 #ifdef ELKA \ In segment CODE, align 4, keep-with-next 35 static void ChangeSLIMode(void) 36 { 37 Is_SLI_On=!(Is_SLI_On); \ ChangeSLIMode: \ 00000000 ........ LDR R0,??DataTable17 ;; Is_SLI_On \ 00000004 00402DE9 PUSH {LR} \ 00000008 001090E5 LDR R1,[R0, #+0] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0110A003 MOVEQ R1,#+1 \ 00000014 0010A013 MOVNE R1,#+0 \ 00000018 001080E5 STR R1,[R0, #+0] 38 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable13 ;; WriteDefSettings \ 00000020 710100EF SWI +369 39 RefreshGUI(); \ 00000024 960100EF SWI +406 40 } \ 00000028 0080BDE8 POP {PC} ;; return 41 #endif \ In segment CODE, align 4, keep-with-next 42 static void ChangeILUMode(void) 43 { 44 Is_ILU_On=!(Is_ILU_On); \ ChangeILUMode: \ 00000000 ........ LDR R0,??DataTable18 ;; Is_ILU_On \ 00000004 00402DE9 PUSH {LR} \ 00000008 001090E5 LDR R1,[R0, #+0] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0110A003 MOVEQ R1,#+1 \ 00000014 0010A013 MOVNE R1,#+0 \ 00000018 001080E5 STR R1,[R0, #+0] 45 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable13 ;; WriteDefSettings \ 00000020 710100EF SWI +369 46 RefreshGUI(); \ 00000024 960100EF SWI +406 47 } \ 00000028 0080BDE8 POP {PC} ;; return 48 \ In segment CODE, align 4, keep-with-next 49 static void ChangeINCMode(void) 50 { 51 Is_INC_On=!(Is_INC_On); \ ChangeINCMode: \ 00000000 ........ LDR R0,??DataTable19 ;; Is_INC_On \ 00000004 00402DE9 PUSH {LR} \ 00000008 001090E5 LDR R1,[R0, #+0] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0110A003 MOVEQ R1,#+1 \ 00000014 0010A013 MOVNE R1,#+0 \ 00000018 001080E5 STR R1,[R0, #+0] 52 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable13 ;; WriteDefSettings \ 00000020 710100EF SWI +369 53 RefreshGUI(); \ 00000024 960100EF SWI +406 54 } \ 00000028 0080BDE8 POP {PC} ;; return 55 \ In segment CODE, align 4, keep-with-next 56 static void ShowMSGCount(void) 57 { \ ShowMSGCount: \ 00000000 10402DE9 PUSH {R4,LR} 58 char *msg_c=malloc(64); \ 00000004 4000A0E3 MOV R0,#+64 \ 00000008 140000EF SWI +20 59 sprintf(msg_c, "Recv: %d \n" 60 "Sent: %d", in_count, out_count); \ 0000000C 30109FE5 LDR R1,??ShowMSGCount_0 ;; `?` \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 2C009FE5 LDR R0,??ShowMSGCount_0+0x4 ;; out_count \ 00000018 003090E5 LDR R3,[R0, #+0] \ 0000001C 28009FE5 LDR R0,??ShowMSGCount_0+0x8 ;; in_count \ 00000020 002090E5 LDR R2,[R0, #+0] \ 00000024 0400A0E1 MOV R0,R4 \ 00000028 160000EF SWI +22 61 ShowMSG(1,(int)msg_c); \ 0000002C 0410A0E1 MOV R1,R4 \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 480100EF SWI +328 62 mfree(msg_c); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 150000EF SWI +21 63 } \ 00000040 1080BDE8 POP {R4,PC} ;; return \ ??ShowMSGCount_0: \ 00000044 ........ DC32 `?` \ 00000048 ........ DC32 out_count \ 0000004C ........ DC32 in_count 64 \ In segment CODE, align 4, keep-with-next 65 static void InitSnd(void) 66 { 67 Init_Ext_Sounds(); \ InitSnd: \ 00000000 ........ _BF Init_Ext_Sounds,??Init_Ext_Sounds??rA ;; tailcall 68 } 69 #endif 70 71 72 73 extern int Is_Vibra_Enabled; 74 extern unsigned int Is_Sounds_Enabled; 75 extern int Is_Show_Offline; 76 extern int Is_Show_Groups; 77 #ifdef EVILFOX 78 extern int show_ping; 79 #endif 80 81 \ In segment CODE, align 4, keep-with-next 82 static void ChangeVibraMode(void) 83 { 84 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ChangeVibraMode: \ 00000000 ........ LDR R0,??DataTable15 ;; Is_Vibra_Enabled \ 00000004 00402DE9 PUSH {LR} \ 00000008 001090E5 LDR R1,[R0, #+0] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0110A003 MOVEQ R1,#+1 \ 00000014 0010A013 MOVNE R1,#+0 \ 00000018 001080E5 STR R1,[R0, #+0] 85 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable13 ;; WriteDefSettings \ 00000020 710100EF SWI +369 86 RefreshGUI(); \ 00000024 960100EF SWI +406 87 } \ 00000028 0080BDE8 POP {PC} ;; return 88 \ In segment CODE, align 4, keep-with-next 89 static void ChangeSoundMode(void) 90 { 91 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ChangeSoundMode: \ 00000000 ........ LDR R0,??DataTable16 ;; Is_Sounds_Enabled \ 00000004 00402DE9 PUSH {LR} \ 00000008 001090E5 LDR R1,[R0, #+0] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0110A003 MOVEQ R1,#+1 \ 00000014 0010A013 MOVNE R1,#+0 \ 00000018 001080E5 STR R1,[R0, #+0] 92 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable13 ;; WriteDefSettings \ 00000020 710100EF SWI +369 93 RefreshGUI(); \ 00000024 960100EF SWI +406 94 } \ 00000028 0080BDE8 POP {PC} ;; return 95 \ In segment CODE, align 4, keep-with-next 96 static void ChangeShowOfflineMode(void) 97 { 98 void RecountMenu(CLIST *req, int needfocus); 99 Is_Show_Offline=!(Is_Show_Offline); \ ChangeShowOfflineMode: \ 00000000 ........ LDR R0,??DataTable20 ;; Is_Show_Offline \ 00000004 00402DE9 PUSH {LR} \ 00000008 001090E5 LDR R1,[R0, #+0] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0110A003 MOVEQ R1,#+1 \ 00000014 0010A013 MOVNE R1,#+0 \ 00000018 001080E5 STR R1,[R0, #+0] 100 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable13 ;; WriteDefSettings \ 00000020 710100EF SWI +369 101 RecountMenu(NULL, 1); \ 00000024 0110A0E3 MOV R1,#+1 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C ........ _BLF RecountMenu,??RecountMenu??rA 102 RefreshGUI(); \ 00000030 960100EF SWI +406 103 } \ 00000034 0080BDE8 POP {PC} ;; return 104 \ In segment CODE, align 4, keep-with-next 105 static void ChangeShowGroupsMode(void) 106 { 107 void RecountMenu(CLIST *req, int needfocus); 108 Is_Show_Groups=!(Is_Show_Groups); \ ChangeShowGroupsMode: \ 00000000 ........ LDR R0,??DataTable21 ;; Is_Show_Groups \ 00000004 00402DE9 PUSH {LR} \ 00000008 001090E5 LDR R1,[R0, #+0] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0110A003 MOVEQ R1,#+1 \ 00000014 0010A013 MOVNE R1,#+0 \ 00000018 001080E5 STR R1,[R0, #+0] 109 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable13 ;; WriteDefSettings \ 00000020 710100EF SWI +369 110 ResortCL(); \ 00000024 ........ _BLF ResortCL,??ResortCL??rA 111 RecountMenu(NULL, 1); \ 00000028 0110A0E3 MOV R1,#+1 \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 ........ _BLF RecountMenu,??RecountMenu??rA 112 RefreshGUI(); \ 00000034 960100EF SWI +406 113 } \ 00000038 0080BDE8 POP {PC} ;; return 114 \ In segment CODE, align 4, keep-with-next 115 static void EditConfig(void) 116 { \ EditConfig: \ 00000000 10402DE9 PUSH {R4,LR} 117 extern const char *successed_config_filename; 118 WSHDR *ws; 119 ws=AllocWS(150); \ 00000004 9600A0E3 MOV R0,#+150 \ 00000008 250100EF SWI +293 \ 0000000C 0040A0E1 MOV R4,R0 120 str_2ws(ws,successed_config_filename,128); \ 00000010 30009FE5 LDR R0,??EditConfig_0 ;; successed_config_filename \ 00000014 8020A0E3 MOV R2,#+128 \ 00000018 001090E5 LDR R1,[R0, #+0] \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 6C0100EF SWI +364 121 ExecuteFile(ws,0,0); \ 00000024 0020A0E3 MOV R2,#+0 \ 00000028 0010A0E3 MOV R1,#+0 \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 940000EF SWI +148 122 FreeWS(ws); \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 290100EF SWI +297 123 GeneralFuncF1(1); \ 0000003C 0100A0E3 MOV R0,#+1 \ 00000040 3B0100EF SWI +315 124 } \ 00000044 1080BDE8 POP {R4,PC} ;; return \ ??EditConfig_0: \ 00000048 ........ DC32 successed_config_filename 125 \ In segment CODE, align 4, keep-with-next 126 static void Disconnect(void) 127 { 128 extern volatile int disautorecconect; 129 disautorecconect=1; \ Disconnect: \ 00000000 1C009FE5 LDR R0,??Disconnect_0 ;; disautorecconect \ 00000004 00402DE9 PUSH {LR} \ 00000008 0110A0E3 MOV R1,#+1 \ 0000000C 001080E5 STR R1,[R0, #+0] 130 extern void end_socket(void); 131 SUBPROC((void*)end_socket); \ 00000010 10009FE5 LDR R0,??Disconnect_0+0x4 ;; end_socket \ 00000014 710100EF SWI +369 132 GeneralFuncF1(1); \ 00000018 0100A0E3 MOV R0,#+1 \ 0000001C 3B0100EF SWI +315 133 } \ 00000020 0080BDE8 POP {PC} ;; return \ ??Disconnect_0: \ 00000024 ........ DC32 disautorecconect \ 00000028 ........ DC32 end_socket 134 \ In segment CODE, align 4, keep-with-next 135 static void PingToServer(void) 136 { 137 #ifdef EVILFOX 138 show_ping=1; \ PingToServer: \ 00000000 4C009FE5 LDR R0,??PingToServer_0 ;; show_ping \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 0110A0E3 MOV R1,#+1 \ 0000000C 001080E5 STR R1,[R0, #+0] 139 #endif 140 TPKT *p; 141 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000010 1000A0E3 MOV R0,#+16 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 142 GetDateTime(NULL,(TTime *)p->data); \ 0000001C 081084E2 ADD R1,R4,#+8 \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 B40000EF SWI +180 143 p->pkt.uin=0; \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 000084E5 STR R0,[R4, #+0] 144 p->pkt.type=T_ECHO; \ 00000030 1200A0E3 MOV R0,#+18 \ 00000034 B400C4E1 STRH R0,[R4, #+4] 145 p->pkt.data_len=sizeof(TTime); \ 00000038 0800A0E3 MOV R0,#+8 \ 0000003C B600C4E1 STRH R0,[R4, #+6] 146 SUBPROC((void *)SendAnswer,0,p); \ 00000040 10009FE5 LDR R0,??PingToServer_0+0x4 ;; SendAnswer \ 00000044 0420A0E1 MOV R2,R4 \ 00000048 0010A0E3 MOV R1,#+0 \ 0000004C 710100EF SWI +369 147 } \ 00000050 1080BDE8 POP {R4,PC} ;; return \ ??PingToServer_0: \ 00000054 ........ DC32 show_ping \ 00000058 ........ DC32 SendAnswer 148 \ In segment CODE, align 4, keep-with-next 149 static void AboutDlg() 150 { 151 char s[256]; 152 snprintf(s,255,LG_COPYRIGHT,__SVN_REVISION__); \ AboutDlg: \ 00000000 2C209FE5 LDR R2,??AboutDlg_0 ;; `?` \ 00000004 00402DE9 PUSH {LR} \ 00000008 40DF4DE2 SUB SP,SP,#+256 \ 0000000C 3830A0E3 MOV R3,#+56 \ 00000010 703E83E3 ORR R3,R3,#0x700 \ 00000014 FF10A0E3 MOV R1,#+255 \ 00000018 0D00A0E1 MOV R0,SP \ 0000001C 1B0100EF SWI +283 153 ShowMSG(2, (int)s); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 0200A0E3 MOV R0,#+2 \ 00000028 480100EF SWI +328 154 } \ 0000002C 40DF8DE2 ADD SP,SP,#+256 \ 00000030 0080BDE8 POP {PC} ;; return \ ??AboutDlg_0: \ 00000034 ........ DC32 `?` 155 156 extern char LG_MENU2[32]; 157 static const HEADER_DESC menuhdr={0,0,0,0,NULL,(int)LG_MENU2,LGP_NULL}; 158 159 static const int mmenusoftkeys[]={0,1,2}; 160 161 #ifdef EVILFOX 162 #ifdef ELKA 163 static const char * const menutexts[16]= 164 #else 165 static const char * const menutexts[15]= 166 #endif 167 #else 168 static const char * const menutexts[11]= 169 #endif 170 { 171 LG_MNUSTATUS, 172 LG_MNUXSTATUS, 173 LG_MANAGELIST, 174 LG_MNUVIBRA, 175 LG_MNUSOUND, 176 #ifdef EVILFOX 177 #ifdef ELKA 178 LG_SLION, 179 #endif 180 LG_ILUON, 181 LG_INCON, 182 #endif 183 LG_MNUSHOWOFF, 184 LG_MNUSHOWGROUP, 185 LG_MNUEDCFG, 186 #ifdef EVILFOX 187 LG_INITSND, 188 #endif 189 LG_MNUDISCONNECT, 190 LG_MSGINFO, 191 LG_MNUPING, 192 LG_MNUABOUT 193 }; 194 195 /*MENUITEM_DESC menuitems[7]= 196 { 197 {S_ICONS, (int)LG_MNUSTATUS, LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 198 {NULL, (int)LG_MNUADDCONT, LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 199 {icon_array, (int)LG_MNUVIBRA, LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 200 {icon_array, (int)LG_MNUSOUND, LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 201 {NULL, (int)LG_MNUEDCFG, LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 202 {NULL, (int)LG_MNUPING , LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 203 {S_ICONS, (int)LG_MNUABOUT, LGP_NULL,0,NULL,MENU_FLAG3,MENU_FLAG2}, 204 };*/ 205 206 #ifdef EVILFOX 207 #ifdef ELKA \ In segment DATA_I, align 4, align-sorted 208 static const void *menuprocs[16]= \ menuprocs: \ 00000000 DS8 64 \ 00000040 REQUIRE `?` 209 #else 210 static const void *menuprocs[15]= 211 #endif 212 #else 213 static const void *menuprocs[11]= 214 #endif 215 { 216 (void *)DispStatusChangeMenu, 217 (void *)DispXStatusChangeMenu, 218 (void *)CreateManageCLMenu, 219 (void *)ChangeVibraMode, 220 (void *)ChangeSoundMode, 221 #ifdef EVILFOX 222 #ifdef ELKA 223 (void *)ChangeSLIMode, 224 #endif 225 (void *)ChangeILUMode, 226 (void *)ChangeINCMode, 227 #endif 228 (void *)ChangeShowOfflineMode, 229 (void *)ChangeShowGroupsMode, 230 (void *)EditConfig, 231 #ifdef EVILFOX 232 (void *)InitSnd, 233 #endif 234 (void *)Disconnect, 235 (void *)ShowMSGCount, 236 (void *)PingToServer, 237 (void *)AboutDlg, 238 }; 239 240 static const SOFTKEY_DESC mmenu_sk[]= 241 { 242 {0x0018,0x0000,(int)LG_SELECT}, 243 {0x0001,0x0000,(int)LG_BACK}, 244 {0x003D,0x0000,(int)LGP_DOIT_PIC} 245 }; 246 247 static const SOFTKEYSTAB mmenu_skt= 248 { 249 mmenu_sk,0 250 }; 251 \ In segment CODE, align 4, keep-with-next 252 void tmenu_ghook(void *data, int cmd) 253 { \ tmenu_ghook: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 254 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 255 if (cmd==9) \ 0000000C 090054E3 CMP R4,#+9 256 { 257 pltop->dyn_pltop=NULL; \ 00000010 0010A003 MOVEQ R1,#+0 \ 00000014 08108005 STREQ R1,[R0, #+8] \ 00000018 1080BD08 POPEQ {R4,PC} 258 } 259 if (cmd==0x0A) \ 0000001C 0A0054E3 CMP R4,#+10 \ 00000020 1080BD18 POPNE {R4,PC} 260 { 261 pltop->dyn_pltop=XStatusesImgList; \ 00000024 0C109FE5 LDR R1,??tmenu_ghook_0 ;; XStatusesImgList \ 00000028 001091E5 LDR R1,[R1, #+0] \ 0000002C 081080E5 STR R1,[R0, #+8] 262 DisableIDLETMR(); \ 00000030 7F0100EF SWI +383 263 } 264 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??tmenu_ghook_0: \ 00000038 ........ DC32 XStatusesImgList \ In segment DATA_Z, align 4, align-sorted 265 266 static int icon_array[2]; \ icon_array: \ 00000000 DS8 8 \ MainMenu_ID: \ 00000008 DS8 4 267 \ In segment CODE, align 4, keep-with-next 268 static void menuitemhandler(void *data, int curitem, void *unk) 269 { \ menuitemhandler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 270 WSHDR *ws; 271 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 \ 00000014 30019FE5 LDR R0,??menuitemhandler_1 ;; menutexts \ 00000018 058190E7 LDR R8,[R0, +R5, LSL #+2] \ 0000001C 0800A0E1 MOV R0,R8 272 extern const char percent_t[]; 273 ws=AllocMenuWS(data,strlen(menutexts[curitem])); \ 00000020 1B0000EF SWI +27 \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0400A0E1 MOV R0,R4 \ 0000002C 980100EF SWI +408 274 wsprintf(ws,percent_t,menutexts[curitem]); \ 00000030 18119FE5 LDR R1,??menuitemhandler_1+0x4 ;; percent_t \ 00000034 0070A0E1 MOV R7,R0 \ 00000038 0820A0E1 MOV R2,R8 \ 0000003C 240100EF SWI +292 275 switch(curitem) \ 00000040 ........ LDR R0,??DataTable22 ;; icon_array \ 00000044 08219FE5 LDR R2,??menuitemhandler_1+0x8 ;; S_ICONS \ 00000048 0510A0E1 MOV R1,R5 \ 0000004C 0F0051E3 CMP R1,#+15 \ 00000050 3700008A BHI ??menuitemhandler_2 \ 00000054 013F8FE2 ADR R3,??menuitemhandler_0 \ 00000058 0130D3E7 LDRB R3,[R3, R1] \ 0000005C 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??menuitemhandler_0: \ 00000060 03070D0F DC8 +3,+7,+13,+15 \ 00000064 16181F21 DC8 +22,+24,+31,+33 \ 00000068 23252C2C DC8 +35,+37,+44,+44 \ 0000006C 312E302E DC8 +49,+46,+48,+46 276 { 277 case 0: 278 SetMenuItemIconArray(data,item,S_ICONS+CurrentStatus); \ ??menuitemhandler_3: \ 00000070 E0009FE5 LDR R0,??menuitemhandler_1+0xC ;; CurrentStatus \ 00000074 000090E5 LDR R0,[R0, #+0] \ 00000078 002182E0 ADD R2,R2,R0, LSL #+2 \ 0000007C 290000EA B ??menuitemhandler_4 279 break; 280 case 1: 281 SetMenuItemIconArray(data,item,XStatusesIconArray+CurrentXStatus); \ ??menuitemhandler_5: \ 00000080 D4009FE5 LDR R0,??menuitemhandler_1+0x10 ;; CurrentXStatus \ 00000084 D4109FE5 LDR R1,??menuitemhandler_1+0x14 ;; XStatusesIconArray \ 00000088 000090E5 LDR R0,[R0, #+0] \ 0000008C 001091E5 LDR R1,[R1, #+0] \ 00000090 002181E0 ADD R2,R1,R0, LSL #+2 \ 00000094 230000EA B ??menuitemhandler_4 282 break; 283 case 2: 284 SetMenuItemIconArray(data,item,S_ICONS+ICON_ADDCONTACT); \ ??menuitemhandler_6: \ 00000098 482082E2 ADD R2,R2,#+72 \ 0000009C 210000EA B ??menuitemhandler_4 285 break; 286 case 3: 287 SetMenuItemIconArray(data,item,icon_array+(Is_Vibra_Enabled?0:1)); \ ??menuitemhandler_7: \ 000000A0 ........ LDR R1,??DataTable15 ;; Is_Vibra_Enabled \ ??menuitemhandler_8: \ 000000A4 001091E5 LDR R1,[R1, #+0] \ 000000A8 000051E3 CMP R1,#+0 \ 000000AC 0010A013 MOVNE R1,#+0 \ 000000B0 0110A003 MOVEQ R1,#+1 \ 000000B4 012180E0 ADD R2,R0,R1, LSL #+2 \ 000000B8 1A0000EA B ??menuitemhandler_4 288 break; 289 case 4: 290 SetMenuItemIconArray(data,item,icon_array+(Is_Sounds_Enabled?0:1)); \ ??menuitemhandler_9: \ 000000BC ........ LDR R1,??DataTable16 ;; Is_Sounds_Enabled \ 000000C0 F7FFFFEA B ??menuitemhandler_8 291 break; 292 #ifdef ELKA 293 case 5: 294 SetMenuItemIconArray(data,item,icon_array+(Is_SLI_On?0:1)); \ ??menuitemhandler_10: \ 000000C4 ........ LDR R1,??DataTable17 ;; Is_SLI_On \ ??menuitemhandler_11: \ 000000C8 001091E5 LDR R1,[R1, #+0] \ 000000CC 000051E3 CMP R1,#+0 \ 000000D0 0010A013 MOVNE R1,#+0 \ 000000D4 0110A003 MOVEQ R1,#+1 \ 000000D8 012180E0 ADD R2,R0,R1, LSL #+2 \ 000000DC 110000EA B ??menuitemhandler_4 295 break; 296 case 6: 297 SetMenuItemIconArray(data,item,icon_array+(Is_ILU_On?0:1)); \ ??menuitemhandler_12: \ 000000E0 ........ LDR R1,??DataTable18 ;; Is_ILU_On \ 000000E4 EEFFFFEA B ??menuitemhandler_8 298 break; 299 case 7: 300 SetMenuItemIconArray(data,item,icon_array+(Is_INC_On?0:1)); \ ??menuitemhandler_13: \ 000000E8 ........ LDR R1,??DataTable19 ;; Is_INC_On \ 000000EC F5FFFFEA B ??menuitemhandler_11 301 break; 302 case 8: 303 SetMenuItemIconArray(data,item,icon_array+(Is_Show_Offline?0:1)); \ ??menuitemhandler_14: \ 000000F0 ........ LDR R1,??DataTable20 ;; Is_Show_Offline \ 000000F4 EAFFFFEA B ??menuitemhandler_8 304 break; 305 case 9: 306 SetMenuItemIconArray(data,item,icon_array+(Is_Show_Groups?0:1)); \ ??menuitemhandler_15: \ 000000F8 ........ LDR R1,??DataTable21 ;; Is_Show_Groups \ 000000FC 001091E5 LDR R1,[R1, #+0] \ 00000100 000051E3 CMP R1,#+0 \ 00000104 0010A013 MOVNE R1,#+0 \ 00000108 0110A003 MOVEQ R1,#+1 \ 0000010C 012180E0 ADD R2,R0,R1, LSL #+2 \ 00000110 040000EA B ??menuitemhandler_4 307 break; 308 case 10: 309 SetMenuItemIconArray(data,item,S_ICONS+ICON_SETTINGS); \ ??menuitemhandler_16: \ 00000114 582082E2 ADD R2,R2,#+88 \ 00000118 020000EA B ??menuitemhandler_4 310 break; 311 case 11: 312 SetMenuItemIconArray(data,item,S_ICONS+ICON_SETTINGS); 313 break; 314 case 12: 315 SetMenuItemIconArray(data,item,S_ICONS+IS_OFFLINE); 316 break; 317 case 13: 318 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); \ ??menuitemhandler_17: \ 0000011C 382082E2 ADD R2,R2,#+56 \ 00000120 000000EA B ??menuitemhandler_4 319 break; 320 case 14: 321 SetMenuItemIconArray(data,item,S_ICONS+ICON_PING); \ ??menuitemhandler_18: \ 00000124 542082E2 ADD R2,R2,#+84 \ ??menuitemhandler_4: \ 00000128 0610A0E1 MOV R1,R6 \ 0000012C 0400A0E1 MOV R0,R4 \ 00000130 990100EF SWI +409 322 break; 323 case 15: 324 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); 325 break; 326 #else 327 case 5: 328 SetMenuItemIconArray(data,item,icon_array+(Is_ILU_On?0:1)); 329 break; 330 case 6: 331 SetMenuItemIconArray(data,item,icon_array+(Is_INC_On?0:1)); 332 break; 333 case 7: 334 SetMenuItemIconArray(data,item,icon_array+(Is_Show_Offline?0:1)); 335 break; 336 case 8: 337 SetMenuItemIconArray(data,item,icon_array+(Is_Show_Groups?0:1)); 338 break; 339 case 9: 340 SetMenuItemIconArray(data,item,S_ICONS+ICON_SETTINGS); 341 break; 342 case 10: 343 SetMenuItemIconArray(data,item,S_ICONS+ICON_SETTINGS); 344 break; 345 case 11: 346 SetMenuItemIconArray(data,item,S_ICONS+IS_OFFLINE); 347 break; 348 case 12: 349 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); 350 break; 351 case 13: 352 SetMenuItemIconArray(data,item,S_ICONS+ICON_PING); 353 break; 354 case 14: 355 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); 356 break; 357 #endif 358 } 359 SetMenuItemText(data, item, ws, curitem); \ ??menuitemhandler_2: \ 00000134 0530A0E1 MOV R3,R5 \ 00000138 0720A0E1 MOV R2,R7 \ 0000013C 0610A0E1 MOV R1,R6 \ 00000140 0400A0E1 MOV R0,R4 \ 00000144 9A0100EF SWI +410 360 } \ 00000148 F081BDE8 POP {R4-R8,PC} ;; return \ ??menuitemhandler_1: \ 0000014C ........ DC32 menutexts \ 00000150 ........ DC32 percent_t \ 00000154 ........ DC32 S_ICONS \ 00000158 ........ DC32 CurrentStatus \ 0000015C ........ DC32 CurrentXStatus \ 00000160 ........ DC32 XStatusesIconArray 361 \ In segment CODE, align 4, keep-with-next 362 static int tmenu_keyhook(void *data, GUI_MSG *msg) 363 { \ tmenu_keyhook: \ 00000000 00402DE9 PUSH {LR} 364 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000004 F210D1E1 LDRSH R1,[R1, #+2] \ 00000008 180051E3 CMP R1,#+24 \ 0000000C 3D005113 CMPNE R1,#+61 \ 00000010 0300001A BNE ??tmenu_keyhook_0 365 { 366 ((void (*)(void))(menuprocs[GetCurMenuItem(data)]))(); \ 00000014 8F0100EF SWI +399 \ 00000018 0C109FE5 LDR R1,??tmenu_keyhook_1 ;; menuprocs \ 0000001C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000020 30FF2FE1 BLX R0 367 } 368 return(0); \ ??tmenu_keyhook_0: \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 0080BDE8 POP {PC} ;; return \ ??tmenu_keyhook_1: \ 0000002C ........ DC32 menuprocs 369 } \ In segment DATA_C, align 4, align-sorted \ menuhdr: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, LG_MENU2, 2147483647 \ ....FFFFFF7F \ 00000014 08000000.... DC32 8, tmenu_keyhook, tmenu_ghook, 0H, mmenusoftkeys, mmenu_skt, 17 \ ............ \ 00000000.... \ ............ \ 11000000 \ 00000030 ........0000 DC32 menuitemhandler, 0H, 0H, 16 \ 000000000000 \ 10000000 \ In segment DATA_C, align 4, align-sorted \ mmenusoftkeys: \ 00000000 000000000100 DC32 0, 1, 2 \ 000002000000 \ In segment DATA_C, align 4, align-sorted \ menutexts: \ 00000000 ........ DC32 `?` \ 00000004 ........ DC32 `?` \ 00000008 ........ DC32 `?`, `?` \ .... \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 `?` \ 00000028 ........ DC32 `?` \ 00000030 ........ DC32 `?`, `?` \ .... \ 0000003C ........ DC32 `?` \ In segment DATA_C, align 4, align-sorted \ mmenu_sk: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ mmenu_skt: \ 00000000 ........0000 DC32 mmenu_sk, 0 \ 0000 370 371 372 static const MENU_DESC tmenu= 373 { 374 8,tmenu_keyhook,tmenu_ghook,NULL, 375 mmenusoftkeys, 376 &mmenu_skt, 377 0x11,//MENU_FLAG, 378 menuitemhandler, 379 NULL,//menuitems, 380 NULL,//menuprocs, 381 #ifdef EVILFOX 382 #ifdef ELKA 383 16 384 #else 385 15 386 #endif 387 #else 388 11 389 #endif 390 }; 391 \ In segment CODE, align 4, keep-with-next 392 void ShowMainMenu() 393 { \ ShowMainMenu: \ 00000000 30402DE9 PUSH {R4,R5,LR} 394 icon_array[0]=GetPicNByUnicodeSymbol(CBOX_CHECKED); \ 00000004 ........ LDR R4,??DataTable22 ;; icon_array 395 icon_array[1]=GetPicNByUnicodeSymbol(CBOX_UNCHECKED); 396 *((int **)(&menuhdr.icon))=S_ICONS+IS_ONLINE; \ 00000008 80509FE5 LDR R5,??ShowMainMenu_0 ;; menuhdr \ 0000000C 1600A0E3 MOV R0,#+22 \ 00000010 E10C80E3 ORR R0,R0,#0xE100 \ 00000014 E40100EF SWI +484 \ 00000018 000084E5 STR R0,[R4, #+0] \ 0000001C 1700A0E3 MOV R0,#+23 \ 00000020 E10C80E3 ORR R0,R0,#0xE100 \ 00000024 E40100EF SWI +484 \ 00000028 040084E5 STR R0,[R4, #+4] \ 0000002C 60009FE5 LDR R0,??ShowMainMenu_0+0x4 ;; S_ICONS + 44 \ 00000030 080085E5 STR R0,[R5, #+8] 397 patch_header(&menuhdr); \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 B000C5E1 STRH R0,[R5, #+0] \ 0000003C 1800A0E3 MOV R0,#+24 \ 00000040 B200C5E1 STRH R0,[R5, #+2] \ 00000044 888100EF SWI +33160 \ 00000048 010040E2 SUB R0,R0,#+1 \ 0000004C B400C5E1 STRH R0,[R5, #+4] \ 00000050 8A8100EF SWI +33162 \ 00000054 170080E2 ADD R0,R0,#+23 \ 00000058 B600C5E1 STRH R0,[R5, #+6] 398 #ifdef EVILFOX 399 #ifdef ELKA 400 MainMenu_ID=CreateMenu(0,0,&tmenu,&menuhdr,0,16,0,0); \ 0000005C 0000A0E3 MOV R0,#+0 \ 00000060 01002DE9 PUSH {R0} \ 00000064 01002DE9 PUSH {R0} \ 00000068 0530A0E1 MOV R3,R5 \ 0000006C 142085E2 ADD R2,R5,#+20 \ 00000070 0010A0E3 MOV R1,#+0 \ 00000074 1000A0E3 MOV R0,#+16 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 0000A0E3 MOV R0,#+0 \ 00000080 01002DE9 PUSH {R0} \ 00000084 520100EF SWI +338 \ 00000088 080084E5 STR R0,[R4, #+8] 401 #else 402 MainMenu_ID=CreateMenu(0,0,&tmenu,&menuhdr,0,15,0,0); 403 #endif 404 #else 405 MainMenu_ID=CreateMenu(0,0,&tmenu,&menuhdr,0,11,0,0); 406 #endif 407 } \ 0000008C 3F80BDE8 POP {R0-R5,PC} ;; return \ ??ShowMainMenu_0: \ 00000090 ........ DC32 menuhdr \ 00000094 ........ DC32 S_ICONS + 44 \ In segment CODE, align 4, keep-with-next \ ??DataTable13: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable15: \ 00000000 ........ DC32 Is_Vibra_Enabled \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 Is_Sounds_Enabled \ In segment CODE, align 4, keep-with-next \ ??DataTable17: \ 00000000 ........ DC32 Is_SLI_On \ In segment CODE, align 4, keep-with-next \ ??DataTable18: \ 00000000 ........ DC32 Is_ILU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 Is_INC_On \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 Is_Show_Offline \ In segment CODE, align 4, keep-with-next \ ??DataTable21: \ 00000000 ........ DC32 Is_Show_Groups \ In segment CODE, align 4, keep-with-next \ ??DataTable22: \ 00000000 ........ DC32 icon_array \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ............ DC32 DispStatusChangeMenu, DispXStatusChangeMenu, CreateManageCLMenu \ ............ \ 0000000C ............ DC32 ChangeVibraMode, ChangeSoundMode, ChangeSLIMode, ChangeILUMode \ ............ \ ........ \ 0000001C ............ DC32 ChangeINCMode, ChangeShowOfflineMode, ChangeShowGroupsMode \ ............ \ 00000028 ............ DC32 EditConfig, InitSnd, Disconnect, ShowMSGCount, PingToServer \ ............ \ ............ \ .... \ 0000003C ........ DC32 AboutDlg \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 D1F2E0F2F3F1 DC8 "\321\362\340\362\363\361" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 582DD1F2E0F2 DC8 "X-\321\362\340\362\363\361" \ F3F100 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 536C69204D6F DC8 "Sli Mode" \ 646500 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 496C6C756D2E DC8 "Illum. Mode" \ 204D6F646500 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 506F70757020 DC8 "Popup Sender" \ 53656E646572 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C3F0F3EFEFFB DC8 "\303\360\363\357\357\373" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 496E69742045 DC8 "Init Ext. Sounds" \ 78742E20536F \ 756E647300 \ 00000011 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4D736720496E DC8 "Msg Info" \ 666F00 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CFE8EDE300 DC8 "\317\350\355\343" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEE120FDEBFC DC8 "\316\341 \375\353\374\364\345" \ F4E500 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CDE0E7E0E400 DC8 "\315\340\347\340\344" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 526563763A20 DC8 "Recv: %d \012Sent: %d" \ 2564200A5365 \ 6E743A202564 \ 00 \ 00000013 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 4EH, 41H, 54H, 49H, 43H, 51H, 20H, 76H \ 2076 \ 00000008 322E300A5265 DC8 32H, 2EH, 30H, 0AH, 52H, 65H, 76H, 69H \ 7669 \ 00000010 73696F6E2025 DC8 73H, 69H, 6FH, 6EH, 20H, 25H, 64H, 0AH \ 640A \ 00000018 284329206279 DC8 28H, 43H, 29H, 20H, 62H, 79H, 20H, 52H \ 2052 \ 00000020 7374372F4342 DC8 73H, 74H, 37H, 2FH, 43H, 42H, 53H, 49H \ 5349 \ 00000028 450A4B72656E DC8 45H, 0AH, 4BH, 72H, 65H, 6EH, 0AH, 4BH \ 0A4B \ 00000030 696261620A53 DC8 69H, 62H, 61H, 62H, 0AH, 53H, 68H, 61H \ 6861 \ 00000038 646F770A5365 DC8 64H, 6FH, 77H, 0AH, 53H, 65H, 6BH, 6CH \ 6B6C \ 00000040 746800 DC8 74H, 68H, 0 \ 00000043 00 DC8 0 Maximum stack usage in bytes: Function CSTACK -------- ------ AboutDlg 260 ChangeILUMode 4 ChangeINCMode 4 ChangeSLIMode 4 ChangeShowGroupsMode 4 ChangeShowOfflineMode 4 ChangeSoundMode 4 ChangeVibraMode 4 Disconnect 4 EditConfig 8 InitSnd 4 PingToServer 8 ShowMSGCount 8 ShowMainMenu 28 menuitemhandler 24 tmenu_ghook 8 tmenu_keyhook 4 Segment part sizes: Function/Label Bytes -------------- ----- ChangeSLIMode 44 ChangeILUMode 44 ChangeINCMode 44 ShowMSGCount 80 InitSnd 4 ChangeVibraMode 44 ChangeSoundMode 44 ChangeShowOfflineMode 56 ChangeShowGroupsMode 60 EditConfig 76 Disconnect 44 PingToServer 92 AboutDlg 56 menuprocs 64 tmenu_ghook 60 icon_array 12 menuitemhandler 356 tmenu_keyhook 48 menuhdr 64 mmenusoftkeys 12 menutexts 64 mmenu_sk 24 mmenu_skt 8 ShowMainMenu 152 ??DataTable13 4 ??DataTable15 4 ??DataTable16 4 ??DataTable17 4 ??DataTable18 4 ??DataTable19 4 ??DataTable20 4 ??DataTable21 4 ??DataTable22 4 ? 64 ? 8 ? 12 ? 12 ? 12 ? 16 ? 8 ? 20 ? 12 ? 8 ? 12 ? 8 ? 8 ? 20 ? 68 Others 128 1 444 bytes in segment CODE 484 bytes in segment DATA_C 64 bytes in segment DATA_I 64 bytes in segment DATA_ID 12 bytes in segment DATA_Z 24 bytes in segment INITTAB 1 340 bytes of CODE memory (+ 128 bytes shared) 548 bytes of CONST memory 76 bytes of DATA memory Errors: none Warnings: none