############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 20/Sep/2008 20:14:29 # # 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 kluchnik -D BCFG -D ICONBAR -D # # DEBUG --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_ # # mod2\kluchnik_debug\List\ -lC # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\kluchnik_debug # # \List\ -o D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\kluc # # hnik_debug\Obj\ -s9 --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\kluchnik_debug # # \List\mainmenu.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2\kluchnik_debug # # \Obj\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 #include "configs.h" 19 //============================================================================== \ In segment DATA_Z, align 4, align-sorted 20 int MainMenu_ID; \ MainMenu_ID: \ 00000000 DS8 4 21 22 extern int CurrentStatus; 23 extern int CurrentXStatus; 24 extern DYNPNGICONLIST *XStatusesImgList; 25 //extern int *XStatusesIconArray; 26 extern int S_ICONS[]; 27 extern const SOFTKEYSTAB menu_skt; 28 extern int Is_INC_On; 29 extern int Is_SLI_On; 30 //extern int Is_SMARTCPU_On; 31 extern int Is_ILU_On; 32 extern int Is_Double_Vibra_On; \ In segment DATA_Z, align 4, align-sorted 33 int janis; \ janis: \ 00000000 DS8 4 34 extern int Is_PING_On; 35 //extern int Is_UPTIME_On; 36 extern int Is_Vibra_Enabled; 37 #ifdef NEWSGOLD 38 extern int Is_Id3tag_Enabled; 39 #endif 40 extern unsigned int Is_Sounds_Enabled; 41 extern int Is_Show_Offline; 42 extern int Is_Show_Groups; 43 extern int IsActiveUp; 44 45 int isAbout=0; 46 \ In segment CODE, align 4, keep-with-next 47 void ChangeActiveUp(void) 48 { 49 IsActiveUp=!(IsActiveUp); \ ChangeActiveUp: \ 00000000 ........ LDR R0,??DataTable36 ;; IsActiveUp \ 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] 50 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable23 ;; WriteDefSettings \ 00000020 710100EF SWI +369 51 RefreshGUI(); \ 00000024 960100EF SWI +406 52 } \ 00000028 0080BDE8 POP {PC} ;; return 53 \ In segment CODE, align 4, keep-with-next 54 void ChangeVibraMode(void) 55 { 56 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ChangeVibraMode: \ 00000000 ........ LDR R0,??DataTable28 ;; 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] 57 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable23 ;; WriteDefSettings \ 00000020 710100EF SWI +369 58 RefreshGUI(); \ 00000024 960100EF SWI +406 59 } \ 00000028 0080BDE8 POP {PC} ;; return 60 #ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 61 void ChangeId3tagMode(void) 62 { 63 Is_Id3tag_Enabled=!(Is_Id3tag_Enabled); \ ChangeId3tagMode: \ 00000000 ........ LDR R0,??DataTable37 ;; 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] 64 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable23 ;; WriteDefSettings \ 00000020 710100EF SWI +369 65 RefreshGUI(); \ 00000024 960100EF SWI +406 66 set_my_xstatus(); \ 00000028 0040BDE8 POP {LR} ;; Pop \ 0000002C ........ _BF set_my_xstatus,??set_my_xstatus??rA ;; tailcall 67 } 68 #endif 69 70 extern int msg_away_timer; 71 extern GBSTMR away_tmr; 72 extern void away_timer(); 73 extern int main_d; 74 extern int away_m; 75 extern unsigned int AUTO_ENGADE; 76 extern int change_back_status; 77 extern int status_rem; 78 //extern void UpdateCLheader(void); 79 \ In segment CODE, align 4, keep-with-next 80 void AutoAwayMSG(void) 81 { 82 if(!away_m) \ AutoAwayMSG: \ 00000000 ........ LDR R0,??DataTable27 ;; away_m \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 001090E5 LDR R1,[R0, #+0] \ 0000000C 78409FE5 LDR R4,??AutoAwayMSG_0 ;; msg_away_timer \ 00000010 000051E3 CMP R1,#+0 \ 00000014 0D00001A BNE ??AutoAwayMSG_1 83 { 84 away_m=!away_m; \ 00000018 0150A0E3 MOV R5,#+1 \ 0000001C 005080E5 STR R5,[R0, #+0] 85 GBS_StopTimer(&away_tmr); \ 00000020 68009FE5 LDR R0,??AutoAwayMSG_0+0x4 ;; away_tmr \ 00000024 440100EF SWI +324 86 msg_away_timer=AUTO_ENGADE*12; \ 00000028 64009FE5 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] 87 away_timer(); \ 0000003C ........ _BLF away_timer,??away_timer??rA 88 main_d=1; \ 00000040 50009FE5 LDR R0,??AutoAwayMSG_0+0xC ;; main_d \ 00000044 005080E5 STR R5,[R0, #+0] \ 00000048 960100EF SWI +406 \ 0000004C 3080BDE8 POP {R4,R5,PC} 89 } 90 else 91 { 92 msg_away_timer=0; \ ??AutoAwayMSG_1: \ 00000050 0050A0E3 MOV R5,#+0 \ 00000054 005084E5 STR R5,[R4, #+0] 93 away_m=!away_m; 94 if(change_back_status) \ 00000058 3C409FE5 LDR R4,??AutoAwayMSG_0+0x10 ;; change_back_status \ 0000005C 005080E5 STR R5,[R0, #+0] \ 00000060 000094E5 LDR R0,[R4, #+0] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0500000A BEQ ??AutoAwayMSG_2 95 { 96 CurrentStatus=status_rem; \ 0000006C 2C109FE5 LDR R1,??AutoAwayMSG_0+0x14 ;; status_rem \ 00000070 ........ LDR R0,??DataTable26 ;; CurrentStatus \ 00000074 001091E5 LDR R1,[R1, #+0] \ 00000078 001080E5 STR R1,[R0, #+0] 97 set_my_status(); \ 0000007C ........ _BLF set_my_status,??set_my_status??rA 98 change_back_status=0; \ 00000080 005084E5 STR R5,[R4, #+0] 99 } 100 } 101 // UpdateCLheader(); 102 RefreshGUI(); \ ??AutoAwayMSG_2: \ 00000084 960100EF SWI +406 103 } \ 00000088 3080BDE8 POP {R4,R5,PC} ;; return \ ??AutoAwayMSG_0: \ 0000008C ........ DC32 msg_away_timer \ 00000090 ........ DC32 away_tmr \ 00000094 ........ DC32 AUTO_ENGADE \ 00000098 ........ DC32 main_d \ 0000009C ........ DC32 change_back_status \ 000000A0 ........ DC32 status_rem 104 105 \ In segment CODE, align 4, keep-with-next 106 void ChangeSoundMode(void) 107 { 108 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ChangeSoundMode: \ 00000000 ........ LDR R0,??DataTable29 ;; 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] 109 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable23 ;; WriteDefSettings \ 00000020 710100EF SWI +369 110 RefreshGUI(); \ 00000024 960100EF SWI +406 111 } \ 00000028 0080BDE8 POP {PC} ;; return 112 \ In segment CODE, align 4, keep-with-next 113 void ChangeShowOfflineMode(void) 114 { 115 void RecountMenu(CLIST *req, int needfocus); 116 Is_Show_Offline=!(Is_Show_Offline); \ ChangeShowOfflineMode: \ 00000000 ........ LDR R0,??DataTable34 ;; 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] 117 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable23 ;; WriteDefSettings \ 00000020 710100EF SWI +369 118 RecountMenu(NULL,1); \ 00000024 0110A0E3 MOV R1,#+1 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C ........ _BLF RecountMenu,??RecountMenu??rA 119 RefreshGUI(); \ 00000030 960100EF SWI +406 120 } \ 00000034 0080BDE8 POP {PC} ;; return 121 \ In segment CODE, align 4, keep-with-next 122 void ChangeShowGroupsMode(void) 123 { 124 void RecountMenu(CLIST *req,int needfocus); 125 Is_Show_Groups=!(Is_Show_Groups); \ ChangeShowGroupsMode: \ 00000000 ........ LDR R0,??DataTable35 ;; 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] 126 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable23 ;; WriteDefSettings \ 00000020 710100EF SWI +369 127 ResortCL(); \ 00000024 ........ _BLF ResortCL,??ResortCL??rA 128 RecountMenu(NULL,1); \ 00000028 0110A0E3 MOV R1,#+1 \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 ........ _BLF RecountMenu,??RecountMenu??rA 129 RefreshGUI(); \ 00000034 960100EF SWI +406 130 } \ 00000038 0080BDE8 POP {PC} ;; return 131 132 //extern int get_file_size(char* fname); 133 extern char suc_config_name[64]; 134 //extern char suc_config_name_mod[64]; 135 extern const char *suc_config_name_mod; \ In segment CODE, align 4, keep-with-next 136 void EditConfig(void) 137 { \ EditConfig: \ 00000000 10402DE9 PUSH {R4,LR} 138 WSHDR *ws; 139 ws=AllocWS(150); \ 00000004 9600A0E3 MOV R0,#+150 \ 00000008 250100EF SWI +293 140 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 141 ExecuteFile(ws,0,0); \ 0000001C 0020A0E3 MOV R2,#+0 \ 00000020 0010A0E3 MOV R1,#+0 \ 00000024 0400A0E1 MOV R0,R4 \ 00000028 940000EF SWI +148 142 FreeWS(ws); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 290100EF SWI +297 143 GeneralFuncF1(1); \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 3B0100EF SWI +315 144 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??EditConfig_0: \ 00000040 ........ DC32 suc_config_name 145 \ In segment CODE, align 4, keep-with-next 146 void EditConfigMod(void) 147 { \ EditConfigMod: \ 00000000 10402DE9 PUSH {R4,LR} 148 WSHDR *ws; 149 ws=AllocWS(150); \ 00000004 9600A0E3 MOV R0,#+150 \ 00000008 250100EF SWI +293 \ 0000000C 0040A0E1 MOV R4,R0 150 str_2ws(ws,suc_config_name_mod,128); \ 00000010 30009FE5 LDR R0,??EditConfigMod_0 ;; suc_config_name_mod \ 00000014 8020A0E3 MOV R2,#+128 \ 00000018 001090E5 LDR R1,[R0, #+0] \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 6C0100EF SWI +364 151 ExecuteFile(ws,0,0); \ 00000024 0020A0E3 MOV R2,#+0 \ 00000028 0010A0E3 MOV R1,#+0 \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 940000EF SWI +148 152 FreeWS(ws); \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 290100EF SWI +297 153 GeneralFuncF1(1); \ 0000003C 0100A0E3 MOV R0,#+1 \ 00000040 3B0100EF SWI +315 154 } \ 00000044 1080BDE8 POP {R4,PC} ;; return \ ??EditConfigMod_0: \ 00000048 ........ DC32 suc_config_name_mod 155 156 \ In segment CODE, align 4, keep-with-next 157 void Disconnect(void) 158 { 159 extern volatile int disautorecconect; 160 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] 161 extern void end_socket(void); 162 SUBPROC((void*)end_socket); \ 00000010 10009FE5 LDR R0,??Disconnect_0+0x4 ;; end_socket \ 00000014 710100EF SWI +369 163 GeneralFuncF1(1); \ 00000018 0100A0E3 MOV R0,#+1 \ 0000001C 3B0100EF SWI +315 164 } \ 00000020 0080BDE8 POP {PC} ;; return \ ??Disconnect_0: \ 00000024 ........ DC32 disautorecconect \ 00000028 ........ DC32 end_socket 165 166 extern int uins; \ In segment DATA_Z, align 4, align-sorted 167 char hmm1[64]; \ hmm1: \ 00000000 DS8 64 168 \ In segment CODE, align 4, keep-with-next 169 void PingToServer(void) 170 { 171 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] 172 TPKT *p; 173 p=malloc(sizeof(PKT)+sizeof(TTime)); \ 00000010 1000A0E3 MOV R0,#+16 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 174 GetDateTime(NULL,(TTime *)p->data); \ 0000001C 081084E2 ADD R1,R4,#+8 \ 00000020 0000A0E3 MOV R0,#+0 \ 00000024 B40000EF SWI +180 175 p->pkt.uin=0; \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 000084E5 STR R0,[R4, #+0] 176 p->pkt.type=T_ECHO; \ 00000030 1200A0E3 MOV R0,#+18 \ 00000034 B400C4E1 STRH R0,[R4, #+4] 177 p->pkt.data_len=sizeof(TTime); \ 00000038 0800A0E3 MOV R0,#+8 \ 0000003C B600C4E1 STRH R0,[R4, #+6] 178 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 179 } \ 00000050 1080BDE8 POP {R4,PC} ;; return \ ??PingToServer_0: \ 00000054 ........ DC32 janis \ 00000058 ........ DC32 SendAnswer 180 \ In segment CODE, align 4, keep-with-next 181 void AboutDlg() 182 { 183 isAbout=1; \ AboutDlg: \ 00000000 08009FE5 LDR R0,??AboutDlg_0 ;; mm_rc + 8 \ 00000004 0110A0E3 MOV R1,#+1 \ 00000008 001080E5 STR R1,[R0, #+0] 184 //char s[256]; 185 //snprintf(s,255,LG_COPYRIGHT,__SVN_REVISION__); 186 // ShowMSG(2, (int)s); 187 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??AboutDlg_0: \ 00000010 ........ DC32 mm_rc + 8 188 \ In segment CODE, align 4, keep-with-next 189 void SaveCL() 190 { 191 extern void CreateCLFile(void); 192 CreateCLFile(); \ SaveCL: \ 00000000 ........ _BF CreateCLFile,??CreateCLFile??rA ;; tailcall 193 } 194 195 #ifdef NEWSGOLD 196 #ifdef ELKA 197 #define MENU_ITEMS 22//ELKA 198 #else 199 #define MENU_ITEMS 21//NEWSGOLD 200 #endif 201 #else 202 #define MENU_ITEMS 20//SGOLD 203 #endif 204 205 static char *menutexts2[MENU_ITEMS]= 206 { 207 LG_MNUSTATUS, 208 LG_MNUXSTATUS, 209 LG_MANAGELIST, 210 LG_AUTOANSWER,//"Автоответчик", 211 LG_MNUVIBRA, 212 LG_MNUSOUND, 213 LG_INCMSG, 214 // LG_MNUSMARTCPU, 215 LG_REMINDERON, 216 LG_MNUILUON, 217 LG_MNUPINGON, 218 // LG_MNUUPTIMEON, 219 LG_MNUSHOWOFF, 220 LG_MNUSHOWGROUP, 221 LG_MNUEDCFG, 222 LG_MNUEDCFG_MOD, 223 LG_MNUDISCONNECT, 224 // LG_MSGINFO, 225 LG_SAVECL, 226 LG_MNUPING, 227 LG_MNUABOUT, 228 LG_ACTUP, 229 "Открыть лог", 230 #ifdef NEWSGOLD 231 LG_ID3TAG, 232 #endif 233 #ifdef ELKA 234 LG_MNUSLION, 235 #endif 236 }; 237 238 #ifdef ELKA \ In segment CODE, align 4, keep-with-next 239 void ChangeSLIMode(void) 240 { 241 Is_SLI_On=!(Is_SLI_On); \ ChangeSLIMode: \ 00000000 ........ LDR R0,??DataTable38 ;; 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] 242 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable23 ;; WriteDefSettings \ 00000020 710100EF SWI +369 243 RefreshGUI(); \ 00000024 960100EF SWI +406 244 } \ 00000028 0080BDE8 POP {PC} ;; return 245 #endif/* 246 void ChangeSMARTCPUMode(void) 247 { 248 Is_SMARTCPU_On=!(Is_SMARTCPU_On); 249 SUBPROC((void*)WriteDefSettings); 250 RefreshGUI(); 251 }*/ 252 //#ifdef NEWSGOLD \ In segment CODE, align 4, keep-with-next 253 void ChangeINCMode(void) 254 { 255 Is_INC_On=!(Is_INC_On); \ ChangeINCMode: \ 00000000 ........ LDR R0,??DataTable30 ;; 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] 256 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable23 ;; WriteDefSettings \ 00000020 710100EF SWI +369 257 RefreshGUI(); \ 00000024 960100EF SWI +406 258 } \ 00000028 0080BDE8 POP {PC} ;; return 259 //#endif \ In segment CODE, align 4, keep-with-next 260 ChangeILUMode(void) 261 { 262 Is_ILU_On=!(Is_ILU_On); \ ChangeILUMode: \ 00000000 ........ LDR R0,??DataTable32 ;; 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] 263 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable23 ;; WriteDefSettings \ 00000020 710100EF SWI +369 264 RefreshGUI(); \ 00000024 960100EF SWI +406 265 } \ 00000028 0080BDE8 POP {PC} ;; return 266 \ In segment CODE, align 4, keep-with-next 267 void ChangePINGMode(void) 268 { 269 Is_PING_On=!(Is_PING_On); \ ChangePINGMode: \ 00000000 ........ LDR R0,??DataTable33 ;; 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] 270 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable23 ;; WriteDefSettings \ 00000020 710100EF SWI +369 271 RefreshGUI(); \ 00000024 960100EF SWI +406 272 } \ 00000028 0080BDE8 POP {PC} ;; return 273 /* 274 void ChangeUPTIMEMode(void) 275 { 276 Is_UPTIME_On=!(Is_UPTIME_On); 277 SUBPROC((void*)WriteDefSettings); 278 RefreshGUI(); 279 } 280 281 int main_count; 282 int main2_count; 283 284 void MSG_Info(void) 285 { 286 char *info=malloc(64); 287 sprintf(info, "Отправлено: %d\n" 288 "Принято: %d", main2_count, main_count); 289 ShowMSG(1,(int)info); 290 mfree(info); 291 }*/ 292 \ In segment CODE, align 4, keep-with-next 293 void ChangeDoubleVibra(void) 294 { 295 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ChangeDoubleVibra: \ 00000000 ........ LDR R0,??DataTable31 ;; Is_Double_Vibra_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] 296 SUBPROC((void*)WriteDefSettings); \ 0000001C ........ LDR R0,??DataTable23 ;; WriteDefSettings \ 00000020 710100EF SWI +369 297 RefreshGUI(); \ 00000024 960100EF SWI +406 298 } \ 00000028 0080BDE8 POP {PC} ;; return 299 \ In segment CODE, align 4, keep-with-next 300 void CreateLogs(void) 301 { 302 extern void CreateLog(); 303 CreateLog(); \ CreateLogs: \ 00000000 ........ _BF CreateLog,??CreateLog??rA ;; tailcall 304 } 305 306 extern void CreateSCMenu(); 307 extern void CreateXSMenu(); 308 static const void *menuprocs[MENU_ITEMS]= 309 { 310 (void *)CreateSCMenu,//(void *)DispStatusChangeMenu, 311 (void *)CreateXSMenu,//DispXStatusChangeMenu, 312 (void *)CreateManageCLMenu, 313 (void *)AutoAwayMSG, 314 (void *)ChangeVibraMode, 315 (void *)ChangeSoundMode, 316 (void *)ChangeINCMode, 317 // (void *)ChangeSMARTCPUMode, 318 (void *)ChangeDoubleVibra, 319 (void *)ChangeILUMode, 320 (void *)ChangePINGMode, 321 // (void *)ChangeUPTIMEMode, 322 (void *)ChangeShowOfflineMode, 323 (void *)ChangeShowGroupsMode, 324 (void *)EditConfig, 325 (void *)EditConfigMod, 326 (void *)Disconnect, 327 // (void *)MSG_Info, 328 (void*)SaveCL, 329 (void *)PingToServer, 330 (void *)AboutDlg, 331 (void *)ChangeActiveUp, 332 (void *)CreateLogs, 333 #ifdef NEWSGOLD 334 (void *)ChangeId3tagMode, 335 #endif 336 #ifdef ELKA 337 (void *)ChangeSLIMode, 338 #endif 339 }; 340 341 342 343 344 static char *temp_chars; //Собственно файл 345 static char **menutexts; //Массив указателей на строки 346 \ In segment CODE, align 4, keep-with-next 347 void FreeMenu(void) 348 { \ FreeMenu: \ 00000000 10402DE9 PUSH {R4,LR} 349 if (menutexts) mfree(menutexts); \ 00000004 ........ LDR R4,??DataTable55 ;; mm_rc \ 00000008 C00094E5 LDR R0,[R4, #+192] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??FreeMenu_0 \ 00000014 150000EF SWI +21 350 if (temp_chars) mfree(temp_chars); \ ??FreeMenu_0: \ 00000018 BC0094E5 LDR R0,[R4, #+188] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??FreeMenu_1 \ 00000024 150000EF SWI +21 351 menutexts=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??FreeMenu_1: \ 0000002C C00084E5 STR R0,[R4, #+192] 352 temp_chars=NULL; \ 00000030 BC0084E5 STR R0,[R4, #+188] 353 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 354 \ In segment CODE, align 4, keep-with-next 355 int LoadMenuLang() 356 { \ LoadMenuLang: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 4BDF4DE2 SUB SP,SP,#+300 357 FSTATS stat; 358 char fn[256]; 359 int f; 360 unsigned int ul; 361 int i; 362 int fsize; 363 char *p; 364 char *pp; 365 int c; 366 FreeMenu(); 367 strcpy(fn,TEMPLATES_PATH); 368 i=strlen(fn); 369 sprintf(fn+i,"\\langmenu.txt"); 370 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 00000008 0040E0E3 MVN R4,#+0 \ 0000000C ........ BL FreeMenu \ 00000010 10119FE5 LDR R1,??LoadMenuLang_0 ;; TEMPLATES_PATH \ 00000014 04008DE2 ADD R0,SP,#+4 \ 00000018 1A0000EF SWI +26 \ 0000001C 04008DE2 ADD R0,SP,#+4 \ 00000020 1B0000EF SWI +27 \ 00000024 00119FE5 LDR R1,??LoadMenuLang_0+0x4 ;; `?` \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 04008DE2 ADD R0,SP,#+4 \ 00000030 000087E0 ADD R0,R7,R0 \ 00000034 160000EF SWI +22 \ 00000038 0D20A0E1 MOV R2,SP \ 0000003C 411F8DE2 ADD R1,SP,#+260 \ 00000040 04008DE2 ADD R0,SP,#+4 \ 00000044 840000EF SWI +132 \ 00000048 040050E1 CMP R0,R4 \ 0000004C 0200001A BNE ??LoadMenuLang_1 \ ??LoadMenuLang_2: \ 00000050 0000A0E3 MOV R0,#+0 \ ??LoadMenuLang_3: \ 00000054 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 00000058 F087BDE8 POP {R4-R10,PC} ;; return 371 if ((fsize=stat.size)<=0) return 0; \ ??LoadMenuLang_1: \ 0000005C 08719DE5 LDR R7,[SP, #+264] \ 00000060 010057E3 CMP R7,#+1 \ 00000064 F9FFFFBA BLT ??LoadMenuLang_2 372 if((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) return 0; \ 00000068 0D30A0E1 MOV R3,SP \ 0000006C 8020A0E3 MOV R2,#+128 \ 00000070 801CA0E3 MOV R1,#+32768 \ 00000074 04008DE2 ADD R0,SP,#+4 \ 00000078 0A0000EF SWI +10 \ 0000007C 0080A0E1 MOV R8,R0 \ 00000080 040058E1 CMP R8,R4 \ 00000084 F1FFFF0A BEQ ??LoadMenuLang_2 373 p=temp_chars=malloc(fsize+1); \ 00000088 ........ LDR R4,??DataTable55 ;; mm_rc \ 0000008C 010087E2 ADD R0,R7,#+1 \ 00000090 140000EF SWI +20 \ 00000094 BC0084E5 STR R0,[R4, #+188] \ 00000098 0060A0E1 MOV R6,R0 374 p[fread(f,p,fsize,&ul)]=0; \ 0000009C 0050A0E3 MOV R5,#+0 \ 000000A0 0D30A0E1 MOV R3,SP \ 000000A4 0720A0E1 MOV R2,R7 \ 000000A8 0610A0E1 MOV R1,R6 \ 000000AC 0800A0E1 MOV R0,R8 \ 000000B0 0B0000EF SWI +11 \ 000000B4 0650C0E7 STRB R5,[R0, +R6] 375 fclose(f,&ul); \ 000000B8 0D10A0E1 MOV R1,SP \ 000000BC 0800A0E1 MOV R0,R8 \ 000000C0 0D0000EF SWI +13 376 i=0; \ 000000C4 0070A0E3 MOV R7,#+0 377 pp=p; \ 000000C8 0680A0E1 MOV R8,R6 \ 000000CC 020000EA B ??LoadMenuLang_4 378 for(;;) 379 { 380 c=*p; 381 if (c<32) 382 { 383 if (pp&&(pp!=p)) 384 { 385 menutexts=realloc(menutexts,(i+1)*sizeof(char *)); 386 menutexts[i++]=pp; 387 } 388 pp=NULL; 389 if (!c) break; 390 *p=0; 391 } 392 else 393 { 394 if (pp==NULL) pp=p; \ ??LoadMenuLang_5: \ 000000D0 000058E3 CMP R8,#+0 \ 000000D4 0680A001 MOVEQ R8,R6 395 } 396 p++; \ ??LoadMenuLang_6: \ 000000D8 016086E2 ADD R6,R6,#+1 \ ??LoadMenuLang_4: \ 000000DC 0090D6E5 LDRB R9,[R6, #+0] \ 000000E0 200059E3 CMP R9,#+32 \ 000000E4 F9FFFFAA BGE ??LoadMenuLang_5 \ 000000E8 000058E3 CMP R8,#+0 \ 000000EC 06005811 CMPNE R8,R6 \ 000000F0 0600000A BEQ ??LoadMenuLang_7 \ 000000F4 C00094E5 LDR R0,[R4, #+192] \ 000000F8 01A087E2 ADD R10,R7,#+1 \ 000000FC 0A11A0E1 LSL R1,R10,#+2 \ 00000100 BA0000EF SWI +186 \ 00000104 C00084E5 STR R0,[R4, #+192] \ 00000108 078180E7 STR R8,[R0, +R7, LSL #+2] \ 0000010C 0A70A0E1 MOV R7,R10 \ ??LoadMenuLang_7: \ 00000110 0080A0E3 MOV R8,#+0 \ 00000114 000059E3 CMP R9,#+0 397 } 398 return i; \ 00000118 0700A001 MOVEQ R0,R7 \ 0000011C CCFFFF0A BEQ ??LoadMenuLang_3 \ 00000120 0050C6E5 STRB R5,[R6, #+0] \ 00000124 EBFFFFEA B ??LoadMenuLang_6 \ ??LoadMenuLang_0: \ 00000128 ........ DC32 TEMPLATES_PATH \ 0000012C ........ DC32 `?` 399 } 400 401 402 int startItem=0; 403 404 #ifdef ELKA 405 int x2_cb=10; 406 #else 407 int x2_cb=10; 408 #endif 409 extern char clrBlack[]; 410 extern char clrWhite[]; 411 extern char clrRed[]; 412 extern char transparent[]; 413 extern char blue[]; 414 extern int clfont; 415 extern IMGHDR *icons[]; 416 //extern int clfont; 417 int mm_itemFromDisp;//кол-во на экране \ In segment DATA_Z, align 4, align-sorted 418 int mm_totalItems;//общее количество итемов \ mm_totalItems: \ 00000000 DS8 4 419 int mm_curpos=0;//позичия курсора 420 421 extern void DrwImage(IMGHDR *img, int x, int y, char *pen, char *brush); 422 extern DYNPNGICONLIST *GetXSByItem(int curitem); 423 RECT mm_rc;//MainMenu Rect 424 int mm_font; 425 426 #define CLIST_Y1 (YDISP+2) 427 428 #pragma inline \ In segment CODE, align 4, keep-with-next 429 void DrawCheckBox(int x,int y,int flag,int type) 430 { \ DrawCheckBox: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 431 RECT rc; 432 StoreXYXYtoRECT(&rc,x+2,y,x+x2_cb+2,y+x2_cb); \ 00000004 1C519FE5 LDR R5,??DrawCheckBox_0 ;; mm_rc \ 00000008 08D04DE2 SUB SP,SP,#+8 433 DrawRectangle(rc.x,rc.y,rc.x2,rc.y2,0,clrWhite,transparent); \ 0000000C 18719FE5 LDR R7,??DrawCheckBox_0+0x4 ;; clrWhite \ 00000010 0260A0E1 MOV R6,R2 \ 00000014 C82095E5 LDR R2,[R5, #+200] \ 00000018 0340A0E1 MOV R4,R3 \ 0000001C 013082E0 ADD R3,R2,R1 \ 00000020 08002DE9 PUSH {R3} \ 00000024 002082E0 ADD R2,R2,R0 \ 00000028 023082E2 ADD R3,R2,#+2 \ 0000002C 0120A0E1 MOV R2,R1 \ 00000030 021080E2 ADD R1,R0,#+2 \ 00000034 04008DE2 ADD R0,SP,#+4 \ 00000038 340100EF SWI +308 \ 0000003C EC009FE5 LDR R0,??DrawCheckBox_0+0x8 ;; transparent \ 00000040 01002DE9 PUSH {R0} \ 00000044 0700A0E1 MOV R0,R7 \ 00000048 01002DE9 PUSH {R0} \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 01002DE9 PUSH {R0} \ 00000054 F631DDE1 LDRSH R3,[SP, #+22] \ 00000058 F421DDE1 LDRSH R2,[SP, #+20] \ 0000005C F211DDE1 LDRSH R1,[SP, #+18] \ 00000060 F001DDE1 LDRSH R0,[SP, #+16] \ 00000064 B40100EF SWI +436 434 if(flag) \ 00000068 000056E3 CMP R6,#+0 \ 0000006C 10D08DE2 ADD SP,SP,#+16 \ 00000070 F380BD08 POPEQ {R0,R1,R4-R7,PC} \ 00000074 F600DDE1 LDRSH R0,[SP, #+6] \ 00000078 F210DDE1 LDRSH R1,[SP, #+2] \ 0000007C F420DDE1 LDRSH R2,[SP, #+4] \ 00000080 023040E2 SUB R3,R0,#+2 \ 00000084 F000DDE1 LDRSH R0,[SP, #+0] \ 00000088 000054E3 CMP R4,#+0 \ 0000008C 0740A0E1 MOV R4,R7 \ 00000090 10002DE9 PUSH {R4} \ 00000094 020080E2 ADD R0,R0,#+2 \ 00000098 0040A0E3 MOV R4,#+0 \ 0000009C 10002DE9 PUSH {R4} \ 000000A0 0E00000A BEQ ??DrawCheckBox_1 435 { 436 if(type) 437 { 438 DrawLine(rc.x+2,rc.y+2,rc.x2-2,rc.y2-2,0,clrWhite); \ 000000A4 022042E2 SUB R2,R2,#+2 \ 000000A8 021081E2 ADD R1,R1,#+2 \ 000000AC B30100EF SWI +435 439 DrawLine(rc.x2-2,rc.y+2,rc.x+2,rc.y2-2,0,clrWhite); \ 000000B0 80002DE9 PUSH {R7} \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 01002DE9 PUSH {R0} \ 000000BC F601DDE1 LDRSH R0,[SP, #+22] \ 000000C0 023040E2 SUB R3,R0,#+2 \ 000000C4 F001DDE1 LDRSH R0,[SP, #+16] \ 000000C8 022080E2 ADD R2,R0,#+2 \ 000000CC F201DDE1 LDRSH R0,[SP, #+18] \ 000000D0 021080E2 ADD R1,R0,#+2 \ 000000D4 F401DDE1 LDRSH R0,[SP, #+20] \ 000000D8 020040E2 SUB R0,R0,#+2 \ 000000DC 0E0000EA B ??DrawCheckBox_2 440 } 441 else 442 { 443 DrawLine(rc.x+2,rc.y+5,rc.x2-7,rc.y2-2,0,clrWhite); \ ??DrawCheckBox_1: \ 000000E0 072042E2 SUB R2,R2,#+7 \ 000000E4 051081E2 ADD R1,R1,#+5 \ 000000E8 B30100EF SWI +435 444 DrawLine(rc.x2-7,rc.y2-2,rc.x+x2_cb,rc.y-2,0,clrWhite); \ 000000EC 80002DE9 PUSH {R7} \ 000000F0 0000A0E3 MOV R0,#+0 \ 000000F4 01002DE9 PUSH {R0} \ 000000F8 C81095E5 LDR R1,[R5, #+200] \ 000000FC F201DDE1 LDRSH R0,[SP, #+18] \ 00000100 023040E2 SUB R3,R0,#+2 \ 00000104 F001DDE1 LDRSH R0,[SP, #+16] \ 00000108 002081E0 ADD R2,R1,R0 \ 0000010C F601DDE1 LDRSH R0,[SP, #+22] \ 00000110 021040E2 SUB R1,R0,#+2 \ 00000114 F401DDE1 LDRSH R0,[SP, #+20] \ 00000118 070040E2 SUB R0,R0,#+7 \ ??DrawCheckBox_2: \ 0000011C B30100EF SWI +435 \ 00000120 10D08DE2 ADD SP,SP,#+16 445 } 446 } 447 } \ 00000124 F380BDE8 POP {R0,R1,R4-R7,PC} ;; return \ ??DrawCheckBox_0: \ 00000128 ........ DC32 mm_rc \ 0000012C ........ DC32 clrWhite \ 00000130 ........ DC32 transparent 448 \ In segment CODE, align 4, keep-with-next 449 void DrawIcon(int x,int y,int curitem) 450 { \ DrawIcon: \ 00000000 30402DE9 PUSH {R4,R5,LR} 451 switch(curitem) \ 00000004 150052E3 CMP R2,#+21 \ 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 202A2C2E DC8 +32,+42,+44,+46 \ 0000002C 30323436 DC8 +48,+50,+52,+54 \ 00000030 38384145 DC8 +56,+56,+65,+69 \ 00000034 49454D38 DC8 +73,+69,+77,+56 \ 00000038 4F510000 DC8 +79,+81,+0,+0 452 { 453 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,??DataTable26 ;; CurrentStatus \ 00000054 004094E5 LDR R4,[R4, #+0] \ 00000058 040190E7 LDR R0,[R0, +R4, LSL #+2] \ 0000005C 2F0000EA B ??DrawIcon_3 454 case 1: 455 { 456 DYNPNGICONLIST *xs=GetXSByItem(CurrentXStatus); \ ??DrawIcon_4: \ 00000060 30019FE5 LDR R0,??DrawIcon_1+0x4 ;; CurrentXStatus \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 ........ _BLF GetXSByItem,??GetXSByItem??rA 457 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} 458 } 459 break; 460 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 1C0000EA B ??DrawIcon_6 461 case 3: DrawCheckBox(x,y,away_m?1:0,0); break; \ ??DrawIcon_7: \ 000000A0 ........ LDR R0,??DataTable27 ;; away_m \ 000000A4 000000EA B ??DrawIcon_8 462 case 4: DrawCheckBox(x,y,Is_Vibra_Enabled?1:0,0); break; \ ??DrawIcon_9: \ 000000A8 ........ LDR R0,??DataTable28 ;; Is_Vibra_Enabled \ ??DrawIcon_8: \ 000000AC 0030A0E3 MOV R3,#+0 \ 000000B0 000090E5 LDR R0,[R0, #+0] \ 000000B4 0510A0E1 MOV R1,R5 \ 000000B8 000050E3 CMP R0,#+0 \ 000000BC 0120A013 MOVNE R2,#+1 \ 000000C0 0020A003 MOVEQ R2,#+0 \ 000000C4 0400A0E1 MOV R0,R4 \ 000000C8 ........ _BLF DrawCheckBox,??DrawCheckBox??rA \ 000000CC 3080BDE8 POP {R4,R5,PC} 463 case 5: DrawCheckBox(x,y,Is_Sounds_Enabled?1:0,0); break; \ ??DrawIcon_10: \ 000000D0 ........ LDR R0,??DataTable29 ;; Is_Sounds_Enabled \ 000000D4 F4FFFFEA B ??DrawIcon_8 464 case 6: DrawCheckBox(x,y,Is_INC_On?1:0,0); break; \ ??DrawIcon_11: \ 000000D8 ........ LDR R0,??DataTable30 ;; Is_INC_On \ 000000DC F2FFFFEA B ??DrawIcon_8 465 case 7: DrawCheckBox(x,y,Is_Double_Vibra_On?1:0,0); break; \ ??DrawIcon_12: \ 000000E0 ........ LDR R0,??DataTable31 ;; Is_Double_Vibra_On \ 000000E4 F0FFFFEA B ??DrawIcon_8 466 case 8: DrawCheckBox(x,y,Is_ILU_On?1:0,0); break; \ ??DrawIcon_13: \ 000000E8 ........ LDR R0,??DataTable32 ;; Is_ILU_On \ 000000EC EEFFFFEA B ??DrawIcon_8 467 case 9: DrawCheckBox(x,y,Is_PING_On?1:0,0); break; \ ??DrawIcon_14: \ 000000F0 ........ LDR R0,??DataTable33 ;; Is_PING_On \ 000000F4 ECFFFFEA B ??DrawIcon_8 468 case 10: DrawCheckBox(x,y,Is_Show_Offline?1:0,0); break; \ ??DrawIcon_15: \ 000000F8 ........ LDR R0,??DataTable34 ;; Is_Show_Offline \ 000000FC EAFFFFEA B ??DrawIcon_8 469 case 11: DrawCheckBox(x,y,Is_Show_Groups?1:0,0); break; \ ??DrawIcon_16: \ 00000100 ........ LDR R0,??DataTable35 ;; Is_Show_Groups \ 00000104 E8FFFFEA B ??DrawIcon_8 470 case 12: DrwImage(icons[ICON_SETTINGS],x,y,0,0); break; \ ??DrawIcon_17: \ 00000108 0010A0E3 MOV R1,#+0 \ 0000010C 02002DE9 PUSH {R1} \ 00000110 580090E5 LDR R0,[R0, #+88] \ ??DrawIcon_6: \ 00000114 0030A0E3 MOV R3,#+0 \ 00000118 0520A0E1 MOV R2,R5 \ 0000011C 0410A0E1 MOV R1,R4 \ ??DrawIcon_3: \ 00000120 ........ _BLF DrwImage,??DrwImage??rA \ 00000124 04D08DE2 ADD SP,SP,#+4 \ 00000128 3080BDE8 POP {R4,R5,PC} 471 case 13: DrwImage(icons[ICON_SETTINGS],x,y,0,0); break; 472 case 14: DrwImage(icons[IS_OFFLINE],x,y,0,0); break; \ ??DrawIcon_18: \ 0000012C 0010A0E3 MOV R1,#+0 \ 00000130 02002DE9 PUSH {R1} \ 00000134 000090E5 LDR R0,[R0, #+0] \ 00000138 F5FFFFEA B ??DrawIcon_6 473 case 15: DrwImage(icons[IS_UNKNOWN],x,y,0,0); break; \ ??DrawIcon_19: \ 0000013C 0010A0E3 MOV R1,#+0 \ 00000140 02002DE9 PUSH {R1} \ 00000144 380090E5 LDR R0,[R0, #+56] \ 00000148 F1FFFFEA B ??DrawIcon_6 474 case 16: DrwImage(icons[ICON_PING],x,y,0,0); break; \ ??DrawIcon_20: \ 0000014C 0010A0E3 MOV R1,#+0 \ 00000150 02002DE9 PUSH {R1} \ 00000154 540090E5 LDR R0,[R0, #+84] \ 00000158 EDFFFFEA B ??DrawIcon_6 475 case 17: DrwImage(icons[IS_UNKNOWN],x,y,0,0); break; 476 case 18: DrawCheckBox(x,y,IsActiveUp?1:0,0); break; \ ??DrawIcon_21: \ 0000015C ........ LDR R0,??DataTable36 ;; IsActiveUp \ 00000160 D1FFFFEA B ??DrawIcon_8 477 case 19: DrwImage(icons[ICON_SETTINGS],x,y,0,0); break; 478 #ifdef NEWSGOLD 479 case 20: DrawCheckBox(x,y,Is_Id3tag_Enabled?1:0,0); break; \ ??DrawIcon_22: \ 00000164 ........ LDR R0,??DataTable37 ;; Is_Id3tag_Enabled \ 00000168 CFFFFFEA B ??DrawIcon_8 480 #ifdef ELKA 481 case 21: DrawCheckBox(x,y,Is_SLI_On?1:0,0); break; \ ??DrawIcon_23: \ 0000016C ........ LDR R0,??DataTable38 ;; Is_SLI_On \ 00000170 0030A0E3 MOV R3,#+0 \ 00000174 000090E5 LDR R0,[R0, #+0] \ 00000178 0510A0E1 MOV R1,R5 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 0120A013 MOVNE R2,#+1 \ 00000184 0020A003 MOVEQ R2,#+0 \ 00000188 0400A0E1 MOV R0,R4 \ 0000018C ........ _BLF DrawCheckBox,??DrawCheckBox??rA 482 #endif 483 #endif 484 } 485 } \ ??DrawIcon_24: \ 00000190 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawIcon_1: \ 00000194 ........ DC32 icons \ 00000198 ........ DC32 CurrentXStatus 486 487 \ In segment CODE, align 4, keep-with-next 488 void DrawMMScrollBar(int cur,int total) 489 { \ DrawMMScrollBar: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 490 int scr_h=ScreenH()-1; 491 int scr_w=ScreenW()-1; 492 int y=mm_rc.y2-mm_rc.y-2; \ 00000004 ........ LDR R6,??DataTable55 ;; 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] 493 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,??DataTable48 ;; 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 494 int y2=y/total; 495 496 DrawLine(mm_rc.x2-2,mm_rc.y,mm_rc.x2-2,mm_rc.y2,1,clrWhite); \ 0000005C B30100EF SWI +435 497 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 498 } \ 000000A8 1CD08DE2 ADD SP,SP,#+28 \ 000000AC F083BDE8 POP {R4-R9,PC} ;; return \ In segment DATA_I, align 4, align-sorted \ mm_rc: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ isAbout: \ 00000008 DS8 4 \ 0000000C REQUIRE `?` \ 0000000C DS8 88 \ 00000064 REQUIRE `?` \ 00000064 DS8 88 \ 000000BC REQUIRE `?` \ 000000BC DS8 4 \ 000000C0 REQUIRE `?` \ 000000C0 DS8 4 \ 000000C4 REQUIRE `?` \ startItem: \ 000000C4 DS8 4 \ 000000C8 REQUIRE `?` \ x2_cb: \ 000000C8 DS8 4 \ 000000CC REQUIRE `?` \ mm_itemFromDisp: \ 000000CC DS8 4 \ 000000D0 REQUIRE `?` \ mm_curpos: \ 000000D0 DS8 4 \ 000000D4 REQUIRE `?` \ mm_font: \ 000000D4 DS8 4 \ 000000D8 REQUIRE `?` 499 500 int isLoadLangMenu=0; \ isLoadLangMenu: \ 000000D8 DS8 4 \ 000000DC REQUIRE `?` 501 \ In segment CODE, align 4, keep-with-next 502 void MM_DrawList() 503 { \ MM_DrawList: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 504 int font_y = FontH(mm_font)+1; \ 00000004 ........ LDR R4,??DataTable52 ;; mm_rc \ 00000008 10D04DE2 SUB SP,SP,#+16 \ 0000000C D40094E5 LDR R0,[R4, #+212] 505 int scr_h=ScreenH()-1; 506 int scr_w=ScreenW()-1; 507 // mm_itemFromDisp = sdiv(font_y,scr_h-CLIST_Y1-FontH(mm_font)-2)-1; 508 mm_itemFromDisp = sdiv(font_y,mm_rc.y2-mm_rc.y-2); 509 510 LockSched(); 511 512 int i=0; \ 00000010 0050A0E3 MOV R5,#+0 \ 00000014 ........ _BLF FontH,??FontH??rA \ 00000018 010080E2 ADD R0,R0,#+1 \ 0000001C 08008DE5 STR R0,[SP, #+8] \ 00000020 898100EF SWI +33161 \ 00000024 888100EF SWI +33160 \ 00000028 F600D4E1 LDRSH R0,[R4, #+6] \ 0000002C F210D4E1 LDRSH R1,[R4, #+2] \ 00000030 010040E0 SUB R0,R0,R1 \ 00000034 021040E2 SUB R1,R0,#+2 \ 00000038 08009DE5 LDR R0,[SP, #+8] \ 0000003C B80000EF SWI +184 \ 00000040 CC0084E5 STR R0,[R4, #+204] \ 00000044 460100EF SWI +326 513 int start_y=0; 514 int start_x=x2_cb+8; \ 00000048 C81094E5 LDR R1,[R4, #+200] 515 516 char *s=malloc(32); \ 0000004C 2000A0E3 MOV R0,#+32 \ 00000050 081081E2 ADD R1,R1,#+8 \ 00000054 0C108DE5 STR R1,[SP, #+12] \ 00000058 140000EF SWI +20 \ 0000005C 0060A0E1 MOV R6,R0 517 *s=0; \ 00000060 0000A0E3 MOV R0,#+0 \ 00000064 0000C6E5 STRB R0,[R6, #+0] 518 RECT rc; 519 int x2=0; \ 00000068 0080A0E1 MOV R8,R0 520 while(i` \ 0000013C 011040E2 SUB R1,R0,#+1 \ 00000140 C40094E5 LDR R0,[R4, #+196] \ 00000144 002085E0 ADD R2,R5,R0 \ 00000148 F000DDE1 LDRSH R0,[SP, #+0] \ 0000014C 030052E1 CMP R2,R3 \ 00000150 4000001A BNE ??MM_DrawList_4 534 } 535 536 if(startItem+i==mm_curpos)//Если наш итем то выделяем 537 { 538 DrawRoundedFrame(rc.x,rc.y-1,rc.x2-5,rc.y2-1,0,0,0,MMCursorClr,MMCursorBGClr);//cursor \ 00000154 D8219FE5 LDR R2,??MM_DrawList_3+0xC ;; MMCursorBGClr \ 00000158 04002DE9 PUSH {R2} \ 0000015C D4219FE5 LDR R2,??MM_DrawList_3+0x10 ;; MMCursorClr \ 00000160 04002DE9 PUSH {R2} \ 00000164 0020A0E3 MOV R2,#+0 \ 00000168 04002DE9 PUSH {R2} \ 0000016C 04002DE9 PUSH {R2} \ 00000170 04002DE9 PUSH {R2} \ 00000174 FA21DDE1 LDRSH R2,[SP, #+26] \ 00000178 013042E2 SUB R3,R2,#+1 \ 0000017C 05204CE2 SUB R2,R12,#+5 \ 00000180 500100EF SWI +336 539 540 if( isLoadLangMenu!=0 ? menutexts[startItem+i] : menutexts2[startItem+i] ) \ 00000184 D82094E5 LDR R2,[R4, #+216] \ 00000188 14D08DE2 ADD SP,SP,#+20 \ 0000018C C40094E5 LDR R0,[R4, #+196] \ 00000190 D4E094E5 LDR LR,[R4, #+212] \ 00000194 000052E3 CMP R2,#+0 \ 00000198 C0109415 LDRNE R1,[R4, #+192] \ 0000019C 000085E0 ADD R0,R5,R0 \ 000001A0 00319117 LDRNE R3,[R1, +R0, LSL #+2] \ 000001A4 00018400 ADDEQ R0,R4,R0, LSL #+2 \ 000001A8 0C309005 LDREQ R3,[R0, #+12] \ 000001AC F200DDE1 LDRSH R0,[SP, #+2] \ 000001B0 000053E3 CMP R3,#+0 \ 000001B4 011040E2 SUB R1,R0,#+1 \ 000001B8 F400DDE1 LDRSH R0,[SP, #+4] \ 000001BC 08C040E0 SUB R12,R0,R8 \ 000001C0 F000DDE1 LDRSH R0,[SP, #+0] \ 000001C4 030080E2 ADD R0,R0,#+3 \ 000001C8 1200000A BEQ ??MM_DrawList_5 541 PrintText(rc.x+3,rc.y-1,(isLoadLangMenu!=0 ? menutexts[startItem+i] : menutexts2[startItem+i]),0,mm_font,1,0,1,0,rc.x2-x2);//item name \ 000001CC C43094E5 LDR R3,[R4, #+196] \ 000001D0 000052E3 CMP R2,#+0 \ 000001D4 C0209415 LDRNE R2,[R4, #+192] \ 000001D8 033085E0 ADD R3,R5,R3 \ 000001DC 03219217 LDRNE R2,[R2, +R3, LSL #+2] \ 000001E0 03218400 ADDEQ R2,R4,R3, LSL #+2 \ 000001E4 0C209205 LDREQ R2,[R2, #+12] \ 000001E8 00102DE9 PUSH {R12} \ 000001EC 0030A0E3 MOV R3,#+0 \ 000001F0 08002DE9 PUSH {R3} \ 000001F4 0130A0E3 MOV R3,#+1 \ 000001F8 08002DE9 PUSH {R3} \ 000001FC 0030A0E3 MOV R3,#+0 \ 00000200 08002DE9 PUSH {R3} \ 00000204 0130A0E3 MOV R3,#+1 \ 00000208 08002DE9 PUSH {R3} \ 0000020C 00402DE9 PUSH {LR} \ 00000210 0030A0E3 MOV R3,#+0 \ 00000214 080000EA B ??MM_DrawList_6 542 else 543 PrintText(rc.x+3,rc.y-1,"Ошибка!",0,mm_font,1,0,0,0,rc.x2-x2);//item name \ ??MM_DrawList_5: \ 00000218 00102DE9 PUSH {R12} \ 0000021C 0020A0E3 MOV R2,#+0 \ 00000220 04002DE9 PUSH {R2} \ 00000224 04002DE9 PUSH {R2} \ 00000228 04002DE9 PUSH {R2} \ 0000022C 0120A0E3 MOV R2,#+1 \ 00000230 04002DE9 PUSH {R2} \ 00000234 00402DE9 PUSH {LR} \ 00000238 0920A0E1 MOV R2,R9 \ ??MM_DrawList_6: \ 0000023C ........ _BLF PrintText,??PrintText??rA \ 00000240 18D08DE2 ADD SP,SP,#+24 544 545 DrawMMScrollBar(startItem+i,MENU_ITEMS); \ 00000244 C40094E5 LDR R0,[R4, #+196] \ 00000248 1610A0E3 MOV R1,#+22 \ 0000024C 000085E0 ADD R0,R5,R0 \ 00000250 ........ BL DrawMMScrollBar \ 00000254 250000EA B ??MM_DrawList_7 546 } \ ??MM_DrawList_4: \ 00000258 C0A094E5 LDR R10,[R4, #+192] \ 0000025C D4E094E5 LDR LR,[R4, #+212] \ 00000260 08304CE0 SUB R3,R12,R8 \ 00000264 02C18AE0 ADD R12,R10,R2, LSL #+2 \ 00000268 00B09CE5 LDR R11,[R12, #+0] \ 0000026C 023043E2 SUB R3,R3,#+2 \ 00000270 030080E2 ADD R0,R0,#+3 \ 00000274 5EA0A0E3 MOV R10,#+94 \ 00000278 40AF8AE3 ORR R10,R10,#0x100 \ 0000027C 00005BE3 CMP R11,#+0 \ 00000280 0E00000A BEQ ??MM_DrawList_8 547 else 548 { 549 if(menutexts[startItem+i]) 550 PrintText(rc.x+3,rc.y-1,(isLoadLangMenu!=0 ? menutexts[startItem+i] : menutexts2[startItem+i]),0,mm_font,1,350,0,0,rc.x2-x2-2);//item name \ 00000284 D89094E5 LDR R9,[R4, #+216] \ 00000288 000059E3 CMP R9,#+0 \ 0000028C 02218400 ADDEQ R2,R4,R2, LSL #+2 \ 00000290 0C209205 LDREQ R2,[R2, #+12] \ 00000294 08002DE9 PUSH {R3} \ 00000298 0B20A011 MOVNE R2,R11 \ 0000029C 0030A0E3 MOV R3,#+0 \ 000002A0 08002DE9 PUSH {R3} \ 000002A4 08002DE9 PUSH {R3} \ 000002A8 00042DE9 PUSH {R10} \ 000002AC 0130A0E3 MOV R3,#+1 \ 000002B0 08002DE9 PUSH {R3} \ 000002B4 00402DE9 PUSH {LR} \ 000002B8 0030A0E3 MOV R3,#+0 \ 000002BC 090000EA B ??MM_DrawList_9 551 else 552 PrintText(rc.x+3,rc.y-1,"Ошибка!",0,mm_font,1,350,0,0,rc.x2-x2-2);//item name \ ??MM_DrawList_8: \ 000002C0 08002DE9 PUSH {R3} \ 000002C4 0020A0E3 MOV R2,#+0 \ 000002C8 04002DE9 PUSH {R2} \ 000002CC 04002DE9 PUSH {R2} \ 000002D0 00042DE9 PUSH {R10} \ 000002D4 0030A0E3 MOV R3,#+0 \ 000002D8 0120A0E3 MOV R2,#+1 \ 000002DC 04002DE9 PUSH {R2} \ 000002E0 00402DE9 PUSH {LR} \ 000002E4 0920A0E1 MOV R2,R9 \ ??MM_DrawList_9: \ 000002E8 ........ _BLF PrintText,??PrintText??rA \ 000002EC 18D08DE2 ADD SP,SP,#+24 553 } 554 555 DrawIcon(1,start_y,startItem+i); \ ??MM_DrawList_7: \ 000002F0 C40094E5 LDR R0,[R4, #+196] \ 000002F4 0710A0E1 MOV R1,R7 \ 000002F8 002085E0 ADD R2,R5,R0 \ 000002FC 0100A0E3 MOV R0,#+1 \ 00000300 ........ BL DrawIcon 556 557 /* 558 if(menutexts[startItem+i]) 559 PrintField(rc.x+3,rc.y-1,menutexts[startItem+i],0,mm_font,1);//item name 560 else 561 PrintField(rc.x+3,rc.y-1,"Ошибка!",0,mm_font,1);//item name 562 */ 563 564 i++; 565 if(startItem+i >= MENU_ITEMS) break; \ 00000304 C40094E5 LDR R0,[R4, #+196] \ 00000308 015085E2 ADD R5,R5,#+1 \ 0000030C 000085E0 ADD R0,R5,R0 \ 00000310 160050E3 CMP R0,#+22 \ 00000314 54FFFFBA BLT ??MM_DrawList_0 566 } 567 mfree(s); \ ??MM_DrawList_1: \ 00000318 0600A0E1 MOV R0,R6 \ 0000031C 150000EF SWI +21 568 UnlockSched(); \ 00000320 470100EF SWI +327 569 } \ 00000324 FF8FBDE8 POP {R0-R11,PC} ;; return \ ??MM_DrawList_3: \ 00000328 25640000 DC8 "%d",+0 \ 0000032C ........ DC32 ShowNumbMenu \ 00000330 ........ DC32 `?` \ 00000334 ........ DC32 MMCursorBGClr \ 00000338 ........ DC32 MMCursorClr 570 571 // Управление курсором \ In segment CODE, align 4, keep-with-next 572 void MM_MoveUp(int i) 573 { 574 if(mm_curpos > mm_itemFromDisp + 2 ){ mm_curpos--; } \ MM_MoveUp: \ 00000000 ........ LDR R0,??DataTable55 ;; mm_rc \ 00000004 D01090E5 LDR R1,[R0, #+208] \ 00000008 CC3090E5 LDR R3,[R0, #+204] \ 0000000C C42090E5 LDR R2,[R0, #+196] \ 00000010 02C083E2 ADD R12,R3,#+2 \ 00000014 01005CE1 CMP R12,R1 \ 00000018 011041B2 SUBLT R1,R1,#+1 \ 0000001C 080000BA BLT ??MM_MoveUp_0 575 else 576 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 577 else 578 { 579 mm_curpos=MENU_ITEMS-1; \ ??MM_MoveUp_1: \ 0000003C 1510A0E3 MOV R1,#+21 580 startItem=MENU_ITEMS-mm_itemFromDisp; \ 00000040 162063E2 RSB R2,R3,#+22 \ ??MM_MoveUp_0: \ 00000044 C42080E5 STR R2,[R0, #+196] \ 00000048 D01080E5 STR R1,[R0, #+208] 581 } 582 } \ 0000004C 1EFF2FE1 BX LR ;; return 583 584 \ In segment CODE, align 4, keep-with-next 585 void MM_MoveDown(int i) 586 { 587 if(mm_curpos ` \ 0000000C F200D4E1 LDRSH R0,[R4, #+2] 617 618 char *s=malloc(256); \ 00000010 ........ LDR R8,??DataTable47 ;; transparent \ 00000014 0A5080E2 ADD R5,R0,#+10 \ 00000018 D40094E5 LDR R0,[R4, #+212] 619 620 SetFontColor(clrRed,transparent,0); 621 sprintf(s,"NATICQ v2.0\nRevisiov 2058"); 622 PrintText((ScreenW()-x)/2,y+15,s,1,mm_font,1,1,0,0,ScreenW()-x);//item name \ 0000001C 0F9085E2 ADD R9,R5,#+15 \ 00000020 ........ _BLF FontH,??FontH??rA \ 00000024 0070A0E1 MOV R7,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 081086E2 ADD R1,R6,#+8 \ 00000030 02002DE9 PUSH {R1} \ 00000034 0610A0E1 MOV R1,R6 \ 00000038 02002DE9 PUSH {R1} \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 02002DE9 PUSH {R1} \ 00000044 02002DE9 PUSH {R1} \ 00000048 02002DE9 PUSH {R1} \ 0000004C 0C10A0E3 MOV R1,#+12 \ 00000050 915722E0 MLA R2,R1,R7,R5 \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 0F3082E2 ADD R3,R2,#+15 \ 0000005C 0A2040E2 SUB R2,R0,#+10 \ 00000060 0A00A0E3 MOV R0,#+10 \ 00000064 500100EF SWI +336 \ 00000068 400FA0E3 MOV R0,#+256 \ 0000006C 140000EF SWI +20 \ 00000070 0070A0E1 MOV R7,R0 \ 00000074 C8019FE5 LDR R0,??DrawAbout_0+0x4 ;; clrRed \ 00000078 0020A0E3 MOV R2,#+0 \ 0000007C 0810A0E1 MOV R1,R8 \ 00000080 ........ _BLF SetFontColor,??SetFontColor??rA \ 00000084 101086E2 ADD R1,R6,#+16 \ 00000088 0700A0E1 MOV R0,R7 \ 0000008C 160000EF SWI +22 \ 00000090 888100EF SWI +33160 \ 00000094 00A0A0E1 MOV R10,R0 \ 00000098 888100EF SWI +33160 \ 0000009C 0A104AE2 SUB R1,R10,#+10 \ 000000A0 02002DE9 PUSH {R1} \ 000000A4 0A0040E2 SUB R0,R0,#+10 \ 000000A8 0130A0E3 MOV R3,#+1 \ 000000AC 0720A0E1 MOV R2,R7 \ 000000B0 0010A0E3 MOV R1,#+0 \ 000000B4 02002DE9 PUSH {R1} \ 000000B8 02002DE9 PUSH {R1} \ 000000BC A00F80E0 ADD R0,R0,R0, LSR #+31 \ 000000C0 C000A0E1 ASR R0,R0,#+1 \ 000000C4 0110A0E3 MOV R1,#+1 \ 000000C8 02002DE9 PUSH {R1} \ 000000CC 02002DE9 PUSH {R1} \ 000000D0 D41094E5 LDR R1,[R4, #+212] \ 000000D4 02002DE9 PUSH {R1} \ 000000D8 0910A0E1 MOV R1,R9 \ 000000DC ........ _BLF PrintText,??PrintText??rA \ 000000E0 2CD08DE2 ADD SP,SP,#+44 623 #ifdef ELKA 624 int n=GetNLines((ScreenW()-x)/2,y+15)+1; \ 000000E4 888100EF SWI +33160 \ 000000E8 0A0040E2 SUB R0,R0,#+10 \ 000000EC 0910A0E1 MOV R1,R9 \ 000000F0 A00F80E0 ADD R0,R0,R0, LSR #+31 \ 000000F4 C000A0E1 ASR R0,R0,#+1 \ 000000F8 ........ _BLF GetNLines,??GetNLines??rA \ 000000FC 019080E2 ADD R9,R0,#+1 625 #else 626 int n=GetNLines((ScreenW()-x)/2,y+15); 627 #endif 628 sprintf(s,LG_COPYRIGHT); \ 00000100 781086E2 ADD R1,R6,#+120 \ 00000104 0700A0E1 MOV R0,R7 \ 00000108 160000EF SWI +22 629 SetFontColor(clrWhite,transparent,0); \ 0000010C ........ LDR R0,??DataTable48 ;; clrWhite \ 00000110 0020A0E3 MOV R2,#+0 \ 00000114 0810A0E1 MOV R1,R8 \ 00000118 ........ _BLF SetFontColor,??SetFontColor??rA 630 PrintText((ScreenW()-x)/2,y+25+(FontH(mm_font)*n),s,1,mm_font,1,1,0,0,ScreenW()-x);//item name \ 0000011C 888100EF SWI +33160 \ 00000120 00A0A0E1 MOV R10,R0 \ 00000124 D40094E5 LDR R0,[R4, #+212] \ 00000128 ........ _BLF FontH,??FontH??rA \ 0000012C 00B0A0E1 MOV R11,R0 \ 00000130 888100EF SWI +33160 \ 00000134 0A104AE2 SUB R1,R10,#+10 \ 00000138 02002DE9 PUSH {R1} \ 0000013C 0A0040E2 SUB R0,R0,#+10 \ 00000140 0130A0E3 MOV R3,#+1 \ 00000144 0720A0E1 MOV R2,R7 \ 00000148 0010A0E3 MOV R1,#+0 \ 0000014C 02002DE9 PUSH {R1} \ 00000150 02002DE9 PUSH {R1} \ 00000154 A00F80E0 ADD R0,R0,R0, LSR #+31 \ 00000158 C000A0E1 ASR R0,R0,#+1 \ 0000015C 0110A0E3 MOV R1,#+1 \ 00000160 02002DE9 PUSH {R1} \ 00000164 02002DE9 PUSH {R1} \ 00000168 D41094E5 LDR R1,[R4, #+212] \ 0000016C 02002DE9 PUSH {R1} \ 00000170 995B21E0 MLA R1,R9,R11,R5 \ 00000174 191081E2 ADD R1,R1,#+25 \ 00000178 ........ _BLF PrintText,??PrintText??rA 631 632 SetFontColor(clrRed,transparent,0); \ 0000017C C0009FE5 LDR R0,??DrawAbout_0+0x4 ;; clrRed \ 00000180 0020A0E3 MOV R2,#+0 \ 00000184 0810A0E1 MOV R1,R8 \ 00000188 ........ _BLF SetFontColor,??SetFontColor??rA 633 sprintf(s,"NATICQ v3.0\n(m)evilfox,kluchnik\nCompile \n%s at %s",__DATE__,__TIME__); \ 0000018C 6C3086E2 ADD R3,R6,#+108 \ 00000190 602086E2 ADD R2,R6,#+96 \ 00000194 2C1086E2 ADD R1,R6,#+44 \ 00000198 0700A0E1 MOV R0,R7 \ 0000019C 160000EF SWI +22 634 #ifdef ELKA 635 n+=GetNLines((ScreenW()-x)/2,y+25+(FontH(mm_font)*n)); \ 000001A0 D40094E5 LDR R0,[R4, #+212] \ 000001A4 ........ _BLF FontH,??FontH??rA \ 000001A8 0060A0E1 MOV R6,R0 \ 000001AC 888100EF SWI +33160 \ 000001B0 995621E0 MLA R1,R9,R6,R5 \ 000001B4 0A0040E2 SUB R0,R0,#+10 \ 000001B8 191081E2 ADD R1,R1,#+25 \ 000001BC A00F80E0 ADD R0,R0,R0, LSR #+31 \ 000001C0 C000A0E1 ASR R0,R0,#+1 \ 000001C4 ........ _BLF GetNLines,??GetNLines??rA \ 000001C8 096080E0 ADD R6,R0,R9 636 #else 637 n+=GetNLines((ScreenW()-x)/2,y+25+(FontH(mm_font)*n))-1; 638 #endif 639 PrintText((ScreenW()-x)/2,y+30+(FontH(mm_font)*(n+1)),s,1,mm_font,1,1,0,0,ScreenW()-x);//item name \ 000001CC 888100EF SWI +33160 \ 000001D0 0090A0E1 MOV R9,R0 \ 000001D4 D40094E5 LDR R0,[R4, #+212] \ 000001D8 ........ _BLF FontH,??FontH??rA \ 000001DC 0080A0E1 MOV R8,R0 \ 000001E0 888100EF SWI +33160 \ 000001E4 0A1049E2 SUB R1,R9,#+10 \ 000001E8 02002DE9 PUSH {R1} \ 000001EC 0A0040E2 SUB R0,R0,#+10 \ 000001F0 0130A0E3 MOV R3,#+1 \ 000001F4 0720A0E1 MOV R2,R7 \ 000001F8 0010A0E3 MOV R1,#+0 \ 000001FC 02002DE9 PUSH {R1} \ 00000200 02002DE9 PUSH {R1} \ 00000204 A00F80E0 ADD R0,R0,R0, LSR #+31 \ 00000208 C000A0E1 ASR R0,R0,#+1 \ 0000020C 0110A0E3 MOV R1,#+1 \ 00000210 02002DE9 PUSH {R1} \ 00000214 02002DE9 PUSH {R1} \ 00000218 D41094E5 LDR R1,[R4, #+212] \ 0000021C 02002DE9 PUSH {R1} \ 00000220 011086E2 ADD R1,R6,#+1 \ 00000224 915824E0 MLA R4,R1,R8,R5 \ 00000228 1E1084E2 ADD R1,R4,#+30 \ 0000022C ........ _BLF PrintText,??PrintText??rA \ 00000230 30D08DE2 ADD SP,SP,#+48 640 mfree(s); \ 00000234 0700A0E1 MOV R0,R7 \ 00000238 150000EF SWI +21 641 642 } \ 0000023C F08FBDE8 POP {R4-R11,PC} ;; return \ ??DrawAbout_0: \ 00000240 ........ DC32 `?` \ 00000244 ........ DC32 clrRed 643 \ In segment CODE, align 4, keep-with-next 644 void MM_OnRedraw(MAIN_GUI *data) 645 { \ MM_OnRedraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 646 LockSched(); 647 DrwImage(&screen,0,hy+2,0,0); \ 00000004 ........ LDR R4,??DataTable54 ;; hy \ 00000008 460100EF SWI +326 \ 0000000C 0000A0E3 MOV R0,#+0 \ 00000010 01002DE9 PUSH {R0} \ 00000014 000094E5 LDR R0,[R4, #+0] \ 00000018 0030A0E3 MOV R3,#+0 \ 0000001C 022080E2 ADD R2,R0,#+2 \ 00000020 A4009FE5 LDR R0,??MM_OnRedraw_0 ;; screen \ 00000024 0310A0E1 MOV R1,R3 \ 00000028 ........ _BLF DrwImage,??DrwImage??rA 648 DrawRoundedFrame(0,hy+2,ScreenW()-1,ScreenH()-1,0,0,0,"\x00\x00\x00\x15","\x00\x00\x00\x15"); \ 0000002C 898100EF SWI +33161 \ 00000030 0050A0E1 MOV R5,R0 \ 00000034 888100EF SWI +33160 \ 00000038 ........ LDR R1,??DataTable53 ;; `?` \ 0000003C 013045E2 SUB R3,R5,#+1 \ 00000040 0120A0E1 MOV R2,R1 \ 00000044 04002DE9 PUSH {R2} \ 00000048 02002DE9 PUSH {R1} \ 0000004C 0010A0E3 MOV R1,#+0 \ 00000050 02002DE9 PUSH {R1} \ 00000054 02002DE9 PUSH {R1} \ 00000058 02002DE9 PUSH {R1} \ 0000005C 012040E2 SUB R2,R0,#+1 \ 00000060 000094E5 LDR R0,[R4, #+0] 649 DrawRoundedFrame(mm_rc.x,mm_rc.y-2,mm_rc.x2,mm_rc.y2,0,0,0,MMBackgrBordClr,MMBackgrClr); \ 00000064 ........ LDR R4,??DataTable52 ;; mm_rc \ 00000068 021080E2 ADD R1,R0,#+2 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 500100EF SWI +336 \ 00000074 54009FE5 LDR R0,??MM_OnRedraw_0+0x4 ;; MMBackgrClr \ 00000078 01002DE9 PUSH {R0} \ 0000007C 50009FE5 LDR R0,??MM_OnRedraw_0+0x8 ;; MMBackgrBordClr \ 00000080 01002DE9 PUSH {R0} \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 01002DE9 PUSH {R0} \ 0000008C 01002DE9 PUSH {R0} \ 00000090 01002DE9 PUSH {R0} \ 00000094 F630D4E1 LDRSH R3,[R4, #+6] \ 00000098 F420D4E1 LDRSH R2,[R4, #+4] \ 0000009C F200D4E1 LDRSH R0,[R4, #+2] \ 000000A0 021040E2 SUB R1,R0,#+2 \ 000000A4 F000D4E1 LDRSH R0,[R4, #+0] \ 000000A8 500100EF SWI +336 \ 000000AC 2CD08DE2 ADD SP,SP,#+44 650 UnlockSched(); \ 000000B0 470100EF SWI +327 651 // DrawSoftKeys(LG_SELECT,LG_CLOSE); 652 MM_DrawList(); \ 000000B4 ........ BL MM_DrawList 653 if(isAbout) DrawAbout(); \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 3080BD08 POPEQ {R4,R5,PC} \ 000000C4 ........ BL DrawAbout 654 } \ 000000C8 3080BDE8 POP {R4,R5,PC} ;; return \ ??MM_OnRedraw_0: \ 000000CC ........ DC32 screen \ 000000D0 ........ DC32 MMBackgrClr \ 000000D4 ........ DC32 MMBackgrBordClr 655 /* 656 657 static void do_logwrite(char *text) 658 { 659 int hFile; 660 unsigned int io_error = 0; 661 hFile = fopen("4:\\nat.txt",A_ReadWrite + A_Create + A_Append,P_READ+P_WRITE, &io_error); 662 if(hFile!=-1) 663 { 664 fwrite(hFile, text, strlen(text), &io_error); 665 fwrite(hFile, "\r\n", 2, &io_error); 666 fclose(hFile, &io_error); 667 } 668 else 669 ShowMSG(1,(int)"Error!"); 670 // mfree(text); 671 } 672 */ \ In segment DATA_Z, align 4, align-sorted 673 int one_use=0; \ one_use: \ 00000000 DS8 4 \ In segment CODE, align 4, keep-with-next 674 void MM_onCreate(MAIN_GUI *data, void *(*malloc_adr)(int)) 675 { \ MM_onCreate: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 676 #ifdef ELKA 677 #ifndef ICONBAR 678 DisableIconBar(1); 679 #endif 680 #endif 681 isLoadLangMenu=LoadMenuLang(); \ 00000004 ........ LDR R5,??DataTable52 ;; mm_rc 682 /* if(!i && i` \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 ........ BL LoadMenuLang \ 00000018 D80085E5 STR R0,[R5, #+216] \ 0000001C 000097E5 LDR R0,[R7, #+0] \ 00000020 101086E2 ADD R1,R6,#+16 \ 00000024 D40085E5 STR R0,[R5, #+212] \ 00000028 080086E2 ADD R0,R6,#+8 \ 0000002C ........ _BLF DrawSoftKeys,??DrawSoftKeys??rA 690 DoScreen(); \ 00000030 ........ _BLF DoScreen,??DoScreen??rA 691 692 mm_rc = MMRect; \ 00000034 B4009FE5 LDR R0,??MM_onCreate_0+0x4 ;; MMRect \ 00000038 B010D0E1 LDRH R1,[R0, #0] \ 0000003C B010C5E1 STRH R1,[R5, #+0] \ 00000040 B210D0E1 LDRH R1,[R0, #+2] \ 00000044 B210C5E1 STRH R1,[R5, #+2] \ 00000048 B410D0E1 LDRH R1,[R0, #+4] \ 0000004C B410C5E1 STRH R1,[R5, #+4] \ 00000050 B610D0E1 LDRH R1,[R0, #+6] \ 00000054 B610C5E1 STRH R1,[R5, #+6] 693 /* mm_rc.x=0; 694 mm_rc.y=hy+20; 695 mm_rc.x2=0; 696 int len=0; 697 if(!i) 698 { 699 PrintField(0,YDISP,menutexts2[6],0,mm_font,1); 700 len=GetWidth(0,YDISP); 701 } 702 else 703 { 704 for(int i=0;imm_rc.x2) mm_rc.x2=len; 709 } 710 } 711 712 #ifdef ELKA 713 mm_rc.x2=ScreenW()-(len/4); 714 #else 715 mm_rc.x2=len; 716 #endif 717 mm_rc.x2+=5; 718 */ 719 int y2 = mm_rc.y2-mm_rc.y; \ 00000058 F600D5E1 LDRSH R0,[R5, #+6] \ 0000005C F210D5E1 LDRSH R1,[R5, #+2] \ 00000060 018040E0 SUB R8,R0,R1 720 // y2 = ScreenH()-FontH(clfont)-mm_rc.y-3; 721 722 int ii=sdiv( (FontH(clfont)+1) ,y2 )+1; \ 00000064 000097E5 LDR R0,[R7, #+0] \ 00000068 ........ _BLF FontH,??FontH??rA \ 0000006C 0810A0E1 MOV R1,R8 \ 00000070 010080E2 ADD R0,R0,#+1 \ 00000074 B80000EF SWI +184 \ 00000078 018080E2 ADD R8,R0,#+1 723 mm_rc.y2=mm_rc.y + (FontH(clfont)*ii); \ 0000007C 000097E5 LDR R0,[R7, #+0] \ 00000080 ........ _BLF FontH,??FontH??rA \ 00000084 F210D5E1 LDRSH R1,[R5, #+2] \ 00000088 981020E0 MLA R0,R8,R0,R1 \ 0000008C B600C5E1 STRH R0,[R5, #+6] 724 // xs_rc.y2=xs_rc.y+(FontH(clfont)*i)+2; 725 726 isAbout=0; \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 080085E5 STR R0,[R5, #+8] 727 SetCanvasFlag(1); \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 728 #ifdef ICONBAR 729 DrawRoundedFrame(0,YDISP,ScreenW()-1,hy+2,0,0,0,"\x00\x00\x00\x15","\x00\x00\x00\x15"); \ 000000A0 888100EF SWI +33160 \ 000000A4 0610A0E1 MOV R1,R6 \ 000000A8 02002DE9 PUSH {R1} \ 000000AC 40002DE9 PUSH {R6} \ 000000B0 012040E2 SUB R2,R0,#+1 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 02002DE9 PUSH {R1} \ 000000BC 02002DE9 PUSH {R1} \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 ........ LDR R1,??DataTable54 ;; hy \ 000000C8 0000A0E3 MOV R0,#+0 \ 000000CC 001091E5 LDR R1,[R1, #+0] \ 000000D0 023081E2 ADD R3,R1,#+2 \ 000000D4 1810A0E3 MOV R1,#+24 \ 000000D8 500100EF SWI +336 730 #else 731 DrawRoundedFrame(0,0,ScreenW()-1,hy+2,0,0,0,"\x00\x00\x00\x15","\x00\x00\x00\x15"); 732 #endif 733 734 #ifndef ELKA 735 REDRAW(); 736 #endif 737 data->gui.state=1; \ 000000DC 0100A0E3 MOV R0,#+1 \ 000000E0 0C00C4E5 STRB R0,[R4, #+12] 738 } \ 000000E4 14D08DE2 ADD SP,SP,#+20 \ 000000E8 F081BDE8 POP {R4-R8,PC} ;; return \ ??MM_onCreate_0: \ 000000EC ........ DC32 clfont \ 000000F0 ........ DC32 MMRect 739 \ In segment CODE, align 4, keep-with-next 740 void MM_onClose(MAIN_GUI *data, void (*mfree_adr)(void *)) 741 { \ MM_onClose: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 742 FreeMenu(); \ 00000008 ........ BL FreeMenu 743 mfree(screen.bitmap); \ 0000000C 10009FE5 LDR R0,??MM_onClose_0 ;; screen + 8 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 150000EF SWI +21 744 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 745 } \ 00000020 1080BDE8 POP {R4,PC} ;; return \ ??MM_onClose_0: \ 00000024 ........ DC32 screen + 8 746 \ In segment CODE, align 4, keep-with-next 747 void MM_onFocus(MAIN_GUI *data, void *(*malloc_adr)(int), void (*mfree_adr)(void *)) 748 { \ MM_onFocus: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 749 #ifdef ELKA 750 #ifndef ICONBAR 751 DisableIconBar(1); 752 #endif 753 #endif 754 DrawHeader(); \ 00000008 ........ _BLF DrawHeader,??DrawHeader??rA 755 SetCanvasFlag(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 ........ _BLF SetCanvasFlag,??SetCanvasFlag??rA 756 data->gui.state=2; \ 00000014 0200A0E3 MOV R0,#+2 \ 00000018 0C00C4E5 STRB R0,[R4, #+12] 757 DisableIDLETMR(); \ 0000001C 7F0100EF SWI +383 758 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 759 \ In segment CODE, align 4, keep-with-next 760 void MM_onUnfocus(MAIN_GUI *data, void (*mfree_adr)(void *)) 761 { 762 if (data->gui.state!=2) return; \ MM_onUnfocus: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 763 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 764 } \ 00000010 1EFF2FE1 BX LR ;; return 765 \ In segment CODE, align 4, keep-with-next 766 int MM_OnKey(MAIN_GUI *data, GUI_MSG *msg) 767 { \ MM_OnKey: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0140A0E1 MOV R4,R1 768 DirectRedrawGUI(); 769 int k=msg->gbsmsg->submess; 770 771 if (msg->gbsmsg->msg==KEY_DOWN || msg->gbsmsg->msg==LONG_PRESS) \ 00000008 0070A0E3 MOV R7,#+0 \ 0000000C 9380A0E3 MOV R8,#+147 \ 00000010 3F0100EF SWI +319 \ 00000014 045094E5 LDR R5,[R4, #+4] \ 00000018 ........ LDR R4,??DataTable55 ;; mm_rc \ 0000001C 040095E5 LDR R0,[R5, #+4] \ 00000020 086095E5 LDR R6,[R5, #+8] \ 00000024 408F88E3 ORR R8,R8,#0x100 \ 00000028 080050E1 CMP R0,R8 \ 0000002C 02108812 ADDNE R1,R8,#+2 \ 00000030 01005011 CMPNE R0,R1 \ 00000034 0B00001A BNE ??MM_OnKey_0 772 { 773 switch(k) \ 00000038 040056E2 SUBS R0,R6,#+4 \ 0000003C 08005012 SUBSNE R0,R0,#+8 \ 00000040 1700000A BEQ ??MM_OnKey_1 \ 00000044 2F0050E2 SUBS R0,R0,#+47 \ 00000048 0400000A BEQ ??MM_OnKey_2 \ 0000004C 010050E2 SUBS R0,R0,#+1 \ 00000050 1000000A BEQ ??MM_OnKey_3 \ 00000054 010050E2 SUBS R0,R0,#+1 \ 00000058 1100000A BEQ ??MM_OnKey_1 \ 0000005C 010000EA B ??MM_OnKey_0 774 { 775 case UP_BUTTON: MM_MoveUp(0); break; \ ??MM_OnKey_2: \ 00000060 0000A0E3 MOV R0,#+0 \ 00000064 ........ BL MM_MoveUp 776 case DOWN_BUTTON: MM_MoveDown(0); break; 777 case LEFT_BUTTON: case RIGHT_SOFT:case RED_BUTTON: if(isAbout) isAbout=0; else return (1); 778 // case ENTER_BUTTON: case LEFT_SOFT: ((void (*)(void))(menuprocs[mm_curpos]))(); REDRAW(); break; 779 } 780 } 781 782 if (msg->gbsmsg->msg==KEY_DOWN) \ ??MM_OnKey_0: \ 00000068 040095E5 LDR R0,[R5, #+4] \ 0000006C 080050E1 CMP R0,R8 \ 00000070 2200001A BNE ??MM_OnKey_4 783 { 784 switch(k) \ 00000074 010056E2 SUBS R0,R6,#+1 \ 00000078 19005012 SUBSNE R0,R0,#+25 \ 0000007C 24005012 SUBSNE R0,R0,#+36 \ 00000080 1200001A BNE ??MM_OnKey_5 785 { 786 case ENTER_BUTTON: case LEFT_SOFT: case RIGHT_BUTTON: 787 if(isAbout) \ 00000084 080094E5 LDR R0,[R4, #+8] \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0A00000A BEQ ??MM_OnKey_6 788 isAbout=0; \ 00000090 087084E5 STR R7,[R4, #+8] \ 00000094 0C0000EA B ??MM_OnKey_7 \ ??MM_OnKey_3: \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C ........ BL MM_MoveDown \ 000000A0 F0FFFFEA B ??MM_OnKey_0 \ ??MM_OnKey_1: \ 000000A4 080094E5 LDR R0,[R4, #+8] \ 000000A8 000050E3 CMP R0,#+0 \ 000000AC 08708415 STRNE R7,[R4, #+8] \ 000000B0 ECFFFF1A BNE ??MM_OnKey_0 \ 000000B4 0100A0E3 MOV R0,#+1 \ 000000B8 F081BDE8 POP {R4-R8,PC} 789 else 790 ((void (*)(void))(menuprocs[mm_curpos]))(); \ ??MM_OnKey_6: \ 000000BC D00094E5 LDR R0,[R4, #+208] \ 000000C0 000184E0 ADD R0,R4,R0, LSL #+2 \ 000000C4 640090E5 LDR R0,[R0, #+100] \ 000000C8 30FF2FE1 BLX R0 791 792 REDRAW(); \ ??MM_OnKey_7: \ 000000CC 720100EF SWI +370 793 break; 794 } 795 796 if(k>='0' && k<= '9'){ mm_curpos=(k-'1')+startItem; ((void (*)(void))(menuprocs[mm_curpos]))(); REDRAW();} \ ??MM_OnKey_5: \ 000000D0 300056E3 CMP R6,#+48 \ 000000D4 090000BA BLT ??MM_OnKey_4 \ 000000D8 3A0056E3 CMP R6,#+58 \ 000000DC 070000AA BGE ??MM_OnKey_4 \ 000000E0 C40094E5 LDR R0,[R4, #+196] \ 000000E4 060080E0 ADD R0,R0,R6 \ 000000E8 310040E2 SUB R0,R0,#+49 \ 000000EC D00084E5 STR R0,[R4, #+208] \ 000000F0 000184E0 ADD R0,R4,R0, LSL #+2 \ 000000F4 640090E5 LDR R0,[R0, #+100] \ 000000F8 30FF2FE1 BLX R0 \ 000000FC 720100EF SWI +370 797 } 798 799 return(0); \ ??MM_OnKey_4: \ 00000100 0000A0E3 MOV R0,#+0 \ 00000104 F081BDE8 POP {R4-R8,PC} ;; return 800 } 801 802 extern void kill_data(void *p, void (*func_p)(void *)); 803 \ In segment CODE, align 4, keep-with-next 804 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 805 int MM_method9(void){return(0);} \ MM_method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 806 \ In segment DATA_C, align 4, align-sorted 807 static 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 808 (void *)MM_OnRedraw, 809 (void *)MM_onCreate, 810 (void *)MM_onClose, 811 (void *)MM_onFocus, 812 (void *)MM_onUnfocus, 813 (void *)MM_OnKey, 814 0, 815 (void *)kill_data, 816 (void *)MM_method8, 817 (void *)MM_method9, 818 0 819 }; 820 821 const RECT MM_Canvas={0,0,0,0}; \ MM_Canvas: \ 0000002C 000000000000 DC16 0, 0, 0, 0 \ 0000 822 \ In segment CODE, align 4, keep-with-next 823 void CreateMainMenu() 824 { \ CreateMainMenu: \ 00000000 10402DE9 PUSH {R4,LR} 825 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000004 4000A0E3 MOV R0,#+64 \ 00000008 140000EF SWI +20 \ 0000000C 0040A0E1 MOV R4,R0 826 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000010 4010A0E3 MOV R1,#+64 \ 00000014 1D0100EF SWI +285 827 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] 828 main_gui->gui.methods=(void *)gui_methods_2; \ 00000024 040084E5 STR R0,[R4, #+4] 829 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000028 158000EF SWI +32789 \ 0000002C 200084E5 STR R0,[R4, #+32] 830 //patch_rect((RECT*)&Canvas,0,YDISP,ScreenW()-1,ScreenH()-1); 831 MainMenu_ID=CreateGUI(main_gui); \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 370100EF SWI +311 \ 00000038 08109FE5 LDR R1,??CreateMainMenu_0+0x4 ;; MainMenu_ID \ 0000003C 000081E5 STR R0,[R1, #+0] 832 } \ 00000040 1080BDE8 POP {R4,PC} ;; return \ ??CreateMainMenu_0: \ 00000044 ........ DC32 gui_methods_2 \ 00000048 ........ DC32 MainMenu_ID \ In segment CODE, align 4, keep-with-next \ ??DataTable23: \ 00000000 ........ DC32 WriteDefSettings \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 CurrentStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 away_m \ In segment CODE, align 4, keep-with-next \ ??DataTable28: \ 00000000 ........ DC32 Is_Vibra_Enabled \ In segment CODE, align 4, keep-with-next \ ??DataTable29: \ 00000000 ........ DC32 Is_Sounds_Enabled \ In segment CODE, align 4, keep-with-next \ ??DataTable30: \ 00000000 ........ DC32 Is_INC_On \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 Is_Double_Vibra_On \ In segment CODE, align 4, keep-with-next \ ??DataTable32: \ 00000000 ........ DC32 Is_ILU_On \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 Is_PING_On \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 Is_Show_Offline \ In segment CODE, align 4, keep-with-next \ ??DataTable35: \ 00000000 ........ DC32 Is_Show_Groups \ In segment CODE, align 4, keep-with-next \ ??DataTable36: \ 00000000 ........ DC32 IsActiveUp \ In segment CODE, align 4, keep-with-next \ ??DataTable37: \ 00000000 ........ DC32 Is_Id3tag_Enabled \ In segment CODE, align 4, keep-with-next \ ??DataTable38: \ 00000000 ........ DC32 Is_SLI_On \ In segment CODE, align 4, keep-with-next \ ??DataTable47: \ 00000000 ........ DC32 transparent \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 clrWhite \ In segment CODE, align 4, keep-with-next \ ??DataTable52: \ 00000000 ........ DC32 mm_rc \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 hy \ In segment CODE, align 4, keep-with-next \ ??DataTable55: \ 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 00000000 DC32 0 \ `?`: \ 0000000C ........ DC32 `?` \ 00000010 ........ DC32 `?` \ 00000014 ........ DC32 `?` \ 0000003C ........ DC32 `?` \ 00000050 ........ DC32 `?` \ 00000054 ........ DC32 `?` \ 00000060 ........ DC32 `?` \ `?`: \ 00000064 ............ DC32 CreateSCMenu, CreateXSMenu, CreateManageCLMenu, AutoAwayMSG \ ............ \ ........ \ 00000074 ............ DC32 ChangeVibraMode, ChangeSoundMode, ChangeINCMode, ChangeDoubleVibra \ ............ \ ........ \ 00000084 ............ DC32 ChangeILUMode, ChangePINGMode, ChangeShowOfflineMode \ ............ \ 00000090 ............ DC32 ChangeShowGroupsMode, EditConfig, EditConfigMod, Disconnect \ ............ \ ........ \ 000000A0 ............ DC32 SaveCL, PingToServer, AboutDlg, ChangeActiveUp, CreateLogs \ ............ \ ............ \ .... \ 000000B4 ............ DC32 ChangeId3tagMode, ChangeSLIMode \ .... \ `?`: \ 000000BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C4 00000000 DC32 0 \ `?`: \ 000000C8 0A000000 DC32 10 \ `?`: \ 000000CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D0 00000000 DC32 0 \ `?`: \ 000000D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D8 00000000 DC32 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 5C6C616E676D DC8 "\\langmenu.txt" \ 656E752E7478 \ 7400 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 256400 DC8 "%d" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEF8E8E1EAE0 DC8 "\316\370\350\341\352\340!" \ 2100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 FFFFFF4500 DC8 "\377\377\377E" \ 00000005 000000 DC8 0, 0, 0 \ 00000008 0000004500 DC8 0, 0, 0, 45H, 0 \ 0000000D 000000 DC8 0, 0, 0 \ 00000010 4E4154494351 DC8 "NATICQ v2.0\012Revisiov 2058" \ 2076322E300A \ 526576697369 \ 6F7620323035 \ 3800 \ 0000002A 0000 DC8 0, 0 \ 0000002C 4E4154494351 DC8 "NATICQ v3.0\012(m)evilfox,kluchnik\012Compile \012%s at %s" \ 2076332E300A \ 286D29657669 \ 6C666F782C6B \ 6C7563686E69 \ 6B0A436F6D70 \ 696C65200A25 \ 732061742025 \ 7300 \ 0000005E 0000 DC8 0, 0 \ 00000060 536570203230 DC8 "Sep 20 2008" \ 203230303800 \ 0000006C 32303A31343A DC8 "20:14:26" \ 323600 \ 00000075 000000 DC8 0, 0, 0 \ 00000078 284329206279 DC8 "(C) by Rst7/CBSIE\012Kren,Kibab,Shadow,Seklth" \ 20527374372F \ 43425349450A \ 4B72656E2C4B \ 696261622C53 \ 6861646F772C \ 53656B6C7468 \ 00 \ 000000A3 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 0000001500 DC8 0, 0, 0, 15H, 0 \ 00000005 000000 DC8 0, 0, 0 \ 00000008 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 0000000E 0000 DC8 0, 0 \ 00000010 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ 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 C3F0F3EFEFFB DC8 "\303\360\363\357\357\373" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `? 220 ? 8 ? 12 ? 16 ? 12 ? 16 ? 3 ? 8 ? 164 ? 24 ? 8 ? 12 ? 8 ?