############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 27/Feb/2008 14:30:12 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2058w_src\main.c # # Command line = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2058w_src\main.c # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod20 # # 58w_src\Release_SGOLD\List\ -lC # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod2058w_src\Releas # # e_SGOLD\List\ -o D:\Pasha\elf\_MY_PROJECT_\naticq_mo # # d2058w_src\Release_SGOLD\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_mod2058w_src\Releas # # e_SGOLD\List\main.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2058w_src\Releas # # e_SGOLD\Obj\main.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod2058w_src\main.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 "conf_loader.h" 7 #include "mainmenu.h" 8 #include "main.h" 9 #include "language.h" 10 #include "../inc/xtask_ipc.h" 11 #include "smiles.h" 12 #include "naticq_ipc.h" 13 #include "status_change.h" 14 #include "strings.h" 15 //#include "string_util_int.h" 16 #include "manage_cl.h" 17 #include "cl_work.h" 18 #include "select_smile.h" 19 #include "revision.h" 20 #include "print.h" 21 #include "screen_save.h" 22 #ifdef NEWSGOLD 23 #include "player_tags.h" 24 #endif 25 #include "swilib2.h" 26 #include "rect_patcher.h" 27 28 #ifndef NEWSGOLD 29 #define SEND_TIMER 30 #endif 31 extern const unsigned int Vibra_cc; 32 #ifdef ELKA 33 #pragma swi_number=54 34 __swi __arm void SLI_SetState(unsigned char state); 35 #endif 36 37 #define IN_TICKS(sec) (sec * TMR_SECOND) 38 extern int janis; 39 extern const unsigned int date_X; 40 extern const unsigned int date_Y; 41 extern const unsigned int unread_X; 42 extern const unsigned int unread_Y; 43 extern const int show_xstatus; 44 extern const char fontpath[64]; 45 extern const int ShowStatusIcon; 46 #ifdef EVILFOX 47 int fonto=1; 48 int space=1; 49 #else 50 int main_d; 51 52 extern const int isLogOffline; 53 extern const int isLogOnline; 54 int dontLogOnConnect=0; 55 56 //------------- 57 #ifdef kluchnik//Дефайн не убирать и не трогать!выибу и высушу! 58 int solnce=0; 59 #endif 60 //------------ 61 62 63 extern const unsigned int fonto; 64 extern const unsigned int spaco1; 65 extern const unsigned int spaco2; 66 extern int *XStatusesIconArray; 67 #endif 68 int align=0; 69 //int space=1; 70 void *canvasdata; 71 //#ifdef ELKA 72 int paused_height; 73 //#endif 74 //char lielims[128]; 75 extern const unsigned int AUTO_ENGADE; 76 char talk_sound[128]; 77 int uins; 78 //char m_1[]="unofficial! private use only"; 79 //char m_2[]="mod by (c)Evilfox 315384924"; 80 char unread_msg_info[64]; 81 extern const int Is_Unread_On; 82 int saver_on; 83 #ifdef NEWSGOLD 84 extern char teast2[256]; 85 #endif 86 87 #ifdef ELKA 88 char last_msg_buffer[4048]; 89 #endif 90 ///////////////////////////////////////////////auto ping//////////////////// 91 GBSTMR mytmr3; 92 static void PingToServer2(void) 93 { 94 TPKT *p; 95 p=malloc(sizeof(PKT)+sizeof(TTime)); 96 GetDateTime(NULL,(TTime *)p->data); 97 p->pkt.uin=0; 98 p->pkt.type=T_ECHO; 99 p->pkt.data_len=sizeof(TTime); 100 SUBPROC((void *)SendAnswer,0,p); 101 } 102 103 int Is_PING_On; 104 \ In segment CODE, align 4, keep-with-next 105 void Pinger2() 106 { \ Pinger2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 107 if(Is_PING_On) \ 00000004 ........ LDR R5,??DataTable0 ;; Pinger2 \ 00000008 ........ LDR R6,??DataTable41 ;; S_ICONS \ 0000000C 0440A0E3 MOV R4,#+4 \ 00000010 EC0096E5 LDR R0,[R6, #+236] \ 00000014 404E84E3 ORR R4,R4,#0x400 \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 1500000A BEQ ??Pinger2_0 108 { 109 PingToServer2(); \ 00000020 1000A0E3 MOV R0,#+16 \ 00000024 140000EF SWI +20 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 081087E2 ADD R1,R7,#+8 \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 B40000EF SWI +180 \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 000087E5 STR R0,[R7, #+0] \ 00000040 1200A0E3 MOV R0,#+18 \ 00000044 B400C7E1 STRH R0,[R7, #+4] \ 00000048 0800A0E3 MOV R0,#+8 \ 0000004C B600C7E1 STRH R0,[R7, #+6] \ 00000050 ........ LDR R0,??DataTable2 ;; SendAnswer \ 00000054 0720A0E1 MOV R2,R7 \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 710100EF SWI +369 110 GBS_StartTimerProc(&mytmr3, 12960, Pinger2); \ 00000060 0520A0E1 MOV R2,R5 \ 00000064 A010A0E3 MOV R1,#+160 \ 00000068 C81D81E3 ORR R1,R1,#0x3200 \ 0000006C 060084E0 ADD R0,R4,R6 \ 00000070 4D0000EF SWI +77 \ 00000074 F080BDE8 POP {R4-R7,PC} 111 } 112 else 113 GBS_StartTimerProc(&mytmr3, 2160, Pinger2); \ ??Pinger2_0: \ 00000078 0520A0E1 MOV R2,R5 \ 0000007C 871EA0E3 MOV R1,#+2160 \ 00000080 060084E0 ADD R0,R4,R6 \ 00000084 4D0000EF SWI +77 114 } \ 00000088 F080BDE8 POP {R4-R7,PC} ;; return 115 //////////////////////////////////////auto ping///////////////////////////// 116 extern volatile int total_smiles; 117 extern volatile int total_xstatuses; 118 extern volatile int xstatuses_load; 119 extern volatile int pictures_max; //2026rev 120 extern volatile int pictures_loaded; //2026rev 121 #ifdef ELKA 122 int Is_SLI_On; 123 /* 124 #pragma swi_number=0x221 125 __swi __arm int SetCpuClockLow(); 126 127 #pragma swi_number=0x222 128 __swi __arm int SetCpuClockTempHi(); 129 */ 130 #endif 131 int Is_SMARTCPU_On; 132 int Is_INC_On; 133 int Is_ILU_On; 134 135 int Is_Double_Vibra_On; 136 int total_unread; 137 int total_unread2; 138 #ifdef ELKA 139 const int SLI_TYPE=1; 140 #endif 141 char PINGO[256]; 142 //extern const int VIBRA_TYPE; 143 //unsigned int SLI_STATUS; 144 #ifdef ELKA 145 extern const unsigned int SLI_time; 146 extern const unsigned int SLI_time2; 147 #endif 148 #define USE_MLMENU 149 150 #define TMR_SECOND 216 151 152 //IPC 153 const char ipc_my_name[32]=IPC_NATICQ_NAME; 154 const char ipc_xtask_name[]=IPC_XTASK_NAME; 155 const char ipc_test_name[]="test"; 156 IPC_REQ gipc; 157 158 159 char elf_path[256]; 160 int maincsm_id; 161 int maingui_id; 162 \ In segment CODE, align 4, keep-with-next 163 void SMART_REDRAW(void) 164 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 165 int f; 166 LockSched(); \ 00000004 460100EF SWI +326 167 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 264 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 168 UnlockSched(); \ 00000018 470100EF SWI +327 169 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 170 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 264 171 172 //По 10 секунд 173 #ifdef EVILFOX 174 #define ACTIVE_TIME 30 175 #else 176 #define ACTIVE_TIME 360 177 #endif 178 179 //Максимальное количество сообщений в логе 180 #ifdef EVILFOX 181 #define MAXLOGMSG (10) 182 #else 183 #define MAXLOGMSG (20) 184 #endif 185 186 // Строковые описания статусов 187 188 const char S_OFFLINE[]="Offline"; 189 const char S_INVISIBLE[]="Invisible"; 190 const char S_AWAY[]="Away"; 191 const char S_NA[]="N/A"; 192 const char S_OCCUPIED[]="Occupied"; 193 const char S_DND[]="DND"; 194 const char S_ONLINE[]="Online"; 195 const char S_FFC[]="FFC"; 196 197 volatile int SENDMSGCOUNT; 198 #ifdef kluchnik 199 int IsActiveUp=1; 200 #else 201 int IsActiveUp=0; 202 #endif 203 int Is_Vibra_Enabled; \ In segment DATA_Z, align 4, align-sorted 204 int Is_Id3tag_Enabled; \ Is_Id3tag_Enabled: \ 00000000 DS8 4 205 unsigned int Is_Sounds_Enabled; 206 int Is_Show_Offline; 207 int Is_Show_Groups; 208 209 int S_ICONS[TOTAL_ICONS+1]; 210 211 #define EOP -10 212 int CurrentStatus; 213 #ifdef NEWSGOLD 214 extern int CurrentXStatus; 215 #else 216 int CurrentXStatus; 217 #endif 218 219 WSHDR *ews; 220 221 extern const unsigned int UIN; 222 extern const char PASS[]; 223 224 static const char * const icons_names[TOTAL_ICONS]= 225 { 226 "offline.png", 227 "invisible.png", 228 "away.png", 229 "na.png", 230 "occupied.png", 231 "dnd.png", 232 "depression.png", 233 "evil.png", 234 "home.png", 235 "lunch.png", 236 "work.png", 237 "online.png", 238 "ffc.png", 239 "message.png", 240 "unknown.png", 241 "groupon.png", 242 "groupoff.png", 243 "null.png", 244 "addcont.png", 245 "head.png", 246 "logo.png", 247 "ping.png", 248 "settings.png", 249 "vis1.png", 250 "vis2.png", 251 "vis3.png", 252 "vis4.png", 253 "vis5.png" 254 }; 255 256 extern const char ICON_PATH[]; 257 258 ////=================================away_msg============== 259 #pragma swi_number=0x0C5 260 __swi __arm int IsIdleUiOnTop(); 261 262 //#ifdef EVILFOX 263 int msg_away_timer=0; 264 extern const char away_msg2[64]; 265 char away_msg[264]; 266 char away_msg_time[64]; 267 char away_msg_time_dace[16]; 268 char *inp_away_msg2; 269 char tim_zone[16]; 270 extern const int time_zone; \ In segment DATA_Z, align 4, align-sorted 271 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 272 int timemin; \ timemin: \ 00000000 DS8 4 273 int away_m; 274 int status_rem; 275 int change_back_status; 276 GBSTMR away_tmr; 277 extern const int Auto_Status; 278 \ In segment CODE, align 4, keep-with-next 279 void away_timer() 280 { 281 if(msg_away_timer==AUTO_ENGADE) \ away_timer: \ 00000000 ........ LDR R1,??DataTable3 ;; AUTO_ENGADE \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable41 ;; S_ICONS \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 1C0194E5 LDR R0,[R4, #+284] \ 00000014 001091E5 LDR R1,[R1, #+0] \ 00000018 010050E1 CMP R0,R1 \ 0000001C 2000001A BNE ??away_timer_0 282 { 283 TTime tt; 284 GetDateTime(NULL,&tt); 285 sprintf(away_msg_time_dace, "%2d:%2d", tt.hour, tt.min); \ 00000020 B0509FE5 LDR R5,??away_timer_1 ;; `?` \ 00000024 0D10A0E1 MOV R1,SP \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C B40000EF SWI +180 \ 00000030 0130DDE5 LDRB R3,[SP, #+1] \ 00000034 0020DDE5 LDRB R2,[SP, #+0] \ 00000038 0510A0E1 MOV R1,R5 \ 0000003C 5C00A0E3 MOV R0,#+92 \ 00000040 600E80E3 ORR R0,R0,#0x600 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 160000EF SWI +22 286 // sprintf(away_msg_time, "[away since %02d : %02d [%s]]", tt.hour, tt.min, tim_zone); 287 sprintf(away_msg_time, "(отсутствую примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 0000004C 6C00A0E3 MOV R0,#+108 \ 00000050 600E80E3 ORR R0,R0,#0x600 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 01002DE9 PUSH {R0} \ 0000005C 0530DDE5 LDRB R3,[SP, #+5] \ 00000060 0420DDE5 LDRB R2,[SP, #+4] \ 00000064 081085E2 ADD R1,R5,#+8 \ 00000068 1C00A0E3 MOV R0,#+28 \ 0000006C 600E80E3 ORR R0,R0,#0x600 \ 00000070 040080E0 ADD R0,R0,R4 \ 00000074 160000EF SWI +22 288 away_m=1; 289 // automsg=1; 290 if(CurrentStatus!=2) \ 00000078 5C0194E5 LDR R0,[R4, #+348] \ 0000007C 0150A0E3 MOV R5,#+1 \ 00000080 245184E5 STR R5,[R4, #+292] \ 00000084 020050E3 CMP R0,#+2 \ 00000088 04D08DE2 ADD SP,SP,#+4 \ 0000008C 0400000A BEQ ??away_timer_0 291 { 292 status_rem=CurrentStatus; \ 00000090 280184E5 STR R0,[R4, #+296] 293 CurrentStatus=2; \ 00000094 0200A0E3 MOV R0,#+2 \ 00000098 5C0184E5 STR R0,[R4, #+348] 294 set_my_status(); \ 0000009C ........ BL set_my_status 295 // SUBPROC((void*)WriteDefSettings); 296 change_back_status=1; \ 000000A0 2C5184E5 STR R5,[R4, #+300] 297 } 298 } 299 if(Auto_Status) \ ??away_timer_0: \ 000000A4 ........ LDR R0,??DataTable5 ;; Auto_Status 300 msg_away_timer++; 301 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 000000A8 2C209FE5 LDR R2,??away_timer_1+0x4 ;; away_timer \ 000000AC 000090E5 LDR R0,[R0, #+0] \ 000000B0 3810A0E3 MOV R1,#+56 \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 1C019415 LDRNE R0,[R4, #+284] \ 000000BC 401E81E3 ORR R1,R1,#0x400 \ 000000C0 01008012 ADDNE R0,R0,#+1 \ 000000C4 1C018415 STRNE R0,[R4, #+284] \ 000000C8 910F81E3 ORR R0,R1,#0x244 \ 000000CC 040080E0 ADD R0,R0,R4 \ 000000D0 4D0000EF SWI +77 302 } \ 000000D4 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??away_timer_1: \ 000000D8 ........ DC32 `?` \ 000000DC ........ DC32 away_timer 303 //#endif \ In segment CODE, align 4, keep-with-next 304 void init_time_zone() 305 { 306 switch(time_zone) \ init_time_zone: \ 00000000 64319FE5 LDR R3,??init_time_zone_1 ;; time_zone \ 00000004 ........ LDR R2,??DataTable41 ;; S_ICONS \ 00000008 60119FE5 LDR R1,??init_time_zone_1+0x4 ;; `?` \ 0000000C 00402DE9 PUSH {LR} \ 00000010 003093E5 LDR R3,[R3, #+0] \ 00000014 6C00A0E3 MOV R0,#+108 \ 00000018 600E80E3 ORR R0,R0,#0x600 \ 0000001C 200053E3 CMP R3,#+32 \ 00000020 0080BD88 POPHI {PC} \ 00000024 01CF8FE2 ADR R12,??init_time_zone_0 \ 00000028 03C0DCE7 LDRB R12,[R12, R3] \ 0000002C 0CF18FE0 ADD PC,PC,R12, LSL #+2 \ ??init_time_zone_0: \ 00000030 0D080C10 DC8 +13,+8,+12,+16 \ 00000034 12141618 DC8 +18,+20,+22,+24 \ 00000038 1A1C1E20 DC8 +26,+28,+30,+32 \ 0000003C 22242628 DC8 +34,+36,+38,+40 \ 00000040 2A2C2E30 DC8 +42,+44,+46,+48 \ 00000044 32343638 DC8 +50,+52,+54,+56 \ 00000048 3A3C3E40 DC8 +58,+60,+62,+64 \ 0000004C 42444648 DC8 +66,+68,+70,+72 \ 00000050 4A000000 DC8 +74,+0,+0,+0 307 { 308 case 0: 309 sprintf(tim_zone, "GMT -12:00"); 310 break; 311 case 1: 312 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_2: \ 00000054 0C1081E2 ADD R1,R1,#+12 \ 00000058 020080E0 ADD R0,R0,R2 \ 0000005C 160000EF SWI +22 \ 00000060 0080BDE8 POP {PC} 313 break; 314 case 2: 315 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_3: \ 00000064 181081E2 ADD R1,R1,#+24 \ ??init_time_zone_4: \ 00000068 020080E0 ADD R0,R0,R2 \ 0000006C 160000EF SWI +22 \ 00000070 0080BDE8 POP {PC} 316 break; 317 case 3: 318 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_5: \ 00000074 241081E2 ADD R1,R1,#+36 \ 00000078 FAFFFFEA B ??init_time_zone_4 319 break; 320 case 4: 321 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_6: \ 0000007C 301081E2 ADD R1,R1,#+48 \ 00000080 F8FFFFEA B ??init_time_zone_4 322 break; 323 case 5: 324 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_7: \ 00000084 3C1081E2 ADD R1,R1,#+60 \ 00000088 F6FFFFEA B ??init_time_zone_4 325 break; 326 case 6: 327 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000008C 481081E2 ADD R1,R1,#+72 \ 00000090 F4FFFFEA B ??init_time_zone_4 328 break; 329 case 7: 330 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000094 541081E2 ADD R1,R1,#+84 \ 00000098 F2FFFFEA B ??init_time_zone_4 331 break; 332 case 8: 333 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000009C 601081E2 ADD R1,R1,#+96 \ 000000A0 F0FFFFEA B ??init_time_zone_4 334 break; 335 case 9: 336 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 000000A4 6C1081E2 ADD R1,R1,#+108 \ 000000A8 EEFFFFEA B ??init_time_zone_4 337 break; 338 case 10: 339 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 000000AC 781081E2 ADD R1,R1,#+120 \ 000000B0 ECFFFFEA B ??init_time_zone_4 340 break; 341 case 11: 342 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000B4 841081E2 ADD R1,R1,#+132 \ 000000B8 EAFFFFEA B ??init_time_zone_4 343 break; 344 case 12: 345 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000BC 901081E2 ADD R1,R1,#+144 \ 000000C0 E8FFFFEA B ??init_time_zone_4 346 break; 347 case 13: 348 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000C4 9C1081E2 ADD R1,R1,#+156 \ 000000C8 E6FFFFEA B ??init_time_zone_4 349 break; 350 case 14: 351 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000CC A81081E2 ADD R1,R1,#+168 \ 000000D0 E4FFFFEA B ??init_time_zone_4 352 break; 353 case 15: 354 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000D4 B41081E2 ADD R1,R1,#+180 \ 000000D8 E2FFFFEA B ??init_time_zone_4 355 break; 356 case 16: 357 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000DC C01081E2 ADD R1,R1,#+192 \ 000000E0 E0FFFFEA B ??init_time_zone_4 358 break; 359 case 17: 360 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000E4 CC1081E2 ADD R1,R1,#+204 \ 000000E8 DEFFFFEA B ??init_time_zone_4 361 break; 362 case 18: 363 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000EC 5D1F81E2 ADD R1,R1,#+372 \ 000000F0 DCFFFFEA B ??init_time_zone_4 364 break; 365 case 19: 366 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000F4 D81081E2 ADD R1,R1,#+216 \ 000000F8 DAFFFFEA B ??init_time_zone_4 367 break; 368 case 20: 369 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000FC E41081E2 ADD R1,R1,#+228 \ 00000100 D8FFFFEA B ??init_time_zone_4 370 break; 371 case 21: 372 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 00000104 F01081E2 ADD R1,R1,#+240 \ 00000108 D6FFFFEA B ??init_time_zone_4 373 break; 374 case 22: 375 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 0000010C FC1081E2 ADD R1,R1,#+252 \ 00000110 D4FFFFEA B ??init_time_zone_4 376 break; 377 case 23: 378 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000114 421F81E2 ADD R1,R1,#+264 \ 00000118 D2FFFFEA B ??init_time_zone_4 379 break; 380 case 24: 381 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000011C 451F81E2 ADD R1,R1,#+276 \ 00000120 D0FFFFEA B ??init_time_zone_4 382 break; 383 case 25: 384 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000124 481F81E2 ADD R1,R1,#+288 \ 00000128 CEFFFFEA B ??init_time_zone_4 385 break; 386 case 26: 387 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000012C 4B1F81E2 ADD R1,R1,#+300 \ 00000130 CCFFFFEA B ??init_time_zone_4 388 break; 389 case 27: 390 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000134 4E1F81E2 ADD R1,R1,#+312 \ 00000138 CAFFFFEA B ??init_time_zone_4 391 break; 392 case 28: 393 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000013C 511F81E2 ADD R1,R1,#+324 \ 00000140 C8FFFFEA B ??init_time_zone_4 394 break; 395 case 29: 396 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000144 541F81E2 ADD R1,R1,#+336 \ 00000148 C6FFFFEA B ??init_time_zone_4 397 break; 398 case 30: 399 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000014C 571F81E2 ADD R1,R1,#+348 \ 00000150 C4FFFFEA B ??init_time_zone_4 400 break; 401 case 31: 402 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000154 5A1F81E2 ADD R1,R1,#+360 \ 00000158 C2FFFFEA B ??init_time_zone_4 403 break; 404 case 32: 405 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000015C 601F81E2 ADD R1,R1,#+384 \ 00000160 020080E0 ADD R0,R0,R2 \ 00000164 160000EF SWI +22 406 break; 407 } 408 } \ ??init_time_zone_35: \ 00000168 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 0000016C ........ DC32 time_zone \ 00000170 ........ DC32 `?` 409 410 //=================================away_msg=============== 411 //////////////////////////////////////////tozhe dlja auto ping/////////////// 412 \ In segment CODE, align 4, keep-with-next 413 void Draw11(void *canv) 414 { 415 #ifdef EVILFOX 416 PrintField(date_X,date_Y, PINGO, align, fonto, space); 417 #else 418 PrintField(date_X,date_Y, PINGO, align, fonto, spaco1); \ Draw11: \ 00000000 ........ LDR R1,??DataTable20 ;; spaco1 \ 00000004 ........ LDR R0,??DataTable41 ;; S_ICONS \ 00000008 00402DE9 PUSH {LR} \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 02002DE9 PUSH {R1} \ 00000014 ........ LDR R1,??DataTable21 ;; fonto \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 02002DE9 PUSH {R1} \ 00000020 D83090E5 LDR R3,[R0, #+216] \ 00000024 1410A0E3 MOV R1,#+20 \ 00000028 401E81E3 ORR R1,R1,#0x400 \ 0000002C 002081E0 ADD R2,R1,R0 \ 00000030 10009FE5 LDR R0,??Draw11_0 ;; date_Y \ 00000034 001090E5 LDR R1,[R0, #+0] \ 00000038 0C009FE5 LDR R0,??Draw11_0+0x4 ;; date_X \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 ........ _BLF PrintField,??PrintField??rA 419 #endif 420 } \ 00000044 0380BDE8 POP {R0,R1,PC} ;; return \ ??Draw11_0: \ 00000048 ........ DC32 date_Y \ 0000004C ........ DC32 date_X 421 //////////////////////////////////////////tozhe dlja auto ping/////////////// 422 GBSTMR mytmr; 423 GBSTMR mytmr2; 424 volatile int vibra_count; 425 #ifdef ELKA 426 void SLI_Off(void); 427 #endif 428 void start_vibra2(void); 429 //////////////////////////reminder timer///////////////////////// \ In segment CODE, align 4, keep-with-next 430 void Remind_Timer2() 431 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 432 if (total_unread) \ 00000004 ........ LDR R4,??DataTable41 ;; S_ICONS \ 00000008 980194E5 LDR R0,[R4, #+408] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 433 { 434 vibra_count=Vibra_cc; \ 00000014 28009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 640184E5 STR R0,[R4, #+356] 435 start_vibra2(); \ 00000020 ........ BL start_vibra2 436 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable12 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 9C00A0E3 MOV R0,#+156 \ 00000034 600E80E3 ORR R0,R0,#0x600 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 4D0000EF SWI +77 437 } 438 } \ 00000040 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000044 ........ DC32 Vibra_cc 439 \ In segment CODE, align 4, keep-with-next 440 void Reminder_timer() 441 { 442 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable12 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 1692 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 443 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 S_ICONS + 1692 444 //////////////////////////reminder timer///////////////////////// 445 446 //////////////////////////uptime////////////////////////// 447 int Is_UPTIME_On; 448 //int bubins; 449 int xstatus_old; 450 int minimum_xstatus; 451 int maximum; 452 //int UPTIME; 453 extern const unsigned int date_X2; 454 extern const unsigned int date_Y2; 455 \ In segment CODE, align 4, keep-with-next 456 void xstatuse() 457 { \ xstatuse: \ 00000000 30402DE9 PUSH {R4,R5,LR} 458 maximum++; \ 00000004 ........ LDR R4,??DataTable41 ;; S_ICONS 459 if(maximum==60) \ 00000008 0050A0E3 MOV R5,#+0 \ 0000000C 3C0194E5 LDR R0,[R4, #+316] \ 00000010 010080E2 ADD R0,R0,#+1 \ 00000014 3C0184E5 STR R0,[R4, #+316] \ 00000018 3C0050E3 CMP R0,#+60 \ 0000001C 0700001A BNE ??xstatuse_0 460 { 461 if(saver_on) reftes(); \ 00000020 E80094E5 LDR R0,[R4, #+232] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 0000000A BEQ ??xstatuse_1 \ 0000002C ........ _BLF reftes,??reftes??rA 462 maximum=0; 463 minimum_xstatus++; \ ??xstatuse_1: \ 00000030 380194E5 LDR R0,[R4, #+312] \ 00000034 3C5184E5 STR R5,[R4, #+316] \ 00000038 010080E2 ADD R0,R0,#+1 \ 0000003C 380184E5 STR R0,[R4, #+312] 464 } 465 if(minimum_xstatus==60) \ ??xstatuse_0: \ 00000040 380194E5 LDR R0,[R4, #+312] \ 00000044 3C0050E3 CMP R0,#+60 \ 00000048 3080BD18 POPNE {R4,R5,PC} 466 { 467 minimum_xstatus=0; 468 xstatus_old++; \ 0000004C 340194E5 LDR R0,[R4, #+308] \ 00000050 385184E5 STR R5,[R4, #+312] \ 00000054 010080E2 ADD R0,R0,#+1 \ 00000058 340184E5 STR R0,[R4, #+308] 469 } 470 } \ 0000005C 3080BDE8 POP {R4,R5,PC} ;; return 471 472 GBSTMR mytmr4; 473 #ifdef NEWSGOLD 474 GBSTMR tracktmr; 475 int tracktimer; 476 #endif 477 extern const int Pause_Time; 478 \ In segment CODE, align 4, keep-with-next 479 void x_zstatus() 480 { \ x_zstatus: \ 00000000 70402DE9 PUSH {R4-R6,LR} 481 if(connect_state==3) \ 00000004 48509FE5 LDR R5,??x_zstatus_0 ;; x_zstatus \ 00000008 ........ LDR R6,??DataTable41 ;; S_ICONS \ 0000000C AC40A0E3 MOV R4,#+172 \ 00000010 740196E5 LDR R0,[R6, #+372] \ 00000014 604E84E3 ORR R4,R4,#0x600 \ 00000018 030050E3 CMP R0,#+3 \ 0000001C 0100001A BNE ??x_zstatus_1 482 { 483 xstatuse(); \ 00000020 ........ BL xstatuse 484 #ifdef NEWSGOLD 485 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ 486 { 487 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); 488 tracktimer=0; 489 } 490 tracktimer++; 491 #endif 492 GBS_StartTimerProc(&mytmr4, 216, x_zstatus); \ 00000024 050000EA B ??x_zstatus_2 493 } 494 else 495 { 496 if(!Pause_Time) \ ??x_zstatus_1: \ 00000028 28009FE5 LDR R0,??x_zstatus_0+0x4 ;; Pause_Time \ 0000002C 000090E5 LDR R0,[R0, #+0] \ 00000030 000050E3 CMP R0,#+0 497 { 498 xstatus_old=0; \ 00000034 34018605 STREQ R0,[R6, #+308] 499 minimum_xstatus=0; \ 00000038 38018605 STREQ R0,[R6, #+312] 500 maximum=0; \ 0000003C 3C018605 STREQ R0,[R6, #+316] 501 } 502 GBS_StartTimerProc(&mytmr4, 216, x_zstatus); \ ??x_zstatus_2: \ 00000040 0520A0E1 MOV R2,R5 \ 00000044 D810A0E3 MOV R1,#+216 \ 00000048 060084E0 ADD R0,R4,R6 \ 0000004C 4D0000EF SWI +77 503 } 504 } \ 00000050 7080BDE8 POP {R4-R6,PC} ;; return \ ??x_zstatus_0: \ 00000054 ........ DC32 x_zstatus \ 00000058 ........ DC32 Pause_Time 505 506 char hah[128]; 507 \ In segment CODE, align 4, keep-with-next 508 void Draw22(void *canv) 509 { 510 511 if(connect_state==3) \ Draw22: \ 00000000 7C109FE5 LDR R1,??Draw22_0 ;; `?` \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R5,??DataTable41 ;; S_ICONS \ 0000000C BC40A0E3 MOV R4,#+188 \ 00000010 740195E5 LDR R0,[R5, #+372] \ 00000014 604E84E3 ORR R4,R4,#0x600 \ 00000018 030050E3 CMP R0,#+3 \ 0000001C 0700001A BNE ??Draw22_1 512 { 513 sprintf(hah,"Online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); \ 00000020 3C0195E5 LDR R0,[R5, #+316] \ 00000024 01002DE9 PUSH {R0} \ 00000028 383195E5 LDR R3,[R5, #+312] \ 0000002C 342195E5 LDR R2,[R5, #+308] \ 00000030 050084E0 ADD R0,R4,R5 \ 00000034 160000EF SWI +22 \ 00000038 04D08DE2 ADD SP,SP,#+4 \ 0000003C 020000EA B ??Draw22_2 514 } 515 else 516 sprintf(hah,"Offline"); \ ??Draw22_1: \ 00000040 181081E2 ADD R1,R1,#+24 \ 00000044 050084E0 ADD R0,R4,R5 \ 00000048 160000EF SWI +22 517 #ifdef EVILFOX 518 PrintField(date_X2,date_Y2, hah, align, fonto, space); 519 #else 520 PrintField(date_X2,date_Y2, hah, align, fonto, spaco1); \ ??Draw22_2: \ 0000004C ........ LDR R0,??DataTable20 ;; spaco1 \ 00000050 052084E0 ADD R2,R4,R5 \ 00000054 000090E5 LDR R0,[R0, #+0] \ 00000058 01002DE9 PUSH {R0} \ 0000005C ........ LDR R0,??DataTable21 ;; fonto \ 00000060 000090E5 LDR R0,[R0, #+0] \ 00000064 01002DE9 PUSH {R0} \ 00000068 D83095E5 LDR R3,[R5, #+216] \ 0000006C 14009FE5 LDR R0,??Draw22_0+0x4 ;; date_Y2 \ 00000070 001090E5 LDR R1,[R0, #+0] \ 00000074 10009FE5 LDR R0,??Draw22_0+0x8 ;; date_X2 \ 00000078 000090E5 LDR R0,[R0, #+0] \ 0000007C ........ _BLF PrintField,??PrintField??rA 521 #endif 522 } \ 00000080 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??Draw22_0: \ 00000084 ........ DC32 `?` \ 00000088 ........ DC32 date_Y2 \ 0000008C ........ DC32 date_X2 523 524 //-------------------------------------------// 525 526 extern const unsigned int auto_x; 527 extern const unsigned int auto_y; 528 extern const int showAwayIdle; 529 //int automsg=0; 530 \ In segment CODE, align 4, keep-with-next 531 void DrawAutoMSG(void *canv)//Вывод времени на идле 532 { \ DrawAutoMSG: \ 00000000 30402DE9 PUSH {R4,R5,LR} 533 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable41 ;; S_ICONS \ 00000008 240194E5 LDR R0,[R4, #+292] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 3080BD08 POPEQ {R4,R5,PC} \ 00000014 ........ LDR R0,??DataTable19 ;; showAwayIdle \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 3080BD08 POPEQ {R4,R5,PC} 534 { 535 sprintf(hah,"Away from [%s]",away_msg_time_dace); \ 00000024 50109FE5 LDR R1,??DrawAutoMSG_0 ;; `?` \ 00000028 BC50A0E3 MOV R5,#+188 \ 0000002C 605E85E3 ORR R5,R5,#0x600 \ 00000030 600045E2 SUB R0,R5,#+96 \ 00000034 042080E0 ADD R2,R0,R4 \ 00000038 040085E0 ADD R0,R5,R4 \ 0000003C 160000EF SWI +22 536 PrintField(auto_x,auto_y, hah, align, fonto, spaco1); \ 00000040 ........ LDR R0,??DataTable20 ;; spaco1 \ 00000044 042085E0 ADD R2,R5,R4 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 01002DE9 PUSH {R0} \ 00000050 ........ LDR R0,??DataTable21 ;; fonto \ 00000054 000090E5 LDR R0,[R0, #+0] \ 00000058 01002DE9 PUSH {R0} \ 0000005C D83094E5 LDR R3,[R4, #+216] \ 00000060 18009FE5 LDR R0,??DrawAutoMSG_0+0x4 ;; auto_y \ 00000064 001090E5 LDR R1,[R0, #+0] \ 00000068 14009FE5 LDR R0,??DrawAutoMSG_0+0x8 ;; auto_x \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 ........ _BLF PrintField,??PrintField??rA \ 00000074 08D08DE2 ADD SP,SP,#+8 537 } 538 } \ 00000078 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawAutoMSG_0: \ 0000007C ........ DC32 `?` \ 00000080 ........ DC32 auto_y \ 00000084 ........ DC32 auto_x 539 540 541 //-------------------------------Input away msg------------------------------// 542 543 //Вводим сообщение какое хотим \ In segment DATA_Z, align 4, align-sorted 544 int input_awaymsg_id; \ input_awaymsg_id: \ 00000000 DS8 4 545 546 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Input away msg",LGP_NULL}; 547 void UpdateCLheader(void); 548 int inp_away_m=0; \ In segment CODE, align 4, keep-with-next 549 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 550 { \ input_awaymsg_onkey: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0070A0E1 MOV R7,R0 \ 0000000C 0160A0E1 MOV R6,R1 551 WSHDR *ws=AllocWS(64); 552 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON)//0xFFF \ 00000010 ........ LDR R5,??DataTable41 ;; S_ICONS \ 00000014 4000A0E3 MOV R0,#+64 \ 00000018 250100EF SWI +293 \ 0000001C F200D6E1 LDRSH R0,[R6, #+2] \ 00000020 0040A0E3 MOV R4,#+0 \ 00000024 FF10A0E3 MOV R1,#+255 \ 00000028 F01E81E3 ORR R1,R1,#0xF00 \ 0000002C 010050E1 CMP R0,R1 \ 00000030 0E005013 CMPNE R0,#+14 \ 00000034 1E00001A BNE ??input_awaymsg_onkey_0 553 { 554 EDITCONTROL ec; 555 ExtractEditControl(data,2,&ec); \ 00000038 0D20A0E1 MOV R2,SP \ 0000003C 0210A0E3 MOV R1,#+2 \ 00000040 0700A0E1 MOV R0,R7 \ 00000044 690100EF SWI +361 556 ws=ec.pWS; 557 inp_away_msg2=malloc(ec.maxlen); \ 00000048 F801DDE1 LDRSH R0,[SP, #+24] \ 0000004C 28709DE5 LDR R7,[SP, #+40] 558 // ws_2str(ws,inp_away_msg2,ec.maxlen); 559 int i=0; 560 for(i=0;iwsbody[0];i++) \ 00000050 0080A0E3 MOV R8,#+0 \ 00000054 140000EF SWI +20 \ 00000058 200185E5 STR R0,[R5, #+288] \ 0000005C 000097E5 LDR R0,[R7, #+0] \ 00000060 B000D0E1 LDRH R0,[R0, #+0] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0600001A BNE ??input_awaymsg_onkey_1 \ 0000006C 090000EA B ??input_awaymsg_onkey_2 561 *(inp_away_msg2+i)=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_3: \ 00000070 880080E0 ADD R0,R0,R8, LSL #+1 \ 00000074 B200D0E1 LDRH R0,[R0, #+2] \ 00000078 ........ _BLF char16to8,??char16to8??rA \ 0000007C 201195E5 LDR R1,[R5, #+288] \ 00000080 0100C8E7 STRB R0,[R8, +R1] \ 00000084 018088E2 ADD R8,R8,#+1 \ ??input_awaymsg_onkey_1: \ 00000088 000097E5 LDR R0,[R7, #+0] \ 0000008C B010D0E1 LDRH R1,[R0, #+0] \ 00000090 010058E1 CMP R8,R1 \ 00000094 F5FFFFBA BLT ??input_awaymsg_onkey_3 562 *(inp_away_msg2+i++)=0; \ ??input_awaymsg_onkey_2: \ 00000098 200195E5 LDR R0,[R5, #+288] \ 0000009C 0040C8E7 STRB R4,[R8, +R0] 563 #ifdef kluchnik 564 char *s; 565 ExtractEditControl(data,4,&ec); 566 ws=ec.pWS; 567 s=malloc(ec.maxlen); 568 for(i=0;iwsbody[0];i++) 569 *(s+i)=char16to8(ws->wsbody[i+1]); 570 *(s+i++)=0; 571 strcat(inp_away_msg2,s); 572 #endif 573 inp_away_m=1; \ 000000A0 0100A0E3 MOV R0,#+1 \ 000000A4 400185E5 STR R0,[R5, #+320] 574 575 UpdateCLheader(); \ 000000A8 ........ BL UpdateCLheader 576 // GeneralFunc_flag1(input_awaymsg_id,1); 577 GeneralFuncF1(1); \ 000000AC 0100A0E3 MOV R0,#+1 \ 000000B0 3B0100EF SWI +315 578 } 579 580 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 000000B4 F200D6E1 LDRSH R0,[R6, #+2] \ 000000B8 010050E3 CMP R0,#+1 \ 000000BC 0C005013 CMPNE R0,#+12 \ 000000C0 0200001A BNE ??input_awaymsg_onkey_4 581 { 582 msg_away_timer=0; \ 000000C4 1C4185E5 STR R4,[R5, #+284] 583 away_m=0; \ 000000C8 244185E5 STR R4,[R5, #+292] 584 // automsg=0; 585 UpdateCLheader(); \ 000000CC ........ BL UpdateCLheader 586 } 587 return(0); \ ??input_awaymsg_onkey_4: \ 000000D0 0000A0E3 MOV R0,#+0 \ 000000D4 2CD08DE2 ADD SP,SP,#+44 \ 000000D8 F081BDE8 POP {R4-R8,PC} ;; return 588 } 589 \ In segment CODE, align 4, keep-with-next 590 void input_awaymsg_ghook(GUI *gui, int cmd) 591 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 592 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 593 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 594 { 595 SetSoftKey(gui,&sk,SET_SOFT_KEY_N); \ 0000000C 2C109FE5 LDR R1,??input_awaymsg_ghook_1 ;; ??sk \ 00000010 0120A0E3 MOV R2,#+1 \ 00000014 680100EF SWI +360 \ 00000018 0080BDE8 POP {PC} 596 } 597 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 598 { 599 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 600 } 601 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 602 { 603 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 604 } 605 if(cmd==0x03){} 606 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 607 \ In segment CODE, align 4, keep-with-next 608 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 609 610 SOFTKEY_DESC input_awaymsg_sk[]= 611 { 612 {0x0018,0x0000,(int)"Лев"}, 613 {0x0001,0x0000,(int)"Прав"}, 614 {0x003D,0x0000,(int)LGP_DOIT_PIC} 615 }; 616 617 SOFTKEYSTAB input_awaymsg_skt= 618 { 619 input_awaymsg_sk,0 620 }; 621 622 const INPUTDIA_DESC input_awaymsg_desc= 623 { 624 1, 625 input_awaymsg_onkey, 626 input_awaymsg_ghook, 627 (void *)input_awaymsg_locret, 628 0, 629 &input_awaymsg_skt, 630 {0,NULL,NULL,NULL}, 631 FONT_SMALL, 632 100, 633 101, 634 0, 635 0x00000000, 636 0x40000000 637 }; 638 \ In segment CODE, align 4, keep-with-next 639 void InputAwayMsg() 640 { \ InputAwayMsg: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 641 WSHDR *wss=AllocWS(256); 642 void *ma=malloc_adr(); 643 void *eq=AllocEQueue(ma, mfree_adr()); 644 EDITCONTROL ec; 645 PrepareEditControl(&ec); 646 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 3C519FE5 LDR R5,??InputAwayMsg_0+0x4 ;; input_awaymsg_desc \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 148000EF SWI +32788 \ 0000001C 0070A0E1 MOV R7,R0 \ 00000020 158000EF SWI +32789 \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0700A0E1 MOV R0,R7 \ 0000002C 630100EF SWI +355 \ 00000030 0040A0E1 MOV R4,R0 \ 00000034 0D00A0E1 MOV R0,SP \ 00000038 640100EF SWI +356 \ 0000003C 4C2085E2 ADD R2,R5,#+76 \ 00000040 3F1F8FE2 ADR R1,??InputAwayMsg_0 ;; "%t" \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 240100EF SWI +292 647 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); \ 0000004C 2000A0E3 MOV R0,#+32 \ 00000050 01002DE9 PUSH {R0} \ 00000054 0630A0E1 MOV R3,R6 \ 00000058 0020A0E3 MOV R2,#+0 \ 0000005C 0110A0E3 MOV R1,#+1 \ 00000060 04008DE2 ADD R0,SP,#+4 \ 00000064 650100EF SWI +357 648 AddEditControlToEditQend(eq,&ec,ma); \ 00000068 0720A0E1 MOV R2,R7 \ 0000006C 04108DE2 ADD R1,SP,#+4 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 660100EF SWI +358 649 650 PrepareEditControl(&ec); \ 00000078 04008DE2 ADD R0,SP,#+4 \ 0000007C 640100EF SWI +356 651 CutWSTR(wss,0); \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 0600A0E1 MOV R0,R6 \ 00000088 260100EF SWI +294 652 ascii2ws(wss,away_msg2); \ 0000008C ........ LDR R1,??DataTable23 ;; away_msg2 \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ _BLF ascii2ws,??ascii2ws??rA 653 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 00000098 FF00A0E3 MOV R0,#+255 \ 0000009C 01002DE9 PUSH {R0} \ 000000A0 0630A0E1 MOV R3,R6 \ 000000A4 4020A0E3 MOV R2,#+64 \ 000000A8 0310A0E3 MOV R1,#+3 \ 000000AC 08008DE2 ADD R0,SP,#+8 \ 000000B0 650100EF SWI +357 654 AddEditControlToEditQend(eq,&ec,ma); \ 000000B4 0720A0E1 MOV R2,R7 \ 000000B8 08108DE2 ADD R1,SP,#+8 \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 660100EF SWI +358 655 #ifdef kluchnik 656 PrepareEditControl(&ec); 657 wsprintf(wss,"%t","Сообщение 2:\n"); 658 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 659 AddEditControlToEditQend(eq,&ec,ma); 660 661 ascii2ws(wss,"когда смогу отвечу:)"); 662 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 663 AddEditControlToEditQend(eq,&ec,ma); 664 #endif 665 patch_header(&input_awaymsg_hdr); \ 000000C4 0060A0E3 MOV R6,#+0 \ 000000C8 386085E5 STR R6,[R5, #+56] \ 000000CC 888100EF SWI +33160 \ 000000D0 010040E2 SUB R0,R0,#+1 \ 000000D4 BC03C5E1 STRH R0,[R5, #+60] \ 000000D8 8A8100EF SWI +33162 \ 000000DC 010040E2 SUB R0,R0,#+1 \ 000000E0 BE03C5E1 STRH R0,[R5, #+62] 666 patch_input(&input_awaymsg_desc); \ 000000E4 B861C5E1 STRH R6,[R5, #+24] \ 000000E8 8A8100EF SWI +33162 \ 000000EC 010080E2 ADD R0,R0,#+1 \ 000000F0 BA01C5E1 STRH R0,[R5, #+26] \ 000000F4 888100EF SWI +33160 \ 000000F8 010040E2 SUB R0,R0,#+1 \ 000000FC BC01C5E1 STRH R0,[R5, #+28] \ 00000100 898100EF SWI +33161 \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 8B8100EF SWI +33163 \ 0000010C 000046E0 SUB R0,R6,R0 \ 00000110 010040E2 SUB R0,R0,#+1 \ 00000114 BE01C5E1 STRH R0,[R5, #+30] 667 668 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 00000118 0000A0E3 MOV R0,#+0 \ 0000011C 01002DE9 PUSH {R0} \ 00000120 0130A0E3 MOV R3,#+1 \ 00000124 0420A0E1 MOV R2,R4 \ 00000128 381085E2 ADD R1,R5,#+56 \ 0000012C 0500A0E1 MOV R0,R5 \ 00000130 670100EF SWI +359 \ 00000134 10109FE5 LDR R1,??InputAwayMsg_0+0x8 ;; input_awaymsg_id \ 00000138 000081E5 STR R0,[R1, #+0] 669 } \ 0000013C 38D08DE2 ADD SP,SP,#+56 \ 00000140 F080BDE8 POP {R4-R7,PC} ;; return \ ??InputAwayMsg_0: \ 00000144 25740000 DC8 "%t",+0 \ 00000148 ........ DC32 input_awaymsg_desc \ 0000014C ........ DC32 input_awaymsg_id 670 671 672 //////////////////////////uptime////////////////////////// 673 #ifdef ELKA 674 void SLI_On() 675 { 676 // SLI_STATUS=0; 677 if (Is_SLI_On) 678 SLI_SetState(1); 679 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_Off); 680 } 681 682 void SLI_Off() 683 { 684 SLI_SetState(2); 685 if (total_unread) 686 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 687 else 688 // SLI_STATUS=1; 689 SLI_SetState(0); 690 } 691 692 void SLI_check() 693 { 694 if (total_unread) 695 SLI_On(); 696 } 697 698 void SLI_Timer() 699 { 700 GBS_StartTimerProc(&mytmr, 262, SLI_check); //262*SLI_time 701 } 702 #endif 703 \ In segment CODE, align 4, keep-with-next 704 void setup_ICONS(void) 705 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 706 int i=0; \ 00000004 ........ LDR R5,??DataTable25 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 707 do 708 { 709 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 0000000C 040195E7 LDR R0,[R5, +R4, LSL #+2] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0500001A BNE ??setup_ICONS_1 \ 00000018 20009FE5 LDR R0,??setup_ICONS_2 ;; icons_names \ 0000001C 5C10A0E3 MOV R1,#+92 \ 00000020 042190E7 LDR R2,[R0, +R4, LSL #+2] \ 00000024 18009FE5 LDR R0,??setup_ICONS_2+0x4 ;; ICON_PATH \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 040185E7 STR R0,[R5, +R4, LSL #+2] 710 i++; \ ??setup_ICONS_1: \ 00000030 014084E2 ADD R4,R4,#+1 711 } 712 while(i>2,stop_vibra); \ 00000048 3610A0E3 MOV R1,#+54 \ 0000004C 000000EA B ??start_vibra_2 978 else 979 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000050 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 4D0000EF SWI +77 980 } 981 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 stop_vibra 982 \ In segment CODE, align 4, keep-with-next 983 void stop_vibra(void) 984 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 985 extern const int VIBR_TYPE; 986 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 987 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable41 ;; S_ICONS \ 00000010 641190E5 LDR R1,[R0, #+356] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 641180E5 STR R1,[R0, #+356] \ 0000001C 0080BD08 POPEQ {PC} 988 { 989 if(VIBR_TYPE) \ 00000020 ........ LDR R1,??DataTable42 ;; VIBR_TYPE \ 00000024 28209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000028 001091E5 LDR R1,[R1, #+0] \ 0000002C 4C30A0E3 MOV R3,#+76 \ 00000030 803E83E3 ORR R3,R3,#0x800 \ 00000034 000051E3 CMP R1,#+0 \ 00000038 0100000A BEQ ??stop_vibra_1 990 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 0000003C 0610A0E3 MOV R1,#+6 \ 00000040 000000EA B ??stop_vibra_2 991 else 992 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000044 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 00000048 000083E0 ADD R0,R3,R0 \ 0000004C 4D0000EF SWI +77 993 } 994 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 995 \ In segment CODE, align 4, keep-with-next 996 void start_vibra2(void) 997 { 998 extern const int VIBR_TYPE; 999 void stop_vibra2(void); 1000 // if ((Is_Vibra_Enabled)&&(!IsCalling())) 1001 // SLI_On(); 1002 // else 1003 // SLI_Off(); 1004 extern const unsigned int vibraPower; 1005 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable38 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1006 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable42 ;; VIBR_TYPE \ 00000014 ........ LDR R3,??DataTable41 ;; S_ICONS \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 1C209FE5 LDR R2,??start_vibra2_0 ;; stop_vibra2 \ 00000020 4C00A0E3 MOV R0,#+76 \ 00000024 800E80E3 ORR R0,R0,#0x800 \ 00000028 000051E3 CMP R1,#+0 1007 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 0000002C 3610A013 MOVNE R1,#+54 1008 else 1009 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000030 6C10A003 MOVEQ R1,#+108 \ 00000034 030080E0 ADD R0,R0,R3 \ 00000038 4D0000EF SWI +77 1010 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000040 ........ DC32 stop_vibra2 1011 \ In segment CODE, align 4, keep-with-next 1012 void stop_vibra2(void) 1013 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1014 extern const int VIBR_TYPE; 1015 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1016 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable41 ;; S_ICONS \ 00000010 641190E5 LDR R1,[R0, #+356] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 641180E5 STR R1,[R0, #+356] \ 0000001C 0080BD08 POPEQ {PC} 1017 { 1018 if(VIBR_TYPE) \ 00000020 ........ LDR R1,??DataTable42 ;; VIBR_TYPE \ 00000024 28209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000028 001091E5 LDR R1,[R1, #+0] \ 0000002C 4C30A0E3 MOV R3,#+76 \ 00000030 803E83E3 ORR R3,R3,#0x800 \ 00000034 000051E3 CMP R1,#+0 \ 00000038 0100000A BEQ ??stop_vibra2_1 1019 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 0000003C 0610A0E3 MOV R1,#+6 \ 00000040 000000EA B ??stop_vibra2_2 1020 else 1021 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000044 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 00000048 000083E0 ADD R0,R3,R0 \ 0000004C 4D0000EF SWI +77 1022 } 1023 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ DC32 start_vibra2 1024 \ In segment CODE, align 4, keep-with-next 1025 void ChangeVibra(void) 1026 { 1027 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable55 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 4C1190E5 LDR R1,[R0, #+332] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeTemplates \ 00000014 ........ LDR R1,??DataTable46 ;; TEMPLATES_PATH \ 00000018 2C008DE2 ADD R0,SP,#+44 \ 0000001C 1A0000EF SWI +26 \ 00000020 2C008DE2 ADD R0,SP,#+44 \ 00000024 1B0000EF SWI +27 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 2C008DE2 ADD R0,SP,#+44 \ 00000030 005087E0 ADD R5,R7,R0 \ 00000034 0420A0E1 MOV R2,R4 \ 00000038 0610A0E1 MOV R1,R6 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 160000EF SWI +22 1071 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; \ 00000044 0040E0E3 MVN R4,#+0 \ 00000048 0D20A0E1 MOV R2,SP \ 0000004C 04108DE2 ADD R1,SP,#+4 \ 00000050 2C008DE2 ADD R0,SP,#+44 \ 00000054 840000EF SWI +132 \ 00000058 040050E1 CMP R0,R4 \ 0000005C 0A00000A BEQ ??LoadTemplates_1 1072 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1073 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) \ 0000006C 0D30A0E1 MOV R3,SP \ 00000070 8020A0E3 MOV R2,#+128 \ 00000074 801CA0E3 MOV R1,#+32768 \ 00000078 2C008DE2 ADD R0,SP,#+44 \ 0000007C 0A0000EF SWI +10 \ 00000080 0080A0E1 MOV R8,R0 \ 00000084 040058E1 CMP R8,R4 \ 00000088 1400001A BNE ??LoadTemplates_2 1074 { 1075 L1: 1076 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1077 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 00000098 0D20A0E1 MOV R2,SP \ 0000009C 04108DE2 ADD R1,SP,#+4 \ 000000A0 2C008DE2 ADD R0,SP,#+44 \ 000000A4 840000EF SWI +132 \ 000000A8 040050E1 CMP R0,R4 \ 000000AC 0200001A BNE ??LoadTemplates_3 \ ??LoadTemplates_4: \ 000000B0 0000A0E3 MOV R0,#+0 \ ??LoadTemplates_5: \ 000000B4 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000B8 F087BDE8 POP {R4-R10,PC} ;; return 1078 if ((fsize=stat.size)<=0) return 0; \ ??LoadTemplates_3: \ 000000BC 08709DE5 LDR R7,[SP, #+8] \ 000000C0 010057E3 CMP R7,#+1 \ 000000C4 F9FFFFBA BLT ??LoadTemplates_4 1079 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 000000C8 0D30A0E1 MOV R3,SP \ 000000CC 8020A0E3 MOV R2,#+128 \ 000000D0 801CA0E3 MOV R1,#+32768 \ 000000D4 2C008DE2 ADD R0,SP,#+44 \ 000000D8 0A0000EF SWI +10 \ 000000DC 0080A0E1 MOV R8,R0 1080 } 1081 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1082 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable55 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 680184E5 STR R0,[R4, #+360] \ 000000F8 0060A0E1 MOV R6,R0 1083 p[fread(f,p,fsize,&ul)]=0; \ 000000FC 0050A0E3 MOV R5,#+0 \ 00000100 0D30A0E1 MOV R3,SP \ 00000104 0720A0E1 MOV R2,R7 \ 00000108 0610A0E1 MOV R1,R6 \ 0000010C 0800A0E1 MOV R0,R8 \ 00000110 0B0000EF SWI +11 \ 00000114 0650C0E7 STRB R5,[R0, +R6] 1084 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1085 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1086 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1087 for(;;) 1088 { 1089 c=*p; 1090 if (c<32) 1091 { 1092 if (pp&&(pp!=p)) 1093 { 1094 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1095 templates_lines[i++]=pp; 1096 } 1097 pp=NULL; 1098 if (!c) break; 1099 *p=0; 1100 } 1101 else 1102 { 1103 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1104 } 1105 p++; \ ??LoadTemplates_8: \ 00000138 016086E2 ADD R6,R6,#+1 \ ??LoadTemplates_6: \ 0000013C 0090D6E5 LDRB R9,[R6, #+0] \ 00000140 200059E3 CMP R9,#+32 \ 00000144 F9FFFFAA BGE ??LoadTemplates_7 \ 00000148 000058E3 CMP R8,#+0 \ 0000014C 06005811 CMPNE R8,R6 \ 00000150 0600000A BEQ ??LoadTemplates_9 \ 00000154 6C0194E5 LDR R0,[R4, #+364] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 6C0184E5 STR R0,[R4, #+364] \ 00000168 078180E7 STR R8,[R0, +R7, LSL #+2] \ 0000016C 0A70A0E1 MOV R7,R10 \ ??LoadTemplates_9: \ 00000170 0080A0E3 MOV R8,#+0 \ 00000174 000059E3 CMP R9,#+0 1106 } 1107 return i; \ 00000178 0700A001 MOVEQ R0,R7 \ 0000017C CCFFFF0A BEQ ??LoadTemplates_5 \ 00000180 0050C6E5 STRB R5,[R6, #+0] \ 00000184 EBFFFFEA B ??LoadTemplates_8 \ ??LoadTemplates_0: \ 00000188 ........ DC32 `?` 1108 } 1109 1110 1111 //=================================================================== 1112 1113 typedef struct 1114 { 1115 CSM_RAM csm; 1116 int gui_id; 1117 }MAIN_CSM; 1118 1119 typedef struct 1120 { 1121 GUI gui; 1122 WSHDR *ws1; 1123 WSHDR *ws2; 1124 int i1; 1125 }MAIN_GUI; 1126 1127 1128 1129 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1130 \ In segment DATA_Z, align 4, align-sorted 1131 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 1132 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 1133 1134 int connect_state=0; 1135 1136 int sock=-1; 1137 1138 volatile unsigned long TOTALRECEIVED; 1139 volatile unsigned long TOTALSENDED; 1140 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1141 volatile unsigned long ALLTOTALSENDED; 1142 1143 volatile int sendq_l=0; //Длинна очереди для send 1144 volatile void *sendq_p=NULL; //указатель очереди 1145 1146 volatile int is_gprs_online=1; 1147 1148 GBSTMR reconnect_tmr; 1149 1150 extern void kill_data(void *p,void (*func_p)(void *)); 1151 \ In segment CODE, align 4, keep-with-next 1152 void ElfKiller(void) 1153 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1154 // if(SLI_TYPE) 1155 // GBS_StopTimer(&mytmr); 1156 // if(Is_Double_Vibra_On) 1157 // GBS_StopTimer(&mytmr2); 1158 // GBS_StopTimer(&mytmr3); 1159 // GBS_StopTimer(&mytmr4); 1160 // DoChangeWall2(); 1161 FontPathFree(); \ 00000004 ........ _BLF FontPathFree,??FontPathFree??rA 1162 extern void *ELF_BEGIN; 1163 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000008 158000EF SWI +32789 \ 0000000C 0010A0E1 MOV R1,R0 \ 00000010 04009FE5 LDR R0,??ElfKiller_0 ;; ELF_BEGIN \ 00000014 0040BDE8 POP {LR} ;; Pop \ 00000018 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 0000001C ........ DC32 ELF_BEGIN 1164 } 1165 1166 int total_unread; //2058 - tam tak /windes 1167 1168 /* 1169 void ElfKiller2(void) 1170 { 1171 extern void *ELF_BEGIN; 1172 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); 1173 } 1174 */ 1175 //=============================================================================================== 1176 /*#pragma inline 1177 void patch_rect(RECT*rc,int x,int y, int x2, int y2) 1178 { 1179 rc->x=x; 1180 rc->y=y; 1181 rc->x2=x2; 1182 rc->y2=y2; 1183 } 1184 1185 #pragma inline 1186 void patch_header(const HEADER_DESC* head) 1187 { 1188 ((HEADER_DESC*)head)->rc.x=0; 1189 ((HEADER_DESC*)head)->rc.y=YDISP; 1190 ((HEADER_DESC*)head)->rc.x2=ScreenW()-1; 1191 ((HEADER_DESC*)head)->rc.y2=HeaderH()+YDISP-1; 1192 } 1193 #pragma inline 1194 void patch_input(const INPUTDIA_DESC* inp) 1195 { 1196 ((INPUTDIA_DESC*)inp)->rc.x=0; 1197 ((INPUTDIA_DESC*)inp)->rc.y=HeaderH()+1+YDISP; 1198 ((INPUTDIA_DESC*)inp)->rc.x2=ScreenW()-1; 1199 ((INPUTDIA_DESC*)inp)->rc.y2=ScreenH()-SoftkeyH()-1; 1200 }*/ 1201 //=============================================================================================== 1202 1203 volatile CLIST *cltop; 1204 1205 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1206 1207 volatile int contactlist_menu_id; 1208 1209 GBSTMR tmr_active; 1210 1211 volatile int edchat_id; 1212 1213 //Применяется для добавления сообщений 1214 //CLIST *edcontact; 1215 //void *edgui_data; 1216 1217 static int prev_clmenu_itemcount; 1218 1219 char clm_hdr_text[48]; 1220 static const char def_clm_hdr_text[] = LG_CLTITLE; 1221 static const char key_clm_hdr_text[] = LG_CLT9INP; 1222 1223 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 1224 static const int menusoftkeys[] = {0,1,2}; 1225 static const SOFTKEY_DESC menu_sk[] = 1226 { 1227 {0x0018, 0x0000, (int)LG_SELECT}, 1228 {0x0001, 0x0000, (int)LG_CLOSE}, 1229 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1230 }; 1231 1232 char clmenu_sk_r[16]; 1233 static const char def_clmenu_sk_r[] = LG_CLOSE; 1234 static const char key_clmenu_sk_r[] = LG_CLEAR; 1235 1236 static const SOFTKEY_DESC clmenu_sk[]= 1237 { 1238 {0x0018, 0x0000, (int)LG_OPTIONS}, 1239 {0x0001, 0x0000, (int)clmenu_sk_r}, 1240 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1241 }; 1242 1243 const SOFTKEYSTAB menu_skt = 1244 { 1245 menu_sk, 0 1246 }; 1247 1248 static const SOFTKEYSTAB clmenu_skt = 1249 { 1250 clmenu_sk, 0 1251 }; 1252 1253 void contactlist_menu_ghook(void *data, int cmd); 1254 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 1255 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 1256 1257 #ifdef USE_MLMENU 1258 static const ML_MENU_DESC contactlist_menu= 1259 { 1260 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1261 menusoftkeys, 1262 &clmenu_skt, 1263 0x11, //+0x400 1264 contactlist_menu_iconhndl, 1265 NULL, //Items 1266 NULL, //Procs 1267 0, //n 1268 1 //Добавочных строк 1269 }; 1270 #else 1271 static const MENU_DESC contactlist_menu= 1272 { 1273 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1274 menusoftkeys, 1275 &clmenu_skt, 1276 0x11, //+0x400 1277 contactlist_menu_iconhndl, 1278 NULL, //Items 1279 NULL, //Procs 1280 0 //n 1281 }; 1282 #endif 1283 1284 //GBSTMR tmr_ping; 1285 int tenseconds_to_ping; 1286 \ In segment CODE, align 4, keep-with-next 1287 LOGQ *NewLOGQ(const char *s) 1288 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1289 LOGQ *p=malloc(sizeof(LOGQ)+1+strlen(s)); \ 00000008 1B0000EF SWI +27 \ 0000000C 610080E2 ADD R0,R0,#+97 \ 00000010 140000EF SWI +20 \ 00000014 0050A0E1 MOV R5,R0 1290 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1291 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1292 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1293 } 1294 \ In segment CODE, align 4, keep-with-next 1295 LOGQ *LastLOGQ(LOGQ **pp) 1296 { 1297 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1298 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1299 { 1300 while(q->next) q=q->next; \ ??LastLOGQ_1: \ 00000010 0100A0E1 MOV R0,R1 \ ??LastLOGQ_0: \ 00000014 001090E5 LDR R1,[R0, #+0] \ 00000018 000051E3 CMP R1,#+0 \ 0000001C FBFFFF1A BNE ??LastLOGQ_1 1301 } 1302 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1303 } 1304 1305 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1306 void FreeLOGQ(LOGQ **pp) 1307 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1308 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1309 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1310 while(p) 1311 { 1312 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1313 mfree(p); \ 00000020 150000EF SWI +21 1314 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1315 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1316 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1317 1318 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1319 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1320 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1321 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1322 LOGQ *qp; 1323 while(qp=q->next) 1324 { 1325 if (qp==p) 1326 { 1327 q->next=p->next; 1328 break; 1329 } 1330 q=qp; \ ??RemoveLOGQ_1: \ 00000008 0200A0E1 MOV R0,R2 \ ??RemoveLOGQ_0: \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0300000A BEQ ??RemoveLOGQ_2 \ 00000018 010052E1 CMP R2,R1 \ 0000001C F9FFFF1A BNE ??RemoveLOGQ_1 \ 00000020 002091E5 LDR R2,[R1, #+0] \ 00000024 002080E5 STR R2,[R0, #+0] 1331 } 1332 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1333 } \ 00000030 0080BDE8 POP {PC} ;; return 1334 1335 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1336 int AddLOGQ(LOGQ **queue, LOGQ *p) 1337 { 1338 LOGQ *q=(LOGQ *)queue; 1339 LOGQ *qp; 1340 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1341 while(qp=q->next) {q=qp;i++;} \ ??AddLOGQ_1: \ 00000008 0300A0E1 MOV R0,R3 \ ??AddLOGQ_0: \ 0000000C 003090E5 LDR R3,[R0, #+0] \ 00000010 012082E2 ADD R2,R2,#+1 \ 00000014 000053E3 CMP R3,#+0 \ 00000018 FAFFFF1A BNE ??AddLOGQ_1 1342 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1343 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1344 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1345 } 1346 \ In segment CODE, align 4, keep-with-next 1347 char *GetLastXTextLOGQ(CLIST *t) 1348 { 1349 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 741090E5 LDR R1,[R0, #+116] 1350 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1351 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1352 while(p->next) 1353 { 1354 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1355 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1356 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1357 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1358 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1359 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1360 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1361 } 1362 \ In segment CODE, align 4, keep-with-next 1363 int GetIconIndex(CLIST *t) 1364 { 1365 unsigned short s; 1366 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1367 { 1368 s=t->state; 1369 if (t->isgroup) return(IS_GROUP); \ 00000008 082090E5 LDR R2,[R0, #+8] \ 0000000C B415D0E1 LDRH R1,[R0, #+84] \ 00000010 000052E3 CMP R2,#+0 \ 00000014 0F00A013 MOVNE R0,#+15 \ 00000018 1EFF2F11 BXNE LR 1370 if (t->isunread) \ 0000001C 640090E5 LDR R0,[R0, #+100] \ 00000020 000050E3 CMP R0,#+0 1371 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1372 else 1373 { 1374 if (s==0xFFFF) return(IS_OFFLINE); \ 0000002C FF20A0E3 MOV R2,#+255 \ 00000030 FF2C82E3 ORR R2,R2,#0xFF00 \ 00000034 020051E1 CMP R1,R2 \ 00000038 1EFF2F01 BXEQ LR 1375 if ((s&0xF000)==0x2000) return (IS_LUNCH); \ 0000003C F02C01E2 AND R2,R1,#0xF000 \ 00000040 800D52E3 CMP R2,#+8192 \ 00000044 0900A003 MOVEQ R0,#+9 \ 00000048 1EFF2F01 BXEQ LR 1376 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1377 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1378 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1379 if ((s&0xF000)==0x6000) return (IS_WORK); \ 00000070 F00C01E2 AND R0,R1,#0xF000 \ 00000074 600C50E3 CMP R0,#+24576 \ 00000078 0A00A003 MOVEQ R0,#+10 \ 0000007C 1EFF2F01 BXEQ LR 1380 if (s & 0x0020) return(IS_FFC); \ 00000080 200011E3 TST R1,#0x20 \ 00000084 0100000A BEQ ??GetIconIndex_1 \ ??GetIconIndex_2: \ 00000088 0C00A0E3 MOV R0,#+12 \ 0000008C 1EFF2FE1 BX LR 1381 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1382 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1383 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1384 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1385 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1386 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1387 } 1388 } 1389 else 1390 { 1391 return(IS_UNKNOWN); 1392 } 1393 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1394 } 1395 \ In segment CODE, align 4, keep-with-next 1396 LOGQ *FindContactLOGQByAck(TPKT *p) 1397 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1398 CLIST *t; 1399 LockSched(); \ 00000008 460100EF SWI +326 1400 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1401 UnlockSched(); \ 00000018 470100EF SWI +327 1402 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1403 LOGQ *q; 1404 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1405 LockSched(); \ 0000002C 460100EF SWI +326 1406 q=t->log; \ 00000030 745095E5 LDR R5,[R5, #+116] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1407 while(q) 1408 { 1409 if (q->ID==id) break; 1410 q=q->next; \ ??FindContactLOGQByAck_1: \ 00000038 005095E5 LDR R5,[R5, #+0] \ ??FindContactLOGQByAck_0: \ 0000003C 000055E3 CMP R5,#+0 \ 00000040 08009515 LDRNE R0,[R5, #+8] \ 00000044 04005011 CMPNE R0,R4 \ 00000048 FAFFFF1A BNE ??FindContactLOGQByAck_1 1411 } 1412 UnlockSched(); \ 0000004C 470100EF SWI +327 1413 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1414 } 1415 1416 extern const int TIME_OR_MSG; 1417 char ContactT9Key[32]; 1418 int kopa_online; 1419 int kopa_kontaktu; 1420 \ In segment CODE, align 4, keep-with-next 1421 void UpdateCLheader(void) 1422 { \ UpdateCLheader: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 1423 if (strlen(ContactT9Key)) \ 00000004 94619FE5 LDR R6,??UpdateCLheader_0+0x14 ;; key_clmenu_sk_r \ 00000008 ........ LDR R7,??DataTable55 ;; S_ICONS \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 AC40A0E3 MOV R4,#+172 \ 00000014 804E84E3 ORR R4,R4,#0x800 \ 00000018 305044E2 SUB R5,R4,#+48 \ 0000001C C98FA0E3 MOV R8,#+804 \ 00000020 070088E0 ADD R0,R8,R7 \ 00000024 1B0000EF SWI +27 \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 0900000A BEQ ??UpdateCLheader_1 1424 { 1425 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000030 401086E2 ADD R1,R6,#+64 \ 00000034 070085E0 ADD R0,R5,R7 \ 00000038 1A0000EF SWI +26 1426 strcat(clm_hdr_text,ContactT9Key); \ 0000003C 071088E0 ADD R1,R8,R7 \ 00000040 070085E0 ADD R0,R5,R7 \ 00000044 170000EF SWI +23 1427 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000048 0610A0E1 MOV R1,R6 \ 0000004C 070084E0 ADD R0,R4,R7 \ 00000050 1A0000EF SWI +26 \ 00000054 F381BDE8 POP {R0,R1,R4-R8,PC} 1428 } 1429 else 1430 { 1431 switch(TIME_OR_MSG) \ ??UpdateCLheader_1: \ 00000058 ........ LDR R8,??DataTable49 ;; TIME_OR_MSG \ 0000005C B82197E5 LDR R2,[R7, #+440] \ 00000060 008098E5 LDR R8,[R8, #+0] \ 00000064 B40197E5 LDR R0,[R7, #+436] \ 00000068 983197E5 LDR R3,[R7, #+408] \ 0000006C 001197E5 LDR R1,[R7, #+256] \ 00000070 000058E3 CMP R8,#+0 \ 00000074 0600000A BEQ ??UpdateCLheader_2 \ 00000078 018058E2 SUBS R8,R8,#+1 \ 0000007C 1000000A BEQ ??UpdateCLheader_3 \ 00000080 018058E2 SUBS R8,R8,#+1 \ 00000084 1200000A BEQ ??UpdateCLheader_4 \ 00000088 018058E2 SUBS R8,R8,#+1 \ 0000008C 1500000A BEQ ??UpdateCLheader_5 \ 00000090 390000EA B ??UpdateCLheader_6 1432 { 1433 case 0: 1434 { 1435 TTime the; 1436 GetDateTime(NULL,&the); \ ??UpdateCLheader_2: \ 00000094 0D10A0E1 MOV R1,SP \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C B40000EF SWI +180 1437 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ 000000A0 0100DDE5 LDRB R0,[SP, #+1] \ 000000A4 342086E2 ADD R2,R6,#+52 \ 000000A8 041086E2 ADD R1,R6,#+4 \ 000000AC 01002DE9 PUSH {R0} \ 000000B0 0430DDE5 LDRB R3,[SP, #+4] \ ??UpdateCLheader_7: \ 000000B4 070085E0 ADD R0,R5,R7 \ 000000B8 160000EF SWI +22 \ 000000BC 04D08DE2 ADD SP,SP,#+4 \ 000000C0 2D0000EA B ??UpdateCLheader_6 1438 } 1439 break; 1440 case 1: 1441 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_3: \ 000000C4 02002DE9 PUSH {R1} \ 000000C8 342086E2 ADD R2,R6,#+52 \ 000000CC 141086E2 ADD R1,R6,#+20 \ 000000D0 F7FFFFEA B ??UpdateCLheader_7 1442 break; 1443 case 2: 1444 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); \ ??UpdateCLheader_4: \ 000000D4 01002DE9 PUSH {R0} \ 000000D8 0230A0E1 MOV R3,R2 \ 000000DC 342086E2 ADD R2,R6,#+52 \ 000000E0 141086E2 ADD R1,R6,#+20 \ 000000E4 F2FFFFEA B ??UpdateCLheader_7 1445 break; 1446 case 3: 1447 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] ",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ ??UpdateCLheader_5: \ 000000E8 02002DE9 PUSH {R1} \ 000000EC 08002DE9 PUSH {R3} \ 000000F0 0030A0E1 MOV R3,R0 \ 000000F4 201086E2 ADD R1,R6,#+32 \ 000000F8 070085E0 ADD R0,R5,R7 \ 000000FC 160000EF SWI +22 1448 if(away_m) strcat(clm_hdr_text,"[A]"); \ 00000100 240197E5 LDR R0,[R7, #+292] \ 00000104 08D08DE2 ADD SP,SP,#+8 \ 00000108 000050E3 CMP R0,#+0 \ 0000010C 0200000A BEQ ??UpdateCLheader_8 \ 00000110 1D1F8FE2 ADR R1,??UpdateCLheader_0 ;; "[A]" \ 00000114 070085E0 ADD R0,R5,R7 \ 00000118 170000EF SWI +23 1449 if(CurrentPrivateStatus==1) strcat(clm_hdr_text,"[I]"); \ ??UpdateCLheader_8: \ 0000011C 600197E5 LDR R0,[R7, #+352] \ 00000120 010050E3 CMP R0,#+1 \ 00000124 0200001A BNE ??UpdateCLheader_9 \ 00000128 181F8FE2 ADR R1,??UpdateCLheader_0+0x4 ;; "[I]" \ 0000012C 070085E0 ADD R0,R5,R7 \ 00000130 170000EF SWI +23 1450 if(Is_Vibra_Enabled) strcat(clm_hdr_text,"[V]"); \ ??UpdateCLheader_9: \ 00000134 4C0197E5 LDR R0,[R7, #+332] \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 0200000A BEQ ??UpdateCLheader_10 \ 00000140 131F8FE2 ADR R1,??UpdateCLheader_0+0x8 ;; "[V]" \ 00000144 070085E0 ADD R0,R5,R7 \ 00000148 170000EF SWI +23 1451 if(Is_Sounds_Enabled) strcat(clm_hdr_text,"[S]"); \ ??UpdateCLheader_10: \ 0000014C 500197E5 LDR R0,[R7, #+336] \ 00000150 000050E3 CMP R0,#+0 \ 00000154 0200000A BEQ ??UpdateCLheader_11 \ 00000158 0E1F8FE2 ADR R1,??UpdateCLheader_0+0xC ;; "[S]" \ 0000015C 070085E0 ADD R0,R5,R7 \ 00000160 170000EF SWI +23 1452 if(Is_Double_Vibra_On) strcat(clm_hdr_text,"[R]"); \ ??UpdateCLheader_11: \ 00000164 FC0097E5 LDR R0,[R7, #+252] \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 0200000A BEQ ??UpdateCLheader_6 \ 00000170 091F8FE2 ADR R1,??UpdateCLheader_0+0x10 ;; "[R]" \ 00000174 070085E0 ADD R0,R5,R7 \ 00000178 170000EF SWI +23 1453 break; 1454 } 1455 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_6: \ 0000017C 4C1086E2 ADD R1,R6,#+76 \ 00000180 070084E0 ADD R0,R4,R7 \ 00000184 1A0000EF SWI +26 1456 } 1457 } \ 00000188 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return \ ??UpdateCLheader_0: \ 0000018C 5B415D00 DC8 "[A]" \ 00000190 5B495D00 DC8 "[I]" \ 00000194 5B565D00 DC8 "[V]" \ 00000198 5B535D00 DC8 "[S]" \ 0000019C 5B525D00 DC8 "[R]" \ 000001A0 ........ DC32 key_clmenu_sk_r 1458 \ In segment CODE, align 4, keep-with-next 1459 void ClearContactT9Key(void) 1460 { 1461 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 804 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1462 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 804 1463 \ In segment CODE, align 4, keep-with-next 1464 void AddContactT9Key(int chr) 1465 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1466 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable55 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C C90F85E2 ADD R0,R5,#+804 \ 00000010 1B0000EF SWI +27 1467 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 1468 { 1469 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C 2443C035 STRBCC R4,[R0, #+804] 1470 } 1471 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 1472 \ In segment CODE, align 4, keep-with-next 1473 void BackSpaceContactT9(void) 1474 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1475 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable55 ;; S_ICONS \ 00000008 C90F84E2 ADD R0,R4,#+804 \ 0000000C 1B0000EF SWI +27 1476 if (l) \ 00000010 000050E3 CMP R0,#+0 1477 { 1478 l--; 1479 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C 2313C015 STRBNE R1,[R0, #+803] 1480 } 1481 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1482 \ In segment CODE, align 4, keep-with-next 1483 void create_contactlist_menu(void) 1484 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1485 int i; 1486 i=CountContacts(); 1487 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable55 ;; S_ICONS 1488 UpdateCLheader(); 1489 patch_header(&contactlist_menuhdr); \ 00000008 50609FE5 LDR R6,??create_contactlist_menu_0 ;; contactlist_menuhdr \ 0000000C ........ _BLF CountContacts,??CountContacts??rA \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 AC4185E5 STR R4,[R5, #+428] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 000086E5 STR R0,[R6, #+0] \ 00000024 888100EF SWI +33160 \ 00000028 010040E2 SUB R0,R0,#+1 \ 0000002C B400C6E1 STRH R0,[R6, #+4] \ 00000030 8A8100EF SWI +33162 \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 B600C6E1 STRH R0,[R6, #+6] 1490 #ifdef USE_MLMENU 1491 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); \ 0000003C 10002DE9 PUSH {R4} \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 01002DE9 PUSH {R0} \ 00000048 0630A0E1 MOV R3,R6 \ 0000004C 142086E2 ADD R2,R6,#+20 \ 00000050 0010A0E3 MOV R1,#+0 \ 00000054 170200EF SWI +535 \ 00000058 A40185E5 STR R0,[R5, #+420] 1492 #else 1493 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 1494 #endif 1495 } \ 0000005C 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000060 ........ DC32 contactlist_menuhdr 1496 \ In segment CODE, align 4, keep-with-next 1497 void contactlist_menu_ghook(void *data, int cmd) 1498 { \ contactlist_menu_ghook: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 1499 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 1500 if (cmd==9) \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 090054E3 CMP R4,#+9 1501 { 1502 pltop->dyn_pltop=NULL; \ 00000014 08108005 STREQ R1,[R0, #+8] \ 00000018 1080BD08 POPEQ {R4,PC} 1503 } 1504 if (cmd==0x0A) \ 0000001C 0A0054E3 CMP R4,#+10 \ 00000020 1080BD18 POPNE {R4,PC} 1505 { 1506 silenthide=0; \ 00000024 14209FE5 LDR R2,??contactlist_menu_ghook_0 ;; S_ICONS + 324 \ 00000028 001082E5 STR R1,[R2, #+0] 1507 pltop->dyn_pltop=XStatusesImgList; \ 0000002C ........ LDR R1,??DataTable53 ;; XStatusesImgList \ 00000030 001091E5 LDR R1,[R1, #+0] \ 00000034 081080E5 STR R1,[R0, #+8] 1508 DisableIDLETMR(); \ 00000038 7F0100EF SWI +383 1509 } 1510 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??contactlist_menu_ghook_0: \ 00000040 ........ DC32 S_ICONS + 324 1511 \ In segment CODE, align 4, keep-with-next 1512 void RecountMenu(CLIST *req, int needfocus) 1513 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1514 int i; 1515 int j; 1516 void *data; 1517 UpdateCLheader(); 1518 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable55 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 A40196E5 LDR R0,[R6, #+420] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 1519 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 A40196E5 LDR R0,[R6, #+420] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 1520 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 1521 { 1522 j=0; 1523 } 1524 else 1525 { 1526 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 1527 } 1528 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 1529 if (j>=i) j=i-1; 1530 if (j<0) j=0; 1531 if (i!=prev_clmenu_itemcount) \ 00000048 AC1196E5 LDR R1,[R6, #+428] \ 0000004C 000054E1 CMP R4,R0 \ 00000050 014040A2 SUBGE R4,R0,#+1 \ 00000054 000054E3 CMP R4,#+0 \ 00000058 0040A043 MOVMI R4,#+0 \ 0000005C 010050E1 CMP R0,R1 \ 00000060 0300000A BEQ ??RecountMenu_1 1532 { 1533 prev_clmenu_itemcount=i; \ 00000064 AC0186E5 STR R0,[R6, #+428] 1534 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 1535 } 1536 if(needfocus) SetCursorToMenuItem(data,j); //2058 \ ??RecountMenu_1: \ 00000074 000055E3 CMP R5,#+0 \ 00000078 0200000A BEQ ??RecountMenu_2 \ 0000007C 0410A0E1 MOV R1,R4 \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 C40100EF SWI +452 1537 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 A40196E5 LDR R0,[R6, #+420] \ 0000008C 350100EF SWI +309 \ 00000090 000050E3 CMP R0,#+0 \ 00000094 F080BD08 POPEQ {R4-R7,PC} \ 00000098 960100EF SWI +406 \ 0000009C F080BDE8 POP {R4-R7,PC} ;; return 1538 } 1539 1540 char hostbuf2[128]; 1541 \ In segment CODE, align 4, keep-with-next 1542 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 1543 { \ contactlist_menu_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 1544 CLIST *t; 1545 int i; 1546 i=GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 1547 t=FindContactByN(i); \ 00000010 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000014 0050A0E1 MOV R5,R0 1548 if (msg->keys==0x18) \ 00000018 F200D4E1 LDRSH R0,[R4, #+2] \ 0000001C 180050E3 CMP R0,#+24 \ 00000020 0100001A BNE ??contactlist_menu_onkey_1 1549 { 1550 ShowMainMenu(); \ 00000024 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 1551 return(-1); \ 00000028 B00000EA B ??contactlist_menu_onkey_2 1552 } 1553 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_1: \ 0000002C ........ LDR R7,??DataTable55 ;; S_ICONS \ 00000030 C96FA0E3 MOV R6,#+804 \ 00000034 3D0050E3 CMP R0,#+61 \ 00000038 2400001A BNE ??contactlist_menu_onkey_3 1554 { 1555 if (t) \ 0000003C 000055E3 CMP R5,#+0 \ 00000040 2C00000A BEQ ??contactlist_menu_onkey_4 1556 { 1557 if (t->isgroup) \ 00000044 080095E5 LDR R0,[R5, #+8] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0700000A BEQ ??contactlist_menu_onkey_5 1558 { 1559 t->state^=0xFFFF; \ 00000050 B405D5E1 LDRH R0,[R5, #+84] \ 00000054 FF10A0E3 MOV R1,#+255 \ 00000058 FF1C81E3 ORR R1,R1,#0xFF00 \ 0000005C 000021E0 EOR R0,R1,R0 \ 00000060 B405C5E1 STRH R0,[R5, #+84] 1560 RecountMenu(t,1); \ 00000064 0110A0E3 MOV R1,#+1 \ 00000068 0500A0E1 MOV R0,R5 \ 0000006C 200000EA B ??contactlist_menu_onkey_6 1561 return(-1); 1562 } 1563 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_5: \ 00000070 070086E0 ADD R0,R6,R7 \ 00000074 1B0000EF SWI +27 \ 00000078 000050E3 CMP R0,#+0 \ 0000007C 0500000A BEQ ??contactlist_menu_onkey_7 1564 { 1565 ClearContactT9Key(); \ 00000080 2010A0E3 MOV R1,#+32 \ 00000084 070086E0 ADD R0,R6,R7 \ 00000088 1D0100EF SWI +285 1566 RecountMenu(NULL,1); \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 ........ BL RecountMenu 1567 } 1568 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_3: \ 000000D0 010050E3 CMP R0,#+1 \ 000000D4 0900001A BNE ??contactlist_menu_onkey_9 1574 { 1575 if (strlen(ContactT9Key)) \ 000000D8 070086E0 ADD R0,R6,R7 \ 000000DC 1B0000EF SWI +27 \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 0500000A BEQ ??contactlist_menu_onkey_9 1576 { 1577 BackSpaceContactT9(); \ 000000E8 ........ BL BackSpaceContactT9 1578 RecountMenu(NULL,1); \ 000000EC 0110A0E3 MOV R1,#+1 \ 000000F0 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_6: \ 000000F4 ........ BL RecountMenu 1579 return(-1); \ ??contactlist_menu_onkey_4: \ 000000F8 0000E0E3 MVN R0,#+0 \ 000000FC F28FBDE8 POP {R1,R4-R11,PC} 1580 } 1581 } 1582 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_9: \ 00000100 041094E5 LDR R1,[R4, #+4] \ 00000104 0080A0E3 MOV R8,#+0 \ 00000108 F200D1E1 LDRSH R0,[R1, #+2] \ 0000010C 0190A0E3 MOV R9,#+1 \ 00000110 9320A0E3 MOV R2,#+147 \ 00000114 402F82E3 ORR R2,R2,#0x100 \ 00000118 020050E1 CMP R0,R2 \ 0000011C 7900001A BNE ??contactlist_menu_onkey_10 1583 { 1584 int key=msg->gbsmsg->submess; \ 00000120 040091E5 LDR R0,[R1, #+4] 1585 if ((key>='0')&&(key<='9')) \ 00000124 300050E3 CMP R0,#+48 \ 00000128 030000BA BLT ??contactlist_menu_onkey_11 \ 0000012C 3A0050E3 CMP R0,#+58 \ 00000130 090000AA BGE ??contactlist_menu_onkey_12 1586 { 1587 AddContactT9Key(key); \ 00000134 ........ BL AddContactT9Key 1588 RecountMenu(NULL,1); \ 00000138 E20000EA B ??contactlist_menu_onkey_13 1589 return(-1); 1590 } 1591 #ifdef ELKA 1592 if (key==VOL_UP_BUTTON) 1593 //#else 1594 // if (key=='#') 1595 //#endif 1596 { 1597 char *small_info=malloc(256); 1598 // sprintf(hah,"online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); 1599 sprintf(small_info, "Время в онлайн:\n" 1600 "%02d:%02d:%02d\n" 1601 "Сервер:\n" 1602 "%s" 1603 , xstatus_old, minimum_xstatus, maximum, hostbuf2); 1604 ShowMSG(1,(int)small_info); 1605 mfree(small_info); 1606 } 1607 1608 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON) 1609 { 1610 if(!away_m) 1611 { 1612 // automsg=!automsg; 1613 away_m=!away_m; 1614 GBS_StopTimer(&away_tmr); 1615 msg_away_timer=AUTO_ENGADE; 1616 away_timer(); 1617 //main_d=1; 1618 // ShowMSG(1,(int)"Автоответчик включен!"); 1619 InputAwayMsg(); 1620 } 1621 else 1622 { 1623 msg_away_timer=0; 1624 away_m=!away_m; 1625 //away_m=0; 1626 //automsg=!automsg; 1627 // ShowMSG(1,(int)"Автоответчик выключен!"); 1628 } 1629 UpdateCLheader(); 1630 RefreshGUI(); 1631 } 1632 #endif 1633 if (key==GREEN_BUTTON) \ ??contactlist_menu_onkey_11: \ 0000013C 0B0050E3 CMP R0,#+11 \ 00000140 2D00001A BNE ??contactlist_menu_onkey_14 1634 { 1635 #ifdef EVILFOX 1636 while(t=(CLIST *)(t->next)) 1637 { 1638 if (t->isunread) goto doit; 1639 } 1640 t=(CLIST *)(&cltop); 1641 while(t=(CLIST *)(t->next)) 1642 { 1643 if (t->isunread) goto doit; 1644 } 1645 t=(CLIST *)(&cltop); 1646 while(t=(CLIST *)(t->next)) 1647 { 1648 if (t->isgroup) 1649 { 1650 if(!t->state) 1651 t->state^=0xFFFF; 1652 } 1653 } 1654 goto doit2; 1655 doit: 1656 { 1657 CLIST *g=FindGroupByID(t->group); 1658 if (g) 1659 { 1660 if (g->state) 1661 { 1662 g->state=0; 1663 } 1664 } 1665 } 1666 doit2: 1667 RecountMenu(t,1); 1668 #else 1669 IsActiveUp=!IsActiveUp; \ 00000144 100197E5 LDR R0,[R7, #+272] 1670 RecountMenu(NULL,1); \ 00000148 0110A0E3 MOV R1,#+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 0090A013 MOVNE R9,#+0 \ 00000154 109187E5 STR R9,[R7, #+272] \ 00000158 DB0000EA B ??contactlist_menu_onkey_15 1671 #endif 1672 return(-1); 1673 } 1674 if (key==LEFT_BUTTON) \ ??contactlist_menu_onkey_12: \ 0000015C 3D0050E3 CMP R0,#+61 \ 00000160 1000000A BEQ ??contactlist_menu_onkey_16 1675 { 1676 #ifdef EVILFOX 1677 IsActiveUp=!IsActiveUp; 1678 RecountMenu(NULL,1); 1679 #else 1680 while(t=(CLIST *)(t->next)) 1681 { 1682 if (t->isunread) goto doit; 1683 } 1684 t=(CLIST *)(&cltop); 1685 while(t=(CLIST *)(t->next)) 1686 { 1687 if (t->isunread) goto doit; 1688 } 1689 if (t && Is_Show_Groups) {//???? ??????? ? ?????????? ??????? 1690 if (!t->isgroup) 1691 t=FindGroupByID(t->group); 1692 if (t && !t->state) {//?????? ??????? ? ??? ???????? 1693 t->state^=0xFFFF; 1694 goto does; 1695 } 1696 } 1697 doit: 1698 { 1699 CLIST *g=FindGroupByID(t->group); 1700 if (g) 1701 { 1702 if (g->state) 1703 { 1704 g->state=0; 1705 } 1706 } 1707 } 1708 does: 1709 RecountMenu(t,1); 1710 #endif 1711 return(-1); 1712 } 1713 if (key=='*') 1714 { 1715 while(t=(CLIST *)(t->next)) 1716 { 1717 if (t->just_now) goto doit3; 1718 } 1719 t=(CLIST *)(&cltop); 1720 while(t=(CLIST *)(t->next)) 1721 { 1722 if (t->just_now) goto doit3; 1723 } 1724 return(-1); 1725 doit3: 1726 { 1727 CLIST *g=FindGroupByID(t->group); 1728 if (g) 1729 { 1730 if (g->state) 1731 { 1732 g->state=0; 1733 } 1734 } 1735 } 1736 RecountMenu(t,1); 1737 return(-1); 1738 } 1739 extern const int ActionResh; 1740 if (key=='#') 1741 { 1742 if(ActionResh) 1743 { 1744 while(t=(CLIST *)(t->next)) 1745 { 1746 if (t->isactive) goto doit4; 1747 } 1748 t=(CLIST *)(&cltop); 1749 while(t=(CLIST *)(t->next)) 1750 { 1751 if (t->isactive) goto doit4; 1752 } 1753 return(-1); 1754 doit4: 1755 { 1756 CLIST *g=FindGroupByID(t->group); 1757 if (g) 1758 { 1759 if (g->state) 1760 { 1761 g->state=0; 1762 } 1763 } 1764 } 1765 RecountMenu(t,1); 1766 } 1767 else 1768 { 1769 if(t->log) 1770 { 1771 FreeLOGQ(&t->log); 1772 t->msg_count=0; 1773 } 1774 if(strlen(ContactT9Key)) 1775 ClearContactT9Key(); 1776 t->isactive=0; 1777 RecountMenu(NULL,0); 1778 } 1779 return(-1); 1780 } 1781 if (key==RIGHT_BUTTON) \ 00000164 3E0050E3 CMP R0,#+62 \ 00000168 6600001A BNE ??contactlist_menu_onkey_10 1782 { 1783 //Послать запрос текста XStatus 1784 if (t) \ 0000016C 000055E3 CMP R5,#+0 \ 00000170 6400000A BEQ ??contactlist_menu_onkey_10 1785 { 1786 if (!t->isgroup) \ 00000174 080095E5 LDR R0,[R5, #+8] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 6100001A BNE ??contactlist_menu_onkey_10 1787 { 1788 FreeXText(t); \ 00000180 0500A0E1 MOV R0,R5 \ 00000184 ........ _BLF FreeXText,??FreeXText??rA 1789 t->req_xtext=0; \ 00000188 8C8085E5 STR R8,[R5, #+140] 1790 RequestXText(t->uin); \ 0000018C 0C0095E5 LDR R0,[R5, #+12] \ 00000190 ........ BL RequestXText 1791 RefreshGUI(); \ 00000194 960100EF SWI +406 1792 return(-1); \ 00000198 150000EA B ??contactlist_menu_onkey_17 1793 } 1794 } 1795 } \ ??contactlist_menu_onkey_18: \ 0000019C 640095E5 LDR R0,[R5, #+100] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 0900001A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_16: \ 000001A8 005095E5 LDR R5,[R5, #+0] \ 000001AC 000055E3 CMP R5,#+0 \ 000001B0 F9FFFF1A BNE ??contactlist_menu_onkey_18 \ 000001B4 675F87E2 ADD R5,R7,#+412 \ ??contactlist_menu_onkey_20: \ 000001B8 005095E5 LDR R5,[R5, #+0] \ 000001BC 000055E3 CMP R5,#+0 \ 000001C0 0200000A BEQ ??contactlist_menu_onkey_19 \ 000001C4 640095E5 LDR R0,[R5, #+100] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC F9FFFF0A BEQ ??contactlist_menu_onkey_20 \ ??contactlist_menu_onkey_19: \ 000001D0 100095E5 LDR R0,[R5, #+16] \ 000001D4 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC B415D011 LDRHNE R1,[R0, #+84] \ 000001E0 00005113 CMPNE R1,#+0 \ 000001E4 B485C011 STRHNE R8,[R0, #+84] \ 000001E8 0110A0E3 MOV R1,#+1 \ 000001EC 0500A0E1 MOV R0,R5 \ 000001F0 ........ BL RecountMenu \ ??contactlist_menu_onkey_17: \ 000001F4 0800E0E1 MVN R0,R8 \ 000001F8 F28FBDE8 POP {R1,R4-R11,PC} \ ??contactlist_menu_onkey_14: \ 000001FC 2A0050E3 CMP R0,#+42 \ 00000200 1900000A BEQ ??contactlist_menu_onkey_21 \ 00000204 230050E3 CMP R0,#+35 \ 00000208 3A00001A BNE ??contactlist_menu_onkey_22 \ 0000020C 44039FE5 LDR R0,??contactlist_menu_onkey_23 ;; ActionResh \ 00000210 000090E5 LDR R0,[R0, #+0] \ 00000214 000050E3 CMP R0,#+0 \ 00000218 2100001A BNE ??contactlist_menu_onkey_24 \ 0000021C 740095E5 LDR R0,[R5, #+116] \ 00000220 000050E3 CMP R0,#+0 \ 00000224 0200000A BEQ ??contactlist_menu_onkey_25 \ 00000228 740085E2 ADD R0,R5,#+116 \ 0000022C ........ BL FreeLOGQ \ 00000230 848085E5 STR R8,[R5, #+132] \ ??contactlist_menu_onkey_25: \ 00000234 070086E0 ADD R0,R6,R7 \ 00000238 1B0000EF SWI +27 \ 0000023C 000050E3 CMP R0,#+0 \ 00000240 0200000A BEQ ??contactlist_menu_onkey_26 \ 00000244 2010A0E3 MOV R1,#+32 \ 00000248 070086E0 ADD R0,R6,R7 \ 0000024C 1D0100EF SWI +285 \ ??contactlist_menu_onkey_26: \ 00000250 808085E5 STR R8,[R5, #+128] \ 00000254 0010A0E3 MOV R1,#+0 \ 00000258 0100A0E1 MOV R0,R1 \ 0000025C 220000EA B ??contactlist_menu_onkey_27 \ ??contactlist_menu_onkey_28: \ 00000260 5C0095E5 LDR R0,[R5, #+92] \ 00000264 000050E3 CMP R0,#+0 \ 00000268 D8FFFF1A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_21: \ 0000026C 005095E5 LDR R5,[R5, #+0] \ 00000270 000055E3 CMP R5,#+0 \ 00000274 F9FFFF1A BNE ??contactlist_menu_onkey_28 \ 00000278 675F87E2 ADD R5,R7,#+412 \ ??contactlist_menu_onkey_29: \ 0000027C 005095E5 LDR R5,[R5, #+0] \ 00000280 000055E3 CMP R5,#+0 \ 00000284 9BFFFF0A BEQ ??contactlist_menu_onkey_4 \ 00000288 5C0095E5 LDR R0,[R5, #+92] \ 0000028C 000050E3 CMP R0,#+0 \ 00000290 F9FFFF0A BEQ ??contactlist_menu_onkey_29 \ 00000294 CDFFFFEA B ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_30: \ 00000298 800095E5 LDR R0,[R5, #+128] \ 0000029C 000050E3 CMP R0,#+0 \ 000002A0 0900001A BNE ??contactlist_menu_onkey_31 \ ??contactlist_menu_onkey_24: \ 000002A4 005095E5 LDR R5,[R5, #+0] \ 000002A8 000055E3 CMP R5,#+0 \ 000002AC F9FFFF1A BNE ??contactlist_menu_onkey_30 \ 000002B0 675F87E2 ADD R5,R7,#+412 \ ??contactlist_menu_onkey_32: \ 000002B4 005095E5 LDR R5,[R5, #+0] \ 000002B8 000055E3 CMP R5,#+0 \ 000002BC 8DFFFF0A BEQ ??contactlist_menu_onkey_4 \ 000002C0 800095E5 LDR R0,[R5, #+128] \ 000002C4 000050E3 CMP R0,#+0 \ 000002C8 F9FFFF0A BEQ ??contactlist_menu_onkey_32 \ ??contactlist_menu_onkey_31: \ 000002CC 100095E5 LDR R0,[R5, #+16] \ 000002D0 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 B415D011 LDRHNE R1,[R0, #+84] \ 000002DC 00005113 CMPNE R1,#+0 \ 000002E0 B485C011 STRHNE R8,[R0, #+84] \ 000002E4 0110A0E3 MOV R1,#+1 \ 000002E8 0500A0E1 MOV R0,R5 \ ??contactlist_menu_onkey_27: \ 000002EC ........ BL RecountMenu \ ??contactlist_menu_onkey_2: \ 000002F0 0000E0E3 MVN R0,#+0 \ 000002F4 F28FBDE8 POP {R1,R4-R11,PC} 1796 if (key==0x19) \ ??contactlist_menu_onkey_22: \ 000002F8 190050E3 CMP R0,#+25 \ 000002FC 0100001A BNE ??contactlist_menu_onkey_10 1797 { 1798 CreateScreenSelectGUI(); \ ??contactlist_menu_onkey_33: \ 00000300 ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA 1799 // GeneralFuncF1(1); 1800 return(-1); \ 00000304 BAFFFFEA B ??contactlist_menu_onkey_17 1801 } 1802 } 1803 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_10: \ 00000308 F200D1E1 LDRSH R0,[R1, #+2] \ 0000030C 022082E2 ADD R2,R2,#+2 \ 00000310 020050E1 CMP R0,R2 \ 00000314 8D00001A BNE ??contactlist_menu_onkey_34 1804 { 1805 if (msg->gbsmsg->submess=='#') \ 00000318 040091E5 LDR R0,[R1, #+4] \ 0000031C 230050E3 CMP R0,#+35 \ 00000320 F6FFFF0A BEQ ??contactlist_menu_onkey_33 1806 { 1807 /* 1808 ClearContactT9Key(); 1809 RecountMenu(NULL,1); 1810 gipc.name_to=ipc_xtask_name; 1811 gipc.name_from=ipc_my_name; 1812 gipc.data=0; 1813 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 1814 if (IsUnlocked()) 1815 { 1816 KbdLock(); 1817 } 1818 */ 1819 CreateScreenSelectGUI(); 1820 return(-1); 1821 } 1822 if (msg->gbsmsg->submess=='*') \ 00000324 ........ LDR R10,??DataTable60 ;; `?` \ 00000328 2A0050E3 CMP R0,#+42 \ 0000032C 1100001A BNE ??contactlist_menu_onkey_35 1823 { 1824 ClearContactT9Key(); \ 00000330 2010A0E3 MOV R1,#+32 \ 00000334 070086E0 ADD R0,R6,R7 \ 00000338 1D0100EF SWI +285 1825 RecountMenu(NULL,1); \ 0000033C 0110A0E3 MOV R1,#+1 \ 00000340 0800A0E1 MOV R0,R8 \ 00000344 ........ BL RecountMenu 1826 silenthide=1; \ 00000348 449187E5 STR R9,[R7, #+324] 1827 gipc.name_to=ipc_xtask_name; \ 0000034C 700E8AE2 ADD R0,R10,#+1792 \ 00000350 AC0087E5 STR R0,[R7, #+172] 1828 gipc.name_from=ipc_my_name; \ 00000354 6E0E8AE2 ADD R0,R10,#+1760 \ 00000358 B00087E5 STR R0,[R7, #+176] 1829 gipc.data=0; \ 0000035C B48087E5 STR R8,[R7, #+180] 1830 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000360 AC3087E2 ADD R3,R7,#+172 \ 00000364 0920A0E1 MOV R2,R9 \ 00000368 CE1086E2 ADD R1,R6,#+206 \ 0000036C 0900A0E3 MOV R0,#+9 \ 00000370 420C80E3 ORR R0,R0,#0x4200 \ 00000374 000100EF SWI +256 1831 } 1832 switch(msg->gbsmsg->submess) \ ??contactlist_menu_onkey_35: \ 00000378 040094E5 LDR R0,[R4, #+4] \ 0000037C D8B19FE5 LDR R11,??contactlist_menu_onkey_23+0x4 ;; WriteDefSettings \ 00000380 040090E5 LDR R0,[R0, #+4] \ 00000384 310040E2 SUB R0,R0,#+49 \ 00000388 050050E3 CMP R0,#+5 \ 0000038C 6200008A BHI ??contactlist_menu_onkey_36 \ 00000390 011F8FE2 ADR R1,??contactlist_menu_onkey_0 \ 00000394 0010D1E7 LDRB R1,[R1, R0] \ 00000398 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??contactlist_menu_onkey_0: \ 0000039C 010E1C28 DC8 +1,+14,+28,+40 \ 000003A0 364F0000 DC8 +54,+79,+0,+0 1833 { 1834 case '1': 1835 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??contactlist_menu_onkey_37: \ 000003A4 500197E5 LDR R0,[R7, #+336] \ 000003A8 000050E3 CMP R0,#+0 \ 000003AC 0090A013 MOVNE R9,#+0 \ 000003B0 509187E5 STR R9,[R7, #+336] 1836 if(Is_Sounds_Enabled) \ 000003B4 000059E3 CMP R9,#+0 1837 ShowMSG(1,(int)"Sound 0n"); \ 000003B8 1C108A12 ADDNE R1,R10,#+28 1838 else 1839 ShowMSG(1,(int)"Sound Off"); \ 000003BC 28108A02 ADDEQ R1,R10,#+40 \ 000003C0 0100A0E3 MOV R0,#+1 \ 000003C4 480100EF SWI +328 1840 SUBPROC((void*)WriteDefSettings); \ 000003C8 0B00A0E1 MOV R0,R11 \ 000003CC 710100EF SWI +369 1841 RefreshGUI(); \ 000003D0 960100EF SWI +406 \ 000003D4 500000EA B ??contactlist_menu_onkey_36 1842 break; 1843 case '2': 1844 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??contactlist_menu_onkey_38: \ 000003D8 4C0197E5 LDR R0,[R7, #+332] \ 000003DC 000050E3 CMP R0,#+0 \ 000003E0 0090A013 MOVNE R9,#+0 \ 000003E4 4C9187E5 STR R9,[R7, #+332] 1845 SUBPROC((void*)WriteDefSettings); \ 000003E8 0B00A0E1 MOV R0,R11 \ 000003EC 710100EF SWI +369 1846 RefreshGUI(); \ 000003F0 960100EF SWI +406 1847 if(Is_Vibra_Enabled) \ 000003F4 4C0197E5 LDR R0,[R7, #+332] \ 000003F8 000050E3 CMP R0,#+0 \ 000003FC 40108A02 ADDEQ R1,R10,#+64 1848 ShowMSG(1,(int)"Vibra On"); \ 00000400 34108A12 ADDNE R1,R10,#+52 \ ??contactlist_menu_onkey_39: \ 00000404 0100A0E3 MOV R0,#+1 \ ??contactlist_menu_onkey_40: \ 00000408 480100EF SWI +328 \ 0000040C 420000EA B ??contactlist_menu_onkey_36 1849 else 1850 ShowMSG(1,(int)"Vibra Off"); 1851 break; 1852 case '3': 1853 if(CurrentPrivateStatus!=1) \ ??contactlist_menu_onkey_41: \ 00000410 600197E5 LDR R0,[R7, #+352] \ 00000414 010050E3 CMP R0,#+1 \ 00000418 0400000A BEQ ??contactlist_menu_onkey_42 1854 { 1855 SetPrivateStatus(1);//Инвиз \ 0000041C 0100A0E3 MOV R0,#+1 \ 00000420 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1856 ShowMSG(1,(int)"Инвиз включен"); \ 00000424 4C108AE2 ADD R1,R10,#+76 \ 00000428 0900A0E1 MOV R0,R9 \ ??contactlist_menu_onkey_43: \ 0000042C F5FFFFEA B ??contactlist_menu_onkey_40 1857 } 1858 else 1859 { 1860 SetPrivateStatus(3);//не инвиз:) \ ??contactlist_menu_onkey_42: \ 00000430 0300A0E3 MOV R0,#+3 \ 00000434 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1861 ShowMSG(1,(int)"Инвиз выключен"); \ 00000438 5C108AE2 ADD R1,R10,#+92 \ 0000043C F0FFFFEA B ??contactlist_menu_onkey_39 1862 } 1863 break; 1864 case '4': 1865 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??contactlist_menu_onkey_44: \ 00000440 FC0097E5 LDR R0,[R7, #+252] \ 00000444 000050E3 CMP R0,#+0 \ 00000448 0090A013 MOVNE R9,#+0 \ 0000044C FC9087E5 STR R9,[R7, #+252] 1866 SUBPROC((void*)WriteDefSettings); \ 00000450 0B00A0E1 MOV R0,R11 \ 00000454 710100EF SWI +369 1867 RefreshGUI(); \ 00000458 960100EF SWI +406 1868 if(Is_Double_Vibra_On) \ 0000045C FC0097E5 LDR R0,[R7, #+252] \ 00000460 000050E3 CMP R0,#+0 1869 ShowMSG(1,(int)"Vibra rem On"); \ 00000464 6C108A12 ADDNE R1,R10,#+108 \ 00000468 0100A013 MOVNE R0,#+1 \ 0000046C E5FFFF1A BNE ??contactlist_menu_onkey_40 1870 else 1871 ShowMSG(1,(int)"Vibra rem Off"); \ 00000470 7C108AE2 ADD R1,R10,#+124 \ 00000474 E2FFFFEA B ??contactlist_menu_onkey_39 1872 break; 1873 case '5': 1874 { 1875 // t=(CLIST *)(&cltop); 1876 CLIST *cl; 1877 cl=(CLIST *)cltop; \ ??contactlist_menu_onkey_45: \ 00000478 9C4197E5 LDR R4,[R7, #+412] \ 0000047C 000054E3 CMP R4,#+0 \ 00000480 0800000A BEQ ??contactlist_menu_onkey_46 1878 while(cl) 1879 { 1880 if(cl->log) \ ??contactlist_menu_onkey_47: \ 00000484 740094E5 LDR R0,[R4, #+116] \ 00000488 000050E3 CMP R0,#+0 \ 0000048C 0200000A BEQ ??contactlist_menu_onkey_48 1881 { 1882 FreeLOGQ(&cl->log); \ 00000490 740084E2 ADD R0,R4,#+116 \ 00000494 ........ BL FreeLOGQ 1883 cl->msg_count=0; \ 00000498 848084E5 STR R8,[R4, #+132] 1884 } 1885 cl=cl->next; \ ??contactlist_menu_onkey_48: \ 0000049C 004094E5 LDR R4,[R4, #+0] 1886 } \ 000004A0 000054E3 CMP R4,#+0 \ 000004A4 F6FFFF1A BNE ??contactlist_menu_onkey_47 1887 1888 if(strlen(ContactT9Key)) \ ??contactlist_menu_onkey_46: \ 000004A8 070086E0 ADD R0,R6,R7 \ 000004AC 1B0000EF SWI +27 \ 000004B0 000050E3 CMP R0,#+0 \ 000004B4 0200000A BEQ ??contactlist_menu_onkey_49 1889 ClearContactT9Key(); \ 000004B8 2010A0E3 MOV R1,#+32 \ 000004BC 070086E0 ADD R0,R6,R7 \ 000004C0 1D0100EF SWI +285 1890 t->isactive=0; \ ??contactlist_menu_onkey_49: \ 000004C4 808085E5 STR R8,[R5, #+128] 1891 RecountMenu(NULL,1); \ ??contactlist_menu_onkey_13: \ 000004C8 0110A0E3 MOV R1,#+1 \ ??contactlist_menu_onkey_15: \ 000004CC 0000A0E3 MOV R0,#+0 \ 000004D0 ........ BL RecountMenu 1892 return (-1); \ 000004D4 0800E0E1 MVN R0,R8 \ 000004D8 F28FBDE8 POP {R1,R4-R11,PC} 1893 } 1894 case '6': 1895 if(!away_m) \ ??contactlist_menu_onkey_50: \ 000004DC 240197E5 LDR R0,[R7, #+292] \ 000004E0 000050E3 CMP R0,#+0 \ 000004E4 0900001A BNE ??contactlist_menu_onkey_51 1896 { 1897 away_m=!away_m; \ 000004E8 249187E5 STR R9,[R7, #+292] 1898 GBS_StopTimer(&away_tmr); \ 000004EC D60F86E2 ADD R0,R6,#+856 \ 000004F0 070080E0 ADD R0,R0,R7 \ 000004F4 440100EF SWI +324 1899 msg_away_timer=AUTO_ENGADE; \ 000004F8 ........ LDR R0,??DataTable58 ;; AUTO_ENGADE \ 000004FC 000090E5 LDR R0,[R0, #+0] \ 00000500 1C0187E5 STR R0,[R7, #+284] 1900 away_timer(); \ 00000504 ........ BL away_timer 1901 // ShowMSG(1,(int)"Автоответчик включен!"); 1902 InputAwayMsg(); \ 00000508 ........ BL InputAwayMsg \ 0000050C 010000EA B ??contactlist_menu_onkey_52 1903 } 1904 else 1905 { 1906 msg_away_timer=0; \ ??contactlist_menu_onkey_51: \ 00000510 1C8187E5 STR R8,[R7, #+284] 1907 away_m=!away_m; \ 00000514 248187E5 STR R8,[R7, #+292] 1908 // ShowMSG(1,(int)"Автоответчик выключен!"); 1909 } 1910 UpdateCLheader(); \ ??contactlist_menu_onkey_52: \ 00000518 ........ BL UpdateCLheader 1911 break; 1912 } 1913 1914 int key=msg->gbsmsg->submess; \ ??contactlist_menu_onkey_36: \ 0000051C 040094E5 LDR R0,[R4, #+4] \ 00000520 040090E5 LDR R0,[R0, #+4] 1915 if ((key>='0')&&(key<='9')) \ 00000524 300050E3 CMP R0,#+48 \ 00000528 080000BA BLT ??contactlist_menu_onkey_34 \ 0000052C 3A0050E3 CMP R0,#+58 \ 00000530 060000AA BGE ??contactlist_menu_onkey_34 1916 { 1917 ClearContactT9Key(); \ 00000534 2010A0E3 MOV R1,#+32 \ 00000538 070086E0 ADD R0,R6,R7 \ 0000053C 1D0100EF SWI +285 1918 UpdateCLheader(); \ 00000540 ........ BL UpdateCLheader 1919 RecountMenu(NULL,1); \ 00000544 0110A0E3 MOV R1,#+1 \ 00000548 0000A0E3 MOV R0,#+0 \ 0000054C ........ BL RecountMenu 1920 } 1921 } 1922 return(0); \ ??contactlist_menu_onkey_34: \ 00000550 0000A0E3 MOV R0,#+0 \ 00000554 F28FBDE8 POP {R1,R4-R11,PC} ;; return \ ??contactlist_menu_onkey_23: \ 00000558 ........ DC32 ActionResh \ 0000055C ........ DC32 WriteDefSettings 1923 } 1924 \ In segment CODE, align 4, keep-with-next 1925 void GetOnTotalContact(int group_id,int *_onlinetotal) 1926 { 1927 CLIST *t; 1928 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable59 ;; S_ICONS + 412 \ 00000004 30002DE9 PUSH {R4,R5} 1929 int online=0,total=0; \ 00000008 0030A0E3 MOV R3,#+0 \ 0000000C 00C0A0E3 MOV R12,#+0 \ 00000010 FF50A0E3 MOV R5,#+255 \ 00000014 FF5C85E3 ORR R5,R5,#0xFF00 \ 00000018 080000EA B ??GetOnTotalContact_0 1930 while((t=t->next)) 1931 { 1932 if(t->group==group_id && !t->isgroup) \ ??GetOnTotalContact_1: \ 0000001C 104092E5 LDR R4,[R2, #+16] \ 00000020 000054E1 CMP R4,R0 \ 00000024 08409205 LDREQ R4,[R2, #+8] \ 00000028 00005403 CMPEQ R4,#+0 \ 0000002C 0300001A BNE ??GetOnTotalContact_0 1933 { 1934 total++; 1935 if (t->state!=0xFFFF) online++; \ 00000030 B445D2E1 LDRH R4,[R2, #+84] \ 00000034 01C08CE2 ADD R12,R12,#+1 \ 00000038 050054E1 CMP R4,R5 \ 0000003C 01308312 ADDNE R3,R3,#+1 1936 } 1937 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 1938 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 1939 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 1940 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 1941 1942 \ In segment CODE, align 4, keep-with-next 1943 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 1944 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 1945 CLIST *t; 1946 #ifdef USE_MLMENU 1947 void *item=AllocMLMenuItem(data); 1948 #else 1949 void *item=AllocMenuItem(data); 1950 #endif 1951 int icon; 1952 1953 WSHDR *ws2; 1954 #ifdef USE_MLMENU 1955 WSHDR *ws4; 1956 #endif 1957 WSHDR ws1loc, *ws1; 1958 unsigned short num[128]; 1959 ws1=CreateLocalWS(&ws1loc,num,128); 1960 #ifdef USE_MLMENU 1961 WSHDR ws3loc, *ws3; 1962 unsigned short num3[128]; 1963 ws3=CreateLocalWS(&ws3loc,num3,128); 1964 char s[64]; 1965 #endif 1966 //void Get_Online_total(); 1967 //Get_Online_total(); 1968 // if(CountContacts()==curitem && (!dontLogOnConnect)) 1969 // dontLogOnConnect=1; 1970 t=FindContactByN(curitem); 1971 if (t) \ 00000008 ........ LDR R10,??DataTable60 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 190200EF SWI +537 \ 00000014 0050A0E1 MOV R5,R0 \ 00000018 8020A0E3 MOV R2,#+128 \ 0000001C 08108DE2 ADD R1,SP,#+8 \ 00000020 920F8DE2 ADD R0,SP,#+584 \ 00000024 270100EF SWI +295 \ 00000028 0060A0E1 MOV R6,R0 \ 0000002C 8020A0E3 MOV R2,#+128 \ 00000030 421F8DE2 ADD R1,SP,#+264 \ 00000034 970F8DE2 ADD R0,SP,#+604 \ 00000038 270100EF SWI +295 \ 0000003C 0070A0E1 MOV R7,R0 \ 00000040 70029DE5 LDR R0,[SP, #+624] \ 00000044 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000048 0090B0E1 MOVS R9,R0 \ 0000004C 6200000A BEQ ??contactlist_menu_iconhndl_0 1972 { 1973 icon=GetIconIndex(t); \ 00000050 ........ BL GetIconIndex \ 00000054 0080A0E1 MOV R8,R0 1974 if (icon!=IS_GROUP) \ 00000058 0F0058E3 CMP R8,#+15 \ 0000005C 4D00000A BEQ ??contactlist_menu_iconhndl_1 1975 { 1976 if(t->just_now) \ 00000060 5C0099E5 LDR R0,[R9, #+92] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0C00000A BEQ ??contactlist_menu_iconhndl_2 1977 { 1978 char *test=malloc(64); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 00B0A0E1 MOV R11,R0 1979 sprintf(test, ">> %s <<", t->name); \ 00000078 142089E2 ADD R2,R9,#+20 \ 0000007C 8C108AE2 ADD R1,R10,#+140 \ 00000080 160000EF SWI +22 1980 wsprintf(ws1,percent_t,test); \ 00000084 0B20A0E1 MOV R2,R11 \ 00000088 10108AE2 ADD R1,R10,#+16 \ 0000008C 0600A0E1 MOV R0,R6 \ 00000090 240100EF SWI +292 1981 mfree(test); \ 00000094 0B00A0E1 MOV R0,R11 \ 00000098 150000EF SWI +21 \ 0000009C 030000EA B ??contactlist_menu_iconhndl_3 1982 } 1983 else 1984 wsprintf(ws1,percent_t,t->name); \ ??contactlist_menu_iconhndl_2: \ 000000A0 142089E2 ADD R2,R9,#+20 \ 000000A4 10108AE2 ADD R1,R10,#+16 \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC 240100EF SWI +292 1985 if (t->just_now) \ ??contactlist_menu_iconhndl_3: \ 000000B0 5C0099E5 LDR R0,[R9, #+92] \ 000000B4 08B0A0E3 MOV R11,#+8 \ 000000B8 E0BC8BE3 ORR R11,R11,#0xE000 \ 000000BC 000050E3 CMP R0,#+0 1986 { 1987 wsInsertChar(ws1,0x0004,1); \ 000000C0 0120A013 MOVNE R2,#+1 \ 000000C4 0410A013 MOVNE R1,#+4 \ 000000C8 0400001A BNE ??contactlist_menu_iconhndl_4 1988 wsInsertChar(ws1,0xE008,1); 1989 } 1990 else 1991 if (t->isactive) \ 000000CC 800099E5 LDR R0,[R9, #+128] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 0700000A BEQ ??contactlist_menu_iconhndl_5 1992 { 1993 wsInsertChar(ws1,0x0002,1); \ 000000D8 0120A0E3 MOV R2,#+1 \ 000000DC 0210A0E3 MOV R1,#+2 \ ??contactlist_menu_iconhndl_4: \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 1D0000EF SWI +29 1994 wsInsertChar(ws1,0xE008,1); \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC 0B10A0E1 MOV R1,R11 \ 000000F0 0600A0E1 MOV R0,R6 \ 000000F4 1D0000EF SWI +29 1995 } 1996 #ifdef USE_MLMENU 1997 if (t->xtext && t->xtext[0]!=0) \ ??contactlist_menu_iconhndl_5: \ 000000F8 880099E5 LDR R0,[R9, #+136] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0000D015 LDRBNE R0,[R0, #+0] \ 00000104 00005013 CMPNE R0,#+0 \ 00000108 0F00000A BEQ ??contactlist_menu_iconhndl_6 1998 { 1999 int i; 2000 zeromem(s,64); \ 0000010C 4010A0E3 MOV R1,#+64 \ 00000110 820F8DE2 ADD R0,SP,#+520 \ 00000114 1D0100EF SWI +285 2001 i=t->xtext[0]; \ 00000118 880099E5 LDR R0,[R9, #+136] \ 0000011C 0020D0E5 LDRB R2,[R0, #+0] 2002 if (i>63) i=63; 2003 strncpy(s,t->xtext+1,i); \ 00000120 011080E2 ADD R1,R0,#+1 \ 00000124 820F8DE2 ADD R0,SP,#+520 \ 00000128 400052E3 CMP R2,#+64 \ 0000012C 3F20A0A3 MOVGE R2,#+63 \ 00000130 160100EF SWI +278 2004 wsprintf(ws3,"%c%t",0xE012,s); \ 00000134 823F8DE2 ADD R3,SP,#+520 \ 00000138 0A208BE2 ADD R2,R11,#+10 \ 0000013C 98108AE2 ADD R1,R10,#+152 \ 00000140 0700A0E1 MOV R0,R7 \ 00000144 240100EF SWI +292 \ 00000148 030000EA B ??contactlist_menu_iconhndl_7 2005 } 2006 else 2007 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_6: \ 0000014C 0C2099E5 LDR R2,[R9, #+12] \ 00000150 13108AE2 ADD R1,R10,#+19 \ 00000154 0700A0E1 MOV R0,R7 \ 00000158 240100EF SWI +292 2008 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_7: \ 0000015C B605D9E1 LDRH R0,[R9, #+86] \ 00000160 ........ LDR R2,??DataTable61 ;; total_xstatuses \ 00000164 0010A0E1 MOV R1,R0 \ 00000168 002092E5 LDR R2,[R2, #+0] \ 0000016C 020051E1 CMP R1,R2 \ 00000170 1C0000AA BGE ??contactlist_menu_iconhndl_8 \ 00000174 000050E3 CMP R0,#+0 \ 00000178 1A00000A BEQ ??contactlist_menu_iconhndl_8 2009 { 2010 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 0000017C 0120A0E3 MOV R2,#+1 \ 00000180 3700A0E3 MOV R0,#+55 \ 00000184 E10C80E3 ORR R0,R0,#0xE100 \ 00000188 011080E0 ADD R1,R0,R1 \ 0000018C 0700A0E1 MOV R0,R7 \ 00000190 1D0000EF SWI +29 \ 00000194 130000EA B ??contactlist_menu_iconhndl_8 2011 } 2012 #endif 2013 } 2014 else 2015 { 2016 int onlinetotal[2]; 2017 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 00000198 100099E5 LDR R0,[R9, #+16] \ 0000019C 0D10A0E1 MOV R1,SP \ 000001A0 ........ BL GetOnTotalContact 2018 #ifdef USE_MLMENU 2019 wsprintf(ws1,percent_t,t->name); \ 000001A4 142089E2 ADD R2,R9,#+20 \ 000001A8 10108AE2 ADD R1,R10,#+16 \ 000001AC 0600A0E1 MOV R0,R6 \ 000001B0 240100EF SWI +292 2020 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 000001B4 04309DE5 LDR R3,[SP, #+4] \ 000001B8 00209DE5 LDR R2,[SP, #+0] \ 000001BC A0108AE2 ADD R1,R10,#+160 \ 000001C0 0700A0E1 MOV R0,R7 \ 000001C4 240100EF SWI +292 2021 #else 2022 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 2023 #endif 2024 if (t->state) icon++; //Модификация иконки группы \ 000001C8 B405D9E1 LDRH R0,[R9, #+84] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 0400000A BEQ ??contactlist_menu_iconhndl_8 \ 000001D4 018088E2 ADD R8,R8,#+1 \ 000001D8 020000EA B ??contactlist_menu_iconhndl_8 2025 } 2026 } 2027 else 2028 { 2029 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 000001DC A8108AE2 ADD R1,R10,#+168 \ 000001E0 0600A0E1 MOV R0,R6 \ 000001E4 240100EF SWI +292 2030 } 2031 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ ??contactlist_menu_iconhndl_8: \ 000001E8 000096E5 LDR R0,[R6, #+0] \ 000001EC B010D0E1 LDRH R1,[R0, #+0] \ 000001F0 0400A0E1 MOV R0,R4 \ 000001F4 980100EF SWI +408 \ 000001F8 0090A0E1 MOV R9,R0 2032 wstrcpy(ws2,ws1); \ 000001FC 0610A0E1 MOV R1,R6 \ 00000200 1F0100EF SWI +287 2033 2034 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 00000204 ........ LDR R0,??DataTable62 ;; S_ICONS \ 00000208 0510A0E1 MOV R1,R5 \ 0000020C 082180E0 ADD R2,R0,R8, LSL #+2 \ 00000210 0400A0E1 MOV R0,R4 \ 00000214 990100EF SWI +409 2035 #ifdef USE_MLMENU 2036 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 00000218 000097E5 LDR R0,[R7, #+0] \ 0000021C B010D0E1 LDRH R1,[R0, #+0] \ 00000220 0400A0E1 MOV R0,R4 \ 00000224 980100EF SWI +408 \ 00000228 0060A0E1 MOV R6,R0 2037 wstrcpy(ws4,ws3); \ 0000022C 0710A0E1 MOV R1,R7 \ 00000230 1F0100EF SWI +287 2038 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 00000234 70029DE5 LDR R0,[SP, #+624] \ 00000238 0630A0E1 MOV R3,R6 \ 0000023C 01002DE9 PUSH {R0} \ 00000240 0920A0E1 MOV R2,R9 \ 00000244 0510A0E1 MOV R1,R5 \ 00000248 0400A0E1 MOV R0,R4 \ 0000024C 180200EF SWI +536 2039 #else 2040 SetMenuItemText(data, item, ws2, curitem); 2041 #endif 2042 } \ 00000250 9EDF8DE2 ADD SP,SP,#+632 \ 00000254 F08FBDE8 POP {R4-R11,PC} ;; return 2043 2044 //=============================================================================================== 2045 int DNR_ID=0; 2046 int DNR_TRIES=3; 2047 2048 extern const char NATICQ_HOST[]; 2049 extern const unsigned int NATICQ_PORT; 2050 extern const unsigned int RECONNECT_TIME; //2058 2051 char hostname[128]; //2058 che toka 128? :) 2052 2053 2054 int host_counter = 0; 2055 2056 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2057 const char *GetHost(int cnt, const char *str, char *buf) 2058 { 2059 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 2060 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 2061 { 2062 for(;cnt;cnt--) 2063 { 2064 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_2: \ 00000010 011081E2 ADD R1,R1,#+1 \ ??GetHost_0: \ 00000014 00C0D1E5 LDRB R12,[R1, #+0] \ 00000018 3B005CE3 CMP R12,#+59 \ 0000001C 20005C13 CMPNE R12,#+32 \ 00000020 0D005C13 CMPNE R12,#+13 \ 00000024 0A005C13 CMPNE R12,#+10 \ 00000028 00005C13 CMPNE R12,#+0 \ 0000002C F7FFFF1A BNE ??GetHost_2 2065 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 2066 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetHost_4: \ 00000040 011081E2 ADD R1,R1,#+1 \ ??GetHost_3: \ 00000044 00C0D1E5 LDRB R12,[R1, #+0] \ 00000048 3B005CE3 CMP R12,#+59 \ 0000004C 20005C13 CMPNE R12,#+32 \ 00000050 0D005C13 CMPNE R12,#+13 \ 00000054 0A005C13 CMPNE R12,#+10 \ 00000058 0100001A BNE ??GetHost_5 \ 0000005C 00005CE3 CMP R12,#+0 \ 00000060 F6FFFF1A BNE ??GetHost_4 2067 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 2068 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 2069 } 2070 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 2071 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 2072 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_7: \ 00000080 011081E2 ADD R1,R1,#+1 \ ??GetHost_6: \ 00000084 00C0D1E5 LDRB R12,[R1, #+0] \ 00000088 3B005CE3 CMP R12,#+59 \ 0000008C 3A005C13 CMPNE R12,#+58 \ 00000090 20005C13 CMPNE R12,#+32 \ 00000094 0D005C13 CMPNE R12,#+13 \ 00000098 0A005C13 CMPNE R12,#+10 \ 0000009C 00005C13 CMPNE R12,#+0 \ 000000A0 F6FFFF1A BNE ??GetHost_7 2073 end = str; 2074 for(;begin0x2F && attr[k]<0x3A) {ret=ret*10+attr[k]-0x30;} else { if ( attr[k]=='-') {neg=-1;} else {return(ret*neg);}} \ ??atoi_1: \ 00000014 04C0A0E1 MOV R12,R4 \ 00000018 3A005CE3 CMP R12,#+58 \ 0000001C 0600002A BCS ??atoi_2 \ 00000020 0A40A0E3 MOV R4,#+10 \ 00000024 94C121E0 MLA R1,R4,R1,R12 \ 00000028 301041E2 SUB R1,R1,#+48 \ ??atoi_3: \ 0000002C 013083E2 ADD R3,R3,#+1 \ ??atoi_0: \ 00000030 0040D3E7 LDRB R4,[R3, +R0] \ 00000034 300054E3 CMP R4,#+48 \ 00000038 F5FFFF2A BCS ??atoi_1 \ ??atoi_2: \ 0000003C 2D0054E3 CMP R4,#+45 \ 00000040 0020E003 MVNEQ R2,#+0 \ 00000044 F8FFFF0A BEQ ??atoi_3 \ 00000048 1000BDE8 POP {R4} \ 0000004C 920100E0 MUL R0,R2,R1 \ 00000050 1EFF2FE1 BX LR ;; return 2086 } 2087 } 2088 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2089 int GetPort(int cnt, const char *str) 2090 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 2091 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 2092 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 2093 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 2094 { 2095 for(;cnt;cnt--) 2096 { 2097 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_2: \ 00000020 011081E2 ADD R1,R1,#+1 \ ??GetPort_0: \ 00000024 0040D1E5 LDRB R4,[R1, #+0] \ 00000028 3B0054E3 CMP R4,#+59 \ 0000002C 20005413 CMPNE R4,#+32 \ 00000030 0D005413 CMPNE R4,#+13 \ 00000034 0A005413 CMPNE R4,#+10 \ 00000038 00005413 CMPNE R4,#+0 \ 0000003C F7FFFF1A BNE ??GetPort_2 2098 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 2099 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetPort_4: \ 00000050 011081E2 ADD R1,R1,#+1 \ ??GetPort_3: \ 00000054 0040D1E5 LDRB R4,[R1, #+0] \ 00000058 3B0054E3 CMP R4,#+59 \ 0000005C 20005413 CMPNE R4,#+32 \ 00000060 0D005413 CMPNE R4,#+13 \ 00000064 0A005413 CMPNE R4,#+10 \ 00000068 0100001A BNE ??GetPort_5 \ 0000006C 000054E3 CMP R4,#+0 \ 00000070 F6FFFF1A BNE ??GetPort_4 2100 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 2101 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 2102 } 2103 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_1: \ 00000084 0000D1E5 LDRB R0,[R1, #+0] \ 00000088 3B0050E3 CMP R0,#+59 \ 0000008C 3A005013 CMPNE R0,#+58 \ 00000090 20005013 CMPNE R0,#+32 \ 00000094 0D005013 CMPNE R0,#+13 \ 00000098 0A005013 CMPNE R0,#+10 \ 0000009C 00005013 CMPNE R0,#+0 \ 000000A0 01108112 ADDNE R1,R1,#+1 \ 000000A4 F6FFFF1A BNE ??GetPort_1 2104 if(*str!=':') return NATICQ_PORT; \ 000000A8 ........ LDRB R0,[R1], #+1 \ 000000AC 3A0050E3 CMP R0,#+58 \ 000000B0 58009F15 LDRNE R0,??GetPort_6 ;; NATICQ_PORT \ 000000B4 00009015 LDRNE R0,[R0, #+0] \ 000000B8 1680BD18 POPNE {R1,R2,R4,PC} 2105 str++; 2106 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 2107 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str && numcnt<5; numbuf[numcnt] = *str, str++, numcnt++); \ ??GetPort_8: \ 000000C4 ........ LDRB R4,[R1], #+1 \ 000000C8 013083E2 ADD R3,R3,#+1 \ 000000CC FF3003E2 AND R3,R3,#0xFF \ 000000D0 0040C0E5 STRB R4,[R0, #+0] \ ??GetPort_7: \ 000000D4 0D40A0E1 MOV R4,SP \ 000000D8 040083E0 ADD R0,R3,R4 \ 000000DC 0040D1E5 LDRB R4,[R1, #+0] \ 000000E0 3B0054E3 CMP R4,#+59 \ 000000E4 20005413 CMPNE R4,#+32 \ 000000E8 0D005413 CMPNE R4,#+13 \ 000000EC 0A005413 CMPNE R4,#+10 \ 000000F0 00005413 CMPNE R4,#+0 \ 000000F4 0100000A BEQ ??GetPort_9 \ 000000F8 050053E3 CMP R3,#+5 \ 000000FC F0FFFF3A BCC ??GetPort_8 2108 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 2109 return atoi(numbuf); \ 00000104 0D00A0E1 MOV R0,SP \ 00000108 ........ BL atoi \ 0000010C 1680BDE8 POP {R1,R2,R4,PC} ;; return \ ??GetPort_6: \ 00000110 ........ DC32 NATICQ_PORT 2110 2111 } 2112 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2113 int GetHostsCount(const char *str) 2114 { 2115 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 2116 for(;cnt;cnt++) 2117 { 2118 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHostsCount_1: \ 00000008 010080E2 ADD R0,R0,#+1 \ ??GetHostsCount_0: \ 0000000C 0020D0E5 LDRB R2,[R0, #+0] \ 00000010 3B0052E3 CMP R2,#+59 \ 00000014 20005213 CMPNE R2,#+32 \ 00000018 0D005213 CMPNE R2,#+13 \ 0000001C 0A005213 CMPNE R2,#+10 \ 00000020 00005213 CMPNE R2,#+0 \ 00000024 F7FFFF1A BNE ??GetHostsCount_1 2119 if(!*str) return cnt; \ 00000028 000052E3 CMP R2,#+0 \ 0000002C 0200001A BNE ??GetHostsCount_2 \ ??GetHostsCount_3: \ 00000030 0100A0E1 MOV R0,R1 \ 00000034 1EFF2FE1 BX LR 2120 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetHostsCount_4: \ 00000038 010080E2 ADD R0,R0,#+1 \ ??GetHostsCount_2: \ 0000003C 0020D0E5 LDRB R2,[R0, #+0] \ 00000040 3B0052E3 CMP R2,#+59 \ 00000044 20005213 CMPNE R2,#+32 \ 00000048 0D005213 CMPNE R2,#+13 \ 0000004C 0A005213 CMPNE R2,#+10 \ 00000050 0100001A BNE ??GetHostsCount_5 \ 00000054 000052E3 CMP R2,#+0 \ 00000058 F6FFFF1A BNE ??GetHostsCount_4 2121 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 2122 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 2123 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 2124 } 2125 //--------------------------------------------------------------------------- 2126 \ In segment CODE, align 4, keep-with-next 2127 void create_connect(void) 2128 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2129 // static int host_counter = 0; 2130 char hostbuf[128], buf[128]; 2131 int hostport; 2132 int ***p_res=NULL; 2133 void do_reconnect(void); 2134 SOCK_ADDR sa; 2135 //Устанавливаем соединение 2136 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable80 ;; S_ICONS 2137 int err; 2138 unsigned int ip; 2139 GBS_DelTimer(&reconnect_tmr); 2140 if (!IsGPRSEnabled()) \ 00000008 E4629FE5 LDR R6,??create_connect_0+0x4 ;; `?` \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 744185E5 STR R4,[R5, #+372] \ 0000001C 5C00A0E3 MOV R0,#+92 \ 00000020 800E80E3 ORR R0,R0,#0x800 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 8C0100EF SWI +396 \ 0000002C 3CA0A0E3 MOV R10,#+60 \ 00000030 70AE8AE3 ORR R10,R10,#0x700 \ 00000034 A70000EF SWI +167 \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0400001A BNE ??create_connect_1 2141 { 2142 is_gprs_online=0; \ 00000040 944185E5 STR R4,[R5, #+404] 2143 strcpy(logmsg,LG_GRWAITFORGPRS); \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 05008AE0 ADD R0,R10,R5 \ 0000004C 1A0000EF SWI +26 2144 SMART_REDRAW(); \ 00000050 800000EA B ??create_connect_2 2145 return; 2146 } 2147 DNR_ID=0; 2148 *socklasterr()=0; 2149 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 \ ??create_connect_1: \ 00000054 9C729FE5 LDR R7,??create_connect_0+0x8 ;; NATICQ_HOST 2150 GetHost(host_counter, NATICQ_HOST, hostbuf); 2151 hostport = GetPort(host_counter, NATICQ_HOST); 2152 host_counter++; 2153 2154 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf 2155 strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 2156 strcpy(logmsg,buf); 2157 SMART_REDRAW(); 2158 2159 ip=str2ip(hostbuf); 2160 if (ip!=0xFFFFFFFF) \ 00000058 ........ LDR R8,??DataTable64 ;; do_reconnect \ 0000005C BC4185E5 STR R4,[R5, #+444] \ 00000060 7C8100EF SWI +33148 \ 00000064 004080E5 STR R4,[R0, #+0] \ 00000068 0700A0E1 MOV R0,R7 \ 0000006C ........ BL GetHostsCount \ 00000070 C41195E5 LDR R1,[R5, #+452] \ 00000074 010040E2 SUB R0,R0,#+1 \ 00000078 010050E1 CMP R0,R1 \ 0000007C C44185B5 STRLT R4,[R5, #+452] \ 00000080 C40195E5 LDR R0,[R5, #+452] \ 00000084 14208DE2 ADD R2,SP,#+20 \ 00000088 0710A0E1 MOV R1,R7 \ 0000008C ........ BL GetHost \ 00000090 C40195E5 LDR R0,[R5, #+452] \ 00000094 0710A0E1 MOV R1,R7 \ 00000098 ........ BL GetPort \ 0000009C 0070A0E1 MOV R7,R0 \ 000000A0 C40195E5 LDR R0,[R5, #+452] \ 000000A4 0730A0E1 MOV R3,R7 \ 000000A8 010080E2 ADD R0,R0,#+1 \ 000000AC C40185E5 STR R0,[R5, #+452] \ 000000B0 14208DE2 ADD R2,SP,#+20 \ 000000B4 181086E2 ADD R1,R6,#+24 \ 000000B8 800F8AE2 ADD R0,R10,#+512 \ 000000BC 050080E0 ADD R0,R0,R5 \ 000000C0 160000EF SWI +22 \ 000000C4 14108DE2 ADD R1,SP,#+20 \ 000000C8 600F8AE2 ADD R0,R10,#+384 \ 000000CC 050080E0 ADD R0,R0,R5 \ 000000D0 1A0000EF SWI +26 \ 000000D4 94108DE2 ADD R1,SP,#+148 \ 000000D8 05008AE0 ADD R0,R10,R5 \ 000000DC 1A0000EF SWI +26 \ 000000E0 ........ BL SMART_REDRAW \ 000000E4 14008DE2 ADD R0,SP,#+20 \ 000000E8 B70100EF SWI +439 \ 000000EC 0490E0E1 MVN R9,R4 \ 000000F0 090050E1 CMP R0,R9 \ 000000F4 0500000A BEQ ??create_connect_3 2161 { 2162 sa.ip=ip; \ 000000F8 08008DE5 STR R0,[SP, #+8] 2163 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 000000FC 2C1086E2 ADD R1,R6,#+44 \ 00000100 05008AE0 ADD R0,R10,R5 \ 00000104 1A0000EF SWI +26 2164 SMART_REDRAW(); \ 00000108 ........ BL SMART_REDRAW 2165 goto L_CONNECT; \ 0000010C 3B0000EA B ??create_connect_4 2166 } 2167 strcat(logmsg,"\n"); \ ??create_connect_3: \ 00000110 76BF8FE2 ADR R11,??create_connect_0 ;; "\n" \ 00000114 0B10A0E1 MOV R1,R11 \ 00000118 05008AE0 ADD R0,R10,R5 \ 0000011C 170000EF SWI +23 2168 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000120 3C1086E2 ADD R1,R6,#+60 \ 00000124 05008AE0 ADD R0,R10,R5 \ 00000128 1A0000EF SWI +26 2169 SMART_REDRAW(); \ 0000012C ........ BL SMART_REDRAW 2170 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000130 6F2F85E2 ADD R2,R5,#+444 \ 00000134 0D10A0E1 MOV R1,SP \ 00000138 14008DE2 ADD R0,SP,#+20 \ 0000013C B60100EF SWI +438 \ 00000140 0030B0E1 MOVS R3,R0 2171 if (err) \ 00000144 1700000A BEQ ??create_connect_5 2172 { 2173 if ((err==0xC9)||(err==0xD6)) \ 00000148 C90053E3 CMP R3,#+201 \ 0000014C D6005313 CMPNE R3,#+214 \ 00000150 0600001A BNE ??create_connect_6 2174 { 2175 if (DNR_ID) \ 00000154 BC0195E5 LDR R0,[R5, #+444] \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 1100000A BEQ ??create_connect_5 2176 { 2177 host_counter--; \ 00000160 C40195E5 LDR R0,[R5, #+452] \ 00000164 010040E2 SUB R0,R0,#+1 \ 00000168 C40185E5 STR R0,[R5, #+452] 2178 return; //Ждем готовности DNR \ 0000016C 3A0000EA B ??create_connect_7 2179 } 2180 } 2181 else 2182 { 2183 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000170 482086E2 ADD R2,R6,#+72 \ 00000174 FF10A0E3 MOV R1,#+255 \ 00000178 05008AE0 ADD R0,R10,R5 \ 0000017C 1B0100EF SWI +283 2184 SMART_REDRAW(); \ 00000180 ........ BL SMART_REDRAW 2185 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000184 ........ LDR R0,??DataTable66 ;; RECONNECT_TIME \ 00000188 0820A0E1 MOV R2,R8 \ 0000018C 000090E5 LDR R0,[R0, #+0] \ 00000190 D830A0E3 MOV R3,#+216 \ 00000194 930001E0 MUL R1,R3,R0 \ 00000198 480F8AE2 ADD R0,R10,#+288 \ ??create_connect_8: \ 0000019C 050080E0 ADD R0,R0,R5 \ 000001A0 4D0000EF SWI +77 2186 return; \ 000001A4 2C0000EA B ??create_connect_7 2187 } 2188 } 2189 if (p_res) \ ??create_connect_5: \ 000001A8 00009DE5 LDR R0,[SP, #+0] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 4400000A BEQ ??create_connect_9 2190 { 2191 if (p_res[3]) \ 000001B4 0C0090E5 LDR R0,[R0, #+12] \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 4900000A BEQ ??create_connect_10 2192 { 2193 strcpy(logmsg,buf); \ 000001C0 94108DE2 ADD R1,SP,#+148 \ 000001C4 05008AE0 ADD R0,R10,R5 \ 000001C8 1A0000EF SWI +26 2194 strcat(logmsg,"\n"); \ 000001CC 0B10A0E1 MOV R1,R11 \ 000001D0 05008AE0 ADD R0,R10,R5 \ 000001D4 170000EF SWI +23 2195 strcpy(logmsg,LG_GRDNROK); \ 000001D8 581086E2 ADD R1,R6,#+88 \ 000001DC 05008AE0 ADD R0,R10,R5 \ 000001E0 1A0000EF SWI +26 2196 SMART_REDRAW(); \ 000001E4 ........ BL SMART_REDRAW 2197 DNR_TRIES=0; \ 000001E8 C04185E5 STR R4,[R5, #+448] 2198 sa.ip=p_res[3][0][0]; \ 000001EC 00109DE5 LDR R1,[SP, #+0] \ 000001F0 0C1091E5 LDR R1,[R1, #+12] \ 000001F4 001091E5 LDR R1,[R1, #+0] \ 000001F8 001091E5 LDR R1,[R1, #+0] \ 000001FC 08108DE5 STR R1,[SP, #+8] 2199 L_CONNECT: 2200 sock=socket(1,1,0); \ ??create_connect_4: \ 00000200 0020A0E3 MOV R2,#+0 \ 00000204 0110A0E3 MOV R1,#+1 \ 00000208 0100A0E1 MOV R0,R1 \ 0000020C 730100EF SWI +371 \ 00000210 780185E5 STR R0,[R5, #+376] 2201 if (sock!=-1) \ 00000214 090050E1 CMP R0,R9 \ 00000218 2100000A BEQ ??create_connect_11 2202 { 2203 sa.family=1; \ 0000021C 01A0A0E3 MOV R10,#+1 \ 00000220 B4A0CDE1 STRH R10,[SP, #+4] 2204 sa.port=htons(hostport); \ 00000224 0708A0E1 MOV R0,R7, LSL #+16 \ 00000228 2008A0E1 MOV R0,R0, LSR #+16 \ 0000022C 7A0100EF SWI +378 \ 00000230 B600CDE1 STRH R0,[SP, #+6] 2205 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 2206 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000234 780195E5 LDR R0,[R5, #+376] \ 00000238 1020A0E3 MOV R2,#+16 \ 0000023C 04108DE2 ADD R1,SP,#+4 \ 00000240 740100EF SWI +372 \ 00000244 090050E1 CMP R0,R9 \ 00000248 0500000A BEQ ??create_connect_12 2207 { 2208 connect_state=1; \ 0000024C 74A185E5 STR R10,[R5, #+372] 2209 TOTALRECEIVED=0; \ 00000250 7C4185E5 STR R4,[R5, #+380] 2210 TOTALSENDED=0; \ 00000254 804185E5 STR R4,[R5, #+384] 2211 SMART_REDRAW(); \ ??create_connect_2: \ 00000258 ........ BL SMART_REDRAW \ ??create_connect_7: \ 0000025C 45DF8DE2 ADD SP,SP,#+276 \ 00000260 F08FBDE8 POP {R4-R11,PC} 2212 } 2213 else 2214 { 2215 closesocket(sock); \ ??create_connect_12: \ 00000264 780195E5 LDR R0,[R5, #+376] \ 00000268 760100EF SWI +374 2216 sock=-1; \ 0000026C 789185E5 STR R9,[R5, #+376] 2217 LockSched(); \ 00000270 460100EF SWI +326 2218 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000274 701086E2 ADD R1,R6,#+112 \ 00000278 0100A0E3 MOV R0,#+1 \ 0000027C 480100EF SWI +328 2219 UnlockSched(); \ 00000280 470100EF SWI +327 2220 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000284 ........ LDR R0,??DataTable66 ;; RECONNECT_TIME \ 00000288 0820A0E1 MOV R2,R8 \ 0000028C 000090E5 LDR R0,[R0, #+0] \ 00000290 D830A0E3 MOV R3,#+216 \ 00000294 930001E0 MUL R1,R3,R0 \ 00000298 5C00A0E3 MOV R0,#+92 \ 0000029C 800E80E3 ORR R0,R0,#0x800 \ 000002A0 BDFFFFEA B ??create_connect_8 2221 2222 } 2223 } 2224 else 2225 { 2226 LockSched(); \ ??create_connect_11: \ 000002A4 460100EF SWI +326 2227 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 000002A8 8C1086E2 ADD R1,R6,#+140 \ 000002AC 0100A0E3 MOV R0,#+1 \ 000002B0 480100EF SWI +328 2228 UnlockSched(); \ 000002B4 470100EF SWI +327 2229 //Не осилили создания сокета, закрываем GPRS-сессию 2230 GPRS_OnOff(0,1); \ 000002B8 0110A0E3 MOV R1,#+1 \ 000002BC 0000A0E3 MOV R0,#+0 \ 000002C0 8E0100EF SWI +398 \ 000002C4 E4FFFFEA B ??create_connect_7 2231 } 2232 } 2233 } 2234 else 2235 { 2236 DNR_TRIES--; \ ??create_connect_9: \ 000002C8 C00195E5 LDR R0,[R5, #+448] \ 000002CC 010040E2 SUB R0,R0,#+1 \ 000002D0 C00185E5 STR R0,[R5, #+448] 2237 LockSched(); \ 000002D4 460100EF SWI +326 2238 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002D8 B81086E2 ADD R1,R6,#+184 \ 000002DC 0100A0E3 MOV R0,#+1 \ 000002E0 480100EF SWI +328 2239 UnlockSched(); \ 000002E4 470100EF SWI +327 \ ??create_connect_10: \ 000002E8 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002EC F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 000002F0 0A000000 DC8 "\n",+0,+0 \ 000002F4 ........ DC32 `?` \ 000002F8 ........ DC32 NATICQ_HOST 2240 } 2241 } 2242 2243 #ifdef SEND_TIMER 2244 GBSTMR send_tmr; 2245 #endif 2246 \ In segment CODE, align 4, keep-with-next 2247 void ClearSendQ(void) 2248 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 2249 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable80 ;; S_ICONS \ 00000008 900194E5 LDR R0,[R4, #+400] \ 0000000C 150000EF SWI +21 2250 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 900184E5 STR R0,[R4, #+400] 2251 sendq_l=NULL; \ 00000018 8C0184E5 STR R0,[R4, #+396] 2252 #ifdef SEND_TIMER 2253 GBS_DelTimer(&send_tmr); \ 0000001C BC00A0E3 MOV R0,#+188 \ 00000020 900E80E3 ORR R0,R0,#0x900 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 2254 #endif 2255 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 2256 \ In segment CODE, align 4, keep-with-next 2257 void end_socket(void) 2258 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 2259 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable80 ;; S_ICONS \ 00000008 780194E5 LDR R0,[R4, #+376] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0300004A BMI ??end_socket_0 2260 { 2261 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 2262 closesocket(sock); \ 0000001C 780194E5 LDR R0,[R4, #+376] \ 00000020 760100EF SWI +374 2263 } 2264 #ifdef SEND_TIMER 2265 GBS_DelTimer(&send_tmr); \ ??end_socket_0: \ 00000024 BC00A0E3 MOV R0,#+188 \ 00000028 900E80E3 ORR R0,R0,#0x900 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 8C0100EF SWI +396 2266 #endif 2267 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 2268 2269 #ifdef SEND_TIMER \ In segment CODE, align 4, keep-with-next 2270 static void resend(void) 2271 { 2272 void SendAnswer(int dummy, TPKT *p); 2273 SUBPROC((void*)SendAnswer,0,0); \ resend: \ 00000000 ........ LDR R0,??DataTable74 ;; SendAnswer \ 00000004 00402DE9 PUSH {LR} \ 00000008 0020A0E3 MOV R2,#+0 \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 710100EF SWI +369 2274 } \ 00000014 0080BDE8 POP {PC} ;; return 2275 #endif 2276 \ In segment CODE, align 4, keep-with-next 2277 void SendAnswer(int dummy, TPKT *p) 2278 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2279 int i; 2280 int j; 2281 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable80 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 740194E5 LDR R0,[R4, #+372] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 2282 { 2283 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 2284 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 2285 } 2286 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 1E00000A BEQ ??SendAnswer_1 2287 { 2288 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 2289 TOTALSENDED+=j; \ 00000034 800194E5 LDR R0,[R4, #+384] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 800184E5 STR R0,[R4, #+384] 2290 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 880194E5 LDR R0,[R4, #+392] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 880184E5 STR R0,[R4, #+392] 2291 //Проверяем, не надо ли добавить в очередь 2292 if (sendq_p) \ 0000004C 900194E5 LDR R0,[R4, #+400] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 2293 { 2294 //Есть очередь, добавляем в нее 2295 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 8C1194E5 LDR R1,[R4, #+396] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 900184E5 STR R0,[R4, #+400] 2296 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 8C0194E5 LDR R0,[R4, #+396] \ 0000006C 903194E5 LDR R3,[R4, #+400] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 2297 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 2298 sendq_l+=j; \ 00000088 8C0194E5 LDR R0,[R4, #+396] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 8C0184E5 STR R0,[R4, #+396] 2299 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 2300 } 2301 sendq_p=p; \ ??SendAnswer_2: \ 00000098 906184E5 STR R6,[R4, #+400] 2302 sendq_l=j; \ 0000009C 8C5184E5 STR R5,[R4, #+396] \ 000000A0 000000EA B ??SendAnswer_1 2303 } 2304 //Отправляем уже существующее в очереди 2305 while((i=sendq_l)!=0) 2306 { 2307 if (i>0x400) i=0x400; 2308 j=send(sock,(void *)sendq_p,i,0); 2309 snprintf(logmsg,255,"send res %d",j); 2310 SMART_REDRAW(); 2311 if (j<0) 2312 { 2313 j=*socklasterr(); 2314 if ((j==0xC9)||(j==0xD6)) 2315 { 2316 //Передали что хотели 2317 strcpy(logmsg,"Send delayed..."); 2318 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 2319 } 2320 else 2321 { 2322 //Ошибка 2323 LockSched(); 2324 ShowMSG(1,(int)"Send error!"); 2325 UnlockSched(); 2326 end_socket(); 2327 return; 2328 } 2329 } 2330 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное 2331 if (j` \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 400E80E3 ORR R0,R0,#0x400 \ 000000C8 000057E1 CMP R7,R0 \ 000000CC 780194E5 LDR R0,[R4, #+376] \ 000000D0 407EA0A3 MOVGE R7,#+1024 \ 000000D4 0030A0E3 MOV R3,#+0 \ 000000D8 0720A0E1 MOV R2,R7 \ 000000DC 790100EF SWI +377 \ 000000E0 0050A0E1 MOV R5,R0 \ 000000E4 3C80A0E3 MOV R8,#+60 \ 000000E8 708E88E3 ORR R8,R8,#0x700 \ 000000EC 0530A0E1 MOV R3,R5 \ 000000F0 0920A0E1 MOV R2,R9 \ 000000F4 FF10A0E3 MOV R1,#+255 \ 000000F8 040088E0 ADD R0,R8,R4 \ 000000FC 1B0100EF SWI +283 \ 00000100 ........ BL SMART_REDRAW \ 00000104 000055E3 CMP R5,#+0 \ 00000108 0F00005A BPL ??SendAnswer_6 \ 0000010C 7C8100EF SWI +33148 \ 00000110 005090E5 LDR R5,[R0, #+0] \ 00000114 C90055E3 CMP R5,#+201 \ 00000118 D6005513 CMPNE R5,#+214 \ 0000011C 0300001A BNE ??SendAnswer_7 \ 00000120 0C1089E2 ADD R1,R9,#+12 \ 00000124 040088E0 ADD R0,R8,R4 \ 00000128 1A0000EF SWI +26 \ 0000012C F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_7: \ 00000130 460100EF SWI +326 \ 00000134 1C1089E2 ADD R1,R9,#+28 \ 00000138 0100A0E3 MOV R0,#+1 \ 0000013C 480100EF SWI +328 \ 00000140 470100EF SWI +327 \ 00000144 ........ BL end_socket \ 00000148 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 0000014C 8C0194E5 LDR R0,[R4, #+396] \ 00000150 052040E0 SUB R2,R0,R5 \ 00000154 8C2184E5 STR R2,[R4, #+396] \ 00000158 900194E5 LDR R0,[R4, #+400] \ 0000015C 001085E0 ADD R1,R5,R0 \ 00000160 1E0100EF SWI +286 \ 00000164 070055E1 CMP R5,R7 \ 00000168 CDFFFFAA BGE ??SendAnswer_3 \ 0000016C 24209FE5 LDR R2,??SendAnswer_5+0x4 ;; resend \ 00000170 C11FC8E3 BIC R1,R8,#0x304 \ 00000174 A00F88E2 ADD R0,R8,#+640 \ 00000178 040080E0 ADD R0,R0,R4 \ 0000017C 4D0000EF SWI +77 \ 00000180 F083BDE8 POP {R4-R9,PC} 2340 } 2341 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000184 0100A0E1 MOV R0,R1 \ 00000188 150000EF SWI +21 2342 sendq_p=NULL; \ 0000018C 906184E5 STR R6,[R4, #+400] 2343 } \ 00000190 F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000194 ........ DC32 `?` \ 00000198 ........ DC32 resend 2344 2345 extern const char pingsnd[64]; 2346 \ In segment CODE, align 4, keep-with-next 2347 void send_login(int dummy, TPKT *p) 2348 { 2349 connect_state=2; 2350 char rev[16]; 2351 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 2352 //А Вова будет банить на форуме! 2353 snprintf(rev,9,"Sie_%04d",__SVN_REVISION__); \ send_login: \ 00000000 88209FE5 LDR R2,??send_login_0 ;; `?` \ 00000004 F0402DE9 PUSH {R4-R7,LR} \ 00000008 ........ LDR R6,??DataTable80 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 740186E5 STR R0,[R6, #+372] \ 00000020 0A30A0E3 MOV R3,#+10 \ 00000024 803E83E3 ORR R3,R3,#0x800 \ 00000028 0910A0E3 MOV R1,#+9 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 1B0100EF SWI +283 2354 2355 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 2356 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable73 ;; UIN 2357 p2->pkt.type=T_SETCLIENT_ID; 2358 p2->pkt.data_len=8; 2359 memcpy(p2->data,rev,8); \ 00000044 0820A0E3 MOV R2,#+8 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 000087E5 STR R0,[R7, #+0] \ 00000054 2000A0E3 MOV R0,#+32 \ 00000058 B400C7E1 STRH R0,[R7, #+4] \ 0000005C 0800A0E3 MOV R0,#+8 \ 00000060 B600C7E1 STRH R0,[R7, #+6] \ 00000064 080087E2 ADD R0,R7,#+8 \ 00000068 1E0100EF SWI +286 2360 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 2361 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 2362 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 700186E5 STR R0,[R6, #+368] 2363 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 2364 \ In segment CODE, align 4, keep-with-next 2365 void do_ping(void) 2366 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 2367 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 2368 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable73 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 2369 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 2370 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2371 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2372 } 2373 \ In segment CODE, align 4, keep-with-next 2374 void SendMSGACK(int i) 2375 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2376 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2377 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 2378 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2379 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2380 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2381 } 2382 \ In segment CODE, align 4, keep-with-next 2383 void RequestXText(unsigned int uin) 2384 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2385 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2386 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 2387 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2388 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2389 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable74 ;; SendAnswer \ 0000002C 710100EF SWI +369 2390 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 2391 2392 extern int main2_count; 2393 extern const unsigned int ping_time_config; 2394 int ping_time; 2395 //#ifdef EVILFOX 2396 //#else 2397 extern const char ignor_list[256]; 2398 //#endif 2399 char I_UIN[9]; 2400 \ In segment CODE, align 4, keep-with-next 2401 void get_answer(void) 2402 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2403 void *p; 2404 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable80 ;; S_ICONS \ 00000008 18D04DE2 SUB SP,SP,#+24 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 2405 int j; 2406 int n; 2407 char rb[1024]; 2408 char *rp=rb; 2409 if (connect_state<2) return; \ 00000010 740195E5 LDR R0,[R5, #+372] \ 00000014 709195E5 LDR R9,[R5, #+368] \ 00000018 18608DE2 ADD R6,SP,#+24 \ 0000001C 020050E3 CMP R0,#+2 \ 00000020 500100BA BLT ??get_answer_1 \ 00000024 0A0079E3 CMN R9,#+10 \ 00000028 4E01000A BEQ ??get_answer_1 2410 if (i==EOP) return; 2411 j=recv(sock,rb,sizeof(rb),0); \ 0000002C 780195E5 LDR R0,[R5, #+376] \ 00000030 ........ LDR R10,??DataTable76 ;; `?` \ 00000034 0030A0E3 MOV R3,#+0 \ 00000038 402EA0E3 MOV R2,#+1024 \ 0000003C 18108DE2 ADD R1,SP,#+24 \ 00000040 780100EF SWI +376 \ 00000044 0070A0E1 MOV R7,R0 \ 00000048 0E0000EA B ??get_answer_2 2412 while(j>0) 2413 { 2414 if (i<0) 2415 { 2416 //Принимаем заголовок 2417 n=-i; //Требуемое количество байт 2418 if (j=0) 2425 { 2426 //Принимаем тельце ;) 2427 n=RXbuf.pkt.data_len; //Всего в тельце 2428 if (n>16383) 2429 { 2430 //Слишком много 2431 strcpy(logmsg,LG_GRBADPACKET); 2432 end_socket(); 2433 RXstate=EOP; 2434 return; 2435 } 2436 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2437 if (n>0) 2438 { 2439 if (jhour*3600+pt->min*60+pt->sec; 2582 s1-=s2; 2583 if (s1<0) s1+=86400; 2584 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 2585 sprintf(PINGO, "Ping: %dsec",s1); 2586 LockSched(); 2587 if(janis==1) 2588 { 2589 ShowMSG(1,(int)logmsg); 2590 Play(pingsnd); 2591 janis=0; 2592 } 2593 else 2594 { 2595 if(ping_time==0) 2596 { 2597 ping_time=ping_time_config; 2598 Play(pingsnd); 2599 } 2600 else 2601 ping_time--; 2602 } 2603 UnlockSched(); 2604 } 2605 break; 2606 case T_LASTPRIVACY: 2607 n=i+sizeof(PKT); \ ??get_answer_3: \ 0000004C 0040A0E1 MOV R4,R0 2608 p=malloc(n); \ ??get_answer_4: \ 00000050 140000EF SWI +20 \ 00000054 00B0A0E1 MOV R11,R0 2609 memcpy(p,&RXbuf,n); \ 00000058 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 0000005C 0810A0E1 MOV R1,R8 \ 00000060 1E0100EF SWI +286 2610 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000064 780195E5 LDR R0,[R5, #+376] \ 00000068 0B30A0E1 MOV R3,R11 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 0020A0E3 MOV R2,#+0 \ 00000074 FC1FA0E3 MOV R1,#+1008 \ 00000078 0900A0E1 MOV R0,R9 \ 0000007C 000100EF SWI +256 \ ??get_answer_6: \ 00000080 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 2611 break; 2612 } 2613 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000084 0790E0E3 MVN R9,#+7 \ ??get_answer_2: \ 00000088 010057E3 CMP R7,#+1 \ 0000008C 340100BA BLT ??get_answer_8 \ 00000090 E0849FE5 LDR R8,??get_answer_9+0x4 ;; RXbuf \ 00000094 000059E3 CMP R9,#+0 \ 00000098 0A00005A BPL ??get_answer_10 \ 0000009C 004069E2 RSB R4,R9,#+0 \ 000000A0 040057E1 CMP R7,R4 \ 000000A4 0740A0B1 MOVLT R4,R7 \ 000000A8 0420A0E1 MOV R2,R4 \ 000000AC 0610A0E1 MOV R1,R6 \ 000000B0 080089E0 ADD R0,R9,R8 \ 000000B4 080080E2 ADD R0,R0,#+8 \ 000000B8 1E0100EF SWI +286 \ 000000BC 099084E0 ADD R9,R4,R9 \ 000000C0 047047E0 SUB R7,R7,R4 \ 000000C4 066084E0 ADD R6,R4,R6 \ ??get_answer_10: \ 000000C8 000059E3 CMP R9,#+0 \ 000000CC EDFFFF4A BMI ??get_answer_2 \ 000000D0 B640D8E1 LDRH R4,[R8, #+6] \ 000000D4 400C54E3 CMP R4,#+16384 \ 000000D8 0A0000BA BLT ??get_answer_11 \ 000000DC B0108AE2 ADD R1,R10,#+176 \ 000000E0 3C00A0E3 MOV R0,#+60 \ 000000E4 700E80E3 ORR R0,R0,#0x700 \ 000000E8 050080E0 ADD R0,R0,R5 \ 000000EC 1A0000EF SWI +26 \ 000000F0 ........ BL end_socket \ 000000F4 0900E0E3 MVN R0,#+9 \ 000000F8 700185E5 STR R0,[R5, #+368] \ 000000FC 18D08DE2 ADD SP,SP,#+24 \ 00000100 40DE8DE2 ADD SP,SP,#+1024 \ 00000104 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000108 094044E0 SUB R4,R4,R9 \ 0000010C 010054E3 CMP R4,#+1 \ 00000110 090000BA BLT ??get_answer_12 \ 00000114 040057E1 CMP R7,R4 \ 00000118 0740A0B1 MOVLT R4,R7 \ 0000011C 0420A0E1 MOV R2,R4 \ 00000120 0610A0E1 MOV R1,R6 \ 00000124 080089E0 ADD R0,R9,R8 \ 00000128 080080E2 ADD R0,R0,#+8 \ 0000012C 1E0100EF SWI +286 \ 00000130 099084E0 ADD R9,R4,R9 \ 00000134 047047E0 SUB R7,R7,R4 \ 00000138 066084E0 ADD R6,R4,R6 \ ??get_answer_12: \ 0000013C B600D8E1 LDRH R0,[R8, #+6] \ 00000140 090050E1 CMP R0,R9 \ 00000144 CFFFFF1A BNE ??get_answer_2 \ 00000148 7C1195E5 LDR R1,[R5, #+380] \ 0000014C 080089E2 ADD R0,R9,#+8 \ 00000150 011080E0 ADD R1,R0,R1 \ 00000154 7C1185E5 STR R1,[R5, #+380] \ 00000158 841195E5 LDR R1,[R5, #+388] \ 0000015C 0020A0E3 MOV R2,#+0 \ 00000160 011080E0 ADD R1,R0,R1 \ 00000164 841185E5 STR R1,[R5, #+388] \ 00000168 081089E0 ADD R1,R9,R8 \ 0000016C 0820C1E5 STRB R2,[R1, #+8] \ 00000170 B410D8E1 LDRH R1,[R8, #+4] \ 00000174 094089E2 ADD R4,R9,#+9 \ 00000178 0990A0E3 MOV R9,#+9 \ 0000017C 429C89E3 ORR R9,R9,#0x4200 \ 00000180 031041E2 SUB R1,R1,#+3 \ 00000184 1C0051E3 CMP R1,#+28 \ 00000188 BDFFFF8A BHI ??get_answer_7 \ 0000018C 022F8FE2 ADR R2,??get_answer_0 \ 00000190 8110A0E1 MOV R1,R1, LSL #+1 \ 00000194 F12092E1 LDRSH R2,[R2, R1] \ 00000198 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 0000019C 4E000E00B9FF DC16 +78,+14,+65465,+69 \ 4500 \ 000001A4 2B00B9FF2D00 DC16 +43,+65465,+45,+65465 \ B9FF \ 000001AC B9FFB9FF9D00 DC16 +65465,+65465,+157,+65465 \ B9FF \ 000001B4 B9FFA300A900 DC16 +65465,+163,+169,+65465 \ B9FF \ 000001BC AE002B002B00 DC16 +174,+43,+43,+65465 \ B9FF \ 000001C4 B9FFB9FF2B00 DC16 +65465,+65465,+43,+65465 \ B9FF \ 000001CC B9FFB9FFB9FF DC16 +65465,+65465,+65465,+65465 \ B9FF \ 000001D4 ABFF0000 DC16 +65451,+0 \ ??get_answer_13: \ 000001D8 0400A0E1 MOV R0,R4 \ 000001DC 140000EF SWI +20 \ 000001E0 00B0A0E1 MOV R11,R0 \ 000001E4 0420A0E1 MOV R2,R4 \ 000001E8 0810A0E1 MOV R1,R8 \ 000001EC 1E0100EF SWI +286 \ 000001F0 780195E5 LDR R0,[R5, #+376] \ 000001F4 0B30A0E1 MOV R3,R11 \ 000001F8 01002DE9 PUSH {R0} \ 000001FC 0020A0E3 MOV R2,#+0 \ 00000200 FC1FA0E3 MOV R1,#+1008 \ 00000204 0900A0E1 MOV R0,R9 \ 00000208 000100EF SWI +256 \ 0000020C 68039FE5 LDR R0,??get_answer_9+0x8 ;; sndStartup \ 00000210 ........ BL Play \ 00000214 083088E2 ADD R3,R8,#+8 \ 00000218 D52F8FE2 ADR R2,??get_answer_9 ;; "%s" \ 0000021C FF10A0E3 MOV R1,#+255 \ 00000220 3C00A0E3 MOV R0,#+60 \ 00000224 700E80E3 ORR R0,R0,#0x700 \ 00000228 050080E0 ADD R0,R0,R5 \ 0000022C 1B0100EF SWI +283 \ 00000230 0300A0E3 MOV R0,#+3 \ 00000234 740185E5 STR R0,[R5, #+372] \ 00000238 C40195E5 LDR R0,[R5, #+452] \ 0000023C 010040E2 SUB R0,R0,#+1 \ 00000240 C40185E5 STR R0,[R5, #+452] \ 00000244 ........ BL SMART_REDRAW \ 00000248 8CFFFFEA B ??get_answer_6 \ ??get_answer_14: \ 0000024C 0400A0E1 MOV R0,R4 \ 00000250 7EFFFFEA B ??get_answer_4 \ ??get_answer_15: \ 00000254 0040A0E1 MOV R4,R0 \ 00000258 140000EF SWI +20 \ 0000025C 00B0A0E1 MOV R11,R0 \ 00000260 0420A0E1 MOV R2,R4 \ 00000264 0810A0E1 MOV R1,R8 \ 00000268 1E0100EF SWI +286 \ 0000026C B800D8E1 LDRH R0,[R8, #+8] \ 00000270 BC208AE2 ADD R2,R10,#+188 \ 00000274 FF10A0E3 MOV R1,#+255 \ 00000278 01002DE9 PUSH {R0} \ 0000027C 003098E5 LDR R3,[R8, #+0] \ 00000280 3C00A0E3 MOV R0,#+60 \ 00000284 700E80E3 ORR R0,R0,#0x700 \ 00000288 050080E0 ADD R0,R0,R5 \ 0000028C 1B0100EF SWI +283 \ 00000290 780195E5 LDR R0,[R5, #+376] \ 00000294 0B30A0E1 MOV R3,R11 \ 00000298 01002DE9 PUSH {R0} \ 0000029C 0020A0E3 MOV R2,#+0 \ 000002A0 FC1FA0E3 MOV R1,#+1008 \ 000002A4 0900A0E1 MOV R0,R9 \ 000002A8 000100EF SWI +256 \ 000002AC 08D08DE2 ADD SP,SP,#+8 \ 000002B0 73FFFFEA B ??get_answer_7 \ ??get_answer_16: \ 000002B4 083088E2 ADD R3,R8,#+8 \ 000002B8 C8208AE2 ADD R2,R10,#+200 \ 000002BC FF10A0E3 MOV R1,#+255 \ 000002C0 3C00A0E3 MOV R0,#+60 \ 000002C4 700E80E3 ORR R0,R0,#0x700 \ 000002C8 050080E0 ADD R0,R0,R5 \ 000002CC 1B0100EF SWI +283 \ 000002D0 ........ BL SMART_REDRAW \ 000002D4 6AFFFFEA B ??get_answer_7 \ ??get_answer_17: \ 000002D8 0400A0E1 MOV R0,R4 \ 000002DC 140000EF SWI +20 \ 000002E0 00B0A0E1 MOV R11,R0 \ 000002E4 0420A0E1 MOV R2,R4 \ 000002E8 0810A0E1 MOV R1,R8 \ 000002EC 1E0100EF SWI +286 \ 000002F0 08008BE2 ADD R0,R11,#+8 \ 000002F4 030000EA B ??get_answer_18 \ ??get_answer_19: \ 000002F8 030051E3 CMP R1,#+3 \ 000002FC 2010A0B3 MOVLT R1,#+32 \ 00000300 0010C0B5 STRBLT R1,[R0, #+0] \ 00000304 010080E2 ADD R0,R0,#+1 \ ??get_answer_18: \ 00000308 0010D0E5 LDRB R1,[R0, #+0] \ 0000030C 000051E3 CMP R1,#+0 \ 00000310 F8FFFF1A BNE ??get_answer_19 \ 00000314 002098E5 LDR R2,[R8, #+0] \ 00000318 CC40A0E3 MOV R4,#+204 \ 0000031C 904E84E3 ORR R4,R4,#0x900 \ 00000320 D0108AE2 ADD R1,R10,#+208 \ 00000324 050084E0 ADD R0,R4,R5 \ 00000328 160000EF SWI +22 \ 0000032C ........ LDR R0,??DataTable77 ;; ignor_list \ 00000330 051084E0 ADD R1,R4,R5 \ 00000334 180100EF SWI +280 \ 00000338 000050E3 CMP R0,#+0 \ 0000033C 50FFFF1A BNE ??get_answer_7 \ 00000340 080088E2 ADD R0,R8,#+8 \ 00000344 01002DE9 PUSH {R0} \ 00000348 003098E5 LDR R3,[R8, #+0] \ 0000034C D8208AE2 ADD R2,R10,#+216 \ 00000350 FF10A0E3 MOV R1,#+255 \ 00000354 A40F44E2 SUB R0,R4,#+656 \ 00000358 20429FE5 LDR R4,??get_answer_9+0xC ;; sndMsg \ 0000035C 050080E0 ADD R0,R0,R5 \ 00000360 1B0100EF SWI +283 \ 00000364 7C0195E5 LDR R0,[R5, #+380] \ 00000368 ........ BL SendMSGACK \ 0000036C 780195E5 LDR R0,[R5, #+376] \ 00000370 0B30A0E1 MOV R3,R11 \ 00000374 01002DE9 PUSH {R0} \ 00000378 0020A0E3 MOV R2,#+0 \ 0000037C FC1FA0E3 MOV R1,#+1008 \ 00000380 0900A0E1 MOV R0,R9 \ 00000384 000100EF SWI +256 \ 00000388 ........ BL SMART_REDRAW \ 0000038C ........ LDR R0,??DataTable78 ;; extended_sounds \ 00000390 000090E5 LDR R0,[R0, #+0] \ 00000394 08D08DE2 ADD SP,SP,#+8 \ 00000398 000050E3 CMP R0,#+0 \ 0000039C 0200001A BNE ??get_answer_20 \ 000003A0 0400A0E1 MOV R0,R4 \ ??get_answer_21: \ 000003A4 ........ BL Play \ 000003A8 35FFFFEA B ??get_answer_7 \ ??get_answer_20: \ 000003AC 000098E5 LDR R0,[R8, #+0] \ 000003B0 CC219FE5 LDR R2,??get_answer_9+0x10 ;; sndMsg2 \ 000003B4 E40085E5 STR R0,[R5, #+228] \ 000003B8 0010A0E3 MOV R1,#+0 \ 000003BC 04108DE5 STR R1,[SP, #+4] \ 000003C0 E43095E5 LDR R3,[R5, #+228] \ 000003C4 D18FA0E3 MOV R8,#+836 \ 000003C8 E4108AE2 ADD R1,R10,#+228 \ 000003CC 050088E0 ADD R0,R8,R5 \ 000003D0 160000EF SWI +22 \ 000003D4 04308DE2 ADD R3,SP,#+4 \ 000003D8 8020A0E3 MOV R2,#+128 \ 000003DC 801CA0E3 MOV R1,#+32768 \ 000003E0 050088E0 ADD R0,R8,R5 \ 000003E4 0A0000EF SWI +10 \ 000003E8 00008DE5 STR R0,[SP, #+0] \ 000003EC 00009DE5 LDR R0,[SP, #+0] \ 000003F0 010070E3 CMN R0,#+1 \ 000003F4 0400000A BEQ ??get_answer_22 \ 000003F8 00009DE5 LDR R0,[SP, #+0] \ 000003FC 04108DE2 ADD R1,SP,#+4 \ 00000400 0D0000EF SWI +13 \ 00000404 050088E0 ADD R0,R8,R5 \ 00000408 E5FFFFEA B ??get_answer_21 \ ??get_answer_22: \ 0000040C 0400A0E1 MOV R0,R4 \ 00000410 E3FFFFEA B ??get_answer_21 \ ??get_answer_23: \ 00000414 460100EF SWI +326 \ 00000418 081088E2 ADD R1,R8,#+8 \ 0000041C 0100A0E3 MOV R0,#+1 \ 00000420 480100EF SWI +328 \ ??get_answer_24: \ 00000424 470100EF SWI +327 \ 00000428 15FFFFEA B ??get_answer_7 \ ??get_answer_25: \ 0000042C 0800A0E1 MOV R0,R8 \ 00000430 ........ BL FindContactLOGQByAck \ 00000434 000050E3 CMP R0,#+0 \ 00000438 0100000A BEQ ??get_answer_26 \ 0000043C 44019FE5 LDR R0,??get_answer_9+0x14 ;; sndMsgSent \ 00000440 ........ BL Play \ ??get_answer_26: \ 00000444 0A00A0E3 MOV R0,#+10 \ 00000448 140000EF SWI +20 \ 0000044C 00B0A0E1 MOV R11,R0 \ 00000450 0A20A0E3 MOV R2,#+10 \ 00000454 00FFFFEA B ??get_answer_5 \ ??get_answer_27: \ 00000458 08108DE2 ADD R1,SP,#+8 \ 0000045C 10008DE2 ADD R0,SP,#+16 \ 00000460 B40000EF SWI +180 \ 00000464 0800DDE5 LDRB R0,[SP, #+8] \ 00000468 0920DDE5 LDRB R2,[SP, #+9] \ 0000046C E11EA0E3 MOV R1,#+3600 \ 00000470 3C30A0E3 MOV R3,#+60 \ 00000474 930202E0 MUL R2,R3,R2 \ 00000478 912020E0 MLA R0,R1,R0,R2 \ 0000047C 0A10DDE5 LDRB R1,[SP, #+10] \ 00000480 E12EA0E3 MOV R2,#+3600 \ 00000484 000081E0 ADD R0,R1,R0 \ 00000488 0810D8E5 LDRB R1,[R8, #+8] \ 0000048C 920101E0 MUL R1,R2,R1 \ 00000490 F0208AE2 ADD R2,R10,#+240 \ 00000494 010040E0 SUB R0,R0,R1 \ 00000498 0910D8E5 LDRB R1,[R8, #+9] \ 0000049C 930101E0 MUL R1,R3,R1 \ 000004A0 010040E0 SUB R0,R0,R1 \ 000004A4 0A10D8E5 LDRB R1,[R8, #+10] \ 000004A8 DC809FE5 LDR R8,??get_answer_9+0x18 ;; janis \ 000004AC 014050E0 SUBS R4,R0,R1 \ 000004B0 500BA043 MOVMI R0,#+81920 \ 000004B4 460D8043 ORRMI R0,R0,#0x1180 \ 000004B8 04408040 ADDMI R4,R0,R4 \ 000004BC 010084E2 ADD R0,R4,#+1 \ 000004C0 01002DE9 PUSH {R0} \ 000004C4 0430A0E1 MOV R3,R4 \ 000004C8 FF10A0E3 MOV R1,#+255 \ 000004CC 3C00A0E3 MOV R0,#+60 \ 000004D0 700E80E3 ORR R0,R0,#0x700 \ 000004D4 050080E0 ADD R0,R0,R5 \ 000004D8 1B0100EF SWI +283 \ 000004DC 0420A0E1 MOV R2,R4 \ 000004E0 411F8AE2 ADD R1,R10,#+260 \ 000004E4 A4409FE5 LDR R4,??get_answer_9+0x1C ;; pingsnd \ 000004E8 1400A0E3 MOV R0,#+20 \ 000004EC 400E80E3 ORR R0,R0,#0x400 \ 000004F0 050080E0 ADD R0,R0,R5 \ 000004F4 160000EF SWI +22 \ 000004F8 460100EF SWI +326 \ 000004FC 000098E5 LDR R0,[R8, #+0] \ 00000500 04D08DE2 ADD SP,SP,#+4 \ 00000504 010050E3 CMP R0,#+1 \ 00000508 0900001A BNE ??get_answer_28 \ 0000050C 3C00A0E3 MOV R0,#+60 \ 00000510 700E80E3 ORR R0,R0,#0x700 \ 00000514 051080E0 ADD R1,R0,R5 \ 00000518 0100A0E3 MOV R0,#+1 \ 0000051C 480100EF SWI +328 \ 00000520 0400A0E1 MOV R0,R4 \ 00000524 ........ BL Play \ 00000528 0000A0E3 MOV R0,#+0 \ 0000052C 000088E5 STR R0,[R8, #+0] \ 00000530 BBFFFFEA B ??get_answer_24 \ ??get_answer_28: \ 00000534 C80195E5 LDR R0,[R5, #+456] \ 00000538 000050E3 CMP R0,#+0 \ 0000053C 0500001A BNE ??get_answer_29 \ 00000540 4C009FE5 LDR R0,??get_answer_9+0x20 ;; ping_time_config \ 00000544 000090E5 LDR R0,[R0, #+0] \ 00000548 C80185E5 STR R0,[R5, #+456] \ 0000054C 0400A0E1 MOV R0,R4 \ 00000550 ........ BL Play \ 00000554 B2FFFFEA B ??get_answer_24 \ ??get_answer_29: \ 00000558 010040E2 SUB R0,R0,#+1 \ 0000055C C80185E5 STR R0,[R5, #+456] \ 00000560 AFFFFFEA B ??get_answer_24 2614 } 2615 } 2616 } 2617 RXstate=i; \ ??get_answer_8: \ 00000564 709185E5 STR R9,[R5, #+368] 2618 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 2619 // SMART_REDRAW(); 2620 } \ ??get_answer_1: \ 00000568 18D08DE2 ADD SP,SP,#+24 \ 0000056C 40DE8DE2 ADD SP,SP,#+1024 \ 00000570 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 00000574 25730000 DC8 "%s",+0 \ 00000578 ........ DC32 RXbuf \ 0000057C ........ DC32 sndStartup \ 00000580 ........ DC32 sndMsg \ 00000584 ........ DC32 sndMsg2 \ 00000588 ........ DC32 sndMsgSent \ 0000058C ........ DC32 janis \ 00000590 ........ DC32 pingsnd \ 00000594 ........ DC32 ping_time_config 2621 2622 2623 extern int main_count; 2624 2625 //=====================add to main info==================== 2626 2627 2628 char a_txt[45]; 2629 char s_txt[45]; 2630 char d_txt[45]; 2631 char f_txt[45]; 2632 char g_txt[45]; 2633 //char de[64]; 2634 //char du[38]; 2635 extern const unsigned int msg_d_x; 2636 extern const unsigned int msg_d_y; 2637 extern const unsigned int main_lenght; 2638 extern const int use_cutter; 2639 2640 \ In segment CODE, align 4, keep-with-next 2641 void AddToMain(const char *nameu,char *si) 2642 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0180A0E1 MOV R8,R1 2643 char *de=malloc(64); \ 0000000C 4000A0E3 MOV R0,#+64 \ 00000010 140000EF SWI +20 \ 00000014 0050A0E1 MOV R5,R0 2644 int text_l; 2645 int iz; 2646 int name_l; 2647 name_l=0; 2648 text_l=0; 2649 name_l=strlen(nameu); \ 00000018 0400A0E1 MOV R0,R4 \ 0000001C 1B0000EF SWI +27 2650 // char *du=malloc(64);a_txt 2651 iz=0; 2652 #ifdef ELKA 2653 text_l=main_lenght-name_l; 2654 #else 2655 text_l=main_lenght-name_l; \ 00000020 EC119FE5 LDR R1,??AddToMain_0 ;; main_lenght \ 00000024 0070A0E3 MOV R7,#+0 \ 00000028 001091E5 LDR R1,[R1, #+0] 2656 #endif 2657 2658 if(strlen(si)>text_l) \ 0000002C 0060A0E3 MOV R6,#+0 \ 00000030 009041E0 SUB R9,R1,R0 \ 00000034 0800A0E1 MOV R0,R8 \ 00000038 1B0000EF SWI +27 \ 0000003C 000059E1 CMP R9,R0 \ 00000040 0800003A BCC ??AddToMain_1 2659 { 2660 /* 2661 char *du=malloc(text_l); 2662 strncpy(du,si,text_l); 2663 sprintf(de,"%s%s",du,"..."); 2664 mfree(du); 2665 } 2666 */ 2667 while(text_l!=0) 2668 { 2669 de[iz]=si[iz]; 2670 iz++; 2671 text_l--; 2672 } 2673 if(use_cutter) 2674 { 2675 de[iz]='.'; 2676 iz++; 2677 de[iz]='.'; 2678 iz++; 2679 de[iz]='.'; 2680 iz++; 2681 } 2682 de[iz]='\0'; 2683 } 2684 else 2685 strcpy(de, si); \ 00000044 0810A0E1 MOV R1,R8 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 1A0000EF SWI +26 2686 iz=0; \ ??AddToMain_2: \ 00000050 0070A0E3 MOV R7,#+0 \ 00000054 1A0000EA B ??AddToMain_3 \ ??AddToMain_4: \ 00000058 0810D7E7 LDRB R1,[R7, +R8] \ 0000005C 019049E2 SUB R9,R9,#+1 \ 00000060 0510C7E7 STRB R1,[R7, +R5] \ 00000064 0070A0E1 MOV R7,R0 \ ??AddToMain_1: \ 00000068 010087E2 ADD R0,R7,#+1 \ 0000006C 000059E3 CMP R9,#+0 \ 00000070 F8FFFF1A BNE ??AddToMain_4 \ 00000074 9C119FE5 LDR R1,??AddToMain_0+0x4 ;; use_cutter \ 00000078 001091E5 LDR R1,[R1, #+0] \ 0000007C 000051E3 CMP R1,#+0 \ 00000080 0500000A BEQ ??AddToMain_5 \ 00000084 2E10A0E3 MOV R1,#+46 \ 00000088 0510C7E7 STRB R1,[R7, +R5] \ 0000008C 0510C0E7 STRB R1,[R0, +R5] \ 00000090 010080E2 ADD R0,R0,#+1 \ 00000094 0510C0E7 STRB R1,[R0, +R5] \ 00000098 017080E2 ADD R7,R0,#+1 \ ??AddToMain_5: \ 0000009C 0560C7E7 STRB R6,[R7, +R5] \ 000000A0 EAFFFFEA B ??AddToMain_2 2687 while(strlen(de)!=iz) 2688 { 2689 // if(d[i]==0x2A) d[i]=0x20; 2690 // if(d[i]==0x27) d[i]=0x20; 2691 // if(d[i]==0x22) d[i]=0x20; 2692 // if(d[i]==0x26) d[i]=0x20; 2693 // if(d[i]==0x3D) d[i]=0x20; 2694 // if(d[i]==0x3C) d[i]=0x20; 2695 // if(d[i]==0x3E) d[i]=0x20; 2696 // if(d[i]==0x7B) d[i]=0x20; 2697 // if(d[i]==0x7D) d[i]=0x20; 2698 // if(d[i]==0x5B) d[i]=0x20; 2699 // if(d[i]==0x5D) d[i]=0x20; 2700 // if(d[i]==0x23) d[i]=0x20; 2701 // if(d[i]==0x2F) d[i]=0x20; 2702 // if(d[i]==0x5C) d[i]=0x20; 2703 // if(d[i]==0x7E) d[i]=0x20; 2704 // if(d[i]==0x5E) d[i]=0x20; 2705 // if(d[i]==0xAC) d[i]=0x20; 2706 // if(d[i]==0xA3) d[i]=0x20; 2707 // if(d[i]==0x24) d[i]=0x20; 2708 // if(d[i]==0xA5) d[i]=0x20; 2709 if(de[iz]==0x0D) de[iz]=0x20; \ ??AddToMain_6: \ 000000A4 0510D7E7 LDRB R1,[R7, +R5] \ 000000A8 2000A0E3 MOV R0,#+32 \ 000000AC 0D0051E3 CMP R1,#+13 \ 000000B0 0500C707 STRBEQ R0,[R7, +R5] 2710 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B4 0510D7E7 LDRB R1,[R7, +R5] \ 000000B8 0A0051E3 CMP R1,#+10 \ 000000BC 0500C707 STRBEQ R0,[R7, +R5] 2711 iz++; \ 000000C0 017087E2 ADD R7,R7,#+1 2712 } \ ??AddToMain_3: \ 000000C4 0500A0E1 MOV R0,R5 \ 000000C8 1B0000EF SWI +27 \ 000000CC 070050E1 CMP R0,R7 \ 000000D0 F3FFFF1A BNE ??AddToMain_6 2713 de[iz]='\0'; \ 000000D4 ........ LDR R8,??DataTable79 ;; main_count \ 000000D8 0560C7E7 STRB R6,[R7, +R5] \ 000000DC 000098E5 LDR R0,[R8, #+0] \ 000000E0 ........ LDR R6,??DataTable80 ;; S_ICONS \ 000000E4 30719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC 0600001A BNE ??AddToMain_7 2714 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000F0 0530A0E1 MOV R3,R5 \ 000000F4 0420A0E1 MOV R2,R4 \ 000000F8 0710A0E1 MOV R1,R7 \ 000000FC D800A0E3 MOV R0,#+216 \ 00000100 900E80E3 ORR R0,R0,#0x900 \ 00000104 060080E0 ADD R0,R0,R6 \ 00000108 160000EF SWI +22 \ ??AddToMain_7: \ 0000010C 000098E5 LDR R0,[R8, #+0] \ 00000110 010050E3 CMP R0,#+1 \ 00000114 0600001A BNE ??AddToMain_8 2715 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ 00000118 0530A0E1 MOV R3,R5 \ 0000011C 0420A0E1 MOV R2,R4 \ 00000120 0710A0E1 MOV R1,R7 \ 00000124 0800A0E3 MOV R0,#+8 \ 00000128 A00E80E3 ORR R0,R0,#0xA00 \ 0000012C 060080E0 ADD R0,R0,R6 \ 00000130 160000EF SWI +22 2716 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000134 000098E5 LDR R0,[R8, #+0] \ 00000138 3890A0E3 MOV R9,#+56 \ 0000013C A09E89E3 ORR R9,R9,#0xA00 \ 00000140 020050E3 CMP R0,#+2 \ 00000144 0400001A BNE ??AddToMain_9 \ 00000148 0530A0E1 MOV R3,R5 \ 0000014C 0420A0E1 MOV R2,R4 \ 00000150 0710A0E1 MOV R1,R7 \ 00000154 060089E0 ADD R0,R9,R6 \ 00000158 160000EF SWI +22 2717 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 0000015C 000098E5 LDR R0,[R8, #+0] \ 00000160 30A089E2 ADD R10,R9,#+48 \ 00000164 030050E3 CMP R0,#+3 \ 00000168 0400001A BNE ??AddToMain_10 \ 0000016C 0530A0E1 MOV R3,R5 \ 00000170 0420A0E1 MOV R2,R4 \ 00000174 0710A0E1 MOV R1,R7 \ 00000178 06008AE0 ADD R0,R10,R6 \ 0000017C 160000EF SWI +22 2718 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000180 000098E5 LDR R0,[R8, #+0] \ 00000184 60B089E2 ADD R11,R9,#+96 \ 00000188 040050E3 CMP R0,#+4 \ 0000018C 0400001A BNE ??AddToMain_11 \ 00000190 0530A0E1 MOV R3,R5 \ 00000194 0420A0E1 MOV R2,R4 \ 00000198 0710A0E1 MOV R1,R7 \ 0000019C 06008BE0 ADD R0,R11,R6 \ 000001A0 160000EF SWI +22 2719 if(main_count>4) \ ??AddToMain_11: \ 000001A4 000098E5 LDR R0,[R8, #+0] \ 000001A8 050050E3 CMP R0,#+5 \ 000001AC 130000BA BLT ??AddToMain_12 2720 { 2721 strcpy(a_txt, s_txt); \ 000001B0 3000C9E3 BIC R0,R9,#0x30 \ 000001B4 061080E0 ADD R1,R0,R6 \ 000001B8 300040E2 SUB R0,R0,#+48 \ 000001BC 060080E0 ADD R0,R0,R6 \ 000001C0 1A0000EF SWI +26 2722 strcpy(s_txt, d_txt); \ 000001C4 061089E0 ADD R1,R9,R6 \ 000001C8 3000C9E3 BIC R0,R9,#0x30 \ 000001CC 060080E0 ADD R0,R0,R6 \ 000001D0 1A0000EF SWI +26 2723 strcpy(d_txt, f_txt); \ 000001D4 06108AE0 ADD R1,R10,R6 \ 000001D8 060089E0 ADD R0,R9,R6 \ 000001DC 1A0000EF SWI +26 2724 strcpy(f_txt, g_txt); \ 000001E0 06108BE0 ADD R1,R11,R6 \ 000001E4 06008AE0 ADD R0,R10,R6 \ 000001E8 1A0000EF SWI +26 2725 sprintf(g_txt, "%s: %s", nameu,de); \ 000001EC 0530A0E1 MOV R3,R5 \ 000001F0 0420A0E1 MOV R2,R4 \ 000001F4 0710A0E1 MOV R1,R7 \ 000001F8 06008BE0 ADD R0,R11,R6 \ 000001FC 160000EF SWI +22 2726 } 2727 mfree(de); \ ??AddToMain_12: \ 00000200 0500A0E1 MOV R0,R5 \ 00000204 150000EF SWI +21 2728 main_d=1; \ 00000208 0100A0E3 MOV R0,#+1 \ 0000020C D00086E5 STR R0,[R6, #+208] 2729 } \ 00000210 F08FBDE8 POP {R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000214 ........ DC32 main_lenght \ 00000218 ........ DC32 use_cutter \ 0000021C ........ DC32 `?` 2730 //======================add to main info================ 2731 int NEW_MSG; 2732 \ In segment CODE, align 4, keep-with-next 2733 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK) 2734 { \ AddStringToLog: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 90D04DE2 SUB SP,SP,#+144 \ 00000008 AC809DE5 LDR R8,[SP, #+172] \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0150A0E1 MOV R5,R1 \ 00000014 0270A0E1 MOV R7,R2 \ 00000018 0360A0E1 MOV R6,R3 2735 char hs[128], *lastX; 2736 TTime tt; 2737 TDate d; 2738 GetDateTime(&d,&tt); \ 0000001C 0D10A0E1 MOV R1,SP \ 00000020 08008DE2 ADD R0,SP,#+8 \ 00000024 B40000EF SWI +180 2739 int i; 2740 2741 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 2742 if (code==3 && NOT_LOG_SAME_XTXT) \ 00000028 030055E3 CMP R5,#+3 \ 0000002C 1600001A BNE ??AddStringToLog_0 \ 00000030 00029FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 1200000A BEQ ??AddStringToLog_0 2743 { 2744 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 01002DE9 PUSH {R0} \ 00000098 1000DDE5 LDRB R0,[SP, #+16] \ 0000009C 0920A0E1 MOV R2,R9 \ 000000A0 7F10A0E3 MOV R1,#+127 \ 000000A4 01002DE9 PUSH {R0} \ 000000A8 1500DDE5 LDRB R0,[SP, #+21] \ 000000AC 01002DE9 PUSH {R0} \ 000000B0 0D00DDE5 LDRB R0,[SP, #+13] \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 1030DDE5 LDRB R3,[SP, #+16] \ 000000BC 20008DE2 ADD R0,SP,#+32 \ 000000C0 1B0100EF SWI +283 2751 if(code != 3 || LOG_XTXT) //Нуcно nоodrн?nь cennnrnуn \ 000000C4 030055E3 CMP R5,#+3 \ 000000C8 10D08DE2 ADD SP,SP,#+16 \ 000000CC 0300001A BNE ??AddStringToLog_4 \ 000000D0 68019FE5 LDR R0,??AddStringToLog_1+0x8 ;; LOG_XTXT \ 000000D4 000090E5 LDR R0,[R0, #+0] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0400000A BEQ ??AddStringToLog_5 2752 Add2History(t, hs, s, code); // Зrdcnь ocnnоdc \ ??AddStringToLog_4: \ 000000E0 0530A0E1 MOV R3,R5 \ 000000E4 0720A0E1 MOV R2,R7 \ 000000E8 10108DE2 ADD R1,SP,#+16 \ 000000EC 0400A0E1 MOV R0,R4 \ 000000F0 ........ _BLF Add2History,??Add2History??rA 2753 // ShowMSG(1,(int)t); 2754 // ShowMSG(1,(int)s); // Запись хистори 2755 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000F4 0700A0E1 MOV R0,R7 \ 000000F8 ........ BL NewLOGQ \ 000000FC 0070A0E1 MOV R7,R0 2756 snprintf(p->hdr,79,"%02d:%02d %02d-%02d %s:",tt.hour,tt.min,d.day,d.month,name); \ 00000100 40002DE9 PUSH {R6} \ 00000104 1000DDE5 LDRB R0,[SP, #+16] \ 00000108 1C2089E2 ADD R2,R9,#+28 \ 0000010C 4F10A0E3 MOV R1,#+79 \ 00000110 01002DE9 PUSH {R0} \ 00000114 1500DDE5 LDRB R0,[SP, #+21] \ 00000118 01002DE9 PUSH {R0} \ 0000011C 0D00DDE5 LDRB R0,[SP, #+13] \ 00000120 01002DE9 PUSH {R0} \ 00000124 1030DDE5 LDRB R3,[SP, #+16] \ 00000128 100087E2 ADD R0,R7,#+16 \ 0000012C 1B0100EF SWI +283 2757 p->type=code; \ 00000130 0C5087E5 STR R5,[R7, #+12] 2758 p->ID=IDforACK; //0-32767 \ 00000134 088087E5 STR R8,[R7, #+8] 2759 i=AddLOGQ(&t->log,p); \ 00000138 0710A0E1 MOV R1,R7 \ 0000013C 740084E2 ADD R0,R4,#+116 \ 00000140 ........ BL AddLOGQ \ 00000144 0060A0E1 MOV R6,R0 \ 00000148 150056E3 CMP R6,#+21 \ 0000014C 10D08DE2 ADD SP,SP,#+16 \ 00000150 090000BA BLT ??AddStringToLog_6 2760 while(i>MAXLOGMSG) 2761 { 2762 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000154 7C0094E5 LDR R0,[R4, #+124] \ 00000158 741094E5 LDR R1,[R4, #+116] 2763 RemoveLOGQ(&t->log,t->log); 2764 i--; \ 0000015C 016046E2 SUB R6,R6,#+1 \ 00000160 000051E1 CMP R1,R0 \ 00000164 00009005 LDREQ R0,[R0, #+0] \ 00000168 7C008405 STREQ R0,[R4, #+124] \ 0000016C 740084E2 ADD R0,R4,#+116 \ 00000170 ........ BL RemoveLOGQ 2765 } \ 00000174 150056E3 CMP R6,#+21 \ 00000178 F5FFFFAA BGE ??AddStringToLog_7 2766 t->msg_count=i; \ ??AddStringToLog_6: \ 0000017C 846084E5 STR R6,[R4, #+132] 2767 if (!t->last_log) t->last_log=p; \ 00000180 7C0094E5 LDR R0,[R4, #+124] 2768 if (code==3) \ 00000184 ........ LDR R6,??DataTable113 ;; S_ICONS \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 7C708405 STREQ R7,[R4, #+124] \ 00000190 030055E3 CMP R5,#+3 \ 00000194 0D00001A BNE ??AddStringToLog_8 2769 { 2770 if (edchat_id) \ 00000198 A80196E5 LDR R0,[R6, #+424] \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 2000000A BEQ ??AddStringToLog_9 2771 { 2772 void *data=FindGUIbyId(edchat_id,NULL); \ 000001A4 A80196E5 LDR R0,[R6, #+424] \ 000001A8 0010A0E3 MOV R1,#+0 \ 000001AC 090200EF SWI +521 2773 if (data) \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 1B00000A BEQ ??AddStringToLog_9 2774 { 2775 EDCHAT_STRUCT *ed_struct; 2776 ed_struct=EDIT_GetUserPointer(data); \ 000001B8 DF0100EF SWI +479 2777 if (ed_struct) \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 1800000A BEQ ??AddStringToLog_9 2778 { 2779 if (ed_struct->ed_contact==t) \ 000001C4 000090E5 LDR R0,[R0, #+0] \ 000001C8 040050E1 CMP R0,R4 \ 000001CC 1500001A BNE ??AddStringToLog_9 2780 { 2781 goto L_INC; 2782 } 2783 } 2784 } 2785 } 2786 goto L_NOINC; 2787 } 2788 L_INC: 2789 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001D0 640094E5 LDR R0,[R4, #+100] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 98019605 LDREQ R0,[R6, #+408] \ 000001DC 01008002 ADDEQ R0,R0,#+1 \ 000001E0 98018605 STREQ R0,[R6, #+408] 2790 if(NEW_MSG==1) \ 000001E4 CC0196E5 LDR R0,[R6, #+460] \ 000001E8 010050E3 CMP R0,#+1 \ 000001EC 0700001A BNE ??AddStringToLog_10 2791 { 2792 t->unread_msg++; \ 000001F0 680094E5 LDR R0,[R4, #+104] \ 000001F4 010080E2 ADD R0,R0,#+1 \ 000001F8 680084E5 STR R0,[R4, #+104] 2793 total_unread2++; \ 000001FC 000196E5 LDR R0,[R6, #+256] \ 00000200 010080E2 ADD R0,R0,#+1 \ 00000204 000186E5 STR R0,[R6, #+256] 2794 NEW_MSG=0; \ 00000208 0000A0E3 MOV R0,#+0 \ 0000020C CC0186E5 STR R0,[R6, #+460] 2795 } 2796 t->isunread=1; \ ??AddStringToLog_10: \ 00000210 0100A0E3 MOV R0,#+1 \ 00000214 640084E5 STR R0,[R4, #+100] 2797 if(saver_on) reftes(); \ 00000218 E80096E5 LDR R0,[R6, #+232] \ 0000021C 000050E3 CMP R0,#+0 \ 00000220 0000000A BEQ ??AddStringToLog_9 \ 00000224 ........ _BLF reftes,??reftes??rA 2798 L_NOINC: 2799 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000228 0400A0E1 MOV R0,R4 \ 0000022C ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2800 } \ ??AddStringToLog_3: \ 00000230 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 00000234 F083BDE8 POP {R4-R9,PC} ;; return \ ??AddStringToLog_1: \ 00000238 ........ DC32 NOT_LOG_SAME_XTXT \ 0000023C ........ DC32 `?` \ 00000240 ........ DC32 LOG_XTXT 2801 2802 void ParseAnswer(WSHDR *ws, const char *s); 2803 2804 int time_to_stop_t9; 2805 \ In segment CODE, align 4, keep-with-next 2806 void ParseXStatusText(WSHDR *ws, const char *s, int color) 2807 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 2808 int c; 2809 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 2810 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 2811 if (strlen(s)==1) return; \ 0000001C 0500A0E1 MOV R0,R5 \ 00000020 1B0000EF SWI +27 \ 00000024 010050E3 CMP R0,#+1 \ 00000028 F080BD08 POPEQ {R4-R7,PC} 2812 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 2813 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 2814 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 2815 while((c=*s++)) 2816 { 2817 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 2818 { 2819 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 2820 { 2821 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 2822 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 2823 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 2824 } 2825 } 2826 wsAppendChar(ws,char8to16(c)); \ ??ParseXStatusText_2: \ 00000078 ........ _BLF char8to16,??char8to16??rA \ 0000007C 0010A0E1 MOV R1,R0 \ ??ParseXStatusText_0: \ 00000080 0400A0E1 MOV R0,R4 \ 00000084 1C0000EF SWI +28 2827 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 2828 } 2829 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 2830 void AddMsgToChat(void *data) 2831 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 40D04DE2 SUB SP,SP,#+64 2832 LOGQ *p; 2833 EDITCONTROL ec; 2834 EDITC_OPTIONS ec_options; 2835 EDCHAT_STRUCT *ed_struct; 2836 int j; 2837 int color, font, type; 2838 int zc; 2839 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C900000A BEQ ??AddMsgToChat_0 2840 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0060B0E1 MOVS R6,R0 2841 if (!ed_struct) return; \ 00000018 C600000A BEQ ??AddMsgToChat_0 2842 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000096E5 LDR R0,[R6, #+0] \ 00000020 641090E5 LDR R1,[R0, #+100] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 C200000A BEQ ??AddMsgToChat_0 2843 2844 2845 p=ed_struct->ed_contact->last_log; \ 0000002C 7C7090E5 LDR R7,[R0, #+124] 2846 if (p) \ 00000030 ........ LDR R8,??DataTable113 ;; S_ICONS \ 00000034 000057E3 CMP R7,#+0 \ 00000038 A800000A BEQ ??AddMsgToChat_1 2847 { 2848 while(p) 2849 { 2850 font = ED_H_FONT_SIZE; 2851 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C ........ LDR R2,??DataTable84 ;; ED_X_FONT_SIZE \ 00000040 ........ LDR R0,??DataTable106 ;; ED_H_FONT_SIZE \ 00000044 002092E5 LDR R2,[R2, #+0] \ 00000048 ........ LDR R1,??DataTable86 ;; X_COLOR \ 0000004C 00A090E5 LDR R10,[R0, #+0] \ 00000050 040097E5 LDR R0,[R7, #+4] \ 00000054 00208DE5 STR R2,[SP, #+0] \ 00000058 004091E5 LDR R4,[R1, #+0] \ 0000005C ........ LDR R1,??DataTable87 ;; O_ED_X_FONT_SIZE \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 009091E5 LDR R9,[R1, #+0] \ 00000068 ........ LDR R1,??DataTable88 ;; O_X_COLOR \ 0000006C 005091E5 LDR R5,[R1, #+0] \ 00000070 ........ LDR R1,??DataTable103 ;; I_COLOR \ 00000074 00B091E5 LDR R11,[R1, #+0] \ 00000078 0300000A BEQ ??AddMsgToChat_3 2852 { 2853 if (zc==1) \ 0000007C 010050E3 CMP R0,#+1 \ 00000080 1E00001A BNE ??AddMsgToChat_4 2854 color=ACK_COLOR; //Зеленый \ 00000084 ........ LDR R0,??DataTable99 ;; ACK_COLOR \ 00000088 1B0000EA B ??AddMsgToChat_5 2855 else 2856 color=I_COLOR; 2857 //#endif 2858 } 2859 else 2860 { 2861 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 0000008C 080097E5 LDR R0,[R7, #+8] \ 00000090 010070E3 CMN R0,#+1 \ 00000094 1700001A BNE ??AddMsgToChat_6 2862 { 2863 type = p->type&0x0F; \ 00000098 0C0097E5 LDR R0,[R7, #+12] \ 0000009C 0F1000E2 AND R1,R0,#0xF 2864 if(p->type&0x10) \ 000000A0 100010E3 TST R0,#0x10 \ 000000A4 0B00000A BEQ ??AddMsgToChat_7 2865 { 2866 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000A8 010051E3 CMP R1,#+1 \ 000000AC ........ LDREQ R0,??DataTable101 ;; O_I_COLOR \ 000000B0 0400000A BEQ ??AddMsgToChat_8 \ 000000B4 030051E3 CMP R1,#+3 \ 000000B8 05B0A001 MOVEQ R11,R5 \ 000000BC 09A0A001 MOVEQ R10,R9 \ 000000C0 0E00000A BEQ ??AddMsgToChat_4 \ 000000C4 ........ LDR R0,??DataTable100 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000C8 00B090E5 LDR R11,[R0, #+0] \ 000000CC ........ LDR R0,??DataTable105 ;; O_ED_H_FONT_SIZE \ 000000D0 00A090E5 LDR R10,[R0, #+0] \ 000000D4 090000EA B ??AddMsgToChat_4 2867 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 2868 } 2869 else 2870 { 2871 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??AddMsgToChat_7: \ 000000D8 010051E3 CMP R1,#+1 \ 000000DC 0700000A BEQ ??AddMsgToChat_4 \ 000000E0 030051E3 CMP R1,#+3 \ 000000E4 04B0A001 MOVEQ R11,R4 \ 000000E8 02A0A001 MOVEQ R10,R2 \ 000000EC 0300000A BEQ ??AddMsgToChat_4 \ 000000F0 ........ LDR R0,??DataTable102 ;; TO_COLOR \ 000000F4 000000EA B ??AddMsgToChat_5 2872 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 2873 } 2874 } 2875 else 2876 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000F8 ........ LDR R0,??DataTable104 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000FC 00B090E5 LDR R11,[R0, #+0] 2877 } 2878 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 00000100 14008DE2 ADD R0,SP,#+20 \ 00000104 640100EF SWI +356 2879 if ((p->type&0x0F)!=3) \ 00000108 0C0097E5 LDR R0,[R7, #+12] \ 0000010C 0F0000E2 AND R0,R0,#0xF \ 00000110 030050E3 CMP R0,#+3 \ 00000114 0800000A BEQ ??AddMsgToChat_9 2880 { 2881 ascii2ws(ews,p->hdr); \ 00000118 180198E5 LDR R0,[R8, #+280] \ 0000011C 101087E2 ADD R1,R7,#+16 \ 00000120 ........ _BLF ascii2ws,??ascii2ws??rA 2882 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000124 183198E5 LDR R3,[R8, #+280] \ 00000128 4020A0E3 MOV R2,#+64 \ 0000012C 000093E5 LDR R0,[R3, #+0] \ 00000130 B000D0E1 LDRH R0,[R0, #+0] \ 00000134 01002DE9 PUSH {R0} \ 00000138 030000EA B ??AddMsgToChat_10 2883 } 2884 else 2885 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_9: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 01002DE9 PUSH {R0} \ 00000144 183198E5 LDR R3,[R8, #+280] \ 00000148 2020A0E3 MOV R2,#+32 \ ??AddMsgToChat_10: \ 0000014C 0110A0E3 MOV R1,#+1 \ 00000150 18008DE2 ADD R0,SP,#+24 \ 00000154 650100EF SWI +357 \ 00000158 04D08DE2 ADD SP,SP,#+4 2886 PrepareEditCOptions(&ec_options); \ 0000015C 04008DE2 ADD R0,SP,#+4 \ 00000160 C80100EF SWI +456 2887 SetPenColorToEditCOptions(&ec_options,color); \ 00000164 0B10A0E1 MOV R1,R11 \ 00000168 04008DE2 ADD R0,SP,#+4 \ 0000016C CC0100EF SWI +460 2888 SetFontToEditCOptions(&ec_options,font); \ 00000170 0A10A0E1 MOV R1,R10 \ 00000174 04008DE2 ADD R0,SP,#+4 \ 00000178 CA0100EF SWI +458 2889 CopyOptionsToEditControl(&ec,&ec_options); \ 0000017C 04108DE2 ADD R1,SP,#+4 \ 00000180 14008DE2 ADD R0,SP,#+20 \ 00000184 CE0100EF SWI +462 2890 //AddEditControlToEditQend(eq,&ec,ma); 2891 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 00000188 080096E5 LDR R0,[R6, #+8] \ 0000018C 14208DE2 ADD R2,SP,#+20 \ 00000190 011040E2 SUB R1,R0,#+1 \ 00000194 40009DE5 LDR R0,[SP, #+64] \ 00000198 D20100EF SWI +466 2892 ed_struct->ed_answer++; \ 0000019C 080096E5 LDR R0,[R6, #+8] \ 000001A0 010080E2 ADD R0,R0,#+1 \ 000001A4 080086E5 STR R0,[R6, #+8] 2893 if ((p->type&0x0F)!=3) \ 000001A8 0C0097E5 LDR R0,[R7, #+12] \ 000001AC 0F1000E2 AND R1,R0,#0xF \ 000001B0 030051E3 CMP R1,#+3 \ 000001B4 0300000A BEQ ??AddMsgToChat_11 2894 { 2895 ParseAnswer(ews,p->text); \ 000001B8 180198E5 LDR R0,[R8, #+280] \ 000001BC 601087E2 ADD R1,R7,#+96 \ 000001C0 ........ BL ParseAnswer \ 000001C4 050000EA B ??AddMsgToChat_12 2896 } 2897 else 2898 { 2899 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_11: \ 000001C8 100010E3 TST R0,#0x10 \ 000001CC 180198E5 LDR R0,[R8, #+280] \ 000001D0 0520A011 MOVNE R2,R5 \ 000001D4 0420A001 MOVEQ R2,R4 \ 000001D8 601087E2 ADD R1,R7,#+96 \ 000001DC ........ BL ParseXStatusText 2900 } 2901 PrepareEditControl(&ec); \ ??AddMsgToChat_12: \ 000001E0 14008DE2 ADD R0,SP,#+20 \ 000001E4 640100EF SWI +356 2902 ConstructEditControl(&ec, 2903 ECT_NORMAL_TEXT, 2904 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 2905 ews,ews->wsbody[0]); \ 000001E8 183198E5 LDR R3,[R8, #+280] \ 000001EC 000093E5 LDR R0,[R3, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000051E3 CMP R1,#+0 \ 000001F8 0100A0E1 MOV R0,R1 \ 000001FC 01002DE9 PUSH {R0} \ 00000200 812DA013 MOVNE R2,#+8256 \ 00000204 2020A003 MOVEQ R2,#+32 \ 00000208 0310A0E3 MOV R1,#+3 \ 0000020C 18008DE2 ADD R0,SP,#+24 \ 00000210 650100EF SWI +357 2906 PrepareEditCOptions(&ec_options); \ 00000214 08008DE2 ADD R0,SP,#+8 \ 00000218 C80100EF SWI +456 2907 //#ifdef M75 2908 if ((p->type&0x0F)!=3) \ 0000021C 0C0097E5 LDR R0,[R7, #+12] \ 00000220 04D08DE2 ADD SP,SP,#+4 \ 00000224 0F1000E2 AND R1,R0,#0xF \ 00000228 030051E3 CMP R1,#+3 \ 0000022C 0400000A BEQ ??AddMsgToChat_13 2909 { 2910 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable96 ;; O_ED_FONT_SIZE \ 00000238 ........ LDREQ R0,??DataTable97 ;; ED_FONT_SIZE \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 080000EA B ??AddMsgToChat_14 2911 } 2912 else 2913 { 2914 SetPenColorToEditCOptions(&ec_options,(p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_13: \ 00000244 100010E3 TST R0,#0x10 \ 00000248 0510A011 MOVNE R1,R5 \ 0000024C 0410A001 MOVEQ R1,R4 \ 00000250 04008DE2 ADD R0,SP,#+4 \ 00000254 CC0100EF SWI +460 2915 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000258 0C0097E5 LDR R0,[R7, #+12] \ 0000025C 100010E3 TST R0,#0x10 \ 00000260 00109D05 LDREQ R1,[SP, #+0] \ 00000264 0910A011 MOVNE R1,R9 \ ??AddMsgToChat_14: \ 00000268 04008DE2 ADD R0,SP,#+4 \ 0000026C CA0100EF SWI +458 2916 } 2917 //#else 2918 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 2919 //#endif 2920 CopyOptionsToEditControl(&ec,&ec_options); \ 00000270 04108DE2 ADD R1,SP,#+4 \ 00000274 14008DE2 ADD R0,SP,#+20 \ 00000278 CE0100EF SWI +462 2921 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 0000027C 080096E5 LDR R0,[R6, #+8] \ 00000280 14208DE2 ADD R2,SP,#+20 \ 00000284 011040E2 SUB R1,R0,#+1 \ 00000288 40009DE5 LDR R0,[SP, #+64] \ 0000028C D20100EF SWI +466 2922 ed_struct->ed_answer++; \ 00000290 080096E5 LDR R0,[R6, #+8] \ 00000294 010080E2 ADD R0,R0,#+1 \ 00000298 080086E5 STR R0,[R6, #+8] 2923 p=p->next; \ 0000029C 007097E5 LDR R7,[R7, #+0] 2924 } \ 000002A0 000057E3 CMP R7,#+0 \ 000002A4 64FFFF1A BNE ??AddMsgToChat_2 2925 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 000002A8 001096E5 LDR R1,[R6, #+0] \ 000002AC 841091E5 LDR R1,[R1, #+132] \ 000002B0 011081E2 ADD R1,R1,#+1 \ 000002B4 8140A0E1 LSL R4,R1,#+1 \ 000002B8 000054E1 CMP R4,R0 \ 000002BC 070000AA BGE ??AddMsgToChat_1 2926 while(jed_answer) 2927 { 2928 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_15: \ 000002C0 040096E5 LDR R0,[R6, #+4] \ 000002C4 0110A0E3 MOV R1,#+1 \ 000002C8 D10100EF SWI +465 2929 ed_struct->ed_answer--; \ 000002CC 080096E5 LDR R0,[R6, #+8] \ 000002D0 010040E2 SUB R0,R0,#+1 \ 000002D4 080086E5 STR R0,[R6, #+8] 2930 } \ 000002D8 000054E1 CMP R4,R0 \ 000002DC F7FFFFBA BLT ??AddMsgToChat_15 2931 } 2932 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002E0 000096E5 LDR R0,[R6, #+0] \ 000002E4 0040A0E3 MOV R4,#+0 \ 000002E8 7C4080E5 STR R4,[R0, #+124] 2933 if (IsGuiOnTop(edchat_id)) \ 000002EC A80198E5 LDR R0,[R8, #+424] \ 000002F0 350100EF SWI +309 \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 0300000A BEQ ??AddMsgToChat_16 2934 { 2935 total_unread--; \ 000002FC 980198E5 LDR R0,[R8, #+408] \ 00000300 010040E2 SUB R0,R0,#+1 \ 00000304 980188E5 STR R0,[R8, #+408] \ 00000308 020000EA B ??AddMsgToChat_17 2936 } 2937 else 2938 ed_struct->requested_decrement_total_unread++; \ ??AddMsgToChat_16: \ 0000030C 0C0096E5 LDR R0,[R6, #+12] \ 00000310 010080E2 ADD R0,R0,#+1 \ 00000314 0C0086E5 STR R0,[R6, #+12] 2939 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_17: \ 00000318 000096E5 LDR R0,[R6, #+0] \ 0000031C 644080E5 STR R4,[R0, #+100] 2940 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 00000320 001198E5 LDR R1,[R8, #+256] \ 00000324 682090E5 LDR R2,[R0, #+104] \ 00000328 021041E0 SUB R1,R1,R2 \ 0000032C 001188E5 STR R1,[R8, #+256] 2941 ed_struct->ed_contact->unread_msg=0; \ 00000330 684080E5 STR R4,[R0, #+104] 2942 ChangeContactPos(ed_struct->ed_contact); \ 00000334 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2943 // EDIT_SetFocus(data,ed_struct->ed_answer); 2944 } \ ??AddMsgToChat_0: \ 00000338 44D08DE2 ADD SP,SP,#+68 ;; stack cleaning \ 0000033C F08FBDE8 POP {R4-R11,PC} ;; return 2945 2946 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 2947 void DrawAck(void *data) 2948 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 2949 LOGQ *p; 2950 EDITCONTROL ec; 2951 EDITC_OPTIONS ec_options; 2952 EDCHAT_STRUCT *ed_struct; 2953 int j; 2954 int color; 2955 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 2956 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 2957 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 2958 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 2959 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 2960 j=ed_struct->ed_answer; 2961 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 745091E5 LDR R5,[R1, #+116] \ 0000002C 841091E5 LDR R1,[R1, #+132] \ 00000030 000055E3 CMP R5,#+0 \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 3A00000A BEQ ??DrawAck_1 2962 while(p) 2963 { 2964 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 2965 { 2966 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 2967 { 2968 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 2969 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 2970 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 2971 { 2972 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable103 ;; I_COLOR 2973 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable99 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 2974 else 2975 color=I_COLOR; 2976 } 2977 else 2978 { 2979 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 2980 color=(p->type&0x10)?(((p->type&0x0F)==1)?O_I_COLOR:O_TO_COLOR):(((p->type&0x0F)==1)?I_COLOR:TO_COLOR); \ 00000094 0C0095E5 LDR R0,[R5, #+12] \ 00000098 100010E3 TST R0,#0x10 \ 0000009C 0F0000E2 AND R0,R0,#0xF \ 000000A0 0300000A BEQ ??DrawAck_7 \ 000000A4 010050E3 CMP R0,#+1 \ 000000A8 ........ LDRNE R0,??DataTable100 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable101 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable102 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable103 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 2981 else 2982 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable104 ;; UNACK_COLOR 2983 } 2984 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 2985 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 2986 CopyOptionsToEditControl(&ec,&ec_options); 2987 StoreEditControl(data,j,&ec); 2988 p->acked|=4; //Обработали 2989 dorefresh=1; \ ??DrawAck_5: \ 000000C8 0160A0E3 MOV R6,#+1 \ 000000CC 001090E5 LDR R1,[R0, #+0] \ 000000D0 0D00A0E1 MOV R0,SP \ 000000D4 CC0100EF SWI +460 \ 000000D8 0C0095E5 LDR R0,[R5, #+12] \ 000000DC 100010E3 TST R0,#0x10 \ 000000E0 ........ LDRNE R0,??DataTable105 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable106 ;; ED_H_FONT_SIZE \ 000000E8 001090E5 LDR R1,[R0, #+0] \ 000000EC 0D00A0E1 MOV R0,SP \ 000000F0 CA0100EF SWI +458 \ 000000F4 0D10A0E1 MOV R1,SP \ 000000F8 10008DE2 ADD R0,SP,#+16 \ 000000FC CE0100EF SWI +462 \ 00000100 10208DE2 ADD R2,SP,#+16 \ 00000104 0710A0E1 MOV R1,R7 \ 00000108 0400A0E1 MOV R0,R4 \ 0000010C 6A0100EF SWI +362 \ 00000110 040095E5 LDR R0,[R5, #+4] \ 00000114 040080E3 ORR R0,R0,#0x4 \ 00000118 040085E5 STR R0,[R5, #+4] 2990 } 2991 } 2992 j+=2; 2993 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 2994 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 2995 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; S_ICONS + 424 \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 350100EF SWI +309 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 00005613 CMPNE R6,#+0 \ 00000140 0000000A BEQ ??DrawAck_0 \ 00000144 960100EF SWI +406 \ ??DrawAck_0: \ 00000148 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 0000014C F080BDE8 POP {R4-R7,PC} ;; return \ ??DrawAck_8: \ 00000150 ........ DC32 S_ICONS + 424 2996 } 2997 \ In segment CODE, align 4, keep-with-next 2998 void ask_my_info(void) 2999 { 3000 /* TPKT *p; 3001 CLIST *t; 3002 p=malloc(sizeof(PKT)); 3003 p->pkt.uin=UIN; 3004 p->pkt.type=T_REQINFOSHORT; 3005 p->pkt.data_len=0; 3006 // AddStringToLog(t,0x01,"Request info...",I_str); 3007 SUBPROC((void *)SendAnswer,0,p);*/ 3008 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 3009 \ In segment CODE, align 4, keep-with-next 3010 void set_my_status(void) 3011 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 3012 TPKT *p; 3013 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 3014 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 3015 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3016 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3017 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 348 3018 SUBPROC((void *)SendAnswer,0,p); \ 00000028 0020A0E1 MOV R2,R0 \ 0000002C 001091E5 LDR R1,[R1, #+0] \ 00000030 0810C0E5 STRB R1,[R0, #+8] \ 00000034 ........ LDR R0,??DataTable115 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 3019 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 348 3020 3021 extern int Send0; 3022 \ In segment CODE, align 4, keep-with-next 3023 void set_my_xstatus(void) 3024 { \ set_my_xstatus: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 3025 #ifdef NEWSGOLD 3026 if(Is_Id3tag_Enabled) 3027 { 3028 if(CurrentXStatus!=11) 3029 { 3030 #endif 3031 TPKT *p; 3032 char *s1; 3033 char *s2; 3034 int l1; 3035 int l2; 3036 p=malloc(sizeof(PKT)+1); 3037 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 3038 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 3039 p->pkt.data_len=1; // Длина пакета: 1 байт 3040 p->data[0]=CurrentXStatus; \ 00000004 ........ LDR R8,??DataTable113 ;; S_ICONS 3041 SUBPROC((void *)SendAnswer,0,p); \ 00000008 ........ LDR R6,??DataTable115 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 0900A0E3 MOV R0,#+9 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 0050A0E3 MOV R5,#+0 \ 00000020 005084E5 STR R5,[R4, #+0] \ 00000024 1600A0E3 MOV R0,#+22 \ 00000028 B400C4E1 STRH R0,[R4, #+4] \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 B600C4E1 STRH R0,[R4, #+6] \ 00000034 140198E5 LDR R0,[R8, #+276] \ 00000038 0420A0E1 MOV R2,R4 \ 0000003C 0800C4E5 STRB R0,[R4, #+8] \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 710100EF SWI +369 3042 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 0000004C 140198E5 LDR R0,[R8, #+276] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000058 010080E2 ADD R0,R0,#+1 \ 0000005C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000060 0070A0E1 MOV R7,R0 3043 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000064 140198E5 LDR R0,[R8, #+276] \ 00000068 04108DE2 ADD R1,SP,#+4 \ 0000006C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000070 020080E2 ADD R0,R0,#+2 \ 00000074 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000078 0080A0E1 MOV R8,R0 3044 if ((!s1)||(!s2)) return; \ 0000007C 000057E3 CMP R7,#+0 \ 00000080 00005813 CMPNE R8,#+0 \ 00000084 F781BD08 POPEQ {R0-R2,R4-R8,PC} 3045 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000088 00009DE5 LDR R0,[SP, #+0] \ 0000008C 04109DE5 LDR R1,[SP, #+4] \ 00000090 000081E0 ADD R0,R1,R0 \ 00000094 090080E2 ADD R0,R0,#+9 \ 00000098 140000EF SWI +20 \ 0000009C 0040A0E1 MOV R4,R0 3046 p->pkt.uin=0; \ 000000A0 005084E5 STR R5,[R4, #+0] 3047 p->pkt.type=T_XTEXT_SET; \ 000000A4 1A00A0E3 MOV R0,#+26 \ 000000A8 B400C4E1 STRH R0,[R4, #+4] 3048 p->pkt.data_len=l1+l2+1; \ 000000AC 00009DE5 LDR R0,[SP, #+0] \ 000000B0 04109DE5 LDR R1,[SP, #+4] \ 000000B4 000081E0 ADD R0,R1,R0 \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC B600C4E1 STRH R0,[R4, #+6] 3049 strncpy(p->data+0,s1,l1); \ 000000C0 00209DE5 LDR R2,[SP, #+0] \ 000000C4 0710A0E1 MOV R1,R7 \ 000000C8 080084E2 ADD R0,R4,#+8 \ 000000CC 160100EF SWI +278 3050 p->data[l1]=0; \ 000000D0 00009DE5 LDR R0,[SP, #+0] 3051 strncpy(p->data+l1+1,s2,l2); \ 000000D4 0810A0E1 MOV R1,R8 \ 000000D8 040080E0 ADD R0,R0,R4 \ 000000DC 0850C0E5 STRB R5,[R0, #+8] \ 000000E0 00009DE5 LDR R0,[SP, #+0] \ 000000E4 04209DE5 LDR R2,[SP, #+4] \ 000000E8 040080E0 ADD R0,R0,R4 \ 000000EC 090080E2 ADD R0,R0,#+9 \ 000000F0 160100EF SWI +278 3052 SUBPROC((void *)SendAnswer,0,p); \ 000000F4 0420A0E1 MOV R2,R4 \ 000000F8 0010A0E3 MOV R1,#+0 \ 000000FC 0600A0E1 MOV R0,R6 \ 00000100 710100EF SWI +369 3053 #ifdef NEWSGOLD 3054 } 3055 else 3056 { 3057 tracktimer=0; 3058 GetTags(); 3059 } 3060 } 3061 else 3062 { 3063 TPKT *p; 3064 char *s1; 3065 char *s2; 3066 int l1; 3067 int l2; 3068 p=malloc(sizeof(PKT)+1); 3069 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 3070 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 3071 p->pkt.data_len=1; // Длина пакета: 1 байт 3072 p->data[0]=CurrentXStatus; 3073 SUBPROC((void *)SendAnswer,0,p); 3074 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); 3075 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); 3076 if ((!s1)||(!s2)) return; 3077 p=malloc(sizeof(PKT)+l1+l2+1); 3078 p->pkt.uin=0; 3079 p->pkt.type=T_XTEXT_SET; 3080 p->pkt.data_len=l1+l2+1; 3081 strncpy(p->data+0,s1,l1); 3082 p->data[l1]=0; 3083 strncpy(p->data+l1+1,s2,l2); 3084 SUBPROC((void *)SendAnswer,0,p); 3085 tracktimer=0; 3086 GetTags(); 3087 } 3088 #endif 3089 } \ 00000104 F781BDE8 POP {R0-R2,R4-R8,PC} ;; return 3090 #ifdef NEWSGOLD 3091 extern const char playing[13]; 3092 3093 void set_my_xstatus2(void) 3094 { 3095 TPKT *p; 3096 // char *s1; 3097 // char *s2; 3098 int l1; 3099 int l2; 3100 p=malloc(sizeof(PKT)+1); 3101 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 3102 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 3103 p->pkt.data_len=1; // Длина пакета: 1 байт 3104 p->data[0]=11; 3105 SUBPROC((void *)SendAnswer,0,p); 3106 // char *s1; 3107 char *sk2=malloc(256); 3108 // strcpy(s1, playing); 3109 // s1="Now playing:"; 3110 strcpy(sk2,teast2); 3111 l1=strlen(playing); 3112 l2=strlen(sk2); 3113 if ((!playing)||(!sk2)) return; 3114 p=malloc(sizeof(PKT)+l1+l2+1); 3115 p->pkt.uin=0; 3116 p->pkt.type=T_XTEXT_SET; 3117 p->pkt.data_len=l1+l2+1; 3118 strncpy(p->data+0,playing,l1); 3119 p->data[l1]=0; 3120 strncpy(p->data+l1+1,sk2,l2); 3121 mfree(sk2); 3122 SUBPROC((void *)SendAnswer,0,p); 3123 // mfree(s1); 3124 // mfree(s2); 3125 } 3126 #endif \ In segment CODE, align 4, keep-with-next 3127 void to_develop(void) 3128 { 3129 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable113 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 441190E5 LDR R1,[R0, #+324] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 3130 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable114 ;; `?` 3131 gipc.name_from=ipc_my_name; 3132 gipc.data=(void *)maincsm_id; 3133 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000018 AC3080E2 ADD R3,R0,#+172 \ 0000001C 702E81E2 ADD R2,R1,#+1792 \ 00000020 6E1E81E2 ADD R1,R1,#+1760 \ 00000024 B01080E5 STR R1,[R0, #+176] \ 00000028 041190E5 LDR R1,[R0, #+260] \ 0000002C AC2080E5 STR R2,[R0, #+172] \ 00000030 B41080E5 STR R1,[R0, #+180] \ 00000034 0220A0E3 MOV R2,#+2 \ 00000038 FC1F82E3 ORR R1,R2,#0x3F0 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 3134 } \ 00000048 0080BDE8 POP {PC} ;; return 3135 \ In segment CODE, align 4, keep-with-next 3136 void ReqAddMsgToChat(CLIST *t) 3137 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 3138 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable113 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C A80195E5 LDR R0,[R5, #+424] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 3139 { 3140 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 A80195E5 LDR R0,[R5, #+424] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 3141 { 3142 EDCHAT_STRUCT *ed_struct; 3143 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 3144 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 3145 { 3146 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 3147 { 3148 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 3149 { 3150 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 6C0084E5 STR R0,[R4, #+108] 3151 #ifdef EVILFOX 3152 time_to_stop_t9=2; 3153 #else 3154 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C D00185E5 STR R0,[R5, #+464] \ 00000060 7080BDE8 POP {R4-R6,PC} 3155 #endif 3156 } 3157 else 3158 { 3159 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 3160 DirectRedrawGUI_ID(edchat_id); \ 0000006C A80195E5 LDR R0,[R5, #+424] \ 00000070 400100EF SWI +320 3161 } 3162 } 3163 } 3164 } 3165 } 3166 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3167 3168 GBSTMR develop; 3169 \ In segment CODE, align 4, keep-with-next 3170 void begin_to_develop() 3171 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 3172 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 3173 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 3174 else 3175 GBS_StartTimerProc(&develop, 100, begin_to_develop); \ ??begin_to_develop_0: \ 00000018 0C209FE5 LDR R2,??begin_to_develop_1 ;; begin_to_develop \ 0000001C 0C009FE5 LDR R0,??begin_to_develop_1+0x4 ;; S_ICONS + 2760 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 3176 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 S_ICONS + 2760 3177 ////=================================comand lists 3178 int comanda; 3179 3180 char requests1[]="Sending online time..."; 3181 char requests2[]="Sending msg info..."; 3182 char requests3[]="Sending battery info..."; 3183 char requests4[]="Sending mod info..."; 3184 char requests6[]="Sending offline info..."; 3185 3186 extern const int show_send_info; 3187 extern const char away_msg4[24]; 3188 #ifdef kluchnik 3189 extern const unsigned int AUTOBOT_UIN; 3190 int autobot; 3191 #endif 3192 //char mod_info2[264]="Mod by EvilFox, 1st; based on rev.2026, mod date: 17.03.08 for S75 only. Windes: !new bcfg!, +SS bkgnd cfg; *menu pos; lang, cfg, SS pos, font fixes. http://quant.hotmail.ru/files/naticq_mod2026w2.zip files: http://quant.hotmail.ru/files/naticqmod_allfiles_w.zip"; 3193 //#else 3194 //extern const 3195 char mod_info[264]; 3196 //#endif 3197 /* 3198 #ifdef NEWSGOLD 3199 unsigned char *addr = (unsigned char *)0xA003E410; 3200 #else 3201 unsigned char *addr = (unsigned char *)0xA000065C; 3202 #endif 3203 */ 3204 const char ipc_game_name[]="Combats"; 3205 IPC_REQ game_gipc; 3206 #define IPC_GAME_DATA 24 3207 3208 #ifdef kluchnik 3209 void AutobotInit() 3210 { 3211 if(autobot==1) 3212 { 3213 autobot=0; 3214 ShowMSG(1,(int)"Autobot Off"); 3215 } 3216 else 3217 { 3218 autobot=1; 3219 ShowMSG(1,(int)"Autobot On"); 3220 } 3221 } 3222 #endif 3223 3224 \ In segment CODE, align 4, keep-with-next 3225 void CheckComand(char *txt, CLIST *t, char *ddd) 3226 { \ CheckComand: \ 00000000 F44F2DE9 PUSH {R2,R4-R11,LR} 3227 comanda=1; \ 00000004 ........ LDR R6,??DataTable113 ;; S_ICONS 3228 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 ........ LDR R7,??DataTable114 ;; `?` \ 0000000C 14D04DE2 SUB SP,SP,#+20 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0100A0E3 MOV R0,#+1 \ 0000001C D40186E5 STR R0,[R6, #+468] \ 00000020 48B0A0E3 MOV R11,#+72 \ 00000024 B0BE8BE3 ORR R11,R11,#0xB00 \ 00000028 5A3F87E2 ADD R3,R7,#+360 \ 0000002C 572F87E2 ADD R2,R7,#+348 \ 00000030 441F87E2 ADD R1,R7,#+272 \ 00000034 06008BE0 ADD R0,R11,R6 \ 00000038 160000EF SWI +22 \ 0000003C 5D1F87E2 ADD R1,R7,#+372 \ 00000040 0400A0E1 MOV R0,R4 3229 if(strstr(txt,"GAME:")!=0) \ 00000044 180100EF SWI +280 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0F00000A BEQ ??CheckComand_0 3230 { 3231 game_gipc.name_to=ipc_game_name; \ 00000050 430E4BE2 SUB R0,R11,#+1072 \ 00000054 070080E0 ADD R0,R0,R7 \ 00000058 B80086E5 STR R0,[R6, #+184] 3232 game_gipc.name_from=ipc_my_name; \ 0000005C 6E0E87E2 ADD R0,R7,#+1760 \ 00000060 BC0086E5 STR R0,[R6, #+188] 3233 game_gipc.data=txt; \ 00000064 C04086E5 STR R4,[R6, #+192] 3234 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_GAME_DATA,&game_gipc); \ 00000068 B83086E2 ADD R3,R6,#+184 \ 0000006C 1820A0E3 MOV R2,#+24 \ 00000070 F210A0E3 MOV R1,#+242 \ 00000074 C01F81E3 ORR R1,R1,#0x300 \ 00000078 0900A0E3 MOV R0,#+9 \ 0000007C 420C80E3 ORR R0,R0,#0x4200 \ 00000080 000100EF SWI +256 3235 comanda=0; \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 D40186E5 STR R0,[R6, #+468] 3236 return; \ 0000008C 390000EA B ??CheckComand_1 3237 } 3238 if(!strcmp(txt, "GET_ONLINE_TIME")) \ ??CheckComand_0: \ 00000090 ........ LDR R8,??DataTable115 ;; SendAnswer \ 00000094 FF90A0E3 MOV R9,#+255 \ 00000098 7F9C89E3 ORR R9,R9,#0x7F00 \ 0000009C 02A0A0E3 MOV R10,#+2 \ 000000A0 6A1F87E2 ADD R1,R7,#+424 \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 190000EF SWI +25 \ 000000AC 000050E3 CMP R0,#+0 \ 000000B0 3200001A BNE ??CheckComand_2 3239 { 3240 comanda=0; \ 000000B4 D40186E5 STR R0,[R6, #+468] 3241 TPKT *p; 3242 sprintf(hah,"Время в онлайн: %02d:%02d:%02d \n" 3243 "Сервер: %s", xstatus_old, minimum_xstatus, maximum, hostbuf2); \ 000000B8 BCB0A0E3 MOV R11,#+188 \ 000000BC 60BE8BE3 ORR R11,R11,#0x600 \ 000000C0 800F8BE2 ADD R0,R11,#+512 \ 000000C4 060080E0 ADD R0,R0,R6 \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 3C0196E5 LDR R0,[R6, #+316] \ 000000D0 5F1F87E2 ADD R1,R7,#+380 \ 000000D4 01002DE9 PUSH {R0} \ 000000D8 383196E5 LDR R3,[R6, #+312] \ 000000DC 342196E5 LDR R2,[R6, #+308] \ 000000E0 06008BE0 ADD R0,R11,R6 \ 000000E4 160000EF SWI +22 3244 p=malloc(sizeof(PKT)+strlen(hah)+1); \ 000000E8 06008BE0 ADD R0,R11,R6 \ 000000EC 1B0000EF SWI +27 \ 000000F0 090080E2 ADD R0,R0,#+9 \ 000000F4 140000EF SWI +20 \ 000000F8 0040A0E1 MOV R4,R0 3245 p->pkt.uin=t->uin; \ 000000FC 0C0095E5 LDR R0,[R5, #+12] \ 00000100 000084E5 STR R0,[R4, #+0] 3246 p->pkt.type=T_SENDMSG; \ 00000104 B4A0C4E1 STRH R10,[R4, #+4] 3247 p->pkt.data_len=strlen(hah); \ 00000108 06008BE0 ADD R0,R11,R6 \ 0000010C 1B0000EF SWI +27 \ 00000110 B600C4E1 STRH R0,[R4, #+6] 3248 strcpy(p->data,hah); \ 00000114 06108BE0 ADD R1,R11,R6 \ 00000118 080084E2 ADD R0,R4,#+8 \ 0000011C 1A0000EF SWI +26 3249 #ifdef EVILFOX 3250 SENDMSGCOUNT++; 3251 #else 3252 if(show_send_info) \ 00000120 0C059FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000124 000090E5 LDR R0,[R0, #+0] \ 00000128 08D08DE2 ADD SP,SP,#+8 \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 0C0196E5 LDR R0,[R6, #+268] \ 00000134 010080E2 ADD R0,R0,#+1 \ 00000138 0C0186E5 STR R0,[R6, #+268] \ 0000013C 0900000A BEQ ??CheckComand_4 3253 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 00000140 000009E0 AND R0,R9,R0 \ 00000144 01002DE9 PUSH {R0} \ 00000148 173087E2 ADD R3,R7,#+23 \ 0000014C 0110A0E3 MOV R1,#+1 \ 00000150 D800A0E3 MOV R0,#+216 \ 00000154 A00E80E3 ORR R0,R0,#0xA00 \ 00000158 062080E0 ADD R2,R0,R6 \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 ........ BL AddStringToLog \ 00000164 04D08DE2 ADD SP,SP,#+4 3254 else 3255 SENDMSGCOUNT++; 3256 #endif 3257 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_4: \ 00000168 0420A0E1 MOV R2,R4 \ 0000016C 0010A0E3 MOV R1,#+0 \ 00000170 0800A0E1 MOV R0,R8 \ 00000174 710100EF SWI +369 3258 return; \ ??CheckComand_1: \ 00000178 18D08DE2 ADD SP,SP,#+24 \ 0000017C F08FBDE8 POP {R4-R11,PC} 3259 } 3260 if(!strcmp(txt, "GET_MSG_INFO")) \ ??CheckComand_2: \ 00000180 7A1F87E2 ADD R1,R7,#+488 \ 00000184 0400A0E1 MOV R0,R4 \ 00000188 190000EF SWI +25 \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 2500001A BNE ??CheckComand_5 3261 { 3262 comanda=0; \ 00000194 D40186E5 STR R0,[R6, #+468] 3263 TPKT *p; 3264 char *send_txt=malloc(64); \ 00000198 4000A0E3 MOV R0,#+64 \ 0000019C 140000EF SWI +20 \ 000001A0 0040A0E1 MOV R4,R0 3265 sprintf(send_txt, "Отправлено сообщений: %d \n" 3266 "Принято сообщений: %d" 3267 , main2_count, main_count); \ 000001A4 ........ LDR R0,??DataTable116 ;; main_count \ 000001A8 6E1F87E2 ADD R1,R7,#+440 \ 000001AC 003090E5 LDR R3,[R0, #+0] \ 000001B0 ........ LDR R0,??DataTable117 ;; main2_count \ 000001B4 002090E5 LDR R2,[R0, #+0] \ 000001B8 0400A0E1 MOV R0,R4 \ 000001BC 160000EF SWI +22 3268 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000001C0 0400A0E1 MOV R0,R4 \ 000001C4 1B0000EF SWI +27 \ 000001C8 090080E2 ADD R0,R0,#+9 \ 000001CC 140000EF SWI +20 \ 000001D0 00B0A0E1 MOV R11,R0 3269 p->pkt.uin=t->uin; \ 000001D4 0C0095E5 LDR R0,[R5, #+12] \ 000001D8 00008BE5 STR R0,[R11, #+0] 3270 p->pkt.type=T_SENDMSG; \ 000001DC B4A0CBE1 STRH R10,[R11, #+4] 3271 p->pkt.data_len=strlen(send_txt); \ 000001E0 0400A0E1 MOV R0,R4 \ 000001E4 1B0000EF SWI +27 \ 000001E8 B600CBE1 STRH R0,[R11, #+6] 3272 strcpy(p->data,send_txt); \ 000001EC 0410A0E1 MOV R1,R4 \ 000001F0 08008BE2 ADD R0,R11,#+8 \ 000001F4 1A0000EF SWI +26 3273 #ifdef EVILFOX 3274 SENDMSGCOUNT++; 3275 #else 3276 if(show_send_info) \ 000001F8 34049FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000001FC 000090E5 LDR R0,[R0, #+0] \ 00000200 000050E3 CMP R0,#+0 \ 00000204 0C0196E5 LDR R0,[R6, #+268] \ 00000208 010080E2 ADD R0,R0,#+1 \ 0000020C 0C0186E5 STR R0,[R6, #+268] \ 00000210 FF00000A BEQ ??CheckComand_6 3277 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 00000214 000009E0 AND R0,R9,R0 \ 00000218 01002DE9 PUSH {R0} \ 0000021C 173087E2 ADD R3,R7,#+23 \ 00000220 AF2E86E2 ADD R2,R6,#+2800 \ 00000224 0110A0E3 MOV R1,#+1 \ 00000228 F60000EA B ??CheckComand_7 3278 else 3279 SENDMSGCOUNT++; 3280 #endif 3281 SUBPROC((void *)SendAnswer,0,p); 3282 mfree(send_txt); 3283 return; 3284 } 3285 3286 //==========================windes commands begin ===================== 3287 3288 if(!strcmp(txt, "GET_PROVIDER")) \ ??CheckComand_5: \ 0000022C 891F87E2 ADD R1,R7,#+548 \ 00000230 0400A0E1 MOV R0,R4 \ 00000234 190000EF SWI +25 \ 00000238 000050E3 CMP R0,#+0 \ 0000023C 2C00001A BNE ??CheckComand_8 3289 { 3290 comanda=0; \ 00000240 D40186E5 STR R0,[R6, #+468] 3291 TPKT *p; 3292 3293 WSHDR *ws=AllocWS(32); \ 00000244 2000A0E3 MOV R0,#+32 \ 00000248 250100EF SWI +293 \ 0000024C 00B0A0E1 MOV R11,R0 3294 GetProvider(ws,0); \ 00000250 0010A0E3 MOV R1,#+0 \ 00000254 410000EF SWI +65 3295 char prov[16]; 3296 ws_2str(ws,prov,wstrlen(ws)); \ 00000258 0B00A0E1 MOV R0,R11 \ 0000025C 230100EF SWI +291 \ 00000260 0020A0E1 MOV R2,R0 \ 00000264 04108DE2 ADD R1,SP,#+4 \ 00000268 0B00A0E1 MOV R0,R11 \ 0000026C A30000EF SWI +163 3297 char *send_txt=malloc(32); \ 00000270 2000A0E3 MOV R0,#+32 \ 00000274 140000EF SWI +20 \ 00000278 0040A0E1 MOV R4,R0 3298 sprintf(send_txt, "Оператор: %s", prov); \ 0000027C 04208DE2 ADD R2,SP,#+4 \ 00000280 7E1F87E2 ADD R1,R7,#+504 \ 00000284 160000EF SWI +22 3299 FreeWS(ws); \ 00000288 0B00A0E1 MOV R0,R11 \ 0000028C 290100EF SWI +297 3300 3301 p=malloc(sizeof(PKT)+28+1); \ 00000290 2500A0E3 MOV R0,#+37 \ 00000294 140000EF SWI +20 \ 00000298 00B0A0E1 MOV R11,R0 3302 p->pkt.uin=t->uin; \ 0000029C 0C0095E5 LDR R0,[R5, #+12] \ 000002A0 00008BE5 STR R0,[R11, #+0] 3303 p->pkt.type=T_SENDMSG; \ 000002A4 B4A0CBE1 STRH R10,[R11, #+4] 3304 p->pkt.data_len=strlen(send_txt); \ 000002A8 0400A0E1 MOV R0,R4 \ 000002AC 1B0000EF SWI +27 \ 000002B0 B600CBE1 STRH R0,[R11, #+6] 3305 strcpy(p->data,send_txt); \ 000002B4 0410A0E1 MOV R1,R4 \ 000002B8 08008BE2 ADD R0,R11,#+8 \ 000002BC 1A0000EF SWI +26 3306 if(show_send_info) \ 000002C0 6C039FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000002C4 000090E5 LDR R0,[R0, #+0] \ 000002C8 000050E3 CMP R0,#+0 \ 000002CC 0C0196E5 LDR R0,[R6, #+268] \ 000002D0 010080E2 ADD R0,R0,#+1 \ 000002D4 0C0186E5 STR R0,[R6, #+268] \ 000002D8 CD00000A BEQ ??CheckComand_6 3307 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF); \ 000002DC 000009E0 AND R0,R9,R0 \ 000002E0 01002DE9 PUSH {R0} \ 000002E4 173087E2 ADD R3,R7,#+23 \ 000002E8 822F87E2 ADD R2,R7,#+520 \ 000002EC 0110A0E3 MOV R1,#+1 \ 000002F0 C40000EA B ??CheckComand_7 3308 else 3309 SENDMSGCOUNT++; 3310 SUBPROC((void *)SendAnswer,0,p); 3311 mfree(send_txt); 3312 return; 3313 } 3314 3315 //----------------------------------------------------------------------- 3316 3317 if(!strcmp(txt, "GET_MOD_INFO")) \ ??CheckComand_8: \ 000002F4 921F87E2 ADD R1,R7,#+584 \ 000002F8 0400A0E1 MOV R0,R4 \ 000002FC 190000EF SWI +25 \ 00000300 000050E3 CMP R0,#+0 \ 00000304 3000001A BNE ??CheckComand_9 3318 { 3319 comanda=0; \ 00000308 D40186E5 STR R0,[R6, #+468] 3320 TPKT *p; 3321 char *send_txt=malloc(256); \ 0000030C 400FA0E3 MOV R0,#+256 \ 00000310 140000EF SWI +20 \ 00000314 0040A0E1 MOV R4,R0 \ 00000318 141085E2 ADD R1,R5,#+20 \ 0000031C 5F0F4BE2 SUB R0,R11,#+380 \ 00000320 060080E0 ADD R0,R0,R6 3322 // sprintf(I_UIN, "uin%d", t->uin); 3323 strcpy(I_UIN, t->name); \ 00000324 1A0000EF SWI +26 3324 if(strstr(ignor_list,I_UIN)==0) \ 00000328 5F0F4BE2 SUB R0,R11,#+380 \ 0000032C 061080E0 ADD R1,R0,R6 \ 00000330 ........ LDR R0,??DataTable118 ;; ignor_list \ 00000334 180100EF SWI +280 \ 00000338 000050E3 CMP R0,#+0 3325 { 3326 strcpy(send_txt, mod_info); \ 0000033C 06108B00 ADDEQ R1,R11,R6 3327 } 3328 else 3329 strcpy(send_txt, "***Access denied***"); \ 00000340 8D1F8712 ADDNE R1,R7,#+564 \ 00000344 0400A0E1 MOV R0,R4 \ 00000348 1A0000EF SWI +26 3330 3331 strcpy(send_txt, mod_info); \ 0000034C 06108BE0 ADD R1,R11,R6 \ 00000350 0400A0E1 MOV R0,R4 \ 00000354 1A0000EF SWI +26 3332 3333 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 00000358 0400A0E1 MOV R0,R4 \ 0000035C 1B0000EF SWI +27 \ 00000360 090080E2 ADD R0,R0,#+9 \ 00000364 140000EF SWI +20 \ 00000368 00B0A0E1 MOV R11,R0 3334 p->pkt.uin=t->uin; \ 0000036C 0C0095E5 LDR R0,[R5, #+12] \ 00000370 00008BE5 STR R0,[R11, #+0] 3335 p->pkt.type=T_SENDMSG; \ 00000374 B4A0CBE1 STRH R10,[R11, #+4] 3336 p->pkt.data_len=strlen(send_txt); \ 00000378 0400A0E1 MOV R0,R4 \ 0000037C 1B0000EF SWI +27 \ 00000380 B600CBE1 STRH R0,[R11, #+6] 3337 strcpy(p->data,send_txt); \ 00000384 0410A0E1 MOV R1,R4 \ 00000388 08008BE2 ADD R0,R11,#+8 \ 0000038C 1A0000EF SWI +26 3338 #ifdef EVILFOX 3339 SENDMSGCOUNT++; 3340 #else 3341 if(show_send_info) \ 00000390 9C029FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000394 000090E5 LDR R0,[R0, #+0] \ 00000398 000050E3 CMP R0,#+0 \ 0000039C 0C0196E5 LDR R0,[R6, #+268] \ 000003A0 010080E2 ADD R0,R0,#+1 \ 000003A4 0C0186E5 STR R0,[R6, #+268] \ 000003A8 9900000A BEQ ??CheckComand_6 3342 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 000003AC 000009E0 AND R0,R9,R0 \ 000003B0 01002DE9 PUSH {R0} \ 000003B4 173087E2 ADD R3,R7,#+23 \ 000003B8 0110A0E3 MOV R1,#+1 \ 000003BC 1C00A0E3 MOV R0,#+28 \ 000003C0 B00E80E3 ORR R0,R0,#0xB00 \ 000003C4 062080E0 ADD R2,R0,R6 \ 000003C8 8E0000EA B ??CheckComand_7 3343 else 3344 SENDMSGCOUNT++; 3345 #endif 3346 SUBPROC((void *)SendAnswer,0,p); 3347 mfree(send_txt); 3348 return; 3349 } 3350 if(!strcmp(txt, "GET_BAT_INFO")) \ ??CheckComand_9: \ 000003CC 9D1F87E2 ADD R1,R7,#+628 \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 190000EF SWI +25 \ 000003D8 000050E3 CMP R0,#+0 \ 000003DC 2300001A BNE ??CheckComand_10 3351 { 3352 comanda=0; \ 000003E0 D40186E5 STR R0,[R6, #+468] 3353 TPKT *p; 3354 int bat; 3355 bat=*RamCap(); \ 000003E4 C88000EF SWI +32968 \ 000003E8 B0B0D0E1 LDRH R11,[R0, #+0] 3356 char *send_txt=malloc(64); \ 000003EC 4000A0E3 MOV R0,#+64 \ 000003F0 140000EF SWI +20 \ 000003F4 0040A0E1 MOV R4,R0 3357 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 000003F8 0B20A0E1 MOV R2,R11 \ 000003FC 961F87E2 ADD R1,R7,#+600 \ 00000400 160000EF SWI +22 3358 p=malloc(sizeof(PKT)+28+1); \ 00000404 2500A0E3 MOV R0,#+37 \ 00000408 140000EF SWI +20 \ 0000040C 00B0A0E1 MOV R11,R0 3359 p->pkt.uin=t->uin; \ 00000410 0C0095E5 LDR R0,[R5, #+12] \ 00000414 00008BE5 STR R0,[R11, #+0] 3360 p->pkt.type=T_SENDMSG; \ 00000418 B4A0CBE1 STRH R10,[R11, #+4] 3361 p->pkt.data_len=strlen(send_txt); \ 0000041C 0400A0E1 MOV R0,R4 \ 00000420 1B0000EF SWI +27 \ 00000424 B600CBE1 STRH R0,[R11, #+6] 3362 strcpy(p->data,send_txt); \ 00000428 0410A0E1 MOV R1,R4 \ 0000042C 08008BE2 ADD R0,R11,#+8 \ 00000430 1A0000EF SWI +26 3363 #ifdef EVILFOX 3364 SENDMSGCOUNT++; 3365 #else 3366 if(show_send_info) \ 00000434 F8019FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000438 000090E5 LDR R0,[R0, #+0] \ 0000043C 000050E3 CMP R0,#+0 \ 00000440 0C0196E5 LDR R0,[R6, #+268] \ 00000444 010080E2 ADD R0,R0,#+1 \ 00000448 0C0186E5 STR R0,[R6, #+268] \ 0000044C 7000000A BEQ ??CheckComand_6 3367 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 00000450 000009E0 AND R0,R9,R0 \ 00000454 01002DE9 PUSH {R0} \ 00000458 173087E2 ADD R3,R7,#+23 \ 0000045C 0110A0E3 MOV R1,#+1 \ 00000460 0400A0E3 MOV R0,#+4 \ 00000464 B00E80E3 ORR R0,R0,#0xB00 \ 00000468 062080E0 ADD R2,R0,R6 \ 0000046C 650000EA B ??CheckComand_7 3368 else 3369 SENDMSGCOUNT++; 3370 #endif 3371 SUBPROC((void *)SendAnswer,0,p); 3372 mfree(send_txt); 3373 return; 3374 } 3375 if(away_m==1) \ ??CheckComand_10: \ 00000470 240196E5 LDR R0,[R6, #+292] \ 00000474 010050E3 CMP R0,#+1 \ 00000478 3700001A BNE ??CheckComand_11 3376 { 3377 comanda=1; \ 0000047C 403196E5 LDR R3,[R6, #+320] \ 00000480 B0219FE5 LDR R2,??CheckComand_3+0x4 ;; away_msg4 \ 00000484 D40186E5 STR R0,[R6, #+468] \ 00000488 A10FA0E3 MOV R0,#+644 \ 0000048C E61F80E2 ADD R1,R0,#+920 \ 00000490 061081E0 ADD R1,R1,R6 \ 00000494 02002DE9 PUSH {R1} \ 00000498 000053E3 CMP R3,#+0 3378 TPKT *p; 3379 // sprintf(hah,"online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); 3380 3381 if(inp_away_m)//Если ввели текст то выводим его,иначе из конфига 3382 sprintf(away_msg, "Автоответчик: %s %s! %s %s", away_msg4, ddd, inp_away_msg2, away_msg_time); \ 0000049C 20119615 LDRNE R1,[R6, #+288] 3383 else 3384 sprintf(away_msg, "Автоответчик: %s %s! %s %s", away_msg4, ddd, away_msg2, away_msg_time); \ 000004A0 ........ LDREQ R1,??DataTable119 ;; away_msg2 \ 000004A4 02002DE9 PUSH {R1} \ 000004A8 1C309DE5 LDR R3,[SP, #+28] \ 000004AC 071080E0 ADD R1,R0,R7 \ 000004B0 A40F80E2 ADD R0,R0,#+656 \ 000004B4 060080E0 ADD R0,R0,R6 \ 000004B8 160000EF SWI +22 \ 000004BC 08D08DE2 ADD SP,SP,#+8 3385 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 000004C0 1400A0E3 MOV R0,#+20 \ 000004C4 500E80E3 ORR R0,R0,#0x500 \ 000004C8 060080E0 ADD R0,R0,R6 \ 000004CC 1B0000EF SWI +27 \ 000004D0 090080E2 ADD R0,R0,#+9 \ 000004D4 140000EF SWI +20 \ 000004D8 00B0A0E1 MOV R11,R0 3386 p->pkt.uin=t->uin; \ 000004DC 0C0095E5 LDR R0,[R5, #+12] \ 000004E0 00008BE5 STR R0,[R11, #+0] 3387 p->pkt.type=T_SENDMSG; \ 000004E4 B4A0CBE1 STRH R10,[R11, #+4] 3388 p->pkt.data_len=strlen(away_msg); \ 000004E8 1400A0E3 MOV R0,#+20 \ 000004EC 500E80E3 ORR R0,R0,#0x500 \ 000004F0 060080E0 ADD R0,R0,R6 \ 000004F4 1B0000EF SWI +27 \ 000004F8 B600CBE1 STRH R0,[R11, #+6] 3389 strcpy(p->data,away_msg); \ 000004FC 1400A0E3 MOV R0,#+20 \ 00000500 500E80E3 ORR R0,R0,#0x500 \ 00000504 061080E0 ADD R1,R0,R6 \ 00000508 08008BE2 ADD R0,R11,#+8 \ 0000050C 1A0000EF SWI +26 3390 #ifdef EVILFOX 3391 SENDMSGCOUNT++; 3392 #else 3393 if(show_send_info) \ 00000510 1C019FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000514 000090E5 LDR R0,[R0, #+0] \ 00000518 000050E3 CMP R0,#+0 \ 0000051C 0C0196E5 LDR R0,[R6, #+268] \ 00000520 010080E2 ADD R0,R0,#+1 \ 00000524 0C0186E5 STR R0,[R6, #+268] \ 00000528 0700000A BEQ ??CheckComand_12 3394 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 0000052C 000009E0 AND R0,R9,R0 \ 00000530 01002DE9 PUSH {R0} \ 00000534 173087E2 ADD R3,R7,#+23 \ 00000538 B32E86E2 ADD R2,R6,#+2864 \ 0000053C 0110A0E3 MOV R1,#+1 \ 00000540 0500A0E1 MOV R0,R5 \ 00000544 ........ BL AddStringToLog \ 00000548 04D08DE2 ADD SP,SP,#+4 3395 else 3396 SENDMSGCOUNT++; 3397 #endif 3398 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_12: \ 0000054C 0B20A0E1 MOV R2,R11 \ 00000550 0010A0E3 MOV R1,#+0 \ 00000554 0800A0E1 MOV R0,R8 \ 00000558 710100EF SWI +369 3399 } 3400 #ifdef klcuhnik 3401 if((t->uin==AUTOBOT_UIN)&&(autobot)) 3402 { 3403 TPKT *p; 3404 if(t->bot_msg==0) sprintf(away_msg, "Привет"); 3405 if(t->bot_msg==1) sprintf(away_msg, "думаешь?!"); 3406 if(t->bot_msg==2) sprintf(away_msg, "да что ты говоришь"); 3407 if(t->bot_msg==3) sprintf(away_msg, "странно"); 3408 if(t->bot_msg==4) sprintf(away_msg, "ты так думаешь?"); 3409 if(t->bot_msg==5) sprintf(away_msg, "может быть"); 3410 if(t->bot_msg==6) sprintf(away_msg, "да нахрен"); 3411 if(t->bot_msg==7) sprintf(away_msg, "конечна"); 3412 if(t->bot_msg==8) sprintf(away_msg, "почему нет"); 3413 t->bot_msg++; 3414 if(t->bot_msg==9) 3415 t->bot_msg=1; 3416 // strcpy(away_msg, c); 3417 p=malloc(sizeof(PKT)+strlen(away_msg)+1); 3418 p->pkt.uin=t->uin; 3419 p->pkt.type=T_SENDMSG; 3420 p->pkt.data_len=strlen(away_msg); 3421 strcpy(p->data,away_msg); 3422 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); 3423 SUBPROC((void *)SendAnswer,0,p); 3424 3425 extern const int autobot_kel; 3426 if((t->uin==334492880)&&(autobot_kel)) 3427 { 3428 TPKT *p; 3429 //if(t->bot_msg==0) sprintf(away_msg, "Привет"); 3430 if(t->bot_msg==0) sprintf(away_msg, "думаешь?!"); 3431 if(t->bot_msg==1) sprintf(away_msg, "да что ты говоришь"); 3432 if(t->bot_msg==2) sprintf(away_msg, "странно"); 3433 if(t->bot_msg==3) sprintf(away_msg, "угу"); 3434 if(t->bot_msg==4) sprintf(away_msg, "Не еби мне мозг!"); 3435 if(t->bot_msg==5) sprintf(away_msg, "иди на хуй!!"); 3436 if(t->bot_msg==6) sprintf(away_msg, "сука"); 3437 if(t->bot_msg==7) sprintf(away_msg, "заебал"); 3438 if(t->bot_msg==8) sprintf(away_msg, "отъебись cука!!!*FUCK_YOU*"); 3439 t->bot_msg++; 3440 if(t->bot_msg==9) 3441 t->bot_msg=1; 3442 // strcpy(away_msg, c); 3443 p=malloc(sizeof(PKT)+strlen(away_msg)+1); 3444 p->pkt.uin=t->uin; 3445 p->pkt.type=T_SENDMSG; 3446 p->pkt.data_len=strlen(away_msg); 3447 strcpy(p->data,away_msg); 3448 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); 3449 SUBPROC((void *)SendAnswer,0,p); 3450 } 3451 } 3452 #endif 3453 //----------------------// 3454 3455 if(!strcmp(txt, "GET_URL_INFO")) \ ??CheckComand_11: \ 0000055C 6D1E87E2 ADD R1,R7,#+1744 \ 00000560 0400A0E1 MOV R0,R4 \ 00000564 190000EF SWI +25 \ 00000568 000050E3 CMP R0,#+0 \ 0000056C 2E00001A BNE ??CheckComand_13 3456 { 3457 comanda=0; \ 00000570 D40186E5 STR R0,[R6, #+468] 3458 TPKT *p; 3459 3460 char *send_txt=malloc(786); \ 00000574 C40F8AE3 ORR R0,R10,#0x310 \ 00000578 140000EF SWI +20 \ 0000057C 0040A0E1 MOV R4,R0 3461 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 3462 "http://windes.narod.ru/files/naticq_mod2058s.zip (sgold) (40kb)" 3463 "http://windes.narod.ru/files/naticq_mod2058n.zip (NewSGold) (40kb)" 3464 "http://windes.narod.ru/files/naticq_mod2058e.zip (elka) (40kb)" 3465 "files: http://windes.narod.ru/files/naticqmod_allfiles_w.zip (432kb)" 3466 "Status on iconbar http://windes.narod.ru/files/img16x16.zip (74kb)" 3467 "Так же все будет тут http://klcuhnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000580 5A0F87E2 ADD R0,R7,#+360 \ 00000584 01002DE9 PUSH {R0} \ 00000588 573F87E2 ADD R3,R7,#+348 \ 0000058C B12F87E2 ADD R2,R7,#+708 \ 00000590 A81F87E2 ADD R1,R7,#+672 \ 00000594 0400A0E1 MOV R0,R4 \ 00000598 160000EF SWI +22 3468 3469 p=malloc(sizeof(PKT)+786); \ 0000059C C60F8AE3 ORR R0,R10,#0x318 \ 000005A0 140000EF SWI +20 \ 000005A4 00B0A0E1 MOV R11,R0 3470 p->pkt.uin=t->uin; \ 000005A8 0C0095E5 LDR R0,[R5, #+12] \ 000005AC 00008BE5 STR R0,[R11, #+0] 3471 p->pkt.type=T_SENDMSG; \ 000005B0 B4A0CBE1 STRH R10,[R11, #+4] 3472 p->pkt.data_len=strlen(send_txt); \ 000005B4 0400A0E1 MOV R0,R4 \ 000005B8 1B0000EF SWI +27 \ 000005BC B600CBE1 STRH R0,[R11, #+6] 3473 strcpy(p->data,send_txt); \ 000005C0 0410A0E1 MOV R1,R4 \ 000005C4 08008BE2 ADD R0,R11,#+8 \ 000005C8 1A0000EF SWI +26 3474 if(show_send_info) \ 000005CC 60009FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000005D0 000090E5 LDR R0,[R0, #+0] \ 000005D4 04D08DE2 ADD SP,SP,#+4 \ 000005D8 000050E3 CMP R0,#+0 \ 000005DC 0C0196E5 LDR R0,[R6, #+268] \ 000005E0 010080E2 ADD R0,R0,#+1 \ 000005E4 0C0186E5 STR R0,[R6, #+268] \ 000005E8 0900000A BEQ ??CheckComand_6 3475 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF); \ 000005EC 000009E0 AND R0,R9,R0 \ 000005F0 01002DE9 PUSH {R0} \ 000005F4 173087E2 ADD R3,R7,#+23 \ 000005F8 0110A0E3 MOV R1,#+1 \ 000005FC 4C00A0E3 MOV R0,#+76 \ 00000600 400E80E3 ORR R0,R0,#0x400 \ 00000604 072080E0 ADD R2,R0,R7 \ ??CheckComand_7: \ 00000608 0500A0E1 MOV R0,R5 \ 0000060C ........ BL AddStringToLog \ 00000610 04D08DE2 ADD SP,SP,#+4 3476 else 3477 SENDMSGCOUNT++; 3478 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_6: \ 00000614 0B20A0E1 MOV R2,R11 \ 00000618 0010A0E3 MOV R1,#+0 \ 0000061C 0800A0E1 MOV R0,R8 \ 00000620 710100EF SWI +369 3479 mfree(send_txt); \ 00000624 0400A0E1 MOV R0,R4 \ 00000628 150000EF SWI +21 3480 return; \ ??CheckComand_13: \ 0000062C 18D08DE2 ADD SP,SP,#+24 ;; stack cleaning \ 00000630 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_3: \ 00000634 ........ DC32 show_send_info \ 00000638 ........ DC32 away_msg4 3481 } 3482 3483 } 3484 //===========================komand list end 3485 \ In segment DATA_Z, align 4, align-sorted 3486 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 3487 char show_nick[32]; 3488 int INC_show; 3489 #ifdef ELKA 3490 int font =9; 3491 #else 3492 int font= 4; 3493 #endif 3494 const char color[4]={255,255,255,100}; 3495 \ In segment CODE, align 4, keep-with-next 3496 void show_pp_sender() 3497 { \ show_pp_sender: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 3498 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable131 ;; S_ICONS \ 00000008 D80194E5 LDR R0,[R4, #+472] \ 0000000C 010050E3 CMP R0,#+1 \ 00000010 F081BDB8 POPLT {R4-R8,PC} 3499 { 3500 WSHDR *ws=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 0050A0E1 MOV R5,R0 3501 ascii2ws(ws,show_nick); \ 00000020 C51E84E2 ADD R1,R4,#+3152 \ 00000024 ........ _BLF ascii2ws,??ascii2ws??rA 3502 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 2E0100EF SWI +302 \ 00000030 0060A0E1 MOV R6,R0 \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 2E0100EF SWI +302 \ 0000003C 0070A0E1 MOV R7,R0 \ 00000040 DC0194E5 LDR R0,[R4, #+476] \ 00000044 C50100EF SWI +453 \ 00000048 DC1194E5 LDR R1,[R4, #+476] \ 0000004C 0080A0E1 MOV R8,R0 \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 080200EF SWI +520 \ 00000058 40002DE9 PUSH {R6} \ 0000005C 80002DE9 PUSH {R7} \ 00000060 0010A0E3 MOV R1,#+0 \ 00000064 02002DE9 PUSH {R1} \ 00000068 023088E2 ADD R3,R8,#+2 \ 0000006C 022080E2 ADD R2,R0,#+2 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 B40100EF SWI +436 3503 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,( char*) color,GetPaletteAdrByColorIndex(23)); \ 00000078 1700A0E3 MOV R0,#+23 \ 0000007C 2E0100EF SWI +302 \ 00000080 0060A0E1 MOV R6,R0 \ 00000084 DC0194E5 LDR R0,[R4, #+476] \ 00000088 C50100EF SWI +453 \ 0000008C DC1194E5 LDR R1,[R4, #+476] \ 00000090 0070A0E1 MOV R7,R0 \ 00000094 0500A0E1 MOV R0,R5 \ 00000098 080200EF SWI +520 \ 0000009C 64109FE5 LDR R1,??show_pp_sender_0 ;; color \ 000000A0 40002DE9 PUSH {R6} \ 000000A4 02002DE9 PUSH {R1} \ 000000A8 033080E2 ADD R3,R0,#+3 \ 000000AC 0120A0E3 MOV R2,#+1 \ 000000B0 0500A0E1 MOV R0,R5 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 02002DE9 PUSH {R1} \ 000000BC DC1194E5 LDR R1,[R4, #+476] \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 011087E2 ADD R1,R7,#+1 \ 000000C8 02002DE9 PUSH {R1} \ 000000CC 0210A0E1 MOV R1,R2 \ 000000D0 4C0100EF SWI +332 3504 FreeWS(ws); \ 000000D4 0500A0E1 MOV R0,R5 \ 000000D8 290100EF SWI +297 3505 INC_show--; \ 000000DC D80194E5 LDR R0,[R4, #+472] 3506 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 000000E0 24209FE5 LDR R2,??show_pp_sender_0+0x4 ;; show_pp_sender \ 000000E4 010040E2 SUB R0,R0,#+1 \ 000000E8 D80184E5 STR R0,[R4, #+472] \ 000000EC 0A10A0E3 MOV R1,#+10 \ 000000F0 C800A0E3 MOV R0,#+200 \ 000000F4 A00E80E3 ORR R0,R0,#0xA00 \ 000000F8 040080E0 ADD R0,R0,R4 \ 000000FC 4D0000EF SWI +77 \ 00000100 20D08DE2 ADD SP,SP,#+32 3507 } 3508 } \ 00000104 F081BDE8 POP {R4-R8,PC} ;; return \ ??show_pp_sender_0: \ 00000108 ........ DC32 color \ 0000010C ........ DC32 show_pp_sender 3509 3510 extern const int SHOW_ACTIVE; 3511 \ In segment CODE, align 4, keep-with-next 3512 void Get_Online_total() 3513 { 3514 CLIST *t; 3515 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable131 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 B41180E5 STR R1,[R0, #+436] 3516 kopa_kontaktu=0; \ 0000000C B81180E5 STR R1,[R0, #+440] 3517 t=(CLIST *)(&cltop); \ 00000010 671F80E2 ADD R1,R0,#+412 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 3518 while(t=(CLIST *)(t->next)) 3519 { 3520 if (!t->isgroup) \ ??Get_Online_total_1: \ 00000020 082091E5 LDR R2,[R1, #+8] \ 00000024 000052E3 CMP R2,#+0 \ 00000028 0700001A BNE ??Get_Online_total_0 3521 { 3522 kopa_online++; \ 0000002C B42190E5 LDR R2,[R0, #+436] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 B42180E5 STR R2,[R0, #+436] 3523 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 B8219015 LDRNE R2,[R0, #+440] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 B8218015 STRNE R2,[R0, #+440] 3524 } 3525 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 3526 } \ 00000058 1EFF2FE1 BX LR ;; return 3527 \ In segment CODE, align 4, keep-with-next 3528 ProcessPacket(TPKT *p) 3529 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 50DF4DE2 SUB SP,SP,#+320 3530 extern const int VIBR_TYPE, VIBR_ON_CONNECT; 3531 CLIST *t; 3532 LOGQ *q; 3533 char s[256]; 3534 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable134 ;; `?` \ 0000000C ........ LDR R7,??DataTable131 ;; S_ICONS \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 B410D4E1 LDRH R1,[R4, #+4] \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 0160A0E3 MOV R6,#+1 \ 00000020 0080A0E3 MOV R8,#+0 \ 00000024 031041E2 SUB R1,R1,#+3 \ 00000028 1C0051E3 CMP R1,#+28 \ 0000002C 9802008A BHI ??ProcessPacket_1 \ 00000030 022F8FE2 ADR R2,??ProcessPacket_0 \ 00000034 8110A0E1 MOV R1,R1, LSL #+1 \ 00000038 B12092E1 LDRH R2,[R2, R1] \ 0000003C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??ProcessPacket_0: \ 00000040 41010E009402 DC16 +321,+14,+660,+660 \ 9402 \ 00000048 110094025300 DC16 +17,+660,+83,+660 \ 9402 \ 00000050 940294029402 DC16 +660,+660,+660,+660 \ 9402 \ 00000058 9402FB01FB01 DC16 +660,+507,+507,+660 \ 9402 \ 00000060 940243005100 DC16 +660,+67,+81,+660 \ 9402 \ 00000068 940294022C02 DC16 +660,+660,+556,+660 \ 9402 \ 00000070 940294029402 DC16 +660,+660,+660,+660 \ 9402 \ 00000078 92020000 DC16 +658,+0 3535 { 3536 case T_LOGIN: 3537 set_my_status(); \ ??ProcessPacket_2: \ 0000007C ........ BL set_my_status 3538 set_my_xstatus(); \ 00000080 ........ BL set_my_xstatus \ 00000084 820200EA B ??ProcessPacket_1 3539 break; 3540 case T_CLENTRY: 3541 if (p->pkt.uin) \ ??ProcessPacket_3: \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 1800000A BEQ ??ProcessPacket_4 3542 { 3543 if ((t=FindContactByUin(p->pkt.uin))) \ 00000090 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000094 0090B0E1 MOVS R9,R0 \ 00000098 0E00000A BEQ ??ProcessPacket_5 3544 { 3545 // t->state=0xFFFF; 3546 if (!t->local) strncpy(t->name,p->data,63); \ 0000009C 900099E5 LDR R0,[R9, #+144] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300001A BNE ??ProcessPacket_6 \ 000000A8 3F20A0E3 MOV R2,#+63 \ 000000AC 081084E2 ADD R1,R4,#+8 \ 000000B0 140089E2 ADD R0,R9,#+20 \ 000000B4 160100EF SWI +278 3547 t->group=GROUP_CACHE; \ ??ProcessPacket_6: \ 000000B8 A00197E5 LDR R0,[R7, #+416] \ 000000BC 100089E5 STR R0,[R9, #+16] 3548 ChangeContactPos(t); \ ??ProcessPacket_7: \ 000000C0 0900A0E1 MOV R0,R9 \ 000000C4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3549 RecountMenu(t,1); \ 000000C8 0110A0E3 MOV R1,#+1 \ 000000CC 0900A0E1 MOV R0,R9 \ ??ProcessPacket_8: \ 000000D0 ........ BL RecountMenu \ 000000D4 6E0200EA B ??ProcessPacket_1 3550 } 3551 else 3552 { 3553 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_5: \ 000000D8 A02197E5 LDR R2,[R7, #+416] \ 000000DC 000094E5 LDR R0,[R4, #+0] \ 000000E0 0030A0E3 MOV R3,#+0 \ 000000E4 081084E2 ADD R1,R4,#+8 \ 000000E8 ........ _BLF AddContact,??AddContact??rA \ 000000EC 0610A0E1 MOV R1,R6 \ 000000F0 F6FFFFEA B ??ProcessPacket_8 3554 } 3555 } 3556 else 3557 { 3558 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000F4 ........ LDR R0,??DataTable124 ;; VIBR_ON_CONNECT \ 000000F8 000090E5 LDR R0,[R0, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0100000A BEQ ??ProcessPacket_9 3559 { 3560 vibra_count=1; \ 00000104 646187E5 STR R6,[R7, #+356] 3561 start_vibra(); \ 00000108 ........ BL start_vibra 3562 } 3563 GROUP_CACHE=0; \ ??ProcessPacket_9: \ 0000010C A08187E5 STR R8,[R7, #+416] 3564 ask_my_info(); 3565 if (contactlist_menu_id) \ 00000110 A40197E5 LDR R0,[R7, #+420] \ 00000114 000050E3 CMP R0,#+0 \ 00000118 0200000A BEQ ??ProcessPacket_10 3566 { 3567 RecountMenu(NULL,1); \ 0000011C 0110A0E3 MOV R1,#+1 \ 00000120 0800A0E1 MOV R0,R8 \ ??ProcessPacket_11: \ 00000124 E9FFFFEA B ??ProcessPacket_8 3568 } 3569 else 3570 { 3571 create_contactlist_menu(); \ ??ProcessPacket_10: \ 00000128 ........ BL create_contactlist_menu 3572 if(!dontLogOnConnect && isLogOnline) dontLogOnConnect=1; \ 0000012C D40097E5 LDR R0,[R7, #+212] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 5602001A BNE ??ProcessPacket_1 \ 00000138 68099FE5 LDR R0,??ProcessPacket_12+0x4 ;; isLogOnline \ 0000013C 000090E5 LDR R0,[R0, #+0] \ 00000140 000050E3 CMP R0,#+0 \ 00000144 5202000A BEQ ??ProcessPacket_1 \ 00000148 D46087E5 STR R6,[R7, #+212] \ 0000014C 500200EA B ??ProcessPacket_1 3573 } 3574 } 3575 break; 3576 case T_GROUPID: 3577 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_13: \ 00000150 A00187E5 STR R0,[R7, #+416] \ 00000154 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000158 0090B0E1 MOVS R9,R0 \ 0000015C 0400000A BEQ ??ProcessPacket_14 3578 { 3579 strncpy(t->name,p->data,63); \ 00000160 3F20A0E3 MOV R2,#+63 \ 00000164 081084E2 ADD R1,R4,#+8 \ 00000168 140089E2 ADD R0,R9,#+20 \ 0000016C 160100EF SWI +278 3580 ChangeContactPos(t); \ 00000170 D2FFFFEA B ??ProcessPacket_7 3581 RecountMenu(t,1); 3582 } 3583 else 3584 { 3585 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_14: \ 00000174 000094E5 LDR R0,[R4, #+0] \ 00000178 081084E2 ADD R1,R4,#+8 \ 0000017C ........ _BLF AddGroup,??AddGroup??rA \ 00000180 0110A0E3 MOV R1,#+1 \ 00000184 D1FFFFEA B ??ProcessPacket_8 3586 } 3587 break; 3588 case T_GROUPFOLLOW: 3589 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_15: \ 00000188 A00187E5 STR R0,[R7, #+416] \ 0000018C 400200EA B ??ProcessPacket_1 3590 break; 3591 case T_STATUSCHANGE: 3592 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_16: \ 00000190 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000194 0090B0E1 MOVS R9,R0 3593 if (t) \ 00000198 DB00000A BEQ ??ProcessPacket_17 3594 { 3595 int i=t->state; \ 0000019C B415D9E1 LDRH R1,[R9, #+84] 3596 CLIST *oldt=NULL; \ 000001A0 00A0A0E3 MOV R10,#+0 \ 000001A4 10108DE5 STR R1,[SP, #+16] \ 000001A8 0A00D4E5 LDRB R0,[R4, #+10] \ 000001AC B615D9E1 LDRH R1,[R9, #+86] \ 000001B0 000051E1 CMP R1,R0 \ 000001B4 1D00000A BEQ ??ProcessPacket_18 3597 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 3598 { 3599 t->xstate=p->data[2]; \ 000001B8 B605C9E1 STRH R0,[R9, #+86] 3600 FreeXText(t); \ 000001BC 0900A0E1 MOV R0,R9 \ 000001C0 ........ _BLF FreeXText,??FreeXText??rA 3601 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001C4 B605D9E1 LDRH R0,[R9, #+86] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 1600000A BEQ ??ProcessPacket_19 \ 000001D0 D4089FE5 LDR R0,??ProcessPacket_12+0x8 ;; ENA_AUTO_XTXT \ 000001D4 000090E5 LDR R0,[R0, #+0] \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 1200000A BEQ ??ProcessPacket_19 3602 { 3603 t->req_xtext=1; \ 000001E0 8C6089E5 STR R6,[R9, #+140] 3604 if (edchat_id) // Если открыт чат \ 000001E4 A80197E5 LDR R0,[R7, #+424] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0F00000A BEQ ??ProcessPacket_18 3605 { 3606 void *data=FindGUIbyId(edchat_id,NULL); \ 000001F0 A80197E5 LDR R0,[R7, #+424] \ 000001F4 0010A0E3 MOV R1,#+0 \ 000001F8 090200EF SWI +521 3607 if (data) \ 000001FC 000050E3 CMP R0,#+0 \ 00000200 0A00000A BEQ ??ProcessPacket_18 3608 { 3609 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 00000204 DF0100EF SWI +479 3610 if (ed_struct) \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 0700000A BEQ ??ProcessPacket_18 3611 { 3612 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 00000210 000090E5 LDR R0,[R0, #+0] \ 00000214 090050E1 CMP R0,R9 \ 00000218 0400001A BNE ??ProcessPacket_18 3613 { 3614 t->req_xtext=0; \ 0000021C 8C8089E5 STR R8,[R9, #+140] 3615 RequestXText(t->uin); \ 00000220 0C0099E5 LDR R0,[R9, #+12] \ 00000224 ........ BL RequestXText \ 00000228 000000EA B ??ProcessPacket_18 3616 } 3617 } 3618 } 3619 } 3620 } 3621 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 3622 { 3623 t->req_xtext=0; \ ??ProcessPacket_19: \ 0000022C 8C8089E5 STR R8,[R9, #+140] 3624 } 3625 } 3626 if (contactlist_menu_id) \ ??ProcessPacket_18: \ 00000230 A40197E5 LDR R0,[R7, #+420] \ 00000234 000050E3 CMP R0,#+0 \ 00000238 0500000A BEQ ??ProcessPacket_20 3627 { 3628 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000023C A40197E5 LDR R0,[R7, #+420] \ 00000240 0010A0E3 MOV R1,#+0 \ 00000244 090200EF SWI +521 \ 00000248 8F0100EF SWI +399 \ 0000024C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000250 00A0A0E1 MOV R10,R0 3629 } 3630 if(t->state==65535) t->change=1; \ ??ProcessPacket_20: \ 00000254 B405D9E1 LDRH R0,[R9, #+84] \ 00000258 FFB0A0E3 MOV R11,#+255 \ 0000025C FFBC8BE3 ORR R11,R11,#0xFF00 \ 00000260 0B0050E1 CMP R0,R11 \ 00000264 60608905 STREQ R6,[R9, #+96] 3631 t->state=*((unsigned short *)(p->data)); \ 00000268 B800D4E1 LDRH R0,[R4, #+8] \ 0000026C B405C9E1 STRH R0,[R9, #+84] 3632 if((t->state!=65535)&&(t->change==1)) \ 00000270 0B0050E1 CMP R0,R11 \ 00000274 0400000A BEQ ??ProcessPacket_21 \ 00000278 600099E5 LDR R0,[R9, #+96] \ 0000027C 010050E3 CMP R0,#+1 3633 { 3634 t->just_now=2; \ 00000280 0200A003 MOVEQ R0,#+2 \ 00000284 5C008905 STREQ R0,[R9, #+92] 3635 t->change=0; \ 00000288 60808905 STREQ R8,[R9, #+96] 3636 } 3637 LogStatusChange(t); \ ??ProcessPacket_21: \ 0000028C 0900A0E1 MOV R0,R9 \ 00000290 ........ _BLF LogStatusChange,??LogStatusChange??rA 3638 ChangeContactPos(t); \ 00000294 0900A0E1 MOV R0,R9 \ 00000298 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3639 RecountMenu(oldt,1); \ 0000029C 0110A0E3 MOV R1,#+1 \ 000002A0 0A00A0E1 MOV R0,R10 \ 000002A4 ........ BL RecountMenu 3640 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ 000002A8 B405D9E1 LDRH R0,[R9, #+84] \ 000002AC 0B0050E1 CMP R0,R11 \ 000002B0 5000000A BEQ ??ProcessPacket_22 \ 000002B4 10109DE5 LDR R1,[SP, #+16] \ 000002B8 0B0051E1 CMP R1,R11 \ 000002BC 4D00001A BNE ??ProcessPacket_22 3641 { 3642 #ifdef EVILFOX 3643 if(!extended_sounds) 3644 { 3645 Play(sndGlobal); 3646 3647 } 3648 else 3649 { 3650 uins=t->uin; 3651 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); 3652 Play(talk_sound); 3653 3654 } 3655 #else 3656 #ifdef klcuhnik 3657 void SetIconBarHandler(); 3658 if(t->uin==438532198) 3659 { 3660 solnce=1; 3661 SetIconBarHandler(); 3662 } 3663 #endif 3664 if(!extended_sounds) \ 000002C0 ........ LDR R0,??DataTable125 ;; extended_sounds \ 000002C4 E4A79FE5 LDR R10,??ProcessPacket_12+0xC ;; sndGlobal \ 000002C8 000090E5 LDR R0,[R0, #+0] \ 000002CC 466EA0E3 MOV R6,#+1120 \ 000002D0 000050E3 CMP R0,#+0 \ 000002D4 3500001A BNE ??ProcessPacket_23 3665 { 3666 Play(sndGlobal); \ 000002D8 0A00A0E1 MOV R0,R10 \ ??ProcessPacket_24: \ 000002DC ........ BL Play 3667 if(isLogOnline && dontLogOnConnect) \ 000002E0 C0079FE5 LDR R0,??ProcessPacket_12+0x4 ;; isLogOnline \ 000002E4 000090E5 LDR R0,[R0, #+0] \ 000002E8 000050E3 CMP R0,#+0 \ 000002EC D4009715 LDRNE R0,[R7, #+212] \ 000002F0 00005013 CMPNE R0,#+0 \ 000002F4 7F00000A BEQ ??ProcessPacket_25 3668 { 3669 comanda=0; \ 000002F8 D48187E5 STR R8,[R7, #+468] 3670 TTime time; 3671 TDate date; 3672 GetDateTime(&date,&time); \ 000002FC 0D10A0E1 MOV R1,SP \ 00000300 08008DE2 ADD R0,SP,#+8 \ 00000304 B40000EF SWI +180 3673 char *txt=malloc(256); \ 00000308 400FA0E3 MOV R0,#+256 \ 0000030C 140000EF SWI +20 \ 00000310 00A0A0E1 MOV R10,R0 3674 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); \ 00000314 0D00DDE5 LDRB R0,[SP, #+13] \ 00000318 051086E0 ADD R1,R6,R5 \ 0000031C 01002DE9 PUSH {R0} \ 00000320 1000DDE5 LDRB R0,[SP, #+16] \ 00000324 01002DE9 PUSH {R0} \ 00000328 0A00DDE5 LDRB R0,[SP, #+10] \ 0000032C 01002DE9 PUSH {R0} \ 00000330 0D30DDE5 LDRB R3,[SP, #+13] \ 00000334 0C20DDE5 LDRB R2,[SP, #+12] \ 00000338 0A00A0E1 MOV R0,R10 \ 0000033C 160000EF SWI +22 3675 3676 TPKT *p=malloc(sizeof(PKT)); \ 00000340 0800A0E3 MOV R0,#+8 \ 00000344 140000EF SWI +20 3677 p->pkt.uin=t->uin; \ 00000348 0C1099E5 LDR R1,[R9, #+12] \ 0000034C 001080E5 STR R1,[R0, #+0] 3678 p->pkt.type=T_XTEXT_REQ; \ 00000350 1810A0E3 MOV R1,#+24 \ 00000354 B410C0E1 STRH R1,[R0, #+4] 3679 p->pkt.data_len=0; \ 00000358 B680C0E1 STRH R8,[R0, #+6] 3680 3681 t->xtext=malloc(256); \ 0000035C 400FA0E3 MOV R0,#+256 \ 00000360 140000EF SWI +20 \ 00000364 880089E5 STR R0,[R9, #+136] 3682 // sprintf(t->xtext+1,txt); 3683 snprintf(t->xtext,256,txt); \ 00000368 0A20A0E1 MOV R2,R10 \ 0000036C 401FA0E3 MOV R1,#+256 \ 00000370 1B0100EF SWI +283 3684 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF); \ 00000374 0800E0E1 MVN R0,R8 \ 00000378 01002DE9 PUSH {R0} \ 0000037C 0A20A0E1 MOV R2,R10 \ 00000380 0310A0E3 MOV R1,#+3 \ 00000384 AA0F86E2 ADD R0,R6,#+680 \ 00000388 053080E0 ADD R3,R0,R5 \ 0000038C 0900A0E1 MOV R0,R9 \ 00000390 ........ BL AddStringToLog 3685 ReqAddMsgToChat(t); \ 00000394 0900A0E1 MOV R0,R9 \ 00000398 ........ BL ReqAddMsgToChat 3686 // RecountMenu(t, 1); 3687 RecountMenu(NULL, 0); \ 0000039C 0010A0E3 MOV R1,#+0 \ 000003A0 0100A0E1 MOV R0,R1 \ 000003A4 ........ BL RecountMenu 3688 mfree(txt); \ 000003A8 0A00A0E1 MOV R0,R10 \ 000003AC 4F0000EA B ??ProcessPacket_26 3689 } 3690 } 3691 else 3692 { 3693 FSTATS stat; 3694 int fsize; 3695 unsigned int ul = 0; 3696 uins=t->uin; 3697 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ ??ProcessPacket_23: \ 000003B0 FC269FE5 LDR R2,??ProcessPacket_12+0x10 ;; sndGlobal2 \ 000003B4 14808DE5 STR R8,[SP, #+20] \ 000003B8 0C0099E5 LDR R0,[R9, #+12] \ 000003BC D1BFA0E3 MOV R11,#+836 \ 000003C0 E40087E5 STR R0,[R7, #+228] \ 000003C4 0030A0E1 MOV R3,R0 \ 000003C8 E41085E2 ADD R1,R5,#+228 \ 000003CC 07008BE0 ADD R0,R11,R7 \ 000003D0 160000EF SWI +22 3698 GetFileStats(talk_sound,&stat,&ul); \ 000003D4 14208DE2 ADD R2,SP,#+20 \ 000003D8 461F8DE2 ADD R1,SP,#+280 \ 000003DC 07008BE0 ADD R0,R11,R7 \ 000003E0 840000EF SWI +132 3699 fsize=stat.size; 3700 if(fsize>0) \ 000003E4 1C019DE5 LDR R0,[SP, #+284] \ 000003E8 010050E3 CMP R0,#+1 3701 Play(talk_sound); \ 000003EC 07008BA0 ADDGE R0,R11,R7 3702 else 3703 Play(sndGlobal); \ 000003F0 0A00A0B1 MOVLT R0,R10 \ 000003F4 B8FFFFEA B ??ProcessPacket_24 3704 if(isLogOnline && dontLogOnConnect) 3705 { 3706 comanda=0; 3707 TTime time; 3708 TDate date; 3709 GetDateTime(&date,&time); 3710 char *txt=malloc(256); 3711 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); 3712 3713 TPKT *p=malloc(sizeof(PKT)); 3714 p->pkt.uin=t->uin; 3715 p->pkt.type=T_XTEXT_REQ; 3716 p->pkt.data_len=0; 3717 3718 t->xtext=malloc(256); 3719 // sprintf(t->xtext+1,txt); 3720 snprintf(t->xtext,256,txt); 3721 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF); 3722 ReqAddMsgToChat(t); 3723 //RecountMenu(t, 1); 3724 RecountMenu(NULL, 0); 3725 mfree(txt); 3726 } 3727 } 3728 #endif 3729 } 3730 3731 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_22: \ 000003F8 10109DE5 LDR R1,[SP, #+16] \ 000003FC 0B0051E1 CMP R1,R11 \ 00000400 3C00000A BEQ ??ProcessPacket_25 \ 00000404 0B0050E1 CMP R0,R11 \ 00000408 3A00001A BNE ??ProcessPacket_25 3732 { 3733 Play(sndSrvMsg); \ 0000040C A4069FE5 LDR R0,??ProcessPacket_12+0x14 ;; sndSrvMsg \ 00000410 ........ BL Play 3734 3735 //-------------------- Log offline ----------------------// 3736 3737 if(t->isactive && isLogOffline) \ 00000414 800099E5 LDR R0,[R9, #+128] \ 00000418 000050E3 CMP R0,#+0 \ 0000041C 3500000A BEQ ??ProcessPacket_25 \ 00000420 94069FE5 LDR R0,??ProcessPacket_12+0x18 ;; isLogOffline \ 00000424 000090E5 LDR R0,[R0, #+0] \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 3100000A BEQ ??ProcessPacket_25 3738 { 3739 comanda=0; \ 00000430 D48187E5 STR R8,[R7, #+468] 3740 TTime time; 3741 TDate date; 3742 GetDateTime(&date,&time); \ 00000434 0D10A0E1 MOV R1,SP \ 00000438 08008DE2 ADD R0,SP,#+8 \ 0000043C B40000EF SWI +180 3743 char *txt=malloc(256); \ 00000440 400FA0E3 MOV R0,#+256 \ 00000444 140000EF SWI +20 \ 00000448 0060A0E1 MOV R6,R0 3744 sprintf(txt," Offline: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); \ 0000044C 0D00DDE5 LDRB R0,[SP, #+13] \ 00000450 01002DE9 PUSH {R0} \ 00000454 1000DDE5 LDRB R0,[SP, #+16] \ 00000458 01002DE9 PUSH {R0} \ 0000045C 0A00DDE5 LDRB R0,[SP, #+10] \ 00000460 01002DE9 PUSH {R0} \ 00000464 0D30DDE5 LDRB R3,[SP, #+13] \ 00000468 0C20DDE5 LDRB R2,[SP, #+12] \ 0000046C 8400A0E3 MOV R0,#+132 \ 00000470 400E80E3 ORR R0,R0,#0x400 \ 00000474 051080E0 ADD R1,R0,R5 \ 00000478 0600A0E1 MOV R0,R6 \ 0000047C 160000EF SWI +22 3745 3746 TPKT *p=malloc(sizeof(PKT)); \ 00000480 0800A0E3 MOV R0,#+8 \ 00000484 140000EF SWI +20 3747 p->pkt.uin=t->uin; \ 00000488 0C1099E5 LDR R1,[R9, #+12] \ 0000048C 001080E5 STR R1,[R0, #+0] 3748 p->pkt.type=T_XTEXT_REQ; \ 00000490 1810A0E3 MOV R1,#+24 \ 00000494 B410C0E1 STRH R1,[R0, #+4] 3749 p->pkt.data_len=0; \ 00000498 B680C0E1 STRH R8,[R0, #+6] 3750 3751 t->xtext=malloc(256); \ 0000049C 400FA0E3 MOV R0,#+256 \ 000004A0 140000EF SWI +20 \ 000004A4 880089E5 STR R0,[R9, #+136] 3752 snprintf(t->xtext,256,txt); \ 000004A8 0620A0E1 MOV R2,R6 \ 000004AC 401FA0E3 MOV R1,#+256 \ 000004B0 1B0100EF SWI +283 3753 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF); \ 000004B4 0800E0E1 MVN R0,R8 \ 000004B8 01002DE9 PUSH {R0} \ 000004BC 0620A0E1 MOV R2,R6 \ 000004C0 0310A0E3 MOV R1,#+3 \ 000004C4 0800A0E3 MOV R0,#+8 \ 000004C8 700E80E3 ORR R0,R0,#0x700 \ 000004CC 053080E0 ADD R3,R0,R5 \ 000004D0 0900A0E1 MOV R0,R9 \ 000004D4 ........ BL AddStringToLog 3754 ReqAddMsgToChat(t); \ 000004D8 0900A0E1 MOV R0,R9 \ 000004DC ........ BL ReqAddMsgToChat 3755 RecountMenu(t, 1); \ 000004E0 0110A0E3 MOV R1,#+1 \ 000004E4 0900A0E1 MOV R0,R9 \ 000004E8 ........ BL RecountMenu 3756 mfree(txt); \ 000004EC 0600A0E1 MOV R0,R6 \ ??ProcessPacket_26: \ 000004F0 150000EF SWI +21 \ 000004F4 10D08DE2 ADD SP,SP,#+16 3757 } 3758 } 3759 3760 //------------------------------------------------------------// 3761 if(TIME_OR_MSG==2) \ ??ProcessPacket_25: \ 000004F8 ........ LDR R0,??DataTable126 ;; TIME_OR_MSG \ 000004FC 000090E5 LDR R0,[R0, #+0] \ 00000500 020050E3 CMP R0,#+2 \ 00000504 0000001A BNE ??ProcessPacket_17 3762 Get_Online_total(); \ 00000508 ........ BL Get_Online_total 3763 } 3764 if (edchat_id) \ ??ProcessPacket_17: \ 0000050C A80197E5 LDR R0,[R7, #+424] \ 00000510 000050E3 CMP R0,#+0 \ 00000514 5E01000A BEQ ??ProcessPacket_1 3765 { 3766 void *data=FindGUIbyId(edchat_id,NULL); \ 00000518 A80197E5 LDR R0,[R7, #+424] \ 0000051C 0010A0E3 MOV R1,#+0 \ 00000520 090200EF SWI +521 3767 { 3768 EDCHAT_STRUCT *ed_struct; 3769 ed_struct=EDIT_GetUserPointer(data); \ 00000524 DF0100EF SWI +479 3770 if (ed_struct) \ 00000528 000050E3 CMP R0,#+0 \ 0000052C 5801000A BEQ ??ProcessPacket_1 3771 { 3772 if (ed_struct->ed_contact==t) \ 00000530 000090E5 LDR R0,[R0, #+0] \ 00000534 090050E1 CMP R0,R9 \ 00000538 5501001A BNE ??ProcessPacket_1 3773 { 3774 DirectRedrawGUI_ID(edchat_id); \ 0000053C A80197E5 LDR R0,[R7, #+424] \ 00000540 400100EF SWI +320 \ 00000544 520100EA B ??ProcessPacket_1 3775 } 3776 } 3777 } 3778 } 3779 break; 3780 case T_RECVMSG: 3781 NEW_MSG=1; \ ??ProcessPacket_27: \ 00000548 CC6187E5 STR R6,[R7, #+460] 3782 t=FindContactByUin(p->pkt.uin); \ 0000054C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000550 0090B0E1 MOVS R9,R0 3783 if (!t) \ 00000554 0900001A BNE ??ProcessPacket_28 3784 { 3785 sprintf(s,percent_d,p->pkt.uin); \ 00000558 002094E5 LDR R2,[R4, #+0] \ 0000055C 131085E2 ADD R1,R5,#+19 \ 00000560 18008DE2 ADD R0,SP,#+24 \ 00000564 160000EF SWI +22 3786 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 00000568 A02197E5 LDR R2,[R7, #+416] \ 0000056C 000094E5 LDR R0,[R4, #+0] \ 00000570 0030A0E3 MOV R3,#+0 \ 00000574 18108DE2 ADD R1,SP,#+24 \ 00000578 ........ _BLF AddContact,??AddContact??rA \ 0000057C 0090A0E1 MOV R9,R0 3787 } 3788 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ 000005B8 5A0FA013 MOVNE R0,#+360 \ 000005BC 80008915 STRNE R0,[R9, #+128] 3791 // ChangeContactPos(t); 3792 if(VIBR_TYPE) \ 000005C0 ........ LDR R0,??DataTable129 ;; VIBR_TYPE \ 000005C4 000090E5 LDR R0,[R0, #+0] \ 000005C8 000050E3 CMP R0,#+0 3793 vibra_count=2; \ 000005CC 0200A013 MOVNE R0,#+2 \ 000005D0 64018715 STRNE R0,[R7, #+356] 3794 else 3795 vibra_count=1; \ 000005D4 64618705 STREQ R6,[R7, #+356] 3796 start_vibra(); \ 000005D8 ........ BL start_vibra 3797 #ifdef ELKA 3798 if(SLI_TYPE) 3799 SLI_Timer(); 3800 #endif 3801 if(Is_Double_Vibra_On) \ 000005DC FC0097E5 LDR R0,[R7, #+252] \ 000005E0 000050E3 CMP R0,#+0 \ 000005E4 0000000A BEQ ??ProcessPacket_30 3802 Reminder_timer(); \ 000005E8 ........ BL Reminder_timer 3803 if (Is_ILU_On) \ ??ProcessPacket_30: \ 000005EC F80097E5 LDR R0,[R7, #+248] \ 000005F0 000050E3 CMP R0,#+0 \ 000005F4 0800000A BEQ ??ProcessPacket_31 3804 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000005F8 C0049FE5 LDR R0,??ProcessPacket_12+0x1C ;; ILL_RECV_FADE \ 000005FC 003090E5 LDR R3,[R0, #+0] \ 00000600 BC049FE5 LDR R0,??ProcessPacket_12+0x20 ;; ILL_RECV_TMR \ 00000604 002090E5 LDR R2,[R0, #+0] \ 00000608 B8049FE5 LDR R0,??ProcessPacket_12+0x24 ;; ILL_KEYS_RECV \ 0000060C 001090E5 LDR R1,[R0, #+0] \ 00000610 B4049FE5 LDR R0,??ProcessPacket_12+0x28 ;; ILL_DISP_RECV \ 00000614 000090E5 LDR R0,[R0, #+0] \ 00000618 ........ BL IlluminationOn 3805 if (t->name[0]=='#') \ ??ProcessPacket_31: \ 0000061C 1400D9E5 LDRB R0,[R9, #+20] \ 00000620 230050E3 CMP R0,#+35 \ 00000624 1500001A BNE ??ProcessPacket_32 3806 { 3807 //Если это конференция, патчим имя 3808 char *s=strchr(p->data,'>'); \ 00000628 3E10A0E3 MOV R1,#+62 \ 0000062C 080084E2 ADD R0,R4,#+8 \ 00000630 180000EF SWI +24 3809 //Если нашли символ > и после него пробел и ник короче 16 символов 3810 if (s) \ 00000634 000050E3 CMP R0,#+0 \ 00000638 1000000A BEQ ??ProcessPacket_32 3811 { 3812 if ((s[1]==' ')&&((s-p->data)<16)) \ 0000063C 0110D0E5 LDRB R1,[R0, #+1] \ 00000640 200051E3 CMP R1,#+32 \ 00000644 0D00001A BNE ??ProcessPacket_32 \ 00000648 081084E2 ADD R1,R4,#+8 \ 0000064C 011040E0 SUB R1,R0,R1 \ 00000650 100051E3 CMP R1,#+16 \ 00000654 090000AA BGE ??ProcessPacket_32 3813 { 3814 *s=0; //Режем строку \ 00000658 0080C0E5 STRB R8,[R0, #+0] 3815 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF); //Добавляем имя из текста сообщения \ 0000065C 001066E2 RSB R1,R6,#+0 \ 00000660 02002DE9 PUSH {R1} \ 00000664 083084E2 ADD R3,R4,#+8 \ 00000668 022080E2 ADD R2,R0,#+2 \ 0000066C 0900A0E1 MOV R0,R9 \ 00000670 0210A0E3 MOV R1,#+2 \ 00000674 ........ BL AddStringToLog 3816 goto L1; \ 00000678 04D08DE2 ADD SP,SP,#+4 \ 0000067C 340000EA B ??ProcessPacket_33 3817 } 3818 } 3819 } 3820 //=============================================tas bus jautri 3821 comanda=1; \ ??ProcessPacket_32: \ 00000680 D46187E5 STR R6,[R7, #+468] 3822 // if(UIN!=t->uin) 3823 CheckComand(p->data, t, t->name); \ 00000684 142089E2 ADD R2,R9,#+20 \ 00000688 0910A0E1 MOV R1,R9 \ 0000068C 080084E2 ADD R0,R4,#+8 \ 00000690 ........ BL CheckComand 3824 if(comanda==1) \ 00000694 D40197E5 LDR R0,[R7, #+468] \ 00000698 010050E3 CMP R0,#+1 \ 0000069C 2C00001A BNE ??ProcessPacket_33 3825 { 3826 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF); \ 000006A0 000066E2 RSB R0,R6,#+0 \ 000006A4 01002DE9 PUSH {R0} \ 000006A8 143089E2 ADD R3,R9,#+20 \ 000006AC 082084E2 ADD R2,R4,#+8 \ 000006B0 0210A0E3 MOV R1,#+2 \ 000006B4 0900A0E1 MOV R0,R9 \ 000006B8 ........ BL AddStringToLog 3827 main_count++; \ 000006BC ........ LDR R0,??DataTable130 ;; main_count \ 000006C0 001090E5 LDR R1,[R0, #+0] \ 000006C4 011081E2 ADD R1,R1,#+1 \ 000006C8 001080E5 STR R1,[R0, #+0] 3828 if(Is_INC_On) \ 000006CC F40097E5 LDR R0,[R7, #+244] \ 000006D0 04D08DE2 ADD SP,SP,#+4 \ 000006D4 000050E3 CMP R0,#+0 \ 000006D8 1700000A BEQ ??ProcessPacket_34 3829 { 3830 strcpy(show_nick, t->name); \ 000006DC 141089E2 ADD R1,R9,#+20 \ 000006E0 C50E87E2 ADD R0,R7,#+3152 \ 000006E4 1A0000EF SWI +26 3831 if(!IsIdleUiOnTop()&&(!saver_on)) \ 000006E8 C50000EF SWI +197 \ 000006EC 000050E3 CMP R0,#+0 \ 000006F0 E8009705 LDREQ R0,[R7, #+232] \ 000006F4 00005003 CMPEQ R0,#+0 \ 000006F8 0F00001A BNE ??ProcessPacket_34 3832 { 3833 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 000006FC 068100EF SWI +33030 \ 00000700 080090E5 LDR R0,[R0, #+8] 3834 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000704 0C0095E8 LDM R5,{R2,R3} \ 00000708 0C0090E5 LDR R0,[R0, #+12] \ 0000070C 0D10A0E1 MOV R1,SP \ 00000710 080090E5 LDR R0,[R0, #+8] \ 00000714 040090E5 LDR R0,[R0, #+4] \ 00000718 0C0081E8 STM R1,{R2,R3} \ 0000071C 010040E2 SUB R0,R0,#+1 3835 if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) \ 00000720 0820A0E3 MOV R2,#+8 \ 00000724 1C0100EF SWI +284 \ 00000728 000050E3 CMP R0,#+0 \ 0000072C 0200000A BEQ ??ProcessPacket_34 3836 { 3837 INC_show=15; \ 00000730 0F00A0E3 MOV R0,#+15 \ 00000734 D80187E5 STR R0,[R7, #+472] 3838 show_pp_sender(); \ 00000738 ........ BL show_pp_sender 3839 } 3840 #ifdef EVILFOX 3841 #else 3842 // else 3843 // ShowMSG(1,(int)show_nick); 3844 #endif 3845 } 3846 } 3847 if(Is_SMARTCPU_On) \ ??ProcessPacket_34: \ 0000073C F00097E5 LDR R0,[R7, #+240] \ 00000740 000050E3 CMP R0,#+0 \ 00000744 0200000A BEQ ??ProcessPacket_33 3848 AddToMain(t->name,p->data); \ 00000748 081084E2 ADD R1,R4,#+8 \ 0000074C 140089E2 ADD R0,R9,#+20 \ 00000750 ........ BL AddToMain 3849 } 3850 // if((Is_SMARTCPU_On)&&(comanda==1)) 3851 // AddToMain(t->name,p->data); 3852 L1: 3853 //Разворачиваем группу, в которой пришло сообщение 3854 { 3855 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_33: \ 00000754 100099E5 LDR R0,[R9, #+16] \ 00000758 ........ _BLF FindGroupByID,??FindGroupByID??rA 3856 if (g) \ 0000075C 000050E3 CMP R0,#+0 3857 { 3858 if (g->state) \ 00000760 B415D011 LDRHNE R1,[R0, #+84] \ 00000764 00005113 CMPNE R1,#+0 3859 { 3860 g->state=0; \ 00000768 B485C011 STRHNE R8,[R0, #+84] 3861 } 3862 } 3863 } 3864 // if(comanda==1) 3865 // { 3866 ReqAddMsgToChat(t); \ 0000076C 0900A0E1 MOV R0,R9 \ 00000770 ........ BL ReqAddMsgToChat 3867 RecountMenu(t,1); \ 00000774 0110A0E3 MOV R1,#+1 \ 00000778 0900A0E1 MOV R0,R9 \ 0000077C ........ BL RecountMenu 3868 extern const int DEVELOP_IF; 3869 switch (DEVELOP_IF) \ 00000780 48039FE5 LDR R0,??ProcessPacket_12+0x2C ;; DEVELOP_IF \ 00000784 000090E5 LDR R0,[R0, #+0] \ 00000788 000050E3 CMP R0,#+0 \ 0000078C 0400000A BEQ ??ProcessPacket_35 \ 00000790 010050E2 SUBS R0,R0,#+1 \ 00000794 0B00000A BEQ ??ProcessPacket_36 \ 00000798 020050E2 SUBS R0,R0,#+2 \ 0000079C 1300000A BEQ ??ProcessPacket_37 \ 000007A0 BB0000EA B ??ProcessPacket_1 3870 { 3871 case 0: 3872 #ifdef EVILFOX 3873 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) GBS_StartTimerProc(&develop, 216*2, to_develop); 3874 #else 3875 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_35: \ 000007A4 068100EF SWI +33030 \ 000007A8 080090E5 LDR R0,[R0, #+8] \ 000007AC 041197E5 LDR R1,[R7, #+260] \ 000007B0 0C0090E5 LDR R0,[R0, #+12] \ 000007B4 0C0090E5 LDR R0,[R0, #+12] \ 000007B8 010050E1 CMP R0,R1 \ ??ProcessPacket_38: \ 000007BC B400000A BEQ ??ProcessPacket_1 \ 000007C0 ........ BL to_develop \ 000007C4 B20000EA B ??ProcessPacket_1 3876 #endif 3877 break; 3878 case 1: 3879 #ifdef EVILFOX 3880 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) GBS_StartTimerProc(&develop, 216*2, to_develop); 3881 #else 3882 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_36: \ 000007C8 068100EF SWI +33030 \ 000007CC 080090E5 LDR R0,[R0, #+8] \ 000007D0 041197E5 LDR R1,[R7, #+260] \ 000007D4 0C0090E5 LDR R0,[R0, #+12] \ 000007D8 0C0090E5 LDR R0,[R0, #+12] \ 000007DC 010050E1 CMP R0,R1 \ 000007E0 AB00000A BEQ ??ProcessPacket_1 \ 000007E4 430000EF SWI +67 \ 000007E8 000050E3 CMP R0,#+0 \ 000007EC F2FFFFEA B ??ProcessPacket_38 3883 #endif 3884 break; 3885 case 2: 3886 break; 3887 case 3: 3888 GBS_DelTimer(&develop); \ ??ProcessPacket_37: \ 000007F0 C800A0E3 MOV R0,#+200 \ 000007F4 A00E80E3 ORR R0,R0,#0xA00 \ 000007F8 070080E0 ADD R0,R0,R7 \ 000007FC 8C0100EF SWI +396 3889 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 00000800 068100EF SWI +33030 \ 00000804 080090E5 LDR R0,[R0, #+8] \ 00000808 041197E5 LDR R1,[R7, #+260] \ 0000080C 0C0090E5 LDR R0,[R0, #+12] \ 00000810 0C0090E5 LDR R0,[R0, #+12] \ 00000814 010050E1 CMP R0,R1 \ 00000818 9D00000A BEQ ??ProcessPacket_1 \ 0000081C 430000EF SWI +67 \ 00000820 000050E3 CMP R0,#+0 \ 00000824 9A00001A BNE ??ProcessPacket_1 \ 00000828 ........ BL begin_to_develop \ 0000082C 980000EA B ??ProcessPacket_1 3890 break; 3891 } 3892 // } 3893 break; 3894 case T_SRV_ACK: 3895 case T_CLIENT_ACK: 3896 q=FindContactLOGQByAck(p); \ ??ProcessPacket_39: \ 00000830 0400A0E1 MOV R0,R4 \ 00000834 ........ BL FindContactLOGQByAck 3897 /* if (q&&(p->pkt.type==T_SRV_ACK)) 3898 { 3899 if (Is_ILU_On) 3900 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); 3901 }//Illumination by BoBa 19.04.2007 */ 3902 /* if (( 3903 IsGuiOnTop(contactlist_menu_id)|| 3904 IsGuiOnTop(edchat_id) 3905 )&&(q)) 3906 { 3907 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 3908 GetPaletteAdrByColorIndex(0), 3909 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 3910 }*/ 3911 if (q) \ 00000838 000050E3 CMP R0,#+0 \ 0000083C 9400000A BEQ ??ProcessPacket_1 3912 { 3913 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 00000840 B410D4E1 LDRH R1,[R4, #+4] \ 00000844 100051E3 CMP R1,#+16 \ 00000848 0110A003 MOVEQ R1,#+1 \ 0000084C 0210A013 MOVNE R1,#+2 \ 00000850 041080E5 STR R1,[R0, #+4] 3914 t=FindContactByUin(p->pkt.uin); \ 00000854 000094E5 LDR R0,[R4, #+0] \ 00000858 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000085C 0090A0E1 MOV R9,R0 3915 if (edchat_id) \ 00000860 A80197E5 LDR R0,[R7, #+424] \ 00000864 000050E3 CMP R0,#+0 \ 00000868 8900000A BEQ ??ProcessPacket_1 3916 { 3917 void *data=FindGUIbyId(edchat_id,NULL); \ 0000086C A80197E5 LDR R0,[R7, #+424] \ 00000870 0010A0E3 MOV R1,#+0 \ 00000874 090200EF SWI +521 \ 00000878 0050B0E1 MOVS R5,R0 3918 if (data) \ 0000087C 8400000A BEQ ??ProcessPacket_1 3919 { 3920 EDCHAT_STRUCT *ed_struct; 3921 ed_struct=EDIT_GetUserPointer(data); \ 00000880 DF0100EF SWI +479 3922 if (ed_struct) \ 00000884 000050E3 CMP R0,#+0 \ 00000888 8100000A BEQ ??ProcessPacket_1 3923 { 3924 if (ed_struct->ed_contact==t) \ 0000088C 000090E5 LDR R0,[R0, #+0] \ 00000890 090050E1 CMP R0,R9 \ 00000894 7E00001A BNE ??ProcessPacket_1 3925 { 3926 if (EDIT_IsBusy(data)) \ 00000898 0500A0E1 MOV R0,R5 \ 0000089C 1C0200EF SWI +540 \ 000008A0 000050E3 CMP R0,#+0 \ 000008A4 0300000A BEQ ??ProcessPacket_40 3927 { 3928 t->req_drawack=1; \ 000008A8 706089E5 STR R6,[R9, #+112] 3929 #ifdef EVILFOX 3930 time_to_stop_t9=2; 3931 #else 3932 time_to_stop_t9=3; \ 000008AC 0300A0E3 MOV R0,#+3 \ 000008B0 D00187E5 STR R0,[R7, #+464] \ 000008B4 760000EA B ??ProcessPacket_1 3933 #endif 3934 } 3935 else { 3936 DrawAck(data); \ ??ProcessPacket_40: \ 000008B8 0500A0E1 MOV R0,R5 \ 000008BC ........ BL DrawAck 3937 if (p->pkt.type==T_SRV_ACK) \ 000008C0 B400D4E1 LDRH R0,[R4, #+4] \ 000008C4 100050E3 CMP R0,#+16 \ 000008C8 7100001A BNE ??ProcessPacket_1 3938 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000008CC EC019FE5 LDR R0,??ProcessPacket_12+0x1C ;; ILL_RECV_FADE \ 000008D0 003090E5 LDR R3,[R0, #+0] \ 000008D4 F8019FE5 LDR R0,??ProcessPacket_12+0x30 ;; ILL_SEND_TMR \ 000008D8 002090E5 LDR R2,[R0, #+0] \ 000008DC F4019FE5 LDR R0,??ProcessPacket_12+0x34 ;; ILL_KEYS_SEND \ 000008E0 001090E5 LDR R1,[R0, #+0] \ 000008E4 F0019FE5 LDR R0,??ProcessPacket_12+0x38 ;; ILL_DISP_SEND \ 000008E8 000090E5 LDR R0,[R0, #+0] \ 000008EC ........ BL IlluminationOn \ 000008F0 670000EA B ??ProcessPacket_1 3939 } 3940 } 3941 } 3942 } 3943 } 3944 } 3945 break; 3946 case T_XTEXT_ACK: 3947 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_41: \ 000008F4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000008F8 0090B0E1 MOVS R9,R0 3948 if (t) \ 000008FC 6400000A BEQ ??ProcessPacket_1 3949 { 3950 int i; 3951 int j; 3952 FreeXText(t); \ 00000900 ........ _BLF FreeXText,??FreeXText??rA 3953 i=p->pkt.data_len; \ 00000904 B660D4E1 LDRH R6,[R4, #+6] 3954 memcpy(t->xtext=malloc(i),p->data,i); \ 00000908 0600A0E1 MOV R0,R6 \ 0000090C 140000EF SWI +20 \ 00000910 880089E5 STR R0,[R9, #+136] \ 00000914 0620A0E1 MOV R2,R6 \ 00000918 081084E2 ADD R1,R4,#+8 \ 0000091C 1E0100EF SWI +286 3955 zeromem(s,256); \ 00000920 401FA0E3 MOV R1,#+256 \ 00000924 18008DE2 ADD R0,SP,#+24 \ 00000928 1D0100EF SWI +285 3956 strcpy(s,t->name); \ 0000092C 141089E2 ADD R1,R9,#+20 \ 00000930 18008DE2 ADD R0,SP,#+24 \ 00000934 1A0000EF SWI +26 3957 strcat(s,":\n"); \ 00000938 591F8FE2 ADR R1,??ProcessPacket_12 ;; ":\n" \ 0000093C 18008DE2 ADD R0,SP,#+24 \ 00000940 170000EF SWI +23 3958 i=strlen(s); \ 00000944 18008DE2 ADD R0,SP,#+24 \ 00000948 1B0000EF SWI +27 3959 j=p->data[0]; \ 0000094C 0860D4E5 LDRB R6,[R4, #+8] \ 00000950 0070A0E1 MOV R7,R0 3960 if (j>(255-i)) j=255-i; \ 00000954 FF0067E2 RSB R0,R7,#+255 \ 00000958 060050E1 CMP R0,R6 \ 0000095C 0060A0B1 MOVLT R6,R0 3961 strncpy(s+i,p->data+1,j); \ 00000960 0620A0E1 MOV R2,R6 \ 00000964 091084E2 ADD R1,R4,#+9 \ 00000968 18008DE2 ADD R0,SP,#+24 \ 0000096C 000087E0 ADD R0,R7,R0 \ 00000970 160100EF SWI +278 3962 i+=j; \ 00000974 070086E0 ADD R0,R6,R7 3963 if (i<255) \ 00000978 FF0050E3 CMP R0,#+255 \ 0000097C 100000AA BGE ??ProcessPacket_42 3964 { 3965 s[i]='\n'; \ 00000980 18108DE2 ADD R1,SP,#+24 \ 00000984 0A20A0E3 MOV R2,#+10 \ 00000988 0120C0E7 STRB R2,[R0, +R1] 3966 i++; \ 0000098C 0810D4E5 LDRB R1,[R4, #+8] \ 00000990 B620D4E1 LDRH R2,[R4, #+6] \ 00000994 010080E2 ADD R0,R0,#+1 3967 j=p->pkt.data_len-p->data[0]-1; 3968 if (j>(255-i)) j=255-i; 3969 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000998 18308DE2 ADD R3,SP,#+24 \ 0000099C 012042E0 SUB R2,R2,R1 \ 000009A0 016042E2 SUB R6,R2,#+1 \ 000009A4 FF2060E2 RSB R2,R0,#+255 \ 000009A8 060052E1 CMP R2,R6 \ 000009AC 0260A0B1 MOVLT R6,R2 \ 000009B0 0620A0E1 MOV R2,R6 \ 000009B4 041081E0 ADD R1,R1,R4 \ 000009B8 091081E2 ADD R1,R1,#+9 \ 000009BC 030080E0 ADD R0,R0,R3 \ 000009C0 160100EF SWI +278 3970 } 3971 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 3972 //if (!edchat_id && // Только если редактор не наверху 3973 // strlen(p->data)) // и x-status не пустой 3974 // ShowMSG(0,(int)s); 3975 3976 /* 3977 #ifdef EVILFOX 3978 #else 3979 if (!edchat_id) ShowMSG(0,(int)s); // Только если редактор не наверху 3980 #endif 3981 */ 3982 zeromem(s,256); \ ??ProcessPacket_42: \ 000009C4 401FA0E3 MOV R1,#+256 \ 000009C8 18008DE2 ADD R0,SP,#+24 \ 000009CC 1D0100EF SWI +285 3983 i=0; 3984 j=p->data[0]; \ 000009D0 0860D4E5 LDRB R6,[R4, #+8] 3985 if (j>(255-i)) j=255-i; 3986 strncpy(s,p->data+1,j); \ 000009D4 091084E2 ADD R1,R4,#+9 \ 000009D8 18008DE2 ADD R0,SP,#+24 \ 000009DC 400F56E3 CMP R6,#+256 \ 000009E0 FF60A0A3 MOVGE R6,#+255 \ 000009E4 0620A0E1 MOV R2,R6 \ 000009E8 160100EF SWI +278 3987 i+=j; 3988 if (i<255) \ 000009EC FF0056E3 CMP R6,#+255 \ 000009F0 100000AA BGE ??ProcessPacket_43 3989 { 3990 s[i++]=13; \ 000009F4 18108DE2 ADD R1,SP,#+24 \ 000009F8 0D20A0E3 MOV R2,#+13 \ 000009FC 0120C6E7 STRB R2,[R6, +R1] \ 00000A00 0810D4E5 LDRB R1,[R4, #+8] \ 00000A04 B620D4E1 LDRH R2,[R4, #+6] \ 00000A08 010086E2 ADD R0,R6,#+1 3991 j=p->pkt.data_len-p->data[0]-1; 3992 if (j>(255-i)) j=255-i; 3993 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000A0C 18308DE2 ADD R3,SP,#+24 \ 00000A10 012042E0 SUB R2,R2,R1 \ 00000A14 016042E2 SUB R6,R2,#+1 \ 00000A18 FF2060E2 RSB R2,R0,#+255 \ 00000A1C 060052E1 CMP R2,R6 \ 00000A20 0260A0B1 MOVLT R6,R2 \ 00000A24 0620A0E1 MOV R2,R6 \ 00000A28 041081E0 ADD R1,R1,R4 \ 00000A2C 091081E2 ADD R1,R1,#+9 \ 00000A30 030080E0 ADD R0,R0,R3 \ 00000A34 160100EF SWI +278 3994 } 3995 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF); \ ??ProcessPacket_43: \ 00000A38 0800E0E1 MVN R0,R8 \ 00000A3C 01002DE9 PUSH {R0} \ 00000A40 1C208DE2 ADD R2,SP,#+28 \ 00000A44 0310A0E3 MOV R1,#+3 \ 00000A48 0800A0E3 MOV R0,#+8 \ 00000A4C 700E80E3 ORR R0,R0,#0x700 \ 00000A50 053080E0 ADD R3,R0,R5 \ 00000A54 0900A0E1 MOV R0,R9 \ 00000A58 ........ BL AddStringToLog 3996 ReqAddMsgToChat(t); \ 00000A5C 0900A0E1 MOV R0,R9 \ 00000A60 ........ BL ReqAddMsgToChat 3997 if (strlen(p->data)) // Если x-status не пустой \ 00000A64 080084E2 ADD R0,R4,#+8 \ 00000A68 1B0000EF SWI +27 \ 00000A6C 000050E3 CMP R0,#+0 \ 00000A70 04D08DE2 ADD SP,SP,#+4 3998 RecountMenu(t, 1); \ 00000A74 0110A013 MOVNE R1,#+1 \ 00000A78 0900A011 MOVNE R0,R9 \ 00000A7C 93FDFF1A BNE ??ProcessPacket_8 3999 else 4000 RecountMenu(NULL, 0); \ 00000A80 0010A0E3 MOV R1,#+0 \ 00000A84 0100A0E1 MOV R0,R1 \ 00000A88 90FDFFEA B ??ProcessPacket_8 4001 } 4002 break; 4003 case T_LASTPRIVACY: 4004 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_44: \ 00000A8C 0800D4E5 LDRB R0,[R4, #+8] \ 00000A90 600187E5 STR R0,[R7, #+352] 4005 break; 4006 } 4007 mfree(p); \ ??ProcessPacket_1: \ 00000A94 0400A0E1 MOV R0,R4 \ 00000A98 150000EF SWI +21 4008 } \ 00000A9C 50DF8DE2 ADD SP,SP,#+320 \ 00000AA0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_12: \ 00000AA4 3A0A0000 DC8 ":\n",+0 \ 00000AA8 ........ DC32 isLogOnline \ 00000AAC ........ DC32 ENA_AUTO_XTXT \ 00000AB0 ........ DC32 sndGlobal \ 00000AB4 ........ DC32 sndGlobal2 \ 00000AB8 ........ DC32 sndSrvMsg \ 00000ABC ........ DC32 isLogOffline \ 00000AC0 ........ DC32 ILL_RECV_FADE \ 00000AC4 ........ DC32 ILL_RECV_TMR \ 00000AC8 ........ DC32 ILL_KEYS_RECV \ 00000ACC ........ DC32 ILL_DISP_RECV \ 00000AD0 ........ DC32 DEVELOP_IF \ 00000AD4 ........ DC32 ILL_SEND_TMR \ 00000AD8 ........ DC32 ILL_KEYS_SEND \ 00000ADC ........ DC32 ILL_DISP_SEND 4009 4010 4011 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 4012 void process_active_timer(void) 4013 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 4014 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable131 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 740195E5 LDR R0,[R5, #+372] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 4015 { 4016 if (++tenseconds_to_ping>12) \ 00000018 B00195E5 LDR R0,[R5, #+432] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 B00185E5 STR R0,[R5, #+432] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 4017 { 4018 tenseconds_to_ping=0; 4019 SUBPROC((void *)do_ping); \ 0000002C 54009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 B04185E5 STR R4,[R5, #+432] \ 00000034 710100EF SWI +369 4020 } 4021 } 4022 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable134 ;; `?` \ 0000003C 6E0EA0E3 MOV R0,#+1760 \ 00000040 012080E0 ADD R2,R0,R1 \ 00000044 C42085E5 STR R2,[R5, #+196] 4023 tmr_gipc.name_from=ipc_my_name; \ 00000048 010080E0 ADD R0,R0,R1 \ 0000004C C80085E5 STR R0,[R5, #+200] 4024 tmr_gipc.data=NULL; \ 00000050 CC4085E5 STR R4,[R5, #+204] 4025 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000054 C43085E2 ADD R3,R5,#+196 \ 00000058 0420A0E3 MOV R2,#+4 \ 0000005C F210A0E3 MOV R1,#+242 \ 00000060 C01F81E3 ORR R1,R1,#0x300 \ 00000064 0900A0E3 MOV R0,#+9 \ 00000068 420C80E3 ORR R0,R0,#0x4200 \ 0000006C 000100EF SWI +256 4026 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000070 ........ LDR R2,??DataTable143 ;; process_active_timer \ 00000074 871EA0E3 MOV R1,#+2160 \ 00000078 040041E2 SUB R0,R1,#+4 \ 0000007C 050080E0 ADD R0,R0,R5 \ 00000080 4D0000EF SWI +77 4027 } \ 00000084 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 00000088 ........ DC32 do_ping 4028 4029 4030 //=============================================================================================== 4031 \ In segment CODE, align 4, keep-with-next 4032 void method0(MAIN_GUI *data) 4033 { \ method0: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 4034 int scr_w=ScreenW(); 4035 int scr_h=ScreenH(); 4036 int pos_status;//2026rev 4037 int pm = pictures_max, pl = pictures_loaded;//2026rev 4038 /* DrawRoundedFrame(0,YDISP,scr_w-1,scr_h-1,0,0,0, 4039 GetPaletteAdrByColorIndex(0), 4040 GetPaletteAdrByColorIndex(20));*/ 4041 4042 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0, 4043 GetPaletteAdrByColorIndex(1), 4044 GetPaletteAdrByColorIndex(1)); 4045 4046 DrawImg(0,0,S_ICONS[ICON_LOGO]); 4047 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //by BoBa 10.07 4048 wsprintf(data->ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000008 ........ LDR R7,??DataTable134 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 04008DE5 STR R0,[SP, #+4] \ 00000018 898100EF SWI +33161 \ 0000001C C0139FE5 LDR R1,??method0_0 ;; pictures_max \ 00000020 0050A0E1 MOV R5,R0 \ 00000024 001091E5 LDR R1,[R1, #+0] \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 08108DE5 STR R1,[SP, #+8] \ 00000030 B0139FE5 LDR R1,??method0_0+0x4 ;; pictures_loaded \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 0C108DE5 STR R1,[SP, #+12] \ 0000003C 2E0100EF SWI +302 \ 00000040 0060A0E1 MOV R6,R0 \ 00000044 0100A0E3 MOV R0,#+1 \ 00000048 2E0100EF SWI +302 \ 0000004C 04209DE5 LDR R2,[SP, #+4] \ 00000050 013045E2 SUB R3,R5,#+1 \ 00000054 012042E2 SUB R2,R2,#+1 \ 00000058 00208DE5 STR R2,[SP, #+0] \ 0000005C 40002DE9 PUSH {R6} \ 00000060 ........ LDR R6,??DataTable135 ;; S_ICONS \ 00000064 01002DE9 PUSH {R0} \ 00000068 0010A0E3 MOV R1,#+0 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 01002DE9 PUSH {R0} \ 00000074 B40100EF SWI +436 \ 00000078 502096E5 LDR R2,[R6, #+80] \ 0000007C 0010A0E3 MOV R1,#+0 \ 00000080 0100A0E1 MOV R0,R1 \ 00000084 230000EF SWI +35 \ 00000088 840196E5 LDR R0,[R6, #+388] \ 0000008C 881196E5 LDR R1,[R6, #+392] \ 00000090 3C20A0E3 MOV R2,#+60 \ 00000094 702E82E3 ORR R2,R2,#0x700 \ 00000098 062082E0 ADD R2,R2,R6 \ 0000009C 04002DE9 PUSH {R2} \ 000000A0 3C20A0E3 MOV R2,#+60 \ 000000A4 902E82E3 ORR R2,R2,#0x900 \ 000000A8 062082E0 ADD R2,R2,R6 \ 000000AC 04002DE9 PUSH {R2} \ 000000B0 8C2196E5 LDR R2,[R6, #+396] \ 000000B4 04002DE9 PUSH {R2} \ 000000B8 02002DE9 PUSH {R1} \ 000000BC 01002DE9 PUSH {R0} \ 000000C0 703196E5 LDR R3,[R6, #+368] \ 000000C4 742196E5 LDR R2,[R6, #+372] \ 000000C8 A800A0E3 MOV R0,#+168 \ 000000CC 400E80E3 ORR R0,R0,#0x400 \ 000000D0 071080E0 ADD R1,R0,R7 \ 000000D4 300094E5 LDR R0,[R4, #+48] \ 000000D8 240100EF SWI +292 4049 if(pm != pl) \ 000000DC 28009DE5 LDR R0,[SP, #+40] \ 000000E0 2C109DE5 LDR R1,[SP, #+44] \ 000000E4 20D08DE2 ADD SP,SP,#+32 \ 000000E8 010050E1 CMP R0,R1 \ 000000EC 4600000A BEQ ??method0_1 4050 { 4051 DrawRectangle(0,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD),scr_w-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-2,0, 4052 GetPaletteAdrByColorIndex(0), 4053 GetPaletteAdrByColorIndex(0)); \ 000000F0 0000A0E3 MOV R0,#+0 \ 000000F4 2E0100EF SWI +302 \ 000000F8 0080A0E1 MOV R8,R0 \ 000000FC 0000A0E3 MOV R0,#+0 \ 00000100 2E0100EF SWI +302 \ 00000104 0090A0E1 MOV R9,R0 \ 00000108 0300A0E3 MOV R0,#+3 \ 0000010C C50100EF SWI +453 \ 00000110 00A0A0E1 MOV R10,R0 \ 00000114 0800A0E3 MOV R0,#+8 \ 00000118 C50100EF SWI +453 \ 0000011C 00012DE9 PUSH {R8} \ 00000120 00022DE9 PUSH {R9} \ 00000124 0010A0E3 MOV R1,#+0 \ 00000128 02002DE9 PUSH {R1} \ 0000012C 0C209DE5 LDR R2,[SP, #+12] \ 00000130 04B045E2 SUB R11,R5,#+4 \ 00000134 0A104BE0 SUB R1,R11,R10 \ 00000138 023041E2 SUB R3,R1,#+2 \ 0000013C 80104BE0 SUB R1,R11,R0, LSL #+1 \ 00000140 0000A0E3 MOV R0,#+0 \ 00000144 B40100EF SWI +436 4054 pos_status = ((scr_w-1) * pl) / pm; 4055 DrawRectangle(1,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD)+1,pos_status,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3,0, 4056 GetPaletteAdrByColorIndex(14), 4057 GetPaletteAdrByColorIndex(14)); \ 00000148 0E00A0E3 MOV R0,#+14 \ 0000014C 2E0100EF SWI +302 \ 00000150 0080A0E1 MOV R8,R0 \ 00000154 0E00A0E3 MOV R0,#+14 \ 00000158 2E0100EF SWI +302 \ 0000015C 0090A0E1 MOV R9,R0 \ 00000160 0300A0E3 MOV R0,#+3 \ 00000164 C50100EF SWI +453 \ 00000168 1C008DE5 STR R0,[SP, #+28] \ 0000016C 0800A0E3 MOV R0,#+8 \ 00000170 C50100EF SWI +453 \ 00000174 00A0A0E1 MOV R10,R0 \ 00000178 00012DE9 PUSH {R8} \ 0000017C 00022DE9 PUSH {R9} \ 00000180 0000A0E3 MOV R0,#+0 \ 00000184 01002DE9 PUSH {R0} \ 00000188 24109DE5 LDR R1,[SP, #+36] \ 0000018C 28009DE5 LDR R0,[SP, #+40] \ 00000190 00004BE0 SUB R0,R11,R0 \ 00000194 033040E2 SUB R3,R0,#+3 \ 00000198 18009DE5 LDR R0,[SP, #+24] \ 0000019C 910000E0 MUL R0,R1,R0 \ 000001A0 20109DE5 LDR R1,[SP, #+32] \ 000001A4 ........ _BLF ??div32_a,??rA??div32_a \ 000001A8 0120A0E1 MOV R2,R1 \ 000001AC 8A004BE0 SUB R0,R11,R10, LSL #+1 \ 000001B0 011080E2 ADD R1,R0,#+1 \ 000001B4 0100A0E3 MOV R0,#+1 \ 000001B8 B40100EF SWI +436 4058 // wstrcatprintf(data->ws1,"\nLoading images..."); 4059 4060 if(total_smiles) \ 000001BC 28029FE5 LDR R0,??method0_0+0x8 ;; total_smiles \ 000001C0 001090E5 LDR R1,[R0, #+0] \ 000001C4 18D08DE2 ADD SP,SP,#+24 \ 000001C8 000051E3 CMP R1,#+0 \ 000001CC 0300000A BEQ ??method0_2 4061 { 4062 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001D0 002090E5 LDR R2,[R0, #+0] \ 000001D4 300094E5 LDR R0,[R4, #+48] \ 000001D8 4E1E87E2 ADD R1,R7,#+1248 \ 000001DC 160200EF SWI +534 4063 } 4064 if (xstatuses_load) \ ??method0_2: \ 000001E0 08029FE5 LDR R0,??method0_0+0xC ;; xstatuses_load \ 000001E4 000090E5 LDR R0,[R0, #+0] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0600000A BEQ ??method0_1 4065 { 4066 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001F0 ........ LDR R0,??DataTable136 ;; total_xstatuses \ 000001F4 002090E5 LDR R2,[R0, #+0] \ 000001F8 F400A0E3 MOV R0,#+244 \ 000001FC 400E80E3 ORR R0,R0,#0x400 \ 00000200 071080E0 ADD R1,R0,R7 \ 00000204 300094E5 LDR R0,[R4, #+48] \ 00000208 160200EF SWI +534 4067 } 4068 } 4069 #ifdef kluchnik 4070 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4071 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4072 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 4073 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4074 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4075 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 4076 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4077 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4078 #else 4079 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4080 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_1: \ 0000020C 1700A0E3 MOV R0,#+23 \ 00000210 2E0100EF SWI +302 \ 00000214 0090A0E1 MOV R9,R0 \ 00000218 0000A0E3 MOV R0,#+0 \ 0000021C 2E0100EF SWI +302 \ 00000220 00A0A0E1 MOV R10,R0 \ 00000224 0300A0E3 MOV R0,#+3 \ 00000228 C50100EF SWI +453 \ 0000022C 04109DE5 LDR R1,[SP, #+4] \ 00000230 00022DE9 PUSH {R9} \ 00000234 048041E2 SUB R8,R1,#+4 \ 00000238 00042DE9 PUSH {R10} \ 0000023C 0010A0E3 MOV R1,#+0 \ 00000240 02002DE9 PUSH {R1} \ 00000244 04B045E2 SUB R11,R5,#+4 \ 00000248 00004BE0 SUB R0,R11,R0 \ 0000024C 0830A0E1 MOV R3,R8 \ 00000250 0710A0E3 MOV R1,#+7 \ 00000254 02002DE9 PUSH {R1} \ 00000258 01002DE9 PUSH {R0} \ 0000025C 300094E5 LDR R0,[R4, #+48] \ 00000260 0320A0E3 MOV R2,#+3 \ 00000264 0310A0E3 MOV R1,#+3 \ 00000268 4C0100EF SWI +332 4081 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 0000026C 9C0196E5 LDR R0,[R6, #+412] \ 00000270 14D08DE2 ADD SP,SP,#+20 \ 00000274 000050E3 CMP R0,#+0 \ 00000278 0300000A BEQ ??method0_3 \ 0000027C 0800A0E3 MOV R0,#+8 \ 00000280 500E80E3 ORR R0,R0,#0x500 \ 00000284 072080E0 ADD R2,R0,R7 \ 00000288 000000EA B ??method0_4 \ ??method0_3: \ 0000028C 162087E2 ADD R2,R7,#+22 \ ??method0_4: \ 00000290 340094E5 LDR R0,[R4, #+52] \ 00000294 101087E2 ADD R1,R7,#+16 \ 00000298 240100EF SWI +292 4082 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4083 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 0000029C 1700A0E3 MOV R0,#+23 \ 000002A0 2E0100EF SWI +302 \ 000002A4 0060A0E1 MOV R6,R0 \ 000002A8 0000A0E3 MOV R0,#+0 \ 000002AC 2E0100EF SWI +302 \ 000002B0 0090A0E1 MOV R9,R0 \ 000002B4 0300A0E3 MOV R0,#+3 \ 000002B8 C50100EF SWI +453 \ 000002BC 04109DE5 LDR R1,[SP, #+4] \ 000002C0 40002DE9 PUSH {R6} \ 000002C4 C1A0A0E1 ASR R10,R1,#+1 \ 000002C8 00022DE9 PUSH {R9} \ 000002CC 0410A0E3 MOV R1,#+4 \ 000002D0 02002DE9 PUSH {R1} \ 000002D4 0830A0E1 MOV R3,R8 \ 000002D8 00204BE0 SUB R2,R11,R0 \ 000002DC 0310A0E3 MOV R1,#+3 \ 000002E0 02002DE9 PUSH {R1} \ 000002E4 0B10A0E1 MOV R1,R11 \ 000002E8 02002DE9 PUSH {R1} \ 000002EC 340094E5 LDR R0,[R4, #+52] \ 000002F0 0A10A0E1 MOV R1,R10 \ 000002F4 4C0100EF SWI +332 4084 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 000002F8 340094E5 LDR R0,[R4, #+52] \ 000002FC 512E87E2 ADD R2,R7,#+1296 \ 00000300 101087E2 ADD R1,R7,#+16 \ 00000304 240100EF SWI +292 4085 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4086 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000308 1700A0E3 MOV R0,#+23 \ 0000030C 2E0100EF SWI +302 \ 00000310 0060A0E1 MOV R6,R0 \ 00000314 0000A0E3 MOV R0,#+0 \ 00000318 2E0100EF SWI +302 \ 0000031C 0090A0E1 MOV R9,R0 \ 00000320 0300A0E3 MOV R0,#+3 \ 00000324 C50100EF SWI +453 \ 00000328 40002DE9 PUSH {R6} \ 0000032C 00022DE9 PUSH {R9} \ 00000330 0110A0E3 MOV R1,#+1 \ 00000334 02002DE9 PUSH {R1} \ 00000338 00204BE0 SUB R2,R11,R0 \ 0000033C 0A30A0E1 MOV R3,R10 \ 00000340 0310A0E3 MOV R1,#+3 \ 00000344 02002DE9 PUSH {R1} \ 00000348 0B10A0E1 MOV R1,R11 \ 0000034C 02002DE9 PUSH {R1} \ 00000350 340094E5 LDR R0,[R4, #+52] \ 00000354 0310A0E3 MOV R1,#+3 \ 00000358 4C0100EF SWI +332 \ 0000035C 28D08DE2 ADD SP,SP,#+40 4087 // DrawImg(15,200,(int)"4:\\zbin\\naticq\\img\\smiles_logo.png"); 4088 wsprintf(data->ws2,percent_t,"Mod Evilfox(c), Windes, kluchnik"); \ 00000360 1800A0E3 MOV R0,#+24 \ 00000364 500E80E3 ORR R0,R0,#0x500 \ 00000368 072080E0 ADD R2,R0,R7 \ 0000036C 340094E5 LDR R0,[R4, #+52] \ 00000370 101087E2 ADD R1,R7,#+16 \ 00000374 240100EF SWI +292 4089 DrawString(data->ws2,3,scr_h-GetFontYSIZE(FONT_MEDIUM_BOLD)-GetFontYSIZE(FONT_MEDIUM_BOLD)-40, 4090 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(7),GetPaletteAdrByColorIndex(23)); \ 00000378 1700A0E3 MOV R0,#+23 \ 0000037C 2E0100EF SWI +302 \ 00000380 0070A0E1 MOV R7,R0 \ 00000384 0700A0E3 MOV R0,#+7 \ 00000388 2E0100EF SWI +302 \ 0000038C 0090A0E1 MOV R9,R0 \ 00000390 0300A0E3 MOV R0,#+3 \ 00000394 C50100EF SWI +453 \ 00000398 0060A0E1 MOV R6,R0 \ 0000039C 0300A0E3 MOV R0,#+3 \ 000003A0 C50100EF SWI +453 \ 000003A4 80002DE9 PUSH {R7} \ 000003A8 00022DE9 PUSH {R9} \ 000003AC 0110A0E3 MOV R1,#+1 \ 000003B0 02002DE9 PUSH {R1} \ 000003B4 0830A0E1 MOV R3,R8 \ 000003B8 0310A0E3 MOV R1,#+3 \ 000003BC 02002DE9 PUSH {R1} \ 000003C0 00082DE9 PUSH {R11} \ 000003C4 061045E0 SUB R1,R5,R6 \ 000003C8 000041E0 SUB R0,R1,R0 \ 000003CC 282040E2 SUB R2,R0,#+40 \ 000003D0 340094E5 LDR R0,[R4, #+52] \ 000003D4 0310A0E3 MOV R1,#+3 \ 000003D8 4C0100EF SWI +332 4091 #endif 4092 } \ 000003DC 28D08DE2 ADD SP,SP,#+40 \ 000003E0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_0: \ 000003E4 ........ DC32 pictures_max \ 000003E8 ........ DC32 pictures_loaded \ 000003EC ........ DC32 total_smiles \ 000003F0 ........ DC32 xstatuses_load 4093 \ In segment CODE, align 4, keep-with-next 4094 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 4095 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4096 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 300084E5 STR R0,[R4, #+48] 4097 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 340084E5 STR R0,[R4, #+52] 4098 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 4099 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 4100 \ In segment CODE, align 4, keep-with-next 4101 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 4102 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4103 FreeWS(data->ws1); \ 00000008 300094E5 LDR R0,[R4, #+48] \ 0000000C 290100EF SWI +297 4104 FreeWS(data->ws2); \ 00000010 340094E5 LDR R0,[R4, #+52] \ 00000014 290100EF SWI +297 4105 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 4106 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 4107 \ In segment CODE, align 4, keep-with-next 4108 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 4109 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4110 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 4111 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 4112 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 4113 \ In segment CODE, align 4, keep-with-next 4114 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 4115 { 4116 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 4117 return; 4118 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 4119 } \ 00000010 1EFF2FE1 BX LR ;; return 4120 \ In segment CODE, align 4, keep-with-next 4121 int method5(MAIN_GUI *data,GUI_MSG *msg) 4122 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 4123 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 4124 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 9320A0E3 MOV R2,#+147 \ 00000018 F210D0E1 LDRSH R1,[R0, #+2] \ 0000001C 402F82E3 ORR R2,R2,#0x100 \ 00000020 020051E1 CMP R1,R2 \ 00000024 2500001A BNE ??method5_0 4125 { 4126 switch(msg->gbsmsg->submess) \ 00000028 040090E5 LDR R0,[R0, #+4] \ 0000002C ........ LDR R4,??DataTable170 ;; create_connect \ 00000030 ........ LDR R7,??DataTable152 ;; S_ICONS \ 00000034 0350A0E3 MOV R5,#+3 \ 00000038 5C60A0E3 MOV R6,#+92 \ 0000003C 806E86E3 ORR R6,R6,#0x800 \ 00000040 010050E2 SUBS R0,R0,#+1 \ 00000044 0600000A BEQ ??method5_1 \ 00000048 030050E2 SUBS R0,R0,#+3 \ 0000004C 0600000A BEQ ??method5_2 \ 00000050 070050E2 SUBS R0,R0,#+7 \ 00000054 0A00000A BEQ ??method5_3 \ 00000058 250050E2 SUBS R0,R0,#+37 \ 0000005C 1000000A BEQ ??method5_4 \ 00000060 050000EA B ??method5_5 4127 { 4128 #ifdef kluchnik 4129 case LEFT_SOFT: 4130 if (cltop) create_contactlist_menu(); 4131 // if (cltop) remake_clmenu(); 4132 break; 4133 case RIGHT_SOFT: 4134 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 4135 #else 4136 case LEFT_SOFT: 4137 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_1: \ 00000064 0100A0E3 MOV R0,#+1 \ 00000068 F280BDE8 POP {R1,R4-R7,PC} 4138 case RIGHT_SOFT: 4139 // if (cltop) remake_clmenu(); 4140 if (cltop) create_contactlist_menu(); \ ??method5_2: \ 0000006C 9C0197E5 LDR R0,[R7, #+412] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 F280BD08 POPEQ {R1,R4-R7,PC} \ 00000078 ........ BL create_contactlist_menu \ ??method5_5: \ 0000007C 0000A0E3 MOV R0,#+0 \ 00000080 F280BDE8 POP {R1,R4-R7,PC} 4141 break; 4142 #endif 4143 case GREEN_BUTTON: 4144 disautorecconect=0; \ ??method5_3: \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 480187E5 STR R0,[R7, #+328] 4145 if ((connect_state==0)&&(sock==-1)) \ 0000008C 740197E5 LDR R0,[R7, #+372] \ 00000090 000050E3 CMP R0,#+0 \ 00000094 78019705 LDREQ R0,[R7, #+376] \ 00000098 01007003 CMNEQ R0,#+1 \ 0000009C 0700001A BNE ??method5_0 4146 { 4147 GBS_DelTimer(&reconnect_tmr); \ 000000A0 010000EA B ??method5_6 4148 DNR_TRIES=3; 4149 SUBPROC((void *)create_connect); 4150 } 4151 break; 4152 case '0': 4153 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000A4 ........ LDR R0,??DataTable174 ;; end_socket \ 000000A8 710100EF SWI +369 4154 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000AC 070086E0 ADD R0,R6,R7 \ 000000B0 8C0100EF SWI +396 4155 DNR_TRIES=3; \ 000000B4 C05187E5 STR R5,[R7, #+448] 4156 SUBPROC((void *)create_connect); \ 000000B8 0400A0E1 MOV R0,R4 \ 000000BC 710100EF SWI +369 4157 break; 4158 } 4159 } 4160 return(0); \ ??method5_0: \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 F280BDE8 POP {R1,R4-R7,PC} ;; return 4161 } 4162 \ In segment CODE, align 4, keep-with-next 4163 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 4164 \ In segment CODE, align 4, keep-with-next 4165 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 4166 4167 const void * const gui_methods[11]={ 4168 (void *)method0, //Redraw 4169 (void *)method1, //Create 4170 (void *)method2, //Close 4171 (void *)method3, //Focus 4172 (void *)method4, //Unfocus 4173 (void *)method5, //OnKey 4174 0, 4175 (void *)kill_data, //method7, //Destroy 4176 (void *)method8, 4177 (void *)method9, 4178 0 4179 }; 4180 4181 extern const int Reset_timer; \ In segment CODE, align 4, keep-with-next 4182 int my_keyhook(int key, int m) 4183 { \ my_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} 4184 if (m==KEY_DOWN) \ 00000004 9300A0E3 MOV R0,#+147 \ 00000008 400F80E3 ORR R0,R0,#0x100 \ 0000000C 000051E1 CMP R1,R0 \ 00000010 0E00001A BNE ??my_keyhook_0 4185 { 4186 if(change_back_status==1) \ 00000014 ........ LDR R5,??DataTable152 ;; S_ICONS \ 00000018 0040A0E3 MOV R4,#+0 \ 0000001C 2C0195E5 LDR R0,[R5, #+300] \ 00000020 010050E3 CMP R0,#+1 \ 00000024 0300001A BNE ??my_keyhook_1 4187 { 4188 CurrentStatus=status_rem; \ 00000028 280195E5 LDR R0,[R5, #+296] \ 0000002C 5C0185E5 STR R0,[R5, #+348] 4189 set_my_status(); \ 00000030 ........ BL set_my_status 4190 // SUBPROC((void*)WriteDefSettings); 4191 change_back_status=0; \ 00000034 2C4185E5 STR R4,[R5, #+300] 4192 } 4193 #ifdef EVILFOX 4194 if ((key==VOL_UP_BUTTON)&&(IsIdleUiOnTop())) 4195 { 4196 if(autobot==1) 4197 { 4198 autobot=0; 4199 ShowMSG(1,(int)"Autobot Off"); 4200 } 4201 else 4202 { 4203 autobot=1; 4204 ShowMSG(1,(int)"Autobot On"); 4205 } 4206 } 4207 #endif 4208 #ifdef ELKA 4209 #ifdef EVILFOX 4210 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) 4211 #else 4212 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) 4213 #endif 4214 { 4215 GBS_StopTimer(&away_tmr); 4216 msg_away_timer=AUTO_ENGADE; 4217 away_timer(); 4218 main_d=1; 4219 } 4220 else 4221 { 4222 #endif 4223 if(Reset_timer) \ ??my_keyhook_1: \ 00000038 18009FE5 LDR R0,??my_keyhook_2 ;; Reset_timer \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 000050E3 CMP R0,#+0 \ 00000044 3080BD08 POPEQ {R4,R5,PC} 4224 { 4225 msg_away_timer=0; \ 00000048 1C4185E5 STR R4,[R5, #+284] 4226 away_m=0; \ 0000004C 244185E5 STR R4,[R5, #+292] 4227 } 4228 #ifdef ELKA 4229 } 4230 #endif 4231 } 4232 return 0; \ ??my_keyhook_0: \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return \ ??my_keyhook_2: \ 00000058 ........ DC32 Reset_timer 4233 } \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 4234 4235 const RECT Canvas={0,0,0,0}; \ Canvas: \ 00000008 000000000000 DC16 0, 0, 0, 0 \ 0000 \ percent_t: \ 00000010 257400 DC8 "%t" \ percent_d: \ 00000013 256400 DC8 "%d" \ empty_str: \ 00000016 00 DC8 "" \ I_str: \ 00000017 4900 DC8 "I" \ 00000019 000000 DC8 0, 0, 0 \ 0000001C 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 00000025 000000 DC8 0, 0, 0 \ 00000028 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 00000032 0000 DC8 0, 0 \ 00000034 566962726120 DC8 "Vibra On" \ 4F6E00 \ 0000003D 000000 DC8 0, 0, 0 \ 00000040 566962726120 DC8 "Vibra Off" \ 4F666600 \ 0000004A 0000 DC8 0, 0 \ 0000004C C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 0000005A 0000 DC8 0, 0 \ 0000005C C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 0000006B 00 DC8 0 \ 0000006C 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 00000079 000000 DC8 0, 0, 0 \ 0000007C 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 0000008A 0000 DC8 0, 0 \ 0000008C 3E3E20257320 DC8 ">> %s <<" \ 3C3C00 \ 00000095 000000 DC8 0, 0, 0 \ 00000098 2563257400 DC8 "%c%t" \ 0000009D 000000 DC8 0, 0, 0 \ 000000A0 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000000A8 EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 000000AF 00 DC8 0 \ 000000B0 426164207061 DC8 "Bad packet" \ 636B657400 \ 000000BB 00 DC8 0 \ 000000BC 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 000000C7 00 DC8 0 \ 000000C8 4552523A2025 DC8 "ERR: %s" \ 7300 \ 000000D0 75696E256400 DC8 "uin%d" \ 000000D6 0000 DC8 0, 0 \ 000000D8 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 000000E2 0000 DC8 0, 0 \ 000000E4 257325642E77 DC8 "%s%d.wav" \ 617600 \ 000000ED 000000 DC8 0, 0, 0 \ 000000F0 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000104 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ 00000110 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 00000118 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 2CH, 6BH \ 2C6B \ 00000120 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 2CH \ 6B2C \ 00000128 77696E646573 DC8 77H, 69H, 6EH, 64H, 65H, 73H, 20H, 62H \ 2062 \ 00000130 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 00000138 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 00000140 20323035382C DC8 20H, 32H, 30H, 35H, 38H, 2CH, 20H, 6DH \ 206D \ 00000148 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 00000150 202573206174 DC8 20H, 25H, 73H, 20H, 61H, 74H, 20H, 25H \ 2025 \ 00000158 732000 DC8 73H, 20H, 0 \ 0000015B 00 DC8 0 \ 0000015C 466562203237 DC8 "Feb 27 2008" \ 203230303800 \ 00000168 31343A32393A DC8 "14:29:42" \ 343200 \ 00000171 000000 DC8 0, 0, 0 \ 00000174 47414D453A00 DC8 "GAME:" \ 0000017A 0000 DC8 0, 0 \ 0000017C C2F0E5ECFF20 DC8 "\302\360\345\354\377 \342 \356\355\353\340\351\355: %02d:%02d:%02d \012\321\345\360\342\345\360: %s" \ E220EEEDEBE0 \ E9ED3A202530 \ 32643A253032 \ 643A25303264 \ 200AD1E5F0E2 \ E5F03A202573 \ 00 \ 000001A7 00 DC8 0 \ 000001A8 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 000001B8 CEF2EFF0E0E2 DC8 "\316\362\357\360\340\342\353\345\355\356 \361\356\356\341\371\345\355\350\351: %d \012\317\360\350\355\377\362\356 \361\356\356\341\371\345\355\350\351: %d" \ EBE5EDEE20F1 \ EEEEE1F9E5ED \ E8E93A202564 \ 200ACFF0E8ED \ FFF2EE20F1EE \ EEE1F9E5EDE8 \ E93A20256400 \ 000001E8 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 000001F5 000000 DC8 0, 0, 0 \ 000001F8 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 00000205 000000 DC8 0, 0, 0 \ 00000208 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 00000221 000000 DC8 0, 0, 0 \ 00000224 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 00000231 000000 DC8 0, 0, 0 \ 00000234 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 00000248 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 00000255 000000 DC8 0, 0, 0 \ 00000258 C7E0F0FFE420 DC8 "\307\340\360\377\344 \341\340\362\340\360\345\350: %d \357\360\356\366\345\355\362\356\342" \ E1E0F2E0F0E5 \ E83A20256420 \ EFF0EEF6E5ED \ F2EEE200 \ 00000274 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 00000281 000000 DC8 0, 0, 0 \ 00000284 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 0000029F 00 DC8 0 \ 000002A0 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 000002C3 00 DC8 0 \ 000002C4 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 000002CC 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 000002D4 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 000002DC 696C65732F6E DC8 69H, 6CH, 65H, 73H, 2FH, 6EH, 61H, 74H \ 6174 \ 000002E4 6963715F6D6F DC8 69H, 63H, 71H, 5FH, 6DH, 6FH, 64H, 32H \ 6432 \ 000002EC 303538732E7A DC8 30H, 35H, 38H, 73H, 2EH, 7AH, 69H, 70H \ 6970 \ 000002F4 202873676F6C DC8 20H, 28H, 73H, 67H, 6FH, 6CH, 64H, 29H \ 6429 \ 000002FC 202020202834 DC8 20H, 20H, 20H, 20H, 28H, 34H, 30H, 6BH \ 306B \ 00000304 622968747470 DC8 62H, 29H, 68H, 74H, 74H, 70H, 3AH, 2FH \ 3A2F \ 0000030C 2F77696E6465 DC8 2FH, 77H, 69H, 6EH, 64H, 65H, 73H, 2EH \ 732E \ 00000314 6E61726F642E DC8 6EH, 61H, 72H, 6FH, 64H, 2EH, 72H, 75H \ 7275 \ 0000031C 2F66696C6573 DC8 2FH, 66H, 69H, 6CH, 65H, 73H, 2FH, 6EH \ 2F6E \ 00000324 61746963715F DC8 61H, 74H, 69H, 63H, 71H, 5FH, 6DH, 6FH \ 6D6F \ 0000032C 64323035386E DC8 64H, 32H, 30H, 35H, 38H, 6EH, 2EH, 7AH \ 2E7A \ 00000334 697020284E65 DC8 69H, 70H, 20H, 28H, 4EH, 65H, 77H, 53H \ 7753 \ 0000033C 476F6C642920 DC8 47H, 6FH, 6CH, 64H, 29H, 20H, 28H, 34H \ 2834 \ 00000344 306B62296874 DC8 30H, 6BH, 62H, 29H, 68H, 74H, 74H, 70H \ 7470 \ 0000034C 3A2F2F77696E DC8 3AH, 2FH, 2FH, 77H, 69H, 6EH, 64H, 65H \ 6465 \ 00000354 732E6E61726F DC8 73H, 2EH, 6EH, 61H, 72H, 6FH, 64H, 2EH \ 642E \ 0000035C 72752F66696C DC8 72H, 75H, 2FH, 66H, 69H, 6CH, 65H, 73H \ 6573 \ 00000364 2F6E61746963 DC8 2FH, 6EH, 61H, 74H, 69H, 63H, 71H, 5FH \ 715F \ 0000036C 6D6F64323035 DC8 6DH, 6FH, 64H, 32H, 30H, 35H, 38H, 65H \ 3865 \ 00000374 2E7A69702028 DC8 2EH, 7AH, 69H, 70H, 20H, 28H, 65H, 6CH \ 656C \ 0000037C 6B6129202020 DC8 6BH, 61H, 29H, 20H, 20H, 20H, 20H, 20H \ 2020 \ 00000384 2834306B6229 DC8 28H, 34H, 30H, 6BH, 62H, 29H, 66H, 69H \ 6669 \ 0000038C 6C65733A2068 DC8 6CH, 65H, 73H, 3AH, 20H, 68H, 74H, 74H \ 7474 \ 00000394 703A2F2F7769 DC8 70H, 3AH, 2FH, 2FH, 77H, 69H, 6EH, 64H \ 6E64 \ 0000039C 65732E6E6172 DC8 65H, 73H, 2EH, 6EH, 61H, 72H, 6FH, 64H \ 6F64 \ 000003A4 2E72752F6669 DC8 2EH, 72H, 75H, 2FH, 66H, 69H, 6CH, 65H \ 6C65 \ 000003AC 732F6E617469 DC8 73H, 2FH, 6EH, 61H, 74H, 69H, 63H, 71H \ 6371 \ 000003B4 6D6F645F616C DC8 6DH, 6FH, 64H, 5FH, 61H, 6CH, 6CH, 66H \ 6C66 \ 000003BC 696C65735F77 DC8 69H, 6CH, 65H, 73H, 5FH, 77H, 2EH, 7AH \ 2E7A \ 000003C4 697020283433 DC8 69H, 70H, 20H, 28H, 34H, 33H, 32H, 6BH \ 326B \ 000003CC 622953746174 DC8 62H, 29H, 53H, 74H, 61H, 74H, 75H, 73H \ 7573 \ 000003D4 206F6E206963 DC8 20H, 6FH, 6EH, 20H, 69H, 63H, 6FH, 6EH \ 6F6E \ 000003DC 626172206874 DC8 62H, 61H, 72H, 20H, 68H, 74H, 74H, 70H \ 7470 \ 000003E4 3A2F2F77696E DC8 3AH, 2FH, 2FH, 77H, 69H, 6EH, 64H, 65H \ 6465 \ 000003EC 732E6E61726F DC8 73H, 2EH, 6EH, 61H, 72H, 6FH, 64H, 2EH \ 642E \ 000003F4 72752F66696C DC8 72H, 75H, 2FH, 66H, 69H, 6CH, 65H, 73H \ 6573 \ 000003FC 2F696D673136 DC8 2FH, 69H, 6DH, 67H, 31H, 36H, 78H, 31H \ 7831 \ 00000404 362E7A697020 DC8 36H, 2EH, 7AH, 69H, 70H, 20H, 28H, 37H \ 2837 \ 0000040C 346B6229D2E0 DC8 34H, 6BH, 62H, 29H, 0D2H, 0E0H, 0EAH, 20H \ EA20 \ 00000414 E6E520E2F1E5 DC8 0E6H, 0E5H, 20H, 0E2H, 0F1H, 0E5H, 20H, 0E1H \ 20E1 \ 0000041C F3E4E5F220F2 DC8 0F3H, 0E4H, 0E5H, 0F2H, 20H, 0F2H, 0F3H, 0F2H \ F3F2 \ 00000424 20687474703A DC8 20H, 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH \ 2F2F \ 0000042C 6B6C6375686E DC8 6BH, 6CH, 63H, 75H, 68H, 6EH, 69H, 6BH \ 696B \ 00000434 2E6A696E6F2D DC8 2EH, 6AH, 69H, 6EH, 6FH, 2DH, 6EH, 65H \ 6E65 \ 0000043C 742E72752F6E DC8 74H, 2EH, 72H, 75H, 2FH, 6EH, 61H, 74H \ 6174 \ 00000444 6963716D6F64 DC8 69H, 63H, 71H, 6DH, 6FH, 64H, 2FH, 0 \ 2F00 \ 0000044C 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 00000460 204F6E6C696E DC8 " Online: %02d:%02d:%02d %02d-%02d" \ 653A20253032 \ 643A25303264 \ 3A2530326420 \ 253032642D25 \ 30326400 \ 00000482 0000 DC8 0, 0 \ 00000484 204F66666C69 DC8 " Offline: %02d:%02d:%02d %02d-%02d" \ 6E653A202530 \ 32643A253032 \ 643A25303264 \ 20253032642D \ 2530326400 \ 000004A7 00 DC8 0 \ 000004A8 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 000004B0 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 000004B8 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 000004C0 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 000004C8 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 000004D0 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 000004D8 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 000004DE 0000 DC8 0, 0 \ 000004E0 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 000004F2 0000 DC8 0, 0 \ 000004F4 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 00000507 00 DC8 0 \ 00000508 434C69737400 DC8 "CList" \ 0000050E 0000 DC8 0, 0 \ 00000510 4578697400 DC8 "Exit" \ 00000515 000000 DC8 0, 0, 0 \ 00000518 4D6F64204576 DC8 "Mod Evilfox(c), Windes, kluchnik" \ 696C666F7828 \ 63292C205769 \ 6E6465732C20 \ 6B6C7563686E \ 696B00 \ 00000539 000000 DC8 0, 0, 0 \ 0000053C 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 00000564 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 0000056F 00 DC8 0 \ 00000570 49646C655570 DC8 "IdleUpd" \ 6400 \ 00000578 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 0000058F 00 DC8 0 \ 00000590 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 0000059B 00 DC8 0 \ 0000059C 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000005B4 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000005C4 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000005D0 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000005D9 000000 DC8 0, 0, 0 \ 000005DC CDE5E2E5F0ED DC8 "\315\345\342\345\360\355\356\345 \361\356\356\341\371\345\355\350\345 ENIP_SOCK_CONNECTED!" \ EEE520F1EEEE \ E1F9E5EDE8E5 \ 20454E49505F \ 534F434B5F43 \ 4F4E4E454354 \ 45442100 \ 00000604 CDE5E2E5F0ED DC8 "\315\345\342\345\360\355\356\345 \361\356\356\341\371\345\355\350\345 ENIP_DATA_READ" \ EEE520F1EEEE \ E1F9E5EDE8E5 \ 20454E49505F \ 444154415F52 \ 45414400 \ 00000626 0000 DC8 0, 0 \ 00000628 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 0000064B 00 DC8 0 \ 0000064C 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 0000066B 00 DC8 0 \ 0000066C 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 00000676 0000 DC8 0, 0 \ 00000678 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ 0000068C 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 00000699 000000 DC8 0, 0, 0 \ 0000069C 303A5C5A4269 DC8 "0:\\ZBin\\BalletMini\\BalletMini.elf" \ 6E5C42616C6C \ 65744D696E69 \ 5C42616C6C65 \ 744D696E692E \ 656C6600 \ 000006BE 0000 DC8 0, 0 \ 000006C0 526571756573 DC8 "Request info..." \ 7420696E666F \ 2E2E2E00 \ 000006D0 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 000006DD 000000 DC8 0, 0, 0 \ ipc_my_name: \ 000006E0 4E6174494351 DC8 "NatICQ" \ 00 \ 000006E7 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F7 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 00000700 585461736B00 DC8 "XTask" \ 00000706 0000 DC8 0, 0 \ x_status_change: \ 00000708 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ ipc_game_name: \ 00000718 436F6D626174 DC8 "Combats" \ 7300 \ gui_methods: \ 00000720 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 0000073C ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ In segment DATA_C, align 4, align-sorted \ ipc_test_name: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 070000006400 DC32 7, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ input_awaymsg_hdr: \ 00000038 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 00000040 00000000.... DC32 0H, `?`, 32767 \ ....FF7F0000 \ 0000004C D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345:\012" \ EDE8E53A0A00 \ In segment DATA_C, align 4, align-sorted \ def_setting: \ 00000000 25736465665F DC8 "%sdef_settings_%d" \ 73657474696E \ 67735F256400 \ 00000012 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ key_clmenu_sk_r: \ 00000000 3C4300 DC8 "` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ clmenu_sk: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 clmenu_sk_r \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ clmenu_skt: \ 00000000 ........0000 DC32 clmenu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ color: \ 00000000 FFFFFF64 DC8 255, 255, 255, 100 4236 \ In segment CODE, align 4, keep-with-next 4237 void maincsm_oncreate(CSM_RAM *data) 4238 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 4239 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 3C00A0E3 MOV R0,#+60 4240 MAIN_CSM*csm=(MAIN_CSM*)data; 4241 zeromem(main_gui,sizeof(MAIN_GUI)); 4242 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 0000000C 0070A0E3 MOV R7,#+0 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 3C10A0E3 MOV R1,#+60 \ 0000001C 1D0100EF SWI +285 \ 00000020 898100EF SWI +33161 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 011044E2 SUB R1,R4,#+1 \ 00000030 ........ LDR R4,??DataTable155 ;; `?` \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 087084E5 STR R7,[R4, #+8] \ 0000003C BC00C4E1 STRH R0,[R4, #+12] \ 00000040 BE10C4E1 STRH R1,[R4, #+14] 4243 main_gui->gui.canvas=(void *)(&Canvas); \ 00000044 080084E2 ADD R0,R4,#+8 \ 00000048 000086E5 STR R0,[R6, #+0] 4244 // main_gui->gui.flag30=2; 4245 main_gui->gui.methods=(void *)gui_methods; \ 0000004C 720E84E2 ADD R0,R4,#+1824 \ 00000050 040086E5 STR R0,[R6, #+4] 4246 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000054 158000EF SWI +32789 \ 00000058 1C0086E5 STR R0,[R6, #+28] 4247 csm->csm.state=0; \ 0000005C 107085E5 STR R7,[R5, #+16] 4248 csm->csm.unk1=0; \ 00000060 147085E5 STR R7,[R5, #+20] 4249 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 370100EF SWI +311 \ 0000006C 280085E5 STR R0,[R5, #+40] \ 00000070 ........ LDR R5,??DataTable152 ;; S_ICONS \ 00000074 080185E5 STR R0,[R5, #+264] 4250 ews=AllocWS(16384); \ 00000078 400CA0E3 MOV R0,#+16384 \ 0000007C 250100EF SWI +293 4251 // MutexCreate(&contactlist_mtx); 4252 DNR_TRIES=3; 4253 // SUBPROC((void *)InitSmiles); 4254 // SUBPROC((void *)create_connect); 4255 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000080 ........ LDR R2,??DataTable143 ;; process_active_timer \ 00000084 180185E5 STR R0,[R5, #+280] \ 00000088 0300A0E3 MOV R0,#+3 \ 0000008C C00185E5 STR R0,[R5, #+448] \ 00000090 871EA0E3 MOV R1,#+2160 \ 00000094 040041E2 SUB R0,R1,#+4 \ 00000098 050080E0 ADD R0,R0,R5 \ 0000009C 4D0000EF SWI +77 4256 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000A0 ........ LDR R0,??DataTable180 ;; UIN \ 000000A4 131084E2 ADD R1,R4,#+19 \ 000000A8 002090E5 LDR R2,[R0, #+0] \ 000000AC E600A0E3 MOV R0,#+230 \ 000000B0 600E80E3 ORR R0,R0,#0x600 \ 000000B4 040080E0 ADD R0,R0,R4 \ 000000B8 160000EF SWI +22 4257 gipc.name_to=ipc_my_name; \ 000000BC 6E0EA0E3 MOV R0,#+1760 \ 000000C0 041080E0 ADD R1,R0,R4 \ 000000C4 AC1085E5 STR R1,[R5, #+172] 4258 gipc.name_from=ipc_my_name; \ 000000C8 040080E0 ADD R0,R0,R4 \ 000000CC B00085E5 STR R0,[R5, #+176] 4259 gipc.data=(void *)-1; \ 000000D0 0700E0E1 MVN R0,R7 \ 000000D4 B40085E5 STR R0,[R5, #+180] 4260 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000D8 AC3085E2 ADD R3,R5,#+172 \ 000000DC 0120A0E3 MOV R2,#+1 \ 000000E0 F210A0E3 MOV R1,#+242 \ 000000E4 C01F81E3 ORR R1,R1,#0x300 \ 000000E8 0900A0E3 MOV R0,#+9 \ 000000EC 420C80E3 ORR R0,R0,#0x4200 \ 000000F0 000100EF SWI +256 4261 /* 4262 InitXStatusesImg(); 4263 //InitSmiles(); Это вызовется из InitXStatusesImg 4264 create_connect(); 4265 silenthide=1; 4266 gipc.name_to=ipc_xtask_name; 4267 gipc.name_from=ipc_my_name; 4268 gipc.data=0; 4269 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 4270 */ 4271 } \ 000000F4 F080BDE8 POP {R4-R7,PC} ;; return 4272 \ In segment CODE, align 4, keep-with-next 4273 void maincsm_onclose(CSM_RAM *csm) 4274 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 4275 WriteDefSettings(); 4276 // SaveConfigData(successed_config_filename); 4277 4278 /* 4279 #pragma segment="CONFIG_C" 4280 unsigned int ul; 4281 int f; 4282 extern const CFG_HDR cfghdr0; //first var in CONFIG 4283 void *cfg=(void*)&cfghdr0; 4284 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 4285 4286 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 4287 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 4288 } 4289 fwrite(f,cfg,len,&ul); 4290 fclose(f,&ul); 4291 */ 4292 4293 // GBS_DelTimer(&tmr_dorecv); 4294 RemoveKeybMsgHook((void *)my_keyhook); 4295 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable152 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C ........ LDR R0,??DataTable146 ;; my_keyhook \ 00000010 2D0100EF SWI +301 \ 00000014 6C00A0E3 MOV R0,#+108 \ 00000018 800E80E3 ORR R0,R0,#0x800 \ 0000001C 040080E0 ADD R0,R0,R4 \ 00000020 8C0100EF SWI +396 4296 GBS_DelTimer(&tmr_vibra); \ 00000024 4C00A0E3 MOV R0,#+76 \ 00000028 800E80E3 ORR R0,R0,#0x800 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 8C0100EF SWI +396 4297 GBS_DelTimer(&reconnect_tmr); \ 00000034 5C00A0E3 MOV R0,#+92 \ 00000038 800E80E3 ORR R0,R0,#0x800 \ 0000003C 040080E0 ADD R0,R0,R4 \ 00000040 8C0100EF SWI +396 4298 GBS_DelTimer(&tmr_illumination); \ 00000044 3C00A0E3 MOV R0,#+60 \ 00000048 800E80E3 ORR R0,R0,#0x800 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 8C0100EF SWI +396 4299 GBS_DelTimer(&mytmr); \ 00000054 8C00A0E3 MOV R0,#+140 \ 00000058 600E80E3 ORR R0,R0,#0x600 \ 0000005C 040080E0 ADD R0,R0,R4 \ 00000060 8C0100EF SWI +396 4300 GBS_DelTimer(&mytmr2); \ 00000064 9C00A0E3 MOV R0,#+156 \ 00000068 600E80E3 ORR R0,R0,#0x600 \ 0000006C 040080E0 ADD R0,R0,R4 \ 00000070 8C0100EF SWI +396 4301 GBS_DelTimer(&mytmr3); \ 00000074 0400A0E3 MOV R0,#+4 \ 00000078 400E80E3 ORR R0,R0,#0x400 \ 0000007C 040080E0 ADD R0,R0,R4 \ 00000080 8C0100EF SWI +396 4302 GBS_DelTimer(&mytmr4); \ 00000084 AC00A0E3 MOV R0,#+172 \ 00000088 600E80E3 ORR R0,R0,#0x600 \ 0000008C 040080E0 ADD R0,R0,R4 \ 00000090 8C0100EF SWI +396 4303 #ifdef NEWSGOLD 4304 GBS_DelTimer(&tracktmr); 4305 #endif 4306 GBS_DelTimer(&develop); \ 00000094 C800A0E3 MOV R0,#+200 \ 00000098 A00E80E3 ORR R0,R0,#0xA00 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 8C0100EF SWI +396 4307 GBS_DelTimer(&away_tmr); \ 000000A4 7C00A0E3 MOV R0,#+124 \ 000000A8 600E80E3 ORR R0,R0,#0x600 \ 000000AC 040080E0 ADD R0,R0,R4 \ 000000B0 8C0100EF SWI +396 4308 SetVibration(0); \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 7C0000EF SWI +124 4309 FreeTemplates(); \ 000000BC ........ BL FreeTemplates 4310 FreeCLIST(); \ 000000C0 ........ _BLF FreeCLIST,??FreeCLIST??rA 4311 free_ICONS(); \ 000000C4 ........ BL free_ICONS 4312 // FreeSmiles(); 4313 FreeWS(ews); \ 000000C8 180194E5 LDR R0,[R4, #+280] \ 000000CC 290100EF SWI +297 4314 FreeXStatusText(); \ 000000D0 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 4315 // MutexDestroy(&contactlist_mtx); 4316 SUBPROC((void *)FreeSmiles); \ 000000D4 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 000000D8 710100EF SWI +369 4317 SUBPROC((void *)FreeXStatusesImg); \ 000000DC 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 000000E0 710100EF SWI +369 4318 SUBPROC((void *)end_socket); \ 000000E4 ........ LDR R0,??DataTable174 ;; end_socket \ 000000E8 710100EF SWI +369 4319 SUBPROC((void *)ClearSendQ); \ 000000EC ........ LDR R0,??DataTable175 ;; ClearSendQ \ 000000F0 710100EF SWI +369 4320 SUBPROC((void *)ElfKiller); \ 000000F4 ........ LDR R0,??DataTable186 ;; ElfKiller \ 000000F8 710100EF SWI +369 4321 } \ 000000FC 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000100 ........ DC32 FreeSmiles \ 00000104 ........ DC32 FreeXStatusesImg 4322 \ In segment CODE, align 4, keep-with-next 4323 void do_reconnect(void) 4324 { 4325 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable152 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 941190E5 LDR R1,[R0, #+404] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 4326 { 4327 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 C01180E5 STR R1,[R0, #+448] 4328 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable170 ;; create_connect \ 00000020 710100EF SWI +369 4329 } 4330 } \ 00000024 0080BDE8 POP {PC} ;; return 4331 \ In segment CODE, align 4, keep-with-next 4332 void CheckDoubleRun(void) 4333 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 4334 int csm_id; 4335 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable152 ;; S_ICONS \ 00000008 B40094E5 LDR R0,[R4, #+180] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1000000A BEQ ??CheckDoubleRun_0 4336 { 4337 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable155 ;; `?` 4338 gipc.name_from=ipc_my_name; 4339 gipc.data=(void *)csm_id; \ 00000018 B40084E5 STR R0,[R4, #+180] \ 0000001C 702E81E2 ADD R2,R1,#+1792 \ 00000020 AC2084E5 STR R2,[R4, #+172] \ 00000024 6E1E81E2 ADD R1,R1,#+1760 \ 00000028 B01084E5 STR R1,[R4, #+176] 4340 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000002C AC3084E2 ADD R3,R4,#+172 \ 00000030 0220A0E3 MOV R2,#+2 \ 00000034 FC1F82E3 ORR R1,R2,#0x3F0 \ 00000038 0900A0E3 MOV R0,#+9 \ 0000003C 420C80E3 ORR R0,R0,#0x4200 \ 00000040 000100EF SWI +256 4341 LockSched(); \ 00000044 460100EF SWI +326 4342 CloseCSM(maincsm_id); \ 00000048 040194E5 LDR R0,[R4, #+260] \ 0000004C FC0100EF SWI +508 4343 //ShowMSG(1,(int)LG_ALREADY_STARTED); 4344 UnlockSched(); \ 00000050 470100EF SWI +327 \ 00000054 1080BDE8 POP {R4,PC} 4345 } 4346 else 4347 { 4348 InitXStatusesImg(); \ ??CheckDoubleRun_0: \ 00000058 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 4349 //InitSmiles(); Это вызовется из InitXStatusesImg 4350 create_connect(); \ 0000005C ........ BL create_connect 4351 } 4352 } \ 00000060 1080BDE8 POP {R4,PC} ;; return 4353 4354 #define IPC_GAME 7 4355 4356 typedef struct{ 4357 unsigned long uin; 4358 char *msg; 4359 }IPCmsg; 4360 \ In segment CODE, align 4, keep-with-next 4361 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 4362 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 \ 00000008 ........ LDR R5,??DataTable154 ;; S_ICONS \ 0000000C ........ LDR R7,??DataTable155 ;; `?` \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 F200D4E1 LDRSH R0,[R4, #+2] \ 00000018 0060A0E3 MOV R6,#+0 \ 0000001C F210A0E3 MOV R1,#+242 \ 00000020 C01F81E3 ORR R1,R1,#0x300 \ 00000024 010050E1 CMP R0,R1 \ 00000028 8500001A BNE ??maincsm_onmessage_2 4363 extern const int VIBR_ON_CONNECT; 4364 4365 // char ss[100]; 4366 MAIN_CSM *csm=(MAIN_CSM*)data; 4367 { 4368 //IPC 4369 if (msg->msg==MSG_IPC) 4370 { 4371 IPC_REQ *ipc; 4372 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 088094E5 LDR R8,[R4, #+8] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 8200000A BEQ ??maincsm_onmessage_2 4373 { 4374 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C 6E9EA0E3 MOV R9,#+1760 \ 00000040 071089E0 ADD R1,R9,R7 \ 00000044 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 7C00001A BNE ??maincsm_onmessage_2 4375 { 4376 switch (msg->submess) \ 00000050 041094E5 LDR R1,[R4, #+4] \ 00000054 040098E5 LDR R0,[R8, #+4] \ 00000058 011041E2 SUB R1,R1,#+1 \ 0000005C 040051E3 CMP R1,#+4 \ 00000060 7700008A BHI ??maincsm_onmessage_2 \ 00000064 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 00000068 0120D2E7 LDRB R2,[R2, R1] \ 0000006C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000070 010A1116 DC8 +1,+10,+17,+22 \ 00000074 4F000000 DC8 +79,+0,+0,+0 4377 { 4378 case IPC_CHECK_DOUBLERUN: 4379 //Если приняли свое собственное сообщение, значит запускаем чекер 4380 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 00000078 071089E0 ADD R1,R9,R7 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 0200001A BNE ??maincsm_onmessage_4 \ 00000084 480A9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 00000088 710100EF SWI +369 \ 0000008C 6C0000EA B ??maincsm_onmessage_2 4381 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 00000090 040195E5 LDR R0,[R5, #+260] \ 00000094 080088E5 STR R0,[R8, #+8] \ 00000098 690000EA B ??maincsm_onmessage_2 4382 break; 4383 case IPC_SMILE_PROCESSED: 4384 //Только собственные смайлы ;) 4385 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 0000009C 071089E0 ADD R1,R9,R7 \ 000000A0 010050E1 CMP R0,R1 \ 000000A4 0100001A BNE ??maincsm_onmessage_7 \ 000000A8 280A9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000AC 710100EF SWI +369 4386 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000B0 ........ BL SMART_REDRAW \ 000000B4 620000EA B ??maincsm_onmessage_2 4387 break; 4388 case IPC_XSTATUSIMG_PROCESSED: 4389 //Только собственные иксстатусы ;) 4390 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_9: \ 000000B8 071089E0 ADD R1,R9,R7 \ 000000BC 010050E1 CMP R0,R1 \ 000000C0 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000C4 100A9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000C8 F7FFFFEA B ??maincsm_onmessage_8 4391 SMART_REDRAW(); 4392 break; 4393 case IPC_GAME: 4394 { 4395 4396 } 4397 break; 4398 case IPC_TENSECONDS: 4399 //Только свое сообщение 4400 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000CC 071089E0 ADD R1,R9,R7 \ 000000D0 010050E1 CMP R0,R1 \ 000000D4 5A00001A BNE ??maincsm_onmessage_2 4401 { 4402 CLIST *t=(CLIST *)cltop; \ 000000D8 9C8195E5 LDR R8,[R5, #+412] 4403 int f=0; \ 000000DC 0090A0E3 MOV R9,#+0 \ 000000E0 000058E3 CMP R8,#+0 \ 000000E4 2500000A BEQ ??maincsm_onmessage_11 4404 while(t) 4405 { 4406 if(t->just_now) \ ??maincsm_onmessage_12: \ 000000E8 5C0098E5 LDR R0,[R8, #+92] \ 000000EC 000050E3 CMP R0,#+0 \ 000000F0 0200000A BEQ ??maincsm_onmessage_13 4407 { 4408 if (!(--(t->just_now))) f=1; \ 000000F4 010050E2 SUBS R0,R0,#+1 \ 000000F8 5C0088E5 STR R0,[R8, #+92] \ 000000FC 0190A003 MOVEQ R9,#+1 4409 } 4410 if (t->isactive) \ ??maincsm_onmessage_13: \ 00000100 800098E5 LDR R0,[R8, #+128] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 0C00000A BEQ ??maincsm_onmessage_14 4411 { 4412 if (!(--(t->isactive))) \ 0000010C 010050E2 SUBS R0,R0,#+1 \ 00000110 800088E5 STR R0,[R8, #+128] \ 00000114 0900001A BNE ??maincsm_onmessage_14 4413 { 4414 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 4415 if ((t->log)&&(!t->isunread)) \ 00000118 740098E5 LDR R0,[R8, #+116] \ 0000011C 0190A0E3 MOV R9,#+1 \ 00000120 000050E3 CMP R0,#+0 \ 00000124 0500000A BEQ ??maincsm_onmessage_14 \ 00000128 640098E5 LDR R0,[R8, #+100] \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 0200001A BNE ??maincsm_onmessage_14 4416 { 4417 FreeLOGQ(&t->log); \ 00000134 740088E2 ADD R0,R8,#+116 \ 00000138 ........ BL FreeLOGQ 4418 t->msg_count=0; \ 0000013C 846088E5 STR R6,[R8, #+132] 4419 } 4420 } 4421 } 4422 t=(CLIST *)(t->next); \ ??maincsm_onmessage_14: \ 00000140 008098E5 LDR R8,[R8, #+0] 4423 } \ 00000144 000058E3 CMP R8,#+0 \ 00000148 E6FFFF1A BNE ??maincsm_onmessage_12 4424 if (f) \ 0000014C 000059E3 CMP R9,#+0 \ 00000150 0A00000A BEQ ??maincsm_onmessage_11 4425 { 4426 CLIST *oldt=NULL; 4427 if (contactlist_menu_id) \ 00000154 A41195E5 LDR R1,[R5, #+420] \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 000051E3 CMP R1,#+0 \ 00000160 0400000A BEQ ??maincsm_onmessage_15 4428 { 4429 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000164 A40195E5 LDR R0,[R5, #+420] \ 00000168 0010A0E3 MOV R1,#+0 \ 0000016C 090200EF SWI +521 \ 00000170 8F0100EF SWI +399 \ 00000174 ........ _BLF FindContactByN,??FindContactByN??rA 4430 } 4431 RecountMenu(oldt,1); \ ??maincsm_onmessage_15: \ 00000178 0110A0E3 MOV R1,#+1 \ 0000017C ........ BL RecountMenu 4432 } 4433 if (time_to_stop_t9) \ ??maincsm_onmessage_11: \ 00000180 D00195E5 LDR R0,[R5, #+464] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 2D00000A BEQ ??maincsm_onmessage_2 4434 { 4435 if (!(--time_to_stop_t9)) \ 0000018C 010050E2 SUBS R0,R0,#+1 \ 00000190 D00185E5 STR R0,[R5, #+464] \ 00000194 2A00001A BNE ??maincsm_onmessage_2 4436 { 4437 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 00000198 A80195E5 LDR R0,[R5, #+424] \ 0000019C 350100EF SWI +309 \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 2600000A BEQ ??maincsm_onmessage_2 \ 000001A8 960100EF SWI +406 \ 000001AC 240000EA B ??maincsm_onmessage_2 4438 } 4439 } 4440 } 4441 break; 4442 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 4443 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_16: \ 000001B0 080098E5 LDR R0,[R8, #+8] \ 000001B4 040090E5 LDR R0,[R0, #+4] \ 000001B8 1B0000EF SWI +27 \ 000001BC 0090A0E1 MOV R9,R0 4444 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 000001C0 260089E2 ADD R0,R9,#+38 \ 000001C4 140000EF SWI +20 \ 000001C8 00A0A0E1 MOV R10,R0 4445 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 000001CC 080098E5 LDR R0,[R8, #+8] 4446 msg->pkt.type=T_SENDMSG; 4447 msg->pkt.data_len=l; 4448 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 000001D0 0920A0E1 MOV R2,R9 \ 000001D4 000090E5 LDR R0,[R0, #+0] \ 000001D8 00008AE5 STR R0,[R10, #+0] \ 000001DC 0200A0E3 MOV R0,#+2 \ 000001E0 B400CAE1 STRH R0,[R10, #+4] \ 000001E4 B690CAE1 STRH R9,[R10, #+6] \ 000001E8 080098E5 LDR R0,[R8, #+8] \ 000001EC 041090E5 LDR R1,[R0, #+4] \ 000001F0 08008AE2 ADD R0,R10,#+8 \ 000001F4 1E0100EF SWI +286 4449 //slientsend=1; 4450 if(strstr(msg->data,PASS)==0) \ 000001F8 E0189FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 000001FC 08008AE2 ADD R0,R10,#+8 \ 00000200 180100EF SWI +280 \ 00000204 000050E3 CMP R0,#+0 \ 00000208 0600000A BEQ ??maincsm_onmessage_17 4451 { 4452 SENDMSGCOUNT++; //Номер сообщения 4453 SUBPROC((void *)SendAnswer,0,msg); 4454 } 4455 else 4456 { 4457 msg->pkt.data_len=40; \ 0000020C 2800A0E3 MOV R0,#+40 \ 00000210 B600CAE1 STRH R0,[R10, #+6] 4458 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 00000214 3C00A0E3 MOV R0,#+60 \ 00000218 500E80E3 ORR R0,R0,#0x500 \ 0000021C 071080E0 ADD R1,R0,R7 \ 00000220 08008AE2 ADD R0,R10,#+8 \ 00000224 1A0000EF SWI +26 4459 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_17: \ 00000228 0C0195E5 LDR R0,[R5, #+268] 4460 SUBPROC((void *)SendAnswer,0,msg); \ 0000022C 0A20A0E1 MOV R2,R10 \ 00000230 010080E2 ADD R0,R0,#+1 \ 00000234 0C0185E5 STR R0,[R5, #+268] \ 00000238 ........ LDR R0,??DataTable173 ;; SendAnswer \ 0000023C 0010A0E3 MOV R1,#+0 \ 00000240 710100EF SWI +369 4461 } 4462 break; 4463 } 4464 } 4465 } 4466 } 4467 //Нарисуем иконочку моего статуса 4468 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 4469 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 00000244 068100EF SWI +33030 \ 00000248 040090E5 LDR R0,[R0, #+4] \ 0000024C 080100EF SWI +264 \ 00000250 280090E5 LDR R0,[R0, #+40] 4470 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 00000254 350100EF SWI +309 \ 00000258 000050E3 CMP R0,#+0 \ 0000025C 5A00000A BEQ ??maincsm_onmessage_18 4471 { 4472 GUI *igui=GetTopGUI(); 4473 if (igui) //И он существует \ 00000260 4D0100EF SWI +333 \ 00000264 000050E3 CMP R0,#+0 \ 00000268 5900000A BEQ ??maincsm_onmessage_19 4474 { 4475 //#ifdef ELKA 4476 INC_show=0; \ 0000026C D86185E5 STR R6,[R5, #+472] 4477 //#endif 4478 canvasdata=BuildCanvas(); //void * - belyj fon! \ 00000270 F18000EF SWI +33009 \ 00000274 DC0085E5 STR R0,[R5, #+220] 4479 int icn; 4480 // if(ShowStatusIcon==0 || ShowStatusIcon==3) 4481 // { 4482 if(total_unread) \ 00000278 980195E5 LDR R0,[R5, #+408] \ 0000027C 000050E3 CMP R0,#+0 4483 icn=IS_MSG; \ 00000280 0D00A013 MOVNE R0,#+13 \ 00000284 0500001A BNE ??maincsm_onmessage_20 4484 else 4485 { 4486 switch(connect_state) \ 00000288 740195E5 LDR R0,[R5, #+372] \ 0000028C 000050E3 CMP R0,#+0 \ 00000290 0200000A BEQ ??maincsm_onmessage_20 \ 00000294 030050E2 SUBS R0,R0,#+3 4487 { 4488 case 0: 4489 icn=IS_OFFLINE; break; 4490 case 3: 4491 icn=CurrentStatus; //IS_ONLINE; \ 00000298 5C019505 LDREQ R0,[R5, #+348] 4492 break; 4493 default: 4494 icn=IS_UNKNOWN; break; \ 0000029C 0E00A013 MOVNE R0,#+14 4495 } 4496 } 4497 //} 4498 //Тут трохи поменял 4499 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 4500 // __root const CFG_CBOX_ITEM cfgcbox9_1[5]={"On main screen","Iconbar","Iconbar except idle","All","Nothing"}; 4501 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) \ ??maincsm_onmessage_20: \ 000002A0 ........ LDR R1,??DataTable178 ;; ShowStatusIcon \ 000002A4 001091E5 LDR R1,[R1, #+0] \ 000002A8 000051E3 CMP R1,#+0 \ 000002AC 02005113 CMPNE R1,#+2 \ 000002B0 03005113 CMPNE R1,#+3 \ 000002B4 1900001A BNE ??maincsm_onmessage_21 4502 { 4503 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 4504 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ 000002B8 008185E0 ADD R8,R5,R0, LSL #+2 \ 000002BC 000098E5 LDR R0,[R8, #+0] \ 000002C0 210000EF SWI +33 \ 000002C4 0090A0E1 MOV R9,R0 \ 000002C8 000098E5 LDR R0,[R8, #+0] \ 000002CC 220000EF SWI +34 \ 000002D0 0C189FE5 LDR R1,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 000002D4 00A091E5 LDR R10,[R1, #+0] \ 000002D8 08189FE5 LDR R1,??maincsm_onmessage_5+0x14 ;; IDLEICON_Y \ 000002DC 0A0080E0 ADD R0,R0,R10 \ 000002E0 00B091E5 LDR R11,[R1, #+0] \ 000002E4 0110A0E3 MOV R1,#+1 \ 000002E8 02002DE9 PUSH {R1} \ 000002EC 013040E2 SUB R3,R0,#+1 \ 000002F0 0B20A0E1 MOV R2,R11 \ 000002F4 0B1089E0 ADD R1,R9,R11 \ 000002F8 011041E2 SUB R1,R1,#+1 \ 000002FC 02002DE9 PUSH {R1} \ 00000300 DC0095E5 LDR R0,[R5, #+220] \ 00000304 0A10A0E1 MOV R1,R10 \ 00000308 250000EF SWI +37 4505 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 0000030C 002098E5 LDR R2,[R8, #+0] \ 00000310 0B10A0E1 MOV R1,R11 \ 00000314 0A00A0E1 MOV R0,R10 \ 00000318 230000EF SWI +35 \ 0000031C 08D08DE2 ADD SP,SP,#+8 4506 } 4507 // __root const CFG_CBOX_ITEM cfgcbox_8z[4]={"Nothing","On main screen","Iconbar","All"}; 4508 if(show_xstatus==1 || show_xstatus==3) \ ??maincsm_onmessage_21: \ 00000320 ........ LDR R0,??DataTable179 ;; show_xstatus \ 00000324 000090E5 LDR R0,[R0, #+0] \ 00000328 010050E3 CMP R0,#+1 \ 0000032C 03005013 CMPNE R0,#+3 \ 00000330 2700001A BNE ??maincsm_onmessage_19 4509 { 4510 PNGTOP_DESC *pltop=PNG_TOP(); 4511 pltop->dyn_pltop=XStatusesImgList; 4512 DisableIDLETMR(); 4513 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 4514 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 00000334 B0879FE5 LDR R8,??maincsm_onmessage_5+0x18 ;; XStatusesIconArray \ 00000338 B98100EF SWI +33209 \ 0000033C ........ LDR R1,??DataTable159 ;; XStatusesImgList \ 00000340 001091E5 LDR R1,[R1, #+0] \ 00000344 081080E5 STR R1,[R0, #+8] \ 00000348 7F0100EF SWI +383 \ 0000034C 140195E5 LDR R0,[R5, #+276] \ 00000350 001098E5 LDR R1,[R8, #+0] \ 00000354 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000358 210000EF SWI +33 \ 0000035C 001098E5 LDR R1,[R8, #+0] \ 00000360 0090A0E1 MOV R9,R0 \ 00000364 140195E5 LDR R0,[R5, #+276] \ 00000368 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 0000036C 220000EF SWI +34 \ 00000370 78179FE5 LDR R1,??maincsm_onmessage_5+0x1C ;; IDLEICON_XX \ 00000374 00A091E5 LDR R10,[R1, #+0] \ 00000378 74179FE5 LDR R1,??maincsm_onmessage_5+0x20 ;; IDLEICON_YX \ 0000037C 0A0080E0 ADD R0,R0,R10 \ 00000380 00B091E5 LDR R11,[R1, #+0] \ 00000384 0110A0E3 MOV R1,#+1 \ 00000388 02002DE9 PUSH {R1} \ 0000038C 013040E2 SUB R3,R0,#+1 \ 00000390 0B20A0E1 MOV R2,R11 \ 00000394 0B1089E0 ADD R1,R9,R11 \ 00000398 011041E2 SUB R1,R1,#+1 \ 0000039C 02002DE9 PUSH {R1} \ 000003A0 DC0095E5 LDR R0,[R5, #+220] \ 000003A4 0A10A0E1 MOV R1,R10 \ 000003A8 250000EF SWI +37 4515 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 000003AC 140195E5 LDR R0,[R5, #+276] \ 000003B0 001098E5 LDR R1,[R8, #+0] \ 000003B4 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 000003B8 0B10A0E1 MOV R1,R11 \ 000003BC 0A00A0E1 MOV R0,R10 \ 000003C0 230000EF SWI +35 \ 000003C4 08D08DE2 ADD SP,SP,#+8 \ 000003C8 010000EA B ??maincsm_onmessage_19 4516 } 4517 #ifdef EVILFOX 4518 DrawImg(IDLEICON_X-1,IDLEICON_Y-8,(int)"4:\\zbin\\naticq\\img\\naticq_ms.png"); 4519 #endif 4520 /* 4521 #ifdef EVILFOX 4522 #else 4523 if(strlen(fontpath)>5) 4524 { 4525 #endif 4526 */ 4527 4528 #ifdef ELKA 4529 if (total_unread) 4530 SLI_On(); 4531 #endif 4532 } 4533 } 4534 else 4535 { 4536 main_d=1; \ ??maincsm_onmessage_18: \ 000003CC 0100A0E3 MOV R0,#+1 \ 000003D0 D00085E5 STR R0,[R5, #+208] 4537 } 4538 } 4539 4540 //---------------------------------------------------// 4541 4542 if(msg->msg == MSG_IPC) \ ??maincsm_onmessage_19: \ 000003D4 F200D4E1 LDRSH R0,[R4, #+2] \ 000003D8 F210A0E3 MOV R1,#+242 \ 000003DC C01F81E3 ORR R1,R1,#0x300 \ 000003E0 010050E1 CMP R0,R1 \ 000003E4 BF00001A BNE ??maincsm_onmessage_22 4543 { 4544 IPC_REQ *ipc; 4545 if ((ipc=(IPC_REQ*)msg->data0)) \ 000003E8 080094E5 LDR R0,[R4, #+8] \ 000003EC 000050E3 CMP R0,#+0 \ 000003F0 0F01000A BEQ ??maincsm_onmessage_23 4546 { 4547 if (strcmp_nocase(ipc->name_to,"IdleUpd")==0) \ 000003F4 000090E5 LDR R0,[R0, #+0] \ 000003F8 571E87E2 ADD R1,R7,#+1392 \ 000003FC ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000400 000050E3 CMP R0,#+0 4548 { 4549 switch (msg->submess) \ 00000404 04009405 LDREQ R0,[R4, #+4] \ 00000408 00005003 CMPEQ R0,#+0 \ 0000040C B500001A BNE ??maincsm_onmessage_22 4550 { 4551 case 0: 4552 { 4553 if (main_d==1) \ 00000410 D00095E5 LDR R0,[R5, #+208] \ 00000414 010050E3 CMP R0,#+1 \ 00000418 8600001A BNE ??maincsm_onmessage_24 4554 { 4555 ClearScreen(); \ 0000041C ........ _BLF ClearScreen,??ClearScreen??rA 4556 if(Is_SMARTCPU_On) \ 00000420 F00095E5 LDR R0,[R5, #+240] \ 00000424 000050E3 CMP R0,#+0 \ 00000428 8100000A BEQ ??maincsm_onmessage_25 4557 { 4558 #ifdef EVILFOX 4559 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, 0); 4560 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, 0); 4561 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, 0); 4562 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, 0); 4563 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, 0); 4564 #else 4565 if(fonto==1) \ 0000042C C4069FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 00000430 D83095E5 LDR R3,[R5, #+216] \ 00000434 008090E5 LDR R8,[R0, #+0] \ 00000438 BC069FE5 LDR R0,??maincsm_onmessage_5+0x28 ;; msg_d_y \ 0000043C 009090E5 LDR R9,[R0, #+0] \ 00000440 B8069FE5 LDR R0,??maincsm_onmessage_5+0x2C ;; spaco2 \ 00000444 00A090E5 LDR R10,[R0, #+0] \ 00000448 ........ LDR R0,??DataTable188 ;; fonto \ 0000044C 0A10A0E1 MOV R1,R10 \ 00000450 00B090E5 LDR R11,[R0, #+0] \ 00000454 02002DE9 PUSH {R1} \ 00000458 D800A0E3 MOV R0,#+216 \ 0000045C 900E80E3 ORR R0,R0,#0x900 \ 00000460 01005BE3 CMP R11,#+1 \ 00000464 3400001A BNE ??maincsm_onmessage_26 4566 { 4567 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 00000468 0110A0E3 MOV R1,#+1 \ 0000046C 02002DE9 PUSH {R1} \ 00000470 052080E0 ADD R2,R0,R5 \ 00000474 0800A0E1 MOV R0,R8 \ 00000478 0910A0E1 MOV R1,R9 \ 0000047C ........ _BLF PrintField,??PrintField??rA 4568 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000480 0A00A0E1 MOV R0,R10 \ 00000484 01002DE9 PUSH {R0} \ 00000488 0100A0E3 MOV R0,#+1 \ 0000048C 01002DE9 PUSH {R0} \ 00000490 D83095E5 LDR R3,[R5, #+216] \ 00000494 0800A0E3 MOV R0,#+8 \ 00000498 A00E80E3 ORR R0,R0,#0xA00 \ 0000049C 052080E0 ADD R2,R0,R5 \ 000004A0 E00095E5 LDR R0,[R5, #+224] \ 000004A4 091080E0 ADD R1,R0,R9 \ 000004A8 0800A0E1 MOV R0,R8 \ 000004AC ........ _BLF PrintField,??PrintField??rA 4569 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 000004B0 0A00A0E1 MOV R0,R10 \ 000004B4 01002DE9 PUSH {R0} \ 000004B8 0100A0E3 MOV R0,#+1 \ 000004BC 01002DE9 PUSH {R0} \ 000004C0 D83095E5 LDR R3,[R5, #+216] \ 000004C4 3800A0E3 MOV R0,#+56 \ 000004C8 A00E80E3 ORR R0,R0,#0xA00 \ 000004CC 052080E0 ADD R2,R0,R5 \ 000004D0 E00095E5 LDR R0,[R5, #+224] \ 000004D4 801089E0 ADD R1,R9,R0, LSL #+1 \ 000004D8 0800A0E1 MOV R0,R8 \ 000004DC ........ _BLF PrintField,??PrintField??rA 4570 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000004E0 0A00A0E1 MOV R0,R10 \ 000004E4 01002DE9 PUSH {R0} \ 000004E8 0100A0E3 MOV R0,#+1 \ 000004EC 01002DE9 PUSH {R0} \ 000004F0 D83095E5 LDR R3,[R5, #+216] \ 000004F4 6800A0E3 MOV R0,#+104 \ 000004F8 A00E80E3 ORR R0,R0,#0xA00 \ 000004FC 052080E0 ADD R2,R0,R5 \ 00000500 E00095E5 LDR R0,[R5, #+224] \ 00000504 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000508 091080E0 ADD R1,R0,R9 \ 0000050C 0800A0E1 MOV R0,R8 \ 00000510 ........ _BLF PrintField,??PrintField??rA 4571 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 00000514 00042DE9 PUSH {R10} \ 00000518 0100A0E3 MOV R0,#+1 \ 0000051C 01002DE9 PUSH {R0} \ 00000520 D83095E5 LDR R3,[R5, #+216] \ 00000524 9800A0E3 MOV R0,#+152 \ 00000528 A00E80E3 ORR R0,R0,#0xA00 \ 0000052C 052080E0 ADD R2,R0,R5 \ 00000530 E00095E5 LDR R0,[R5, #+224] \ 00000534 001189E0 ADD R1,R9,R0, LSL #+2 \ 00000538 3A0000EA B ??maincsm_onmessage_27 4572 } 4573 else 4574 { 4575 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_26: \ 0000053C 0B10A0E1 MOV R1,R11 \ 00000540 02002DE9 PUSH {R1} \ 00000544 052080E0 ADD R2,R0,R5 \ 00000548 0800A0E1 MOV R0,R8 \ 0000054C 0910A0E1 MOV R1,R9 \ 00000550 ........ _BLF PrintField,??PrintField??rA 4576 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000554 E00095E5 LDR R0,[R5, #+224] \ 00000558 C50100EF SWI +453 \ 0000055C 0A10A0E1 MOV R1,R10 \ 00000560 02002DE9 PUSH {R1} \ 00000564 090080E0 ADD R0,R0,R9 \ 00000568 0B10A0E1 MOV R1,R11 \ 0000056C 02002DE9 PUSH {R1} \ 00000570 D83095E5 LDR R3,[R5, #+216] \ 00000574 0810A0E3 MOV R1,#+8 \ 00000578 A01E81E3 ORR R1,R1,#0xA00 \ 0000057C 052081E0 ADD R2,R1,R5 \ 00000580 011080E2 ADD R1,R0,#+1 \ 00000584 0800A0E1 MOV R0,R8 \ 00000588 ........ _BLF PrintField,??PrintField??rA 4577 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 0000058C E00095E5 LDR R0,[R5, #+224] \ 00000590 C50100EF SWI +453 \ 00000594 0A10A0E1 MOV R1,R10 \ 00000598 02002DE9 PUSH {R1} \ 0000059C 800089E0 ADD R0,R9,R0, LSL #+1 \ 000005A0 0B10A0E1 MOV R1,R11 \ 000005A4 02002DE9 PUSH {R1} \ 000005A8 D83095E5 LDR R3,[R5, #+216] \ 000005AC 3810A0E3 MOV R1,#+56 \ 000005B0 A01E81E3 ORR R1,R1,#0xA00 \ 000005B4 052081E0 ADD R2,R1,R5 \ 000005B8 021080E2 ADD R1,R0,#+2 \ 000005BC 0800A0E1 MOV R0,R8 \ 000005C0 ........ _BLF PrintField,??PrintField??rA 4578 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 000005C4 E00095E5 LDR R0,[R5, #+224] \ 000005C8 C50100EF SWI +453 \ 000005CC 0A10A0E1 MOV R1,R10 \ 000005D0 02002DE9 PUSH {R1} \ 000005D4 800080E0 ADD R0,R0,R0, LSL #+1 \ 000005D8 090080E0 ADD R0,R0,R9 \ 000005DC 0B10A0E1 MOV R1,R11 \ 000005E0 02002DE9 PUSH {R1} \ 000005E4 D83095E5 LDR R3,[R5, #+216] \ 000005E8 6810A0E3 MOV R1,#+104 \ 000005EC A01E81E3 ORR R1,R1,#0xA00 \ 000005F0 052081E0 ADD R2,R1,R5 \ 000005F4 031080E2 ADD R1,R0,#+3 \ 000005F8 0800A0E1 MOV R0,R8 \ 000005FC ........ _BLF PrintField,??PrintField??rA 4579 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 00000600 E00095E5 LDR R0,[R5, #+224] \ 00000604 C50100EF SWI +453 \ 00000608 00042DE9 PUSH {R10} \ 0000060C 00082DE9 PUSH {R11} \ 00000610 D83095E5 LDR R3,[R5, #+216] \ 00000614 9810A0E3 MOV R1,#+152 \ 00000618 A01E81E3 ORR R1,R1,#0xA00 \ 0000061C 052081E0 ADD R2,R1,R5 \ 00000620 000189E0 ADD R0,R9,R0, LSL #+2 \ 00000624 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_27: \ 00000628 0800A0E1 MOV R0,R8 \ 0000062C ........ _BLF PrintField,??PrintField??rA \ 00000630 28D08DE2 ADD SP,SP,#+40 4580 } 4581 #endif 4582 } 4583 main_d=0; \ ??maincsm_onmessage_25: \ 00000634 D06085E5 STR R6,[R5, #+208] 4584 } 4585 if(Is_UPTIME_On) \ ??maincsm_onmessage_24: \ 00000638 300195E5 LDR R0,[R5, #+304] \ 0000063C 000050E3 CMP R0,#+0 \ 00000640 0100000A BEQ ??maincsm_onmessage_28 4586 Draw22(canvasdata); \ 00000644 DC0095E5 LDR R0,[R5, #+220] \ 00000648 ........ BL Draw22 4587 if(Is_PING_On) \ ??maincsm_onmessage_28: \ 0000064C EC0095E5 LDR R0,[R5, #+236] \ 00000650 000050E3 CMP R0,#+0 \ 00000654 0100000A BEQ ??maincsm_onmessage_29 4588 Draw11(canvasdata); \ 00000658 DC0095E5 LDR R0,[R5, #+220] \ 0000065C ........ BL Draw11 4589 4590 if(Auto_Status && showAwayIdle) \ ??maincsm_onmessage_29: \ 00000660 ........ LDR R0,??DataTable161 ;; Auto_Status \ 00000664 000090E5 LDR R0,[R0, #+0] \ 00000668 000050E3 CMP R0,#+0 \ 0000066C 0500000A BEQ ??maincsm_onmessage_30 \ 00000670 ........ LDR R0,??DataTable162 ;; showAwayIdle \ 00000674 000090E5 LDR R0,[R0, #+0] \ 00000678 000050E3 CMP R0,#+0 \ 0000067C 0100000A BEQ ??maincsm_onmessage_30 4591 DrawAutoMSG(canvasdata); \ 00000680 DC0095E5 LDR R0,[R5, #+220] \ 00000684 ........ BL DrawAutoMSG 4592 if(Is_Unread_On) \ ??maincsm_onmessage_30: \ 00000688 74049FE5 LDR R0,??maincsm_onmessage_5+0x30 ;; Is_Unread_On \ 0000068C 000090E5 LDR R0,[R0, #+0] \ 00000690 000050E3 CMP R0,#+0 \ 00000694 1300000A BEQ ??maincsm_onmessage_22 4593 { 4594 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 00000698 002195E5 LDR R2,[R5, #+256] \ 0000069C F18FA0E3 MOV R8,#+964 \ 000006A0 680F88E2 ADD R0,R8,#+416 \ 000006A4 071080E0 ADD R1,R0,R7 \ 000006A8 050088E0 ADD R0,R8,R5 \ 000006AC 160000EF SWI +22 4595 #ifdef EVILFOX 4596 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, space); 4597 #else 4598 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 000006B0 ........ LDR R0,??DataTable163 ;; spaco1 \ 000006B4 052088E0 ADD R2,R8,R5 \ 000006B8 000090E5 LDR R0,[R0, #+0] \ 000006BC 01002DE9 PUSH {R0} \ 000006C0 ........ LDR R0,??DataTable188 ;; fonto \ 000006C4 000090E5 LDR R0,[R0, #+0] \ 000006C8 01002DE9 PUSH {R0} \ 000006CC D83095E5 LDR R3,[R5, #+216] \ 000006D0 30049FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; unread_Y \ 000006D4 001090E5 LDR R1,[R0, #+0] \ 000006D8 2C049FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; unread_X \ 000006DC 000090E5 LDR R0,[R0, #+0] \ 000006E0 ........ _BLF PrintField,??PrintField??rA \ 000006E4 08D08DE2 ADD SP,SP,#+8 4599 #endif 4600 } 4601 } 4602 } 4603 } 4604 } 4605 } 4606 4607 //-----------------------------------------------------------// 4608 4609 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_22: \ 000006E8 F200D4E1 LDRSH R0,[R4, #+2] \ 000006EC F110A0E3 MOV R1,#+241 \ 000006F0 C01F81E3 ORR R1,R1,#0x300 \ 000006F4 010050E1 CMP R0,R1 \ 000006F8 2A00001A BNE ??maincsm_onmessage_31 4610 { 4611 extern const char *successed_config_filename; 4612 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 000006FC ........ LDR R0,??DataTable185 ;; successed_config_filename \ 00000700 081094E5 LDR R1,[R4, #+8] \ 00000704 000090E5 LDR R0,[R0, #+0] \ 00000708 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000070C 000050E3 CMP R0,#+0 \ 00000710 2400001A BNE ??maincsm_onmessage_31 4613 { 4614 ShowMSG(1,(int)"NatICQ config updated!"); 4615 InitConfig(); 4616 #ifdef NEWSGOLD 4617 initTags(); 4618 #endif 4619 FontPathFree(); 4620 #ifdef EVILFOX 4621 FontPathInit(fonto,(char *)fontpath, 0); 4622 #else 4623 FontPathInit(fonto,(char *)fontpath, 1); \ 00000714 ........ LDR R8,??DataTable187 ;; fontpath \ 00000718 7800A0E3 MOV R0,#+120 \ 0000071C 500E80E3 ORR R0,R0,#0x500 \ 00000720 071080E0 ADD R1,R0,R7 \ 00000724 0100A0E3 MOV R0,#+1 \ 00000728 480100EF SWI +328 \ 0000072C ........ _BLF InitConfig,??InitConfig??rA \ 00000730 ........ _BLF FontPathFree,??FontPathFree??rA \ 00000734 ........ LDR R0,??DataTable188 ;; fonto \ 00000738 0120A0E3 MOV R2,#+1 \ 0000073C 00B090E5 LDR R11,[R0, #+0] \ 00000740 0810A0E1 MOV R1,R8 \ 00000744 0B00A0E1 MOV R0,R11 \ 00000748 ........ _BLF FontPathInit,??FontPathInit??rA 4624 #endif 4625 //#ifdef ELKA 4626 if(fonto==1) \ 0000074C 01005BE3 CMP R11,#+1 \ 00000750 0B00001A BNE ??maincsm_onmessage_32 4627 { 4628 char *heght=malloc(64); \ 00000754 4000A0E3 MOV R0,#+64 \ 00000758 140000EF SWI +20 \ 0000075C 0090A0E1 MOV R9,R0 4629 sprintf(heght, "%s2240.png", fontpath); \ 00000760 0820A0E1 MOV R2,R8 \ 00000764 591E87E2 ADD R1,R7,#+1424 \ 00000768 160000EF SWI +22 4630 paused_height=GetImgHeight((int)heght); \ 0000076C 0900A0E1 MOV R0,R9 \ 00000770 210000EF SWI +33 \ 00000774 E00085E5 STR R0,[R5, #+224] 4631 mfree(heght); \ 00000778 0900A0E1 MOV R0,R9 \ 0000077C 150000EF SWI +21 \ 00000780 010000EA B ??maincsm_onmessage_33 4632 } 4633 else 4634 paused_height=fonto-100; \ ??maincsm_onmessage_32: \ 00000784 64004BE2 SUB R0,R11,#+100 \ 00000788 E00085E5 STR R0,[R5, #+224] 4635 //#endif 4636 free_ICONS(); \ ??maincsm_onmessage_33: \ 0000078C ........ BL free_ICONS 4637 setup_ICONS(); \ 00000790 ........ BL setup_ICONS 4638 ResortCL(); \ 00000794 ........ _BLF ResortCL,??ResortCL??rA 4639 RecountMenu(NULL,1); \ 00000798 0110A0E3 MOV R1,#+1 \ 0000079C 0000A0E3 MOV R0,#+0 \ 000007A0 ........ BL RecountMenu 4640 init_time_zone(); \ 000007A4 ........ BL init_time_zone 4641 // InitSmiles(); 4642 } 4643 } 4644 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_31: \ 000007A8 F200D4E1 LDRSH R0,[R4, #+2] \ 000007AC 980050E3 CMP R0,#+152 \ 000007B0 0E00001A BNE ??maincsm_onmessage_34 4645 { 4646 if ((int)msg->data0==csm->gui_id) \ 000007B4 0C109DE5 LDR R1,[SP, #+12] \ 000007B8 080094E5 LDR R0,[R4, #+8] \ 000007BC 281091E5 LDR R1,[R1, #+40] \ 000007C0 010050E1 CMP R0,R1 4647 { 4648 csm->csm.state=-3; \ 000007C4 0C009D05 LDREQ R0,[SP, #+12] \ 000007C8 0210E003 MVNEQ R1,#+2 \ 000007CC 10108005 STREQ R1,[R0, #+16] 4649 } 4650 if ((int)msg->data0==contactlist_menu_id) \ 000007D0 080094E5 LDR R0,[R4, #+8] \ 000007D4 A41195E5 LDR R1,[R5, #+420] \ 000007D8 010050E1 CMP R0,R1 4651 { 4652 contactlist_menu_id=0; \ 000007DC A4618505 STREQ R6,[R5, #+420] 4653 prev_clmenu_itemcount=0; \ 000007E0 AC618505 STREQ R6,[R5, #+428] 4654 } 4655 if ((int)msg->data0==edchat_id) \ 000007E4 A81195E5 LDR R1,[R5, #+424] \ 000007E8 010050E1 CMP R0,R1 4656 { 4657 edchat_id=0; \ 000007EC A8618505 STREQ R6,[R5, #+424] 4658 } 4659 } 4660 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_34: \ 000007F0 F200D4E1 LDRSH R0,[R4, #+2] \ 000007F4 FC0F50E3 CMP R0,#+1008 \ 000007F8 0D00001A BNE ??maincsm_onmessage_23 4661 { 4662 switch((int)msg->data0) \ 000007FC 080094E5 LDR R0,[R4, #+8] \ 00000800 0C1094E5 LDR R1,[R4, #+12] \ 00000804 ........ LDR R8,??DataTable168 ;; do_reconnect \ 00000808 5C40A0E3 MOV R4,#+92 \ 0000080C 804E84E3 ORR R4,R4,#0x800 \ 00000810 489F44E2 SUB R9,R4,#+288 \ 00000814 802050E2 SUBS R2,R0,#+128 \ 00000818 0800000A BEQ ??maincsm_onmessage_35 \ 0000081C 022052E2 SUBS R2,R2,#+2 \ 00000820 0200000A BEQ ??maincsm_onmessage_36 \ 00000824 122052E2 SUBS R2,R2,#+18 \ 00000828 1500000A BEQ ??maincsm_onmessage_37 \ 0000082C 1F0000EA B ??maincsm_onmessage_38 4663 { 4664 case LMAN_DISCONNECT_IND: 4665 is_gprs_online=0; \ ??maincsm_onmessage_36: \ 00000830 946185E5 STR R6,[R5, #+404] 4666 return(1); \ ??maincsm_onmessage_23: \ 00000834 0100A0E3 MOV R0,#+1 \ 00000838 10D08DE2 ADD SP,SP,#+16 \ 0000083C F08FBDE8 POP {R4-R11,PC} ;; return 4667 case LMAN_CONNECT_CNF: 4668 vibra_count=1; \ ??maincsm_onmessage_35: \ 00000840 0100A0E3 MOV R0,#+1 \ 00000844 640185E5 STR R0,[R5, #+356] 4669 start_vibra(); \ 00000848 ........ BL start_vibra 4670 is_gprs_online=1; \ 0000084C 0100A0E3 MOV R0,#+1 \ 00000850 940185E5 STR R0,[R5, #+404] 4671 strcpy(logmsg,LG_GRGPRSUP); \ 00000854 B00F44E2 SUB R0,R4,#+704 \ 00000858 071080E0 ADD R1,R0,R7 \ 0000085C 050089E0 ADD R0,R9,R5 \ 00000860 1A0000EF SWI +26 4672 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000864 ........ LDR R0,??DataTable176 ;; RECONNECT_TIME \ 00000868 0820A0E1 MOV R2,R8 \ 0000086C 000090E5 LDR R0,[R0, #+0] \ 00000870 D830A0E3 MOV R3,#+216 \ 00000874 930001E0 MUL R1,R3,R0 \ 00000878 050084E0 ADD R0,R4,R5 \ 0000087C 4D0000EF SWI +77 4673 return(1); \ 00000880 070000EA B ??maincsm_onmessage_39 4674 case ENIP_DNR_HOST_BY_NAME: 4675 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_37: \ 00000884 BC0195E5 LDR R0,[R5, #+444] \ 00000888 000051E1 CMP R1,R0 \ 0000088C E8FFFF1A BNE ??maincsm_onmessage_23 4676 { 4677 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000890 C00195E5 LDR R0,[R5, #+448] \ 00000894 000050E3 CMP R0,#+0 \ 00000898 E5FFFF0A BEQ ??maincsm_onmessage_23 \ 0000089C ........ LDR R0,??DataTable170 ;; create_connect \ ??maincsm_onmessage_40: \ 000008A0 710100EF SWI +369 4678 } 4679 return(1); \ ??maincsm_onmessage_39: \ 000008A4 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_41: \ 000008A8 10D08DE2 ADD SP,SP,#+16 \ 000008AC F08FBDE8 POP {R4-R11,PC} 4680 } 4681 if ((int)msg->data1==sock) \ ??maincsm_onmessage_38: \ 000008B0 782195E5 LDR R2,[R5, #+376] \ 000008B4 020051E1 CMP R1,R2 \ 000008B8 DDFFFF1A BNE ??maincsm_onmessage_23 4682 { 4683 //Если наш сокет 4684 if ((((unsigned int)msg->data0)>>28)==0xA) \ 000008BC 201EA0E1 LSR R1,R0,#+28 \ 000008C0 0A0051E3 CMP R1,#+10 \ 000008C4 0200001A BNE ??maincsm_onmessage_42 4685 { 4686 //Принят пакет 4687 ProcessPacket((TPKT *)msg->data0); \ 000008C8 ........ BL ProcessPacket 4688 return(0); \ 000008CC 0000A0E3 MOV R0,#+0 \ 000008D0 F4FFFFEA B ??maincsm_onmessage_41 4689 } 4690 switch((int)msg->data0) \ ??maincsm_onmessage_42: \ 000008D4 ........ LDR R2,??DataTable171 ;; VIBR_ON_CONNECT \ 000008D8 741195E5 LDR R1,[R5, #+372] \ 000008DC 00A092E5 LDR R10,[R2, #+0] \ 000008E0 8A0040E2 SUB R0,R0,#+138 \ 000008E4 050050E3 CMP R0,#+5 \ 000008E8 D1FFFF8A BHI ??maincsm_onmessage_23 \ 000008EC 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 000008F0 D02092E1 LDRSB R2,[R2, R0] \ 000008F4 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 000008F8 42423D01 DC8 +66,+66,+61,+1 \ 000008FC 4B470000 DC8 +75,+71,+0,+0 4691 { 4692 case ENIP_SOCK_CONNECTED: 4693 if (connect_state==1) \ ??maincsm_onmessage_43: \ 00000900 010051E3 CMP R1,#+1 \ 00000904 3400001A BNE ??maincsm_onmessage_44 4694 { 4695 if(VIBR_ON_CONNECT) \ 00000908 00005AE3 CMP R10,#+0 4696 vibra_count=2; \ 0000090C 0200A013 MOVNE R0,#+2 4697 else 4698 vibra_count=1; \ 00000910 0100A003 MOVEQ R0,#+1 \ 00000914 640185E5 STR R0,[R5, #+356] 4699 start_vibra(); \ 00000918 ........ BL start_vibra 4700 //Соединение установленно, посылаем пакет login 4701 strcpy(logmsg, LG_GRTRYLOGIN); \ 0000091C AA0F44E2 SUB R0,R4,#+680 \ 00000920 071080E0 ADD R1,R0,R7 \ 00000924 050089E0 ADD R0,R9,R5 \ 00000928 1A0000EF SWI +26 4702 { 4703 int i=strlen(PASS); \ 0000092C AC019FE5 LDR R0,??maincsm_onmessage_5+0xC ;; PASS \ 00000930 1B0000EF SWI +27 \ 00000934 0040A0E1 MOV R4,R0 4704 TPKT *p=malloc(sizeof(PKT)+i); \ 00000938 080084E2 ADD R0,R4,#+8 \ 0000093C 140000EF SWI +20 4705 p->pkt.uin=UIN; 4706 p->pkt.type=T_REQLOGIN; 4707 p->pkt.data_len=i; 4708 memcpy(p->data,PASS,i); \ 00000940 98119FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 00000944 0080A0E1 MOV R8,R0 \ 00000948 ........ LDR R0,??DataTable180 ;; UIN \ 0000094C 0420A0E1 MOV R2,R4 \ 00000950 009090E5 LDR R9,[R0, #+0] \ 00000954 0100A0E3 MOV R0,#+1 \ 00000958 009088E5 STR R9,[R8, #+0] \ 0000095C B400C8E1 STRH R0,[R8, #+4] \ 00000960 B640C8E1 STRH R4,[R8, #+6] \ 00000964 080088E2 ADD R0,R8,#+8 \ 00000968 1E0100EF SWI +286 4709 SUBPROC((void *)send_login,0,p); \ 0000096C 9C019FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; send_login \ 00000970 0820A0E1 MOV R2,R8 \ 00000974 0010A0E3 MOV R1,#+0 \ 00000978 710100EF SWI +369 4710 } 4711 GROUP_CACHE=0; \ 0000097C A06185E5 STR R6,[R5, #+416] 4712 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000980 0C6185E5 STR R6,[R5, #+268] 4713 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000984 0600A0E1 MOV R0,R6 \ 00000988 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 0000098C 000050E3 CMP R0,#+0 \ 00000990 0400001A BNE ??maincsm_onmessage_45 \ 00000994 C400A0E3 MOV R0,#+196 \ 00000998 500E80E3 ORR R0,R0,#0x500 \ 0000099C 071080E0 ADD R1,R0,R7 \ 000009A0 0000A0E3 MOV R0,#+0 \ 000009A4 ........ _BLF AddGroup,??AddGroup??rA 4714 if (!FindContactByUin(UIN)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_45: \ 000009A8 0900A0E1 MOV R0,R9 \ 000009AC ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000009B0 000050E3 CMP R0,#+0 \ 000009B4 0400001A BNE ??maincsm_onmessage_46 \ 000009B8 0130A0E3 MOV R3,#+1 \ 000009BC 0020A0E3 MOV R2,#+0 \ 000009C0 5D1E87E2 ADD R1,R7,#+1488 \ 000009C4 0900A0E1 MOV R0,R9 \ 000009C8 ........ _BLF AddContact,??AddContact??rA 4715 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_46: \ 000009CC 40019FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; LoadLocalCL \ 000009D0 710100EF SWI +369 4716 SMART_REDRAW(); \ 000009D4 ........ BL SMART_REDRAW \ 000009D8 B1FFFFEA B ??maincsm_onmessage_39 4717 } 4718 else 4719 { 4720 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_44: \ 000009DC A00F44E2 SUB R0,R4,#+640 \ ??maincsm_onmessage_47: \ 000009E0 071080E0 ADD R1,R0,R7 \ 000009E4 0100A0E3 MOV R0,#+1 \ 000009E8 480100EF SWI +328 \ 000009EC ACFFFFEA B ??maincsm_onmessage_39 4721 } 4722 break; 4723 case ENIP_SOCK_DATA_READ: 4724 if (connect_state>=2) \ ??maincsm_onmessage_48: \ 000009F0 020051E3 CMP R1,#+2 4725 { 4726 //Если посылали send 4727 SUBPROC((void *)get_answer); \ 000009F4 1C019FA5 LDRGE R0,??maincsm_onmessage_5+0x44 ;; get_answer \ 000009F8 A8FFFFAA BGE ??maincsm_onmessage_40 4728 //SMART_REDRAW(); 4729 } 4730 else 4731 { 4732 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 000009FC 960F44E2 SUB R0,R4,#+600 \ 00000A00 F6FFFFEA B ??maincsm_onmessage_47 4733 } 4734 break; 4735 case ENIP_BUFFER_FREE: 4736 case ENIP_BUFFER_FREE1: 4737 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_49: \ 00000A04 ........ LDR R0,??DataTable173 ;; SendAnswer \ 00000A08 0020A0E3 MOV R2,#+0 \ 00000A0C 0210A0E1 MOV R1,R2 \ 00000A10 710100EF SWI +369 \ 00000A14 A2FFFFEA B ??maincsm_onmessage_39 4738 break; 4739 case ENIP_SOCK_REMOTE_CLOSED: 4740 //Закрыт со стороны сервера 4741 if (connect_state) \ ??maincsm_onmessage_50: \ 00000A18 000051E3 CMP R1,#+0 \ 00000A1C 84FFFF0A BEQ ??maincsm_onmessage_23 4742 SUBPROC((void *)end_socket); \ 00000A20 ........ LDR R0,??DataTable174 ;; end_socket \ 00000A24 9DFFFFEA B ??maincsm_onmessage_40 4743 break; 4744 case ENIP_SOCK_CLOSED: 4745 //strcpy(logmsg, "No connection"); 4746 //Dump not received 4747 /* if (RXstate>(-(int)sizeof(PKT))) 4748 { 4749 unsigned int err; 4750 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 4751 if (f!=-1) 4752 { 4753 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 4754 fclose(f,&err); 4755 } 4756 }*/ 4757 FillAllOffline(); \ ??maincsm_onmessage_51: \ 00000A28 ........ _BLF FillAllOffline,??FillAllOffline??rA 4758 RecountMenu(NULL,1); \ 00000A2C 0110A0E3 MOV R1,#+1 \ 00000A30 0000A0E3 MOV R0,#+0 \ 00000A34 ........ BL RecountMenu 4759 connect_state=0; \ 00000A38 746185E5 STR R6,[R5, #+372] 4760 sock=-1; \ 00000A3C 0600E0E1 MVN R0,R6 \ 00000A40 780185E5 STR R0,[R5, #+376] 4761 if(VIBR_ON_CONNECT) \ 00000A44 00005AE3 CMP R10,#+0 4762 vibra_count=4; \ 00000A48 0400A013 MOVNE R0,#+4 4763 else 4764 vibra_count=1; \ 00000A4C 0100A003 MOVEQ R0,#+1 \ 00000A50 640185E5 STR R0,[R5, #+356] 4765 4766 start_vibra(); \ 00000A54 ........ BL start_vibra 4767 if (sendq_p) \ 00000A58 900195E5 LDR R0,[R5, #+400] \ 00000A5C 000050E3 CMP R0,#+0 \ 00000A60 0500000A BEQ ??maincsm_onmessage_52 4768 { 4769 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000A64 8C3195E5 LDR R3,[R5, #+396] \ 00000A68 8D0F44E2 SUB R0,R4,#+564 \ 00000A6C 072080E0 ADD R2,R0,R7 \ 00000A70 FF10A0E3 MOV R1,#+255 \ 00000A74 050089E0 ADD R0,R9,R5 \ 00000A78 1B0100EF SWI +283 4770 } 4771 SMART_REDRAW(); \ ??maincsm_onmessage_52: \ 00000A7C ........ BL SMART_REDRAW 4772 SUBPROC((void *)ClearSendQ); \ 00000A80 ........ LDR R0,??DataTable175 ;; ClearSendQ \ 00000A84 710100EF SWI +369 4773 #ifdef EVILFOX 4774 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 4775 #else 4776 if (!disautorecconect) \ 00000A88 480195E5 LDR R0,[R5, #+328] \ 00000A8C 000050E3 CMP R0,#+0 \ 00000A90 67FFFF1A BNE ??maincsm_onmessage_23 4777 { 4778 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000A94 ........ LDR R0,??DataTable176 ;; RECONNECT_TIME \ 00000A98 0820A0E1 MOV R2,R8 \ 00000A9C 006090E5 LDR R6,[R0, #+0] \ 00000AA0 D800A0E3 MOV R0,#+216 \ 00000AA4 900601E0 MUL R1,R0,R6 \ 00000AA8 050084E0 ADD R0,R4,R5 \ 00000AAC 4D0000EF SWI +77 4779 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000AB0 40002DE9 PUSH {R6} \ 00000AB4 053089E0 ADD R3,R9,R5 \ 00000AB8 840F44E2 SUB R0,R4,#+528 \ 00000ABC 072080E0 ADD R2,R0,R7 \ 00000AC0 FF10A0E3 MOV R1,#+255 \ 00000AC4 050089E0 ADD R0,R9,R5 \ 00000AC8 1B0100EF SWI +283 \ 00000ACC 04D08DE2 ADD SP,SP,#+4 \ 00000AD0 73FFFFEA B ??maincsm_onmessage_39 \ ??maincsm_onmessage_5: \ 00000AD4 ........ DC32 CheckDoubleRun \ 00000AD8 ........ DC32 ProcessNextSmile \ 00000ADC ........ DC32 ProcessNextXStatImg \ 00000AE0 ........ DC32 PASS \ 00000AE4 ........ DC32 IDLEICON_X \ 00000AE8 ........ DC32 IDLEICON_Y \ 00000AEC ........ DC32 XStatusesIconArray \ 00000AF0 ........ DC32 IDLEICON_XX \ 00000AF4 ........ DC32 IDLEICON_YX \ 00000AF8 ........ DC32 msg_d_x \ 00000AFC ........ DC32 msg_d_y \ 00000B00 ........ DC32 spaco2 \ 00000B04 ........ DC32 Is_Unread_On \ 00000B08 ........ DC32 unread_Y \ 00000B0C ........ DC32 unread_X \ 00000B10 ........ DC32 send_login \ 00000B14 ........ DC32 LoadLocalCL \ 00000B18 ........ DC32 get_answer 4780 } 4781 4782 #endif 4783 break; 4784 } 4785 } 4786 } 4787 return(1); 4788 } 4789 4790 4791 //-------------------- ICON IN ICONBAR ------------// 4792 4793 4794 #pragma swi_number=0x27 4795 __swi __arm void AddIconToIconBar(int pic, short *num); 4796 4797 extern const unsigned int NumStatusToIconBar; 4798 extern const unsigned int NumXStatusToIconBar; 4799 //extern void SetIconBarHandler(); 4800 extern const int ShowStatusIcon; 4801 \ In segment CODE, align 4, keep-with-next 4802 int IsIdle(void) 4803 { \ IsIdle: \ 00000000 00402DE9 PUSH {LR} 4804 void *icsm=FindCSMbyID(CSM_root()->idle_id); \ 00000004 068100EF SWI +33030 \ 00000008 040090E5 LDR R0,[R0, #+4] \ 0000000C 080100EF SWI +264 4805 if (IsGuiOnTop(((int*)icsm)[DISPLACE_OF_IDLEGUI_ID/4 ])) \ 00000010 280090E5 LDR R0,[R0, #+40] \ 00000014 350100EF SWI +309 \ 00000018 000050E3 CMP R0,#+0 4806 return(1); \ 0000001C 0100A013 MOVNE R0,#+1 4807 else 4808 return(0); \ 00000020 0080BDE8 POP {PC} ;; return 4809 } 4810 \ In segment CODE, align 4, keep-with-next 4811 void addIconBar(short* num) 4812 { \ addIconBar: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4813 int icn; 4814 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ 00000004 ........ LDR R5,??DataTable198 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C C4009FE5 LDR R0,??addIconBar_0 ;; NumStatusToIconBar \ 00000010 006090E5 LDR R6,[R0, #+0] \ 00000014 ........ LDR R0,??DataTable178 ;; ShowStatusIcon \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 010050E3 CMP R0,#+1 \ 00000020 03005013 CMPNE R0,#+3 \ 00000024 1A00001A BNE ??addIconBar_1 4815 { 4816 if(total_unread) \ 00000028 980195E5 LDR R0,[R5, #+408] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 1000000A BEQ ??addIconBar_2 4817 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); \ ??addIconBar_3: \ 00000034 0410A0E1 MOV R1,R4 \ 00000038 0D0086E2 ADD R0,R6,#+13 \ ??addIconBar_4: \ 0000003C 270000EF SWI +39 4818 else 4819 { 4820 switch(connect_state) 4821 { 4822 case 0: 4823 icn=IS_OFFLINE; break; 4824 case 3: 4825 icn=CurrentStatus; //IS_ONLINE; 4826 break; 4827 default: 4828 icn=IS_UNKNOWN; break; 4829 } 4830 AddIconToIconBar(NumStatusToIconBar + icn, num); 4831 } 4832 } 4833 else 4834 { 4835 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 4836 { 4837 if(!(IsIdle())) 4838 { 4839 if(total_unread) 4840 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 4841 else 4842 { 4843 switch(connect_state) 4844 { 4845 case 0: 4846 icn=IS_OFFLINE; break; 4847 case 3: 4848 icn=CurrentStatus; //IS_ONLINE; 4849 break; 4850 default: 4851 icn=IS_UNKNOWN; break; 4852 } 4853 AddIconToIconBar(NumStatusToIconBar + icn, num); 4854 } 4855 } 4856 } 4857 } 4858 4859 if(show_xstatus==2 || show_xstatus==3) \ ??addIconBar_5: \ 00000040 ........ LDR R0,??DataTable179 ;; show_xstatus \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 020050E3 CMP R0,#+2 \ 0000004C 03005013 CMPNE R0,#+3 \ 00000050 7080BD18 POPNE {R4-R6,PC} 4860 if(CurrentXStatus!=0) \ 00000054 140195E5 LDR R0,[R5, #+276] \ 00000058 000050E3 CMP R0,#+0 \ 0000005C 7080BD08 POPEQ {R4-R6,PC} 4861 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ 00000060 74209FE5 LDR R2,??addIconBar_0+0x4 ;; NumXStatusToIconBar \ 00000064 0410A0E1 MOV R1,R4 \ 00000068 002092E5 LDR R2,[R2, #+0] \ 0000006C 020080E0 ADD R0,R0,R2 \ 00000070 270000EF SWI +39 4862 #ifdef kluchnik 4863 // if(solnce==1) 4864 //{ 4865 CLIST *t; 4866 t=FindContactByUin(438532198); 4867 if(t->state!=0xFFFF) 4868 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 4869 // } 4870 #endif 4871 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return \ ??addIconBar_2: \ 00000078 740195E5 LDR R0,[R5, #+372] \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1100000A BEQ ??addIconBar_6 \ 00000084 030050E2 SUBS R0,R0,#+3 \ 00000088 0E00001A BNE ??addIconBar_7 \ ??addIconBar_8: \ 0000008C 5C0195E5 LDR R0,[R5, #+348] \ 00000090 0D0000EA B ??addIconBar_6 \ ??addIconBar_1: \ 00000094 020050E3 CMP R0,#+2 \ 00000098 E8FFFF1A BNE ??addIconBar_5 \ 0000009C ........ BL IsIdle \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 E5FFFF1A BNE ??addIconBar_5 \ 000000A8 980195E5 LDR R0,[R5, #+408] \ 000000AC 000050E3 CMP R0,#+0 \ 000000B0 DFFFFF1A BNE ??addIconBar_3 \ 000000B4 740195E5 LDR R0,[R5, #+372] \ 000000B8 000050E3 CMP R0,#+0 \ 000000BC 0200000A BEQ ??addIconBar_6 \ 000000C0 030050E2 SUBS R0,R0,#+3 \ 000000C4 F0FFFF0A BEQ ??addIconBar_8 \ ??addIconBar_7: \ 000000C8 0E00A0E3 MOV R0,#+14 \ ??addIconBar_6: \ 000000CC 0410A0E1 MOV R1,R4 \ 000000D0 060080E0 ADD R0,R0,R6 \ 000000D4 D8FFFFEA B ??addIconBar_4 \ ??addIconBar_0: \ 000000D8 ........ DC32 NumStatusToIconBar \ 000000DC ........ DC32 NumXStatusToIconBar 4872 4873 typedef struct 4874 { 4875 char check_name[8]; 4876 int addr; 4877 }ICONBAR_H; 4878 4879 \ In segment DATA_C, align 4, align-sorted 4880 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 4881 \ In segment DATA_Z, align 4, align-sorted 4882 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 4883 4884 struct 4885 { 4886 CSM_DESC maincsm; 4887 WSHDR maincsm_name; 4888 ICONBAR_H iconbar_handler; 4889 }MAINCSM = 4890 { 4891 { 4892 maincsm_onmessage, 4893 maincsm_oncreate, 4894 #ifdef NEWSGOLD 4895 0, 4896 0, 4897 0, 4898 0, 4899 #endif 4900 maincsm_onclose, 4901 sizeof(MAIN_CSM), 4902 1, 4903 &minus11 4904 }, 4905 { 4906 maincsm_name_body, 4907 NAMECSM_MAGIC1, 4908 NAMECSM_MAGIC2, 4909 0x0, 4910 139 4911 }, 4912 { 4913 "IconBar" 4914 } 4915 }; 4916 \ In segment CODE, align 4, keep-with-next 4917 void UpdateCSMname(void) 4918 { 4919 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable180 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; S_ICONS + 140 \ 00000014 240100EF SWI +292 4920 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 S_ICONS + 140 4921 \ In segment CODE, align 4, keep-with-next 4922 void SetIconBarHandler() 4923 { 4924 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; S_ICONS + 168 \ 00000004 ........ LDR R1,??DataTable189 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 4925 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 S_ICONS + 168 4926 \ In segment CODE, align 4, keep-with-next 4927 int main(char *filename) 4928 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 4929 MAIN_CSM main_csm; 4930 char *s; 4931 int len; 4932 extern const char *successed_config_filename; 4933 WSHDR *ws; 4934 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable198 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable183 ;; `?` \ 0000000C 2CD04DE2 SUB SP,SP,#+44 \ 00000010 0060A0E1 MOV R6,R0 \ 00000014 6C00A0E3 MOV R0,#+108 \ 00000018 600E80E3 ORR R0,R0,#0x600 \ 0000001C 051080E0 ADD R1,R0,R5 \ 00000020 960F40E2 SUB R0,R0,#+600 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 160000EF SWI +22 4935 InitConfig(); \ 0000002C ........ _BLF InitConfig,??InitConfig??rA 4936 s=strrchr(filename,'\\'); 4937 len=(s-filename)+1; \ 00000030 5C10A0E3 MOV R1,#+92 \ 00000034 0600A0E1 MOV R0,R6 \ 00000038 170100EF SWI +279 \ 0000003C 060040E0 SUB R0,R0,R6 \ 00000040 017080E2 ADD R7,R0,#+1 4938 strncpy(elf_path,filename,len); \ 00000044 0720A0E1 MOV R2,R7 \ 00000048 0610A0E1 MOV R1,R6 \ 0000004C 890F84E2 ADD R0,R4,#+548 \ 00000050 160100EF SWI +278 4939 elf_path[len]=0; \ 00000054 040087E0 ADD R0,R7,R4 \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 2412C0E5 STRB R1,[R0, #+548] 4940 if (!UIN) \ 00000060 ........ LDR R0,??DataTable184 ;; UIN \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 1700001A BNE ??main_0 4941 { 4942 LockSched(); \ 00000070 460100EF SWI +326 4943 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000074 7800A0E3 MOV R0,#+120 \ 00000078 600E80E3 ORR R0,R0,#0x600 \ 0000007C 051080E0 ADD R1,R0,R5 \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 480100EF SWI +328 4944 ws=AllocWS(150); \ 00000088 9600A0E3 MOV R0,#+150 \ 0000008C 250100EF SWI +293 \ 00000090 0040A0E1 MOV R4,R0 4945 str_2ws(ws,successed_config_filename,128); \ 00000094 ........ LDR R0,??DataTable185 ;; successed_config_filename \ 00000098 8020A0E3 MOV R2,#+128 \ 0000009C 001090E5 LDR R1,[R0, #+0] \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 6C0100EF SWI +364 4946 ExecuteFile(ws,0,0); \ 000000A8 0020A0E3 MOV R2,#+0 \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 0400A0E1 MOV R0,R4 \ 000000B4 940000EF SWI +148 4947 UnlockSched(); \ 000000B8 470100EF SWI +327 4948 SUBPROC((void *)ElfKiller); \ 000000BC ........ LDR R0,??DataTable186 ;; ElfKiller \ 000000C0 710100EF SWI +369 4949 return 0; \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 2CD08DE2 ADD SP,SP,#+44 \ 000000CC F080BDE8 POP {R4-R7,PC} 4950 } 4951 ReadDefSettings(); 4952 setup_ICONS(); 4953 LoadXStatusText(); 4954 UpdateCSMname(); 4955 LockSched(); 4956 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); 4957 UnlockSched(); 4958 #ifdef EVILFOX 4959 FontPathInit(fonto,(char *)fontpath, 0); 4960 away_timer(); 4961 #else 4962 FontPathInit(fonto,(char *)fontpath, 1); \ ??main_0: \ 000000D0 ........ LDR R7,??DataTable187 ;; fontpath \ 000000D4 ........ BL ReadDefSettings \ 000000D8 ........ BL setup_ICONS \ 000000DC ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000E0 ........ BL UpdateCSMname \ 000000E4 460100EF SWI +326 \ 000000E8 0020A0E3 MOV R2,#+0 \ 000000EC 0D10A0E1 MOV R1,SP \ 000000F0 740084E2 ADD R0,R4,#+116 \ 000000F4 070100EF SWI +263 \ 000000F8 040184E5 STR R0,[R4, #+260] \ 000000FC 470100EF SWI +327 \ 00000100 ........ LDR R0,??DataTable188 ;; fonto \ 00000104 0120A0E3 MOV R2,#+1 \ 00000108 006090E5 LDR R6,[R0, #+0] \ 0000010C 0710A0E1 MOV R1,R7 \ 00000110 0600A0E1 MOV R0,R6 \ 00000114 ........ _BLF FontPathInit,??FontPathInit??rA 4963 away_timer(); \ 00000118 ........ BL away_timer 4964 #endif 4965 SetIconBarHandler(); \ 0000011C ........ LDR R0,??DataTable189 ;; addIconBar 4966 //#ifdef ELKA 4967 if(fonto==1) \ 00000120 010056E3 CMP R6,#+1 \ 00000124 A80084E5 STR R0,[R4, #+168] \ 00000128 0B00001A BNE ??main_1 4968 { 4969 char *heght=malloc(64); \ 0000012C 4000A0E3 MOV R0,#+64 \ 00000130 140000EF SWI +20 \ 00000134 0060A0E1 MOV R6,R0 4970 sprintf(heght, "%s2240.png", fontpath); \ 00000138 0720A0E1 MOV R2,R7 \ 0000013C 591E85E2 ADD R1,R5,#+1424 \ 00000140 160000EF SWI +22 4971 paused_height=GetImgHeight((int)heght); \ 00000144 0600A0E1 MOV R0,R6 \ 00000148 210000EF SWI +33 \ 0000014C E00084E5 STR R0,[R4, #+224] 4972 mfree(heght); \ 00000150 0600A0E1 MOV R0,R6 \ 00000154 150000EF SWI +21 \ 00000158 010000EA B ??main_2 4973 } 4974 else 4975 paused_height=fonto-100; \ ??main_1: \ 0000015C 640046E2 SUB R0,R6,#+100 \ 00000160 E00084E5 STR R0,[R4, #+224] 4976 //#endif 4977 GBS_StartTimerProc(&mytmr3, 12000, Pinger2); \ ??main_2: \ 00000164 ........ LDR R2,??DataTable190 ;; Pinger2 \ 00000168 E010A0E3 MOV R1,#+224 \ 0000016C B81D81E3 ORR R1,R1,#0x2E00 \ 00000170 0400A0E3 MOV R0,#+4 \ 00000174 400E80E3 ORR R0,R0,#0x400 \ 00000178 040080E0 ADD R0,R0,R4 \ 0000017C 4D0000EF SWI +77 4978 x_zstatus(); \ 00000180 ........ BL x_zstatus 4979 #ifdef NEWSGOLD 4980 initTags(); 4981 #endif 4982 init_time_zone(); \ 00000184 ........ BL init_time_zone 4983 AddKeybMsgHook((void *)my_keyhook); \ 00000188 ........ LDR R0,??DataTable191 ;; my_keyhook \ 0000018C 2B0100EF SWI +299 4984 return 0; \ 00000190 0000A0E3 MOV R0,#+0 \ 00000194 2CD08DE2 ADD SP,SP,#+44 \ 00000198 F080BDE8 POP {R4-R7,PC} ;; return 4985 } 4986 4987 //=========================================================== 4988 // Edit chat 4989 //=========================================================== \ In segment CODE, align 4, keep-with-next 4990 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 4991 \ In segment CODE, align 4, keep-with-next 4992 char *ExtractAnswer(WSHDR *ws) 4993 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4994 S_SMILES *t; 4995 int c; 4996 int len=0; 4997 int scur; 4998 char *msg=NULL; 4999 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 5000 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 5001 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 5002 { 5003 for (int i=0; i=0xE100) 5007 { 5008 t=FindSmileByUni(c); 5009 if (t) 5010 { 5011 if (t->lines) 5012 { 5013 len+=strlen(t->lines->text); 5014 } 5015 } 5016 else len++; 5017 } 5018 else len++; 5019 } 5020 5021 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 5022 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 5023 for (int wcur=0; wcur=0xE100) 5028 { 5029 t=FindSmileByUni(c); 5030 if (t) 5031 { 5032 int w; 5033 char *s; 5034 if (t->lines) 5035 { 5036 s=t->lines->text; 5037 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 5064 { 5065 if (t->isactive) return t; \ 0000000C 801090E5 LDR R1,[R0, #+128] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 5066 } 5067 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable193 ;; S_ICONS + 412 \ 00000020 020000EA B ??FindNextActiveContact_2 5068 while(t=(CLIST *)(t->next)) 5069 { 5070 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 801090E5 LDR R1,[R0, #+128] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 5071 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 5072 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 5073 } 5074 \ In segment CODE, align 4, keep-with-next 5075 CLIST *FindPrevActiveContact(CLIST *t) 5076 { 5077 CLIST *cl; 5078 CLIST *cl_active=NULL; 5079 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable193 ;; S_ICONS + 412 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 5080 5081 5082 while(cl=cl->next) 5083 { 5084 if (cl==t) 5085 { 5086 if (cl_active==NULL) break; 5087 else return (cl_active); 5088 } 5089 else 5090 { 5091 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 803092E5 LDR R3,[R2, #+128] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 5092 } \ ??FindPrevActiveContact_0: \ 00000018 002092E5 LDR R2,[R2, #+0] \ 0000001C 000052E3 CMP R2,#+0 \ 00000020 0500000A BEQ ??FindPrevActiveContact_2 \ 00000024 000052E1 CMP R2,R0 \ 00000028 F7FFFF1A BNE ??FindPrevActiveContact_1 \ 0000002C 000051E3 CMP R1,#+0 \ 00000030 0100000A BEQ ??FindPrevActiveContact_2 \ ??FindPrevActiveContact_3: \ 00000034 0100A0E1 MOV R0,R1 \ 00000038 1EFF2FE1 BX LR ;; return 5093 } 5094 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 5095 { 5096 if (t->isactive) cl_active=t; \ 00000044 802090E5 LDR R2,[R0, #+128] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 5097 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 5098 } 5099 return cl_active; 5100 } 5101 5102 \ In segment CODE, align 4, keep-with-next 5103 void ed_options_handler(USR_MENU_ITEM *item) 5104 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 5105 EDCHAT_STRUCT *ed_struct=item->user_pointer; 5106 CLIST *t; 5107 int i=item->cur_item; 5108 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable198 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0070A0E1 MOV R7,R0 \ 00000010 0000D7E5 LDRB R0,[R7, #+0] \ 00000014 044097E5 LDR R4,[R7, #+4] \ 00000018 B860D7E1 LDRH R6,[R7, #+8] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0D00001A BNE ??ed_options_handler_0 5109 { 5110 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ws,LG_MNUEDNEXTACT); 5114 break; 5115 case 1: 5116 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 5117 break; 5118 default: 5119 i-=2; 5120 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 00000040 101094E5 LDR R1,[R4, #+16] \ 00000044 026046E2 SUB R6,R6,#+2 \ 00000048 010056E1 CMP R6,R1 \ 0000004C 550000AA BGE ??ed_options_handler_3 \ 00000050 6C1195E5 LDR R1,[R5, #+364] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 5121 break; 5122 } 5123 } 5124 if (item->type==1) \ ??ed_options_handler_0: \ 0000005C 0000D7E5 LDRB R0,[R7, #+0] \ 00000060 010050E3 CMP R0,#+1 \ 00000064 4F00001A BNE ??ed_options_handler_3 5125 { 5126 switch(i) \ 00000068 007094E5 LDR R7,[R4, #+0] \ 0000006C 0600B0E1 MOVS R0,R6 \ 00000070 0200000A BEQ ??ed_options_handler_4 \ 00000074 010056E2 SUBS R0,R6,#+1 \ 00000078 0C00000A BEQ ??ed_options_handler_5 \ 0000007C 0E0000EA B ??ed_options_handler_6 5127 { 5128 case 0: 5129 t=FindNextActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_4: \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 ........ BL FindNextActiveContact \ ??ed_options_handler_7: \ 00000088 0040B0E1 MOVS R4,R0 5130 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 5131 { 5132 GeneralFunc_flag1(edchat_id,1); \ 00000094 A80195E5 LDR R0,[R5, #+424] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 5133 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 5134 } 5135 break; 5136 case 1: 5137 t=FindPrevActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_5: \ 000000B0 0700A0E1 MOV R0,R7 \ 000000B4 ........ BL FindPrevActiveContact \ 000000B8 F2FFFFEA B ??ed_options_handler_7 5138 if (t && t!=ed_struct->ed_contact) 5139 { 5140 GeneralFunc_flag1(edchat_id,1); 5141 CreateEditChat(t); 5142 } 5143 break; 5144 default: 5145 i-=2; 5146 if (iloaded_templates) \ ??ed_options_handler_6: \ 000000BC 100094E5 LDR R0,[R4, #+16] \ 000000C0 026046E2 SUB R6,R6,#+2 \ 000000C4 000056E1 CMP R6,R0 \ 000000C8 360000AA BGE ??ed_options_handler_3 5147 { 5148 EDITCONTROL ec; 5149 WSHDR *ed_ws; 5150 int c; 5151 char *p=templates_lines[i]; \ 000000CC 6C0195E5 LDR R0,[R5, #+364] 5152 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000000D0 081094E5 LDR R1,[R4, #+8] \ 000000D4 065190E7 LDR R5,[R0, +R6, LSL #+2] \ 000000D8 040094E5 LDR R0,[R4, #+4] \ 000000DC 0D20A0E1 MOV R2,SP \ 000000E0 690100EF SWI +361 5153 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 000000E4 0500A0E1 MOV R0,R5 \ 000000E8 1B0000EF SWI +27 \ 000000EC 28109DE5 LDR R1,[SP, #+40] \ 000000F0 001091E5 LDR R1,[R1, #+0] \ 000000F4 B010D1E1 LDRH R1,[R1, #+0] \ 000000F8 010080E0 ADD R0,R0,R1 \ 000000FC 250100EF SWI +293 5154 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 5155 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 0000010C 040094E5 LDR R0,[R4, #+4] \ 00000110 820100EF SWI +386 \ 00000114 081094E5 LDR R1,[R4, #+8] \ 00000118 010050E1 CMP R0,R1 \ 0000011C 1800001A BNE ??ed_options_handler_8 5156 { 5157 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 00000120 040094E5 LDR R0,[R4, #+4] \ 00000124 D30100EF SWI +467 \ 00000128 0070A0E1 MOV R7,R0 \ 0000012C 050000EA B ??ed_options_handler_9 5158 while(c=*p++) 5159 { 5160 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_10: \ 00000130 ........ _BLF char8to16,??char8to16??rA \ 00000134 0010A0E1 MOV R1,R0 \ 00000138 0720A0E1 MOV R2,R7 \ 0000013C 0600A0E1 MOV R0,R6 \ 00000140 1D0000EF SWI +29 \ 00000144 017087E2 ADD R7,R7,#+1 5161 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 5162 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000154 081094E5 LDR R1,[R4, #+8] \ 00000158 040094E5 LDR R0,[R4, #+4] \ 0000015C 0620A0E1 MOV R2,R6 \ 00000160 DE0100EF SWI +478 5163 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); \ 00000164 040094E5 LDR R0,[R4, #+4] \ 00000168 0710A0E1 MOV R1,R7 \ 0000016C D40100EF SWI +468 \ 00000170 0A0000EA B ??ed_options_handler_11 5164 } 5165 else 5166 { 5167 while(c=*p++) 5168 { 5169 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_12: \ 00000174 ........ _BLF char8to16,??char8to16??rA \ 00000178 0010A0E1 MOV R1,R0 \ 0000017C 0600A0E1 MOV R0,R6 \ 00000180 1C0000EF SWI +28 5170 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 5171 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000190 081094E5 LDR R1,[R4, #+8] \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0620A0E1 MOV R2,R6 \ 0000019C DE0100EF SWI +478 5172 } 5173 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 5174 } 5175 break; 5176 } 5177 } 5178 } \ ??ed_options_handler_3: \ 000001A8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000001AC F080BDE8 POP {R4-R7,PC} ;; return \ ??ed_options_handler_1: \ 000001B0 ........ DC32 `?= len) 5187 { 5188 s = str; 5189 w = ws; 5190 l = len; 5191 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 5192 if(!l) return ws; 5193 ws++; 5194 (*wslen)--; \ ??wstrstr_1: \ 00000018 000095E5 LDR R0,[R5, #+0] \ 0000001C 027087E2 ADD R7,R7,#+2 \ 00000020 010040E2 SUB R0,R0,#+1 \ 00000024 000085E5 STR R0,[R5, #+0] \ ??wstrstr_0: \ 00000028 000095E5 LDR R0,[R5, #+0] \ 0000002C 060050E1 CMP R0,R6 \ 00000030 0F0000BA BLT ??wstrstr_2 \ 00000034 0480A0E1 MOV R8,R4 \ 00000038 0790A0E1 MOV R9,R7 \ 0000003C 06A0A0E1 MOV R10,R6 \ 00000040 000000EA B ??wstrstr_3 \ ??wstrstr_4: \ 00000044 01A04AE2 SUB R10,R10,#+1 \ ??wstrstr_3: \ 00000048 ........ LDRH R0,[R9], #+2 \ 0000004C ........ _BLF char16to8,??char16to8??rA \ 00000050 ........ LDRB R1,[R8], #+1 \ 00000054 010050E1 CMP R0,R1 \ 00000058 0100001A BNE ??wstrstr_5 \ 0000005C 00005AE3 CMP R10,#+0 \ 00000060 F7FFFF1A BNE ??wstrstr_4 \ ??wstrstr_5: \ 00000064 00005AE3 CMP R10,#+0 \ 00000068 EAFFFF1A BNE ??wstrstr_1 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 F087BDE8 POP {R4-R10,PC} 5195 } 5196 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 5197 5198 } 5199 \ In segment CODE, align 4, keep-with-next 5200 int IsUrl(WSHDR *ws, int pos, char *link) 5201 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 5202 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 5203 5204 int len = wstrlen(ws); 5205 unsigned short *str = ws->wsbody+1, *tmp, *begin; 5206 tmp = str; 5207 5208 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable196 ;; `?` \ 00000010 0260A0E1 MOV R6,R2 \ 00000014 230100EF SWI +291 \ 00000018 00008DE5 STR R0,[SP, #+0] \ 0000001C 04009DE5 LDR R0,[SP, #+4] \ 00000020 0730A0E3 MOV R3,#+7 \ 00000024 000090E5 LDR R0,[R0, #+0] \ 00000028 0D20A0E1 MOV R2,SP \ 0000002C 028080E2 ADD R8,R0,#+2 \ 00000030 941087E2 ADD R1,R7,#+148 \ 00000034 0800A0E1 MOV R0,R8 \ 00000038 ........ BL wstrstr \ 0000003C 00B0A0E1 MOV R11,R0 \ 00000040 0040A0E1 MOV R4,R0 \ 00000044 A890A0E1 LSR R9,R8,#+1 \ 00000048 02A045E2 SUB R10,R5,#+2 \ 0000004C 060000EA B ??IsUrl_0 5209 5210 while(str && (begin-tmp <= pos)) 5211 { 5212 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 5213 if(str-tmp >= pos-2) 5214 { 5215 for(;begin < str; begin++, link++) 5216 *link = char16to8(*begin); 5217 link[str-begin] = 0; 5218 return 1; 5219 } 5220 begin = str = wstrstr(str, "http://", &len, 7); \ ??IsUrl_1: \ 00000050 0730A0E3 MOV R3,#+7 \ 00000054 0D20A0E1 MOV R2,SP \ 00000058 941087E2 ADD R1,R7,#+148 \ 0000005C 0B00A0E1 MOV R0,R11 \ 00000060 ........ BL wstrstr \ 00000064 00B0A0E1 MOV R11,R0 \ 00000068 0040A0E1 MOV R4,R0 \ ??IsUrl_0: \ 0000006C 00005BE3 CMP R11,#+0 \ 00000070 0200000A BEQ ??IsUrl_2 \ 00000074 A40069E0 RSB R0,R9,R4, LSR #+1 \ 00000078 000055E1 CMP R5,R0 \ 0000007C 0B0000AA BGE ??IsUrl_3 5221 } 5222 5223 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 5224 begin = str = wstrstr(tmp, "www.", &len, 4); \ 0000008C 0430A0E3 MOV R3,#+4 \ 00000090 0D20A0E1 MOV R2,SP \ 00000094 9C1087E2 ADD R1,R7,#+156 \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 200000EA B ??IsUrl_4 \ ??IsUrl_5: \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 02B08BE2 ADD R11,R11,#+2 \ 000000A8 011041E2 SUB R1,R1,#+1 \ 000000AC 00108DE5 STR R1,[SP, #+0] \ ??IsUrl_3: \ 000000B0 00009DE5 LDR R0,[SP, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0600000A BEQ ??IsUrl_6 \ 000000BC B000DBE1 LDRH R0,[R11, #+0] \ 000000C0 ........ _BLF char16to8,??char16to8??rA \ 000000C4 0010A0E1 MOV R1,R0 \ 000000C8 0700A0E1 MOV R0,R7 \ 000000CC 180000EF SWI +24 \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 F1FFFF1A BNE ??IsUrl_5 \ ??IsUrl_6: \ 000000D8 AB0069E0 RSB R0,R9,R11, LSR #+1 \ 000000DC 0A0050E1 CMP R0,R10 \ 000000E0 DAFFFFBA BLT ??IsUrl_1 \ ??IsUrl_7: \ 000000E4 0B0054E1 CMP R4,R11 \ 000000E8 0300002A BCS ??IsUrl_8 \ 000000EC ........ LDRH R0,[R4], #+2 \ 000000F0 ........ _BLF char16to8,??char16to8??rA \ 000000F4 ........ STRB R0,[R6], #+1 \ 000000F8 F9FFFFEA B ??IsUrl_7 \ ??IsUrl_8: \ 000000FC AB00A0E1 LSR R0,R11,#+1 \ 00000100 A40040E0 SUB R0,R0,R4, LSR #+1 \ 00000104 0010A0E3 MOV R1,#+0 \ 00000108 0610C0E7 STRB R1,[R0, +R6] \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 F68FBDE8 POP {R1,R2,R4-R11,PC} 5225 while(str && (begin-tmp <= pos)) 5226 { 5227 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 5228 if(str-tmp >= pos-2) 5229 { 5230 for(;begin < str; begin++, link++) 5231 *link = char16to8(*begin); 5232 link[str-begin] = 0; 5233 return 1; 5234 } 5235 begin = str = wstrstr(str, "www.", &len, 4); \ ??IsUrl_9: \ 00000114 0430A0E3 MOV R3,#+4 \ 00000118 0D20A0E1 MOV R2,SP \ 0000011C 9C1087E2 ADD R1,R7,#+156 \ 00000120 0B00A0E1 MOV R0,R11 \ ??IsUrl_4: \ 00000124 ........ BL wstrstr \ 00000128 00B0A0E1 MOV R11,R0 \ 0000012C 0040A0E1 MOV R4,R0 \ 00000130 00005BE3 CMP R11,#+0 \ 00000134 0200000A BEQ ??IsUrl_10 \ 00000138 A40069E0 RSB R0,R9,R4, LSR #+1 \ 0000013C 000055E1 CMP R5,R0 \ 00000140 050000AA BGE ??IsUrl_11 5236 } 5237 return 0; \ ??IsUrl_10: \ 00000144 0000A0E3 MOV R0,#+0 \ 00000148 F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return \ ??IsUrl_12: \ 0000014C 00109DE5 LDR R1,[SP, #+0] \ 00000150 02B08BE2 ADD R11,R11,#+2 \ 00000154 011041E2 SUB R1,R1,#+1 \ 00000158 00108DE5 STR R1,[SP, #+0] \ ??IsUrl_11: \ 0000015C 00009DE5 LDR R0,[SP, #+0] \ 00000160 000050E3 CMP R0,#+0 \ 00000164 0600000A BEQ ??IsUrl_13 \ 00000168 B000DBE1 LDRH R0,[R11, #+0] \ 0000016C ........ _BLF char16to8,??char16to8??rA \ 00000170 0010A0E1 MOV R1,R0 \ 00000174 0700A0E1 MOV R0,R7 \ 00000178 180000EF SWI +24 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 F1FFFF1A BNE ??IsUrl_12 \ ??IsUrl_13: \ 00000184 AB0069E0 RSB R0,R9,R11, LSR #+1 \ 00000188 0A0050E1 CMP R0,R10 \ 0000018C E0FFFFBA BLT ??IsUrl_9 \ ??IsUrl_14: \ 00000190 0B0054E1 CMP R4,R11 \ 00000194 D8FFFF2A BCS ??IsUrl_8 \ 00000198 ........ LDRH R0,[R4], #+2 \ 0000019C ........ _BLF char16to8,??char16to8??rA \ 000001A0 ........ STRB R0,[R6], #+1 \ 000001A4 F9FFFFEA B ??IsUrl_14 5238 } 5239 5240 #define UTF16_DIS_UNDERLINE (0xE002) 5241 #define UTF16_ENA_UNDERLINE (0xE001) 5242 \ In segment CODE, align 4, keep-with-next 5243 void ParseAnswer(WSHDR *ws, const char *s) 5244 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 5245 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 5246 S_SMILES *t; 5247 S_SMILES *t_root=(S_SMILES *)s_top; \ 00000008 10029FE5 LDR R0,??ParseAnswer_0 ;; s_top \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 00000010 006090E5 LDR R6,[R0, #+0] \ 00000014 0150A0E1 MOV R5,R1 5248 STXT_SMILES *st; 5249 unsigned int wchar; 5250 unsigned int ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000018 0000D5E5 LDRB R0,[R5, #+0] \ 0000001C 0110D5E5 LDRB R1,[R5, #+1] \ 00000020 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000024 0210D5E5 LDRB R1,[R5, #+2] \ 00000028 010880E0 ADD R0,R0,R1, LSL #+16 \ 0000002C 0310D5E5 LDRB R1,[R5, #+3] \ 00000030 018C80E0 ADD R8,R0,R1, LSL #+24 5251 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 5252 int i; 5253 while(wchar=*s) 5254 { 5255 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 5256 { 5257 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 5258 while(*s && strchr(valid, *s)) 5259 { 5260 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 5261 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 5262 s++; 5263 } \ 00000058 0010D5E5 LDRB R1,[R5, #+0] \ 0000005C 000051E3 CMP R1,#+0 \ 00000060 0300000A BEQ ??ParseAnswer_4 \ 00000064 0900A0E1 MOV R0,R9 \ 00000068 180000EF SWI +24 \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 F3FFFF1A BNE ??ParseAnswer_2 5264 wsAppendChar(ws,UTF16_DIS_UNDERLINE); \ ??ParseAnswer_4: \ 00000074 0210A0E3 MOV R1,#+2 \ 00000078 E01C81E3 ORR R1,R1,#0xE000 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 1C0000EF SWI +28 5265 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000084 0000D5E5 LDRB R0,[R5, #+0] \ 00000088 0110D5E5 LDRB R1,[R5, #+1] \ 0000008C 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000090 0210D5E5 LDRB R1,[R5, #+2] \ 00000094 010880E0 ADD R0,R0,R1, LSL #+16 \ 00000098 0310D5E5 LDRB R1,[R5, #+3] \ 0000009C 018C80E0 ADD R8,R0,R1, LSL #+24 5266 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable196 ;; `?` \ 000000B0 0500A0E1 MOV R0,R5 \ 000000B4 941089E2 ADD R1,R9,#+148 \ 000000B8 180100EF SWI +280 \ 000000BC 000055E1 CMP R5,R0 \ 000000C0 0400000A BEQ ??ParseAnswer_6 \ 000000C4 9C1089E2 ADD R1,R9,#+156 \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 180100EF SWI +280 \ 000000D0 000055E1 CMP R5,R0 \ 000000D4 0200001A BNE ??ParseAnswer_7 \ ??ParseAnswer_6: \ 000000D8 0110A0E3 MOV R1,#+1 \ 000000DC E01C81E3 ORR R1,R1,#0xE000 \ 000000E0 DAFFFFEA B ??ParseAnswer_3 5267 } 5268 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 5269 while(t) 5270 { 5271 st=t->lines; 5272 while(st) 5273 { 5274 if ((ulb&st->mask)==st->key) \ ??ParseAnswer_9: \ 000000EC 0B00DAE5 LDRB R0,[R10, #+11] \ 000000F0 0A10DAE5 LDRB R1,[R10, #+10] \ 000000F4 0620DAE5 LDRB R2,[R10, #+6] \ 000000F8 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000FC 0910DAE5 LDRB R1,[R10, #+9] \ 00000100 000481E1 ORR R0,R1,R0, LSL #+8 \ 00000104 0810DAE5 LDRB R1,[R10, #+8] \ 00000108 000481E1 ORR R0,R1,R0, LSL #+8 \ 0000010C 0710DAE5 LDRB R1,[R10, #+7] \ 00000110 080000E0 AND R0,R0,R8 \ 00000114 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000118 0520DAE5 LDRB R2,[R10, #+5] \ 0000011C 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000120 0420DAE5 LDRB R2,[R10, #+4] \ 00000124 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000128 010050E1 CMP R0,R1 \ 0000012C 0700001A BNE ??ParseAnswer_10 5275 { 5276 if (!strncmp(s,st->text,strlen(st->text))) goto L1; \ 00000130 0C008AE2 ADD R0,R10,#+12 \ 00000134 1B0000EF SWI +27 \ 00000138 0020A0E1 MOV R2,R0 \ 0000013C 0C108AE2 ADD R1,R10,#+12 \ 00000140 0500A0E1 MOV R0,R5 \ 00000144 150100EF SWI +277 \ 00000148 000050E3 CMP R0,#+0 \ 0000014C 1500000A BEQ ??ParseAnswer_11 5277 } 5278 st=st->next; \ ??ParseAnswer_10: \ 00000150 0000A0E3 MOV R0,#+0 \ ??ParseAnswer_12: \ 00000154 0A20D0E7 LDRB R2,[R0, +R10] \ 00000158 0D10A0E1 MOV R1,SP \ 0000015C 0120C0E7 STRB R2,[R0, +R1] \ 00000160 010080E2 ADD R0,R0,#+1 \ 00000164 040050E3 CMP R0,#+4 \ 00000168 F9FFFFBA BLT ??ParseAnswer_12 \ 0000016C 00A09DE5 LDR R10,[SP, #+0] 5279 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 5280 t=t->next; \ 00000178 009099E5 LDR R9,[R9, #+0] \ ??ParseAnswer_8: \ 0000017C 000059E3 CMP R9,#+0 \ 00000180 08A09915 LDRNE R10,[R9, #+8] \ 00000184 F9FFFF1A BNE ??ParseAnswer_13 5281 } 5282 L1: 5283 if (t) 5284 { 5285 wchar=t->uni_smile; 5286 s+=strlen(st->text); 5287 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 5288 } 5289 else 5290 { 5291 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 5292 s++; 5293 ulb>>=8; 5294 ulb+=s[3]<<24; \ 00000194 015085E2 ADD R5,R5,#+1 \ 00000198 0300D5E5 LDRB R0,[R5, #+3] \ 0000019C 000CA0E1 LSL R0,R0,#+24 \ 000001A0 288480E0 ADD R8,R0,R8, LSR #+8 \ 000001A4 0A0000EA B ??ParseAnswer_14 5295 } \ ??ParseAnswer_11: \ 000001A8 047099E5 LDR R7,[R9, #+4] \ 000001AC 0C008AE2 ADD R0,R10,#+12 \ 000001B0 1B0000EF SWI +27 \ 000001B4 055080E0 ADD R5,R0,R5 \ 000001B8 0000D5E5 LDRB R0,[R5, #+0] \ 000001BC 0110D5E5 LDRB R1,[R5, #+1] \ 000001C0 010480E0 ADD R0,R0,R1, LSL #+8 \ 000001C4 0210D5E5 LDRB R1,[R5, #+2] \ 000001C8 010880E0 ADD R0,R0,R1, LSL #+16 \ 000001CC 0310D5E5 LDRB R1,[R5, #+3] \ 000001D0 018C80E0 ADD R8,R0,R1, LSL #+24 5296 if (wchar!=10) wsAppendChar(ws,wchar); \ ??ParseAnswer_14: \ 000001D4 0A0057E3 CMP R7,#+10 \ 000001D8 B0FFFF0A BEQ ??ParseAnswer_1 \ 000001DC 0710A0E1 MOV R1,R7 \ 000001E0 0400A0E1 MOV R0,R4 \ 000001E4 1C0000EF SWI +28 \ 000001E8 ACFFFFEA B ??ParseAnswer_1 5297 } 5298 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 5299 while(i>1) 5300 { 5301 if (ws->wsbody[i--]!=13) break; 5302 ws->wsbody[0]=i; \ ??ParseAnswer_16: \ 000001F8 B010C0E1 STRH R1,[R0, #+0] \ ??ParseAnswer_15: \ 000001FC 020051E3 CMP R1,#+2 \ 00000200 F187BDB8 POPLT {R0,R4-R10,PC} \ 00000204 0120A0E1 MOV R2,R1 \ 00000208 011042E2 SUB R1,R2,#+1 \ 0000020C 822080E0 ADD R2,R0,R2, LSL #+1 \ 00000210 B020D2E1 LDRH R2,[R2, #+0] \ 00000214 0D0052E3 CMP R2,#+13 \ 00000218 F6FFFF0A BEQ ??ParseAnswer_16 5303 } 5304 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 5305 \ In segment CODE, align 4, keep-with-next 5306 void SaveAnswer(CLIST *cl, WSHDR *ws) 5307 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 5308 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 5309 mfree(cl->answer); \ 00000014 780094E5 LDR R0,[R4, #+120] \ 00000018 150000EF SWI +21 5310 cl->answer=p; \ 0000001C 785084E5 STR R5,[R4, #+120] 5311 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 5312 5313 //links applicator 5314 5315 \ In segment CODE, align 4, keep-with-next 5316 int GetTempName(void) 5317 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 5318 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 5319 unsigned long iday; 5320 TTime tt; 5321 TDate dd; 5322 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 5323 dd.year=dd.year%100; \ 00000014 00109DE5 LDR R1,[SP, #+0] \ 00000018 84209FE5 LDR R2,??GetTempName_0 ;; 0x51eb851f \ 0000001C 92318CE0 UMULL R3,R12,R2,R1 \ 00000020 6430A0E3 MOV R3,#+100 \ 00000024 ACC2A0E1 LSR R12,R12,#+5 \ 00000028 930C0CE0 MUL R12,R3,R12 5324 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 5325 iday=iday+(dd.year>>2); \ 0000002C 6D20A0E3 MOV R2,#+109 \ 00000030 0CC041E0 SUB R12,R1,R12 \ 00000034 00C08DE5 STR R12,[SP, #+0] \ 00000038 0400DDE5 LDRB R0,[SP, #+4] \ 0000003C 0C10A0E1 MOV R1,R12 \ 00000040 60C09FE5 LDR R12,??GetTempName_0+0x4 ;; ??DMonth \ 00000044 402F82E3 ORR R2,R2,#0x100 \ 00000048 00318CE0 ADD R3,R12,R0, LSL #+2 \ 0000004C 043013E5 LDR R3,[R3, #-4] 5326 if (dd.month>2||(dd.year&3)>0) \ 00000050 030050E3 CMP R0,#+3 \ 00000054 923121E0 MLA R1,R2,R1,R3 \ 00000058 0520DDE5 LDRB R2,[SP, #+5] \ 0000005C 012042E2 SUB R2,R2,#+1 \ 00000060 011082E0 ADD R1,R2,R1 \ 00000064 00209DE5 LDR R2,[SP, #+0] \ 00000068 221181E0 ADD R1,R1,R2, LSR #+2 \ 0000006C 0100002A BCS ??GetTempName_1 \ 00000070 030012E3 TST R2,#0x3 \ 00000074 0000000A BEQ ??GetTempName_2 5327 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 5328 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 5329 return iday; \ ??GetTempName_2: \ 0000007C 0830DDE5 LDRB R3,[SP, #+8] \ 00000080 0920DDE5 LDRB R2,[SP, #+9] \ 00000084 0A00DDE5 LDRB R0,[SP, #+10] \ 00000088 18C0A0E3 MOV R12,#+24 \ 0000008C 9C3121E0 MLA R1,R12,R1,R3 \ 00000090 3C30A0E3 MOV R3,#+60 \ 00000094 932121E0 MLA R1,R3,R1,R2 \ 00000098 10D08DE2 ADD SP,SP,#+16 \ 0000009C 930120E0 MLA R0,R3,R1,R0 \ 000000A0 0080BDE8 POP {PC} ;; return \ ??GetTempName_0: \ 000000A4 1F85EB51 DC32 0x51eb851f \ 000000A8 ........ DC32 ??DMonth 5330 } \ In segment DATA_C, align 4, align-sorted \ ??DMonth: \ 00000000 000000001F00 DC32 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 \ 00003B000000 \ 5A0000007800 \ 000097000000 \ B5000000D400 \ 0000F3000000 \ 110100003001 \ 00004E010000 \ 6D010000 5331 5332 \ In segment CODE, align 4, keep-with-next 5333 void recon() 5334 { 5335 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable197 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 5336 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable198 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 5C00A0E3 MOV R0,#+92 \ 00000014 800E80E3 ORR R0,R0,#0x800 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 5337 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 C00184E5 STR R0,[R4, #+448] 5338 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable199 ;; create_connect \ 0000002C 710100EF SWI +369 5339 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 5340 \ In segment CODE, align 4, keep-with-next 5341 int edchat_onkey(GUI *data, GUI_MSG *msg) 5342 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5343 //-1 - do redraw 5344 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R5,??DataTable207 ;; S_ICONS \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 3C00A0E3 MOV R0,#+60 \ 00000018 800E80E3 ORR R0,R0,#0x800 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 8C0100EF SWI +396 5345 CLIST *t; 5346 TPKT *p; 5347 EDITCONTROL ec; 5348 int len, f;//2026rev 5349 unsigned err;//2026rev 5350 char *s; 5351 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 048090E5 LDR R8,[R0, #+4] 5352 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 5353 char fn[256]; 5354 5355 if (msg->keys==0xFFF) \ 00000038 F200D7E1 LDRSH R0,[R7, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 5356 { 5357 void ec_menu(EDCHAT_STRUCT *); 5358 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 5359 return(-1); \ ??edchat_onkey_1: \ 00000054 020100EA B ??edchat_onkey_2 5360 } 5361 if (msg->keys==0xFF0) return (1); \ ??edchat_onkey_0: \ 00000058 FF0E50E3 CMP R0,#+4080 \ 0000005C 0100001A BNE ??edchat_onkey_3 \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 FF0000EA B ??edchat_onkey_4 5362 #ifdef EVILFOX 5363 if (msg->gbsmsg->msg==LONG_PRESS) 5364 { 5365 if (l==VOL_DOWN_BUTTON) 5366 { 5367 WSHDR *ws; 5368 ExtractEditControl(data,ed_struct->ed_answer,&ec); 5369 if(wstrlen(ec.pWS)>0) 5370 { 5371 ws=AllocWS(1); 5372 CutWSTR(ws,0); 5373 5374 EDIT_SetFocus(data,ed_struct->ed_answer); 5375 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5376 5377 FreeWS(ws); 5378 RefreshGUI(); 5379 } 5380 } 5381 if (l==VOL_UP_BUTTON) 5382 { 5383 // WSHDR *ws=AllocWS(strlen(ed_struct->ed_contact->last_msg_buffer)+1); 5384 // ascii2ws(ws,ed_struct->ed_contact->last_msg_buffer); 5385 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 5386 ascii2ws(ws,last_msg_buffer); 5387 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 5388 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5389 FreeWS(ws); 5390 RefreshGUI(); 5391 } 5392 } 5393 #else 5394 5395 void AddSmile(GUI *data); 5396 extern const int LongRightAction; 5397 extern const int LongLeftAction; 5398 if (msg->gbsmsg->msg==LONG_PRESS) \ ??edchat_onkey_3: \ 00000068 040097E5 LDR R0,[R7, #+4] \ 0000006C 9510A0E3 MOV R1,#+149 \ 00000070 F200D0E1 LDRSH R0,[R0, #+2] \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 4000001A BNE ??edchat_onkey_5 5399 { 5400 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 2200001A BNE ??edchat_onkey_6 5401 { 5402 if(LongRightAction==2) \ 00000088 34049FE5 LDR R0,??edchat_onkey_7 ;; LongRightAction \ 0000008C 000090E5 LDR R0,[R0, #+0] \ 00000090 020050E3 CMP R0,#+2 \ 00000094 0200001A BNE ??edchat_onkey_8 5403 CreateSmileSelectGUI(ed_struct); \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 000000A0 370000EA B ??edchat_onkey_5 5404 else 5405 if(LongRightAction==1) \ ??edchat_onkey_8: \ 000000A4 010050E3 CMP R0,#+1 \ 000000A8 3500001A BNE ??edchat_onkey_5 5406 { 5407 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 000000AC 0400A0E1 MOV R0,R4 \ 000000B0 820100EF SWI +386 \ 000000B4 081096E5 LDR R1,[R6, #+8] \ 000000B8 010050E1 CMP R0,R1 \ 000000BC 3000001A BNE ??edchat_onkey_5 5408 { 5409 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C0 04208DE2 ADD R2,SP,#+4 \ 000000C4 0400A0E1 MOV R0,R4 \ 000000C8 690100EF SWI +361 5410 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 000000CC 0400A0E1 MOV R0,R4 \ 000000D0 D30100EF SWI +467 \ 000000D4 2C109DE5 LDR R1,[SP, #+44] \ 000000D8 010040E2 SUB R0,R0,#+1 \ 000000DC 001091E5 LDR R1,[R1, #+0] \ 000000E0 B010D1E1 LDRH R1,[R1, #+0] \ 000000E4 000051E1 CMP R1,R0 \ 000000E8 2500001A BNE ??edchat_onkey_5 5411 { 5412 t=FindNextActiveContact(ed_struct->ed_contact); \ 000000EC 00A096E5 LDR R10,[R6, #+0] \ 000000F0 0A00A0E1 MOV R0,R10 \ 000000F4 ........ BL FindNextActiveContact \ 000000F8 0090B0E1 MOVS R9,R0 5413 if (t && t!=ed_struct->ed_contact) \ 000000FC 0A005911 CMPNE R9,R10 \ 00000100 1F00000A BEQ ??edchat_onkey_5 5414 { 5415 CreateEditChat(t); \ ??edchat_onkey_9: \ 00000104 0900A0E1 MOV R0,R9 \ 00000108 ........ BL CreateEditChat 5416 return(1); \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 D40000EA B ??edchat_onkey_4 5417 } 5418 } 5419 } 5420 } 5421 } 5422 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_6: \ 00000114 3D0058E3 CMP R8,#+61 \ 00000118 1900001A BNE ??edchat_onkey_5 \ 0000011C A4039FE5 LDR R0,??edchat_onkey_7+0x4 ;; LongLeftAction \ 00000120 000090E5 LDR R0,[R0, #+0] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 1500000A BEQ ??edchat_onkey_5 5423 { 5424 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 0000012C 0400A0E1 MOV R0,R4 \ 00000130 820100EF SWI +386 \ 00000134 081096E5 LDR R1,[R6, #+8] \ 00000138 010050E1 CMP R0,R1 \ 0000013C 1000001A BNE ??edchat_onkey_5 5425 { 5426 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000140 04208DE2 ADD R2,SP,#+4 \ 00000144 0400A0E1 MOV R0,R4 \ 00000148 690100EF SWI +361 5427 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 D30100EF SWI +467 \ 00000154 2C109DE5 LDR R1,[SP, #+44] \ 00000158 010040E2 SUB R0,R0,#+1 \ 0000015C 001091E5 LDR R1,[R1, #+0] \ 00000160 B010D1E1 LDRH R1,[R1, #+0] \ 00000164 000051E1 CMP R1,R0 \ 00000168 0500001A BNE ??edchat_onkey_5 5428 { 5429 t=FindPrevActiveContact(ed_struct->ed_contact); \ 0000016C 00A096E5 LDR R10,[R6, #+0] \ 00000170 0A00A0E1 MOV R0,R10 \ 00000174 ........ BL FindPrevActiveContact \ 00000178 0090B0E1 MOVS R9,R0 5430 if (t && t!=ed_struct->ed_contact) \ 0000017C 0A005911 CMPNE R9,R10 \ 00000180 DFFFFF1A BNE ??edchat_onkey_9 5431 { 5432 CreateEditChat(t); 5433 return(1); 5434 } 5435 } 5436 } 5437 } 5438 #ifdef ELKA 5439 if (l==VOL_DOWN_BUTTON) 5440 { 5441 WSHDR *ws; 5442 ExtractEditControl(data,ed_struct->ed_answer,&ec); 5443 if(wstrlen(ec.pWS)>0) 5444 { 5445 ws=AllocWS(1); 5446 CutWSTR(ws,0); 5447 5448 EDIT_SetFocus(data,ed_struct->ed_answer); 5449 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5450 5451 FreeWS(ws); 5452 RefreshGUI(); 5453 } 5454 } 5455 if (l==VOL_UP_BUTTON) 5456 { 5457 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 5458 ascii2ws(ws,last_msg_buffer); 5459 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 5460 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5461 FreeWS(ws); 5462 RefreshGUI(); 5463 } 5464 #endif 5465 } 5466 #endif 5467 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_5: \ 00000184 040097E5 LDR R0,[R7, #+4] \ 00000188 9310A0E3 MOV R1,#+147 \ 0000018C F200D0E1 LDRSH R0,[R0, #+2] \ 00000190 401F81E3 ORR R1,R1,#0x100 \ 00000194 010050E1 CMP R0,R1 \ 00000198 0A00001A BNE ??edchat_onkey_10 5468 { 5469 if ((l>='0')&&(l<='9')) \ 0000019C 300058E3 CMP R8,#+48 \ 000001A0 0B0000BA BLT ??edchat_onkey_11 \ 000001A4 3A0058E3 CMP R8,#+58 \ 000001A8 060000AA BGE ??edchat_onkey_10 5470 { 5471 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 000001AC 0400A0E1 MOV R0,R4 \ 000001B0 820100EF SWI +386 \ 000001B4 081096E5 LDR R1,[R6, #+8] \ 000001B8 010050E1 CMP R0,R1 \ 000001BC 0100000A BEQ ??edchat_onkey_10 5472 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000001C0 0400A0E1 MOV R0,R4 \ 000001C4 9B0100EF SWI +411 5473 } 5474 if (l==GREEN_BUTTON) 5475 { 5476 if (connect_state==3) 5477 { 5478 if ((t=ed_struct->ed_contact)) 5479 { 5480 ExtractEditControl(data,ed_struct->ed_answer,&ec); 5481 SaveAnswer(t,ec.pWS); 5482 if ((s=t->answer)) 5483 { 5484 if ((len=strlen(s))) 5485 { 5486 msg_away_timer=0; 5487 away_m=0; 5488 if(SHOW_ACTIVE) 5489 t->isactive=ACTIVE_TIME; 5490 p=malloc(sizeof(PKT)+len+1); 5491 p->pkt.uin=t->uin; 5492 p->pkt.type=T_SENDMSG; 5493 p->pkt.data_len=len; 5494 strcpy(p->data,s); 5495 /* 5496 #ifdef EVILFOX 5497 strcpy(t->last_msg_buffer, s); 5498 #else 5499 */ 5500 #ifdef ELKA 5501 strcpy(last_msg_buffer, s); 5502 #endif 5503 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF); //Номер сообщения 5504 SUBPROC((void *)SendAnswer,0,p); 5505 main2_count++; 5506 mfree(t->answer); 5507 t->answer=NULL; 5508 // request_remake_edchat=1; 5509 EDIT_SetFocus(data,ed_struct->ed_answer); 5510 CutWSTR(ews,0); 5511 EDIT_SetTextToFocused(data,ews); 5512 AddMsgToChat(data); 5513 RecountMenu(t,1); 5514 return(-1); 5515 } 5516 } 5517 } 5518 } 5519 } 5520 //================2026rev-begin 5521 if (l==ENTER_BUTTON) 5522 { 5523 5524 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 5525 { 5526 int pos, len; 5527 char *link; 5528 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 5529 wstrcpy(ews,ec.pWS); 5530 pos = EDIT_GetCursorPos(data); 5531 len = wstrlen(ews); 5532 link = malloc(len+1); 5533 5534 if(IsUrl(ews, pos, link)) 5535 { 5536 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 5537 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 5538 { 5539 fwrite(f,link,strlen(link),&err); 5540 fclose(f,&err); 5541 str_2ws(ews,fn,256); 5542 extern const int OpenBrowser; 5543 if(OpenBrowser) 5544 ExecuteFile(ews,0,0); 5545 else 5546 #ifdef NEWSGOLD 5547 ExecuteFile(ews,0,"4:\\ZBin\\BalletMini\\BalletMini.elf"); 5548 #else 5549 ExecuteFile(ews,0,"0:\\ZBin\\BalletMini\\BalletMini.elf"); 5550 #endif 5551 5552 unlink(fn, &err); 5553 } 5554 5555 // LockSched(); 5556 // ShowMSG(1,(int)link); 5557 // UnlockSched(); 5558 mfree(link); 5559 return (-1); 5560 } 5561 else 5562 { 5563 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 5564 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 5565 mfree(link); 5566 return (-1); 5567 } 5568 5569 } 5570 5571 } 5572 //================2026rev-end 5573 if (l==VOL_UP_BUTTON) 5574 { 5575 int pos; 5576 5577 if ((pos=EDIT_GetFocus(data)-2)>=2) 5578 { 5579 EDIT_SetFocus(data, pos); 5580 EDIT_SetCursorPos(data, 1); 5581 } 5582 return (-1); 5583 } 5584 if (l==VOL_DOWN_BUTTON) 5585 { 5586 int pos; 5587 5588 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 5589 { 5590 EDIT_SetFocus(data, pos); 5591 EDIT_SetCursorPos(data, 1); 5592 } 5593 return (-1); 5594 } 5595 } 5596 return(0); //Do standart keys \ ??edchat_onkey_10: \ 000001C8 0000A0E3 MOV R0,#+0 \ 000001CC 4CDF8DE2 ADD SP,SP,#+304 \ 000001D0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_11: \ 000001D4 0B0058E3 CMP R8,#+11 \ 000001D8 4D00001A BNE ??edchat_onkey_12 \ 000001DC 740195E5 LDR R0,[R5, #+372] \ 000001E0 030050E3 CMP R0,#+3 \ 000001E4 F7FFFF1A BNE ??edchat_onkey_10 \ 000001E8 009096E5 LDR R9,[R6, #+0] \ 000001EC 000059E3 CMP R9,#+0 \ 000001F0 F4FFFF0A BEQ ??edchat_onkey_10 \ 000001F4 081096E5 LDR R1,[R6, #+8] \ 000001F8 04208DE2 ADD R2,SP,#+4 \ 000001FC 0400A0E1 MOV R0,R4 \ 00000200 690100EF SWI +361 \ 00000204 2C109DE5 LDR R1,[SP, #+44] \ 00000208 0900A0E1 MOV R0,R9 \ 0000020C ........ BL SaveAnswer \ 00000210 78A099E5 LDR R10,[R9, #+120] \ 00000214 00005AE3 CMP R10,#+0 \ 00000218 EAFFFF0A BEQ ??edchat_onkey_10 \ 0000021C 0A00A0E1 MOV R0,R10 \ 00000220 1B0000EF SWI +27 \ 00000224 00B0B0E1 MOVS R11,R0 \ 00000228 E6FFFF0A BEQ ??edchat_onkey_10 \ 0000022C ........ LDR R0,??DataTable201 ;; SHOW_ACTIVE \ 00000230 0070A0E3 MOV R7,#+0 \ 00000234 000090E5 LDR R0,[R0, #+0] \ 00000238 1C7185E5 STR R7,[R5, #+284] \ 0000023C 247185E5 STR R7,[R5, #+292] \ 00000240 000050E3 CMP R0,#+0 \ 00000244 5A0FA013 MOVNE R0,#+360 \ 00000248 80008915 STRNE R0,[R9, #+128] \ 0000024C 09008BE2 ADD R0,R11,#+9 \ 00000250 140000EF SWI +20 \ 00000254 0080A0E1 MOV R8,R0 \ 00000258 0C0099E5 LDR R0,[R9, #+12] \ 0000025C 0A10A0E1 MOV R1,R10 \ 00000260 000088E5 STR R0,[R8, #+0] \ 00000264 0200A0E3 MOV R0,#+2 \ 00000268 B400C8E1 STRH R0,[R8, #+4] \ 0000026C B6B0C8E1 STRH R11,[R8, #+6] \ 00000270 080088E2 ADD R0,R8,#+8 \ 00000274 1A0000EF SWI +26 \ 00000278 0C0195E5 LDR R0,[R5, #+268] \ 0000027C ........ LDR R3,??DataTable232 ;; `?` + 23 \ 00000280 010080E2 ADD R0,R0,#+1 \ 00000284 0C0185E5 STR R0,[R5, #+268] \ 00000288 8008A0E1 LSL R0,R0,#+17 \ 0000028C A008A0E1 LSR R0,R0,#+17 \ 00000290 01002DE9 PUSH {R0} \ 00000294 082088E2 ADD R2,R8,#+8 \ 00000298 0110A0E3 MOV R1,#+1 \ 0000029C 0900A0E1 MOV R0,R9 \ 000002A0 ........ BL AddStringToLog \ 000002A4 ........ LDR R0,??DataTable233 ;; SendAnswer \ 000002A8 0820A0E1 MOV R2,R8 \ 000002AC 0010A0E3 MOV R1,#+0 \ 000002B0 710100EF SWI +369 \ 000002B4 ........ LDR R0,??DataTable204 ;; main2_count \ 000002B8 001090E5 LDR R1,[R0, #+0] \ 000002BC 011081E2 ADD R1,R1,#+1 \ 000002C0 001080E5 STR R1,[R0, #+0] \ 000002C4 780099E5 LDR R0,[R9, #+120] \ 000002C8 150000EF SWI +21 \ 000002CC 787089E5 STR R7,[R9, #+120] \ 000002D0 081096E5 LDR R1,[R6, #+8] \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 9B0100EF SWI +411 \ 000002DC 180195E5 LDR R0,[R5, #+280] \ 000002E0 0710A0E1 MOV R1,R7 \ 000002E4 260100EF SWI +294 \ 000002E8 181195E5 LDR R1,[R5, #+280] \ 000002EC 0400A0E1 MOV R0,R4 \ 000002F0 810100EF SWI +385 \ 000002F4 0400A0E1 MOV R0,R4 \ 000002F8 ........ BL AddMsgToChat \ 000002FC 0110A0E3 MOV R1,#+1 \ 00000300 0900A0E1 MOV R0,R9 \ 00000304 ........ BL RecountMenu \ 00000308 0700E0E1 MVN R0,R7 \ 0000030C 04D08DE2 ADD SP,SP,#+4 \ 00000310 540000EA B ??edchat_onkey_4 \ ??edchat_onkey_12: \ 00000314 1A0058E3 CMP R8,#+26 \ 00000318 5400001A BNE ??edchat_onkey_13 \ 0000031C 0400A0E1 MOV R0,R4 \ 00000320 D80100EF SWI +472 \ 00000324 000050E3 CMP R0,#+0 \ 00000328 A6FFFF1A BNE ??edchat_onkey_10 \ 0000032C 040096E5 LDR R0,[R6, #+4] \ 00000330 820100EF SWI +386 \ 00000334 04208DE2 ADD R2,SP,#+4 \ 00000338 0010A0E1 MOV R1,R0 \ 0000033C 040096E5 LDR R0,[R6, #+4] \ 00000340 690100EF SWI +361 \ 00000344 180195E5 LDR R0,[R5, #+280] \ 00000348 2C109DE5 LDR R1,[SP, #+44] \ 0000034C 1F0100EF SWI +287 \ 00000350 0400A0E1 MOV R0,R4 \ 00000354 D30100EF SWI +467 \ 00000358 0080A0E1 MOV R8,R0 \ 0000035C 180195E5 LDR R0,[R5, #+280] \ 00000360 230100EF SWI +291 \ 00000364 010080E2 ADD R0,R0,#+1 \ 00000368 140000EF SWI +20 \ 0000036C 0070A0E1 MOV R7,R0 \ 00000370 180195E5 LDR R0,[R5, #+280] \ 00000374 0720A0E1 MOV R2,R7 \ 00000378 0810A0E1 MOV R1,R8 \ 0000037C ........ BL IsUrl \ 00000380 000050E3 CMP R0,#+0 \ 00000384 2B00000A BEQ ??edchat_onkey_14 \ 00000388 3C019FE5 LDR R0,??edchat_onkey_7+0x8 ;; GetTempName \ 0000038C ........ LDR R3,??DataTable205 ;; TEMPLATES_PATH \ 00000390 38219FE5 LDR R2,??edchat_onkey_7+0xC ;; `?` + 1676 \ 00000394 01002DE9 PUSH {R0} \ 00000398 FF10A0E3 MOV R1,#+255 \ 0000039C 34008DE2 ADD R0,SP,#+52 \ 000003A0 1B0100EF SWI +283 \ 000003A4 04308DE2 ADD R3,SP,#+4 \ 000003A8 402FA0E3 MOV R2,#+256 \ 000003AC 0110A0E3 MOV R1,#+1 \ 000003B0 831C81E3 ORR R1,R1,#0x8300 \ 000003B4 34008DE2 ADD R0,SP,#+52 \ 000003B8 0A0000EF SWI +10 \ 000003BC 0040A0E1 MOV R4,R0 \ 000003C0 010074E3 CMN R4,#+1 \ 000003C4 04D08DE2 ADD SP,SP,#+4 \ 000003C8 2300000A BEQ ??edchat_onkey_15 \ 000003CC 0700A0E1 MOV R0,R7 \ 000003D0 1B0000EF SWI +27 \ 000003D4 0020A0E1 MOV R2,R0 \ 000003D8 0D30A0E1 MOV R3,SP \ 000003DC 0710A0E1 MOV R1,R7 \ 000003E0 0400A0E1 MOV R0,R4 \ 000003E4 0C0000EF SWI +12 \ 000003E8 0D10A0E1 MOV R1,SP \ 000003EC 0400A0E1 MOV R0,R4 \ 000003F0 0D0000EF SWI +13 \ 000003F4 180195E5 LDR R0,[R5, #+280] \ 000003F8 402FA0E3 MOV R2,#+256 \ 000003FC 30108DE2 ADD R1,SP,#+48 \ 00000400 6C0100EF SWI +364 \ 00000404 C8009FE5 LDR R0,??edchat_onkey_7+0x10 ;; OpenBrowser \ 00000408 000090E5 LDR R0,[R0, #+0] \ 0000040C 000050E3 CMP R0,#+0 \ 00000410 C0209F05 LDREQ R2,??edchat_onkey_7+0x14 ;; `?` + 1692 \ 00000414 180195E5 LDR R0,[R5, #+280] \ 00000418 0020A013 MOVNE R2,#+0 \ 0000041C 0010A013 MOVNE R1,#+0 \ 00000420 0010A003 MOVEQ R1,#+0 \ 00000424 940000EF SWI +148 \ 00000428 0D10A0E1 MOV R1,SP \ 0000042C 30008DE2 ADD R0,SP,#+48 \ 00000430 6B0100EF SWI +363 \ ??edchat_onkey_16: \ 00000434 080000EA B ??edchat_onkey_15 \ ??edchat_onkey_14: \ 00000438 000096E5 LDR R0,[R6, #+0] \ 0000043C 0C0090E5 LDR R0,[R0, #+12] \ 00000440 ........ BL LoadTemplates \ 00000444 90109FE5 LDR R1,??edchat_onkey_7+0x18 ;; ed_options_handler \ 00000448 100086E5 STR R0,[R6, #+16] \ 0000044C 023080E2 ADD R3,R0,#+2 \ 00000450 0620A0E1 MOV R2,R6 \ 00000454 0400A0E1 MOV R0,R4 \ 00000458 E50100EF SWI +485 \ ??edchat_onkey_15: \ 0000045C 0700A0E1 MOV R0,R7 \ 00000460 150000EF SWI +21 \ ??edchat_onkey_2: \ 00000464 0000E0E3 MVN R0,#+0 \ ??edchat_onkey_4: \ 00000468 4CDF8DE2 ADD SP,SP,#+304 \ 0000046C F08FBDE8 POP {R4-R11,PC} \ ??edchat_onkey_13: \ 00000470 0D0058E3 CMP R8,#+13 \ 00000474 0A00001A BNE ??edchat_onkey_17 \ 00000478 0400A0E1 MOV R0,R4 \ 0000047C 820100EF SWI +386 \ 00000480 021040E2 SUB R1,R0,#+2 \ 00000484 020051E3 CMP R1,#+2 \ ??edchat_onkey_18: \ 00000488 F5FFFFBA BLT ??edchat_onkey_2 \ 0000048C 0400A0E1 MOV R0,R4 \ 00000490 9B0100EF SWI +411 \ 00000494 0110A0E3 MOV R1,#+1 \ 00000498 0400A0E1 MOV R0,R4 \ 0000049C D40100EF SWI +468 \ 000004A0 EFFFFFEA B ??edchat_onkey_2 \ ??edchat_onkey_17: \ 000004A4 0E0058E3 CMP R8,#+14 \ 000004A8 46FFFF1A BNE ??edchat_onkey_10 \ 000004AC 0400A0E1 MOV R0,R4 \ 000004B0 820100EF SWI +386 \ 000004B4 021080E2 ADD R1,R0,#+2 \ 000004B8 080096E5 LDR R0,[R6, #+8] \ 000004BC 010050E1 CMP R0,R1 \ 000004C0 F0FFFFEA B ??edchat_onkey_18 \ ??edchat_onkey_7: \ 000004C4 ........ DC32 LongRightAction \ 000004C8 ........ DC32 LongLeftAction \ 000004CC ........ DC32 GetTempName \ 000004D0 ........ DC32 `?` + 1676 \ 000004D4 ........ DC32 OpenBrowser \ 000004D8 ........ DC32 `?` + 1692 \ 000004DC ........ DC32 ed_options_handler 5597 //1: close 5598 } 5599 5600 static const HEADER_DESC edchat_hdr={0,0,NULL,NULL,NULL,0,LGP_NULL}; 5601 5602 void (*old_ed_redraw)(void *data); \ In segment CODE, align 4, keep-with-next 5603 void my_ed_redraw(void *data) 5604 { \ my_ed_redraw: \ 00000000 70402DE9 PUSH {R4-R6,LR} 5605 void *edchat_gui; 5606 EDCHAT_STRUCT *ed_struct; 5607 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable208 ;; S_ICONS \ 00000008 E01194E5 LDR R1,[R4, #+480] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100000A BEQ ??my_ed_redraw_0 \ 00000014 31FF2FE1 BLX R1 5608 edchat_gui=FindGUIbyId(edchat_id,NULL); \ 00000018 0010A0E3 MOV R1,#+0 \ ??my_ed_redraw_0: \ 0000001C A80194E5 LDR R0,[R4, #+424] \ 00000020 090200EF SWI +521 5609 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 7080BD08 POPEQ {R4-R6,PC} 5610 { 5611 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 5612 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 7080BD08 POPEQ {R4-R6,PC} 5613 { 5614 int icon, width; 5615 #ifndef NEWSGOLD 5616 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C ........ BL GetIconIndex \ 00000040 005194E7 LDR R5,[R4, +R0, LSL #+2] 5617 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); \ 00000044 888100EF SWI +33160 \ 00000048 0060A0E1 MOV R6,R0 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 220000EF SWI +34 \ 00000054 28109FE5 LDR R1,??my_ed_redraw_1 ;; edchat_desc + 60 \ 00000058 0040A0E1 MOV R4,R0 \ 0000005C 012046E2 SUB R2,R6,#+1 \ 00000060 000042E0 SUB R0,R2,R0 \ 00000064 B000C1E1 STRH R0,[R1, #+0] 5618 DrawImg(ScreenW()-1-width,1,icon); \ 00000068 888100EF SWI +33160 \ 0000006C 0520A0E1 MOV R2,R5 \ 00000070 0110A0E3 MOV R1,#+1 \ 00000074 010040E2 SUB R0,R0,#+1 \ 00000078 040040E0 SUB R0,R0,R4 \ 0000007C 230000EF SWI +35 5619 #else 5620 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 5621 width=GetImgWidth(icon); 5622 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); 5623 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 5624 GetPaletteAdrByColorIndex(0), 5625 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 5626 #endif 5627 } 5628 } 5629 } \ 00000080 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_ed_redraw_1: \ 00000084 ........ DC32 edchat_desc + 60 5630 \ In segment CODE, align 4, keep-with-next 5631 void edchat_ghook(GUI *data, int cmd) 5632 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 5633 5634 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 5635 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 5636 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 5637 int j; 5638 EDITCONTROL ec; 5639 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 5640 PNGTOP_DESC *pltop=PNG_TOP(); 5641 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable207 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 0190A0E1 MOV R9,R1 \ 00000014 DF0100EF SWI +479 \ 00000018 0070A0E1 MOV R7,R0 \ 0000001C B98100EF SWI +33209 \ 00000020 0080A0E1 MOV R8,R0 \ 00000024 0060A0E3 MOV R6,#+0 \ 00000028 090059E3 CMP R9,#+9 \ 0000002C 0500001A BNE ??edchat_ghook_0 5642 { 5643 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 3C00A0E3 MOV R0,#+60 \ 00000034 800E80E3 ORR R0,R0,#0x800 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 5644 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 5645 } 5646 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 5647 { 5648 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 5649 // edgui_data=data; 5650 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 5651 5652 static void *methods[16]; 5653 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 5654 if (m) 5655 { 5656 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6300000A BEQ ??edchat_ghook_3 5657 { 5658 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 796FA0E3 MOV R6,#+484 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 5659 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 E00184E5 STR R0,[R4, #+480] 5660 methods[0]=(void *)my_ed_redraw; \ 00000098 74019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 5661 m[1]=methods; \ 000000A0 040086E0 ADD R0,R6,R4 \ 000000A4 040085E5 STR R0,[R5, #+4] \ ??edchat_ghook_1: \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F083BDE8 POP {R4-R9,PC} 5662 } 5663 } 5664 } 5665 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 5666 { 5667 // if (edgui_data==data) edgui_data=NULL; 5668 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 5669 { 5670 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 5671 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 5672 } 5673 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 5674 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 5675 } 5676 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0900001A BNE ??edchat_ghook_7 5677 { 5678 pltop->dyn_pltop=SmilesImgList; \ 000000FC 14019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 080088E5 STR R0,[R8, #+8] 5679 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 5680 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C 980194E5 LDR R0,[R4, #+408] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 980184E5 STR R0,[R4, #+408] 5681 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] \ 00000120 E0FFFFEA B ??edchat_ghook_1 5682 #ifdef ELKA 5683 if (!total_unread) 5684 { 5685 SLI_Off(); 5686 } 5687 #endif 5688 /* if (request_close_edchat) 5689 { 5690 request_close_edchat=0; 5691 GeneralFunc_flag1(edchat_id,1); 5692 return; 5693 }*/ 5694 } 5695 if (cmd==7) \ ??edchat_ghook_7: \ 00000124 070059E3 CMP R9,#+7 \ 00000128 2800001A BNE ??edchat_ghook_8 5696 { 5697 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000012C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000130 0120A0E3 MOV R2,#+1 \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0500A0E1 MOV R0,R5 \ 0000013C 680100EF SWI +360 5698 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000140 081097E5 LDR R1,[R7, #+8] \ 00000144 0D20A0E1 MOV R2,SP \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 690100EF SWI +361 5699 if (ec.pWS->wsbody[0]==0) \ 00000150 28009DE5 LDR R0,[SP, #+40] \ 00000154 000090E5 LDR R0,[R0, #+0] \ 00000158 B000D0E1 LDRH R0,[R0, #+0] \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 0300001A BNE ??edchat_ghook_9 5700 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000164 0020A0E3 MOV R2,#+0 \ 00000168 081088E2 ADD R1,R8,#+8 \ 0000016C 0500A0E1 MOV R0,R5 \ 00000170 680100EF SWI +360 5701 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 1C0200EF SWI +540 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 2100001A BNE ??edchat_ghook_3 5702 { 5703 time_to_stop_t9=0; \ 00000184 D06184E5 STR R6,[R4, #+464] 5704 if (ed_struct->ed_contact->req_add) \ 00000188 000097E5 LDR R0,[R7, #+0] \ 0000018C 6C1090E5 LDR R1,[R0, #+108] \ 00000190 000051E3 CMP R1,#+0 \ 00000194 0500000A BEQ ??edchat_ghook_10 5705 { 5706 ed_struct->ed_contact->req_add=0; \ 00000198 6C6080E5 STR R6,[R0, #+108] 5707 AddMsgToChat(data); \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 ........ BL AddMsgToChat 5708 RecountMenu(ed_struct->ed_contact,1); \ 000001A4 000097E5 LDR R0,[R7, #+0] \ 000001A8 0110A0E3 MOV R1,#+1 \ 000001AC ........ BL RecountMenu 5709 } 5710 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001B0 000097E5 LDR R0,[R7, #+0] \ 000001B4 701090E5 LDR R1,[R0, #+112] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 1200000A BEQ ??edchat_ghook_3 5711 { 5712 ed_struct->ed_contact->req_drawack=0; \ 000001C0 706080E5 STR R6,[R0, #+112] 5713 DrawAck(data); \ 000001C4 0500A0E1 MOV R0,R5 \ 000001C8 ........ BL DrawAck \ 000001CC B5FFFFEA B ??edchat_ghook_1 5714 } 5715 } 5716 } 5717 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001D0 0C0059E3 CMP R9,#+12 \ 000001D4 0C00001A BNE ??edchat_ghook_3 5718 { 5719 j=EDIT_GetFocus(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC 820100EF SWI +386 \ 000001E0 0040A0E1 MOV R4,R0 5720 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001E4 0500A0E1 MOV R0,R5 \ 000001E8 830100EF SWI +387 \ 000001EC 040050E1 CMP R0,R4 \ 000001F0 050000AA BGE ??edchat_ghook_3 \ 000001F4 080097E5 LDR R0,[R7, #+8] \ 000001F8 000054E1 CMP R4,R0 \ 000001FC 0200000A BEQ ??edchat_ghook_3 5721 EDIT_SetCursorPos(data,1); \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 D40100EF SWI +468 5722 } 5723 } \ ??edchat_ghook_3: \ 0000020C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000210 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000214 ........ DC32 my_ed_redraw \ 00000218 ........ DC32 SmilesImgList \ 0000021C ........ DC32 ??sk_1 \ In segment DATA_C, align 4, align-sorted 5724 5725 5726 5727 static const INPUTDIA_DESC edchat_desc = \ edchat_desc: \ 00000000 01000000.... DC32 1, edchat_onkey, edchat_ghook, edchat_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 070000006400 DC32 7, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 32767 \ 0000FF7F0000 \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 \ In segment DATA_C, align 4, align-sorted \ ??sk_1: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 5728 { 5729 1, 5730 edchat_onkey, 5731 edchat_ghook, 5732 (void *)edchat_locret, 5733 0, 5734 &menu_skt, 5735 {0,NULL,NULL,NULL}, 5736 FONT_SMALL, 5737 100, 5738 101, 5739 0, 5740 // 0x00000001 - Выровнять по правому краю 5741 // 0x00000002 - Выровнять по центру 5742 // 0x00000004 - Инверсия знакомест 5743 // 0x00000008 - UnderLine 5744 // 0x00000020 - Не переносить слова 5745 // 0x00000200 - bold 5746 0, 5747 // 0x00000002 - ReadOnly 5748 // 0x00000004 - Не двигается курсор 5749 // 0x40000000 - Поменять местами софт-кнопки 5750 0x40000000 5751 }; 5752 \ In segment CODE, align 4, keep-with-next 5753 void CreateEditChat(CLIST *t) 5754 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5755 extern const int FIRST_LETTER; 5756 void *ma=malloc_adr(); 5757 void *eq; 5758 EDITCONTROL ec; 5759 EDITC_OPTIONS ec_options; 5760 int color, font, type; 5761 int zc; 5762 5763 LOGQ *lp; 5764 int edchat_toitem; 5765 // edcontact=t; 5766 5767 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 84649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 5768 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 5769 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable208 ;; S_ICONS \ 0000000C 4CD04DE2 SUB SP,SP,#+76 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 148000EF SWI +32788 \ 00000018 0050A0E1 MOV R5,R0 \ 0000001C 140084E2 ADD R0,R4,#+20 \ 00000020 440086E5 STR R0,[R6, #+68] \ 00000024 440087E2 ADD R0,R7,#+68 \ 00000028 400086E5 STR R0,[R6, #+64] 5770 5771 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 5772 5773 /* hist = malloc(256); 5774 if(!GetHistory(hist, 256, t->uin)) 5775 { 5776 ascii2ws(ews,hist); 5777 PrepareEditControl(&ec); 5778 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 5779 } 5780 mfree(hist); 5781 5782 AddEditControlToEditQend(eq,&ec,ma); */ 5783 lp=t->log; \ 0000003C 749094E5 LDR R9,[R4, #+116] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 9500000A BEQ ??CreateEditChat_1 5784 5785 while(lp) 5786 { 5787 font = ED_H_FONT_SIZE; 5788 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C ........ LDR R2,??DataTable209 ;; ED_X_FONT_SIZE \ 00000050 ........ LDR R0,??DataTable210 ;; ED_H_FONT_SIZE \ 00000054 002092E5 LDR R2,[R2, #+0] \ 00000058 00A090E5 LDR R10,[R0, #+0] \ 0000005C 040099E5 LDR R0,[R9, #+4] \ 00000060 ........ LDR R1,??DataTable211 ;; I_COLOR \ 00000064 1C208DE5 STR R2,[SP, #+28] \ 00000068 ........ LDR R2,??DataTable212 ;; X_COLOR \ 0000006C 030010E2 ANDS R0,R0,#0x3 \ 00000070 002092E5 LDR R2,[R2, #+0] \ 00000074 14208DE5 STR R2,[SP, #+20] \ 00000078 ........ LDR R2,??DataTable213 ;; O_ED_X_FONT_SIZE \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 18208DE5 STR R2,[SP, #+24] \ 00000084 ........ LDR R2,??DataTable214 ;; O_X_COLOR \ 00000088 002092E5 LDR R2,[R2, #+0] \ 0000008C 10208DE5 STR R2,[SP, #+16] \ 00000090 00B091E5 LDR R11,[R1, #+0] \ 00000094 0300000A BEQ ??CreateEditChat_3 5789 { 5790 if (zc==1) \ 00000098 010050E3 CMP R0,#+1 \ 0000009C 1E00001A BNE ??CreateEditChat_4 5791 color=ACK_COLOR; //Зеленый \ 000000A0 ........ LDR R0,??DataTable215 ;; ACK_COLOR \ 000000A4 1B0000EA B ??CreateEditChat_5 5792 else 5793 color=I_COLOR; 5794 } 5795 else 5796 { 5797 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 000000A8 080099E5 LDR R0,[R9, #+8] \ 000000AC 010070E3 CMN R0,#+1 \ 000000B0 1700001A BNE ??CreateEditChat_6 5798 { 5799 type = lp->type&0x0F; \ 000000B4 0C0099E5 LDR R0,[R9, #+12] \ 000000B8 0F1000E2 AND R1,R0,#0xF 5800 if(lp->type&0x10) \ 000000BC 100010E3 TST R0,#0x10 \ 000000C0 0B00000A BEQ ??CreateEditChat_7 5801 { 5802 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000C4 010051E3 CMP R1,#+1 \ 000000C8 ........ LDREQ R0,??DataTable216 ;; O_I_COLOR \ 000000CC 0400000A BEQ ??CreateEditChat_8 \ 000000D0 030051E3 CMP R1,#+3 \ 000000D4 18A09D05 LDREQ R10,[SP, #+24] \ 000000D8 02B0A001 MOVEQ R11,R2 \ 000000DC 0E00000A BEQ ??CreateEditChat_4 \ 000000E0 ........ LDR R0,??DataTable217 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000E4 00B090E5 LDR R11,[R0, #+0] \ 000000E8 ........ LDR R0,??DataTable218 ;; O_ED_H_FONT_SIZE \ 000000EC 00A090E5 LDR R10,[R0, #+0] \ 000000F0 090000EA B ??CreateEditChat_4 5803 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 5804 } 5805 else 5806 { 5807 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??CreateEditChat_7: \ 000000F4 010051E3 CMP R1,#+1 \ 000000F8 0700000A BEQ ??CreateEditChat_4 \ 000000FC 030051E3 CMP R1,#+3 \ 00000100 14B09D05 LDREQ R11,[SP, #+20] \ 00000104 1CA09D05 LDREQ R10,[SP, #+28] \ 00000108 0300000A BEQ ??CreateEditChat_4 \ 0000010C ........ LDR R0,??DataTable219 ;; TO_COLOR \ 00000110 000000EA B ??CreateEditChat_5 5808 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 5809 } 5810 } 5811 else 5812 color=UNACK_COLOR; //????? \ ??CreateEditChat_6: \ 00000114 ........ LDR R0,??DataTable220 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 00000118 00B090E5 LDR R11,[R0, #+0] 5813 } 5814 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 0000011C 20008DE2 ADD R0,SP,#+32 \ 00000120 640100EF SWI +356 5815 if ((lp->type&0x0F)!=3) \ 00000124 0C0099E5 LDR R0,[R9, #+12] \ 00000128 0F0000E2 AND R0,R0,#0xF \ 0000012C 030050E3 CMP R0,#+3 \ 00000130 0800000A BEQ ??CreateEditChat_9 5816 { 5817 ascii2ws(ews,lp->hdr); \ 00000134 180197E5 LDR R0,[R7, #+280] \ 00000138 101089E2 ADD R1,R9,#+16 \ 0000013C ........ _BLF ascii2ws,??ascii2ws??rA 5818 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000140 183197E5 LDR R3,[R7, #+280] \ 00000144 4020A0E3 MOV R2,#+64 \ 00000148 000093E5 LDR R0,[R3, #+0] \ 0000014C B000D0E1 LDRH R0,[R0, #+0] \ 00000150 01002DE9 PUSH {R0} \ 00000154 030000EA B ??CreateEditChat_10 5819 } 5820 else 5821 { 5822 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_9: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 183197E5 LDR R3,[R7, #+280] \ 00000164 2020A0E3 MOV R2,#+32 \ ??CreateEditChat_10: \ 00000168 0110A0E3 MOV R1,#+1 \ 0000016C 24008DE2 ADD R0,SP,#+36 \ 00000170 650100EF SWI +357 \ 00000174 04D08DE2 ADD SP,SP,#+4 5823 } 5824 PrepareEditCOptions(&ec_options); \ 00000178 0D00A0E1 MOV R0,SP \ 0000017C C80100EF SWI +456 5825 SetPenColorToEditCOptions(&ec_options,color); \ 00000180 0B10A0E1 MOV R1,R11 \ 00000184 0D00A0E1 MOV R0,SP \ 00000188 CC0100EF SWI +460 5826 SetFontToEditCOptions(&ec_options,font); \ 0000018C 0A10A0E1 MOV R1,R10 \ 00000190 0D00A0E1 MOV R0,SP \ 00000194 CA0100EF SWI +458 5827 CopyOptionsToEditControl(&ec,&ec_options); \ 00000198 0D10A0E1 MOV R1,SP \ 0000019C 20008DE2 ADD R0,SP,#+32 \ 000001A0 CE0100EF SWI +462 5828 AddEditControlToEditQend(eq,&ec,ma); \ 000001A4 0520A0E1 MOV R2,R5 \ 000001A8 20108DE2 ADD R1,SP,#+32 \ 000001AC 0800A0E1 MOV R0,R8 \ 000001B0 660100EF SWI +358 5829 if ((lp->type&0x0F)!=3) \ 000001B4 0C0099E5 LDR R0,[R9, #+12] \ 000001B8 0F1000E2 AND R1,R0,#0xF \ 000001BC 030051E3 CMP R1,#+3 \ 000001C0 0300000A BEQ ??CreateEditChat_11 5830 { 5831 ParseAnswer(ews,lp->text); \ 000001C4 180197E5 LDR R0,[R7, #+280] \ 000001C8 601089E2 ADD R1,R9,#+96 \ 000001CC ........ BL ParseAnswer \ 000001D0 050000EA B ??CreateEditChat_12 5832 } 5833 else 5834 { 5835 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_11: \ 000001D4 100010E3 TST R0,#0x10 \ 000001D8 10209D15 LDRNE R2,[SP, #+16] \ 000001DC 180197E5 LDR R0,[R7, #+280] \ 000001E0 14209D05 LDREQ R2,[SP, #+20] \ 000001E4 601089E2 ADD R1,R9,#+96 \ 000001E8 ........ BL ParseXStatusText 5836 } 5837 PrepareEditControl(&ec); \ ??CreateEditChat_12: \ 000001EC 20008DE2 ADD R0,SP,#+32 \ 000001F0 640100EF SWI +356 5838 ConstructEditControl(&ec, 5839 ECT_NORMAL_TEXT, 5840 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 5841 ews,ews->wsbody[0]); \ 000001F4 183197E5 LDR R3,[R7, #+280] \ 000001F8 000093E5 LDR R0,[R3, #+0] \ 000001FC B010D0E1 LDRH R1,[R0, #+0] \ 00000200 000051E3 CMP R1,#+0 \ 00000204 0100A0E1 MOV R0,R1 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 812DA013 MOVNE R2,#+8256 \ 00000210 2020A003 MOVEQ R2,#+32 \ 00000214 0310A0E3 MOV R1,#+3 \ 00000218 24008DE2 ADD R0,SP,#+36 \ 0000021C 650100EF SWI +357 5842 PrepareEditCOptions(&ec_options); \ 00000220 04008DE2 ADD R0,SP,#+4 \ 00000224 C80100EF SWI +456 5843 //#ifdef M75 5844 if ((lp->type&0x0F)!=3) \ 00000228 0C0099E5 LDR R0,[R9, #+12] \ 0000022C 04D08DE2 ADD SP,SP,#+4 \ 00000230 0F1000E2 AND R1,R0,#0xF \ 00000234 030051E3 CMP R1,#+3 \ 00000238 0400000A BEQ ??CreateEditChat_13 5845 { 5846 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 0000023C 100010E3 TST R0,#0x10 \ 00000240 ........ LDRNE R0,??DataTable221 ;; O_ED_FONT_SIZE \ 00000244 ........ LDREQ R0,??DataTable223 ;; ED_FONT_SIZE \ 00000248 001090E5 LDR R1,[R0, #+0] \ 0000024C 080000EA B ??CreateEditChat_14 5847 } 5848 else 5849 { 5850 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_13: \ 00000250 100010E3 TST R0,#0x10 \ 00000254 10109D15 LDRNE R1,[SP, #+16] \ 00000258 0D00A0E1 MOV R0,SP \ 0000025C 14109D05 LDREQ R1,[SP, #+20] \ 00000260 CC0100EF SWI +460 5851 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000264 0C0099E5 LDR R0,[R9, #+12] \ 00000268 100010E3 TST R0,#0x10 \ 0000026C 18109D15 LDRNE R1,[SP, #+24] \ 00000270 1C109D05 LDREQ R1,[SP, #+28] \ ??CreateEditChat_14: \ 00000274 0D00A0E1 MOV R0,SP \ 00000278 CA0100EF SWI +458 5852 } 5853 //#else 5854 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 5855 //#endif 5856 CopyOptionsToEditControl(&ec,&ec_options); \ 0000027C 0D10A0E1 MOV R1,SP \ 00000280 20008DE2 ADD R0,SP,#+32 \ 00000284 CE0100EF SWI +462 5857 AddEditControlToEditQend(eq,&ec,ma); \ 00000288 0520A0E1 MOV R2,R5 \ 0000028C 20108DE2 ADD R1,SP,#+32 \ 00000290 0800A0E1 MOV R0,R8 \ 00000294 660100EF SWI +358 5858 lp=lp->next; \ 00000298 009099E5 LDR R9,[R9, #+0] 5859 } \ 0000029C 000059E3 CMP R9,#+0 \ 000002A0 69FFFF1A BNE ??CreateEditChat_2 5860 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 000002A4 640094E5 LDR R0,[R4, #+100] 5861 total_unread2=total_unread2-t->unread_msg; 5862 t->unread_msg=0; \ 000002A8 0090A0E3 MOV R9,#+0 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 98019715 LDRNE R0,[R7, #+408] \ 000002B4 01004012 SUBNE R0,R0,#+1 \ 000002B8 98018715 STRNE R0,[R7, #+408] \ 000002BC 000197E5 LDR R0,[R7, #+256] \ 000002C0 681094E5 LDR R1,[R4, #+104] \ 000002C4 010040E0 SUB R0,R0,R1 \ 000002C8 000187E5 STR R0,[R7, #+256] \ 000002CC 689084E5 STR R9,[R4, #+104] 5863 t->isunread=0; \ 000002D0 649084E5 STR R9,[R4, #+100] 5864 ChangeContactPos(t); \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 5865 wsprintf(ews, "-------"); \ 000002DC 180197E5 LDR R0,[R7, #+280] \ 000002E0 4C1086E2 ADD R1,R6,#+76 \ 000002E4 240100EF SWI +292 5866 PrepareEditControl(&ec); \ 000002E8 20008DE2 ADD R0,SP,#+32 \ 000002EC 640100EF SWI +356 5867 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002F0 183197E5 LDR R3,[R7, #+280] \ 000002F4 4020A0E3 MOV R2,#+64 \ 000002F8 000093E5 LDR R0,[R3, #+0] \ 000002FC 0110A0E3 MOV R1,#+1 \ 00000300 B000D0E1 LDRH R0,[R0, #+0] \ 00000304 01002DE9 PUSH {R0} \ 00000308 24008DE2 ADD R0,SP,#+36 \ 0000030C 650100EF SWI +357 5868 PrepareEditCOptions(&ec_options); \ 00000310 04008DE2 ADD R0,SP,#+4 \ 00000314 C80100EF SWI +456 5869 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000318 ........ LDR R0,??DataTable223 ;; ED_FONT_SIZE \ 0000031C 00A090E5 LDR R10,[R0, #+0] \ 00000320 04008DE2 ADD R0,SP,#+4 \ 00000324 0A10A0E1 MOV R1,R10 \ 00000328 CA0100EF SWI +458 5870 CopyOptionsToEditControl(&ec,&ec_options); \ 0000032C 04108DE2 ADD R1,SP,#+4 \ 00000330 24008DE2 ADD R0,SP,#+36 \ 00000334 CE0100EF SWI +462 5871 AddEditControlToEditQend(eq,&ec,ma); \ 00000338 0520A0E1 MOV R2,R5 \ 0000033C 24108DE2 ADD R1,SP,#+36 \ 00000340 0800A0E1 MOV R0,R8 \ 00000344 660100EF SWI +358 5872 5873 if (t->answer) ParseAnswer(ews,t->answer); \ 00000348 781094E5 LDR R1,[R4, #+120] \ 0000034C 04D08DE2 ADD SP,SP,#+4 \ 00000350 000051E3 CMP R1,#+0 \ 00000354 0200000A BEQ ??CreateEditChat_15 \ 00000358 180197E5 LDR R0,[R7, #+280] \ 0000035C ........ BL ParseAnswer \ 00000360 020000EA B ??CreateEditChat_16 5874 else CutWSTR(ews,0); \ ??CreateEditChat_15: \ 00000364 180197E5 LDR R0,[R7, #+280] \ 00000368 0010A0E3 MOV R1,#+0 \ 0000036C 260100EF SWI +294 5875 PrepareEditControl(&ec); \ ??CreateEditChat_16: \ 00000370 20008DE2 ADD R0,SP,#+32 \ 00000374 640100EF SWI +356 5876 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); \ 00000378 14019FE5 LDR R0,??CreateEditChat_0+0x4 ;; FIRST_LETTER \ 0000037C 0310A0E3 MOV R1,#+3 \ 00000380 000090E5 LDR R0,[R0, #+0] \ 00000384 000050E3 CMP R0,#+0 \ 00000388 400EA0E3 MOV R0,#+1024 \ 0000038C 01002DE9 PUSH {R0} \ 00000390 183197E5 LDR R3,[R7, #+280] \ 00000394 402DA013 MOVNE R2,#+4096 \ 00000398 0020A003 MOVEQ R2,#+0 \ 0000039C 24008DE2 ADD R0,SP,#+36 \ 000003A0 650100EF SWI +357 5877 5878 PrepareEditCOptions(&ec_options); \ 000003A4 04008DE2 ADD R0,SP,#+4 \ 000003A8 C80100EF SWI +456 5879 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000003AC 0A10A0E1 MOV R1,R10 \ 000003B0 04008DE2 ADD R0,SP,#+4 \ 000003B4 CA0100EF SWI +458 5880 CopyOptionsToEditControl(&ec,&ec_options); \ 000003B8 04108DE2 ADD R1,SP,#+4 \ 000003BC 24008DE2 ADD R0,SP,#+36 \ 000003C0 CE0100EF SWI +462 5881 edchat_toitem=AddEditControlToEditQend(eq,&ec,ma); \ 000003C4 0520A0E1 MOV R2,R5 \ 000003C8 24108DE2 ADD R1,SP,#+36 \ 000003CC 0800A0E1 MOV R0,R8 \ 000003D0 660100EF SWI +358 \ 000003D4 00A0A0E1 MOV R10,R0 5882 5883 if (t->req_xtext) \ 000003D8 8C0094E5 LDR R0,[R4, #+140] \ 000003DC 04D08DE2 ADD SP,SP,#+4 \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 0400000A BEQ ??CreateEditChat_17 5884 { 5885 FreeXText(t); \ 000003E8 0400A0E1 MOV R0,R4 \ 000003EC ........ _BLF FreeXText,??FreeXText??rA 5886 t->req_xtext=0; \ 000003F0 8C9084E5 STR R9,[R4, #+140] 5887 RequestXText(t->uin); \ 000003F4 0C0094E5 LDR R0,[R4, #+12] \ 000003F8 ........ BL RequestXText 5888 } 5889 5890 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_17: \ 000003FC 1400A0E3 MOV R0,#+20 \ 00000400 140000EF SWI +20 \ 00000404 0050A0E1 MOV R5,R0 5891 ed_struct->ed_contact=t; \ 00000408 004085E5 STR R4,[R5, #+0] 5892 ed_struct->ed_answer=edchat_toitem; \ 0000040C 08A085E5 STR R10,[R5, #+8] 5893 ed_struct->requested_decrement_total_unread=0; \ 00000410 0C9085E5 STR R9,[R5, #+12] 5894 t->req_add=0; \ 00000414 6C9084E5 STR R9,[R4, #+108] 5895 t->last_log=NULL; \ 00000418 7C9084E5 STR R9,[R4, #+124] 5896 5897 // int scr_w=ScreenW(); 5898 // int scr_h=ScreenH(); 5899 // int head_h=HeaderH(); 5900 5901 patch_header(&edchat_hdr); \ 0000041C 389086E5 STR R9,[R6, #+56] \ 00000420 888100EF SWI +33160 \ 00000424 010040E2 SUB R0,R0,#+1 \ 00000428 BC03C6E1 STRH R0,[R6, #+60] \ 0000042C 8A8100EF SWI +33162 \ 00000430 010040E2 SUB R0,R0,#+1 \ 00000434 BE03C6E1 STRH R0,[R6, #+62] 5902 patch_input(&edchat_desc); \ 00000438 B891C6E1 STRH R9,[R6, #+24] \ 0000043C 8A8100EF SWI +33162 \ 00000440 010080E2 ADD R0,R0,#+1 \ 00000444 BA01C6E1 STRH R0,[R6, #+26] \ 00000448 888100EF SWI +33160 \ 0000044C 010040E2 SUB R0,R0,#+1 \ 00000450 BC01C6E1 STRH R0,[R6, #+28] \ 00000454 898100EF SWI +33161 \ 00000458 0040A0E1 MOV R4,R0 \ 0000045C 8B8100EF SWI +33163 \ 00000460 000044E0 SUB R0,R4,R0 \ 00000464 010040E2 SUB R0,R0,#+1 \ 00000468 BE01C6E1 STRH R0,[R6, #+30] 5903 // edchat_desc.font=ED_FONT_SIZE; 5904 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 0000046C 20002DE9 PUSH {R5} \ 00000470 0130A0E3 MOV R3,#+1 \ 00000474 0820A0E1 MOV R2,R8 \ 00000478 381086E2 ADD R1,R6,#+56 \ 0000047C 0600A0E1 MOV R0,R6 \ 00000480 670100EF SWI +359 \ 00000484 A80187E5 STR R0,[R7, #+424] 5905 } \ 00000488 50D08DE2 ADD SP,SP,#+80 \ 0000048C F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000490 ........ DC32 edchat_desc \ 00000494 ........ DC32 FIRST_LETTER 5906 5907 //----------------------------------------------------------------------------- 5908 #define EC_MNU_MAX 8 5909 \ In segment CODE, align 4, keep-with-next 5910 void Quote(GUI *data) 5911 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 5912 int q_n; 5913 EDITCONTROL ec, ec_hdr; 5914 EDITCONTROL ec_ed; 5915 WSHDR *ed_ws; 5916 WSHDR *ws; 5917 5918 EDCHAT_STRUCT *ed_struct; 5919 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 5920 5921 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 5922 ExtractEditControl(ed_struct->ed_chatgui,q_n,&ec); \ 0000001C 040094E5 LDR R0,[R4, #+4] \ 00000020 2C208DE2 ADD R2,SP,#+44 \ 00000024 0510A0E1 MOV R1,R5 \ 00000028 690100EF SWI +361 5923 ExtractEditControl(ed_struct->ed_chatgui,q_n-1,&ec_hdr); \ 0000002C 040094E5 LDR R0,[R4, #+4] \ 00000030 58208DE2 ADD R2,SP,#+88 \ 00000034 011045E2 SUB R1,R5,#+1 \ 00000038 690100EF SWI +361 5924 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec_ed); \ 0000003C 081094E5 LDR R1,[R4, #+8] \ 00000040 040094E5 LDR R0,[R4, #+4] \ 00000044 0D20A0E1 MOV R2,SP \ 00000048 690100EF SWI +361 5925 5926 ed_ws=AllocWS((ec_ed.maxlen<<1) + 1); \ 0000004C F801DDE1 LDRSH R0,[SP, #+24] \ 00000050 0110A0E3 MOV R1,#+1 \ 00000054 800081E0 ADD R0,R1,R0, LSL #+1 \ 00000058 250100EF SWI +293 \ 0000005C 0050A0E1 MOV R5,R0 5927 if(wstrlen(ec_hdr.pWS)) \ 00000060 80009DE5 LDR R0,[SP, #+128] \ 00000064 230100EF SWI +291 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0600000A BEQ ??Quote_0 5928 { 5929 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 5930 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 5931 } 5932 else 5933 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 5934 if (EDIT_IsMarkModeActive(ed_struct->ed_chatgui)) \ ??Quote_1: \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C D80100EF SWI +472 \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300000A BEQ ??Quote_2 5935 { 5936 EDIT_GetMarkedText(ed_struct->ed_chatgui,ed_ws); \ 000000A8 040094E5 LDR R0,[R4, #+4] \ 000000AC 0510A0E1 MOV R1,R5 \ 000000B0 D90100EF SWI +473 \ 000000B4 020000EA B ??Quote_3 5937 } 5938 else 5939 { 5940 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 5941 } 5942 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 5943 do 5944 { 5945 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 5946 wsInsertChar(ed_ws,'>',ed_pos++); \ 000000D4 0720A0E1 MOV R2,R7 \ 000000D8 3E10A0E3 MOV R1,#+62 \ 000000DC 0500A0E1 MOV R0,R5 \ 000000E0 1D0000EF SWI +29 \ 000000E4 017087E2 ADD R7,R7,#+1 5947 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 5948 } 5949 while((ed_pos=wstrchr(ed_ws,ed_pos,'\r'))!=0xFFFF); \ 000000F8 0D20A0E3 MOV R2,#+13 \ 000000FC 0710A0E1 MOV R1,R7 \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 DC0100EF SWI +476 \ 00000108 060050E1 CMP R0,R6 \ 0000010C EFFFFF1A BNE ??Quote_4 5950 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 5951 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 5952 ws=AllocWS(ec_ed.pWS->wsbody[0]+ed_ws->wsbody[0]); \ 00000128 28009DE5 LDR R0,[SP, #+40] \ 0000012C 001095E5 LDR R1,[R5, #+0] \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 B010D1E1 LDRH R1,[R1, #+0] \ 00000138 B000D0E1 LDRH R0,[R0, #+0] \ 0000013C 000081E0 ADD R0,R1,R0 \ 00000140 250100EF SWI +293 5953 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 5954 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 5955 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 5956 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 5957 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000170 081094E5 LDR R1,[R4, #+8] \ 00000174 040094E5 LDR R0,[R4, #+4] \ 00000178 9B0100EF SWI +411 5958 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 5959 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 5960 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 5961 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 5962 5963 \ In segment CODE, align 4, keep-with-next 5964 void GetShortInfo(GUI *data) 5965 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 5966 EDCHAT_STRUCT *ed_struct; 5967 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 5968 5969 TPKT *p; 5970 CLIST *t; 5971 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 1E00000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable231 ;; S_ICONS + 372 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1A00001A BNE ??GetShortInfo_0 5972 { 5973 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 5974 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 5975 p->pkt.type=T_REQINFOSHORT; 5976 p->pkt.data_len=0; 5977 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF); \ 00000038 0010E0E3 MVN R1,#+0 \ 0000003C 000086E5 STR R0,[R6, #+0] \ 00000040 0B00A0E3 MOV R0,#+11 \ 00000044 B400C6E1 STRH R0,[R6, #+4] \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C B600C6E1 STRH R0,[R6, #+6] \ 00000050 ........ LDR R0,??DataTable225 ;; `?` \ 00000054 02002DE9 PUSH {R1} \ 00000058 173080E2 ADD R3,R0,#+23 \ 0000005C 6C2E80E2 ADD R2,R0,#+1728 \ 00000060 0500A0E1 MOV R0,R5 \ 00000064 0110A0E3 MOV R1,#+1 \ 00000068 ........ BL AddStringToLog 5978 AddMsgToChat(ed_struct->ed_chatgui); \ 0000006C 040094E5 LDR R0,[R4, #+4] \ 00000070 ........ BL AddMsgToChat 5979 RecountMenu(t,1); \ 00000074 0110A0E3 MOV R1,#+1 \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C ........ BL RecountMenu 5980 SUBPROC((void *)SendAnswer,0,p); \ 00000080 ........ LDR R0,??DataTable233 ;; SendAnswer \ 00000084 0620A0E1 MOV R2,R6 \ 00000088 0010A0E3 MOV R1,#+0 \ 0000008C 710100EF SWI +369 \ 00000090 04D08DE2 ADD SP,SP,#+4 5981 } 5982 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000094 0100A0E3 MOV R0,#+1 \ 00000098 3B0100EF SWI +315 5983 } \ 0000009C 7080BDE8 POP {R4-R6,PC} ;; return 5984 5985 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 5986 void AddCurContact(GUI *data) 5987 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 5988 EDCHAT_STRUCT *ed_struct; 5989 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 5990 5991 if ((ed_struct->ed_contact)&&(connect_state==3)) AskNickAndAddContact(ed_struct); \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0400000A BEQ ??AddCurContact_0 \ 00000014 ........ LDR R1,??DataTable231 ;; S_ICONS + 372 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 5992 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 5993 } \ 00000030 0080BDE8 POP {PC} ;; return 5994 \ In segment CODE, align 4, keep-with-next 5995 void SendAuthReq(GUI *data) 5996 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 5997 EDCHAT_STRUCT *ed_struct; 5998 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 5999 6000 TPKT *p; 6001 CLIST *t; 6002 int l; 6003 const char s[]=LG_AUTHREQ; \ 0000000C B4109FE5 LDR R1,??SendAuthReq_0 ;; `?ed_contact)&&(connect_state==3)) \ 00000020 005094E5 LDR R5,[R4, #+0] \ 00000024 000055E3 CMP R5,#+0 \ 00000028 2200000A BEQ ??SendAuthReq_1 \ 0000002C ........ LDR R0,??DataTable231 ;; S_ICONS + 372 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1E00001A BNE ??SendAuthReq_1 6005 { 6006 p=malloc(sizeof(PKT)+(l=strlen(s))+1); \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 1B0000EF SWI +27 \ 00000044 0060A0E1 MOV R6,R0 \ 00000048 090086E2 ADD R0,R6,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0070A0E1 MOV R7,R0 6007 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 6008 p->pkt.type=T_AUTHREQ; 6009 p->pkt.data_len=l; 6010 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000087E5 STR R0,[R7, #+0] \ 00000060 0A00A0E3 MOV R0,#+10 \ 00000064 B400C7E1 STRH R0,[R7, #+4] \ 00000068 B660C7E1 STRH R6,[R7, #+6] \ 0000006C 080087E2 ADD R0,R7,#+8 \ 00000070 1A0000EF SWI +26 6011 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 ........ LDR R3,??DataTable232 ;; `?` + 23 \ 00000078 0000E0E3 MVN R0,#+0 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 082087E2 ADD R2,R7,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C ........ BL AddStringToLog 6012 AddMsgToChat(ed_struct->ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 6013 RecountMenu(t,1); \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 ........ BL RecountMenu 6014 SUBPROC((void *)SendAnswer,0,p); \ 000000A4 ........ LDR R0,??DataTable233 ;; SendAnswer \ 000000A8 0720A0E1 MOV R2,R7 \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 710100EF SWI +369 \ 000000B4 04D08DE2 ADD SP,SP,#+4 6015 } 6016 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 3B0100EF SWI +315 6017 } \ 000000C0 14D08DE2 ADD SP,SP,#+20 \ 000000C4 F080BDE8 POP {R4-R7,PC} ;; return \ ??SendAuthReq_0: \ 000000C8 ........ DC32 `?ed_contact)&&(connect_state==3)) \ 00000020 005094E5 LDR R5,[R4, #+0] \ 00000024 000055E3 CMP R5,#+0 \ 00000028 2200000A BEQ ??SendAuthGrant_1 \ 0000002C ........ LDR R0,??DataTable231 ;; S_ICONS + 372 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1E00001A BNE ??SendAuthGrant_1 6029 { 6030 p=malloc(sizeof(PKT)+(l=strlen(s))+1); \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 1B0000EF SWI +27 \ 00000044 0060A0E1 MOV R6,R0 \ 00000048 090086E2 ADD R0,R6,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0070A0E1 MOV R7,R0 6031 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 6032 p->pkt.type=T_AUTHGRANT; 6033 p->pkt.data_len=l; 6034 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000087E5 STR R0,[R7, #+0] \ 00000060 0E00A0E3 MOV R0,#+14 \ 00000064 B400C7E1 STRH R0,[R7, #+4] \ 00000068 B660C7E1 STRH R6,[R7, #+6] \ 0000006C 080087E2 ADD R0,R7,#+8 \ 00000070 1A0000EF SWI +26 6035 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 ........ LDR R3,??DataTable232 ;; `?` + 23 \ 00000078 0000E0E3 MVN R0,#+0 \ 0000007C 01002DE9 PUSH {R0} \ 00000080 082087E2 ADD R2,R7,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C ........ BL AddStringToLog 6036 AddMsgToChat(ed_struct->ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 6037 RecountMenu(t,1); \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 ........ BL RecountMenu 6038 SUBPROC((void *)SendAnswer,0,p); \ 000000A4 ........ LDR R0,??DataTable233 ;; SendAnswer \ 000000A8 0720A0E1 MOV R2,R7 \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 710100EF SWI +369 \ 000000B4 04D08DE2 ADD SP,SP,#+4 6039 } 6040 GeneralFuncF1(1); \ ??SendAuthGrant_1: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 3B0100EF SWI +315 6041 } \ 000000C0 FF80BDE8 POP {R0-R7,PC} ;; return \ ??SendAuthGrant_0: \ 000000C4 ........ DC32 `?ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1400000A BEQ ??OpenLogfile_0 6056 { 6057 #ifdef EVILFOX 6058 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 6059 #else 6060 #ifdef UIN_WRITE 6061 if (HISTORY_TYPE) 6062 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 6063 else 6064 wsprintf(ws,"%s\\%s(%d).txt",HIST_PATH,t->name, t->uin); 6065 #else 6066 if (HISTORY_TYPE) \ 00000024 0C3090E5 LDR R3,[R0, #+12] \ 00000028 5C009FE5 LDR R0,??OpenLogfile_1 ;; HISTORY_TYPE \ 0000002C 5C109FE5 LDR R1,??OpenLogfile_1+0x4 ;; `?` \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 58209FE5 LDR R2,??OpenLogfile_1+0x8 ;; HIST_PATH \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0600000A BEQ ??OpenLogfile_2 6067 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); \ 00000040 ........ LDR R0,??DataTable234 ;; UIN \ 00000044 08002DE9 PUSH {R3} \ 00000048 003090E5 LDR R3,[R0, #+0] \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 240100EF SWI +292 \ 00000054 04D08DE2 ADD SP,SP,#+4 \ 00000058 020000EA B ??OpenLogfile_3 6068 else 6069 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); \ ??OpenLogfile_2: \ 0000005C 101081E2 ADD R1,R1,#+16 \ 00000060 0500A0E1 MOV R0,R5 \ 00000064 240100EF SWI +292 6070 #endif 6071 #endif 6072 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 00000068 0020A0E3 MOV R2,#+0 \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 0500A0E1 MOV R0,R5 \ 00000074 940000EF SWI +148 6073 } 6074 FreeWS(ws); \ ??OpenLogfile_0: \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C 290100EF SWI +297 6075 GeneralFuncF1(1); \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 3B0100EF SWI +315 6076 } \ 00000088 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 0000008C ........ DC32 HISTORY_TYPE \ 00000090 ........ DC32 `?` \ 00000094 ........ DC32 HIST_PATH 6077 \ In segment CODE, align 4, keep-with-next 6078 void ClearLog(GUI *data/*,void *dummy*/) 6079 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 6080 EDITCONTROL ec; 6081 EDCHAT_STRUCT *ed_struct; 6082 WSHDR *ws; 6083 CLIST *t; 6084 6085 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 6086 6087 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 00000010 081094E5 LDR R1,[R4, #+8] \ 00000014 040094E5 LDR R0,[R4, #+4] \ 00000018 0D20A0E1 MOV R2,SP \ 0000001C 690100EF SWI +361 6088 if(wstrlen(ec.pWS)>0) \ 00000020 28009DE5 LDR R0,[SP, #+40] \ 00000024 230100EF SWI +291 \ 00000028 010050E3 CMP R0,#+1 \ 0000002C 0D0000BA BLT ??ClearLog_0 6089 { 6090 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 6091 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 6092 6093 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000044 081094E5 LDR R1,[R4, #+8] \ 00000048 040094E5 LDR R0,[R4, #+4] \ 0000004C 9B0100EF SWI +411 6094 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 6095 6096 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 6097 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 6098 } 6099 else 6100 { 6101 6102 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 6103 { 6104 if (t->log) \ 00000074 740095E5 LDR R0,[R5, #+116] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 6105 { 6106 FreeLOGQ(&t->log); \ 00000084 740085E2 ADD R0,R5,#+116 \ 00000088 ........ BL FreeLOGQ 6107 t->msg_count=0; \ 0000008C 846085E5 STR R6,[R5, #+132] 6108 if (ed_struct->ed_answer>=2&&ed_struct->ed_chatgui) \ 00000090 080094E5 LDR R0,[R4, #+8] \ 00000094 020050E3 CMP R0,#+2 \ 00000098 0C0000BA BLT ??ClearLog_3 \ 0000009C 040094E5 LDR R0,[R4, #+4] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0900000A BEQ ??ClearLog_3 \ 000000A8 050000EA B ??ClearLog_4 6109 { 6110 while(ed_struct->ed_answer!=2) 6111 { 6112 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 6113 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 6114 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 6115 } 6116 } 6117 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 806085E5 STR R6,[R5, #+128] 6118 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 6119 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 6120 } 6121 } 6122 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 6123 \ In segment CODE, align 4, keep-with-next 6124 void ecmenu_ghook(void *data, int cmd) 6125 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 6126 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 6127 { 6128 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 6129 } 6130 } \ 00000010 0080BDE8 POP {PC} ;; return 6131 \ In segment DATA_C, align 4, align-sorted 6132 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ MAINCSM: \ 00000074 DS8 56 \ 000000AC REQUIRE `?` \ gipc: \ 000000AC DS8 12 \ 000000B8 REQUIRE `?` \ game_gipc: \ 000000B8 DS8 12 \ 000000C4 REQUIRE `?` \ tmr_gipc: \ 000000C4 DS8 12 \ 000000D0 REQUIRE `?` \ main_d: \ 000000D0 DS8 4 \ 000000D4 REQUIRE `?` \ dontLogOnConnect: \ 000000D4 DS8 4 \ 000000D8 REQUIRE `?` \ align: \ 000000D8 DS8 4 \ 000000DC REQUIRE `?` \ canvasdata: \ 000000DC DS8 4 \ 000000E0 REQUIRE `?` \ paused_height: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ uins: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ saver_on: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ Is_PING_On: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ Is_SMARTCPU_On: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ Is_INC_On: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ Is_ILU_On: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ Is_Double_Vibra_On: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ total_unread2: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ maincsm_id: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ maingui_id: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ SENDMSGCOUNT: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ IsActiveUp: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ CurrentXStatus: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ ews: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ msg_away_timer: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ inp_away_msg2: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ away_m: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ status_rem: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ change_back_status: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ Is_UPTIME_On: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ xstatus_old: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ minimum_xstatus: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ maximum: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ inp_away_m: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ silenthide: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ disautorecconect: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ Is_Vibra_Enabled: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ Is_Show_Offline: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ Is_Show_Groups: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ CurrentStatus: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ CurrentPrivateStatus: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ vibra_count: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ templates_chars: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ templates_lines: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ RXstate: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ connect_state: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ sock: \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ TOTALRECEIVED: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ TOTALSENDED: \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ ALLTOTALRECEIVED: \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ ALLTOTALSENDED: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ sendq_l: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ sendq_p: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ is_gprs_online: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ total_unread: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ cltop: \ 0000019C DS8 4 \ 000001A0 REQUIRE `?` \ GROUP_CACHE: \ 000001A0 DS8 4 \ 000001A4 REQUIRE `?` \ contactlist_menu_id: \ 000001A4 DS8 4 \ 000001A8 REQUIRE `?` \ edchat_id: \ 000001A8 DS8 4 \ 000001AC REQUIRE `?` \ 000001AC DS8 4 \ 000001B0 REQUIRE `?` \ tenseconds_to_ping: \ 000001B0 DS8 4 \ 000001B4 REQUIRE `?` \ kopa_online: \ 000001B4 DS8 4 \ 000001B8 REQUIRE `?` \ kopa_kontaktu: \ 000001B8 DS8 4 \ 000001BC REQUIRE `?` \ DNR_ID: \ 000001BC DS8 4 \ 000001C0 REQUIRE `?` \ DNR_TRIES: \ 000001C0 DS8 4 \ 000001C4 REQUIRE `?` \ host_counter: \ 000001C4 DS8 4 \ 000001C8 REQUIRE `?` \ ping_time: \ 000001C8 DS8 4 \ 000001CC REQUIRE `?` \ NEW_MSG: \ 000001CC DS8 4 \ 000001D0 REQUIRE `?` \ time_to_stop_t9: \ 000001D0 DS8 4 \ 000001D4 REQUIRE `?` \ comanda: \ 000001D4 DS8 4 \ 000001D8 REQUIRE `?` \ INC_show: \ 000001D8 DS8 4 \ 000001DC REQUIRE `?` \ font: \ 000001DC DS8 4 \ 000001E0 REQUIRE `?` \ old_ed_redraw: \ 000001E0 DS8 4 \ 000001E4 REQUIRE `?` \ 000001E4 DS8 64 \ 00000224 REQUIRE `?` \ elf_path: \ 00000224 DS8 256 \ 00000324 REQUIRE `?` \ ContactT9Key: \ 00000324 DS8 32 \ 00000344 REQUIRE `?` \ talk_sound: \ 00000344 DS8 128 \ 000003C4 REQUIRE `?` \ unread_msg_info: \ 000003C4 DS8 64 \ 00000404 REQUIRE `?` \ mytmr3: \ 00000404 DS8 16 \ 00000414 REQUIRE `?` \ PINGO: \ 00000414 DS8 256 \ 00000514 REQUIRE `?` \ away_msg: \ 00000514 DS8 264 \ 0000061C REQUIRE `?` \ away_msg_time: \ 0000061C DS8 64 \ 0000065C REQUIRE `?` \ away_msg_time_dace: \ 0000065C DS8 16 \ 0000066C REQUIRE `?` \ tim_zone: \ 0000066C DS8 16 \ 0000067C REQUIRE `?` \ away_tmr: \ 0000067C DS8 16 \ 0000068C REQUIRE `?` \ mytmr: \ 0000068C DS8 16 \ 0000069C REQUIRE `?` \ mytmr2: \ 0000069C DS8 16 \ 000006AC REQUIRE `?` \ mytmr4: \ 000006AC DS8 16 \ 000006BC REQUIRE `?` \ hah: \ 000006BC DS8 128 \ 0000073C REQUIRE `?` \ logmsg: \ 0000073C DS8 256 \ 0000083C REQUIRE `?` \ tmr_illumination: \ 0000083C DS8 16 \ 0000084C REQUIRE `?` \ tmr_vibra: \ 0000084C DS8 16 \ 0000085C REQUIRE `?` \ reconnect_tmr: \ 0000085C DS8 16 \ 0000086C REQUIRE `?` \ tmr_active: \ 0000086C DS8 16 \ 0000087C REQUIRE `?` \ clm_hdr_text: \ 0000087C DS8 48 \ 000008AC REQUIRE `?` \ clmenu_sk_r: \ 000008AC DS8 16 \ 000008BC REQUIRE `?` \ hostbuf2: \ 000008BC DS8 128 \ 0000093C REQUIRE `?` \ hostname: \ 0000093C DS8 128 \ 000009BC REQUIRE `?` \ send_tmr: \ 000009BC DS8 16 \ 000009CC REQUIRE `?` \ I_UIN: \ 000009CC DS8 12 \ 000009D8 REQUIRE `?` \ a_txt: \ 000009D8 DS8 48 \ 00000A08 REQUIRE `?` \ s_txt: \ 00000A08 DS8 48 \ 00000A38 REQUIRE `?` \ d_txt: \ 00000A38 DS8 48 \ 00000A68 REQUIRE `?` \ f_txt: \ 00000A68 DS8 48 \ 00000A98 REQUIRE `?` \ g_txt: \ 00000A98 DS8 48 \ 00000AC8 REQUIRE `?` \ develop: \ 00000AC8 DS8 16 \ 00000AD8 REQUIRE `?` \ requests1: \ 00000AD8 DS8 24 \ 00000AF0 REQUIRE `?` \ requests2: \ 00000AF0 DS8 20 \ 00000B04 REQUIRE `?` \ requests3: \ 00000B04 DS8 24 \ 00000B1C REQUIRE `?` \ requests4: \ 00000B1C DS8 20 \ 00000B30 REQUIRE `?` \ requests6: \ 00000B30 DS8 24 \ 00000B48 REQUIRE `?` \ mod_info: \ 00000B48 DS8 264 \ 00000C50 REQUIRE `?` \ show_nick: \ 00000C50 DS8 32 \ 00000C70 REQUIRE `?` 6146 { 6147 Quote, 6148 AddSmile, 6149 GetShortInfo, 6150 AddCurContact, 6151 SendAuthReq, 6152 SendAuthGrant, 6153 OpenLogfile, 6154 ClearLog, 6155 }; 6156 6157 char ecm_contactname[64]; \ ecm_contactname: \ 00000C70 DS8 64 \ 00000CB0 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ ??sk: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` 6158 \ In segment DATA_C, align 4, align-sorted 6159 static const HEADER_DESC ecmenu_HDR={0,0,NULL,NULL,NULL,(int)ecm_contactname,LGP_NULL}; \ ecmenu_HDR: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, ecm_contactname, 32767 \ ....FF7F0000 \ 00000014 080000000000 DC32 8, 0H, ecmenu_ghook, 0H, menusoftkeys, menu_skt, 0, 0H \ 0000........ \ 00000000.... \ ............ \ 000000000000 \ 0000 \ 00000034 ............ DC32 ecmenu_ITEMS, ecmenu_HNDLS, 8 \ ....08000000 6160 6161 static const MENU_DESC ecmenu_STRUCT= 6162 { 6163 8,NULL,ecmenu_ghook,NULL, 6164 menusoftkeys, 6165 &menu_skt, 6166 0, 6167 NULL, 6168 ecmenu_ITEMS, 6169 ecmenu_HNDLS, 6170 EC_MNU_MAX 6171 }; 6172 \ In segment CODE, align 4, keep-with-next 6173 void ec_menu(EDCHAT_STRUCT *ed_struct) 6174 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 \ 00000008 0040A0E1 MOV R4,R0 6175 CLIST *t; 6176 int to_remove[EC_MNU_MAX+1]; 6177 int remove=0; 6178 if ((t=ed_struct->ed_contact)) \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 4200000A BEQ ??ec_menu_0 6179 { 6180 if (t->name) \ 00000018 ........ LDR R5,??DataTable235 ;; S_ICONS \ 0000001C C73EA0E3 MOV R3,#+3184 \ 00000020 141090E2 ADDS R1,R0,#+20 \ 00000024 0300000A BEQ ??ec_menu_1 6181 { 6182 strncpy(ecm_contactname,t->name,63); \ 00000028 3F20A0E3 MOV R2,#+63 \ 0000002C 050083E0 ADD R0,R3,R5 \ 00000030 160100EF SWI +278 \ 00000034 030000EA B ??ec_menu_2 6183 } 6184 else 6185 { 6186 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000038 0C2090E5 LDR R2,[R0, #+12] \ 0000003C 3A1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000040 050083E0 ADD R0,R3,R5 \ 00000044 160000EF SWI +22 6187 } 6188 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 00000048 040094E5 LDR R0,[R4, #+4] \ 0000004C 0160A0E3 MOV R6,#+1 \ 00000050 820100EF SWI +386 \ 00000054 082094E5 LDR R2,[R4, #+8] \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 020050E1 CMP R0,R2 6189 { 6190 to_remove[++remove]=0; \ 00000060 04108D05 STREQ R1,[SP, #+4] 6191 } 6192 else 6193 { 6194 to_remove[++remove]=1; \ 00000064 0120A013 MOVNE R2,#+1 \ 00000068 04208D15 STRNE R2,[SP, #+4] 6195 } 6196 6197 if (ed_struct->ed_answer<=2) to_remove[++remove]=7; \ 0000006C 080094E5 LDR R0,[R4, #+8] \ 00000070 030050E3 CMP R0,#+3 \ 00000074 0720A0B3 MOVLT R2,#+7 \ 00000078 08208DB5 STRLT R2,[SP, #+8] 6198 if (!ed_struct->ed_contact || connect_state!=3) \ 0000007C 000094E5 LDR R0,[R4, #+0] \ 00000080 0260A0B3 MOVLT R6,#+2 \ 00000084 000050E3 CMP R0,#+0 \ 00000088 0200000A BEQ ??ec_menu_4 \ 0000008C 740195E5 LDR R0,[R5, #+372] \ 00000090 030050E3 CMP R0,#+3 \ 00000094 0D00000A BEQ ??ec_menu_5 6199 { 6200 to_remove[++remove]=2; \ ??ec_menu_4: \ 00000098 010086E2 ADD R0,R6,#+1 \ 0000009C 0D20A0E1 MOV R2,SP \ 000000A0 0230A0E3 MOV R3,#+2 \ 000000A4 003182E7 STR R3,[R2, +R0, LSL #+2] 6201 to_remove[++remove]=3; \ 000000A8 010080E2 ADD R0,R0,#+1 \ 000000AC 0330A0E3 MOV R3,#+3 \ 000000B0 003182E7 STR R3,[R2, +R0, LSL #+2] 6202 to_remove[++remove]=4; \ 000000B4 010080E2 ADD R0,R0,#+1 \ 000000B8 0430A0E3 MOV R3,#+4 \ 000000BC 003182E7 STR R3,[R2, +R0, LSL #+2] 6203 to_remove[++remove]=5; \ 000000C0 016080E2 ADD R6,R0,#+1 \ 000000C4 0D00A0E1 MOV R0,SP \ 000000C8 0520A0E3 MOV R2,#+5 \ 000000CC 062180E7 STR R2,[R0, +R6, LSL #+2] 6204 } 6205 6206 patch_header(&ecmenu_HDR); \ ??ec_menu_5: \ 000000D0 58509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 000000D4 001085E5 STR R1,[R5, #+0] \ 000000D8 888100EF SWI +33160 \ 000000DC 010040E2 SUB R0,R0,#+1 \ 000000E0 B400C5E1 STRH R0,[R5, #+4] \ 000000E4 8A8100EF SWI +33162 \ 000000E8 010040E2 SUB R0,R0,#+1 \ 000000EC B600C5E1 STRH R0,[R5, #+6] 6207 to_remove[0]=remove; \ 000000F0 00608DE5 STR R6,[SP, #+0] 6208 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 000000F4 0D00A0E1 MOV R0,SP \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 10002DE9 PUSH {R4} \ 00000100 0530A0E1 MOV R3,R5 \ 00000104 0800A0E3 MOV R0,#+8 \ 00000108 01002DE9 PUSH {R0} \ 0000010C 142085E2 ADD R2,R5,#+20 \ 00000110 0010A0E3 MOV R1,#+0 \ 00000114 0000A0E3 MOV R0,#+0 \ 00000118 01002DE9 PUSH {R0} \ 0000011C 520100EF SWI +338 \ 00000120 10D08DE2 ADD SP,SP,#+16 6209 } 6210 } \ ??ec_menu_0: \ 00000124 24D08DE2 ADD SP,SP,#+36 ;; stack cleaning \ 00000128 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 0000012C 25750000 DC8 "%u",+0 \ 00000130 ........ DC32 ecmenu_HDR 6211 6212 \ In segment CODE, align 4, keep-with-next 6213 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 6214 { 6215 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 6216 } 6217 \ In segment CODE, align 4, keep-with-next 6218 void AddSmile(GUI *data) 6219 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 6220 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 6221 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 6222 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 6223 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable0: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable2: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable3: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable5: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable12: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable21: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable23: \ 00000000 ........ DC32 away_msg2 \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable30: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable38: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable42: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable46: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable49: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable55: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable56: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 S_ICONS + 412 \ In segment CODE, align 4, keep-with-next \ ??DataTable60: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable66: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable73: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable74: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable76: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable77: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable78: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable79: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable80: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable81: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable84: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable87: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable88: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable97: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable99: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable100: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable103: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable104: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable105: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable106: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable113: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable114: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable117: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable118: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable119: \ 00000000 ........ DC32 away_msg2 \ In segment CODE, align 4, keep-with-next \ ??DataTable124: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable125: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable126: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable127: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable128: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable129: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable130: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable134: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable135: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable136: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable152: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable154: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable155: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable159: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable161: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable162: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable163: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable168: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable170: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable171: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable173: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable174: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable175: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable176: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable178: \ 00000000 ........ DC32 ShowStatusIcon \ In segment CODE, align 4, keep-with-next \ ??DataTable179: \ 00000000 ........ DC32 show_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable180: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable183: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable184: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable185: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable186: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable187: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable188: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable189: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable190: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable191: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable193: \ 00000000 ........ DC32 S_ICONS + 412 \ In segment CODE, align 4, keep-with-next \ ??DataTable196: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable197: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable198: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable199: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable201: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable204: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable205: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable207: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable208: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable209: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable210: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable211: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable212: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable213: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable215: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable216: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable217: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable218: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable219: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable220: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable223: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable225: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable231: \ 00000000 ........ DC32 S_ICONS + 372 \ In segment CODE, align 4, keep-with-next \ ??DataTable232: \ 00000000 ........ DC32 `?` + 23 \ In segment CODE, align 4, keep-with-next \ ??DataTable233: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable234: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable235: \ 00000000 ........ DC32 S_ICONS \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000074 ............ DC32 maincsm_onmessage, maincsm_oncreate, maincsm_onclose, 44, 1 \ ............ \ 2C0000000100 \ 0000 \ 00000088 ............ DC32 minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ ....CCCCAA55 \ 55AA33330000 \ 0000 \ 0000009C 8B00 DC16 139 \ 0000009E 0000 DC8 0, 0 \ 000000A0 49636F6E4261 DC8 "IconBar" \ 7200 \ 000000A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D4 00000000 DC32 0 \ `?`: \ 000000D8 00000000 DC32 0 \ `?`: \ 000000DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000100 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000104 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000108 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000010C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000110 00000000 DC32 0 \ `?`: \ 00000114 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000118 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000011C 00000000 DC32 0 \ `?`: \ 00000120 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000124 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000130 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000134 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000138 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000013C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000140 00000000 DC32 0 \ `?`: \ 00000144 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000148 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000014C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000150 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000154 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000158 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000015C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000160 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000164 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000168 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000016C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000170 F6FFFFFF DC32 -10 \ `?`: \ 00000174 00000000 DC32 0 \ `?`: \ 00000178 FFFFFFFF DC32 -1 \ `?`: \ 0000017C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000180 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000184 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000188 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000018C 00000000 DC32 0 \ `?`: \ 00000190 00000000 DC32 0H \ `?`: \ 00000194 01000000 DC32 1 \ `?`: \ 00000198 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000019C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001BC 00000000 DC32 0 \ `?`: \ 000001C0 03000000 DC32 3 \ `?`: \ 000001C4 00000000 DC32 0 \ `?`: \ 000001C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001DC 04000000 DC32 4 \ `?`: \ 000001E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000204 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000214 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000224 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000234 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000244 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000254 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000264 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000274 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000284 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000294 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000304 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000314 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000324 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000334 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000344 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000354 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000364 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000374 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000384 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000394 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000404 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000414 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000424 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000434 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000444 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000454 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000464 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000474 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000484 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000494 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000504 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000514 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000524 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000534 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000544 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000554 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000564 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000574 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000584 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000594 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000604 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000614 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 0000061C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000062C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000063C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000064C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000065C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000066C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000067C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000068C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000069C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000006AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000006BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000070C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000071C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000072C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000073C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000074C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000075C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000076C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000077C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000078C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000079C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000080C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000081C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000082C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000083C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000084C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000085C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000086C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000087C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000088C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000089C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000008AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000008BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000090C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000091C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000092C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000093C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000094C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000095C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000096C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000097C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000098C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000099C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000009BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000009CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000009D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000A08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000A38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000A68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000A98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000AC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000AD8 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00000AEF 00 DC8 0 \ `?`: \ 00000AF0 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00000B04 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00000B1C 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 00000B30 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 00000B48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000C50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000C70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?`: \ 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_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 input_awaymsg_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEEFF6E8E800 DC8 "\316\357\366\350\350" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2532643A2532 DC8 "%2d:%2d" \ 6400 \ 00000008 28EEF2F1F3F2 DC8 "(\356\362\361\363\362\361\362\342\363\376 \357\360\350\354\345\360\355\356 \361 %02d:%02d [%s] )" \ F1F2E2F3FE20 \ EFF0E8ECE5F0 \ EDEE20F12025 \ 3032643A2530 \ 3264205B2573 \ 5D202900 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 00000077 00 DC8 0 \ 00000078 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000083 00 DC8 0 \ 00000084 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 0000008F 00 DC8 0 \ 00000090 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 0000009B 00 DC8 0 \ 0000009C 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 000000A6 0000 DC8 0, 0 \ 000000A8 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 000000EF 00 DC8 0 \ 000000F0 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000107 00 DC8 0 \ 00000108 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 00000113 00 DC8 0 \ 00000114 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000011F 00 DC8 0 \ 00000120 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000014F 00 DC8 0 \ 00000150 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 00000017 00 DC8 0 \ 00000018 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 417761792066 DC8 "Away from [%s]" \ 726F6D205B25 \ 735D00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ 00000008 5C302E747874 DC8 "\\0.txt" \ 00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 5B415D00 DC8 "[A]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B495D00 DC8 "[I]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B565D00 DC8 "[V]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B535D00 DC8 "[S]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B525D00 DC8 "[R]" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 00000017 00 DC8 0 \ 00000018 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 00000029 000000 DC8 0, 0, 0 \ 0000002C 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 0000003C 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 00000048 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 00000056 0000 DC8 0, 0 \ 00000058 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 0000006E 0000 DC8 0, 0 \ 00000070 CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \357\356\344\352\353\376\367\350\362\374\361\377!" \ EEE6EDEE20EF \ EEE4EAEBFEF7 \ E8F2FCF1FF21 \ 00 \ 00000089 000000 DC8 0, 0, 0 \ 0000008C CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \361\356\347\344\340\362\374 \361\356\352\345\362, \357\345\360\345\347\340\357\363\361\352 GPRS!" \ EEE6EDEE20F1 \ EEE7E4E0F2FC \ 20F1EEEAE5F2 \ 2C20EFE5F0E5 \ E7E0EFF3F1EA \ 204750525321 \ 00 \ 000000B7 00 DC8 0 \ 000000B8 D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 000000CA 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 0A00 DC8 "\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73656E642072 DC8 "send res %d" \ 657320256400 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 53656E642065 DC8 "Send error!" \ 72726F722100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F2530 DC8 "Sie_%04d" \ 346400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25733A202573 DC8 "%s: %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d %02d-%02d %s:\015\012" \ 303264202530 \ 32642D253032 \ 642025733A0D \ 0A00 \ 0000001A 0000 DC8 0, 0 \ 0000001C 253032643A25 DC8 "%02d:%02d %02d-%02d %s:" \ 303264202530 \ 32642D253032 \ 642025733A00 \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 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 25735C25755C DC8 "%s\\%u\\%u.txt" \ 25752E747874 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ 00000010 25735C25752E DC8 "%s\\%u.txt" \ 74787400 \ 0000001A 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F66666C696E DC8 "offline.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 696E76697369 DC8 "invisible.png" \ 626C652E706E \ 6700 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 617761792E70 DC8 "away.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E612E706E67 DC8 "na.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6363757069 DC8 "occupied.png" \ 65642E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646E642E706E DC8 "dnd.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646570726573 DC8 "depression.png" \ 73696F6E2E70 \ 6E6700 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6576696C2E70 DC8 "evil.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 496E70757420 DC8 "Input away msg" \ 61776179206D \ 736700 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CBE5E200 DC8 "\313\345\342" Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 108 AddSmile 4 AddStringToLog 188 AddToMain 36 AskNickAndAddContact 4 BackSpaceContactT9 8 ChangeSound 4 ChangeVibra 4 CheckComand 68 CheckDoubleRun 8 ClearContactT9Key 4 ClearLog 60 ClearSendQ 8 CreateEditChat 116 Draw11 12 Draw22 20 DrawAck 80 DrawAutoMSG 20 ElfKiller 4 ExtractAnswer 36 FindContactLOGQByAck 12 FindNextActiveContact 0 FindPrevActiveContact 0 FreeLOGQ 8 FreeTemplates 8 GetHost 0 GetHostsCount 0 GetIconIndex 0 GetLastXTextLOGQ 0 GetOnTotalContact 8 GetPort 16 GetShortInfo 20 GetTempName 20 Get_Online_total 0 IlluminationOff 8 IlluminationOn 28 InputAwayMsg 76 IsIdle 4 IsUrl 44 LastLOGQ 0 LoadTemplates 332 NewLOGQ 12 OpenLogfile 16 ParseAnswer 36 ParseXStatusText 20 Pinger2 20 Play 224 ProcessPacket 372 Quote 152 ReadDefSettings 152 RecountMenu 20 Remind_Timer2 8 Reminder_timer 4 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SMART_REDRAW 8 SaveAnswer 12 SendAnswer 28 SendAuthGrant 40 SendAuthReq 44 SendMSGACK 8 SetIconBarHandler 0 UpdateCLheader 40 UpdateCSMname 4 WriteDefSettings 152 addIconBar 16 ask_my_info 0 atoi 4 away_timer 24 begin_to_develop 4 contactlist_menu_ghook 8 contactlist_menu_iconhndl 668 contactlist_menu_onkey 40 create_connect 312 create_contactlist_menu 24 do_ping 4 do_reconnect 4 ec_menu 68 ecmenu_ghook 4 ed_options_handler 64 edchat_ghook 72 edchat_locret 0 edchat_onkey 344 end_socket 8 free_ICONS 16 get_answer 1092 init_time_zone 4 input_awaymsg_ghook 4 input_awaymsg_locret 0 input_awaymsg_onkey 68 main 64 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 92 method0 96 method1 8 method2 8 method3 8 method4 0 method5 24 method8 0 method9 0 my_ed_redraw 16 my_keyhook 12 process_active_timer 12 recon 8 resend 4 send_login 36 set_my_status 4 set_my_xstatus 36 setup_ICONS 12 show_pp_sender 56 start_vibra 8 start_vibra2 4 stop_vibra 4 stop_vibra2 4 to_develop 4 wstrstr 32 x_zstatus 16 xstatuse 12 Segment part sizes: Function/Label Bytes -------------- ----- Pinger2 140 SMART_REDRAW 48 Is_Id3tag_Enabled 4 timeh 4 timemin 4 away_timer 224 init_time_zone 372 Draw11 80 Remind_Timer2 72 Reminder_timer 32 xstatuse 96 x_zstatus 92 Draw22 144 DrawAutoMSG 136 input_awaymsg_id 4 input_awaymsg_onkey 220 input_awaymsg_ghook 68 input_awaymsg_locret 4 InputAwayMsg 336 setup_ICONS 72 free_ICONS 44 IlluminationOff 60 IlluminationOn 124 ReadDefSettings 340 WriteDefSettings 320 Play 292 start_vibra 100 stop_vibra 88 start_vibra2 68 stop_vibra2 88 ChangeVibra 56 ChangeSound 56 FreeTemplates 56 LoadTemplates 396 RXbuf 16392 TXbuf 16392 ElfKiller 32 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 UpdateCLheader 420 ClearContactT9Key 24 AddContactT9Key 36 BackSpaceContactT9 36 create_contactlist_menu 100 contactlist_menu_ghook 68 RecountMenu 160 contactlist_menu_onkey 1376 GetOnTotalContact 92 contactlist_menu_iconhndl 600 GetHost 192 atoi 84 GetPort 276 GetHostsCount 120 create_connect 764 ClearSendQ 48 end_socket 56 resend 24 SendAnswer 412 send_login 148 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1432 AddToMain 544 AddStringToLog 580 ParseXStatusText 152 AddMsgToChat 832 DrawAck 340 ask_my_info 4 set_my_status 72 set_my_xstatus 264 to_develop 76 ReqAddMsgToChat 120 begin_to_develop 52 CheckComand 1596 INC_Nick 32 show_pp_sender 272 Get_Online_total 92 ProcessPacket 2784 process_active_timer 140 method0 1012 method1 44 method2 36 method3 24 method4 20 method5 200 method8 8 method9 8 my_keyhook 92 ? 1868 ipc_test_name 8 S_OFFLINE 8 S_INVISIBLE 12 S_AWAY 8 S_NA 4 S_OCCUPIED 12 S_DND 4 S_ONLINE 8 S_FFC 4 icons_names 112 input_awaymsg_desc 88 def_setting 20 key_clmenu_sk_r 84 contactlist_menuhdr 68 menusoftkeys 12 menu_sk 24 clmenu_sk 24 menu_skt 8 clmenu_skt 8 color 4 maincsm_oncreate 248 maincsm_onclose 264 do_reconnect 40 CheckDoubleRun 100 maincsm_onmessage 2844 IsIdle 36 addIconBar 224 minus11 4 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 main 412 edchat_locret 4 ExtractAnswer 280 ??FindNextActiveContact_0 64 FindPrevActiveContact 88 ed_options_handler 436 wstrstr 124 IsUrl 424 ParseAnswer 548 SaveAnswer 36 GetTempName 172 DMonth 52 recon 52 edchat_onkey 1248 my_ed_redraw 136 edchat_ghook 544 edchat_desc 84 sk 16 CreateEditChat 1176 Quote 416 GetShortInfo 160 AddCurContact 52 SendAuthReq 204 SendAuthGrant 200 OpenLogfile 152 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 224 ecmenu_HNDLS 32 S_ICONS 3248 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 ecmenu_HDR 64 ec_menu 308 AskNickAndAddContact 8 AddSmile 24 ??DataTable0 4 ??DataTable2 4 ??DataTable3 4 ??DataTable5 4 ??DataTable12 4 ??DataTable19 4 ??DataTable20 4 ??DataTable21 4 ??DataTable23 4 ??DataTable25 4 ??DataTable30 4 ??DataTable31 4 ??DataTable38 4 ??DataTable41 4 ??DataTable42 4 ??DataTable46 4 ??DataTable49 4 ??DataTable53 4 ??DataTable55 4 ??DataTable56 4 ??DataTable58 4 ??DataTable59 4 ??DataTable60 4 ??DataTable61 4 ??DataTable62 4 ??DataTable64 4 ??DataTable66 4 ??DataTable73 4 ??DataTable74 4 ??DataTable76 4 ??DataTable77 4 ??DataTable78 4 ??DataTable79 4 ??DataTable80 4 ??DataTable81 4 ??DataTable84 4 ??DataTable86 4 ??DataTable87 4 ??DataTable88 4 ??DataTable96 4 ??DataTable97 4 ??DataTable99 4 ??DataTable100 4 ??DataTable101 4 ??DataTable102 4 ??DataTable103 4 ??DataTable104 4 ??DataTable105 4 ??DataTable106 4 ??DataTable113 4 ??DataTable114 4 ??DataTable115 4 ??DataTable116 4 ??DataTable117 4 ??DataTable118 4 ??DataTable119 4 ??DataTable124 4 ??DataTable125 4 ??DataTable126 4 ??DataTable127 4 ??DataTable128 4 ??DataTable129 4 ??DataTable130 4 ??DataTable131 4 ??DataTable134 4 ??DataTable135 4 ??DataTable136 4 ??DataTable143 4 ??DataTable146 4 ??DataTable152 4 ??DataTable154 4 ??DataTable155 4 ??DataTable159 4 ??DataTable161 4 ??DataTable162 4 ??DataTable163 4 ??DataTable168 4 ??DataTable170 4 ??DataTable171 4 ??DataTable173 4 ??DataTable174 4 ??DataTable175 4 ??DataTable176 4 ??DataTable178 4 ??DataTable179 4 ??DataTable180 4 ??DataTable183 4 ??DataTable184 4 ??DataTable185 4 ??DataTable186 4 ??DataTable187 4 ??DataTable188 4 ??DataTable189 4 ??DataTable190 4 ??DataTable191 4 ??DataTable193 4 ??DataTable196 4 ??DataTable197 4 ??DataTable198 4 ??DataTable199 4 ??DataTable201 4 ??DataTable204 4 ??DataTable205 4 ??DataTable207 4 ??DataTable208 4 ??DataTable209 4 ??DataTable210 4 ??DataTable211 4 ??DataTable212 4 ??DataTable213 4 ??DataTable214 4 ??DataTable215 4 ??DataTable216 4 ??DataTable217 4 ??DataTable218 4 ??DataTable219 4 ??DataTable220 4 ??DataTable221 4 ??DataTable223 4 ??DataTable225 4 ??DataTable231 4 ??DataTable232 4 ??DataTable233 4 ??DataTable234 4 ??DataTable235 4 ? 3248 ? 8 ? 24 ? 8 ? 8 ? 8 ? 8 ? 8 ? 48 ? 396 ? 32 ? 16 ? 3 ? 16 ? 4 ? 4 ? 4 ? 4 ? 4 ? 204 ? 2 ? 40 ? 12 ? 3 ? 8 ? 52 ? 3 ? 12 ? 12 ? 164 ? 8 ? 28 ? 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 4 Others 976 33 656 bytes in segment CODE 4 602 bytes in segment DATA_C 3 288 bytes in segment DATA_I 3 288 bytes in segment DATA_ID 33 112 bytes in segment DATA_Z 24 bytes in segment INITTAB 32 704 bytes of CODE memory (+ 976 bytes shared) 7 890 bytes of CONST memory 36 400 bytes of DATA memory Errors: none Warnings: none