############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 06/Aug/2008 20:09:45 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\mainmenu.c # # Command line = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\mainmenu.c -D # # NEWSGOLD -D ELKA -D UIN_WRITE --preprocess # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\Release_ELKA\L # # ist\ -lC D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\Relea # # se_ELKA\List\ -o D:\Pasha\elf\_MY_PROJECT_\naticq_mo # # d2\Release_ELKA\Obj\ -s9 --no_unroll --cpu_mode arm # # --endian little --cpu ARM926EJ-S --stack_align 4 # # --interwork -e --fpu None --dlib_config # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\Release_ELKA\L # # ist\mainmenu.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\Release_ELKA\O # # bj\mainmenu.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\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 #include "print.h" 16 #include "configs.h" 17 #include "addon.h" 18 //============================================================================== 19 int MainMenu_ID; 20 21 extern int CurrentStatus; 22 extern int CurrentXStatus; 23 extern DYNPNGICONLIST *XStatusesImgList; 24 extern int *XStatusesIconArray; 25 extern int S_ICONS[]; 26 extern const SOFTKEYSTAB menu_skt; 27 extern int Is_INC_On; 28 extern int Is_SLI_On; 29 extern int Is_SMARTCPU_On; 30 extern int Is_ILU_On; 31 extern int Is_Double_Vibra_On; \ In segment DATA_Z, align 4, align-sorted 32 int janis; \ janis: \ 00000000 DS8 4 33 extern int Is_PING_On; 34 extern int Is_UPTIME_On; 35 extern int Is_Vibra_Enabled; 36 #ifdef NEWSGOLD 37 extern int Is_Id3tag_Enabled; 38 #endif 39 extern unsigned int Is_Sounds_Enabled; 40 extern int Is_Show_Offline; 41 extern int Is_Show_Groups; 42 43 \ In segment CODE, align 4, keep-with-next 44 static void ChangeVibraMode(void) 45 { 46 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ChangeVibraMode: \ 00000000 ........ LDR R0,??DataTable49 ;; 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] 47 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable24 ;; WriteDefSettings \ 00000020 710100EF SWI +369 48 RefreshGUI(); \ 00000024 960100EF SWI +406 49 } \ 00000028 0080BDE8 POP {PC} ;; return 50 #ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 51 static void ChangeId3tagMode(void) 52 { 53 Is_Id3tag_Enabled=!(Is_Id3tag_Enabled); \ ChangeId3tagMode: \ 00000000 ........ LDR R0,??DataTable59 ;; Is_Id3tag_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] 54 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable24 ;; WriteDefSettings \ 00000020 710100EF SWI +369 55 RefreshGUI(); \ 00000024 960100EF SWI +406 56 set_my_xstatus(); \ 00000028 0040BDE8 POP {LR} ;; Pop \ 0000002C ........ _BF set_my_xstatus,??set_my_xstatus??rA ;; tailcall 57 } 58 #endif 59 60 extern int msg_away_timer; 61 extern GBSTMR away_tmr; 62 extern void away_timer(); 63 extern int main_d; 64 extern int away_m; 65 extern unsigned int AUTO_ENGADE; 66 67 extern void UpdateCLheader(void); 68 \ In segment CODE, align 4, keep-with-next 69 static void AutoAwayMSG(void) 70 { 71 if(!away_m) \ AutoAwayMSG: \ 00000000 ........ LDR R0,??DataTable48 ;; away_m \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 001090E5 LDR R1,[R0, #+0] \ 0000000C 58409FE5 LDR R4,??AutoAwayMSG_0 ;; msg_away_timer \ 00000010 000051E3 CMP R1,#+0 \ 00000014 0E00001A BNE ??AutoAwayMSG_1 72 { 73 away_m=!away_m; \ 00000018 0150A0E3 MOV R5,#+1 \ 0000001C 005080E5 STR R5,[R0, #+0] 74 GBS_StopTimer(&away_tmr); \ 00000020 48009FE5 LDR R0,??AutoAwayMSG_0+0x4 ;; away_tmr \ 00000024 440100EF SWI +324 75 msg_away_timer=AUTO_ENGADE*12; \ 00000028 44009FE5 LDR R0,??AutoAwayMSG_0+0x8 ;; AUTO_ENGADE \ 0000002C 0C10A0E3 MOV R1,#+12 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 910000E0 MUL R0,R1,R0 \ 00000038 000084E5 STR R0,[R4, #+0] 76 away_timer(); \ 0000003C ........ _BLF away_timer,??away_timer??rA 77 main_d=1; \ 00000040 30009FE5 LDR R0,??AutoAwayMSG_0+0xC ;; main_d \ 00000044 005080E5 STR R5,[R0, #+0] \ 00000048 ........ _BLF UpdateCLheader,??UpdateCLheader??rA \ 0000004C 960100EF SWI +406 \ 00000050 3080BDE8 POP {R4,R5,PC} 78 } 79 else 80 { 81 msg_away_timer=0; \ ??AutoAwayMSG_1: \ 00000054 0010A0E3 MOV R1,#+0 \ 00000058 001084E5 STR R1,[R4, #+0] 82 away_m=!away_m; \ 0000005C 001080E5 STR R1,[R0, #+0] 83 } 84 UpdateCLheader(); \ 00000060 ........ _BLF UpdateCLheader,??UpdateCLheader??rA 85 RefreshGUI(); \ 00000064 960100EF SWI +406 86 } \ 00000068 3080BDE8 POP {R4,R5,PC} ;; return \ ??AutoAwayMSG_0: \ 0000006C ........ DC32 msg_away_timer \ 00000070 ........ DC32 away_tmr \ 00000074 ........ DC32 AUTO_ENGADE \ 00000078 ........ DC32 main_d 87 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,??DataTable50 ;; 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,??DataTable24 ;; 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,??DataTable57 ;; 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,??DataTable24 ;; 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,??DataTable58 ;; 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,??DataTable24 ;; 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 115 //extern int get_file_size(char* fname); 116 extern char suc_config_name[64]; 117 extern char suc_config_name_mod[64]; \ In segment CODE, align 4, keep-with-next 118 static void EditConfig(void) 119 { \ EditConfig: \ 00000000 10402DE9 PUSH {R4,LR} 120 WSHDR *ws; 121 ws=AllocWS(150); \ 00000004 9600A0E3 MOV R0,#+150 \ 00000008 250100EF SWI +293 122 str_2ws(ws, suc_config_name,128); \ 0000000C 2C109FE5 LDR R1,??EditConfig_0 ;; suc_config_name \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 8020A0E3 MOV R2,#+128 \ 00000018 6C0100EF SWI +364 123 ExecuteFile(ws,0,0); \ 0000001C 0020A0E3 MOV R2,#+0 \ 00000020 0010A0E3 MOV R1,#+0 \ 00000024 0400A0E1 MOV R0,R4 \ 00000028 940000EF SWI +148 124 FreeWS(ws); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 290100EF SWI +297 125 GeneralFuncF1(1); \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 3B0100EF SWI +315 126 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??EditConfig_0: \ 00000040 ........ DC32 suc_config_name 127 \ In segment CODE, align 4, keep-with-next 128 static void EditConfigMod(void) 129 { \ EditConfigMod: \ 00000000 10402DE9 PUSH {R4,LR} 130 WSHDR *ws; 131 ws=AllocWS(150); \ 00000004 9600A0E3 MOV R0,#+150 \ 00000008 250100EF SWI +293 132 str_2ws(ws,suc_config_name_mod,128); \ 0000000C 2C109FE5 LDR R1,??EditConfigMod_0 ;; suc_config_name_mod \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 8020A0E3 MOV R2,#+128 \ 00000018 6C0100EF SWI +364 133 ExecuteFile(ws,0,0); \ 0000001C 0020A0E3 MOV R2,#+0 \ 00000020 0010A0E3 MOV R1,#+0 \ 00000024 0400A0E1 MOV R0,R4 \ 00000028 940000EF SWI +148 134 FreeWS(ws); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 290100EF SWI +297 135 GeneralFuncF1(1); \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 3B0100EF SWI +315 136 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??EditConfigMod_0: \ 00000040 ........ DC32 suc_config_name_mod 137 138 \ In segment CODE, align 4, keep-with-next 139 static void Disconnect(void) 140 { 141 extern volatile int disautorecconect; 142 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] 143 extern void end_socket(void); 144 SUBPROC((void*)end_socket); \ 00000010 10009FE5 LDR R0,??Disconnect_0+0x4 ;; end_socket \ 00000014 710100EF SWI +369 145 GeneralFuncF1(1); \ 00000018 0100A0E3 MOV R0,#+1 \ 0000001C 3B0100EF SWI +315 146 } \ 00000020 0080BDE8 POP {PC} ;; return \ ??Disconnect_0: \ 00000024 ........ DC32 disautorecconect \ 00000028 ........ DC32 end_socket 147 148 extern int uins; \ In segment DATA_Z, align 4, align-sorted 149 char hmm1[64]; \ hmm1: \ 00000000 DS8 64 150 \ In segment CODE, align 4, keep-with-next 151 static void PingToServer(void) 152 { 153 janis=1; \ PingToServer: \ 00000000 4C009FE5 LDR R0,??PingToServer_0 ;; janis \ 00000004 10402DE9 PUSH {R4,LR} \ 00000008 0110A0E3 MOV R1,#+1 \ 0000000C 001080E5 STR R1,[R0, #+0] 154 TPKT *p; 155 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000010 1000A0E3 MOV R0,#+16 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 156 GetDateTime(NULL,(TTime *)p->data); \ 0000001C 081084E2 ADD R1,R4,#+8 \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 B40000EF SWI +180 157 p->pkt.uin=0; \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 000084E5 STR R0,[R4, #+0] 158 p->pkt.type=T_ECHO; \ 00000030 1200A0E3 MOV R0,#+18 \ 00000034 B400C4E1 STRH R0,[R4, #+4] 159 p->pkt.data_len=sizeof(TTime); \ 00000038 0800A0E3 MOV R0,#+8 \ 0000003C B600C4E1 STRH R0,[R4, #+6] 160 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 161 } \ 00000050 1080BDE8 POP {R4,PC} ;; return \ ??PingToServer_0: \ 00000054 ........ DC32 janis \ 00000058 ........ DC32 SendAnswer 162 \ In segment CODE, align 4, keep-with-next 163 static void AboutDlg() 164 { 165 char s[256]; 166 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 0A30A0E3 MOV R3,#+10 \ 00000010 803E83E3 ORR R3,R3,#0x800 \ 00000014 FF10A0E3 MOV R1,#+255 \ 00000018 0D00A0E1 MOV R0,SP \ 0000001C 1B0100EF SWI +283 167 ShowMSG(2, (int)s); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 0200A0E3 MOV R0,#+2 \ 00000028 480100EF SWI +328 168 } \ 0000002C 40DF8DE2 ADD SP,SP,#+256 \ 00000030 0080BDE8 POP {PC} ;; return \ ??AboutDlg_0: \ 00000034 ........ DC32 `?` 169 \ In segment CODE, align 4, keep-with-next 170 static void SaveCL() 171 { 172 extern void CreateCLFile(void); 173 CreateCLFile(); \ SaveCL: \ 00000000 ........ _BF CreateCLFile,??CreateCLFile??rA ;; tailcall 174 } 175 176 static const HEADER_DESC menuhdr={0,0,0,0,NULL,(int)LG_MENU,LGP_NULL}; 177 178 static const int mmenusoftkeys[]={0,1,2}; 179 180 //Переходим к универсальности)) 181 #ifdef NEWSGOLD 182 #ifdef ELKA 183 #define MENU_ITEMS 23//ELKA 184 #else 185 #define MENU_ITEMS 22//NEWSGOLD 186 #endif 187 #else 188 #define MENU_ITEMS 21//SGOLD 189 #endif 190 /* 191 static const char * const menutexts[MENU_ITEMS]= 192 { 193 LG_MNUSTATUS, 194 LG_MNUXSTATUS, 195 LG_MANAGELIST, 196 #ifdef NEWSGOLD 197 LG_ID3TAG, 198 #endif 199 LG_AUTOANSWER,//"Автоответчик", 200 LG_MNUVIBRA, 201 LG_MNUSOUND, 202 //#ifdef NEWSGOLD 203 LG_INCMSG, 204 //#endif 205 #ifdef ELKA 206 LG_MNUSLION, 207 #endif 208 LG_MNUSMARTCPU, 209 LG_REMINDERON, 210 LG_MNUILUON, 211 LG_MNUPINGON, 212 LG_MNUUPTIMEON, 213 LG_MNUSHOWOFF, 214 LG_MNUSHOWGROUP, 215 LG_MNUEDCFG, 216 LG_MNUEDCFG_MOD, 217 LG_MNUDISCONNECT, 218 LG_MSGINFO, 219 LG_SAVECL, 220 LG_MNUPING, 221 LG_MNUABOUT 222 }; 223 */ 224 char *menutexts[MENU_ITEMS]= 225 { 226 LG_MNUSTATUS, 227 LG_MNUXSTATUS, 228 LG_MANAGELIST, 229 LG_AUTOANSWER,//"Автоответчик", 230 LG_MNUVIBRA, 231 LG_MNUSOUND, 232 LG_INCMSG, 233 LG_MNUSMARTCPU, 234 LG_REMINDERON, 235 LG_MNUILUON, 236 LG_MNUPINGON, 237 LG_MNUUPTIMEON, 238 LG_MNUSHOWOFF, 239 LG_MNUSHOWGROUP, 240 LG_MNUEDCFG, 241 LG_MNUEDCFG_MOD, 242 LG_MNUDISCONNECT, 243 LG_MSGINFO, 244 LG_SAVECL, 245 LG_MNUPING, 246 LG_MNUABOUT, 247 #ifdef NEWSGOLD 248 LG_ID3TAG, 249 #endif 250 #ifdef ELKA 251 LG_MNUSLION 252 #endif 253 }; 254 255 #ifdef ELKA \ In segment CODE, align 4, keep-with-next 256 static void ChangeSLIMode(void) 257 { 258 Is_SLI_On=!(Is_SLI_On); \ ChangeSLIMode: \ 00000000 ........ LDR R0,??DataTable60 ;; 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] 259 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable24 ;; WriteDefSettings \ 00000020 710100EF SWI +369 260 RefreshGUI(); \ 00000024 960100EF SWI +406 261 } \ 00000028 0080BDE8 POP {PC} ;; return 262 #endif \ In segment CODE, align 4, keep-with-next 263 static void ChangeSMARTCPUMode(void) 264 { 265 Is_SMARTCPU_On=!(Is_SMARTCPU_On); \ ChangeSMARTCPUMode: \ 00000000 ........ LDR R0,??DataTable52 ;; Is_SMARTCPU_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] 266 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable24 ;; WriteDefSettings \ 00000020 710100EF SWI +369 267 RefreshGUI(); \ 00000024 960100EF SWI +406 268 } \ 00000028 0080BDE8 POP {PC} ;; return 269 //#ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 270 static void ChangeINCMode(void) 271 { 272 Is_INC_On=!(Is_INC_On); \ ChangeINCMode: \ 00000000 ........ LDR R0,??DataTable51 ;; 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] 273 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable24 ;; WriteDefSettings \ 00000020 710100EF SWI +369 274 RefreshGUI(); \ 00000024 960100EF SWI +406 275 } \ 00000028 0080BDE8 POP {PC} ;; return 276 //#endif \ In segment CODE, align 4, keep-with-next 277 static void ChangeILUMode(void) 278 { 279 Is_ILU_On=!(Is_ILU_On); \ ChangeILUMode: \ 00000000 ........ LDR R0,??DataTable54 ;; 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] 280 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable24 ;; WriteDefSettings \ 00000020 710100EF SWI +369 281 RefreshGUI(); \ 00000024 960100EF SWI +406 282 } \ 00000028 0080BDE8 POP {PC} ;; return 283 \ In segment CODE, align 4, keep-with-next 284 static void ChangePINGMode(void) 285 { 286 Is_PING_On=!(Is_PING_On); \ ChangePINGMode: \ 00000000 ........ LDR R0,??DataTable55 ;; Is_PING_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] 287 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable24 ;; WriteDefSettings \ 00000020 710100EF SWI +369 288 RefreshGUI(); \ 00000024 960100EF SWI +406 289 } \ 00000028 0080BDE8 POP {PC} ;; return 290 \ In segment CODE, align 4, keep-with-next 291 static void ChangeUPTIMEMode(void) 292 { 293 Is_UPTIME_On=!(Is_UPTIME_On); \ ChangeUPTIMEMode: \ 00000000 ........ LDR R0,??DataTable56 ;; Is_UPTIME_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] 294 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable24 ;; WriteDefSettings \ 00000020 710100EF SWI +369 295 RefreshGUI(); \ 00000024 960100EF SWI +406 296 } \ 00000028 0080BDE8 POP {PC} ;; return 297 \ In segment DATA_Z, align 4, align-sorted 298 int main_count; \ main_count: \ 00000000 DS8 4 299 int main2_count; \ main2_count: \ 00000004 DS8 4 300 \ In segment CODE, align 4, keep-with-next 301 static void MSG_Info(void) 302 { \ MSG_Info: \ 00000000 10402DE9 PUSH {R4,LR} 303 char *info=malloc(64); \ 00000004 4000A0E3 MOV R0,#+64 \ 00000008 140000EF SWI +20 304 sprintf(info, "Отправлено: %d\n" 305 "Принято: %d", main2_count, main_count); \ 0000000C 2C109FE5 LDR R1,??MSG_Info_0 ;; `?dyn_pltop=NULL; \ 00000010 0010A003 MOVEQ R1,#+0 \ 00000014 08108005 STREQ R1,[R0, #+8] \ 00000018 1080BD08 POPEQ {R4,PC} 402 } 403 if (cmd==0x0A) \ 0000001C 0A0054E3 CMP R4,#+10 \ 00000020 1080BD18 POPNE {R4,PC} 404 { 405 pltop->dyn_pltop=XStatusesImgList; \ 00000024 0C109FE5 LDR R1,??tmenu_ghook_0 ;; XStatusesImgList \ 00000028 001091E5 LDR R1,[R1, #+0] \ 0000002C 081080E5 STR R1,[R0, #+8] 406 DisableIDLETMR(); \ 00000030 7F0100EF SWI +383 407 } 408 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??tmenu_ghook_0: \ 00000038 ........ DC32 XStatusesImgList 409 410 static int icon_array[2]; 411 \ In segment CODE, align 4, keep-with-next 412 static void menuitemhandler(void *data, int curitem, void *unk) 413 { \ menuitemhandler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 414 WSHDR *ws; 415 void *item=AllocMenuItem(data); 416 extern const char percent_t[]; 417 ws=AllocMenuWS(data,strlen(menutexts[curitem])); \ 00000004 ........ LDR R8,??DataTable70 ;; mm_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 970100EF SWI +407 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 059188E0 ADD R9,R8,R5, LSL #+2 \ 0000001C 140099E5 LDR R0,[R9, #+20] \ 00000020 1B0000EF SWI +27 \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0400A0E1 MOV R0,R4 \ 0000002C 980100EF SWI +408 418 wsprintf(ws,percent_t,menutexts[curitem]); \ 00000030 142099E5 LDR R2,[R9, #+20] \ 00000034 50119FE5 LDR R1,??menuitemhandler_1 ;; percent_t \ 00000038 0070A0E1 MOV R7,R0 \ 0000003C 240100EF SWI +292 419 switch(curitem) \ 00000040 48219FE5 LDR R2,??menuitemhandler_1+0x4 ;; S_ICONS \ 00000044 0500A0E1 MOV R0,R5 \ 00000048 160050E3 CMP R0,#+22 \ 0000004C 4800008A BHI ??menuitemhandler_2 \ 00000050 011F8FE2 ADR R1,??menuitemhandler_0 \ 00000054 0010D1E7 LDRB R1,[R1, R0] \ 00000058 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??menuitemhandler_0: \ 0000005C 05090F11 DC8 +5,+9,+15,+17 \ 00000060 191B2325 DC8 +25,+27,+35,+37 \ 00000064 27293133 DC8 +39,+41,+49,+51 \ 00000068 3537393B DC8 +53,+55,+57,+59 \ 0000006C 3D3D423F DC8 +61,+61,+66,+63 \ 00000070 3F413F00 DC8 +63,+65,+63,+0 420 { 421 case 0: 422 SetMenuItemIconArray(data,item,S_ICONS+CurrentStatus); \ ??menuitemhandler_3: \ 00000074 ........ LDR R0,??DataTable46 ;; CurrentStatus \ 00000078 000090E5 LDR R0,[R0, #+0] \ 0000007C 002182E0 ADD R2,R2,R0, LSL #+2 \ 00000080 380000EA B ??menuitemhandler_4 423 break; 424 case 1: 425 SetMenuItemIconArray(data,item,XStatusesIconArray+CurrentXStatus); \ ??menuitemhandler_5: \ 00000084 ........ LDR R0,??DataTable47 ;; CurrentXStatus \ 00000088 04119FE5 LDR R1,??menuitemhandler_1+0x8 ;; XStatusesIconArray \ 0000008C 000090E5 LDR R0,[R0, #+0] \ 00000090 001091E5 LDR R1,[R1, #+0] \ 00000094 002181E0 ADD R2,R1,R0, LSL #+2 \ 00000098 320000EA B ??menuitemhandler_4 426 break; 427 case 2: 428 SetMenuItemIconArray(data,item,S_ICONS+ICON_ADDCONTACT); \ ??menuitemhandler_6: \ 0000009C 482082E2 ADD R2,R2,#+72 \ 000000A0 300000EA B ??menuitemhandler_4 429 break; 430 #ifdef NEWSGOLD 431 case 3: 432 SetMenuItemIconArray(data,item,icon_array+(Is_Id3tag_Enabled?0:1)); \ ??menuitemhandler_7: \ 000000A4 ........ LDR R0,??DataTable59 ;; Is_Id3tag_Enabled \ ??menuitemhandler_8: \ 000000A8 000090E5 LDR R0,[R0, #+0] \ 000000AC 000050E3 CMP R0,#+0 \ 000000B0 0000A013 MOVNE R0,#+0 \ 000000B4 0100A003 MOVEQ R0,#+1 \ 000000B8 000188E0 ADD R0,R8,R0, LSL #+2 \ 000000BC 082080E2 ADD R2,R0,#+8 \ 000000C0 280000EA B ??menuitemhandler_4 433 break; 434 case 4: 435 SetMenuItemIconArray(data,item,icon_array+(away_m?0:1)); \ ??menuitemhandler_9: \ 000000C4 ........ LDR R0,??DataTable48 ;; away_m \ 000000C8 F6FFFFEA B ??menuitemhandler_8 436 break; 437 case 5: 438 SetMenuItemIconArray(data,item,icon_array+(Is_Vibra_Enabled?0:1)); \ ??menuitemhandler_10: \ 000000CC ........ LDR R0,??DataTable49 ;; Is_Vibra_Enabled \ ??menuitemhandler_11: \ 000000D0 000090E5 LDR R0,[R0, #+0] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 0000A013 MOVNE R0,#+0 \ 000000DC 0100A003 MOVEQ R0,#+1 \ 000000E0 000188E0 ADD R0,R8,R0, LSL #+2 \ 000000E4 082080E2 ADD R2,R0,#+8 \ 000000E8 1E0000EA B ??menuitemhandler_4 439 break; 440 case 6: 441 SetMenuItemIconArray(data,item,icon_array+(Is_Sounds_Enabled?0:1)); \ ??menuitemhandler_12: \ 000000EC ........ LDR R0,??DataTable50 ;; Is_Sounds_Enabled \ 000000F0 ECFFFFEA B ??menuitemhandler_8 442 break; 443 #ifdef ELKA 444 case 7: 445 SetMenuItemIconArray(data,item,icon_array+(Is_INC_On?0:1)); \ ??menuitemhandler_13: \ 000000F4 ........ LDR R0,??DataTable51 ;; Is_INC_On \ 000000F8 F4FFFFEA B ??menuitemhandler_11 446 break; 447 case 8: 448 SetMenuItemIconArray(data,item,icon_array+(Is_SLI_On?0:1)); \ ??menuitemhandler_14: \ 000000FC ........ LDR R0,??DataTable60 ;; Is_SLI_On \ 00000100 E8FFFFEA B ??menuitemhandler_8 449 break; 450 case 9: 451 SetMenuItemIconArray(data,item,icon_array+(Is_SMARTCPU_On?0:1)); \ ??menuitemhandler_15: \ 00000104 ........ LDR R0,??DataTable52 ;; Is_SMARTCPU_On \ ??menuitemhandler_16: \ 00000108 000090E5 LDR R0,[R0, #+0] \ 0000010C 000050E3 CMP R0,#+0 \ 00000110 0000A013 MOVNE R0,#+0 \ 00000114 0100A003 MOVEQ R0,#+1 \ 00000118 000188E0 ADD R0,R8,R0, LSL #+2 \ 0000011C 082080E2 ADD R2,R0,#+8 \ 00000120 100000EA B ??menuitemhandler_4 452 break; 453 case 10: 454 SetMenuItemIconArray(data,item,icon_array+(Is_Double_Vibra_On?0:1)); \ ??menuitemhandler_17: \ 00000124 ........ LDR R0,??DataTable53 ;; Is_Double_Vibra_On \ 00000128 DEFFFFEA B ??menuitemhandler_8 455 break; 456 case 11: 457 SetMenuItemIconArray(data,item,icon_array+(Is_ILU_On?0:1)); \ ??menuitemhandler_18: \ 0000012C ........ LDR R0,??DataTable54 ;; Is_ILU_On \ 00000130 E6FFFFEA B ??menuitemhandler_11 458 break; 459 case 12: 460 SetMenuItemIconArray(data,item,icon_array+(Is_PING_On?0:1)); \ ??menuitemhandler_19: \ 00000134 ........ LDR R0,??DataTable55 ;; Is_PING_On \ 00000138 DAFFFFEA B ??menuitemhandler_8 461 break; 462 case 13: 463 SetMenuItemIconArray(data,item,icon_array+(Is_UPTIME_On?0:1)); \ ??menuitemhandler_20: \ 0000013C ........ LDR R0,??DataTable56 ;; Is_UPTIME_On \ 00000140 F0FFFFEA B ??menuitemhandler_16 464 break; 465 case 14: 466 SetMenuItemIconArray(data,item,icon_array+(Is_Show_Offline?0:1)); \ ??menuitemhandler_21: \ 00000144 ........ LDR R0,??DataTable57 ;; Is_Show_Offline \ 00000148 D6FFFFEA B ??menuitemhandler_8 467 break; 468 case 15: 469 SetMenuItemIconArray(data,item,icon_array+(Is_Show_Groups?0:1)); \ ??menuitemhandler_22: \ 0000014C ........ LDR R0,??DataTable58 ;; Is_Show_Groups \ 00000150 DEFFFFEA B ??menuitemhandler_11 470 break; 471 case 16: 472 SetMenuItemIconArray(data,item,S_ICONS+ICON_SETTINGS); \ ??menuitemhandler_23: \ 00000154 582082E2 ADD R2,R2,#+88 \ 00000158 020000EA B ??menuitemhandler_4 473 break; 474 case 17: 475 SetMenuItemIconArray(data,item,S_ICONS+ICON_SETTINGS); 476 break; 477 case 18: 478 SetMenuItemIconArray(data,item,S_ICONS+IS_OFFLINE); 479 break; 480 case 19: 481 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); \ ??menuitemhandler_24: \ 0000015C 382082E2 ADD R2,R2,#+56 \ 00000160 000000EA B ??menuitemhandler_4 482 break; 483 case 20: 484 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); 485 break; 486 case 21: 487 SetMenuItemIconArray(data,item,S_ICONS+ICON_PING); \ ??menuitemhandler_25: \ 00000164 542082E2 ADD R2,R2,#+84 \ ??menuitemhandler_4: \ 00000168 0610A0E1 MOV R1,R6 \ 0000016C 0400A0E1 MOV R0,R4 \ 00000170 990100EF SWI +409 488 break; 489 case 22: 490 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); 491 break; 492 #else 493 case 7: 494 SetMenuItemIconArray(data,item,icon_array+(Is_INC_On?0:1)); 495 break; 496 case 8: 497 SetMenuItemIconArray(data,item,icon_array+(Is_SMARTCPU_On?0:1)); 498 break; 499 case 9: 500 SetMenuItemIconArray(data,item,icon_array+(Is_Double_Vibra_On?0:1)); 501 break; 502 case 10: 503 SetMenuItemIconArray(data,item,icon_array+(Is_ILU_On?0:1)); 504 break; 505 case 11: 506 SetMenuItemIconArray(data,item,icon_array+(Is_PING_On?0:1)); 507 break; 508 case 12: 509 SetMenuItemIconArray(data,item,icon_array+(Is_UPTIME_On?0:1)); 510 break; 511 case 13: 512 SetMenuItemIconArray(data,item,icon_array+(Is_Show_Offline?0:1)); 513 break; 514 case 14: 515 SetMenuItemIconArray(data,item,icon_array+(Is_Show_Groups?0:1)); 516 break; 517 case 15: 518 SetMenuItemIconArray(data,item,S_ICONS+ICON_SETTINGS); 519 break; 520 case 16: 521 SetMenuItemIconArray(data,item,S_ICONS+ICON_SETTINGS); 522 break; 523 case 17: 524 SetMenuItemIconArray(data,item,S_ICONS+IS_OFFLINE); 525 break; 526 case 18: 527 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); 528 break; 529 case 19: 530 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); 531 break; 532 case 20: 533 SetMenuItemIconArray(data,item,S_ICONS+ICON_PING); 534 break; 535 case 21: 536 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); 537 break; 538 #endif 539 #else 540 case 3: 541 SetMenuItemIconArray(data,item,icon_array+(away_m?0:1)); 542 break; 543 case 4: 544 SetMenuItemIconArray(data,item,icon_array+(Is_Vibra_Enabled?0:1)); 545 break; 546 case 5: 547 SetMenuItemIconArray(data,item,icon_array+(Is_Sounds_Enabled?0:1)); 548 break; 549 case 6: 550 SetMenuItemIconArray(data,item,icon_array+(Is_INC_On?0:1)); 551 break; 552 case 7: 553 SetMenuItemIconArray(data,item,icon_array+(Is_SMARTCPU_On?0:1)); 554 break; 555 case 8: 556 SetMenuItemIconArray(data,item,icon_array+(Is_Double_Vibra_On?0:1)); 557 break; 558 case 9: 559 SetMenuItemIconArray(data,item,icon_array+(Is_ILU_On?0:1)); 560 break; 561 case 10: 562 SetMenuItemIconArray(data,item,icon_array+(Is_PING_On?0:1)); 563 break; 564 case 11: 565 SetMenuItemIconArray(data,item,icon_array+(Is_UPTIME_On?0:1)); 566 break; 567 case 12: 568 SetMenuItemIconArray(data,item,icon_array+(Is_Show_Offline?0:1)); 569 break; 570 case 13: 571 SetMenuItemIconArray(data,item,icon_array+(Is_Show_Groups?0:1)); 572 break; 573 case 14: 574 SetMenuItemIconArray(data,item,S_ICONS+ICON_SETTINGS); 575 break; 576 case 15: 577 SetMenuItemIconArray(data,item,S_ICONS+ICON_SETTINGS); 578 break; 579 case 16: 580 SetMenuItemIconArray(data,item,S_ICONS+IS_OFFLINE); 581 break; 582 case 17: 583 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); 584 break; 585 case 18: 586 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); 587 break; 588 case 19: 589 SetMenuItemIconArray(data,item,S_ICONS+ICON_PING); 590 break; 591 case 20: 592 SetMenuItemIconArray(data,item,S_ICONS+IS_UNKNOWN); 593 break; 594 #endif 595 } 596 SetMenuItemText(data, item, ws, curitem); \ ??menuitemhandler_2: \ 00000174 0530A0E1 MOV R3,R5 \ 00000178 0720A0E1 MOV R2,R7 \ 0000017C 0610A0E1 MOV R1,R6 \ 00000180 0400A0E1 MOV R0,R4 \ 00000184 9A0100EF SWI +410 597 } \ 00000188 F083BDE8 POP {R4-R9,PC} ;; return \ ??menuitemhandler_1: \ 0000018C ........ DC32 percent_t \ 00000190 ........ DC32 S_ICONS \ 00000194 ........ DC32 XStatusesIconArray 598 \ In segment CODE, align 4, keep-with-next 599 static int tmenu_keyhook(void *data, GUI_MSG *msg) 600 { \ tmenu_keyhook: \ 00000000 00402DE9 PUSH {LR} 601 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000004 F210D1E1 LDRSH R1,[R1, #+2] \ 00000008 180051E3 CMP R1,#+24 \ 0000000C 3D005113 CMPNE R1,#+61 \ 00000010 0400001A BNE ??tmenu_keyhook_0 602 { 603 ((void (*)(void))(menuprocs[GetCurMenuItem(data)]))(); \ 00000014 8F0100EF SWI +399 \ 00000018 ........ LDR R1,??DataTable70 ;; mm_rc \ 0000001C 000181E0 ADD R0,R1,R0, LSL #+2 \ 00000020 700090E5 LDR R0,[R0, #+112] \ 00000024 30FF2FE1 BLX R0 604 } 605 return(0); \ ??tmenu_keyhook_0: \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0080BDE8 POP {PC} ;; return 606 } \ In segment DATA_C, align 4, align-sorted \ menuhdr: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, `?`, 2147483647 \ ....FFFFFF7F \ 00000014 08000000.... DC32 8, tmenu_keyhook, tmenu_ghook, 0H, mmenusoftkeys, mmenu_skt, 17 \ ............ \ 00000000.... \ ............ \ 11000000 \ 00000030 ........0000 DC32 menuitemhandler, 0H, 0H, 23 \ 000000000000 \ 17000000 \ In segment DATA_C, align 4, align-sorted \ mmenusoftkeys: \ 00000000 000000000100 DC32 0, 1, 2 \ 000002000000 \ 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 607 608 609 static const MENU_DESC tmenu= 610 { 611 8,tmenu_keyhook,tmenu_ghook,NULL, 612 mmenusoftkeys, 613 &mmenu_skt, 614 0x11,//MENU_FLAG, 615 menuitemhandler, 616 NULL,//menuitems, 617 NULL,//menuprocs, 618 MENU_ITEMS 619 }; 620 \ In segment CODE, align 4, keep-with-next 621 void ShowMainMenu() 622 { \ ShowMainMenu: \ 00000000 30402DE9 PUSH {R4,R5,LR} 623 icon_array[0]=GetPicNByUnicodeSymbol(CBOX_CHECKED); \ 00000004 ........ LDR R4,??DataTable70 ;; mm_rc 624 icon_array[1]=GetPicNByUnicodeSymbol(CBOX_UNCHECKED); 625 *((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 080084E5 STR R0,[R4, #+8] \ 0000001C 1700A0E3 MOV R0,#+23 \ 00000020 E10C80E3 ORR R0,R0,#0xE100 \ 00000024 E40100EF SWI +484 \ 00000028 0C0084E5 STR R0,[R4, #+12] \ 0000002C 60009FE5 LDR R0,??ShowMainMenu_0+0x4 ;; S_ICONS + 44 \ 00000030 080085E5 STR R0,[R5, #+8] 626 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] 627 MainMenu_ID=CreateMenu(0,0,&tmenu,&menuhdr,0,MENU_ITEMS,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 1700A0E3 MOV R0,#+23 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 0000A0E3 MOV R0,#+0 \ 00000080 01002DE9 PUSH {R0} \ 00000084 520100EF SWI +338 \ 00000088 100084E5 STR R0,[R4, #+16] 628 } \ 0000008C 3F80BDE8 POP {R0-R5,PC} ;; return \ ??ShowMainMenu_0: \ 00000090 ........ DC32 menuhdr \ 00000094 ........ DC32 S_ICONS + 44 629 630 631 632 int startItem=0; 633 634 #ifdef ELKA 635 int x2_cb=10; 636 #else 637 int x2_cb=10; 638 #endif 639 extern char clrBlack[]; 640 extern char clrWhite[]; 641 extern char clrRed[]; 642 extern char transparent[]; 643 extern char blue[]; 644 extern const int clfont; 645 extern IMGHDR *icons[]; 646 char clrRed2[]={0xFF,0x00,0x00,0x15}; 647 int mm_itemFromDisp;//кол-во на экране \ In segment DATA_Z, align 4, align-sorted 648 int mm_totalItems;//общее количество итемов \ mm_totalItems: \ 00000000 DS8 4 \ In segment DATA_I, align 4, align-sorted 649 int mm_curpos=0;//позичия курсора 650 int mm_curpage=1;//текущая страница 651 652 653 extern void DrwImage(IMGHDR *img, int x, int y, char *pen, char *brush); 654 extern DYNPNGICONLIST *GetXSByItem(int curitem); 655 RECT mm_rc;//MainMenu Rect \ mm_rc: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ 00000008 DS8 8 \ 00000010 REQUIRE `?` \ MainMenu_ID: \ 00000010 DS8 4 \ 00000014 REQUIRE `?` \ menutexts: \ 00000014 DS8 92 \ 00000070 REQUIRE `?` \ 00000070 DS8 92 \ 000000CC REQUIRE `?` \ startItem: \ 000000CC DS8 4 \ 000000D0 REQUIRE `?` \ x2_cb: \ 000000D0 DS8 4 \ 000000D4 REQUIRE `?` \ mm_itemFromDisp: \ 000000D4 DS8 4 \ 000000D8 REQUIRE `?` \ mm_curpos: \ 000000D8 DS8 4 \ 000000DC REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ clrRed2: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ mm_curpage: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` 656 #define mm_font 108 657 658 #define CLIST_Y1 (YDISP+2) 659 \ In segment CODE, align 4, keep-with-next 660 static DrawCheckBox(int x,int y,int flag) 661 { \ DrawCheckBox: \ 00000000 70402DE9 PUSH {R4-R6,LR} 662 RECT rc; 663 StoreXYXYtoRECT(&rc,x+2,y,x+x2_cb+2,y+x2_cb); \ 00000004 ........ LDR R5,??DataTable70 ;; mm_rc \ 00000008 08D04DE2 SUB SP,SP,#+8 664 DrawRectangle(rc.x,rc.y,rc.x2,rc.y2,0,clrWhite,transparent); \ 0000000C ........ LDR R6,??DataTable64 ;; clrWhite \ 00000010 0240A0E1 MOV R4,R2 \ 00000014 D02095E5 LDR R2,[R5, #+208] \ 00000018 013082E0 ADD R3,R2,R1 \ 0000001C 08002DE9 PUSH {R3} \ 00000020 002082E0 ADD R2,R2,R0 \ 00000024 023082E2 ADD R3,R2,#+2 \ 00000028 0120A0E1 MOV R2,R1 \ 0000002C 021080E2 ADD R1,R0,#+2 \ 00000030 04008DE2 ADD R0,SP,#+4 \ 00000034 340100EF SWI +308 \ 00000038 ........ LDR R0,??DataTable65 ;; transparent \ 0000003C 01002DE9 PUSH {R0} \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 01002DE9 PUSH {R0} \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 F631DDE1 LDRSH R3,[SP, #+22] \ 00000054 F421DDE1 LDRSH R2,[SP, #+20] \ 00000058 F211DDE1 LDRSH R1,[SP, #+18] \ 0000005C F001DDE1 LDRSH R0,[SP, #+16] \ 00000060 B40100EF SWI +436 665 if(flag) \ 00000064 000054E3 CMP R4,#+0 \ 00000068 10D08DE2 ADD SP,SP,#+16 \ 0000006C 7380BD08 POPEQ {R0,R1,R4-R6,PC} 666 { 667 DrawLine(rc.x+2,rc.y+5,rc.x2-7,rc.y2-2,0,clrWhite); \ 00000070 0600A0E1 MOV R0,R6 \ 00000074 01002DE9 PUSH {R0} \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 FE00DDE1 LDRSH R0,[SP, #+14] \ 00000084 023040E2 SUB R3,R0,#+2 \ 00000088 FC00DDE1 LDRSH R0,[SP, #+12] \ 0000008C 072040E2 SUB R2,R0,#+7 \ 00000090 FA00DDE1 LDRSH R0,[SP, #+10] \ 00000094 051080E2 ADD R1,R0,#+5 \ 00000098 F800DDE1 LDRSH R0,[SP, #+8] \ 0000009C 020080E2 ADD R0,R0,#+2 \ 000000A0 B30100EF SWI +435 668 DrawLine(rc.x2-7,rc.y2-2,rc.x+x2_cb,rc.y-2,0,clrWhite); \ 000000A4 40002DE9 PUSH {R6} \ 000000A8 0000A0E3 MOV R0,#+0 \ 000000AC 01002DE9 PUSH {R0} \ 000000B0 D01095E5 LDR R1,[R5, #+208] \ 000000B4 F201DDE1 LDRSH R0,[SP, #+18] \ 000000B8 023040E2 SUB R3,R0,#+2 \ 000000BC F001DDE1 LDRSH R0,[SP, #+16] \ 000000C0 002081E0 ADD R2,R1,R0 \ 000000C4 F601DDE1 LDRSH R0,[SP, #+22] \ 000000C8 021040E2 SUB R1,R0,#+2 \ 000000CC F401DDE1 LDRSH R0,[SP, #+20] \ 000000D0 070040E2 SUB R0,R0,#+7 \ 000000D4 B30100EF SWI +435 \ 000000D8 10D08DE2 ADD SP,SP,#+16 669 } 670 } \ 000000DC 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return 671 \ In segment CODE, align 4, keep-with-next 672 void DrawIcon(int x,int y,int curitem) 673 { \ DrawIcon: \ 00000000 30402DE9 PUSH {R4,R5,LR} 674 switch(curitem) \ 00000004 160052E3 CMP R2,#+22 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 80019FE5 LDR R0,??DrawIcon_1 ;; icons \ 00000010 0150A0E1 MOV R5,R1 \ 00000014 3080BD88 POPHI {R4,R5,PC} \ 00000018 011F8FE2 ADR R1,??DrawIcon_0 \ 0000001C 0210D1E7 LDRB R1,[R1, R2] \ 00000020 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??DrawIcon_0: \ 00000024 050E1A1E DC8 +5,+14,+26,+30 \ 00000028 20292B2D DC8 +32,+41,+43,+45 \ 0000002C 2F313335 DC8 +47,+49,+51,+53 \ 00000030 37393B3B DC8 +55,+57,+59,+59 \ 00000034 4448484C DC8 +68,+72,+72,+76 \ 00000038 48505200 DC8 +72,+80,+82,+0 675 { 676 case 0: DrwImage(icons[CurrentStatus],x,y,0,0); break; \ ??DrawIcon_2: \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 02002DE9 PUSH {R1} \ 00000044 0030A0E3 MOV R3,#+0 \ 00000048 0520A0E1 MOV R2,R5 \ 0000004C 0410A0E1 MOV R1,R4 \ 00000050 ........ LDR R4,??DataTable46 ;; CurrentStatus \ 00000054 004094E5 LDR R4,[R4, #+0] \ 00000058 040190E7 LDR R0,[R0, +R4, LSL #+2] \ 0000005C 320000EA B ??DrawIcon_3 677 case 1: 678 { 679 DYNPNGICONLIST *xs=GetXSByItem(CurrentXStatus); \ ??DrawIcon_4: \ 00000060 ........ LDR R0,??DataTable47 ;; CurrentXStatus \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 ........ _BLF GetXSByItem,??GetXSByItem??rA 680 DrwImage(xs->img,x,y,0,0); \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 02002DE9 PUSH {R1} \ 00000074 080090E5 LDR R0,[R0, #+8] \ 00000078 0030A0E3 MOV R3,#+0 \ 0000007C 0520A0E1 MOV R2,R5 \ 00000080 0410A0E1 MOV R1,R4 \ 00000084 ........ _BLF DrwImage,??DrwImage??rA \ 00000088 04D08DE2 ADD SP,SP,#+4 \ 0000008C 3080BDE8 POP {R4,R5,PC} 681 } 682 break; 683 case 2: DrwImage(icons[ICON_ADDCONTACT],x,y,0,0); break;//DrawImg(x,y,S_ICONS[ICON_ADDCONTACT]); \ ??DrawIcon_5: \ 00000090 0010A0E3 MOV R1,#+0 \ 00000094 02002DE9 PUSH {R1} \ 00000098 480090E5 LDR R0,[R0, #+72] \ 0000009C 1F0000EA B ??DrawIcon_6 684 case 3: DrawCheckBox(x,y,away_m?1:0); break; \ ??DrawIcon_7: \ 000000A0 ........ LDR R0,??DataTable48 ;; away_m \ 000000A4 000000EA B ??DrawIcon_8 685 case 4: DrawCheckBox(x,y,Is_Vibra_Enabled?1:0); break; \ ??DrawIcon_9: \ 000000A8 ........ LDR R0,??DataTable49 ;; Is_Vibra_Enabled \ ??DrawIcon_8: \ 000000AC 0510A0E1 MOV R1,R5 \ 000000B0 000090E5 LDR R0,[R0, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0120A013 MOVNE R2,#+1 \ 000000BC 0020A003 MOVEQ R2,#+0 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 ........ BL DrawCheckBox \ 000000C8 3080BDE8 POP {R4,R5,PC} 686 case 5: DrawCheckBox(x,y,Is_Sounds_Enabled?1:0); break; \ ??DrawIcon_10: \ 000000CC ........ LDR R0,??DataTable50 ;; Is_Sounds_Enabled \ 000000D0 F5FFFFEA B ??DrawIcon_8 687 case 6: DrawCheckBox(x,y,Is_INC_On?1:0); break; \ ??DrawIcon_11: \ 000000D4 ........ LDR R0,??DataTable51 ;; Is_INC_On \ 000000D8 F3FFFFEA B ??DrawIcon_8 688 case 7: DrawCheckBox(x,y,Is_SMARTCPU_On?1:0); break; \ ??DrawIcon_12: \ 000000DC ........ LDR R0,??DataTable52 ;; Is_SMARTCPU_On \ 000000E0 F1FFFFEA B ??DrawIcon_8 689 case 8: DrawCheckBox(x,y,Is_Double_Vibra_On?1:0); break; \ ??DrawIcon_13: \ 000000E4 ........ LDR R0,??DataTable53 ;; Is_Double_Vibra_On \ 000000E8 EFFFFFEA B ??DrawIcon_8 690 case 9: DrawCheckBox(x,y,Is_ILU_On?1:0); break; \ ??DrawIcon_14: \ 000000EC ........ LDR R0,??DataTable54 ;; Is_ILU_On \ 000000F0 EDFFFFEA B ??DrawIcon_8 691 case 10: DrawCheckBox(x,y,Is_PING_On?1:0); break; \ ??DrawIcon_15: \ 000000F4 ........ LDR R0,??DataTable55 ;; Is_PING_On \ 000000F8 EBFFFFEA B ??DrawIcon_8 692 case 11: DrawCheckBox(x,y,Is_UPTIME_On?1:0); break; \ ??DrawIcon_16: \ 000000FC ........ LDR R0,??DataTable56 ;; Is_UPTIME_On \ 00000100 E9FFFFEA B ??DrawIcon_8 693 case 12: DrawCheckBox(x,y,Is_Show_Offline?1:0); break; \ ??DrawIcon_17: \ 00000104 ........ LDR R0,??DataTable57 ;; Is_Show_Offline \ 00000108 E7FFFFEA B ??DrawIcon_8 694 case 13: DrawCheckBox(x,y,Is_Show_Groups?1:0); break; \ ??DrawIcon_18: \ 0000010C ........ LDR R0,??DataTable58 ;; Is_Show_Groups \ 00000110 E5FFFFEA B ??DrawIcon_8 695 case 14: DrwImage(icons[ICON_SETTINGS],x,y,0,0); break; \ ??DrawIcon_19: \ 00000114 0010A0E3 MOV R1,#+0 \ 00000118 02002DE9 PUSH {R1} \ 0000011C 580090E5 LDR R0,[R0, #+88] \ ??DrawIcon_6: \ 00000120 0030A0E3 MOV R3,#+0 \ 00000124 0520A0E1 MOV R2,R5 \ 00000128 0410A0E1 MOV R1,R4 \ ??DrawIcon_3: \ 0000012C ........ _BLF DrwImage,??DrwImage??rA \ 00000130 04D08DE2 ADD SP,SP,#+4 \ 00000134 3080BDE8 POP {R4,R5,PC} 696 case 15: DrwImage(icons[ICON_SETTINGS],x,y,0,0); break; 697 case 16: DrwImage(icons[IS_OFFLINE],x,y,0,0); break; \ ??DrawIcon_20: \ 00000138 0010A0E3 MOV R1,#+0 \ 0000013C 02002DE9 PUSH {R1} \ 00000140 000090E5 LDR R0,[R0, #+0] \ 00000144 F5FFFFEA B ??DrawIcon_6 698 case 17: DrwImage(icons[IS_UNKNOWN],x,y,0,0); break; \ ??DrawIcon_21: \ 00000148 0010A0E3 MOV R1,#+0 \ 0000014C 02002DE9 PUSH {R1} \ 00000150 380090E5 LDR R0,[R0, #+56] \ 00000154 F1FFFFEA B ??DrawIcon_6 699 case 18: DrwImage(icons[IS_UNKNOWN],x,y,0,0); break; 700 case 19: DrwImage(icons[ICON_PING],x,y,0,0); break; \ ??DrawIcon_22: \ 00000158 0010A0E3 MOV R1,#+0 \ 0000015C 02002DE9 PUSH {R1} \ 00000160 540090E5 LDR R0,[R0, #+84] \ 00000164 EDFFFFEA B ??DrawIcon_6 701 case 20: DrwImage(icons[IS_UNKNOWN],x,y,0,0); break; 702 #ifdef NEWSGOLD 703 case 21: DrawCheckBox(x,y,Is_Id3tag_Enabled?1:0); break; \ ??DrawIcon_23: \ 00000168 ........ LDR R0,??DataTable59 ;; Is_Id3tag_Enabled \ 0000016C CEFFFFEA B ??DrawIcon_8 704 #ifdef ELKA 705 case 22: DrawCheckBox(x,y,Is_SLI_On?1:0); break; \ ??DrawIcon_24: \ 00000170 ........ LDR R0,??DataTable60 ;; Is_SLI_On \ 00000174 0510A0E1 MOV R1,R5 \ 00000178 000090E5 LDR R0,[R0, #+0] \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 0120A013 MOVNE R2,#+1 \ 00000184 0020A003 MOVEQ R2,#+0 \ 00000188 0400A0E1 MOV R0,R4 \ 0000018C ........ BL DrawCheckBox 706 #endif 707 #endif 708 } 709 } \ ??DrawIcon_25: \ 00000190 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawIcon_1: \ 00000194 ........ DC32 icons 710 711 \ In segment CODE, align 4, keep-with-next 712 void DrawMMScrollBar(int cur,int total) 713 { \ DrawMMScrollBar: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 714 int scr_h=ScreenH()-1; 715 int scr_w=ScreenW()-1; 716 int y=mm_rc.y2-mm_rc.y-2;//scr_h-CLIST_Y1-FontH(clfont)-2; \ 00000004 ........ LDR R6,??DataTable70 ;; mm_rc \ 00000008 0080A0E1 MOV R8,R0 \ 0000000C 0140A0E1 MOV R4,R1 \ 00000010 898100EF SWI +33161 \ 00000014 888100EF SWI +33160 \ 00000018 F270D6E1 LDRSH R7,[R6, #+2] \ 0000001C F630D6E1 LDRSH R3,[R6, #+6] 717 int pos=y*cur/total; \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 070043E0 SUB R0,R3,R7 \ 00000028 025040E2 SUB R5,R0,#+2 \ 0000002C 980500E0 MUL R0,R8,R5 \ 00000030 ........ LDR R8,??DataTable64 ;; clrWhite \ 00000034 ........ _BLF ??div32_a,??rA??div32_a \ 00000038 F400D6E1 LDRSH R0,[R6, #+4] \ 0000003C 0190A0E1 MOV R9,R1 \ 00000040 0810A0E1 MOV R1,R8 \ 00000044 02002DE9 PUSH {R1} \ 00000048 020040E2 SUB R0,R0,#+2 \ 0000004C 0020A0E1 MOV R2,R0 \ 00000050 0110A0E3 MOV R1,#+1 \ 00000054 02002DE9 PUSH {R1} \ 00000058 0710A0E1 MOV R1,R7 718 int y2=y/total; 719 // int i=0; 720 721 DrawLine(mm_rc.x2-2,mm_rc.y,mm_rc.x2-2,mm_rc.y2,1,clrWhite); \ 0000005C B30100EF SWI +435 722 DrawRoundedFrame(mm_rc.x2-3,mm_rc.y+pos+1,mm_rc.x2-1,mm_rc.y+pos+y2,0,0,0,clrWhite,clrWhite); \ 00000060 F200D6E1 LDRSH R0,[R6, #+2] \ 00000064 F460D6E1 LDRSH R6,[R6, #+4] \ 00000068 0410A0E1 MOV R1,R4 \ 0000006C 007089E0 ADD R7,R9,R0 \ 00000070 0800A0E1 MOV R0,R8 \ 00000074 01002DE9 PUSH {R0} \ 00000078 00012DE9 PUSH {R8} \ 0000007C 012046E2 SUB R2,R6,#+1 \ 00000080 0000A0E3 MOV R0,#+0 \ 00000084 01002DE9 PUSH {R0} \ 00000088 01002DE9 PUSH {R0} \ 0000008C 01002DE9 PUSH {R0} \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 ........ _BLF ??div32_a,??rA??div32_a \ 00000098 073081E0 ADD R3,R1,R7 \ 0000009C 011087E2 ADD R1,R7,#+1 \ 000000A0 030046E2 SUB R0,R6,#+3 \ 000000A4 500100EF SWI +336 723 /*for(i=0;i= MENU_ITEMS) break; \ 00000194 CC0095E5 LDR R0,[R5, #+204] \ 00000198 18D08DE2 ADD SP,SP,#+24 \ 0000019C 000086E0 ADD R0,R6,R0 \ 000001A0 170050E3 CMP R0,#+23 \ 000001A4 B0FFFFBA BLT ??MM_DrawList_0 762 } 763 mfree(s); \ ??MM_DrawList_1: \ 000001A8 0800A0E1 MOV R0,R8 \ 000001AC 150000EF SWI +21 764 UnlockSched(); \ 000001B0 470100EF SWI +327 765 } \ 000001B4 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??MM_DrawList_2: \ 000001B8 25730000 DC8 "%s",+0 766 767 // Управление курсором \ In segment CODE, align 4, keep-with-next 768 void MM_MoveUp(int i) 769 { 770 if(mm_curpos > mm_itemFromDisp + 2 ){ mm_curpos--; } \ MM_MoveUp: \ 00000000 ........ LDR R0,??DataTable70 ;; mm_rc \ 00000004 D81090E5 LDR R1,[R0, #+216] \ 00000008 D43090E5 LDR R3,[R0, #+212] \ 0000000C CC2090E5 LDR R2,[R0, #+204] \ 00000010 02C083E2 ADD R12,R3,#+2 \ 00000014 01005CE1 CMP R12,R1 \ 00000018 011041B2 SUBLT R1,R1,#+1 \ 0000001C 080000BA BLT ??MM_MoveUp_0 771 else 772 if(mm_curpos > 0){ mm_curpos--; if(startItem>0) startItem--; } \ 00000020 010051E3 CMP R1,#+1 \ 00000024 040000BA BLT ??MM_MoveUp_1 \ 00000028 011041E2 SUB R1,R1,#+1 \ 0000002C 010052E3 CMP R2,#+1 \ 00000030 030000BA BLT ??MM_MoveUp_0 \ 00000034 012042E2 SUB R2,R2,#+1 \ 00000038 010000EA B ??MM_MoveUp_0 773 else 774 { 775 mm_curpos=MENU_ITEMS-1; \ ??MM_MoveUp_1: \ 0000003C 1610A0E3 MOV R1,#+22 776 startItem=MENU_ITEMS-mm_itemFromDisp; \ 00000040 172063E2 RSB R2,R3,#+23 \ ??MM_MoveUp_0: \ 00000044 CC2080E5 STR R2,[R0, #+204] \ 00000048 D81080E5 STR R1,[R0, #+216] 777 } 778 } \ 0000004C 1EFF2FE1 BX LR ;; return 779 780 \ In segment CODE, align 4, keep-with-next 781 void MM_MoveDown(int i) 782 { 783 if(mm_curpos ` \ 00000008 460100EF SWI +326 \ 0000000C 50109FE5 LDR R1,??MM_OnRedraw_0+0x4 ;; clrBlack \ 00000010 ........ LDR R0,??DataTable69 ;; mm_rc \ 00000014 02002DE9 PUSH {R1} \ 00000018 0410A0E1 MOV R1,R4 \ 0000001C 02002DE9 PUSH {R1} \ 00000020 0010A0E3 MOV R1,#+0 \ 00000024 02002DE9 PUSH {R1} \ 00000028 02002DE9 PUSH {R1} \ 0000002C 02002DE9 PUSH {R1} \ 00000030 F630D0E1 LDRSH R3,[R0, #+6] \ 00000034 F420D0E1 LDRSH R2,[R0, #+4] \ 00000038 F210D0E1 LDRSH R1,[R0, #+2] \ 0000003C F000D0E1 LDRSH R0,[R0, #+0] \ 00000040 021041E2 SUB R1,R1,#+2 \ 00000044 500100EF SWI +336 805 //for(int i=mm_rc.y2-mm_rc.y;i>0;i-=15) 806 // DrawRoundedFrame(mm_rc.x,mm_rc.y,mm_rc.x2,mm_rc.y2-i,0,0,0,clrRed2,clrRed2); 807 DrawSoftKeys(LG_SELECT,LG_CLOSE); \ 00000048 081084E2 ADD R1,R4,#+8 \ 0000004C 100084E2 ADD R0,R4,#+16 \ 00000050 ........ _BLF DrawSoftKeys,??DrawSoftKeys??rA 808 MM_DrawList(); \ 00000054 ........ BL MM_DrawList 809 } \ 00000058 14D08DE2 ADD SP,SP,#+20 \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??MM_OnRedraw_0: \ 00000060 ........ DC32 `?` \ 00000064 ........ DC32 clrBlack 810 \ In segment CODE, align 4, keep-with-next 811 static void MM_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 812 { \ MM_onCreate: \ 00000000 70402DE9 PUSH {R4-R6,LR} 813 #ifdef ELKA 814 DisableIconBar(1); 815 #endif 816 // DoScreen(); 817 mm_rc.x=0; \ 00000004 ........ LDR R5,??DataTable69 ;; mm_rc \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0200EF SWI +571 \ 00000014 0000A0E3 MOV R0,#+0 \ 00000018 B000C5E1 STRH R0,[R5, #+0] 818 mm_rc.y=YDISP+20; \ 0000001C 2C00A0E3 MOV R0,#+44 \ 00000020 B200C5E1 STRH R0,[R5, #+2] 819 mm_rc.x2=ScreenW()-50; \ 00000024 888100EF SWI +33160 \ 00000028 320040E2 SUB R0,R0,#+50 \ 0000002C B400C5E1 STRH R0,[R5, #+4] 820 mm_rc.y2=ScreenH()-FontH(clfont)-3; \ 00000030 898100EF SWI +33161 \ 00000034 0060A0E1 MOV R6,R0 \ 00000038 24009FE5 LDR R0,??MM_onCreate_0 ;; clfont \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 ........ _BLF FontH,??FontH??rA \ 00000044 000046E0 SUB R0,R6,R0 \ 00000048 030040E2 SUB R0,R0,#+3 \ 0000004C B600C5E1 STRH R0,[R5, #+6] 821 SetCanvasFlag(1); \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 822 data->gui.state=1; \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C 0C00C4E5 STRB R0,[R4, #+12] 823 } \ 00000060 7080BDE8 POP {R4-R6,PC} ;; return \ ??MM_onCreate_0: \ 00000064 ........ DC32 clfont 824 \ In segment CODE, align 4, keep-with-next 825 static void MM_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 826 { 827 //mfree(screen.bitmap); 828 // zeromem(screen.bitmap,(screen.w*screen.h*2)); 829 data->gui.state=0; \ MM_onClose: \ 00000000 0010A0E3 MOV R1,#+0 \ 00000004 0C10C0E5 STRB R1,[R0, #+12] 830 } \ 00000008 1EFF2FE1 BX LR ;; return 831 \ In segment CODE, align 4, keep-with-next 832 static void MM_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 833 { \ MM_onFocus: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 834 #ifdef ELKA 835 DisableIconBar(1); \ 00000008 0100A0E3 MOV R0,#+1 \ 0000000C 3B0200EF SWI +571 836 #endif 837 SetCanvasFlag(1); \ 00000010 0100A0E3 MOV R0,#+1 \ 00000014 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 838 data->gui.state=2; \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 839 DisableIDLETMR(); \ 00000020 7F0100EF SWI +383 840 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 841 \ In segment CODE, align 4, keep-with-next 842 static void MM_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 843 { 844 if (data->gui.state!=2) return; \ MM_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 845 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 846 } \ 00000010 1EFF2FE1 BX LR ;; return 847 \ In segment CODE, align 4, keep-with-next 848 static int MM_OnKey(MAIN_GUI *data, GUI_MSG *msg) 849 { \ MM_OnKey: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0140A0E1 MOV R4,R1 850 DirectRedrawGUI(); \ 00000008 3F0100EF SWI +319 851 int k=msg->gbsmsg->submess; \ 0000000C 044094E5 LDR R4,[R4, #+4] 852 853 if (msg->gbsmsg->msg==KEY_DOWN || msg->gbsmsg->msg==LONG_PRESS) \ 00000010 9360A0E3 MOV R6,#+147 \ 00000014 040094E5 LDR R0,[R4, #+4] \ 00000018 085094E5 LDR R5,[R4, #+8] \ 0000001C 406F86E3 ORR R6,R6,#0x100 \ 00000020 060050E1 CMP R0,R6 \ 00000024 02108612 ADDNE R1,R6,#+2 \ 00000028 01005011 CMPNE R0,R1 \ 0000002C 0B00001A BNE ??MM_OnKey_0 854 { 855 switch(k) \ 00000030 040055E2 SUBS R0,R5,#+4 \ 00000034 08005012 SUBSNE R0,R0,#+8 \ 00000038 1A00000A BEQ ??MM_OnKey_1 \ 0000003C 2F0050E2 SUBS R0,R0,#+47 \ 00000040 0400000A BEQ ??MM_OnKey_2 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 1300000A BEQ ??MM_OnKey_3 \ 0000004C 010050E2 SUBS R0,R0,#+1 \ 00000050 1400000A BEQ ??MM_OnKey_1 \ 00000054 010000EA B ??MM_OnKey_0 856 { 857 case UP_BUTTON: MM_MoveUp(0); break; \ ??MM_OnKey_2: \ 00000058 0000A0E3 MOV R0,#+0 \ 0000005C ........ BL MM_MoveUp 858 case DOWN_BUTTON: MM_MoveDown(0); break; 859 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: return (1); 860 // case ENTER_BUTTON: case LEFT_SOFT: ((void (*)(void))(menuprocs[mm_curpos]))(); REDRAW(); break; 861 } 862 } 863 864 if (msg->gbsmsg->msg==KEY_DOWN) \ ??MM_OnKey_0: \ 00000060 040094E5 LDR R0,[R4, #+4] \ 00000064 060050E1 CMP R0,R6 \ 00000068 0900001A BNE ??MM_OnKey_4 865 { 866 switch(k) \ 0000006C 015055E2 SUBS R5,R5,#+1 \ 00000070 19505512 SUBSNE R5,R5,#+25 \ 00000074 24505512 SUBSNE R5,R5,#+36 \ 00000078 0500001A BNE ??MM_OnKey_4 867 { 868 case ENTER_BUTTON: case LEFT_SOFT: case RIGHT_BUTTON: 869 ((void (*)(void))(menuprocs[mm_curpos]))(); \ 0000007C ........ LDR R0,??DataTable70 ;; mm_rc \ 00000080 D81090E5 LDR R1,[R0, #+216] \ 00000084 010180E0 ADD R0,R0,R1, LSL #+2 \ 00000088 700090E5 LDR R0,[R0, #+112] \ 0000008C 30FF2FE1 BLX R0 870 REDRAW(); \ 00000090 720100EF SWI +370 871 break; 872 } 873 } 874 875 return(0); \ ??MM_OnKey_4: \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 7080BDE8 POP {R4-R6,PC} ;; return \ ??MM_OnKey_3: \ 0000009C 0000A0E3 MOV R0,#+0 \ 000000A0 ........ BL MM_MoveDown \ 000000A4 EDFFFFEA B ??MM_OnKey_0 \ ??MM_OnKey_1: \ 000000A8 0100A0E3 MOV R0,#+1 \ 000000AC 7080BDE8 POP {R4-R6,PC} 876 } 877 878 extern void kill_data(void *p, void (*func_p)(void *)); 879 \ In segment CODE, align 4, keep-with-next 880 int MM_method8(void){return(0);} \ MM_method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment CODE, align 4, keep-with-next 881 int MM_method9(void){return(0);} \ MM_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 882 \ In segment DATA_C, align 4, align-sorted 883 const void * const gui_methods_2[11]={ \ gui_methods_2: \ 00000000 ............ DC32 MM_OnRedraw, MM_onCreate, MM_onClose, MM_onFocus, MM_onUnfocus \ ............ \ ............ \ .... \ 00000014 ........0000 DC32 MM_OnKey, 0H, kill_data, MM_method8, MM_method9, 0H \ 0000........ \ ............ \ ....00000000 884 (void *)MM_OnRedraw, 885 (void *)MM_onCreate, 886 (void *)MM_onClose, 887 (void *)MM_onFocus, 888 (void *)MM_onUnfocus, 889 (void *)MM_OnKey, 890 0, 891 (void *)kill_data, 892 (void *)MM_method8, 893 (void *)MM_method9, 894 0 895 }; 896 897 const RECT MM_Canvas={0,0,0,0}; \ MM_Canvas: \ 0000002C 000000000000 DC16 0, 0, 0, 0 \ 0000 898 \ In segment CODE, align 4, keep-with-next 899 void CreateMainMenu() 900 { \ CreateMainMenu: \ 00000000 10402DE9 PUSH {R4,LR} 901 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000004 4000A0E3 MOV R0,#+64 \ 00000008 140000EF SWI +20 \ 0000000C 0040A0E1 MOV R4,R0 902 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000010 4010A0E3 MOV R1,#+64 \ 00000014 1D0100EF SWI +285 903 main_gui->gui.canvas=(void *)(&MM_Canvas); \ 00000018 24009FE5 LDR R0,??CreateMainMenu_0 ;; gui_methods_2 \ 0000001C 2C1080E2 ADD R1,R0,#+44 \ 00000020 001084E5 STR R1,[R4, #+0] 904 main_gui->gui.methods=(void *)gui_methods_2; \ 00000024 040084E5 STR R0,[R4, #+4] 905 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000028 158000EF SWI +32789 \ 0000002C 200084E5 STR R0,[R4, #+32] 906 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 907 MainMenu_ID=CreateGUI(main_gui); \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 370100EF SWI +311 \ 00000038 08109FE5 LDR R1,??CreateMainMenu_0+0x4 ;; mm_rc + 16 \ 0000003C 000081E5 STR R0,[R1, #+0] 908 } \ 00000040 1080BDE8 POP {R4,PC} ;; return \ ??CreateMainMenu_0: \ 00000044 ........ DC32 gui_methods_2 \ 00000048 ........ DC32 mm_rc + 16 \ In segment CODE, align 4, keep-with-next \ ??DataTable24: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable46: \ 00000000 ........ DC32 CurrentStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable47: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 away_m \ In segment CODE, align 4, keep-with-next \ ??DataTable49: \ 00000000 ........ DC32 Is_Vibra_Enabled \ In segment CODE, align 4, keep-with-next \ ??DataTable50: \ 00000000 ........ DC32 Is_Sounds_Enabled \ In segment CODE, align 4, keep-with-next \ ??DataTable51: \ 00000000 ........ DC32 Is_INC_On \ In segment CODE, align 4, keep-with-next \ ??DataTable52: \ 00000000 ........ DC32 Is_SMARTCPU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 Is_Double_Vibra_On \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 Is_ILU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable55: \ 00000000 ........ DC32 Is_PING_On \ In segment CODE, align 4, keep-with-next \ ??DataTable56: \ 00000000 ........ DC32 Is_UPTIME_On \ In segment CODE, align 4, keep-with-next \ ??DataTable57: \ 00000000 ........ DC32 Is_Show_Offline \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 Is_Show_Groups \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 Is_Id3tag_Enabled \ In segment CODE, align 4, keep-with-next \ ??DataTable60: \ 00000000 ........ DC32 Is_SLI_On \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 clrWhite \ In segment CODE, align 4, keep-with-next \ ??DataTable65: \ 00000000 ........ DC32 transparent \ In segment CODE, align 4, keep-with-next \ ??DataTable69: \ 00000000 ........ DC32 mm_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable70: \ 00000000 ........ DC32 mm_rc \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000008 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000010 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000014 ........ DC32 `?` \ 00000018 ........ DC32 `?` \ 0000001C ........ DC32 `?` \ 0000004C ........ DC32 `?` \ 00000064 ........ DC32 `?` \ 00000068 ........ DC32 `?` \ 0000006C ........ DC32 `?` \ `?`: \ 00000070 ............ DC32 CreateSCMenu, CreateXSMenu, CreateManageCLMenu, AutoAwayMSG \ ............ \ ........ \ 00000080 ............ DC32 ChangeVibraMode, ChangeSoundMode, ChangeINCMode \ ............ \ 0000008C ............ DC32 ChangeSMARTCPUMode, ChangeDoubleVibra, ChangeILUMode \ ............ \ 00000098 ............ DC32 ChangePINGMode, ChangeUPTIMEMode, ChangeShowOfflineMode \ ............ \ 000000A4 ............ DC32 ChangeShowGroupsMode, EditConfig, EditConfigMod, Disconnect \ ............ \ ........ \ 000000B4 ............ DC32 MSG_Info, SaveCL, PingToServer, AboutDlg, ChangeId3tagMode \ ............ \ ............ \ .... \ 000000C8 ........ DC32 ChangeSLIMode \ `?`: \ 000000CC 00000000 DC32 0 \ `?`: \ 000000D0 0A000000 DC32 10 \ `?`: \ 000000D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D8 00000000 DC32 0 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF000015 DC8 255, 0, 0, 21 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 01000000 DC32 1 \ 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 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 D0E5E6E8EC20 DC8 "\320\345\346\350\354 Id3tag" \ 496433746167 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 D0E5E6E8EC20 DC8 "\320\345\346\350\354 SLI" \ 534C4900 \ 0000000A 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 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 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 0000004500 DC8 0, 0, 0, 45H, 0 \ 00000005 000000 DC8 0, 0, 0 \ 00000008 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ `?`: \ 00000010 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000016 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ 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 \ `? 220 ? 4 ? 4 ? 8 ? 8 ? 12 ? 16 ? 12 ? 8 ? 68 ? 3 ? 24 ? 8 ? 8 ? 12 ?