############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 27/Feb/2008 10:50:21 # # 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 # # -D NEWSGOLD -D ELKA -D UIN_WRITE -D kluchnik # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod205 # # 8w_src\kluchnik\List\ -lC # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod2058w_src\kluchn # # ik\List\ -o D:\Pasha\elf\_MY_PROJECT_\naticq_mod2058 # # w_src\kluchnik\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\kluchn # # ik\List\main.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod2058w_src\kluchn # # ik\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//Дефайн не убирать и не трогать!выибу и высушу! \ In segment DATA_Z, align 4, align-sorted 58 int solnce=0; \ solnce: \ 00000000 DS8 4 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 { 107 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable34 ;; S_ICONS \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C EC10A0E3 MOV R1,#+236 \ 00000010 4C1D81E3 ORR R1,R1,#0x1300 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 FC0090E5 LDR R0,[R0, #+252] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??Pinger2_0 108 { 109 PingToServer2(); \ 00000024 1000A0E3 MOV R0,#+16 \ 00000028 140000EF SWI +20 \ 0000002C 0060A0E1 MOV R6,R0 \ 00000030 081086E2 ADD R1,R6,#+8 \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 B40000EF SWI +180 \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 000086E5 STR R0,[R6, #+0] \ 00000044 1200A0E3 MOV R0,#+18 \ 00000048 B400C6E1 STRH R0,[R6, #+4] \ 0000004C 0800A0E3 MOV R0,#+8 \ 00000050 B600C6E1 STRH R0,[R6, #+6] \ 00000054 ........ LDR R0,??DataTable2 ;; SendAnswer \ 00000058 0620A0E1 MOV R2,R6 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 710100EF SWI +369 110 GBS_StartTimerProc(&mytmr3, 12960, Pinger2); \ 00000064 0520A0E1 MOV R2,R5 \ 00000068 A010A0E3 MOV R1,#+160 \ 0000006C C81D81E3 ORR R1,R1,#0x3200 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 4D0000EF SWI +77 \ 00000078 7080BDE8 POP {R4-R6,PC} 111 } 112 else 113 GBS_StartTimerProc(&mytmr3, 2160, Pinger2); \ ??Pinger2_0: \ 0000007C 0520A0E1 MOV R2,R5 \ 00000080 871EA0E3 MOV R1,#+2160 \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 4D0000EF SWI +77 114 } \ 0000008C 7080BDE8 POP {R4-R6,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 \ In segment DATA_C, align 4, align-sorted 139 const int SLI_TYPE=1; \ SLI_TYPE: \ 00000000 01000000 DC32 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 + 284 \ 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 + 284 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; 204 int Is_Id3tag_Enabled; 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,??DataTable34 ;; S_ICONS \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 300194E5 LDR R0,[R4, #+304] \ 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 B4509FE5 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 4400A0E3 MOV R0,#+68 \ 00000040 580D80E3 ORR R0,R0,#0x1600 \ 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 5400A0E3 MOV R0,#+84 \ 00000050 580D80E3 ORR R0,R0,#0x1600 \ 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 0400A0E3 MOV R0,#+4 \ 0000006C 580D80E3 ORR R0,R0,#0x1600 \ 00000070 040080E0 ADD R0,R0,R4 \ 00000074 160000EF SWI +22 288 away_m=1; 289 // automsg=1; 290 if(CurrentStatus!=2) \ 00000078 740194E5 LDR R0,[R4, #+372] \ 0000007C 0150A0E3 MOV R5,#+1 \ 00000080 385184E5 STR R5,[R4, #+312] \ 00000084 020050E3 CMP R0,#+2 \ 00000088 04D08DE2 ADD SP,SP,#+4 \ 0000008C 0400000A BEQ ??away_timer_0 291 { 292 status_rem=CurrentStatus; \ 00000090 3C0184E5 STR R0,[R4, #+316] 293 CurrentStatus=2; \ 00000094 0200A0E3 MOV R0,#+2 \ 00000098 740184E5 STR R0,[R4, #+372] 294 set_my_status(); \ 0000009C ........ BL set_my_status 295 // SUBPROC((void*)WriteDefSettings); 296 change_back_status=1; \ 000000A0 405184E5 STR R5,[R4, #+320] 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 30209FE5 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 30019415 LDRNE R0,[R4, #+304] \ 000000BC 401E81E3 ORR R1,R1,#0x400 \ 000000C0 01008012 ADDNE R0,R0,#+1 \ 000000C4 30018415 STRNE R0,[R4, #+304] \ 000000C8 6400A0E3 MOV R0,#+100 \ 000000CC 580D80E3 ORR R0,R0,#0x1600 \ 000000D0 040080E0 ADD R0,R0,R4 \ 000000D4 4D0000EF SWI +77 302 } \ 000000D8 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??away_timer_1: \ 000000DC ........ DC32 `?` \ 000000E0 ........ 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 50219FE5 LDR R2,??init_time_zone_1 ;; time_zone \ 00000004 50019FE5 LDR R0,??init_time_zone_1+0x4 ;; S_ICONS + 5716 \ 00000008 50119FE5 LDR R1,??init_time_zone_1+0x8 ;; `?` \ 0000000C 00402DE9 PUSH {LR} \ 00000010 002092E5 LDR R2,[R2, #+0] \ 00000014 200052E3 CMP R2,#+32 \ 00000018 0080BD88 POPHI {PC} \ 0000001C 013F8FE2 ADR R3,??init_time_zone_0 \ 00000020 0230D3E7 LDRB R3,[R3, R2] \ 00000024 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??init_time_zone_0: \ 00000028 0C080B0E DC8 +12,+8,+11,+14 \ 0000002C 10121416 DC8 +16,+18,+20,+22 \ 00000030 181A1C1E DC8 +24,+26,+28,+30 \ 00000034 20222426 DC8 +32,+34,+36,+38 \ 00000038 282A2C2E DC8 +40,+42,+44,+46 \ 0000003C 30323436 DC8 +48,+50,+52,+54 \ 00000040 383A3C3E DC8 +56,+58,+60,+62 \ 00000044 40424446 DC8 +64,+66,+68,+70 \ 00000048 48000000 DC8 +72,+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: \ 0000004C 0C1081E2 ADD R1,R1,#+12 \ 00000050 160000EF SWI +22 \ 00000054 0080BDE8 POP {PC} 313 break; 314 case 2: 315 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_3: \ 00000058 181081E2 ADD R1,R1,#+24 \ ??init_time_zone_4: \ 0000005C 160000EF SWI +22 \ 00000060 0080BDE8 POP {PC} 316 break; 317 case 3: 318 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_5: \ 00000064 241081E2 ADD R1,R1,#+36 \ 00000068 FBFFFFEA B ??init_time_zone_4 319 break; 320 case 4: 321 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_6: \ 0000006C 301081E2 ADD R1,R1,#+48 \ 00000070 F9FFFFEA B ??init_time_zone_4 322 break; 323 case 5: 324 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_7: \ 00000074 3C1081E2 ADD R1,R1,#+60 \ 00000078 F7FFFFEA B ??init_time_zone_4 325 break; 326 case 6: 327 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000007C 481081E2 ADD R1,R1,#+72 \ 00000080 F5FFFFEA B ??init_time_zone_4 328 break; 329 case 7: 330 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000084 541081E2 ADD R1,R1,#+84 \ 00000088 F3FFFFEA B ??init_time_zone_4 331 break; 332 case 8: 333 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000008C 601081E2 ADD R1,R1,#+96 \ 00000090 F1FFFFEA B ??init_time_zone_4 334 break; 335 case 9: 336 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 00000094 6C1081E2 ADD R1,R1,#+108 \ 00000098 EFFFFFEA B ??init_time_zone_4 337 break; 338 case 10: 339 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 0000009C 781081E2 ADD R1,R1,#+120 \ 000000A0 EDFFFFEA B ??init_time_zone_4 340 break; 341 case 11: 342 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000A4 841081E2 ADD R1,R1,#+132 \ 000000A8 EBFFFFEA B ??init_time_zone_4 343 break; 344 case 12: 345 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000AC 901081E2 ADD R1,R1,#+144 \ 000000B0 E9FFFFEA B ??init_time_zone_4 346 break; 347 case 13: 348 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000B4 9C1081E2 ADD R1,R1,#+156 \ 000000B8 E7FFFFEA B ??init_time_zone_4 349 break; 350 case 14: 351 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000BC A81081E2 ADD R1,R1,#+168 \ 000000C0 E5FFFFEA B ??init_time_zone_4 352 break; 353 case 15: 354 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000C4 B41081E2 ADD R1,R1,#+180 \ 000000C8 E3FFFFEA B ??init_time_zone_4 355 break; 356 case 16: 357 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000CC C01081E2 ADD R1,R1,#+192 \ 000000D0 E1FFFFEA B ??init_time_zone_4 358 break; 359 case 17: 360 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000D4 CC1081E2 ADD R1,R1,#+204 \ 000000D8 DFFFFFEA B ??init_time_zone_4 361 break; 362 case 18: 363 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC D81081E2 ADD R1,R1,#+216 \ 000000E0 DDFFFFEA B ??init_time_zone_4 364 break; 365 case 19: 366 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 E41081E2 ADD R1,R1,#+228 \ 000000E8 DBFFFFEA B ??init_time_zone_4 367 break; 368 case 20: 369 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000EC 601F81E2 ADD R1,R1,#+384 \ 000000F0 D9FFFFEA B ??init_time_zone_4 370 break; 371 case 21: 372 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 000000F4 F01081E2 ADD R1,R1,#+240 \ 000000F8 D7FFFFEA B ??init_time_zone_4 373 break; 374 case 22: 375 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 000000FC FC1081E2 ADD R1,R1,#+252 \ 00000100 D5FFFFEA B ??init_time_zone_4 376 break; 377 case 23: 378 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000104 421F81E2 ADD R1,R1,#+264 \ 00000108 D3FFFFEA B ??init_time_zone_4 379 break; 380 case 24: 381 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000010C 451F81E2 ADD R1,R1,#+276 \ 00000110 D1FFFFEA B ??init_time_zone_4 382 break; 383 case 25: 384 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000114 481F81E2 ADD R1,R1,#+288 \ 00000118 CFFFFFEA B ??init_time_zone_4 385 break; 386 case 26: 387 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000011C 4B1F81E2 ADD R1,R1,#+300 \ 00000120 CDFFFFEA B ??init_time_zone_4 388 break; 389 case 27: 390 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000124 4E1F81E2 ADD R1,R1,#+312 \ 00000128 CBFFFFEA B ??init_time_zone_4 391 break; 392 case 28: 393 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000012C 511F81E2 ADD R1,R1,#+324 \ 00000130 C9FFFFEA B ??init_time_zone_4 394 break; 395 case 29: 396 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000134 541F81E2 ADD R1,R1,#+336 \ 00000138 C7FFFFEA B ??init_time_zone_4 397 break; 398 case 30: 399 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 571F81E2 ADD R1,R1,#+348 \ 00000140 C5FFFFEA B ??init_time_zone_4 400 break; 401 case 31: 402 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 5A1F81E2 ADD R1,R1,#+360 \ 00000148 C3FFFFEA B ??init_time_zone_4 403 break; 404 case 32: 405 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 5D1F81E2 ADD R1,R1,#+372 \ 00000150 160000EF SWI +22 406 break; 407 } 408 } \ ??init_time_zone_35: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 S_ICONS + 5716 \ 00000160 ........ 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,??DataTable34 ;; 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 E83090E5 LDR R3,[R0, #+232] \ 00000024 FC10A0E3 MOV R1,#+252 \ 00000028 4C1D81E3 ORR R1,R1,#0x1300 \ 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,??DataTable34 ;; S_ICONS \ 00000008 B00194E5 LDR R0,[R4, #+432] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 433 { 434 vibra_count=Vibra_cc; \ 00000014 24009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 7C0184E5 STR R0,[R4, #+380] 435 start_vibra2(); \ 00000020 ........ BL start_vibra2 436 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable11 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 B30F41E2 SUB R0,R1,#+716 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 437 } 438 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000040 ........ 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,??DataTable11 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 5764 \ 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 + 5764 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,??DataTable34 ;; S_ICONS 459 if(maximum==60) \ 00000008 0050A0E3 MOV R5,#+0 \ 0000000C 500194E5 LDR R0,[R4, #+336] \ 00000010 010080E2 ADD R0,R0,#+1 \ 00000014 500184E5 STR R0,[R4, #+336] \ 00000018 3C0050E3 CMP R0,#+60 \ 0000001C 0700001A BNE ??xstatuse_0 460 { 461 if(saver_on) reftes(); \ 00000020 F80094E5 LDR R0,[R4, #+248] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 0000000A BEQ ??xstatuse_1 \ 0000002C ........ _BLF reftes,??reftes??rA 462 maximum=0; 463 minimum_xstatus++; \ ??xstatuse_1: \ 00000030 4C0194E5 LDR R0,[R4, #+332] \ 00000034 505184E5 STR R5,[R4, #+336] \ 00000038 010080E2 ADD R0,R0,#+1 \ 0000003C 4C0184E5 STR R0,[R4, #+332] 464 } 465 if(minimum_xstatus==60) \ ??xstatuse_0: \ 00000040 4C0194E5 LDR R0,[R4, #+332] \ 00000044 3C0050E3 CMP R0,#+60 \ 00000048 3080BD18 POPNE {R4,R5,PC} 466 { 467 minimum_xstatus=0; 468 xstatus_old++; \ 0000004C 480194E5 LDR R0,[R4, #+328] \ 00000050 4C5184E5 STR R5,[R4, #+332] \ 00000054 010080E2 ADD R0,R0,#+1 \ 00000058 480184E5 STR R0,[R4, #+328] 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 F0402DE9 PUSH {R4-R7,LR} 481 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable34 ;; S_ICONS \ 00000008 84609FE5 LDR R6,??x_zstatus_0 ;; x_zstatus \ 0000000C 9400A0E3 MOV R0,#+148 \ 00000010 580D80E3 ORR R0,R0,#0x1600 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 8C0194E5 LDR R0,[R4, #+396] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0F00001A BNE ??x_zstatus_1 482 { 483 xstatuse(); \ 00000028 ........ BL xstatuse 484 #ifdef NEWSGOLD 485 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C 540194E5 LDR R0,[R4, #+340] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 070000BA BLT ??x_zstatus_2 486 { 487 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable14 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 A400A0E3 MOV R0,#+164 \ 00000048 580D80E3 ORR R0,R0,#0x1600 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 4D0000EF SWI +77 488 tracktimer=0; \ 00000054 547184E5 STR R7,[R4, #+340] 489 } 490 tracktimer++; \ ??x_zstatus_2: \ 00000058 540194E5 LDR R0,[R4, #+340] \ 0000005C 010080E2 ADD R0,R0,#+1 \ 00000060 540184E5 STR R0,[R4, #+340] 491 #endif 492 GBS_StartTimerProc(&mytmr4, 216, x_zstatus); \ 00000064 050000EA B ??x_zstatus_3 493 } 494 else 495 { 496 if(!Pause_Time) \ ??x_zstatus_1: \ 00000068 28009FE5 LDR R0,??x_zstatus_0+0x4 ;; Pause_Time \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 000050E3 CMP R0,#+0 497 { 498 xstatus_old=0; \ 00000074 48718405 STREQ R7,[R4, #+328] 499 minimum_xstatus=0; \ 00000078 4C718405 STREQ R7,[R4, #+332] 500 maximum=0; \ 0000007C 50718405 STREQ R7,[R4, #+336] 501 } 502 GBS_StartTimerProc(&mytmr4, 216, x_zstatus); \ ??x_zstatus_3: \ 00000080 0620A0E1 MOV R2,R6 \ 00000084 D810A0E3 MOV R1,#+216 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 4D0000EF SWI +77 503 } 504 } \ 00000090 F080BDE8 POP {R4-R7,PC} ;; return \ ??x_zstatus_0: \ 00000094 ........ DC32 x_zstatus \ 00000098 ........ 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 80109FE5 LDR R1,??Draw22_0 ;; `?` \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable34 ;; S_ICONS \ 0000000C B400A0E3 MOV R0,#+180 \ 00000010 580D80E3 ORR R0,R0,#0x1600 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 8C0194E5 LDR R0,[R4, #+396] \ 0000001C 030050E3 CMP R0,#+3 \ 00000020 0700001A BNE ??Draw22_1 512 { 513 sprintf(hah,"Online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); \ 00000024 500194E5 LDR R0,[R4, #+336] \ 00000028 01002DE9 PUSH {R0} \ 0000002C 4C3194E5 LDR R3,[R4, #+332] \ 00000030 482194E5 LDR R2,[R4, #+328] \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 160000EF SWI +22 \ 0000003C 04D08DE2 ADD SP,SP,#+4 \ 00000040 020000EA B ??Draw22_2 514 } 515 else 516 sprintf(hah,"Offline"); \ ??Draw22_1: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 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: \ 00000050 ........ LDR R0,??DataTable20 ;; spaco1 \ 00000054 0520A0E1 MOV R2,R5 \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 01002DE9 PUSH {R0} \ 00000060 ........ LDR R0,??DataTable21 ;; fonto \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 01002DE9 PUSH {R0} \ 0000006C E83094E5 LDR R3,[R4, #+232] \ 00000070 14009FE5 LDR R0,??Draw22_0+0x4 ;; date_Y2 \ 00000074 001090E5 LDR R1,[R0, #+0] \ 00000078 10009FE5 LDR R0,??Draw22_0+0x8 ;; date_X2 \ 0000007C 000090E5 LDR R0,[R0, #+0] \ 00000080 ........ _BLF PrintField,??PrintField??rA 521 #endif 522 } \ 00000084 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??Draw22_0: \ 00000088 ........ DC32 `?` \ 0000008C ........ DC32 date_Y2 \ 00000090 ........ 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,??DataTable34 ;; S_ICONS \ 00000008 380194E5 LDR R0,[R4, #+312] \ 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 54109FE5 LDR R1,??DrawAutoMSG_0 ;; `?` \ 00000028 B400A0E3 MOV R0,#+180 \ 0000002C 580D80E3 ORR R0,R0,#0x1600 \ 00000030 045080E0 ADD R5,R0,R4 \ 00000034 700040E2 SUB R0,R0,#+112 \ 00000038 042080E0 ADD R2,R0,R4 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 160000EF SWI +22 536 PrintField(auto_x,auto_y, hah, align, fonto, spaco1); \ 00000044 ........ LDR R0,??DataTable20 ;; spaco1 \ 00000048 0520A0E1 MOV R2,R5 \ 0000004C 000090E5 LDR R0,[R0, #+0] \ 00000050 01002DE9 PUSH {R0} \ 00000054 ........ LDR R0,??DataTable21 ;; fonto \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 01002DE9 PUSH {R0} \ 00000060 E83094E5 LDR R3,[R4, #+232] \ 00000064 18009FE5 LDR R0,??DrawAutoMSG_0+0x4 ;; auto_y \ 00000068 001090E5 LDR R1,[R0, #+0] \ 0000006C 14009FE5 LDR R0,??DrawAutoMSG_0+0x8 ;; auto_x \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 ........ _BLF PrintField,??PrintField??rA \ 00000078 08D08DE2 ADD SP,SP,#+8 537 } 538 } \ 0000007C 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawAutoMSG_0: \ 00000080 ........ DC32 `?` \ 00000084 ........ DC32 auto_y \ 00000088 ........ 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 F0432DE9 PUSH {R4-R9,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0070A0E1 MOV R7,R0 \ 0000000C 0140A0E1 MOV R4,R1 551 WSHDR *ws=AllocWS(64); 552 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON)//0xFFF \ 00000010 ........ LDR R6,??DataTable34 ;; S_ICONS \ 00000014 4000A0E3 MOV R0,#+64 \ 00000018 250100EF SWI +293 \ 0000001C F200D4E1 LDRSH R0,[R4, #+2] \ 00000020 0050A0E3 MOV R5,#+0 \ 00000024 FF10A0E3 MOV R1,#+255 \ 00000028 F01E81E3 ORR R1,R1,#0xF00 \ 0000002C 010050E1 CMP R0,R1 \ 00000030 0E005013 CMPNE R0,#+14 \ 00000034 3900001A 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 28809DE5 LDR R8,[SP, #+40] 558 // ws_2str(ws,inp_away_msg2,ec.maxlen); 559 int i=0; 560 for(i=0;iwsbody[0];i++) \ 00000050 0090A0E3 MOV R9,#+0 \ 00000054 140000EF SWI +20 \ 00000058 340186E5 STR R0,[R6, #+308] \ 0000005C 000098E5 LDR R0,[R8, #+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 890080E0 ADD R0,R0,R9, LSL #+1 \ 00000074 B200D0E1 LDRH R0,[R0, #+2] \ 00000078 ........ _BLF char16to8,??char16to8??rA \ 0000007C 341196E5 LDR R1,[R6, #+308] \ 00000080 0100C9E7 STRB R0,[R9, +R1] \ 00000084 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_1: \ 00000088 000098E5 LDR R0,[R8, #+0] \ 0000008C B010D0E1 LDRH R1,[R0, #+0] \ 00000090 010059E1 CMP R9,R1 \ 00000094 F5FFFFBA BLT ??input_awaymsg_onkey_3 562 *(inp_away_msg2+i++)=0; \ ??input_awaymsg_onkey_2: \ 00000098 340196E5 LDR R0,[R6, #+308] 563 #ifdef kluchnik 564 char *s; 565 ExtractEditControl(data,4,&ec); \ 0000009C 0D20A0E1 MOV R2,SP \ 000000A0 0050C9E7 STRB R5,[R9, +R0] \ 000000A4 0410A0E3 MOV R1,#+4 \ 000000A8 0700A0E1 MOV R0,R7 \ 000000AC 690100EF SWI +361 566 ws=ec.pWS; 567 s=malloc(ec.maxlen); \ 000000B0 F801DDE1 LDRSH R0,[SP, #+24] \ 000000B4 28709DE5 LDR R7,[SP, #+40] 568 for(i=0;iwsbody[0];i++) \ 000000B8 0090A0E3 MOV R9,#+0 \ 000000BC 140000EF SWI +20 \ 000000C0 0080A0E1 MOV R8,R0 \ 000000C4 000097E5 LDR R0,[R7, #+0] \ 000000C8 B000D0E1 LDRH R0,[R0, #+0] \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 0500001A BNE ??input_awaymsg_onkey_4 \ 000000D4 080000EA B ??input_awaymsg_onkey_5 569 *(s+i)=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_6: \ 000000D8 890080E0 ADD R0,R0,R9, LSL #+1 \ 000000DC B200D0E1 LDRH R0,[R0, #+2] \ 000000E0 ........ _BLF char16to8,??char16to8??rA \ 000000E4 0800C9E7 STRB R0,[R9, +R8] \ 000000E8 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_4: \ 000000EC 000097E5 LDR R0,[R7, #+0] \ 000000F0 B010D0E1 LDRH R1,[R0, #+0] \ 000000F4 010059E1 CMP R9,R1 \ 000000F8 F6FFFFBA BLT ??input_awaymsg_onkey_6 570 *(s+i++)=0; \ ??input_awaymsg_onkey_5: \ 000000FC 0850C9E7 STRB R5,[R9, +R8] 571 strcat(inp_away_msg2,s); \ 00000100 340196E5 LDR R0,[R6, #+308] \ 00000104 0810A0E1 MOV R1,R8 \ 00000108 170000EF SWI +23 572 #endif 573 inp_away_m=1; \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 580186E5 STR R0,[R6, #+344] 574 575 UpdateCLheader(); \ 00000114 ........ BL UpdateCLheader 576 // GeneralFunc_flag1(input_awaymsg_id,1); 577 GeneralFuncF1(1); \ 00000118 0100A0E3 MOV R0,#+1 \ 0000011C 3B0100EF SWI +315 578 } 579 580 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 00000120 F200D4E1 LDRSH R0,[R4, #+2] \ 00000124 010050E3 CMP R0,#+1 \ 00000128 0C005013 CMPNE R0,#+12 \ 0000012C 0200001A BNE ??input_awaymsg_onkey_7 581 { 582 msg_away_timer=0; \ 00000130 305186E5 STR R5,[R6, #+304] 583 away_m=0; \ 00000134 385186E5 STR R5,[R6, #+312] 584 // automsg=0; 585 UpdateCLheader(); \ 00000138 ........ BL UpdateCLheader 586 } 587 return(0); \ ??input_awaymsg_onkey_7: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 2CD08DE2 ADD SP,SP,#+44 \ 00000144 F083BDE8 POP {R4-R9,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 0020A0E3 MOV R2,#+0 \ 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 F0412DE9 PUSH {R4-R8,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 C4519FE5 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 628F8FE2 ADR R8,??InputAwayMsg_0 ;; "%t" \ 00000040 4C2085E2 ADD R2,R5,#+76 \ 00000044 0810A0E1 MOV R1,R8 \ 00000048 0600A0E1 MOV R0,R6 \ 0000004C 240100EF SWI +292 647 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); \ 00000050 2000A0E3 MOV R0,#+32 \ 00000054 01002DE9 PUSH {R0} \ 00000058 0630A0E1 MOV R3,R6 \ 0000005C 0020A0E3 MOV R2,#+0 \ 00000060 0110A0E3 MOV R1,#+1 \ 00000064 04008DE2 ADD R0,SP,#+4 \ 00000068 650100EF SWI +357 648 AddEditControlToEditQend(eq,&ec,ma); \ 0000006C 0720A0E1 MOV R2,R7 \ 00000070 04108DE2 ADD R1,SP,#+4 \ 00000074 0400A0E1 MOV R0,R4 \ 00000078 660100EF SWI +358 649 650 PrepareEditControl(&ec); \ 0000007C 04008DE2 ADD R0,SP,#+4 \ 00000080 640100EF SWI +356 651 CutWSTR(wss,0); \ 00000084 0010A0E3 MOV R1,#+0 \ 00000088 0600A0E1 MOV R0,R6 \ 0000008C 260100EF SWI +294 652 ascii2ws(wss,away_msg2); \ 00000090 ........ LDR R1,??DataTable23 ;; away_msg2 \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 ........ _BLF ascii2ws,??ascii2ws??rA 653 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 0000009C FF00A0E3 MOV R0,#+255 \ 000000A0 01002DE9 PUSH {R0} \ 000000A4 0630A0E1 MOV R3,R6 \ 000000A8 4020A0E3 MOV R2,#+64 \ 000000AC 0310A0E3 MOV R1,#+3 \ 000000B0 08008DE2 ADD R0,SP,#+8 \ 000000B4 650100EF SWI +357 654 AddEditControlToEditQend(eq,&ec,ma); \ 000000B8 0720A0E1 MOV R2,R7 \ 000000BC 08108DE2 ADD R1,SP,#+8 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 660100EF SWI +358 655 #ifdef kluchnik 656 PrepareEditControl(&ec); \ 000000C8 08008DE2 ADD R0,SP,#+8 \ 000000CC 640100EF SWI +356 657 wsprintf(wss,"%t","Сообщение 2:\n"); \ 000000D0 582085E2 ADD R2,R5,#+88 \ 000000D4 0810A0E1 MOV R1,R8 \ 000000D8 0600A0E1 MOV R0,R6 \ 000000DC 240100EF SWI +292 658 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); \ 000000E0 2000A0E3 MOV R0,#+32 \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 0630A0E1 MOV R3,R6 \ 000000EC 0020A0E3 MOV R2,#+0 \ 000000F0 0110A0E3 MOV R1,#+1 \ 000000F4 0C008DE2 ADD R0,SP,#+12 \ 000000F8 650100EF SWI +357 659 AddEditControlToEditQend(eq,&ec,ma); \ 000000FC 0720A0E1 MOV R2,R7 \ 00000100 0C108DE2 ADD R1,SP,#+12 \ 00000104 0400A0E1 MOV R0,R4 \ 00000108 660100EF SWI +358 660 661 ascii2ws(wss,"когда смогу отвечу:)"); \ 0000010C 681085E2 ADD R1,R5,#+104 \ 00000110 0600A0E1 MOV R0,R6 \ 00000114 ........ _BLF ascii2ws,??ascii2ws??rA 662 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 00000118 FF00A0E3 MOV R0,#+255 \ 0000011C 01002DE9 PUSH {R0} \ 00000120 0630A0E1 MOV R3,R6 \ 00000124 4020A0E3 MOV R2,#+64 \ 00000128 0310A0E3 MOV R1,#+3 \ 0000012C 10008DE2 ADD R0,SP,#+16 \ 00000130 650100EF SWI +357 663 AddEditControlToEditQend(eq,&ec,ma); \ 00000134 0720A0E1 MOV R2,R7 \ 00000138 10108DE2 ADD R1,SP,#+16 \ 0000013C 0400A0E1 MOV R0,R4 \ 00000140 660100EF SWI +358 664 #endif 665 patch_header(&input_awaymsg_hdr); \ 00000144 0060A0E3 MOV R6,#+0 \ 00000148 B863C5E1 STRH R6,[R5, #+56] \ 0000014C 1800A0E3 MOV R0,#+24 \ 00000150 BA03C5E1 STRH R0,[R5, #+58] \ 00000154 888100EF SWI +33160 \ 00000158 010040E2 SUB R0,R0,#+1 \ 0000015C BC03C5E1 STRH R0,[R5, #+60] \ 00000160 8A8100EF SWI +33162 \ 00000164 170080E2 ADD R0,R0,#+23 \ 00000168 BE03C5E1 STRH R0,[R5, #+62] 666 patch_input(&input_awaymsg_desc); \ 0000016C B861C5E1 STRH R6,[R5, #+24] \ 00000170 8A8100EF SWI +33162 \ 00000174 190080E2 ADD R0,R0,#+25 \ 00000178 BA01C5E1 STRH R0,[R5, #+26] \ 0000017C 888100EF SWI +33160 \ 00000180 010040E2 SUB R0,R0,#+1 \ 00000184 BC01C5E1 STRH R0,[R5, #+28] \ 00000188 898100EF SWI +33161 \ 0000018C 0060A0E1 MOV R6,R0 \ 00000190 8B8100EF SWI +33163 \ 00000194 000046E0 SUB R0,R6,R0 \ 00000198 010040E2 SUB R0,R0,#+1 \ 0000019C BE01C5E1 STRH R0,[R5, #+30] 667 668 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 000001A0 0000A0E3 MOV R0,#+0 \ 000001A4 01002DE9 PUSH {R0} \ 000001A8 0130A0E3 MOV R3,#+1 \ 000001AC 0420A0E1 MOV R2,R4 \ 000001B0 381085E2 ADD R1,R5,#+56 \ 000001B4 0500A0E1 MOV R0,R5 \ 000001B8 670100EF SWI +359 \ 000001BC 10109FE5 LDR R1,??InputAwayMsg_0+0x8 ;; input_awaymsg_id \ 000001C0 000081E5 STR R0,[R1, #+0] 669 } \ 000001C4 40D08DE2 ADD SP,SP,#+64 \ 000001C8 F081BDE8 POP {R4-R8,PC} ;; return \ ??InputAwayMsg_0: \ 000001CC 25740000 DC8 "%t",+0 \ 000001D0 ........ DC32 input_awaymsg_desc \ 000001D4 ........ DC32 input_awaymsg_id 670 671 672 //////////////////////////uptime////////////////////////// 673 #ifdef ELKA \ In segment CODE, align 4, keep-with-next 674 void SLI_On() 675 { \ SLI_On: \ 00000000 10402DE9 PUSH {R4,LR} 676 // SLI_STATUS=0; 677 if (Is_SLI_On) \ 00000004 ........ LDR R4,??DataTable34 ;; S_ICONS \ 00000008 000194E5 LDR R0,[R4, #+256] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100000A BEQ ??SLI_On_0 678 SLI_SetState(1); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 360000EF SWI +54 679 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_Off); \ ??SLI_On_0: \ 0000001C 14209FE5 LDR R2,??SLI_On_1 ;; SLI_Off \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 7400A0E3 MOV R0,#+116 \ 00000028 580D80E3 ORR R0,R0,#0x1600 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 680 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SLI_On_1: \ 00000038 ........ DC32 SLI_Off 681 \ In segment CODE, align 4, keep-with-next 682 void SLI_Off() 683 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 684 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 685 if (total_unread) \ 0000000C ........ LDR R0,??DataTable34 ;; S_ICONS \ 00000010 B01190E5 LDR R1,[R0, #+432] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0600000A BEQ ??SLI_Off_0 686 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 \ 0000001C 20209FE5 LDR R2,??SLI_Off_1 ;; SLI_On \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 7430A0E3 MOV R3,#+116 \ 00000028 583D83E3 ORR R3,R3,#0x1600 \ 0000002C 000083E0 ADD R0,R3,R0 \ 00000030 4D0000EF SWI +77 \ 00000034 0080BDE8 POP {PC} 687 else 688 // SLI_STATUS=1; 689 SLI_SetState(0); \ ??SLI_Off_0: \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 360000EF SWI +54 690 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??SLI_Off_1: \ 00000044 ........ DC32 SLI_On 691 \ In segment CODE, align 4, keep-with-next 692 void SLI_check() 693 { 694 if (total_unread) \ SLI_check: \ 00000000 14009FE5 LDR R0,??SLI_check_0 ;; S_ICONS + 432 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0080BD08 POPEQ {PC} 695 SLI_On(); \ 00000014 ........ BL SLI_On 696 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_check_0: \ 0000001C ........ DC32 S_ICONS + 432 697 \ In segment CODE, align 4, keep-with-next 698 void SLI_Timer() 699 { 700 GBS_StartTimerProc(&mytmr, 262, SLI_check); //262*SLI_time \ SLI_Timer: \ 00000000 14209FE5 LDR R2,??SLI_Timer_0 ;; SLI_check \ 00000004 14009FE5 LDR R0,??SLI_Timer_0+0x4 ;; S_ICONS + 5748 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0610A0E3 MOV R1,#+6 \ 00000010 401F81E3 ORR R1,R1,#0x100 \ 00000014 4D0000EF SWI +77 701 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_Timer_0: \ 0000001C ........ DC32 SLI_check \ 00000020 ........ DC32 S_ICONS + 5748 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,??DataTable27 ;; 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); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 978 else 979 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 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,??DataTable56 ;; S_ICONS \ 00000010 7C1190E5 LDR R1,[R0, #+380] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 7C1180E5 STR R1,[R0, #+380] \ 0000001C 0080BD08 POPEQ {PC} 988 { 989 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 4410A0E3 MOV R1,#+68 \ 00000028 601D81E3 ORR R1,R1,#0x1800 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable44 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 990 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 991 else 992 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 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,??DataTable41 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1006 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable44 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; S_ICONS + 6212 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 1007 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1008 else 1009 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 1010 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 S_ICONS + 6212 \ 00000038 ........ 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,??DataTable56 ;; S_ICONS \ 00000010 7C1190E5 LDR R1,[R0, #+380] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 7C1180E5 STR R1,[R0, #+380] \ 0000001C 0080BD08 POPEQ {PC} 1017 { 1018 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 4410A0E3 MOV R1,#+68 \ 00000028 601D81E3 ORR R1,R1,#0x1800 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable44 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra2_1 1019 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1020 else 1021 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 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,??DataTable56 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 641190E5 LDR R1,[R0, #+356] \ 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,??DataTable48 ;; 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,??DataTable56 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 800184E5 STR R0,[R4, #+384] \ 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 840194E5 LDR R0,[R4, #+388] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 840184E5 STR R0,[R4, #+388] \ 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 ........ LDR R4,??DataTable56 ;; S_ICONS \ 00000008 98719FE5 LDR R7,??UpdateCLheader_0+0x14 ;; key_clmenu_sk_r \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 A400A0E3 MOV R0,#+164 \ 00000014 600D80E3 ORR R0,R0,#0x1800 \ 00000018 045080E0 ADD R5,R0,R4 \ 0000001C 300040E2 SUB R0,R0,#+48 \ 00000020 046080E0 ADD R6,R0,R4 \ 00000024 CF8FA0E3 MOV R8,#+828 \ 00000028 040088E0 ADD R0,R8,R4 \ 0000002C 1B0000EF SWI +27 \ 00000030 000050E3 CMP R0,#+0 \ 00000034 0900000A BEQ ??UpdateCLheader_1 1424 { 1425 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000038 401087E2 ADD R1,R7,#+64 \ 0000003C 0600A0E1 MOV R0,R6 \ 00000040 1A0000EF SWI +26 1426 strcat(clm_hdr_text,ContactT9Key); \ 00000044 041088E0 ADD R1,R8,R4 \ 00000048 0600A0E1 MOV R0,R6 \ 0000004C 170000EF SWI +23 1427 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000050 0710A0E1 MOV R1,R7 \ 00000054 0500A0E1 MOV R0,R5 \ 00000058 1A0000EF SWI +26 \ 0000005C F381BDE8 POP {R0,R1,R4-R8,PC} 1428 } 1429 else 1430 { 1431 switch(TIME_OR_MSG) \ ??UpdateCLheader_1: \ 00000060 ........ LDR R8,??DataTable51 ;; TIME_OR_MSG \ 00000064 D02194E5 LDR R2,[R4, #+464] \ 00000068 008098E5 LDR R8,[R8, #+0] \ 0000006C CC0194E5 LDR R0,[R4, #+460] \ 00000070 B03194E5 LDR R3,[R4, #+432] \ 00000074 141194E5 LDR R1,[R4, #+276] \ 00000078 000058E3 CMP R8,#+0 \ 0000007C 0600000A BEQ ??UpdateCLheader_2 \ 00000080 018058E2 SUBS R8,R8,#+1 \ 00000084 1000000A BEQ ??UpdateCLheader_3 \ 00000088 018058E2 SUBS R8,R8,#+1 \ 0000008C 1200000A BEQ ??UpdateCLheader_4 \ 00000090 018058E2 SUBS R8,R8,#+1 \ 00000094 1500000A BEQ ??UpdateCLheader_5 \ 00000098 390000EA B ??UpdateCLheader_6 1432 { 1433 case 0: 1434 { 1435 TTime the; 1436 GetDateTime(NULL,&the); \ ??UpdateCLheader_2: \ 0000009C 0D10A0E1 MOV R1,SP \ 000000A0 0000A0E3 MOV R0,#+0 \ 000000A4 B40000EF SWI +180 1437 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ 000000A8 0100DDE5 LDRB R0,[SP, #+1] \ 000000AC 342087E2 ADD R2,R7,#+52 \ 000000B0 041087E2 ADD R1,R7,#+4 \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 0430DDE5 LDRB R3,[SP, #+4] \ ??UpdateCLheader_7: \ 000000BC 0600A0E1 MOV R0,R6 \ 000000C0 160000EF SWI +22 \ 000000C4 04D08DE2 ADD SP,SP,#+4 \ 000000C8 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: \ 000000CC 02002DE9 PUSH {R1} \ 000000D0 342087E2 ADD R2,R7,#+52 \ 000000D4 141087E2 ADD R1,R7,#+20 \ 000000D8 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: \ 000000DC 01002DE9 PUSH {R0} \ 000000E0 0230A0E1 MOV R3,R2 \ 000000E4 342087E2 ADD R2,R7,#+52 \ 000000E8 141087E2 ADD R1,R7,#+20 \ 000000EC 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: \ 000000F0 02002DE9 PUSH {R1} \ 000000F4 08002DE9 PUSH {R3} \ 000000F8 0030A0E1 MOV R3,R0 \ 000000FC 201087E2 ADD R1,R7,#+32 \ 00000100 0600A0E1 MOV R0,R6 \ 00000104 160000EF SWI +22 1448 if(away_m) strcat(clm_hdr_text,"[A]"); \ 00000108 380194E5 LDR R0,[R4, #+312] \ 0000010C 08D08DE2 ADD SP,SP,#+8 \ 00000110 000050E3 CMP R0,#+0 \ 00000114 0200000A BEQ ??UpdateCLheader_8 \ 00000118 1D1F8FE2 ADR R1,??UpdateCLheader_0 ;; "[A]" \ 0000011C 0600A0E1 MOV R0,R6 \ 00000120 170000EF SWI +23 1449 if(CurrentPrivateStatus==1) strcat(clm_hdr_text,"[I]"); \ ??UpdateCLheader_8: \ 00000124 780194E5 LDR R0,[R4, #+376] \ 00000128 010050E3 CMP R0,#+1 \ 0000012C 0200001A BNE ??UpdateCLheader_9 \ 00000130 181F8FE2 ADR R1,??UpdateCLheader_0+0x4 ;; "[I]" \ 00000134 0600A0E1 MOV R0,R6 \ 00000138 170000EF SWI +23 1450 if(Is_Vibra_Enabled) strcat(clm_hdr_text,"[V]"); \ ??UpdateCLheader_9: \ 0000013C 640194E5 LDR R0,[R4, #+356] \ 00000140 000050E3 CMP R0,#+0 \ 00000144 0200000A BEQ ??UpdateCLheader_10 \ 00000148 131F8FE2 ADR R1,??UpdateCLheader_0+0x8 ;; "[V]" \ 0000014C 0600A0E1 MOV R0,R6 \ 00000150 170000EF SWI +23 1451 if(Is_Sounds_Enabled) strcat(clm_hdr_text,"[S]"); \ ??UpdateCLheader_10: \ 00000154 680194E5 LDR R0,[R4, #+360] \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 0200000A BEQ ??UpdateCLheader_11 \ 00000160 0E1F8FE2 ADR R1,??UpdateCLheader_0+0xC ;; "[S]" \ 00000164 0600A0E1 MOV R0,R6 \ 00000168 170000EF SWI +23 1452 if(Is_Double_Vibra_On) strcat(clm_hdr_text,"[R]"); \ ??UpdateCLheader_11: \ 0000016C 100194E5 LDR R0,[R4, #+272] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0200000A BEQ ??UpdateCLheader_6 \ 00000178 091F8FE2 ADR R1,??UpdateCLheader_0+0x10 ;; "[R]" \ 0000017C 0600A0E1 MOV R0,R6 \ 00000180 170000EF SWI +23 1453 break; 1454 } 1455 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_6: \ 00000184 4C1087E2 ADD R1,R7,#+76 \ 00000188 0500A0E1 MOV R0,R5 \ 0000018C 1A0000EF SWI +26 1456 } 1457 } \ 00000190 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return \ ??UpdateCLheader_0: \ 00000194 5B415D00 DC8 "[A]" \ 00000198 5B495D00 DC8 "[I]" \ 0000019C 5B565D00 DC8 "[V]" \ 000001A0 5B535D00 DC8 "[S]" \ 000001A4 5B525D00 DC8 "[R]" \ 000001A8 ........ 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 + 828 \ 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 + 828 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,??DataTable56 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C CF0F85E2 ADD R0,R5,#+828 \ 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 3C43C035 STRBCC R4,[R0, #+828] 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,??DataTable56 ;; S_ICONS \ 00000008 CF0F84E2 ADD R0,R4,#+828 \ 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 3B13C015 STRBNE R1,[R0, #+827] 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,??DataTable56 ;; S_ICONS 1488 UpdateCLheader(); 1489 patch_header(&contactlist_menuhdr); \ 00000008 58609FE5 LDR R6,??create_contactlist_menu_0 ;; contactlist_menuhdr \ 0000000C ........ _BLF CountContacts,??CountContacts??rA \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 C44185E5 STR R4,[R5, #+452] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 B000C6E1 STRH R0,[R6, #+0] \ 00000024 1800A0E3 MOV R0,#+24 \ 00000028 B200C6E1 STRH R0,[R6, #+2] \ 0000002C 888100EF SWI +33160 \ 00000030 010040E2 SUB R0,R0,#+1 \ 00000034 B400C6E1 STRH R0,[R6, #+4] \ 00000038 8A8100EF SWI +33162 \ 0000003C 170080E2 ADD R0,R0,#+23 \ 00000040 B600C6E1 STRH R0,[R6, #+6] 1490 #ifdef USE_MLMENU 1491 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); \ 00000044 10002DE9 PUSH {R4} \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 0630A0E1 MOV R3,R6 \ 00000054 142086E2 ADD R2,R6,#+20 \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 170200EF SWI +535 \ 00000060 BC0185E5 STR R0,[R5, #+444] 1492 #else 1493 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 1494 #endif 1495 } \ 00000064 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000068 ........ 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 + 348 \ 00000028 001082E5 STR R1,[R2, #+0] 1507 pltop->dyn_pltop=XStatusesImgList; \ 0000002C ........ LDR R1,??DataTable55 ;; 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 + 348 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,??DataTable56 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 BC0196E5 LDR R0,[R6, #+444] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 1519 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 BC0196E5 LDR R0,[R6, #+444] \ 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 C41196E5 LDR R1,[R6, #+452] \ 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 C40186E5 STR R0,[R6, #+452] 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 BC0196E5 LDR R0,[R6, #+444] \ 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 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 1544 CLIST *t; 1545 int i; 1546 i=GetCurMenuItem(data); \ 00000008 8F0100EF SWI +399 1547 t=FindContactByN(i); \ 0000000C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000010 00A0A0E1 MOV R10,R0 1548 if (msg->keys==0x18) \ 00000014 08009DE5 LDR R0,[SP, #+8] \ 00000018 F200D0E1 LDRSH R0,[R0, #+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 D60000EA B ??contactlist_menu_onkey_2 1552 } 1553 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_1: \ 0000002C ........ LDR R6,??DataTable70 ;; S_ICONS \ 00000030 CF5FA0E3 MOV R5,#+828 \ 00000034 3D0050E3 CMP R0,#+61 \ 00000038 2400001A BNE ??contactlist_menu_onkey_3 1554 { 1555 if (t) \ 0000003C 00005AE3 CMP R10,#+0 \ 00000040 2C00000A BEQ ??contactlist_menu_onkey_4 1556 { 1557 if (t->isgroup) \ 00000044 08009AE5 LDR R0,[R10, #+8] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0700000A BEQ ??contactlist_menu_onkey_5 1558 { 1559 t->state^=0xFFFF; \ 00000050 B405DAE1 LDRH R0,[R10, #+84] \ 00000054 FF10A0E3 MOV R1,#+255 \ 00000058 FF1C81E3 ORR R1,R1,#0xFF00 \ 0000005C 000021E0 EOR R0,R1,R0 \ 00000060 B405CAE1 STRH R0,[R10, #+84] 1560 RecountMenu(t,1); \ 00000064 0110A0E3 MOV R1,#+1 \ 00000068 0A00A0E1 MOV R0,R10 \ 0000006C 200000EA B ??contactlist_menu_onkey_6 1561 return(-1); 1562 } 1563 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_5: \ 00000070 060085E0 ADD R0,R5,R6 \ 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 060085E0 ADD R0,R5,R6 \ 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 060085E0 ADD R0,R5,R6 \ 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 FE8FBDE8 POP {R1-R11,PC} 1580 } 1581 } 1582 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_9: \ 00000100 08009DE5 LDR R0,[SP, #+8] \ 00000104 ........ LDR R7,??DataTable63 ;; `?` \ 00000108 040090E5 LDR R0,[R0, #+4] \ 0000010C 6420A0E3 MOV R2,#+100 \ 00000110 582D82E3 ORR R2,R2,#0x1600 \ 00000114 062082E0 ADD R2,R2,R6 \ 00000118 04208DE5 STR R2,[SP, #+4] \ 0000011C 041090E5 LDR R1,[R0, #+4] \ 00000120 0090A0E3 MOV R9,#+0 \ 00000124 0140A0E3 MOV R4,#+1 \ 00000128 9320A0E3 MOV R2,#+147 \ 0000012C 402F82E3 ORR R2,R2,#0x100 \ 00000130 020051E1 CMP R1,R2 \ 00000134 A800001A BNE ??contactlist_menu_onkey_10 1583 { 1584 int key=msg->gbsmsg->submess; \ 00000138 088090E5 LDR R8,[R0, #+8] 1585 if ((key>='0')&&(key<='9')) \ 0000013C 300058E3 CMP R8,#+48 \ 00000140 070000BA BLT ??contactlist_menu_onkey_11 \ 00000144 3A0058E3 CMP R8,#+58 \ 00000148 1B0000AA BGE ??contactlist_menu_onkey_12 1586 { 1587 AddContactT9Key(key); \ 0000014C 0800A0E1 MOV R0,R8 \ 00000150 ........ BL AddContactT9Key 1588 RecountMenu(NULL,1); \ 00000154 0110A0E3 MOV R1,#+1 \ 00000158 0900A0E1 MOV R0,R9 \ 0000015C ........ BL RecountMenu \ 00000160 970000EA B ??contactlist_menu_onkey_13 1589 return(-1); 1590 } 1591 #ifdef ELKA 1592 if (key==VOL_UP_BUTTON) \ ??contactlist_menu_onkey_11: \ 00000164 0D0058E3 CMP R8,#+13 \ 00000168 1300001A BNE ??contactlist_menu_onkey_12 1593 //#else 1594 // if (key=='#') 1595 //#endif 1596 { 1597 char *small_info=malloc(256); \ 0000016C 400FA0E3 MOV R0,#+256 \ 00000170 140000EF SWI +20 \ 00000174 00B0A0E1 MOV R11,R0 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); \ 00000178 B400A0E3 MOV R0,#+180 \ 0000017C 600D80E3 ORR R0,R0,#0x1800 \ 00000180 060080E0 ADD R0,R0,R6 \ 00000184 01002DE9 PUSH {R0} \ 00000188 500196E5 LDR R0,[R6, #+336] \ 0000018C 1C1087E2 ADD R1,R7,#+28 \ 00000190 01002DE9 PUSH {R0} \ 00000194 4C3196E5 LDR R3,[R6, #+332] \ 00000198 482196E5 LDR R2,[R6, #+328] \ 0000019C 0B00A0E1 MOV R0,R11 \ 000001A0 160000EF SWI +22 1604 ShowMSG(1,(int)small_info); \ 000001A4 0B10A0E1 MOV R1,R11 \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 480100EF SWI +328 1605 mfree(small_info); \ 000001B0 0B00A0E1 MOV R0,R11 \ 000001B4 150000EF SWI +21 \ 000001B8 08D08DE2 ADD SP,SP,#+8 1606 } 1607 1608 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON) \ ??contactlist_menu_onkey_12: \ 000001BC 08009DE5 LDR R0,[SP, #+8] \ 000001C0 040090E5 LDR R0,[R0, #+4] \ 000001C4 080090E5 LDR R0,[R0, #+8] \ 000001C8 0E0050E3 CMP R0,#+14 \ 000001CC 0F00001A BNE ??contactlist_menu_onkey_14 1609 { 1610 if(!away_m) \ 000001D0 380196E5 LDR R0,[R6, #+312] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0800001A BNE ??contactlist_menu_onkey_15 1611 { 1612 // automsg=!automsg; 1613 away_m=!away_m; \ 000001DC 384186E5 STR R4,[R6, #+312] 1614 GBS_StopTimer(&away_tmr); \ 000001E0 04009DE5 LDR R0,[SP, #+4] \ 000001E4 440100EF SWI +324 1615 msg_away_timer=AUTO_ENGADE; \ 000001E8 ........ LDR R0,??DataTable61 ;; AUTO_ENGADE \ 000001EC 000090E5 LDR R0,[R0, #+0] \ 000001F0 300186E5 STR R0,[R6, #+304] 1616 away_timer(); \ 000001F4 ........ BL away_timer 1617 //main_d=1; 1618 // ShowMSG(1,(int)"Автоответчик включен!"); 1619 InputAwayMsg(); \ 000001F8 ........ BL InputAwayMsg \ 000001FC 010000EA B ??contactlist_menu_onkey_16 1620 } 1621 else 1622 { 1623 msg_away_timer=0; \ ??contactlist_menu_onkey_15: \ 00000200 309186E5 STR R9,[R6, #+304] 1624 away_m=!away_m; \ 00000204 389186E5 STR R9,[R6, #+312] 1625 //away_m=0; 1626 //automsg=!automsg; 1627 // ShowMSG(1,(int)"Автоответчик выключен!"); 1628 } 1629 UpdateCLheader(); \ ??contactlist_menu_onkey_16: \ 00000208 ........ BL UpdateCLheader 1630 RefreshGUI(); \ 0000020C 960100EF SWI +406 1631 } 1632 #endif 1633 if (key==GREEN_BUTTON) \ ??contactlist_menu_onkey_14: \ 00000210 0B0058E3 CMP R8,#+11 \ 00000214 0400001A BNE ??contactlist_menu_onkey_17 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; \ 00000218 240196E5 LDR R0,[R6, #+292] \ 0000021C 000050E3 CMP R0,#+0 \ 00000220 0040A013 MOVNE R4,#+0 \ 00000224 244186E5 STR R4,[R6, #+292] 1670 RecountMenu(NULL,1); \ 00000228 E00000EA B ??contactlist_menu_onkey_18 1671 #endif 1672 return(-1); 1673 } 1674 if (key==LEFT_BUTTON) \ ??contactlist_menu_onkey_17: \ 0000022C 3D0058E3 CMP R8,#+61 \ 00000230 1B00000A BEQ ??contactlist_menu_onkey_19 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=='*') \ 00000234 2A0058E3 CMP R8,#+42 \ 00000238 3100000A BEQ ??contactlist_menu_onkey_20 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=='#') \ 0000023C 230058E3 CMP R8,#+35 \ 00000240 5200001A BNE ??contactlist_menu_onkey_21 1741 { 1742 if(ActionResh) \ 00000244 F4039FE5 LDR R0,??contactlist_menu_onkey_22 ;; ActionResh \ 00000248 000090E5 LDR R0,[R0, #+0] \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 3900001A BNE ??contactlist_menu_onkey_23 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) \ 00000254 74009AE5 LDR R0,[R10, #+116] \ 00000258 000050E3 CMP R0,#+0 \ 0000025C 0200000A BEQ ??contactlist_menu_onkey_24 1770 { 1771 FreeLOGQ(&t->log); \ 00000260 74008AE2 ADD R0,R10,#+116 \ 00000264 ........ BL FreeLOGQ 1772 t->msg_count=0; \ 00000268 84908AE5 STR R9,[R10, #+132] 1773 } 1774 if(strlen(ContactT9Key)) \ ??contactlist_menu_onkey_24: \ 0000026C 060085E0 ADD R0,R5,R6 \ 00000270 1B0000EF SWI +27 \ 00000274 000050E3 CMP R0,#+0 \ 00000278 0200000A BEQ ??contactlist_menu_onkey_25 1775 ClearContactT9Key(); \ 0000027C 2010A0E3 MOV R1,#+32 \ 00000280 060085E0 ADD R0,R5,R6 \ 00000284 1D0100EF SWI +285 1776 t->isactive=0; \ ??contactlist_menu_onkey_25: \ 00000288 80908AE5 STR R9,[R10, #+128] 1777 RecountMenu(NULL,0); \ 0000028C 0010A0E3 MOV R1,#+0 \ 00000290 0100A0E1 MOV R0,R1 \ 00000294 3A0000EA B ??contactlist_menu_onkey_26 1778 } \ ??contactlist_menu_onkey_27: \ 00000298 64009AE5 LDR R0,[R10, #+100] \ 0000029C 000050E3 CMP R0,#+0 \ 000002A0 0900001A BNE ??contactlist_menu_onkey_28 \ ??contactlist_menu_onkey_19: \ 000002A4 00A09AE5 LDR R10,[R10, #+0] \ 000002A8 00005AE3 CMP R10,#+0 \ 000002AC F9FFFF1A BNE ??contactlist_menu_onkey_27 \ 000002B0 6DAF86E2 ADD R10,R6,#+436 \ ??contactlist_menu_onkey_29: \ 000002B4 00A09AE5 LDR R10,[R10, #+0] \ 000002B8 00005AE3 CMP R10,#+0 \ 000002BC 0200000A BEQ ??contactlist_menu_onkey_28 \ 000002C0 64009AE5 LDR R0,[R10, #+100] \ 000002C4 000050E3 CMP R0,#+0 \ 000002C8 F9FFFF0A BEQ ??contactlist_menu_onkey_29 \ ??contactlist_menu_onkey_28: \ 000002CC 10009AE5 LDR R0,[R10, #+16] \ 000002D0 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 B415D011 LDRHNE R1,[R0, #+84] \ 000002DC 00005113 CMPNE R1,#+0 \ 000002E0 B495C011 STRHNE R9,[R0, #+84] \ 000002E4 0110A0E3 MOV R1,#+1 \ 000002E8 0A00A0E1 MOV R0,R10 \ 000002EC ........ BL RecountMenu \ 000002F0 000064E2 RSB R0,R4,#+0 \ 000002F4 FE8FBDE8 POP {R1-R11,PC} \ ??contactlist_menu_onkey_30: \ 000002F8 5C009AE5 LDR R0,[R10, #+92] \ 000002FC 000050E3 CMP R0,#+0 \ 00000300 F1FFFF1A BNE ??contactlist_menu_onkey_28 \ ??contactlist_menu_onkey_20: \ 00000304 00A09AE5 LDR R10,[R10, #+0] \ 00000308 00005AE3 CMP R10,#+0 \ 0000030C F9FFFF1A BNE ??contactlist_menu_onkey_30 \ 00000310 6DAF86E2 ADD R10,R6,#+436 \ ??contactlist_menu_onkey_31: \ 00000314 00A09AE5 LDR R10,[R10, #+0] \ 00000318 00005AE3 CMP R10,#+0 \ 0000031C 75FFFF0A BEQ ??contactlist_menu_onkey_4 \ 00000320 5C009AE5 LDR R0,[R10, #+92] \ 00000324 000050E3 CMP R0,#+0 \ 00000328 F9FFFF0A BEQ ??contactlist_menu_onkey_31 \ 0000032C E6FFFFEA B ??contactlist_menu_onkey_28 \ ??contactlist_menu_onkey_32: \ 00000330 80009AE5 LDR R0,[R10, #+128] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 0900001A BNE ??contactlist_menu_onkey_33 \ ??contactlist_menu_onkey_23: \ 0000033C 00A09AE5 LDR R10,[R10, #+0] \ 00000340 00005AE3 CMP R10,#+0 \ 00000344 F9FFFF1A BNE ??contactlist_menu_onkey_32 \ 00000348 6DAF86E2 ADD R10,R6,#+436 \ ??contactlist_menu_onkey_34: \ 0000034C 00A09AE5 LDR R10,[R10, #+0] \ 00000350 00005AE3 CMP R10,#+0 \ 00000354 67FFFF0A BEQ ??contactlist_menu_onkey_4 \ 00000358 80009AE5 LDR R0,[R10, #+128] \ 0000035C 000050E3 CMP R0,#+0 \ 00000360 F9FFFF0A BEQ ??contactlist_menu_onkey_34 \ ??contactlist_menu_onkey_33: \ 00000364 10009AE5 LDR R0,[R10, #+16] \ 00000368 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 0000036C 000050E3 CMP R0,#+0 \ 00000370 B415D011 LDRHNE R1,[R0, #+84] \ 00000374 00005113 CMPNE R1,#+0 \ 00000378 B495C011 STRHNE R9,[R0, #+84] \ 0000037C 0110A0E3 MOV R1,#+1 \ 00000380 0A00A0E1 MOV R0,R10 \ ??contactlist_menu_onkey_26: \ 00000384 ........ BL RecountMenu \ ??contactlist_menu_onkey_2: \ 00000388 0000E0E3 MVN R0,#+0 \ 0000038C FE8FBDE8 POP {R1-R11,PC} 1779 return(-1); 1780 } 1781 if (key==RIGHT_BUTTON) \ ??contactlist_menu_onkey_21: \ 00000390 3E0058E3 CMP R8,#+62 \ 00000394 0C00001A BNE ??contactlist_menu_onkey_35 1782 { 1783 //Послать запрос текста XStatus 1784 if (t) \ 00000398 00005AE3 CMP R10,#+0 \ 0000039C 0E00000A BEQ ??contactlist_menu_onkey_10 1785 { 1786 if (!t->isgroup) \ 000003A0 08009AE5 LDR R0,[R10, #+8] \ 000003A4 000050E3 CMP R0,#+0 \ 000003A8 0B00001A BNE ??contactlist_menu_onkey_10 1787 { 1788 FreeXText(t); \ 000003AC 0A00A0E1 MOV R0,R10 \ 000003B0 ........ _BLF FreeXText,??FreeXText??rA 1789 t->req_xtext=0; \ 000003B4 8C908AE5 STR R9,[R10, #+140] 1790 RequestXText(t->uin); \ 000003B8 0C009AE5 LDR R0,[R10, #+12] \ 000003BC ........ BL RequestXText 1791 RefreshGUI(); \ 000003C0 960100EF SWI +406 1792 return(-1); \ ??contactlist_menu_onkey_13: \ 000003C4 000064E2 RSB R0,R4,#+0 \ 000003C8 FE8FBDE8 POP {R1-R11,PC} 1793 } 1794 } 1795 } 1796 if (key==0x19) \ ??contactlist_menu_onkey_35: \ 000003CC 190058E3 CMP R8,#+25 \ 000003D0 0100001A BNE ??contactlist_menu_onkey_10 1797 { 1798 CreateScreenSelectGUI(); \ ??contactlist_menu_onkey_36: \ 000003D4 ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA 1799 // GeneralFuncF1(1); 1800 return(-1); \ 000003D8 F9FFFFEA B ??contactlist_menu_onkey_13 1801 } 1802 } 1803 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_10: \ 000003DC 08009DE5 LDR R0,[SP, #+8] \ 000003E0 652F84E3 ORR R2,R4,#0x194 \ 000003E4 040090E5 LDR R0,[R0, #+4] \ 000003E8 041090E5 LDR R1,[R0, #+4] \ 000003EC 020051E1 CMP R1,R2 \ 000003F0 9000001A BNE ??contactlist_menu_onkey_37 1804 { 1805 if (msg->gbsmsg->submess=='#') \ 000003F4 081090E5 LDR R1,[R0, #+8] \ 000003F8 230051E3 CMP R1,#+35 \ 000003FC F4FFFF0A BEQ ??contactlist_menu_onkey_36 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=='*') \ 00000400 2A0051E3 CMP R1,#+42 \ 00000404 1400001A BNE ??contactlist_menu_onkey_38 1823 { 1824 ClearContactT9Key(); \ 00000408 2010A0E3 MOV R1,#+32 \ 0000040C 060085E0 ADD R0,R5,R6 \ 00000410 1D0100EF SWI +285 1825 RecountMenu(NULL,1); \ 00000414 0110A0E3 MOV R1,#+1 \ 00000418 0900A0E1 MOV R0,R9 \ 0000041C ........ BL RecountMenu 1826 silenthide=1; \ 00000420 5C4186E5 STR R4,[R6, #+348] 1827 gipc.name_to=ipc_xtask_name; \ 00000424 F30F85E2 ADD R0,R5,#+972 \ 00000428 070080E0 ADD R0,R0,R7 \ 0000042C BC0086E5 STR R0,[R6, #+188] 1828 gipc.name_from=ipc_my_name; \ 00000430 EB0F85E2 ADD R0,R5,#+940 \ 00000434 070080E0 ADD R0,R0,R7 \ 00000438 C00086E5 STR R0,[R6, #+192] 1829 gipc.data=0; \ 0000043C C49086E5 STR R9,[R6, #+196] 1830 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000440 BC3086E2 ADD R3,R6,#+188 \ 00000444 0420A0E1 MOV R2,R4 \ 00000448 B010A0E3 MOV R1,#+176 \ 0000044C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000450 0900A0E3 MOV R0,#+9 \ 00000454 420C80E3 ORR R0,R0,#0x4200 \ 00000458 000100EF SWI +256 1831 } 1832 switch(msg->gbsmsg->submess) \ ??contactlist_menu_onkey_38: \ 0000045C 08009DE5 LDR R0,[SP, #+8] \ 00000460 DC819FE5 LDR R8,??contactlist_menu_onkey_22+0x4 ;; WriteDefSettings \ 00000464 040090E5 LDR R0,[R0, #+4] \ 00000468 080090E5 LDR R0,[R0, #+8] \ 0000046C 310040E2 SUB R0,R0,#+49 \ 00000470 050050E3 CMP R0,#+5 \ 00000474 6100008A BHI ??contactlist_menu_onkey_39 \ 00000478 011F8FE2 ADR R1,??contactlist_menu_onkey_0 \ 0000047C 0010D1E7 LDRB R1,[R1, R0] \ 00000480 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??contactlist_menu_onkey_0: \ 00000484 010E1C28 DC8 +1,+14,+28,+40 \ 00000488 364F0000 DC8 +54,+79,+0,+0 1833 { 1834 case '1': 1835 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??contactlist_menu_onkey_40: \ 0000048C 680196E5 LDR R0,[R6, #+360] \ 00000490 000050E3 CMP R0,#+0 \ 00000494 0040A013 MOVNE R4,#+0 \ 00000498 684186E5 STR R4,[R6, #+360] 1836 if(Is_Sounds_Enabled) \ 0000049C 000054E3 CMP R4,#+0 1837 ShowMSG(1,(int)"Sound 0n"); \ 000004A0 48108712 ADDNE R1,R7,#+72 1838 else 1839 ShowMSG(1,(int)"Sound Off"); \ 000004A4 54108702 ADDEQ R1,R7,#+84 \ 000004A8 0100A0E3 MOV R0,#+1 \ 000004AC 480100EF SWI +328 1840 SUBPROC((void*)WriteDefSettings); \ 000004B0 0800A0E1 MOV R0,R8 \ 000004B4 710100EF SWI +369 1841 RefreshGUI(); \ 000004B8 960100EF SWI +406 \ 000004BC 4F0000EA B ??contactlist_menu_onkey_39 1842 break; 1843 case '2': 1844 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??contactlist_menu_onkey_41: \ 000004C0 640196E5 LDR R0,[R6, #+356] \ 000004C4 000050E3 CMP R0,#+0 \ 000004C8 0040A013 MOVNE R4,#+0 \ 000004CC 644186E5 STR R4,[R6, #+356] 1845 SUBPROC((void*)WriteDefSettings); \ 000004D0 0800A0E1 MOV R0,R8 \ 000004D4 710100EF SWI +369 1846 RefreshGUI(); \ 000004D8 960100EF SWI +406 1847 if(Is_Vibra_Enabled) \ 000004DC 640196E5 LDR R0,[R6, #+356] \ 000004E0 000050E3 CMP R0,#+0 \ 000004E4 6C108702 ADDEQ R1,R7,#+108 1848 ShowMSG(1,(int)"Vibra On"); \ 000004E8 60108712 ADDNE R1,R7,#+96 \ ??contactlist_menu_onkey_42: \ 000004EC 0100A0E3 MOV R0,#+1 \ ??contactlist_menu_onkey_43: \ 000004F0 480100EF SWI +328 \ 000004F4 410000EA B ??contactlist_menu_onkey_39 1849 else 1850 ShowMSG(1,(int)"Vibra Off"); 1851 break; 1852 case '3': 1853 if(CurrentPrivateStatus!=1) \ ??contactlist_menu_onkey_44: \ 000004F8 780196E5 LDR R0,[R6, #+376] \ 000004FC 010050E3 CMP R0,#+1 \ 00000500 0400000A BEQ ??contactlist_menu_onkey_45 1854 { 1855 SetPrivateStatus(1);//Инвиз \ 00000504 0100A0E3 MOV R0,#+1 \ 00000508 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1856 ShowMSG(1,(int)"Инвиз включен"); \ 0000050C 781087E2 ADD R1,R7,#+120 \ 00000510 0400A0E1 MOV R0,R4 \ ??contactlist_menu_onkey_46: \ 00000514 F5FFFFEA B ??contactlist_menu_onkey_43 1857 } 1858 else 1859 { 1860 SetPrivateStatus(3);//не инвиз:) \ ??contactlist_menu_onkey_45: \ 00000518 0300A0E3 MOV R0,#+3 \ 0000051C ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1861 ShowMSG(1,(int)"Инвиз выключен"); \ 00000520 881087E2 ADD R1,R7,#+136 \ 00000524 F0FFFFEA B ??contactlist_menu_onkey_42 1862 } 1863 break; 1864 case '4': 1865 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??contactlist_menu_onkey_47: \ 00000528 100196E5 LDR R0,[R6, #+272] \ 0000052C 000050E3 CMP R0,#+0 \ 00000530 0040A013 MOVNE R4,#+0 \ 00000534 104186E5 STR R4,[R6, #+272] 1866 SUBPROC((void*)WriteDefSettings); \ 00000538 0800A0E1 MOV R0,R8 \ 0000053C 710100EF SWI +369 1867 RefreshGUI(); \ 00000540 960100EF SWI +406 1868 if(Is_Double_Vibra_On) \ 00000544 100196E5 LDR R0,[R6, #+272] \ 00000548 000050E3 CMP R0,#+0 1869 ShowMSG(1,(int)"Vibra rem On"); \ 0000054C 98108712 ADDNE R1,R7,#+152 \ 00000550 0100A013 MOVNE R0,#+1 \ 00000554 E5FFFF1A BNE ??contactlist_menu_onkey_43 1870 else 1871 ShowMSG(1,(int)"Vibra rem Off"); \ 00000558 A81087E2 ADD R1,R7,#+168 \ 0000055C E2FFFFEA B ??contactlist_menu_onkey_42 1872 break; 1873 case '5': 1874 { 1875 // t=(CLIST *)(&cltop); 1876 CLIST *cl; 1877 cl=(CLIST *)cltop; \ ??contactlist_menu_onkey_48: \ 00000560 B44196E5 LDR R4,[R6, #+436] \ 00000564 000054E3 CMP R4,#+0 \ 00000568 0800000A BEQ ??contactlist_menu_onkey_49 1878 while(cl) 1879 { 1880 if(cl->log) \ ??contactlist_menu_onkey_50: \ 0000056C 740094E5 LDR R0,[R4, #+116] \ 00000570 000050E3 CMP R0,#+0 \ 00000574 0200000A BEQ ??contactlist_menu_onkey_51 1881 { 1882 FreeLOGQ(&cl->log); \ 00000578 740084E2 ADD R0,R4,#+116 \ 0000057C ........ BL FreeLOGQ 1883 cl->msg_count=0; \ 00000580 849084E5 STR R9,[R4, #+132] 1884 } 1885 cl=cl->next; \ ??contactlist_menu_onkey_51: \ 00000584 004094E5 LDR R4,[R4, #+0] 1886 } \ 00000588 000054E3 CMP R4,#+0 \ 0000058C F6FFFF1A BNE ??contactlist_menu_onkey_50 1887 1888 if(strlen(ContactT9Key)) \ ??contactlist_menu_onkey_49: \ 00000590 060085E0 ADD R0,R5,R6 \ 00000594 1B0000EF SWI +27 \ 00000598 000050E3 CMP R0,#+0 \ 0000059C 0200000A BEQ ??contactlist_menu_onkey_52 1889 ClearContactT9Key(); \ 000005A0 2010A0E3 MOV R1,#+32 \ 000005A4 060085E0 ADD R0,R5,R6 \ 000005A8 1D0100EF SWI +285 1890 t->isactive=0; \ ??contactlist_menu_onkey_52: \ 000005AC 80908AE5 STR R9,[R10, #+128] 1891 RecountMenu(NULL,1); \ ??contactlist_menu_onkey_18: \ 000005B0 0110A0E3 MOV R1,#+1 \ 000005B4 0000A0E3 MOV R0,#+0 \ 000005B8 ........ BL RecountMenu 1892 return (-1); \ 000005BC 0900E0E1 MVN R0,R9 \ 000005C0 FE8FBDE8 POP {R1-R11,PC} 1893 } 1894 case '6': 1895 if(!away_m) \ ??contactlist_menu_onkey_53: \ 000005C4 380196E5 LDR R0,[R6, #+312] \ 000005C8 000050E3 CMP R0,#+0 \ 000005CC 0800001A BNE ??contactlist_menu_onkey_54 1896 { 1897 away_m=!away_m; \ 000005D0 384186E5 STR R4,[R6, #+312] 1898 GBS_StopTimer(&away_tmr); \ 000005D4 04009DE5 LDR R0,[SP, #+4] \ 000005D8 440100EF SWI +324 1899 msg_away_timer=AUTO_ENGADE; \ 000005DC ........ LDR R0,??DataTable61 ;; AUTO_ENGADE \ 000005E0 000090E5 LDR R0,[R0, #+0] \ 000005E4 300186E5 STR R0,[R6, #+304] 1900 away_timer(); \ 000005E8 ........ BL away_timer 1901 // ShowMSG(1,(int)"Автоответчик включен!"); 1902 InputAwayMsg(); \ 000005EC ........ BL InputAwayMsg \ 000005F0 010000EA B ??contactlist_menu_onkey_55 1903 } 1904 else 1905 { 1906 msg_away_timer=0; \ ??contactlist_menu_onkey_54: \ 000005F4 309186E5 STR R9,[R6, #+304] 1907 away_m=!away_m; \ 000005F8 389186E5 STR R9,[R6, #+312] 1908 // ShowMSG(1,(int)"Автоответчик выключен!"); 1909 } 1910 UpdateCLheader(); \ ??contactlist_menu_onkey_55: \ 000005FC ........ BL UpdateCLheader 1911 break; 1912 } 1913 1914 int key=msg->gbsmsg->submess; \ ??contactlist_menu_onkey_39: \ 00000600 08009DE5 LDR R0,[SP, #+8] \ 00000604 040090E5 LDR R0,[R0, #+4] \ 00000608 080090E5 LDR R0,[R0, #+8] 1915 if ((key>='0')&&(key<='9')) \ 0000060C 300050E3 CMP R0,#+48 \ 00000610 080000BA BLT ??contactlist_menu_onkey_37 \ 00000614 3A0050E3 CMP R0,#+58 \ 00000618 060000AA BGE ??contactlist_menu_onkey_37 1916 { 1917 ClearContactT9Key(); \ 0000061C 2010A0E3 MOV R1,#+32 \ 00000620 060085E0 ADD R0,R5,R6 \ 00000624 1D0100EF SWI +285 1918 UpdateCLheader(); \ 00000628 ........ BL UpdateCLheader 1919 RecountMenu(NULL,1); \ 0000062C 0110A0E3 MOV R1,#+1 \ 00000630 0000A0E3 MOV R0,#+0 \ 00000634 ........ BL RecountMenu 1920 } 1921 } 1922 return(0); \ ??contactlist_menu_onkey_37: \ 00000638 0000A0E3 MOV R0,#+0 \ 0000063C FE8FBDE8 POP {R1-R11,PC} ;; return \ ??contactlist_menu_onkey_22: \ 00000640 ........ DC32 ActionResh \ 00000644 ........ 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,??DataTable62 ;; S_ICONS + 436 \ 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,??DataTable63 ;; `?` \ 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 B8108AE2 ADD R1,R10,#+184 \ 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 C4108AE2 ADD R1,R10,#+196 \ 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,??DataTable64 ;; 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 2A00A0E3 MOV R0,#+42 \ 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 CC108AE2 ADD R1,R10,#+204 \ 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 D4108AE2 ADD R1,R10,#+212 \ 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,??DataTable65 ;; 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,??DataTable70 ;; S_ICONS 2137 int err; 2138 unsigned int ip; 2139 GBS_DelTimer(&reconnect_tmr); 2140 if (!IsGPRSEnabled()) \ 00000008 D0829FE5 LDR R8,??create_connect_0+0x4 ;; `?` \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 8C4185E5 STR R4,[R5, #+396] \ 0000001C 5400A0E3 MOV R0,#+84 \ 00000020 600D80E3 ORR R0,R0,#0x1800 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 3400A0E3 MOV R0,#+52 \ 00000034 5C0D80E3 ORR R0,R0,#0x1700 \ 00000038 057080E0 ADD R7,R0,R5 \ 0000003C A70000EF SWI +167 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400001A BNE ??create_connect_1 2141 { 2142 is_gprs_online=0; \ 00000048 AC4185E5 STR R4,[R5, #+428] 2143 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C 0810A0E1 MOV R1,R8 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 2144 SMART_REDRAW(); \ 00000058 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: \ 0000005C 80929FE5 LDR R9,??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) \ 00000060 ........ LDR R10,??DataTable67 ;; do_reconnect \ 00000064 D44185E5 STR R4,[R5, #+468] \ 00000068 7C8100EF SWI +33148 \ 0000006C 004080E5 STR R4,[R0, #+0] \ 00000070 0900A0E1 MOV R0,R9 \ 00000074 ........ BL GetHostsCount \ 00000078 DC1195E5 LDR R1,[R5, #+476] \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 010050E1 CMP R0,R1 \ 00000084 DC4185B5 STRLT R4,[R5, #+476] \ 00000088 DC0195E5 LDR R0,[R5, #+476] \ 0000008C 14208DE2 ADD R2,SP,#+20 \ 00000090 0910A0E1 MOV R1,R9 \ 00000094 ........ BL GetHost \ 00000098 DC0195E5 LDR R0,[R5, #+476] \ 0000009C 0910A0E1 MOV R1,R9 \ 000000A0 ........ BL GetPort \ 000000A4 0090A0E1 MOV R9,R0 \ 000000A8 DC0195E5 LDR R0,[R5, #+476] \ 000000AC 0930A0E1 MOV R3,R9 \ 000000B0 010080E2 ADD R0,R0,#+1 \ 000000B4 DC0185E5 STR R0,[R5, #+476] \ 000000B8 14208DE2 ADD R2,SP,#+20 \ 000000BC 181088E2 ADD R1,R8,#+24 \ 000000C0 3400A0E3 MOV R0,#+52 \ 000000C4 640D80E3 ORR R0,R0,#0x1900 \ 000000C8 050080E0 ADD R0,R0,R5 \ 000000CC 160000EF SWI +22 \ 000000D0 14108DE2 ADD R1,SP,#+20 \ 000000D4 B400A0E3 MOV R0,#+180 \ 000000D8 600D80E3 ORR R0,R0,#0x1800 \ 000000DC 050080E0 ADD R0,R0,R5 \ 000000E0 1A0000EF SWI +26 \ 000000E4 94108DE2 ADD R1,SP,#+148 \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 1A0000EF SWI +26 \ 000000F0 ........ BL SMART_REDRAW \ 000000F4 14008DE2 ADD R0,SP,#+20 \ 000000F8 B70100EF SWI +439 \ 000000FC 04B0E0E1 MVN R11,R4 \ 00000100 0B0050E1 CMP R0,R11 \ 00000104 0500000A BEQ ??create_connect_3 2161 { 2162 sa.ip=ip; \ 00000108 08008DE5 STR R0,[SP, #+8] 2163 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 0000010C 2C1088E2 ADD R1,R8,#+44 \ 00000110 0700A0E1 MOV R0,R7 \ 00000114 1A0000EF SWI +26 2164 SMART_REDRAW(); \ 00000118 ........ BL SMART_REDRAW 2165 goto L_CONNECT; \ 0000011C 390000EA B ??create_connect_4 2166 } \ ??create_connect_3: \ 00000120 6D1F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 00000124 0700A0E1 MOV R0,R7 2167 strcat(logmsg,"\n"); \ 00000128 170000EF SWI +23 2168 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 0000012C 3C1088E2 ADD R1,R8,#+60 \ 00000130 0700A0E1 MOV R0,R7 \ 00000134 1A0000EF SWI +26 2169 SMART_REDRAW(); \ 00000138 ........ BL SMART_REDRAW 2170 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 0000013C 752F85E2 ADD R2,R5,#+468 \ 00000140 0D10A0E1 MOV R1,SP \ 00000144 14008DE2 ADD R0,SP,#+20 \ 00000148 B60100EF SWI +438 \ 0000014C 0030B0E1 MOVS R3,R0 2171 if (err) \ 00000150 1600000A BEQ ??create_connect_5 2172 { 2173 if ((err==0xC9)||(err==0xD6)) \ 00000154 C90053E3 CMP R3,#+201 \ 00000158 D6005313 CMPNE R3,#+214 \ 0000015C 0600001A BNE ??create_connect_6 2174 { 2175 if (DNR_ID) \ 00000160 D40195E5 LDR R0,[R5, #+468] \ 00000164 000050E3 CMP R0,#+0 \ 00000168 1000000A BEQ ??create_connect_5 2176 { 2177 host_counter--; \ 0000016C DC0195E5 LDR R0,[R5, #+476] \ 00000170 010040E2 SUB R0,R0,#+1 \ 00000174 DC0185E5 STR R0,[R5, #+476] 2178 return; //Ждем готовности DNR \ 00000178 390000EA B ??create_connect_7 2179 } 2180 } 2181 else 2182 { 2183 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 0000017C 482088E2 ADD R2,R8,#+72 \ 00000180 FF10A0E3 MOV R1,#+255 \ 00000184 0700A0E1 MOV R0,R7 \ 00000188 1B0100EF SWI +283 2184 SMART_REDRAW(); \ 0000018C ........ BL SMART_REDRAW 2185 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 00000190 ........ LDR R0,??DataTable68 ;; RECONNECT_TIME \ 00000194 0A20A0E1 MOV R2,R10 \ 00000198 000090E5 LDR R0,[R0, #+0] \ 0000019C D830A0E3 MOV R3,#+216 \ 000001A0 930001E0 MUL R1,R3,R0 \ 000001A4 0600A0E1 MOV R0,R6 \ 000001A8 4D0000EF SWI +77 2186 return; \ 000001AC 2C0000EA B ??create_connect_7 2187 } 2188 } 2189 if (p_res) \ ??create_connect_5: \ 000001B0 00009DE5 LDR R0,[SP, #+0] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 3D00000A BEQ ??create_connect_9 2190 { 2191 if (p_res[3]) \ 000001BC 0C0090E5 LDR R0,[R0, #+12] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 4200000A BEQ ??create_connect_10 2192 { 2193 strcpy(logmsg,buf); \ 000001C8 94108DE2 ADD R1,SP,#+148 \ 000001CC 0700A0E1 MOV R0,R7 \ 000001D0 1A0000EF SWI +26 2194 strcat(logmsg,"\n"); \ 000001D4 401F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 000001D8 0700A0E1 MOV R0,R7 \ 000001DC 170000EF SWI +23 2195 strcpy(logmsg,LG_GRDNROK); \ 000001E0 581088E2 ADD R1,R8,#+88 \ 000001E4 0700A0E1 MOV R0,R7 \ 000001E8 1A0000EF SWI +26 2196 SMART_REDRAW(); \ 000001EC ........ BL SMART_REDRAW 2197 DNR_TRIES=0; \ 000001F0 D84185E5 STR R4,[R5, #+472] 2198 sa.ip=p_res[3][0][0]; \ 000001F4 00109DE5 LDR R1,[SP, #+0] \ 000001F8 0C1091E5 LDR R1,[R1, #+12] \ 000001FC 001091E5 LDR R1,[R1, #+0] \ 00000200 001091E5 LDR R1,[R1, #+0] \ 00000204 08108DE5 STR R1,[SP, #+8] 2199 L_CONNECT: 2200 sock=socket(1,1,0); \ ??create_connect_4: \ 00000208 0020A0E3 MOV R2,#+0 \ 0000020C 0110A0E3 MOV R1,#+1 \ 00000210 0100A0E1 MOV R0,R1 \ 00000214 730100EF SWI +371 \ 00000218 900185E5 STR R0,[R5, #+400] 2201 if (sock!=-1) \ 0000021C 0B0050E1 CMP R0,R11 \ 00000220 1A00000A BEQ ??create_connect_11 2202 { 2203 sa.family=1; \ 00000224 0170A0E3 MOV R7,#+1 \ 00000228 B470CDE1 STRH R7,[SP, #+4] 2204 sa.port=htons(hostport); \ 0000022C 0908A0E1 MOV R0,R9, LSL #+16 \ 00000230 2008A0E1 MOV R0,R0, LSR #+16 \ 00000234 7A0100EF SWI +378 \ 00000238 B600CDE1 STRH R0,[SP, #+6] 2205 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 2206 if (connect(sock,&sa,sizeof(sa))!=-1) \ 0000023C 900195E5 LDR R0,[R5, #+400] \ 00000240 1020A0E3 MOV R2,#+16 \ 00000244 04108DE2 ADD R1,SP,#+4 \ 00000248 740100EF SWI +372 \ 0000024C 0B0050E1 CMP R0,R11 \ 00000250 0500000A BEQ ??create_connect_12 2207 { 2208 connect_state=1; \ 00000254 8C7185E5 STR R7,[R5, #+396] 2209 TOTALRECEIVED=0; \ 00000258 944185E5 STR R4,[R5, #+404] 2210 TOTALSENDED=0; \ 0000025C 984185E5 STR R4,[R5, #+408] 2211 SMART_REDRAW(); \ ??create_connect_2: \ 00000260 ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000264 45DF8DE2 ADD SP,SP,#+276 \ 00000268 F08FBDE8 POP {R4-R11,PC} 2212 } 2213 else 2214 { 2215 closesocket(sock); \ ??create_connect_12: \ 0000026C 900195E5 LDR R0,[R5, #+400] \ 00000270 760100EF SWI +374 2216 sock=-1; \ 00000274 90B185E5 STR R11,[R5, #+400] 2217 LockSched(); \ 00000278 460100EF SWI +326 2218 ShowMSG(1,(int)LG_MSGCANTCONN); \ 0000027C 701088E2 ADD R1,R8,#+112 \ 00000280 0100A0E3 MOV R0,#+1 \ 00000284 480100EF SWI +328 2219 UnlockSched(); \ 00000288 470100EF SWI +327 2220 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 0000028C BFFFFFEA B ??create_connect_8 2221 2222 } 2223 } 2224 else 2225 { 2226 LockSched(); \ ??create_connect_11: \ 00000290 460100EF SWI +326 2227 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 00000294 8C1088E2 ADD R1,R8,#+140 \ 00000298 0100A0E3 MOV R0,#+1 \ 0000029C 480100EF SWI +328 2228 UnlockSched(); \ 000002A0 470100EF SWI +327 2229 //Не осилили создания сокета, закрываем GPRS-сессию 2230 GPRS_OnOff(0,1); \ 000002A4 0110A0E3 MOV R1,#+1 \ 000002A8 0000A0E3 MOV R0,#+0 \ 000002AC 8E0100EF SWI +398 \ 000002B0 EBFFFFEA B ??create_connect_7 2231 } 2232 } 2233 } 2234 else 2235 { 2236 DNR_TRIES--; \ ??create_connect_9: \ 000002B4 D80195E5 LDR R0,[R5, #+472] \ 000002B8 010040E2 SUB R0,R0,#+1 \ 000002BC D80185E5 STR R0,[R5, #+472] 2237 LockSched(); \ 000002C0 460100EF SWI +326 2238 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002C4 B81088E2 ADD R1,R8,#+184 \ 000002C8 0100A0E3 MOV R0,#+1 \ 000002CC 480100EF SWI +328 2239 UnlockSched(); \ 000002D0 470100EF SWI +327 \ ??create_connect_10: \ 000002D4 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002D8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 000002DC 0A000000 DC8 "\n",+0,+0 \ 000002E0 ........ DC32 `?` \ 000002E4 ........ 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,??DataTable70 ;; S_ICONS \ 00000008 A80194E5 LDR R0,[R4, #+424] \ 0000000C 150000EF SWI +21 2250 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 A80184E5 STR R0,[R4, #+424] 2251 sendq_l=NULL; \ 00000018 A40184E5 STR R0,[R4, #+420] 2252 #ifdef SEND_TIMER 2253 GBS_DelTimer(&send_tmr); 2254 #endif 2255 } \ 0000001C 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,??DataTable70 ;; S_ICONS \ 00000008 900194E5 LDR R0,[R4, #+400] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 2260 { 2261 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 2262 closesocket(sock); \ 0000001C 900194E5 LDR R0,[R4, #+400] \ 00000020 760100EF SWI +374 2263 } 2264 #ifdef SEND_TIMER 2265 GBS_DelTimer(&send_tmr); 2266 #endif 2267 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 2268 2269 #ifdef SEND_TIMER 2270 static void resend(void) 2271 { 2272 void SendAnswer(int dummy, TPKT *p); 2273 SUBPROC((void*)SendAnswer,0,0); 2274 } 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,??DataTable82 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 8C0194E5 LDR R0,[R4, #+396] \ 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 2600000A 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 980194E5 LDR R0,[R4, #+408] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 980184E5 STR R0,[R4, #+408] 2290 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 A00194E5 LDR R0,[R4, #+416] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 A00184E5 STR R0,[R4, #+416] 2291 //Проверяем, не надо ли добавить в очередь 2292 if (sendq_p) \ 0000004C A80194E5 LDR R0,[R4, #+424] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 2293 { 2294 //Есть очередь, добавляем в нее 2295 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 A41194E5 LDR R1,[R4, #+420] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 A80184E5 STR R0,[R4, #+424] 2296 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 A40194E5 LDR R0,[R4, #+420] \ 0000006C A83194E5 LDR R3,[R4, #+424] \ 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 A40194E5 LDR R0,[R4, #+420] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 A40184E5 STR R0,[R4, #+420] 2299 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 2300 } 2301 sendq_p=p; \ ??SendAnswer_2: \ 00000098 A86184E5 STR R6,[R4, #+424] 2302 sendq_l=j; \ 0000009C A45184E5 STR R5,[R4, #+420] \ 000000A0 080000EA 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); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 A40194E5 LDR R0,[R4, #+420] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC A42184E5 STR R2,[R4, #+420] \ 000000B0 A80194E5 LDR R0,[R4, #+424] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 2331 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 900194E5 LDR R0,[R4, #+400] \ 000000F0 407EA0A3 MOVGE R7,#+1024 \ 000000F4 0030A0E3 MOV R3,#+0 \ 000000F8 0720A0E1 MOV R2,R7 \ 000000FC 790100EF SWI +377 \ 00000100 0050A0E1 MOV R5,R0 \ 00000104 3400A0E3 MOV R0,#+52 \ 00000108 5C0D80E3 ORR R0,R0,#0x1700 \ 0000010C 048080E0 ADD R8,R0,R4 \ 00000110 0530A0E1 MOV R3,R5 \ 00000114 0920A0E1 MOV R2,R9 \ 00000118 FF10A0E3 MOV R1,#+255 \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 1B0100EF SWI +283 \ 00000124 ........ BL SMART_REDRAW \ 00000128 000055E3 CMP R5,#+0 \ 0000012C DCFFFF5A BPL ??SendAnswer_3 \ 00000130 7C8100EF SWI +33148 \ 00000134 005090E5 LDR R5,[R0, #+0] \ 00000138 C90055E3 CMP R5,#+201 \ 0000013C D6005513 CMPNE R5,#+214 \ 00000140 0300001A BNE ??SendAnswer_6 \ 00000144 0C1089E2 ADD R1,R9,#+12 \ 00000148 0800A0E1 MOV R0,R8 \ 0000014C 1A0000EF SWI +26 \ 00000150 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 00000154 460100EF SWI +326 \ 00000158 1C1089E2 ADD R1,R9,#+28 \ 0000015C 0100A0E3 MOV R0,#+1 \ 00000160 480100EF SWI +328 \ 00000164 470100EF SWI +327 \ 00000168 ........ BL end_socket \ 0000016C F083BDE8 POP {R4-R9,PC} 2340 } 2341 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 2342 sendq_p=NULL; \ 00000178 A86184E5 STR R6,[R4, #+424] 2343 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 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,??DataTable82 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 8C0186E5 STR R0,[R6, #+396] \ 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,??DataTable74 ;; 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 880186E5 STR R0,[R6, #+392] 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,??DataTable74 ;; 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,??DataTable75 ;; 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,??DataTable82 ;; S_ICONS \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 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 8C0195E5 LDR R0,[R5, #+396] \ 00000014 888195E5 LDR R8,[R5, #+392] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 4B0100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 4901000A BEQ ??get_answer_1 2410 if (i==EOP) return; 2411 j=recv(sock,rb,sizeof(rb),0); \ 00000030 900195E5 LDR R0,[R5, #+400] \ 00000034 0030A0E3 MOV R3,#+0 \ 00000038 402EA0E3 MOV R2,#+1024 \ 0000003C 780100EF SWI +376 \ 00000040 0060A0E1 MOV R6,R0 \ 00000044 0990A0E3 MOV R9,#+9 \ 00000048 429C89E3 ORR R9,R9,#0x4200 \ 0000004C 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: \ 00000050 0040A0E1 MOV R4,R0 2608 p=malloc(n); \ ??get_answer_4: \ 00000054 140000EF SWI +20 \ 00000058 00B0A0E1 MOV R11,R0 2609 memcpy(p,&RXbuf,n); \ 0000005C 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 00000060 0710A0E1 MOV R1,R7 \ 00000064 1E0100EF SWI +286 2610 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000068 900195E5 LDR R0,[R5, #+400] \ 0000006C 0B30A0E1 MOV R3,R11 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0020A0E3 MOV R2,#+0 \ 00000078 0810A0E1 MOV R1,R8 \ 0000007C 0900A0E1 MOV R0,R9 \ 00000080 000100EF SWI +256 \ ??get_answer_6: \ 00000084 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 2611 break; 2612 } 2613 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000088 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 0000008C 010056E3 CMP R6,#+1 \ 00000090 2F0100BA BLT ??get_answer_8 \ 00000094 CC749FE5 LDR R7,??get_answer_9+0x4 ;; RXbuf \ 00000098 000058E3 CMP R8,#+0 \ 0000009C 0C00005A BPL ??get_answer_10 \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 004068E2 RSB R4,R8,#+0 \ 000000A8 040056E1 CMP R6,R4 \ 000000AC 0640A0B1 MOVLT R4,R6 \ 000000B0 0420A0E1 MOV R2,R4 \ 000000B4 070088E0 ADD R0,R8,R7 \ 000000B8 080080E2 ADD R0,R0,#+8 \ 000000BC 1E0100EF SWI +286 \ 000000C0 00109DE5 LDR R1,[SP, #+0] \ 000000C4 088084E0 ADD R8,R4,R8 \ 000000C8 046046E0 SUB R6,R6,R4 \ 000000CC 011084E0 ADD R1,R4,R1 \ 000000D0 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 EBFFFF4A BMI ??get_answer_2 \ 000000DC B640D7E1 LDRH R4,[R7, #+6] \ 000000E0 3400A0E3 MOV R0,#+52 \ 000000E4 5C0D80E3 ORR R0,R0,#0x1700 \ 000000E8 05A080E0 ADD R10,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 70149FE5 LDR R1,??get_answer_9+0x8 ;; `?` + 220 \ 000000F8 0A00A0E1 MOV R0,R10 \ 000000FC 1A0000EF SWI +26 \ 00000100 ........ BL end_socket \ 00000104 0900E0E3 MVN R0,#+9 \ 00000108 880185E5 STR R0,[R5, #+392] \ 0000010C 1CD08DE2 ADD SP,SP,#+28 \ 00000110 40DE8DE2 ADD SP,SP,#+1024 \ 00000114 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000118 084044E0 SUB R4,R4,R8 \ 0000011C 010054E3 CMP R4,#+1 \ 00000120 0B0000BA BLT ??get_answer_12 \ 00000124 00109DE5 LDR R1,[SP, #+0] \ 00000128 040056E1 CMP R6,R4 \ 0000012C 0640A0B1 MOVLT R4,R6 \ 00000130 0420A0E1 MOV R2,R4 \ 00000134 070088E0 ADD R0,R8,R7 \ 00000138 080080E2 ADD R0,R0,#+8 \ 0000013C 1E0100EF SWI +286 \ 00000140 00109DE5 LDR R1,[SP, #+0] \ 00000144 088084E0 ADD R8,R4,R8 \ 00000148 046046E0 SUB R6,R6,R4 \ 0000014C 011084E0 ADD R1,R4,R1 \ 00000150 00108DE5 STR R1,[SP, #+0] \ ??get_answer_12: \ 00000154 B600D7E1 LDRH R0,[R7, #+6] \ 00000158 080050E1 CMP R0,R8 \ 0000015C CAFFFF1A BNE ??get_answer_2 \ 00000160 941195E5 LDR R1,[R5, #+404] \ 00000164 080088E2 ADD R0,R8,#+8 \ 00000168 011080E0 ADD R1,R0,R1 \ 0000016C 941185E5 STR R1,[R5, #+404] \ 00000170 9C1195E5 LDR R1,[R5, #+412] \ 00000174 0020A0E3 MOV R2,#+0 \ 00000178 011080E0 ADD R1,R0,R1 \ 0000017C 9C1185E5 STR R1,[R5, #+412] \ 00000180 071088E0 ADD R1,R8,R7 \ 00000184 0820C1E5 STRB R2,[R1, #+8] \ 00000188 B410D7E1 LDRH R1,[R7, #+4] \ 0000018C 094088E2 ADD R4,R8,#+9 \ 00000190 AE80A0E3 MOV R8,#+174 \ 00000194 DE8C88E3 ORR R8,R8,#0xDE00 \ 00000198 031041E2 SUB R1,R1,#+3 \ 0000019C 1C0051E3 CMP R1,#+28 \ 000001A0 B8FFFF8A BHI ??get_answer_7 \ 000001A4 022F8FE2 ADR R2,??get_answer_0 \ 000001A8 8110A0E1 MOV R1,R1, LSL #+1 \ 000001AC F12092E1 LDRSH R2,[R2, R1] \ 000001B0 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001B4 48000E00B4FF DC16 +72,+14,+65460,+65 \ 4100 \ 000001BC 2900B4FF2B00 DC16 +41,+65460,+43,+65460 \ B4FF \ 000001C4 B4FFB4FF9700 DC16 +65460,+65460,+151,+65460 \ B4FF \ 000001CC B4FF9D00A300 DC16 +65460,+157,+163,+65460 \ B4FF \ 000001D4 A80029002900 DC16 +168,+41,+41,+65460 \ B4FF \ 000001DC B4FFB4FF2900 DC16 +65460,+65460,+41,+65460 \ B4FF \ 000001E4 B4FFB4FFB4FF DC16 +65460,+65460,+65460,+65460 \ B4FF \ 000001EC A6FF0000 DC16 +65446,+0 \ ??get_answer_13: \ 000001F0 0400A0E1 MOV R0,R4 \ 000001F4 140000EF SWI +20 \ 000001F8 00B0A0E1 MOV R11,R0 \ 000001FC 0420A0E1 MOV R2,R4 \ 00000200 0710A0E1 MOV R1,R7 \ 00000204 1E0100EF SWI +286 \ 00000208 900195E5 LDR R0,[R5, #+400] \ 0000020C 0B30A0E1 MOV R3,R11 \ 00000210 01002DE9 PUSH {R0} \ 00000214 0020A0E3 MOV R2,#+0 \ 00000218 0810A0E1 MOV R1,R8 \ 0000021C 0900A0E1 MOV R0,R9 \ 00000220 000100EF SWI +256 \ 00000224 44039FE5 LDR R0,??get_answer_9+0xC ;; sndStartup \ 00000228 ........ BL Play \ 0000022C 083087E2 ADD R3,R7,#+8 \ 00000230 CB2F8FE2 ADR R2,??get_answer_9 ;; "%s" \ 00000234 FF10A0E3 MOV R1,#+255 \ 00000238 0A00A0E1 MOV R0,R10 \ 0000023C 1B0100EF SWI +283 \ 00000240 0300A0E3 MOV R0,#+3 \ 00000244 8C0185E5 STR R0,[R5, #+396] \ 00000248 DC0195E5 LDR R0,[R5, #+476] \ 0000024C 010040E2 SUB R0,R0,#+1 \ 00000250 DC0185E5 STR R0,[R5, #+476] \ 00000254 ........ BL SMART_REDRAW \ 00000258 89FFFFEA B ??get_answer_6 \ ??get_answer_14: \ 0000025C 0400A0E1 MOV R0,R4 \ 00000260 7BFFFFEA B ??get_answer_4 \ ??get_answer_15: \ 00000264 0040A0E1 MOV R4,R0 \ 00000268 140000EF SWI +20 \ 0000026C 00B0A0E1 MOV R11,R0 \ 00000270 0420A0E1 MOV R2,R4 \ 00000274 0710A0E1 MOV R1,R7 \ 00000278 1E0100EF SWI +286 \ 0000027C B800D7E1 LDRH R0,[R7, #+8] \ 00000280 EC229FE5 LDR R2,??get_answer_9+0x10 ;; `?` + 232 \ 00000284 FF10A0E3 MOV R1,#+255 \ 00000288 01002DE9 PUSH {R0} \ 0000028C 003097E5 LDR R3,[R7, #+0] \ 00000290 0A00A0E1 MOV R0,R10 \ 00000294 1B0100EF SWI +283 \ 00000298 900195E5 LDR R0,[R5, #+400] \ 0000029C 0B30A0E1 MOV R3,R11 \ 000002A0 01002DE9 PUSH {R0} \ 000002A4 0020A0E3 MOV R2,#+0 \ 000002A8 0810A0E1 MOV R1,R8 \ 000002AC 0900A0E1 MOV R0,R9 \ 000002B0 000100EF SWI +256 \ 000002B4 08D08DE2 ADD SP,SP,#+8 \ 000002B8 72FFFFEA B ??get_answer_7 \ ??get_answer_16: \ 000002BC B4229FE5 LDR R2,??get_answer_9+0x14 ;; `?` + 244 \ 000002C0 083087E2 ADD R3,R7,#+8 \ 000002C4 FF10A0E3 MOV R1,#+255 \ 000002C8 0A00A0E1 MOV R0,R10 \ 000002CC 1B0100EF SWI +283 \ 000002D0 ........ BL SMART_REDRAW \ 000002D4 6BFFFFEA 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 0710A0E1 MOV R1,R7 \ 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 002097E5 LDR R2,[R7, #+0] \ 00000318 5C129FE5 LDR R1,??get_answer_9+0x18 ;; `?` + 252 \ 0000031C B400A0E3 MOV R0,#+180 \ 00000320 640D80E3 ORR R0,R0,#0x1900 \ 00000324 054080E0 ADD R4,R0,R5 \ 00000328 0400A0E1 MOV R0,R4 \ 0000032C 160000EF SWI +22 \ 00000330 ........ LDR R0,??DataTable77 ;; ignor_list \ 00000334 0410A0E1 MOV R1,R4 \ 00000338 180100EF SWI +280 \ 0000033C 000050E3 CMP R0,#+0 \ 00000340 50FFFF1A BNE ??get_answer_7 \ 00000344 34229FE5 LDR R2,??get_answer_9+0x1C ;; `?` + 260 \ 00000348 34429FE5 LDR R4,??get_answer_9+0x20 ;; sndMsg \ 0000034C 080087E2 ADD R0,R7,#+8 \ 00000350 01002DE9 PUSH {R0} \ 00000354 003097E5 LDR R3,[R7, #+0] \ 00000358 FF10A0E3 MOV R1,#+255 \ 0000035C 0A00A0E1 MOV R0,R10 \ 00000360 1B0100EF SWI +283 \ 00000364 940195E5 LDR R0,[R5, #+404] \ 00000368 ........ BL SendMSGACK \ 0000036C 900195E5 LDR R0,[R5, #+400] \ 00000370 0B30A0E1 MOV R3,R11 \ 00000374 01002DE9 PUSH {R0} \ 00000378 0020A0E3 MOV R2,#+0 \ 0000037C 0810A0E1 MOV R1,R8 \ 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 36FFFFEA B ??get_answer_7 \ ??get_answer_20: \ 000003AC 000097E5 LDR R0,[R7, #+0] \ 000003B0 D0219FE5 LDR R2,??get_answer_9+0x24 ;; sndMsg2 \ 000003B4 F40085E5 STR R0,[R5, #+244] \ 000003B8 0010A0E3 MOV R1,#+0 \ 000003BC 08108DE5 STR R1,[SP, #+8] \ 000003C0 F43095E5 LDR R3,[R5, #+244] \ 000003C4 C0119FE5 LDR R1,??get_answer_9+0x28 ;; `?` + 272 \ 000003C8 D77FA0E3 MOV R7,#+860 \ 000003CC 050087E0 ADD R0,R7,R5 \ 000003D0 160000EF SWI +22 \ 000003D4 08308DE2 ADD R3,SP,#+8 \ 000003D8 8020A0E3 MOV R2,#+128 \ 000003DC 801CA0E3 MOV R1,#+32768 \ 000003E0 050087E0 ADD R0,R7,R5 \ 000003E4 0A0000EF SWI +10 \ 000003E8 04008DE5 STR R0,[SP, #+4] \ 000003EC 04009DE5 LDR R0,[SP, #+4] \ 000003F0 010070E3 CMN R0,#+1 \ 000003F4 0400000A BEQ ??get_answer_22 \ 000003F8 04009DE5 LDR R0,[SP, #+4] \ 000003FC 08108DE2 ADD R1,SP,#+8 \ 00000400 0D0000EF SWI +13 \ 00000404 050087E0 ADD R0,R7,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 081087E2 ADD R1,R7,#+8 \ 0000041C 0100A0E3 MOV R0,#+1 \ 00000420 480100EF SWI +328 \ ??get_answer_24: \ 00000424 470100EF SWI +327 \ 00000428 16FFFFEA B ??get_answer_7 \ ??get_answer_25: \ 0000042C 0700A0E1 MOV R0,R7 \ 00000430 ........ BL FindContactLOGQByAck \ 00000434 000050E3 CMP R0,#+0 \ 00000438 0100000A BEQ ??get_answer_26 \ 0000043C 4C019FE5 LDR R0,??get_answer_9+0x2C ;; 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 01FFFFEA B ??get_answer_5 \ ??get_answer_27: \ 00000458 0C108DE2 ADD R1,SP,#+12 \ 0000045C 14008DE2 ADD R0,SP,#+20 \ 00000460 B40000EF SWI +180 \ 00000464 0C00DDE5 LDRB R0,[SP, #+12] \ 00000468 0D20DDE5 LDRB R2,[SP, #+13] \ 0000046C E11EA0E3 MOV R1,#+3600 \ 00000470 3C30A0E3 MOV R3,#+60 \ 00000474 930202E0 MUL R2,R3,R2 \ 00000478 912020E0 MLA R0,R1,R0,R2 \ 0000047C 0E10DDE5 LDRB R1,[SP, #+14] \ 00000480 E12EA0E3 MOV R2,#+3600 \ 00000484 000081E0 ADD R0,R1,R0 \ 00000488 0810D7E5 LDRB R1,[R7, #+8] \ 0000048C 920101E0 MUL R1,R2,R1 \ 00000490 FC209FE5 LDR R2,??get_answer_9+0x30 ;; `?` + 284 \ 00000494 010040E0 SUB R0,R0,R1 \ 00000498 0910D7E5 LDRB R1,[R7, #+9] \ 0000049C 930101E0 MUL R1,R3,R1 \ 000004A0 010040E0 SUB R0,R0,R1 \ 000004A4 0A10D7E5 LDRB R1,[R7, #+10] \ 000004A8 E8709FE5 LDR R7,??get_answer_9+0x34 ;; 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 0A00A0E1 MOV R0,R10 \ 000004D0 1B0100EF SWI +283 \ 000004D4 C0109FE5 LDR R1,??get_answer_9+0x38 ;; `?` + 304 \ 000004D8 0420A0E1 MOV R2,R4 \ 000004DC BC409FE5 LDR R4,??get_answer_9+0x3C ;; pingsnd \ 000004E0 FC00A0E3 MOV R0,#+252 \ 000004E4 4C0D80E3 ORR R0,R0,#0x1300 \ 000004E8 050080E0 ADD R0,R0,R5 \ 000004EC 160000EF SWI +22 \ 000004F0 460100EF SWI +326 \ 000004F4 000097E5 LDR R0,[R7, #+0] \ 000004F8 04D08DE2 ADD SP,SP,#+4 \ 000004FC 010050E3 CMP R0,#+1 \ 00000500 0700001A BNE ??get_answer_28 \ 00000504 0A10A0E1 MOV R1,R10 \ 00000508 0100A0E3 MOV R0,#+1 \ 0000050C 480100EF SWI +328 \ 00000510 0400A0E1 MOV R0,R4 \ 00000514 ........ BL Play \ 00000518 0000A0E3 MOV R0,#+0 \ 0000051C 000087E5 STR R0,[R7, #+0] \ 00000520 BFFFFFEA B ??get_answer_24 \ ??get_answer_28: \ 00000524 E00195E5 LDR R0,[R5, #+480] \ 00000528 000050E3 CMP R0,#+0 \ 0000052C 0500001A BNE ??get_answer_29 \ 00000530 6C009FE5 LDR R0,??get_answer_9+0x40 ;; ping_time_config \ 00000534 000090E5 LDR R0,[R0, #+0] \ 00000538 E00185E5 STR R0,[R5, #+480] \ 0000053C 0400A0E1 MOV R0,R4 \ 00000540 ........ BL Play \ 00000544 B6FFFFEA B ??get_answer_24 \ ??get_answer_29: \ 00000548 010040E2 SUB R0,R0,#+1 \ 0000054C E00185E5 STR R0,[R5, #+480] \ 00000550 B3FFFFEA B ??get_answer_24 2614 } 2615 } 2616 } 2617 RXstate=i; \ ??get_answer_8: \ 00000554 888185E5 STR R8,[R5, #+392] 2618 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 2619 // SMART_REDRAW(); 2620 } \ ??get_answer_1: \ 00000558 1CD08DE2 ADD SP,SP,#+28 \ 0000055C 40DE8DE2 ADD SP,SP,#+1024 \ 00000560 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 00000564 25730000 DC8 "%s",+0 \ 00000568 ........ DC32 RXbuf \ 0000056C ........ DC32 `?` + 220 \ 00000570 ........ DC32 sndStartup \ 00000574 ........ DC32 `?` + 232 \ 00000578 ........ DC32 `?` + 244 \ 0000057C ........ DC32 `?` + 252 \ 00000580 ........ DC32 `?` + 260 \ 00000584 ........ DC32 sndMsg \ 00000588 ........ DC32 sndMsg2 \ 0000058C ........ DC32 `?` + 272 \ 00000590 ........ DC32 sndMsgSent \ 00000594 ........ DC32 `?` + 284 \ 00000598 ........ DC32 janis \ 0000059C ........ DC32 `?` + 304 \ 000005A0 ........ DC32 pingsnd \ 000005A4 ........ 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 08D04DE2 SUB SP,SP,#+8 \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0180A0E1 MOV R8,R1 2643 char *de=malloc(64); \ 00000010 4000A0E3 MOV R0,#+64 \ 00000014 140000EF SWI +20 \ 00000018 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); \ 0000001C 0400A0E1 MOV R0,R4 \ 00000020 1B0000EF SWI +27 2650 // char *du=malloc(64);a_txt 2651 iz=0; 2652 #ifdef ELKA 2653 text_l=main_lenght-name_l; \ 00000024 F4119FE5 LDR R1,??AddToMain_0 ;; main_lenght \ 00000028 0070A0E3 MOV R7,#+0 \ 0000002C 001091E5 LDR R1,[R1, #+0] 2654 #else 2655 text_l=main_lenght-name_l; 2656 #endif 2657 2658 if(strlen(si)>text_l) \ 00000030 0060A0E3 MOV R6,#+0 \ 00000034 009041E0 SUB R9,R1,R0 \ 00000038 0800A0E1 MOV R0,R8 \ 0000003C 1B0000EF SWI +27 \ 00000040 000059E1 CMP R9,R0 \ 00000044 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); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 2686 iz=0; \ ??AddToMain_2: \ 00000054 0070A0E3 MOV R7,#+0 \ 00000058 1A0000EA B ??AddToMain_3 \ ??AddToMain_4: \ 0000005C 0810D7E7 LDRB R1,[R7, +R8] \ 00000060 019049E2 SUB R9,R9,#+1 \ 00000064 0510C7E7 STRB R1,[R7, +R5] \ 00000068 0070A0E1 MOV R7,R0 \ ??AddToMain_1: \ 0000006C 010087E2 ADD R0,R7,#+1 \ 00000070 000059E3 CMP R9,#+0 \ 00000074 F8FFFF1A BNE ??AddToMain_4 \ 00000078 A4119FE5 LDR R1,??AddToMain_0+0x4 ;; use_cutter \ 0000007C 001091E5 LDR R1,[R1, #+0] \ 00000080 000051E3 CMP R1,#+0 \ 00000084 0500000A BEQ ??AddToMain_5 \ 00000088 2E10A0E3 MOV R1,#+46 \ 0000008C 0510C7E7 STRB R1,[R7, +R5] \ 00000090 0510C0E7 STRB R1,[R0, +R5] \ 00000094 010080E2 ADD R0,R0,#+1 \ 00000098 0510C0E7 STRB R1,[R0, +R5] \ 0000009C 017080E2 ADD R7,R0,#+1 \ ??AddToMain_5: \ 000000A0 0560C7E7 STRB R6,[R7, +R5] \ 000000A4 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: \ 000000A8 0510D7E7 LDRB R1,[R7, +R5] \ 000000AC 2000A0E3 MOV R0,#+32 \ 000000B0 0D0051E3 CMP R1,#+13 \ 000000B4 0500C707 STRBEQ R0,[R7, +R5] 2710 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 2711 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 2712 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 2713 de[iz]='\0'; 2714 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable79 ;; main_count \ 000000DC 0560C7E7 STRB R6,[R7, +R5] \ 000000E0 ........ LDR R6,??DataTable82 ;; S_ICONS \ 000000E4 3C719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E8 671D86E2 ADD R1,R6,#+6592 \ 000000EC 04108DE5 STR R1,[SP, #+4] \ 000000F0 000098E5 LDR R0,[R8, #+0] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 0400001A BNE ??AddToMain_7 \ 000000FC 04009DE5 LDR R0,[SP, #+4] \ 00000100 0530A0E1 MOV R3,R5 \ 00000104 0420A0E1 MOV R2,R4 \ 00000108 0710A0E1 MOV R1,R7 \ 0000010C 160000EF SWI +22 2715 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000110 F010A0E3 MOV R1,#+240 \ 00000114 641D81E3 ORR R1,R1,#0x1900 \ 00000118 061081E0 ADD R1,R1,R6 \ 0000011C 00108DE5 STR R1,[SP, #+0] \ 00000120 000098E5 LDR R0,[R8, #+0] \ 00000124 010050E3 CMP R0,#+1 \ 00000128 0400001A BNE ??AddToMain_8 \ 0000012C 00009DE5 LDR R0,[SP, #+0] \ 00000130 0530A0E1 MOV R3,R5 \ 00000134 0420A0E1 MOV R2,R4 \ 00000138 0710A0E1 MOV R1,R7 \ 0000013C 160000EF SWI +22 2716 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000140 2000A0E3 MOV R0,#+32 \ 00000144 680D80E3 ORR R0,R0,#0x1A00 \ 00000148 069080E0 ADD R9,R0,R6 \ 0000014C 000098E5 LDR R0,[R8, #+0] \ 00000150 020050E3 CMP R0,#+2 \ 00000154 0400001A BNE ??AddToMain_9 \ 00000158 0530A0E1 MOV R3,R5 \ 0000015C 0420A0E1 MOV R2,R4 \ 00000160 0710A0E1 MOV R1,R7 \ 00000164 0900A0E1 MOV R0,R9 \ 00000168 160000EF SWI +22 2717 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 0000016C 5000A0E3 MOV R0,#+80 \ 00000170 680D80E3 ORR R0,R0,#0x1A00 \ 00000174 06A080E0 ADD R10,R0,R6 \ 00000178 000098E5 LDR R0,[R8, #+0] \ 0000017C 030050E3 CMP R0,#+3 \ 00000180 0400001A BNE ??AddToMain_10 \ 00000184 0530A0E1 MOV R3,R5 \ 00000188 0420A0E1 MOV R2,R4 \ 0000018C 0710A0E1 MOV R1,R7 \ 00000190 0A00A0E1 MOV R0,R10 \ 00000194 160000EF SWI +22 2718 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000198 000098E5 LDR R0,[R8, #+0] \ 0000019C 6ABD86E2 ADD R11,R6,#+6784 \ 000001A0 040050E3 CMP R0,#+4 \ 000001A4 0400001A BNE ??AddToMain_11 \ 000001A8 0530A0E1 MOV R3,R5 \ 000001AC 0420A0E1 MOV R2,R4 \ 000001B0 0710A0E1 MOV R1,R7 \ 000001B4 0B00A0E1 MOV R0,R11 \ 000001B8 160000EF SWI +22 2719 if(main_count>4) \ ??AddToMain_11: \ 000001BC 000098E5 LDR R0,[R8, #+0] \ 000001C0 050050E3 CMP R0,#+5 \ 000001C4 100000BA BLT ??AddToMain_12 2720 { 2721 strcpy(a_txt, s_txt); \ 000001C8 00109DE5 LDR R1,[SP, #+0] \ 000001CC 04009DE5 LDR R0,[SP, #+4] \ 000001D0 1A0000EF SWI +26 2722 strcpy(s_txt, d_txt); \ 000001D4 00009DE5 LDR R0,[SP, #+0] \ 000001D8 0910A0E1 MOV R1,R9 \ 000001DC 1A0000EF SWI +26 2723 strcpy(d_txt, f_txt); \ 000001E0 0A10A0E1 MOV R1,R10 \ 000001E4 0900A0E1 MOV R0,R9 \ 000001E8 1A0000EF SWI +26 2724 strcpy(f_txt, g_txt); \ 000001EC 0B10A0E1 MOV R1,R11 \ 000001F0 0A00A0E1 MOV R0,R10 \ 000001F4 1A0000EF SWI +26 2725 sprintf(g_txt, "%s: %s", nameu,de); \ 000001F8 0530A0E1 MOV R3,R5 \ 000001FC 0420A0E1 MOV R2,R4 \ 00000200 0710A0E1 MOV R1,R7 \ 00000204 0B00A0E1 MOV R0,R11 \ 00000208 160000EF SWI +22 2726 } 2727 mfree(de); \ ??AddToMain_12: \ 0000020C 0500A0E1 MOV R0,R5 \ 00000210 150000EF SWI +21 2728 main_d=1; \ 00000214 0100A0E3 MOV R0,#+1 \ 00000218 E00086E5 STR R0,[R6, #+224] 2729 } \ 0000021C F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000220 ........ DC32 main_lenght \ 00000224 ........ DC32 use_cutter \ 00000228 ........ 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,??DataTable82 ;; 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 C00196E5 LDR R0,[R6, #+448] \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 2000000A BEQ ??AddStringToLog_9 2771 { 2772 void *data=FindGUIbyId(edchat_id,NULL); \ 000001A4 C00196E5 LDR R0,[R6, #+448] \ 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 B0019605 LDREQ R0,[R6, #+432] \ 000001DC 01008002 ADDEQ R0,R0,#+1 \ 000001E0 B0018605 STREQ R0,[R6, #+432] 2790 if(NEW_MSG==1) \ 000001E4 E40196E5 LDR R0,[R6, #+484] \ 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 140196E5 LDR R0,[R6, #+276] \ 00000200 010080E2 ADD R0,R0,#+1 \ 00000204 140186E5 STR R0,[R6, #+276] 2794 NEW_MSG=0; \ 00000208 0000A0E3 MOV R0,#+0 \ 0000020C E40186E5 STR R0,[R6, #+484] 2795 } 2796 t->isunread=1; \ ??AddStringToLog_10: \ 00000210 0100A0E3 MOV R0,#+1 \ 00000214 640084E5 STR R0,[R4, #+100] 2797 if(saver_on) reftes(); \ 00000218 F80096E5 LDR R0,[R6, #+248] \ 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,??DataTable114 ;; 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 2C0198E5 LDR R0,[R8, #+300] \ 0000011C 101087E2 ADD R1,R7,#+16 \ 00000120 ........ _BLF ascii2ws,??ascii2ws??rA 2882 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000124 2C3198E5 LDR R3,[R8, #+300] \ 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 2C3198E5 LDR R3,[R8, #+300] \ 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 2C0198E5 LDR R0,[R8, #+300] \ 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 2C0198E5 LDR R0,[R8, #+300] \ 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 2C3198E5 LDR R3,[R8, #+300] \ 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 C00198E5 LDR R0,[R8, #+448] \ 000002F0 350100EF SWI +309 \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 0300000A BEQ ??AddMsgToChat_16 2934 { 2935 total_unread--; \ 000002FC B00198E5 LDR R0,[R8, #+432] \ 00000300 010040E2 SUB R0,R0,#+1 \ 00000304 B00188E5 STR R0,[R8, #+432] \ 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 141198E5 LDR R1,[R8, #+276] \ 00000324 682090E5 LDR R2,[R0, #+104] \ 00000328 021041E0 SUB R1,R1,R2 \ 0000032C 141188E5 STR R1,[R8, #+276] 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 + 448 \ 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 + 448 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 + 372 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,??DataTable117 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 3019 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 372 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 F04F2DE9 PUSH {R4-R11,LR} 3025 #ifdef NEWSGOLD 3026 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R4,??DataTable117 ;; SendAnswer \ 00000008 ........ LDR R10,??DataTable114 ;; S_ICONS \ 0000000C ........ LDR R8,??DataTable110 ;; CurrentXStatus \ 00000010 0CD04DE2 SUB SP,SP,#+12 \ 00000014 28019AE5 LDR R0,[R10, #+296] \ 00000018 1A50A0E3 MOV R5,#+26 \ 0000001C 0160A0E3 MOV R6,#+1 \ 00000020 1670A0E3 MOV R7,#+22 \ 00000024 0090A0E3 MOV R9,#+0 \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 3C00000A BEQ ??set_my_xstatus_0 3027 { 3028 if(CurrentXStatus!=11) \ 00000030 000098E5 LDR R0,[R8, #+0] \ 00000034 0B0050E3 CMP R0,#+11 \ 00000038 7200000A BEQ ??set_my_xstatus_1 3029 { 3030 #endif 3031 TPKT *p; 3032 char *s1; 3033 char *s2; 3034 int l1; 3035 int l2; 3036 p=malloc(sizeof(PKT)+1); \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 140000EF SWI +20 \ 00000044 00A0A0E1 MOV R10,R0 3037 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000048 00908AE5 STR R9,[R10, #+0] 3038 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 0000004C B470CAE1 STRH R7,[R10, #+4] 3039 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000050 B660CAE1 STRH R6,[R10, #+6] 3040 p->data[0]=CurrentXStatus; \ 00000054 000098E5 LDR R0,[R8, #+0] 3041 SUBPROC((void *)SendAnswer,0,p); \ 00000058 0A20A0E1 MOV R2,R10 \ 0000005C 0800CAE5 STRB R0,[R10, #+8] \ 00000060 0010A0E3 MOV R1,#+0 \ 00000064 0400A0E1 MOV R0,R4 \ 00000068 710100EF SWI +369 3042 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 0000006C 000098E5 LDR R0,[R8, #+0] \ 00000070 0D10A0E1 MOV R1,SP \ 00000074 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000078 010080E2 ADD R0,R0,#+1 \ 0000007C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000080 0060A0E1 MOV R6,R0 3043 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000084 000098E5 LDR R0,[R8, #+0] \ 00000088 04108DE2 ADD R1,SP,#+4 \ 0000008C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000090 020080E2 ADD R0,R0,#+2 \ 00000094 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000098 0070A0E1 MOV R7,R0 3044 if ((!s1)||(!s2)) return; \ 0000009C 000056E3 CMP R6,#+0 \ 000000A0 00005713 CMPNE R7,#+0 \ 000000A4 F78FBD08 POPEQ {R0-R2,R4-R11,PC} 3045 p=malloc(sizeof(PKT)+l1+l2+1); \ 000000A8 00009DE5 LDR R0,[SP, #+0] \ 000000AC 04109DE5 LDR R1,[SP, #+4] \ 000000B0 000081E0 ADD R0,R1,R0 \ 000000B4 090080E2 ADD R0,R0,#+9 \ 000000B8 140000EF SWI +20 \ 000000BC 00A0A0E1 MOV R10,R0 3046 p->pkt.uin=0; \ 000000C0 00908AE5 STR R9,[R10, #+0] 3047 p->pkt.type=T_XTEXT_SET; \ 000000C4 B450CAE1 STRH R5,[R10, #+4] 3048 p->pkt.data_len=l1+l2+1; \ 000000C8 00009DE5 LDR R0,[SP, #+0] \ 000000CC 04109DE5 LDR R1,[SP, #+4] \ 000000D0 000081E0 ADD R0,R1,R0 \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 B600CAE1 STRH R0,[R10, #+6] 3049 strncpy(p->data+0,s1,l1); \ 000000DC 00209DE5 LDR R2,[SP, #+0] \ 000000E0 0610A0E1 MOV R1,R6 \ 000000E4 08008AE2 ADD R0,R10,#+8 \ 000000E8 160100EF SWI +278 3050 p->data[l1]=0; \ 000000EC 00009DE5 LDR R0,[SP, #+0] 3051 strncpy(p->data+l1+1,s2,l2); \ 000000F0 0710A0E1 MOV R1,R7 \ 000000F4 0A0080E0 ADD R0,R0,R10 \ 000000F8 0890C0E5 STRB R9,[R0, #+8] \ 000000FC 00009DE5 LDR R0,[SP, #+0] \ 00000100 04209DE5 LDR R2,[SP, #+4] \ 00000104 0A0080E0 ADD R0,R0,R10 \ 00000108 090080E2 ADD R0,R0,#+9 \ 0000010C 160100EF SWI +278 3052 SUBPROC((void *)SendAnswer,0,p); \ 00000110 0A20A0E1 MOV R2,R10 \ 00000114 0010A0E3 MOV R1,#+0 \ 00000118 0400A0E1 MOV R0,R4 \ 0000011C 710100EF SWI +369 \ 00000120 F78FBDE8 POP {R0-R2,R4-R11,PC} 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); \ ??set_my_xstatus_0: \ 00000124 0900A0E3 MOV R0,#+9 \ 00000128 140000EF SWI +20 \ 0000012C 00B0A0E1 MOV R11,R0 3069 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000130 00908BE5 STR R9,[R11, #+0] 3070 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000134 B470CBE1 STRH R7,[R11, #+4] 3071 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000138 B660CBE1 STRH R6,[R11, #+6] 3072 p->data[0]=CurrentXStatus; \ 0000013C 000098E5 LDR R0,[R8, #+0] 3073 SUBPROC((void *)SendAnswer,0,p); \ 00000140 0B20A0E1 MOV R2,R11 \ 00000144 0800CBE5 STRB R0,[R11, #+8] \ 00000148 0010A0E3 MOV R1,#+0 \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 710100EF SWI +369 3074 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000154 000098E5 LDR R0,[R8, #+0] \ 00000158 0D10A0E1 MOV R1,SP \ 0000015C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000160 010080E2 ADD R0,R0,#+1 \ 00000164 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000168 0060A0E1 MOV R6,R0 3075 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 0000016C 000098E5 LDR R0,[R8, #+0] \ 00000170 04108DE2 ADD R1,SP,#+4 \ 00000174 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000178 020080E2 ADD R0,R0,#+2 \ 0000017C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000180 0070A0E1 MOV R7,R0 3076 if ((!s1)||(!s2)) return; \ 00000184 000056E3 CMP R6,#+0 \ 00000188 00005713 CMPNE R7,#+0 \ 0000018C F78FBD08 POPEQ {R0-R2,R4-R11,PC} 3077 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000190 00009DE5 LDR R0,[SP, #+0] \ 00000194 04109DE5 LDR R1,[SP, #+4] \ 00000198 000081E0 ADD R0,R1,R0 \ 0000019C 090080E2 ADD R0,R0,#+9 \ 000001A0 140000EF SWI +20 \ 000001A4 00B0A0E1 MOV R11,R0 3078 p->pkt.uin=0; \ 000001A8 00908BE5 STR R9,[R11, #+0] 3079 p->pkt.type=T_XTEXT_SET; \ 000001AC B450CBE1 STRH R5,[R11, #+4] 3080 p->pkt.data_len=l1+l2+1; \ 000001B0 00009DE5 LDR R0,[SP, #+0] \ 000001B4 04109DE5 LDR R1,[SP, #+4] \ 000001B8 000081E0 ADD R0,R1,R0 \ 000001BC 010080E2 ADD R0,R0,#+1 \ 000001C0 B600CBE1 STRH R0,[R11, #+6] 3081 strncpy(p->data+0,s1,l1); \ 000001C4 00209DE5 LDR R2,[SP, #+0] \ 000001C8 0610A0E1 MOV R1,R6 \ 000001CC 08008BE2 ADD R0,R11,#+8 \ 000001D0 160100EF SWI +278 3082 p->data[l1]=0; \ 000001D4 00009DE5 LDR R0,[SP, #+0] 3083 strncpy(p->data+l1+1,s2,l2); \ 000001D8 0710A0E1 MOV R1,R7 \ 000001DC 0B0080E0 ADD R0,R0,R11 \ 000001E0 0890C0E5 STRB R9,[R0, #+8] \ 000001E4 00009DE5 LDR R0,[SP, #+0] \ 000001E8 04209DE5 LDR R2,[SP, #+4] \ 000001EC 0B0080E0 ADD R0,R0,R11 \ 000001F0 090080E2 ADD R0,R0,#+9 \ 000001F4 160100EF SWI +278 3084 SUBPROC((void *)SendAnswer,0,p); \ 000001F8 0B20A0E1 MOV R2,R11 \ 000001FC 0010A0E3 MOV R1,#+0 \ 00000200 0400A0E1 MOV R0,R4 \ 00000204 710100EF SWI +369 3085 tracktimer=0; \ ??set_my_xstatus_1: \ 00000208 54918AE5 STR R9,[R10, #+340] 3086 GetTags(); \ 0000020C ........ _BLF GetTags,??GetTags??rA \ 00000210 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return 3087 } 3088 #endif 3089 } 3090 #ifdef NEWSGOLD 3091 extern const char playing[13]; 3092 \ In segment CODE, align 4, keep-with-next 3093 void set_my_xstatus2(void) 3094 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 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); \ 00000004 ........ LDR R6,??DataTable117 ;; SendAnswer 3106 // char *s1; 3107 char *sk2=malloc(256); 3108 // strcpy(s1, playing); 3109 // s1="Now playing:"; 3110 strcpy(sk2,teast2); 3111 l1=strlen(playing); \ 00000008 DC809FE5 LDR R8,??set_my_xstatus2_0 ;; playing \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 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 0B00A0E3 MOV R0,#+11 \ 00000038 0800C4E5 STRB R0,[R4, #+8] \ 0000003C 0420A0E1 MOV R2,R4 \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 710100EF SWI +369 \ 0000004C 400FA0E3 MOV R0,#+256 \ 00000050 140000EF SWI +20 \ 00000054 94109FE5 LDR R1,??set_my_xstatus2_0+0x4 ;; teast2 \ 00000058 0070A0E1 MOV R7,R0 \ 0000005C 1A0000EF SWI +26 \ 00000060 0800A0E1 MOV R0,R8 \ 00000064 1B0000EF SWI +27 \ 00000068 0090A0E1 MOV R9,R0 3112 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 3113 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 3114 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000080 09008AE0 ADD R0,R10,R9 \ 00000084 090080E2 ADD R0,R0,#+9 \ 00000088 140000EF SWI +20 \ 0000008C 0040A0E1 MOV R4,R0 3115 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 3116 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 3117 p->pkt.data_len=l1+l2+1; \ 0000009C 09008AE0 ADD R0,R10,R9 \ 000000A0 010080E2 ADD R0,R0,#+1 \ 000000A4 B600C4E1 STRH R0,[R4, #+6] 3118 strncpy(p->data+0,playing,l1); \ 000000A8 0920A0E1 MOV R2,R9 \ 000000AC 0810A0E1 MOV R1,R8 \ 000000B0 080084E2 ADD R0,R4,#+8 \ 000000B4 160100EF SWI +278 3119 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 3120 strncpy(p->data+l1+1,sk2,l2); \ 000000C0 0A20A0E1 MOV R2,R10 \ 000000C4 0710A0E1 MOV R1,R7 \ 000000C8 090080E2 ADD R0,R0,#+9 \ 000000CC 160100EF SWI +278 3121 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 3122 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 3123 // mfree(s1); 3124 // mfree(s2); 3125 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 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,??DataTable114 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 5C1190E5 LDR R1,[R0, #+348] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 3130 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable116 ;; `?` \ 00000018 0820A0E3 MOV R2,#+8 \ 0000001C 702E82E3 ORR R2,R2,#0x700 \ 00000020 012082E0 ADD R2,R2,R1 \ 00000024 BC2080E5 STR R2,[R0, #+188] 3131 gipc.name_from=ipc_my_name; \ 00000028 E820A0E3 MOV R2,#+232 \ 0000002C 602E82E3 ORR R2,R2,#0x600 \ 00000030 011082E0 ADD R1,R2,R1 \ 00000034 C01080E5 STR R1,[R0, #+192] 3132 gipc.data=(void *)maincsm_id; \ 00000038 181190E5 LDR R1,[R0, #+280] 3133 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000003C BC3080E2 ADD R3,R0,#+188 \ 00000040 C41080E5 STR R1,[R0, #+196] \ 00000044 0220A0E3 MOV R2,#+2 \ 00000048 B010A0E3 MOV R1,#+176 \ 0000004C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000050 0900A0E3 MOV R0,#+9 \ 00000054 420C80E3 ORR R0,R0,#0x4200 \ 00000058 000100EF SWI +256 3134 } \ 0000005C 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,??DataTable114 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C C00195E5 LDR R0,[R5, #+448] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 3139 { 3140 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 C00195E5 LDR R0,[R5, #+448] \ 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 E80185E5 STR R0,[R5, #+488] \ 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 C00195E5 LDR R0,[R5, #+448] \ 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 + 6832 \ 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 + 6832 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; \ In segment DATA_Z, align 4, align-sorted 3190 int autobot; \ autobot: \ 00000000 DS8 4 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 \ In segment CODE, align 4, keep-with-next 3209 void AutobotInit() 3210 { 3211 if(autobot==1) \ AutobotInit: \ 00000000 3C009FE5 LDR R0,??AutobotInit_0 ;; autobot \ 00000004 3C109FE5 LDR R1,??AutobotInit_0+0x4 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 010052E3 CMP R2,#+1 \ 00000014 0400001A BNE ??AutobotInit_1 3212 { 3213 autobot=0; \ 00000018 0020A0E3 MOV R2,#+0 \ 0000001C 002080E5 STR R2,[R0, #+0] 3214 ShowMSG(1,(int)"Autobot Off"); \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 480100EF SWI +328 \ 00000028 0080BDE8 POP {PC} 3215 } 3216 else 3217 { 3218 autobot=1; \ ??AutobotInit_1: \ 0000002C 0120A0E3 MOV R2,#+1 \ 00000030 002080E5 STR R2,[R0, #+0] 3219 ShowMSG(1,(int)"Autobot On"); \ 00000034 0C1081E2 ADD R1,R1,#+12 \ 00000038 0100A0E3 MOV R0,#+1 \ 0000003C 480100EF SWI +328 3220 } 3221 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??AutobotInit_0: \ 00000044 ........ DC32 autobot \ 00000048 ........ DC32 `?` 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,??DataTable123 ;; 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,??DataTable116 ;; `?` \ 0000000C 18D04DE2 SUB SP,SP,#+24 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0100A0E3 MOV R0,#+1 \ 0000001C EC0186E5 STR R0,[R6, #+492] \ 00000020 3000A0E3 MOV R0,#+48 \ 00000024 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000028 06B080E0 ADD R11,R0,R6 \ 0000002C 653F87E2 ADD R3,R7,#+404 \ 00000030 622F87E2 ADD R2,R7,#+392 \ 00000034 4F1F87E2 ADD R1,R7,#+316 \ 00000038 0B00A0E1 MOV R0,R11 \ 0000003C 160000EF SWI +22 \ 00000040 681F87E2 ADD R1,R7,#+416 \ 00000044 0400A0E1 MOV R0,R4 3229 if(strstr(txt,"GAME:")!=0) \ 00000048 180100EF SWI +280 \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 1000000A BEQ ??CheckComand_0 3230 { 3231 game_gipc.name_to=ipc_game_name; \ 00000054 720E87E2 ADD R0,R7,#+1824 \ 00000058 C80086E5 STR R0,[R6, #+200] 3232 game_gipc.name_from=ipc_my_name; \ 0000005C E800A0E3 MOV R0,#+232 \ 00000060 600E80E3 ORR R0,R0,#0x600 \ 00000064 070080E0 ADD R0,R0,R7 \ 00000068 CC0086E5 STR R0,[R6, #+204] 3233 game_gipc.data=txt; \ 0000006C D04086E5 STR R4,[R6, #+208] 3234 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_GAME_DATA,&game_gipc); \ 00000070 C83086E2 ADD R3,R6,#+200 \ 00000074 1820A0E3 MOV R2,#+24 \ 00000078 B010A0E3 MOV R1,#+176 \ 0000007C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000080 0900A0E3 MOV R0,#+9 \ 00000084 420C80E3 ORR R0,R0,#0x4200 \ 00000088 000100EF SWI +256 3235 comanda=0; \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 EC0186E5 STR R0,[R6, #+492] 3236 return; \ 00000094 380000EA B ??CheckComand_1 3237 } 3238 if(!strcmp(txt, "GET_ONLINE_TIME")) \ ??CheckComand_0: \ 00000098 ........ LDR R8,??DataTable117 ;; SendAnswer \ 0000009C FF90A0E3 MOV R9,#+255 \ 000000A0 7F9C89E3 ORR R9,R9,#0x7F00 \ 000000A4 02A0A0E3 MOV R10,#+2 \ 000000A8 751F87E2 ADD R1,R7,#+468 \ 000000AC 0400A0E1 MOV R0,R4 \ 000000B0 190000EF SWI +25 \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 3100001A BNE ??CheckComand_2 3239 { 3240 comanda=0; \ 000000BC EC0186E5 STR R0,[R6, #+492] 3241 TPKT *p; 3242 sprintf(hah,"Время в онлайн: %02d:%02d:%02d \n" 3243 "Сервер: %s", xstatus_old, minimum_xstatus, maximum, hostbuf2); \ 000000C0 B400A0E3 MOV R0,#+180 \ 000000C4 580D80E3 ORR R0,R0,#0x1600 \ 000000C8 06B080E0 ADD R11,R0,R6 \ 000000CC 800F80E2 ADD R0,R0,#+512 \ 000000D0 060080E0 ADD R0,R0,R6 \ 000000D4 01002DE9 PUSH {R0} \ 000000D8 500196E5 LDR R0,[R6, #+336] \ 000000DC 6A1F87E2 ADD R1,R7,#+424 \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 4C3196E5 LDR R3,[R6, #+332] \ 000000E8 482196E5 LDR R2,[R6, #+328] \ 000000EC 0B00A0E1 MOV R0,R11 \ 000000F0 160000EF SWI +22 3244 p=malloc(sizeof(PKT)+strlen(hah)+1); \ 000000F4 0B00A0E1 MOV R0,R11 \ 000000F8 1B0000EF SWI +27 \ 000000FC 090080E2 ADD R0,R0,#+9 \ 00000100 140000EF SWI +20 \ 00000104 0040A0E1 MOV R4,R0 3245 p->pkt.uin=t->uin; \ 00000108 0C0095E5 LDR R0,[R5, #+12] \ 0000010C 000084E5 STR R0,[R4, #+0] 3246 p->pkt.type=T_SENDMSG; \ 00000110 B4A0C4E1 STRH R10,[R4, #+4] 3247 p->pkt.data_len=strlen(hah); \ 00000114 0B00A0E1 MOV R0,R11 \ 00000118 1B0000EF SWI +27 \ 0000011C B600C4E1 STRH R0,[R4, #+6] 3248 strcpy(p->data,hah); \ 00000120 0B10A0E1 MOV R1,R11 \ 00000124 080084E2 ADD R0,R4,#+8 \ 00000128 1A0000EF SWI +26 3249 #ifdef EVILFOX 3250 SENDMSGCOUNT++; 3251 #else 3252 if(show_send_info) \ 0000012C 24059FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 08D08DE2 ADD SP,SP,#+8 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 200196E5 LDR R0,[R6, #+288] \ 00000140 010080E2 ADD R0,R0,#+1 \ 00000144 200186E5 STR R0,[R6, #+288] \ 00000148 0700000A BEQ ??CheckComand_4 3253 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 0000014C 000009E0 AND R0,R9,R0 \ 00000150 01002DE9 PUSH {R0} \ 00000154 173087E2 ADD R3,R7,#+23 \ 00000158 6B2D86E2 ADD R2,R6,#+6848 \ 0000015C 0110A0E3 MOV R1,#+1 \ 00000160 0500A0E1 MOV R0,R5 \ 00000164 ........ BL AddStringToLog \ 00000168 04D08DE2 ADD SP,SP,#+4 3254 else 3255 SENDMSGCOUNT++; 3256 #endif 3257 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_4: \ 0000016C 0420A0E1 MOV R2,R4 \ 00000170 0010A0E3 MOV R1,#+0 \ 00000174 0800A0E1 MOV R0,R8 \ 00000178 710100EF SWI +369 3258 return; \ ??CheckComand_1: \ 0000017C 1CD08DE2 ADD SP,SP,#+28 \ 00000180 F08FBDE8 POP {R4-R11,PC} 3259 } 3260 if(!strcmp(txt, "GET_MSG_INFO")) \ ??CheckComand_2: \ 00000184 851F87E2 ADD R1,R7,#+532 \ 00000188 0400A0E1 MOV R0,R4 \ 0000018C 190000EF SWI +25 \ 00000190 000050E3 CMP R0,#+0 \ 00000194 2700001A BNE ??CheckComand_5 3261 { 3262 comanda=0; \ 00000198 EC0186E5 STR R0,[R6, #+492] 3263 TPKT *p; 3264 char *send_txt=malloc(64); \ 0000019C 4000A0E3 MOV R0,#+64 \ 000001A0 140000EF SWI +20 \ 000001A4 0040A0E1 MOV R4,R0 3265 sprintf(send_txt, "Отправлено сообщений: %d \n" 3266 "Принято сообщений: %d" 3267 , main2_count, main_count); \ 000001A8 ........ LDR R0,??DataTable118 ;; main_count \ 000001AC 791F87E2 ADD R1,R7,#+484 \ 000001B0 003090E5 LDR R3,[R0, #+0] \ 000001B4 ........ LDR R0,??DataTable119 ;; main2_count \ 000001B8 002090E5 LDR R2,[R0, #+0] \ 000001BC 0400A0E1 MOV R0,R4 \ 000001C0 160000EF SWI +22 3268 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000001C4 0400A0E1 MOV R0,R4 \ 000001C8 1B0000EF SWI +27 \ 000001CC 090080E2 ADD R0,R0,#+9 \ 000001D0 140000EF SWI +20 \ 000001D4 00B0A0E1 MOV R11,R0 3269 p->pkt.uin=t->uin; \ 000001D8 0C0095E5 LDR R0,[R5, #+12] \ 000001DC 00008BE5 STR R0,[R11, #+0] 3270 p->pkt.type=T_SENDMSG; \ 000001E0 B4A0CBE1 STRH R10,[R11, #+4] 3271 p->pkt.data_len=strlen(send_txt); \ 000001E4 0400A0E1 MOV R0,R4 \ 000001E8 1B0000EF SWI +27 \ 000001EC B600CBE1 STRH R0,[R11, #+6] 3272 strcpy(p->data,send_txt); \ 000001F0 0410A0E1 MOV R1,R4 \ 000001F4 08008BE2 ADD R0,R11,#+8 \ 000001F8 1A0000EF SWI +26 3273 #ifdef EVILFOX 3274 SENDMSGCOUNT++; 3275 #else 3276 if(show_send_info) \ 000001FC 54049FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000200 000090E5 LDR R0,[R0, #+0] \ 00000204 000050E3 CMP R0,#+0 \ 00000208 200196E5 LDR R0,[R6, #+288] \ 0000020C 010080E2 ADD R0,R0,#+1 \ 00000210 200186E5 STR R0,[R6, #+288] \ 00000214 0701000A BEQ ??CheckComand_6 3277 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 00000218 000009E0 AND R0,R9,R0 \ 0000021C 01002DE9 PUSH {R0} \ 00000220 173087E2 ADD R3,R7,#+23 \ 00000224 0110A0E3 MOV R1,#+1 \ 00000228 D800A0E3 MOV R0,#+216 \ 0000022C 680D80E3 ORR R0,R0,#0x1A00 \ 00000230 062080E0 ADD R2,R0,R6 \ 00000234 FC0000EA 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: \ 00000238 941F87E2 ADD R1,R7,#+592 \ 0000023C 0400A0E1 MOV R0,R4 \ 00000240 190000EF SWI +25 \ 00000244 000050E3 CMP R0,#+0 \ 00000248 2C00001A BNE ??CheckComand_8 3289 { 3290 comanda=0; \ 0000024C EC0186E5 STR R0,[R6, #+492] 3291 TPKT *p; 3292 3293 WSHDR *ws=AllocWS(32); \ 00000250 2000A0E3 MOV R0,#+32 \ 00000254 250100EF SWI +293 \ 00000258 00B0A0E1 MOV R11,R0 3294 GetProvider(ws,0); \ 0000025C 0010A0E3 MOV R1,#+0 \ 00000260 410000EF SWI +65 3295 char prov[16]; 3296 ws_2str(ws,prov,wstrlen(ws)); \ 00000264 0B00A0E1 MOV R0,R11 \ 00000268 230100EF SWI +291 \ 0000026C 0020A0E1 MOV R2,R0 \ 00000270 08108DE2 ADD R1,SP,#+8 \ 00000274 0B00A0E1 MOV R0,R11 \ 00000278 A30000EF SWI +163 3297 char *send_txt=malloc(32); \ 0000027C 2000A0E3 MOV R0,#+32 \ 00000280 140000EF SWI +20 \ 00000284 0040A0E1 MOV R4,R0 3298 sprintf(send_txt, "Оператор: %s", prov); \ 00000288 08208DE2 ADD R2,SP,#+8 \ 0000028C 891F87E2 ADD R1,R7,#+548 \ 00000290 160000EF SWI +22 3299 FreeWS(ws); \ 00000294 0B00A0E1 MOV R0,R11 \ 00000298 290100EF SWI +297 3300 3301 p=malloc(sizeof(PKT)+28+1); \ 0000029C 2500A0E3 MOV R0,#+37 \ 000002A0 140000EF SWI +20 \ 000002A4 00B0A0E1 MOV R11,R0 3302 p->pkt.uin=t->uin; \ 000002A8 0C0095E5 LDR R0,[R5, #+12] \ 000002AC 00008BE5 STR R0,[R11, #+0] 3303 p->pkt.type=T_SENDMSG; \ 000002B0 B4A0CBE1 STRH R10,[R11, #+4] 3304 p->pkt.data_len=strlen(send_txt); \ 000002B4 0400A0E1 MOV R0,R4 \ 000002B8 1B0000EF SWI +27 \ 000002BC B600CBE1 STRH R0,[R11, #+6] 3305 strcpy(p->data,send_txt); \ 000002C0 0410A0E1 MOV R1,R4 \ 000002C4 08008BE2 ADD R0,R11,#+8 \ 000002C8 1A0000EF SWI +26 3306 if(show_send_info) \ 000002CC 84039FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000002D0 000090E5 LDR R0,[R0, #+0] \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 200196E5 LDR R0,[R6, #+288] \ 000002DC 010080E2 ADD R0,R0,#+1 \ 000002E0 200186E5 STR R0,[R6, #+288] \ 000002E4 D300000A BEQ ??CheckComand_6 3307 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF); \ 000002E8 000009E0 AND R0,R9,R0 \ 000002EC 01002DE9 PUSH {R0} \ 000002F0 173087E2 ADD R3,R7,#+23 \ 000002F4 8D2F87E2 ADD R2,R7,#+564 \ 000002F8 0110A0E3 MOV R1,#+1 \ 000002FC CA0000EA 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: \ 00000300 9D1F87E2 ADD R1,R7,#+628 \ 00000304 0400A0E1 MOV R0,R4 \ 00000308 190000EF SWI +25 \ 0000030C 000050E3 CMP R0,#+0 \ 00000310 3200001A BNE ??CheckComand_9 3318 { 3319 comanda=0; \ 00000314 EC0186E5 STR R0,[R6, #+492] 3320 TPKT *p; 3321 char *send_txt=malloc(256); \ 00000318 400FA0E3 MOV R0,#+256 \ 0000031C 140000EF SWI +20 \ 00000320 0040A0E1 MOV R4,R0 3322 // sprintf(I_UIN, "uin%d", t->uin); 3323 strcpy(I_UIN, t->name); \ 00000324 B410A0E3 MOV R1,#+180 \ 00000328 641D81E3 ORR R1,R1,#0x1900 \ 0000032C 061081E0 ADD R1,R1,R6 \ 00000330 00108DE5 STR R1,[SP, #+0] \ 00000334 00009DE5 LDR R0,[SP, #+0] \ 00000338 141085E2 ADD R1,R5,#+20 \ 0000033C 1A0000EF SWI +26 3324 if(strstr(ignor_list,I_UIN)==0) \ 00000340 00109DE5 LDR R1,[SP, #+0] \ 00000344 ........ LDR R0,??DataTable120 ;; ignor_list \ 00000348 180100EF SWI +280 \ 0000034C 000050E3 CMP R0,#+0 3325 { 3326 strcpy(send_txt, mod_info); \ 00000350 0B10A001 MOVEQ R1,R11 3327 } 3328 else 3329 strcpy(send_txt, "***Access denied***"); \ 00000354 981F8712 ADDNE R1,R7,#+608 \ 00000358 0400A0E1 MOV R0,R4 \ 0000035C 1A0000EF SWI +26 3330 3331 strcpy(send_txt, mod_info); \ 00000360 0B10A0E1 MOV R1,R11 \ 00000364 0400A0E1 MOV R0,R4 \ 00000368 1A0000EF SWI +26 3332 3333 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 0000036C 0400A0E1 MOV R0,R4 \ 00000370 1B0000EF SWI +27 \ 00000374 090080E2 ADD R0,R0,#+9 \ 00000378 140000EF SWI +20 \ 0000037C 00B0A0E1 MOV R11,R0 3334 p->pkt.uin=t->uin; \ 00000380 0C0095E5 LDR R0,[R5, #+12] \ 00000384 00008BE5 STR R0,[R11, #+0] 3335 p->pkt.type=T_SENDMSG; \ 00000388 B4A0CBE1 STRH R10,[R11, #+4] 3336 p->pkt.data_len=strlen(send_txt); \ 0000038C 0400A0E1 MOV R0,R4 \ 00000390 1B0000EF SWI +27 \ 00000394 B600CBE1 STRH R0,[R11, #+6] 3337 strcpy(p->data,send_txt); \ 00000398 0410A0E1 MOV R1,R4 \ 0000039C 08008BE2 ADD R0,R11,#+8 \ 000003A0 1A0000EF SWI +26 3338 #ifdef EVILFOX 3339 SENDMSGCOUNT++; 3340 #else 3341 if(show_send_info) \ 000003A4 AC029FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000003A8 000090E5 LDR R0,[R0, #+0] \ 000003AC 000050E3 CMP R0,#+0 \ 000003B0 200196E5 LDR R0,[R6, #+288] \ 000003B4 010080E2 ADD R0,R0,#+1 \ 000003B8 200186E5 STR R0,[R6, #+288] \ 000003BC 9D00000A BEQ ??CheckComand_6 3342 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 000003C0 000009E0 AND R0,R9,R0 \ 000003C4 01002DE9 PUSH {R0} \ 000003C8 173087E2 ADD R3,R7,#+23 \ 000003CC 0110A0E3 MOV R1,#+1 \ 000003D0 0400A0E3 MOV R0,#+4 \ 000003D4 6C0D80E3 ORR R0,R0,#0x1B00 \ 000003D8 062080E0 ADD R2,R0,R6 \ 000003DC 920000EA 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: \ 000003E0 A81F87E2 ADD R1,R7,#+672 \ 000003E4 0400A0E1 MOV R0,R4 \ 000003E8 190000EF SWI +25 \ 000003EC 000050E3 CMP R0,#+0 \ 000003F0 2300001A BNE ??CheckComand_10 3351 { 3352 comanda=0; \ 000003F4 EC0186E5 STR R0,[R6, #+492] 3353 TPKT *p; 3354 int bat; 3355 bat=*RamCap(); \ 000003F8 C88000EF SWI +32968 \ 000003FC B0B0D0E1 LDRH R11,[R0, #+0] 3356 char *send_txt=malloc(64); \ 00000400 4000A0E3 MOV R0,#+64 \ 00000404 140000EF SWI +20 \ 00000408 0040A0E1 MOV R4,R0 3357 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 0000040C 0B20A0E1 MOV R2,R11 \ 00000410 A11F87E2 ADD R1,R7,#+644 \ 00000414 160000EF SWI +22 3358 p=malloc(sizeof(PKT)+28+1); \ 00000418 2500A0E3 MOV R0,#+37 \ 0000041C 140000EF SWI +20 \ 00000420 00B0A0E1 MOV R11,R0 3359 p->pkt.uin=t->uin; \ 00000424 0C0095E5 LDR R0,[R5, #+12] \ 00000428 00008BE5 STR R0,[R11, #+0] 3360 p->pkt.type=T_SENDMSG; \ 0000042C B4A0CBE1 STRH R10,[R11, #+4] 3361 p->pkt.data_len=strlen(send_txt); \ 00000430 0400A0E1 MOV R0,R4 \ 00000434 1B0000EF SWI +27 \ 00000438 B600CBE1 STRH R0,[R11, #+6] 3362 strcpy(p->data,send_txt); \ 0000043C 0410A0E1 MOV R1,R4 \ 00000440 08008BE2 ADD R0,R11,#+8 \ 00000444 1A0000EF SWI +26 3363 #ifdef EVILFOX 3364 SENDMSGCOUNT++; 3365 #else 3366 if(show_send_info) \ 00000448 08029FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 0000044C 000090E5 LDR R0,[R0, #+0] \ 00000450 000050E3 CMP R0,#+0 \ 00000454 200196E5 LDR R0,[R6, #+288] \ 00000458 010080E2 ADD R0,R0,#+1 \ 0000045C 200186E5 STR R0,[R6, #+288] \ 00000460 7400000A BEQ ??CheckComand_6 3367 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 00000464 000009E0 AND R0,R9,R0 \ 00000468 01002DE9 PUSH {R0} \ 0000046C 173087E2 ADD R3,R7,#+23 \ 00000470 0110A0E3 MOV R1,#+1 \ 00000474 EC00A0E3 MOV R0,#+236 \ 00000478 680D80E3 ORR R0,R0,#0x1A00 \ 0000047C 062080E0 ADD R2,R0,R6 \ 00000480 690000EA 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: \ 00000484 380196E5 LDR R0,[R6, #+312] \ 00000488 010050E3 CMP R0,#+1 \ 0000048C 3700001A BNE ??CheckComand_11 3376 { 3377 comanda=1; \ 00000490 EC0186E5 STR R0,[R6, #+492] 3378 TPKT *p; 3379 // sprintf(hah,"online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); 3380 3381 if(inp_away_m)//Если ввели текст то выводим его,иначе из конфига \ 00000494 FC10A0E3 MOV R1,#+252 \ 00000498 501D81E3 ORR R1,R1,#0x1400 \ 0000049C 061081E0 ADD R1,R1,R6 \ 000004A0 00108DE5 STR R1,[SP, #+0] \ 000004A4 583196E5 LDR R3,[R6, #+344] \ 000004A8 AC219FE5 LDR R2,??CheckComand_3+0x4 ;; away_msg4 \ 000004AC 0400A0E3 MOV R0,#+4 \ 000004B0 580D80E3 ORR R0,R0,#0x1600 \ 000004B4 061080E0 ADD R1,R0,R6 \ 000004B8 02002DE9 PUSH {R1} \ 000004BC 000053E3 CMP R3,#+0 3382 sprintf(away_msg, "Автоответчик: %s %s! %s %s", away_msg4, ddd, inp_away_msg2, away_msg_time); \ 000004C0 34119615 LDRNE R1,[R6, #+308] \ 000004C4 AC0FA0E3 MOV R0,#+688 3383 else 3384 sprintf(away_msg, "Автоответчик: %s %s! %s %s", away_msg4, ddd, away_msg2, away_msg_time); \ 000004C8 ........ LDREQ R1,??DataTable121 ;; away_msg2 \ 000004CC 02002DE9 PUSH {R1} \ 000004D0 20309DE5 LDR R3,[SP, #+32] \ 000004D4 071080E0 ADD R1,R0,R7 \ 000004D8 08009DE5 LDR R0,[SP, #+8] \ 000004DC 160000EF SWI +22 \ 000004E0 08D08DE2 ADD SP,SP,#+8 3385 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 000004E4 00009DE5 LDR R0,[SP, #+0] \ 000004E8 1B0000EF SWI +27 \ 000004EC 090080E2 ADD R0,R0,#+9 \ 000004F0 140000EF SWI +20 \ 000004F4 00B0A0E1 MOV R11,R0 3386 p->pkt.uin=t->uin; \ 000004F8 0C0095E5 LDR R0,[R5, #+12] \ 000004FC 00008BE5 STR R0,[R11, #+0] 3387 p->pkt.type=T_SENDMSG; \ 00000500 B4A0CBE1 STRH R10,[R11, #+4] 3388 p->pkt.data_len=strlen(away_msg); \ 00000504 00009DE5 LDR R0,[SP, #+0] \ 00000508 1B0000EF SWI +27 \ 0000050C B600CBE1 STRH R0,[R11, #+6] 3389 strcpy(p->data,away_msg); \ 00000510 00109DE5 LDR R1,[SP, #+0] \ 00000514 08008BE2 ADD R0,R11,#+8 \ 00000518 1A0000EF SWI +26 3390 #ifdef EVILFOX 3391 SENDMSGCOUNT++; 3392 #else 3393 if(show_send_info) \ 0000051C 34019FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000520 000090E5 LDR R0,[R0, #+0] \ 00000524 000050E3 CMP R0,#+0 \ 00000528 200196E5 LDR R0,[R6, #+288] \ 0000052C 010080E2 ADD R0,R0,#+1 \ 00000530 200186E5 STR R0,[R6, #+288] \ 00000534 0900000A BEQ ??CheckComand_12 3394 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF); \ 00000538 000009E0 AND R0,R9,R0 \ 0000053C 01002DE9 PUSH {R0} \ 00000540 173087E2 ADD R3,R7,#+23 \ 00000544 0110A0E3 MOV R1,#+1 \ 00000548 1800A0E3 MOV R0,#+24 \ 0000054C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000550 062080E0 ADD R2,R0,R6 \ 00000554 0500A0E1 MOV R0,R5 \ 00000558 ........ BL AddStringToLog \ 0000055C 04D08DE2 ADD SP,SP,#+4 3395 else 3396 SENDMSGCOUNT++; 3397 #endif 3398 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_12: \ 00000560 0B20A0E1 MOV R2,R11 \ 00000564 0010A0E3 MOV R1,#+0 \ 00000568 0800A0E1 MOV R0,R8 \ 0000056C 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: \ 00000570 6800A0E3 MOV R0,#+104 \ 00000574 400E80E3 ORR R0,R0,#0x400 \ 00000578 071080E0 ADD R1,R0,R7 \ 0000057C 0400A0E1 MOV R0,R4 \ 00000580 190000EF SWI +25 \ 00000584 000050E3 CMP R0,#+0 \ 00000588 3000001A BNE ??CheckComand_13 3456 { 3457 comanda=0; \ 0000058C EC0186E5 STR R0,[R6, #+492] 3458 TPKT *p; 3459 3460 char *send_txt=malloc(786); \ 00000590 C40F8AE3 ORR R0,R10,#0x310 \ 00000594 140000EF SWI +20 \ 00000598 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__); \ 0000059C 650F87E2 ADD R0,R7,#+404 \ 000005A0 01002DE9 PUSH {R0} \ 000005A4 623F87E2 ADD R3,R7,#+392 \ 000005A8 B32F87E2 ADD R2,R7,#+716 \ 000005AC C400A0E3 MOV R0,#+196 \ 000005B0 600E80E3 ORR R0,R0,#0x600 \ 000005B4 071080E0 ADD R1,R0,R7 \ 000005B8 0400A0E1 MOV R0,R4 \ 000005BC 160000EF SWI +22 3468 3469 p=malloc(sizeof(PKT)+786); \ 000005C0 C60F8AE3 ORR R0,R10,#0x318 \ 000005C4 140000EF SWI +20 \ 000005C8 00B0A0E1 MOV R11,R0 3470 p->pkt.uin=t->uin; \ 000005CC 0C0095E5 LDR R0,[R5, #+12] \ 000005D0 00008BE5 STR R0,[R11, #+0] 3471 p->pkt.type=T_SENDMSG; \ 000005D4 B4A0CBE1 STRH R10,[R11, #+4] 3472 p->pkt.data_len=strlen(send_txt); \ 000005D8 0400A0E1 MOV R0,R4 \ 000005DC 1B0000EF SWI +27 \ 000005E0 B600CBE1 STRH R0,[R11, #+6] 3473 strcpy(p->data,send_txt); \ 000005E4 0410A0E1 MOV R1,R4 \ 000005E8 08008BE2 ADD R0,R11,#+8 \ 000005EC 1A0000EF SWI +26 3474 if(show_send_info) \ 000005F0 60009FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000005F4 000090E5 LDR R0,[R0, #+0] \ 000005F8 04D08DE2 ADD SP,SP,#+4 \ 000005FC 000050E3 CMP R0,#+0 \ 00000600 200196E5 LDR R0,[R6, #+288] \ 00000604 010080E2 ADD R0,R0,#+1 \ 00000608 200186E5 STR R0,[R6, #+288] \ 0000060C 0900000A BEQ ??CheckComand_6 3475 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF); \ 00000610 000009E0 AND R0,R9,R0 \ 00000614 01002DE9 PUSH {R0} \ 00000618 173087E2 ADD R3,R7,#+23 \ 0000061C 0110A0E3 MOV R1,#+1 \ 00000620 5400A0E3 MOV R0,#+84 \ 00000624 400E80E3 ORR R0,R0,#0x400 \ 00000628 072080E0 ADD R2,R0,R7 \ ??CheckComand_7: \ 0000062C 0500A0E1 MOV R0,R5 \ 00000630 ........ BL AddStringToLog \ 00000634 04D08DE2 ADD SP,SP,#+4 3476 else 3477 SENDMSGCOUNT++; 3478 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_6: \ 00000638 0B20A0E1 MOV R2,R11 \ 0000063C 0010A0E3 MOV R1,#+0 \ 00000640 0800A0E1 MOV R0,R8 \ 00000644 710100EF SWI +369 3479 mfree(send_txt); \ 00000648 0400A0E1 MOV R0,R4 \ 0000064C 150000EF SWI +21 3480 return; \ ??CheckComand_13: \ 00000650 1CD08DE2 ADD SP,SP,#+28 ;; stack cleaning \ 00000654 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_3: \ 00000658 ........ DC32 show_send_info \ 0000065C ........ 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,??DataTable123 ;; S_ICONS \ 00000008 F00194E5 LDR R0,[R4, #+496] \ 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 3800A0E3 MOV R0,#+56 \ 00000024 700D80E3 ORR R0,R0,#0x1C00 \ 00000028 041080E0 ADD R1,R0,R4 \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 ........ _BLF ascii2ws,??ascii2ws??rA 3502 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 2E0100EF SWI +302 \ 0000003C 0060A0E1 MOV R6,R0 \ 00000040 0100A0E3 MOV R0,#+1 \ 00000044 2E0100EF SWI +302 \ 00000048 0070A0E1 MOV R7,R0 \ 0000004C F40194E5 LDR R0,[R4, #+500] \ 00000050 C50100EF SWI +453 \ 00000054 F41194E5 LDR R1,[R4, #+500] \ 00000058 0080A0E1 MOV R8,R0 \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 080200EF SWI +520 \ 00000064 40002DE9 PUSH {R6} \ 00000068 80002DE9 PUSH {R7} \ 0000006C 0010A0E3 MOV R1,#+0 \ 00000070 02002DE9 PUSH {R1} \ 00000074 023088E2 ADD R3,R8,#+2 \ 00000078 022080E2 ADD R2,R0,#+2 \ 0000007C 0000A0E3 MOV R0,#+0 \ 00000080 B40100EF SWI +436 3503 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,( char*) color,GetPaletteAdrByColorIndex(23)); \ 00000084 1700A0E3 MOV R0,#+23 \ 00000088 2E0100EF SWI +302 \ 0000008C 0060A0E1 MOV R6,R0 \ 00000090 F40194E5 LDR R0,[R4, #+500] \ 00000094 C50100EF SWI +453 \ 00000098 F41194E5 LDR R1,[R4, #+500] \ 0000009C 0070A0E1 MOV R7,R0 \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 080200EF SWI +520 \ 000000A8 64109FE5 LDR R1,??show_pp_sender_0 ;; color \ 000000AC 40002DE9 PUSH {R6} \ 000000B0 02002DE9 PUSH {R1} \ 000000B4 033080E2 ADD R3,R0,#+3 \ 000000B8 0120A0E3 MOV R2,#+1 \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 0010A0E3 MOV R1,#+0 \ 000000C4 02002DE9 PUSH {R1} \ 000000C8 F41194E5 LDR R1,[R4, #+500] \ 000000CC 02002DE9 PUSH {R1} \ 000000D0 011087E2 ADD R1,R7,#+1 \ 000000D4 02002DE9 PUSH {R1} \ 000000D8 0210A0E1 MOV R1,R2 \ 000000DC 4C0100EF SWI +332 3504 FreeWS(ws); \ 000000E0 0500A0E1 MOV R0,R5 \ 000000E4 290100EF SWI +297 3505 INC_show--; \ 000000E8 F00194E5 LDR R0,[R4, #+496] 3506 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 000000EC 24209FE5 LDR R2,??show_pp_sender_0+0x4 ;; show_pp_sender \ 000000F0 010040E2 SUB R0,R0,#+1 \ 000000F4 F00184E5 STR R0,[R4, #+496] \ 000000F8 0A10A0E3 MOV R1,#+10 \ 000000FC B000A0E3 MOV R0,#+176 \ 00000100 680D80E3 ORR R0,R0,#0x1A00 \ 00000104 040080E0 ADD R0,R0,R4 \ 00000108 4D0000EF SWI +77 \ 0000010C 20D08DE2 ADD SP,SP,#+32 3507 } 3508 } \ 00000110 F081BDE8 POP {R4-R8,PC} ;; return \ ??show_pp_sender_0: \ 00000114 ........ DC32 color \ 00000118 ........ 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,??DataTable123 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 CC1180E5 STR R1,[R0, #+460] 3516 kopa_kontaktu=0; \ 0000000C D01180E5 STR R1,[R0, #+464] 3517 t=(CLIST *)(&cltop); \ 00000010 6D1F80E2 ADD R1,R0,#+436 \ 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 CC2190E5 LDR R2,[R0, #+460] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 CC2180E5 STR R2,[R0, #+460] 3523 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 D0219015 LDRNE R2,[R0, #+464] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 D0218015 STRNE R2,[R0, #+464] 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,??DataTable136 ;; `?` \ 0000000C ........ LDR R7,??DataTable133 ;; 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 9702008A 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 3F010E009302 DC16 +319,+14,+659,+659 \ 9302 \ 00000048 110093025300 DC16 +17,+659,+83,+659 \ 9302 \ 00000050 930293029302 DC16 +659,+659,+659,+659 \ 9302 \ 00000058 9302FC01FC01 DC16 +659,+508,+508,+659 \ 9302 \ 00000060 930243005100 DC16 +659,+67,+81,+659 \ 9302 \ 00000068 930293022D02 DC16 +659,+659,+557,+659 \ 9302 \ 00000070 930293029302 DC16 +659,+659,+659,+659 \ 9302 \ 00000078 91020000 DC16 +657,+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 810200EA 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 B80197E5 LDR R0,[R7, #+440] \ 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 6D0200EA B ??ProcessPacket_1 3550 } 3551 else 3552 { 3553 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_5: \ 000000D8 B82197E5 LDR R2,[R7, #+440] \ 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,??DataTable126 ;; 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 7C6187E5 STR R6,[R7, #+380] 3561 start_vibra(); \ 00000108 ........ BL start_vibra 3562 } 3563 GROUP_CACHE=0; \ ??ProcessPacket_9: \ 0000010C B88187E5 STR R8,[R7, #+440] 3564 ask_my_info(); 3565 if (contactlist_menu_id) \ 00000110 BC0197E5 LDR R0,[R7, #+444] \ 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 E40097E5 LDR R0,[R7, #+228] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 5502001A BNE ??ProcessPacket_1 \ 00000138 64099FE5 LDR R0,??ProcessPacket_12+0x4 ;; isLogOnline \ 0000013C 000090E5 LDR R0,[R0, #+0] \ 00000140 000050E3 CMP R0,#+0 \ 00000144 5102000A BEQ ??ProcessPacket_1 \ 00000148 E46087E5 STR R6,[R7, #+228] \ 0000014C 4F0200EA B ??ProcessPacket_1 3573 } 3574 } 3575 break; 3576 case T_GROUPID: 3577 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_13: \ 00000150 B80187E5 STR R0,[R7, #+440] \ 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 B80187E5 STR R0,[R7, #+440] \ 0000018C 3F0200EA 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 D900000A 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 D0089FE5 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 C00197E5 LDR R0,[R7, #+448] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0F00000A BEQ ??ProcessPacket_18 3605 { 3606 void *data=FindGUIbyId(edchat_id,NULL); \ 000001F0 C00197E5 LDR R0,[R7, #+448] \ 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 BC0197E5 LDR R0,[R7, #+444] \ 00000234 000050E3 CMP R0,#+0 \ 00000238 0500000A BEQ ??ProcessPacket_20 3627 { 3628 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000023C BC0197E5 LDR R0,[R7, #+444] \ 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,??DataTable127 ;; extended_sounds \ 000002C4 E0A79FE5 LDR R10,??ProcessPacket_12+0xC ;; sndGlobal \ 000002C8 000090E5 LDR R0,[R0, #+0] \ 000002CC 7860A0E3 MOV R6,#+120 \ 000002D0 406E86E3 ORR R6,R6,#0x400 \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 3400001A BNE ??ProcessPacket_23 3665 { 3666 Play(sndGlobal); \ 000002DC 0A00A0E1 MOV R0,R10 \ ??ProcessPacket_24: \ 000002E0 ........ BL Play 3667 if(isLogOnline && dontLogOnConnect) \ 000002E4 B8079FE5 LDR R0,??ProcessPacket_12+0x4 ;; isLogOnline \ 000002E8 000090E5 LDR R0,[R0, #+0] \ 000002EC 000050E3 CMP R0,#+0 \ 000002F0 E4009715 LDRNE R0,[R7, #+228] \ 000002F4 00005013 CMPNE R0,#+0 \ 000002F8 7C00000A BEQ ??ProcessPacket_25 3668 { 3669 comanda=0; \ 000002FC EC8187E5 STR R8,[R7, #+492] 3670 TTime time; 3671 TDate date; 3672 GetDateTime(&date,&time); \ 00000300 0D10A0E1 MOV R1,SP \ 00000304 08008DE2 ADD R0,SP,#+8 \ 00000308 B40000EF SWI +180 3673 char *txt=malloc(256); \ 0000030C 400FA0E3 MOV R0,#+256 \ 00000310 140000EF SWI +20 \ 00000314 00A0A0E1 MOV R10,R0 3674 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); \ 00000318 0D00DDE5 LDRB R0,[SP, #+13] \ 0000031C 051086E0 ADD R1,R6,R5 \ 00000320 01002DE9 PUSH {R0} \ 00000324 1000DDE5 LDRB R0,[SP, #+16] \ 00000328 01002DE9 PUSH {R0} \ 0000032C 0A00DDE5 LDRB R0,[SP, #+10] \ 00000330 01002DE9 PUSH {R0} \ 00000334 0D30DDE5 LDRB R3,[SP, #+13] \ 00000338 0C20DDE5 LDRB R2,[SP, #+12] \ 0000033C 0A00A0E1 MOV R0,R10 \ 00000340 160000EF SWI +22 3675 3676 TPKT *p=malloc(sizeof(PKT)); \ 00000344 0800A0E3 MOV R0,#+8 \ 00000348 140000EF SWI +20 3677 p->pkt.uin=t->uin; \ 0000034C 0C1099E5 LDR R1,[R9, #+12] \ 00000350 001080E5 STR R1,[R0, #+0] 3678 p->pkt.type=T_XTEXT_REQ; \ 00000354 1810A0E3 MOV R1,#+24 \ 00000358 B410C0E1 STRH R1,[R0, #+4] 3679 p->pkt.data_len=0; \ 0000035C B680C0E1 STRH R8,[R0, #+6] 3680 3681 t->xtext=malloc(256); \ 00000360 400FA0E3 MOV R0,#+256 \ 00000364 140000EF SWI +20 \ 00000368 880089E5 STR R0,[R9, #+136] 3682 // sprintf(t->xtext+1,txt); 3683 snprintf(t->xtext,256,txt); \ 0000036C 0A20A0E1 MOV R2,R10 \ 00000370 401FA0E3 MOV R1,#+256 \ 00000374 1B0100EF SWI +283 3684 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF); \ 00000378 0800E0E1 MVN R0,R8 \ 0000037C 01002DE9 PUSH {R0} \ 00000380 713E85E2 ADD R3,R5,#+1808 \ 00000384 0A20A0E1 MOV R2,R10 \ 00000388 0310A0E3 MOV R1,#+3 \ 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 4D0000EA 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 F8269FE5 LDR R2,??ProcessPacket_12+0x10 ;; sndGlobal2 \ 000003B4 14808DE5 STR R8,[SP, #+20] \ 000003B8 0C0099E5 LDR R0,[R9, #+12] \ 000003BC D7BFA0E3 MOV R11,#+860 \ 000003C0 F40087E5 STR R0,[R7, #+244] \ 000003C4 0030A0E1 MOV R3,R0 \ 000003C8 441F85E2 ADD R1,R5,#+272 \ 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 B9FFFFEA 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 3A00000A BEQ ??ProcessPacket_25 \ 00000404 0B0050E1 CMP R0,R11 \ 00000408 3800001A BNE ??ProcessPacket_25 3732 { 3733 Play(sndSrvMsg); \ 0000040C A0069FE5 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 3300000A BEQ ??ProcessPacket_25 \ 00000420 90069FE5 LDR R0,??ProcessPacket_12+0x18 ;; isLogOffline \ 00000424 000090E5 LDR R0,[R0, #+0] \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 2F00000A BEQ ??ProcessPacket_25 3738 { 3739 comanda=0; \ 00000430 EC8187E5 STR R8,[R7, #+492] 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 9C00A0E3 MOV R0,#+156 \ 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 713E85E2 ADD R3,R5,#+1808 \ 000004C0 0620A0E1 MOV R2,R6 \ 000004C4 0310A0E3 MOV R1,#+3 \ 000004C8 0900A0E1 MOV R0,R9 \ 000004CC ........ BL AddStringToLog 3754 ReqAddMsgToChat(t); \ 000004D0 0900A0E1 MOV R0,R9 \ 000004D4 ........ BL ReqAddMsgToChat 3755 RecountMenu(t, 1); \ 000004D8 0110A0E3 MOV R1,#+1 \ 000004DC 0900A0E1 MOV R0,R9 \ 000004E0 ........ BL RecountMenu 3756 mfree(txt); \ 000004E4 0600A0E1 MOV R0,R6 \ ??ProcessPacket_26: \ 000004E8 150000EF SWI +21 \ 000004EC 10D08DE2 ADD SP,SP,#+16 3757 } 3758 } 3759 3760 //------------------------------------------------------------// 3761 if(TIME_OR_MSG==2) \ ??ProcessPacket_25: \ 000004F0 ........ LDR R0,??DataTable128 ;; TIME_OR_MSG \ 000004F4 000090E5 LDR R0,[R0, #+0] \ 000004F8 020050E3 CMP R0,#+2 \ 000004FC 0000001A BNE ??ProcessPacket_17 3762 Get_Online_total(); \ 00000500 ........ BL Get_Online_total 3763 } 3764 if (edchat_id) \ ??ProcessPacket_17: \ 00000504 C00197E5 LDR R0,[R7, #+448] \ 00000508 000050E3 CMP R0,#+0 \ 0000050C 5F01000A BEQ ??ProcessPacket_1 3765 { 3766 void *data=FindGUIbyId(edchat_id,NULL); \ 00000510 C00197E5 LDR R0,[R7, #+448] \ 00000514 0010A0E3 MOV R1,#+0 \ 00000518 090200EF SWI +521 3767 { 3768 EDCHAT_STRUCT *ed_struct; 3769 ed_struct=EDIT_GetUserPointer(data); \ 0000051C DF0100EF SWI +479 3770 if (ed_struct) \ 00000520 000050E3 CMP R0,#+0 \ 00000524 5901000A BEQ ??ProcessPacket_1 3771 { 3772 if (ed_struct->ed_contact==t) \ 00000528 000090E5 LDR R0,[R0, #+0] \ 0000052C 090050E1 CMP R0,R9 \ 00000530 5601001A BNE ??ProcessPacket_1 3773 { 3774 DirectRedrawGUI_ID(edchat_id); \ 00000534 C00197E5 LDR R0,[R7, #+448] \ 00000538 400100EF SWI +320 \ 0000053C 530100EA B ??ProcessPacket_1 3775 } 3776 } 3777 } 3778 } 3779 break; 3780 case T_RECVMSG: 3781 NEW_MSG=1; \ ??ProcessPacket_27: \ 00000540 E46187E5 STR R6,[R7, #+484] 3782 t=FindContactByUin(p->pkt.uin); \ 00000544 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000548 0090B0E1 MOVS R9,R0 3783 if (!t) \ 0000054C 0900001A BNE ??ProcessPacket_28 3784 { 3785 sprintf(s,percent_d,p->pkt.uin); \ 00000550 002094E5 LDR R2,[R4, #+0] \ 00000554 131085E2 ADD R1,R5,#+19 \ 00000558 18008DE2 ADD R0,SP,#+24 \ 0000055C 160000EF SWI +22 3786 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 00000560 B82197E5 LDR R2,[R7, #+440] \ 00000564 000094E5 LDR R0,[R4, #+0] \ 00000568 0030A0E3 MOV R3,#+0 \ 0000056C 18108DE2 ADD R1,SP,#+24 \ 00000570 ........ _BLF AddContact,??AddContact??rA \ 00000574 0090A0E1 MOV R9,R0 3787 } 3788 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ 000005B0 5A0FA013 MOVNE R0,#+360 \ 000005B4 80008915 STRNE R0,[R9, #+128] 3791 // ChangeContactPos(t); 3792 if(VIBR_TYPE) \ 000005B8 ........ LDR R0,??DataTable131 ;; VIBR_TYPE \ 000005BC 000090E5 LDR R0,[R0, #+0] \ 000005C0 000050E3 CMP R0,#+0 3793 vibra_count=2; \ 000005C4 0200A013 MOVNE R0,#+2 \ 000005C8 7C018715 STRNE R0,[R7, #+380] 3794 else 3795 vibra_count=1; \ 000005CC 7C618705 STREQ R6,[R7, #+380] 3796 start_vibra(); \ 000005D0 ........ BL start_vibra 3797 #ifdef ELKA 3798 if(SLI_TYPE) 3799 SLI_Timer(); \ 000005D4 ........ BL SLI_Timer 3800 #endif 3801 if(Is_Double_Vibra_On) \ 000005D8 100197E5 LDR R0,[R7, #+272] \ 000005DC 000050E3 CMP R0,#+0 \ 000005E0 0000000A BEQ ??ProcessPacket_30 3802 Reminder_timer(); \ 000005E4 ........ BL Reminder_timer 3803 if (Is_ILU_On) \ ??ProcessPacket_30: \ 000005E8 0C0197E5 LDR R0,[R7, #+268] \ 000005EC 000050E3 CMP R0,#+0 \ 000005F0 0800000A BEQ ??ProcessPacket_31 3804 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000005F4 C0049FE5 LDR R0,??ProcessPacket_12+0x1C ;; ILL_RECV_FADE \ 000005F8 003090E5 LDR R3,[R0, #+0] \ 000005FC BC049FE5 LDR R0,??ProcessPacket_12+0x20 ;; ILL_RECV_TMR \ 00000600 002090E5 LDR R2,[R0, #+0] \ 00000604 B8049FE5 LDR R0,??ProcessPacket_12+0x24 ;; ILL_KEYS_RECV \ 00000608 001090E5 LDR R1,[R0, #+0] \ 0000060C B4049FE5 LDR R0,??ProcessPacket_12+0x28 ;; ILL_DISP_RECV \ 00000610 000090E5 LDR R0,[R0, #+0] \ 00000614 ........ BL IlluminationOn 3805 if (t->name[0]=='#') \ ??ProcessPacket_31: \ 00000618 1400D9E5 LDRB R0,[R9, #+20] \ 0000061C 230050E3 CMP R0,#+35 \ 00000620 1500001A BNE ??ProcessPacket_32 3806 { 3807 //Если это конференция, патчим имя 3808 char *s=strchr(p->data,'>'); \ 00000624 3E10A0E3 MOV R1,#+62 \ 00000628 080084E2 ADD R0,R4,#+8 \ 0000062C 180000EF SWI +24 3809 //Если нашли символ > и после него пробел и ник короче 16 символов 3810 if (s) \ 00000630 000050E3 CMP R0,#+0 \ 00000634 1000000A BEQ ??ProcessPacket_32 3811 { 3812 if ((s[1]==' ')&&((s-p->data)<16)) \ 00000638 0110D0E5 LDRB R1,[R0, #+1] \ 0000063C 200051E3 CMP R1,#+32 \ 00000640 0D00001A BNE ??ProcessPacket_32 \ 00000644 081084E2 ADD R1,R4,#+8 \ 00000648 011040E0 SUB R1,R0,R1 \ 0000064C 100051E3 CMP R1,#+16 \ 00000650 090000AA BGE ??ProcessPacket_32 3813 { 3814 *s=0; //Режем строку \ 00000654 0080C0E5 STRB R8,[R0, #+0] 3815 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF); //Добавляем имя из текста сообщения \ 00000658 001066E2 RSB R1,R6,#+0 \ 0000065C 02002DE9 PUSH {R1} \ 00000660 083084E2 ADD R3,R4,#+8 \ 00000664 022080E2 ADD R2,R0,#+2 \ 00000668 0900A0E1 MOV R0,R9 \ 0000066C 0210A0E3 MOV R1,#+2 \ 00000670 ........ BL AddStringToLog 3816 goto L1; \ 00000674 04D08DE2 ADD SP,SP,#+4 \ 00000678 360000EA B ??ProcessPacket_33 3817 } 3818 } 3819 } 3820 //=============================================tas bus jautri 3821 comanda=1; \ ??ProcessPacket_32: \ 0000067C EC6187E5 STR R6,[R7, #+492] 3822 // if(UIN!=t->uin) 3823 CheckComand(p->data, t, t->name); \ 00000680 142089E2 ADD R2,R9,#+20 \ 00000684 0910A0E1 MOV R1,R9 \ 00000688 080084E2 ADD R0,R4,#+8 \ 0000068C ........ BL CheckComand 3824 if(comanda==1) \ 00000690 EC0197E5 LDR R0,[R7, #+492] \ 00000694 010050E3 CMP R0,#+1 \ 00000698 2E00001A BNE ??ProcessPacket_33 3825 { 3826 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF); \ 0000069C 000066E2 RSB R0,R6,#+0 \ 000006A0 01002DE9 PUSH {R0} \ 000006A4 143089E2 ADD R3,R9,#+20 \ 000006A8 082084E2 ADD R2,R4,#+8 \ 000006AC 0210A0E3 MOV R1,#+2 \ 000006B0 0900A0E1 MOV R0,R9 \ 000006B4 ........ BL AddStringToLog 3827 main_count++; \ 000006B8 ........ LDR R0,??DataTable132 ;; main_count \ 000006BC 001090E5 LDR R1,[R0, #+0] \ 000006C0 011081E2 ADD R1,R1,#+1 \ 000006C4 001080E5 STR R1,[R0, #+0] 3828 if(Is_INC_On) \ 000006C8 080197E5 LDR R0,[R7, #+264] \ 000006CC 04D08DE2 ADD SP,SP,#+4 \ 000006D0 000050E3 CMP R0,#+0 \ 000006D4 1900000A BEQ ??ProcessPacket_34 3829 { 3830 strcpy(show_nick, t->name); \ 000006D8 141089E2 ADD R1,R9,#+20 \ 000006DC 3800A0E3 MOV R0,#+56 \ 000006E0 700D80E3 ORR R0,R0,#0x1C00 \ 000006E4 070080E0 ADD R0,R0,R7 \ 000006E8 1A0000EF SWI +26 3831 if(!IsIdleUiOnTop()&&(!saver_on)) \ 000006EC C50000EF SWI +197 \ 000006F0 000050E3 CMP R0,#+0 \ 000006F4 F8009705 LDREQ R0,[R7, #+248] \ 000006F8 00005003 CMPEQ R0,#+0 \ 000006FC 0F00001A BNE ??ProcessPacket_34 3832 { 3833 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 00000700 068100EF SWI +33030 \ 00000704 080090E5 LDR R0,[R0, #+8] 3834 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000708 0C0095E8 LDM R5,{R2,R3} \ 0000070C 0C0090E5 LDR R0,[R0, #+12] \ 00000710 0D10A0E1 MOV R1,SP \ 00000714 080090E5 LDR R0,[R0, #+8] \ 00000718 040090E5 LDR R0,[R0, #+4] \ 0000071C 0C0081E8 STM R1,{R2,R3} \ 00000720 010040E2 SUB R0,R0,#+1 3835 if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) \ 00000724 0820A0E3 MOV R2,#+8 \ 00000728 1C0100EF SWI +284 \ 0000072C 000050E3 CMP R0,#+0 \ 00000730 0200000A BEQ ??ProcessPacket_34 3836 { 3837 INC_show=15; \ 00000734 0F00A0E3 MOV R0,#+15 \ 00000738 F00187E5 STR R0,[R7, #+496] 3838 show_pp_sender(); \ 0000073C ........ 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: \ 00000740 040197E5 LDR R0,[R7, #+260] \ 00000744 000050E3 CMP R0,#+0 \ 00000748 0200000A BEQ ??ProcessPacket_33 3848 AddToMain(t->name,p->data); \ 0000074C 081084E2 ADD R1,R4,#+8 \ 00000750 140089E2 ADD R0,R9,#+20 \ 00000754 ........ 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: \ 00000758 100099E5 LDR R0,[R9, #+16] \ 0000075C ........ _BLF FindGroupByID,??FindGroupByID??rA 3856 if (g) \ 00000760 000050E3 CMP R0,#+0 3857 { 3858 if (g->state) \ 00000764 B415D011 LDRHNE R1,[R0, #+84] \ 00000768 00005113 CMPNE R1,#+0 3859 { 3860 g->state=0; \ 0000076C B485C011 STRHNE R8,[R0, #+84] 3861 } 3862 } 3863 } 3864 // if(comanda==1) 3865 // { 3866 ReqAddMsgToChat(t); \ 00000770 0900A0E1 MOV R0,R9 \ 00000774 ........ BL ReqAddMsgToChat 3867 RecountMenu(t,1); \ 00000778 0110A0E3 MOV R1,#+1 \ 0000077C 0900A0E1 MOV R0,R9 \ 00000780 ........ BL RecountMenu 3868 extern const int DEVELOP_IF; 3869 switch (DEVELOP_IF) \ 00000784 40039FE5 LDR R0,??ProcessPacket_12+0x2C ;; DEVELOP_IF \ 00000788 000090E5 LDR R0,[R0, #+0] \ 0000078C 000050E3 CMP R0,#+0 \ 00000790 0400000A BEQ ??ProcessPacket_35 \ 00000794 010050E2 SUBS R0,R0,#+1 \ 00000798 0B00000A BEQ ??ProcessPacket_36 \ 0000079C 020050E2 SUBS R0,R0,#+2 \ 000007A0 1300000A BEQ ??ProcessPacket_37 \ 000007A4 B90000EA 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: \ 000007A8 068100EF SWI +33030 \ 000007AC 080090E5 LDR R0,[R0, #+8] \ 000007B0 181197E5 LDR R1,[R7, #+280] \ 000007B4 0C0090E5 LDR R0,[R0, #+12] \ 000007B8 0C0090E5 LDR R0,[R0, #+12] \ 000007BC 010050E1 CMP R0,R1 \ ??ProcessPacket_38: \ 000007C0 B200000A BEQ ??ProcessPacket_1 \ 000007C4 ........ BL to_develop \ 000007C8 B00000EA 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: \ 000007CC 068100EF SWI +33030 \ 000007D0 080090E5 LDR R0,[R0, #+8] \ 000007D4 181197E5 LDR R1,[R7, #+280] \ 000007D8 0C0090E5 LDR R0,[R0, #+12] \ 000007DC 0C0090E5 LDR R0,[R0, #+12] \ 000007E0 010050E1 CMP R0,R1 \ 000007E4 A900000A BEQ ??ProcessPacket_1 \ 000007E8 430000EF SWI +67 \ 000007EC 000050E3 CMP R0,#+0 \ 000007F0 F2FFFFEA B ??ProcessPacket_38 3883 #endif 3884 break; 3885 case 2: 3886 break; 3887 case 3: 3888 GBS_DelTimer(&develop); \ ??ProcessPacket_37: \ 000007F4 B000A0E3 MOV R0,#+176 \ 000007F8 680D80E3 ORR R0,R0,#0x1A00 \ 000007FC 070080E0 ADD R0,R0,R7 \ 00000800 8C0100EF SWI +396 3889 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 00000804 068100EF SWI +33030 \ 00000808 080090E5 LDR R0,[R0, #+8] \ 0000080C 181197E5 LDR R1,[R7, #+280] \ 00000810 0C0090E5 LDR R0,[R0, #+12] \ 00000814 0C0090E5 LDR R0,[R0, #+12] \ 00000818 010050E1 CMP R0,R1 \ 0000081C 9B00000A BEQ ??ProcessPacket_1 \ 00000820 430000EF SWI +67 \ 00000824 000050E3 CMP R0,#+0 \ 00000828 9800001A BNE ??ProcessPacket_1 \ 0000082C ........ BL begin_to_develop \ 00000830 960000EA 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: \ 00000834 0400A0E1 MOV R0,R4 \ 00000838 ........ 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) \ 0000083C 000050E3 CMP R0,#+0 \ 00000840 9200000A BEQ ??ProcessPacket_1 3912 { 3913 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 00000844 B410D4E1 LDRH R1,[R4, #+4] \ 00000848 100051E3 CMP R1,#+16 \ 0000084C 0110A003 MOVEQ R1,#+1 \ 00000850 0210A013 MOVNE R1,#+2 \ 00000854 041080E5 STR R1,[R0, #+4] 3914 t=FindContactByUin(p->pkt.uin); \ 00000858 000094E5 LDR R0,[R4, #+0] \ 0000085C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000860 0090A0E1 MOV R9,R0 3915 if (edchat_id) \ 00000864 C00197E5 LDR R0,[R7, #+448] \ 00000868 000050E3 CMP R0,#+0 \ 0000086C 8700000A BEQ ??ProcessPacket_1 3916 { 3917 void *data=FindGUIbyId(edchat_id,NULL); \ 00000870 C00197E5 LDR R0,[R7, #+448] \ 00000874 0010A0E3 MOV R1,#+0 \ 00000878 090200EF SWI +521 \ 0000087C 0050B0E1 MOVS R5,R0 3918 if (data) \ 00000880 8200000A BEQ ??ProcessPacket_1 3919 { 3920 EDCHAT_STRUCT *ed_struct; 3921 ed_struct=EDIT_GetUserPointer(data); \ 00000884 DF0100EF SWI +479 3922 if (ed_struct) \ 00000888 000050E3 CMP R0,#+0 \ 0000088C 7F00000A BEQ ??ProcessPacket_1 3923 { 3924 if (ed_struct->ed_contact==t) \ 00000890 000090E5 LDR R0,[R0, #+0] \ 00000894 090050E1 CMP R0,R9 \ 00000898 7C00001A BNE ??ProcessPacket_1 3925 { 3926 if (EDIT_IsBusy(data)) \ 0000089C 0500A0E1 MOV R0,R5 \ 000008A0 1C0200EF SWI +540 \ 000008A4 000050E3 CMP R0,#+0 \ 000008A8 0300000A BEQ ??ProcessPacket_40 3927 { 3928 t->req_drawack=1; \ 000008AC 706089E5 STR R6,[R9, #+112] 3929 #ifdef EVILFOX 3930 time_to_stop_t9=2; 3931 #else 3932 time_to_stop_t9=3; \ 000008B0 0300A0E3 MOV R0,#+3 \ 000008B4 E80187E5 STR R0,[R7, #+488] \ 000008B8 740000EA B ??ProcessPacket_1 3933 #endif 3934 } 3935 else { 3936 DrawAck(data); \ ??ProcessPacket_40: \ 000008BC 0500A0E1 MOV R0,R5 \ 000008C0 ........ BL DrawAck 3937 if (p->pkt.type==T_SRV_ACK) \ 000008C4 B400D4E1 LDRH R0,[R4, #+4] \ 000008C8 100050E3 CMP R0,#+16 \ 000008CC 6F00001A BNE ??ProcessPacket_1 3938 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000008D0 E4019FE5 LDR R0,??ProcessPacket_12+0x1C ;; ILL_RECV_FADE \ 000008D4 003090E5 LDR R3,[R0, #+0] \ 000008D8 F0019FE5 LDR R0,??ProcessPacket_12+0x30 ;; ILL_SEND_TMR \ 000008DC 002090E5 LDR R2,[R0, #+0] \ 000008E0 EC019FE5 LDR R0,??ProcessPacket_12+0x34 ;; ILL_KEYS_SEND \ 000008E4 001090E5 LDR R1,[R0, #+0] \ 000008E8 E8019FE5 LDR R0,??ProcessPacket_12+0x38 ;; ILL_DISP_SEND \ 000008EC 000090E5 LDR R0,[R0, #+0] \ 000008F0 ........ BL IlluminationOn \ 000008F4 650000EA B ??ProcessPacket_1 3939 } 3940 } 3941 } 3942 } 3943 } 3944 } 3945 break; 3946 case T_XTEXT_ACK: 3947 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_41: \ 000008F8 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000008FC 0090B0E1 MOVS R9,R0 3948 if (t) \ 00000900 6200000A BEQ ??ProcessPacket_1 3949 { 3950 int i; 3951 int j; 3952 FreeXText(t); \ 00000904 ........ _BLF FreeXText,??FreeXText??rA 3953 i=p->pkt.data_len; \ 00000908 B660D4E1 LDRH R6,[R4, #+6] 3954 memcpy(t->xtext=malloc(i),p->data,i); \ 0000090C 0600A0E1 MOV R0,R6 \ 00000910 140000EF SWI +20 \ 00000914 880089E5 STR R0,[R9, #+136] \ 00000918 0620A0E1 MOV R2,R6 \ 0000091C 081084E2 ADD R1,R4,#+8 \ 00000920 1E0100EF SWI +286 3955 zeromem(s,256); \ 00000924 401FA0E3 MOV R1,#+256 \ 00000928 18008DE2 ADD R0,SP,#+24 \ 0000092C 1D0100EF SWI +285 3956 strcpy(s,t->name); \ 00000930 141089E2 ADD R1,R9,#+20 \ 00000934 18008DE2 ADD R0,SP,#+24 \ 00000938 1A0000EF SWI +26 3957 strcat(s,":\n"); \ 0000093C 571F8FE2 ADR R1,??ProcessPacket_12 ;; ":\n" \ 00000940 18008DE2 ADD R0,SP,#+24 \ 00000944 170000EF SWI +23 3958 i=strlen(s); \ 00000948 18008DE2 ADD R0,SP,#+24 \ 0000094C 1B0000EF SWI +27 3959 j=p->data[0]; \ 00000950 0860D4E5 LDRB R6,[R4, #+8] \ 00000954 0070A0E1 MOV R7,R0 3960 if (j>(255-i)) j=255-i; \ 00000958 FF0067E2 RSB R0,R7,#+255 \ 0000095C 060050E1 CMP R0,R6 \ 00000960 0060A0B1 MOVLT R6,R0 3961 strncpy(s+i,p->data+1,j); \ 00000964 0620A0E1 MOV R2,R6 \ 00000968 091084E2 ADD R1,R4,#+9 \ 0000096C 18008DE2 ADD R0,SP,#+24 \ 00000970 000087E0 ADD R0,R7,R0 \ 00000974 160100EF SWI +278 3962 i+=j; \ 00000978 070086E0 ADD R0,R6,R7 3963 if (i<255) \ 0000097C FF0050E3 CMP R0,#+255 \ 00000980 100000AA BGE ??ProcessPacket_42 3964 { 3965 s[i]='\n'; \ 00000984 18108DE2 ADD R1,SP,#+24 \ 00000988 0A20A0E3 MOV R2,#+10 \ 0000098C 0120C0E7 STRB R2,[R0, +R1] 3966 i++; \ 00000990 0810D4E5 LDRB R1,[R4, #+8] \ 00000994 B620D4E1 LDRH R2,[R4, #+6] \ 00000998 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); \ 0000099C 18308DE2 ADD R3,SP,#+24 \ 000009A0 012042E0 SUB R2,R2,R1 \ 000009A4 016042E2 SUB R6,R2,#+1 \ 000009A8 FF2060E2 RSB R2,R0,#+255 \ 000009AC 060052E1 CMP R2,R6 \ 000009B0 0260A0B1 MOVLT R6,R2 \ 000009B4 0620A0E1 MOV R2,R6 \ 000009B8 041081E0 ADD R1,R1,R4 \ 000009BC 091081E2 ADD R1,R1,#+9 \ 000009C0 030080E0 ADD R0,R0,R3 \ 000009C4 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: \ 000009C8 401FA0E3 MOV R1,#+256 \ 000009CC 18008DE2 ADD R0,SP,#+24 \ 000009D0 1D0100EF SWI +285 3983 i=0; 3984 j=p->data[0]; \ 000009D4 0860D4E5 LDRB R6,[R4, #+8] 3985 if (j>(255-i)) j=255-i; 3986 strncpy(s,p->data+1,j); \ 000009D8 091084E2 ADD R1,R4,#+9 \ 000009DC 18008DE2 ADD R0,SP,#+24 \ 000009E0 400F56E3 CMP R6,#+256 \ 000009E4 FF60A0A3 MOVGE R6,#+255 \ 000009E8 0620A0E1 MOV R2,R6 \ 000009EC 160100EF SWI +278 3987 i+=j; 3988 if (i<255) \ 000009F0 FF0056E3 CMP R6,#+255 \ 000009F4 100000AA BGE ??ProcessPacket_43 3989 { 3990 s[i++]=13; \ 000009F8 18108DE2 ADD R1,SP,#+24 \ 000009FC 0D20A0E3 MOV R2,#+13 \ 00000A00 0120C6E7 STRB R2,[R6, +R1] \ 00000A04 0810D4E5 LDRB R1,[R4, #+8] \ 00000A08 B620D4E1 LDRH R2,[R4, #+6] \ 00000A0C 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); \ 00000A10 18308DE2 ADD R3,SP,#+24 \ 00000A14 012042E0 SUB R2,R2,R1 \ 00000A18 016042E2 SUB R6,R2,#+1 \ 00000A1C FF2060E2 RSB R2,R0,#+255 \ 00000A20 060052E1 CMP R2,R6 \ 00000A24 0260A0B1 MOVLT R6,R2 \ 00000A28 0620A0E1 MOV R2,R6 \ 00000A2C 041081E0 ADD R1,R1,R4 \ 00000A30 091081E2 ADD R1,R1,#+9 \ 00000A34 030080E0 ADD R0,R0,R3 \ 00000A38 160100EF SWI +278 3994 } 3995 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF); \ ??ProcessPacket_43: \ 00000A3C 0800E0E1 MVN R0,R8 \ 00000A40 01002DE9 PUSH {R0} \ 00000A44 713E85E2 ADD R3,R5,#+1808 \ 00000A48 1C208DE2 ADD R2,SP,#+28 \ 00000A4C 0310A0E3 MOV R1,#+3 \ 00000A50 0900A0E1 MOV R0,R9 \ 00000A54 ........ BL AddStringToLog 3996 ReqAddMsgToChat(t); \ 00000A58 0900A0E1 MOV R0,R9 \ 00000A5C ........ BL ReqAddMsgToChat 3997 if (strlen(p->data)) // Если x-status не пустой \ 00000A60 080084E2 ADD R0,R4,#+8 \ 00000A64 1B0000EF SWI +27 \ 00000A68 000050E3 CMP R0,#+0 \ 00000A6C 04D08DE2 ADD SP,SP,#+4 3998 RecountMenu(t, 1); \ 00000A70 0110A013 MOVNE R1,#+1 \ 00000A74 0900A011 MOVNE R0,R9 \ 00000A78 94FDFF1A BNE ??ProcessPacket_8 3999 else 4000 RecountMenu(NULL, 0); \ 00000A7C 0010A0E3 MOV R1,#+0 \ 00000A80 0100A0E1 MOV R0,R1 \ 00000A84 91FDFFEA B ??ProcessPacket_8 4001 } 4002 break; 4003 case T_LASTPRIVACY: 4004 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_44: \ 00000A88 0800D4E5 LDRB R0,[R4, #+8] \ 00000A8C 780187E5 STR R0,[R7, #+376] 4005 break; 4006 } 4007 mfree(p); \ ??ProcessPacket_1: \ 00000A90 0400A0E1 MOV R0,R4 \ 00000A94 150000EF SWI +21 4008 } \ 00000A98 50DF8DE2 ADD SP,SP,#+320 \ 00000A9C F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_12: \ 00000AA0 3A0A0000 DC8 ":\n",+0 \ 00000AA4 ........ DC32 isLogOnline \ 00000AA8 ........ DC32 ENA_AUTO_XTXT \ 00000AAC ........ DC32 sndGlobal \ 00000AB0 ........ DC32 sndGlobal2 \ 00000AB4 ........ DC32 sndSrvMsg \ 00000AB8 ........ DC32 isLogOffline \ 00000ABC ........ DC32 ILL_RECV_FADE \ 00000AC0 ........ DC32 ILL_RECV_TMR \ 00000AC4 ........ DC32 ILL_KEYS_RECV \ 00000AC8 ........ DC32 ILL_DISP_RECV \ 00000ACC ........ DC32 DEVELOP_IF \ 00000AD0 ........ DC32 ILL_SEND_TMR \ 00000AD4 ........ DC32 ILL_KEYS_SEND \ 00000AD8 ........ 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,??DataTable133 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 8C0195E5 LDR R0,[R5, #+396] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 4015 { 4016 if (++tenseconds_to_ping>12) \ 00000018 C80195E5 LDR R0,[R5, #+456] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 C80185E5 STR R0,[R5, #+456] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 4017 { 4018 tenseconds_to_ping=0; 4019 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 C84185E5 STR R4,[R5, #+456] \ 00000034 710100EF SWI +369 4020 } 4021 } 4022 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable136 ;; `?` \ 0000003C E800A0E3 MOV R0,#+232 \ 00000040 600E80E3 ORR R0,R0,#0x600 \ 00000044 012080E0 ADD R2,R0,R1 \ 00000048 D42085E5 STR R2,[R5, #+212] 4023 tmr_gipc.name_from=ipc_my_name; \ 0000004C 010080E0 ADD R0,R0,R1 \ 00000050 D80085E5 STR R0,[R5, #+216] 4024 tmr_gipc.data=NULL; \ 00000054 DC4085E5 STR R4,[R5, #+220] 4025 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000058 D43085E2 ADD R3,R5,#+212 \ 0000005C 0420A0E3 MOV R2,#+4 \ 00000060 B010A0E3 MOV R1,#+176 \ 00000064 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000068 0900A0E3 MOV R0,#+9 \ 0000006C 420C80E3 ORR R0,R0,#0x4200 \ 00000070 000100EF SWI +256 4026 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000074 ........ LDR R2,??DataTable146 ;; process_active_timer \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C 6400A0E3 MOV R0,#+100 \ 00000080 600D80E3 ORR R0,R0,#0x1800 \ 00000084 050080E0 ADD R0,R0,R5 \ 00000088 4D0000EF SWI +77 4027 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 00000090 ........ 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,??DataTable136 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 04008DE5 STR R0,[SP, #+4] \ 00000018 898100EF SWI +33161 \ 0000001C 40139FE5 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 30139FE5 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,??DataTable137 ;; S_ICONS \ 00000064 01002DE9 PUSH {R0} \ 00000068 1810A0E3 MOV R1,#+24 \ 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 0000A0E3 MOV R0,#+0 \ 00000084 230000EF SWI +35 \ 00000088 9C0196E5 LDR R0,[R6, #+412] \ 0000008C A01196E5 LDR R1,[R6, #+416] \ 00000090 3420A0E3 MOV R2,#+52 \ 00000094 5C2D82E3 ORR R2,R2,#0x1700 \ 00000098 062082E0 ADD R2,R2,R6 \ 0000009C 04002DE9 PUSH {R2} \ 000000A0 3420A0E3 MOV R2,#+52 \ 000000A4 642D82E3 ORR R2,R2,#0x1900 \ 000000A8 062082E0 ADD R2,R2,R6 \ 000000AC 04002DE9 PUSH {R2} \ 000000B0 A42196E5 LDR R2,[R6, #+420] \ 000000B4 04002DE9 PUSH {R2} \ 000000B8 02002DE9 PUSH {R1} \ 000000BC 01002DE9 PUSH {R0} \ 000000C0 883196E5 LDR R3,[R6, #+392] \ 000000C4 8C2196E5 LDR R2,[R6, #+396] \ 000000C8 340094E5 LDR R0,[R4, #+52] \ 000000CC 4C1E87E2 ADD R1,R7,#+1216 \ 000000D0 240100EF SWI +292 4049 if(pm != pl) \ 000000D4 28009DE5 LDR R0,[SP, #+40] \ 000000D8 2C109DE5 LDR R1,[SP, #+44] \ 000000DC 20D08DE2 ADD SP,SP,#+32 \ 000000E0 010050E1 CMP R0,R1 \ 000000E4 4800000A 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)); \ 000000E8 0000A0E3 MOV R0,#+0 \ 000000EC 2E0100EF SWI +302 \ 000000F0 0080A0E1 MOV R8,R0 \ 000000F4 0000A0E3 MOV R0,#+0 \ 000000F8 2E0100EF SWI +302 \ 000000FC 0090A0E1 MOV R9,R0 \ 00000100 0500A0E3 MOV R0,#+5 \ 00000104 C50100EF SWI +453 \ 00000108 00A0A0E1 MOV R10,R0 \ 0000010C 0900A0E3 MOV R0,#+9 \ 00000110 C50100EF SWI +453 \ 00000114 00012DE9 PUSH {R8} \ 00000118 00022DE9 PUSH {R9} \ 0000011C 0010A0E3 MOV R1,#+0 \ 00000120 02002DE9 PUSH {R1} \ 00000124 0C209DE5 LDR R2,[SP, #+12] \ 00000128 04B045E2 SUB R11,R5,#+4 \ 0000012C 0A104BE0 SUB R1,R11,R10 \ 00000130 023041E2 SUB R3,R1,#+2 \ 00000134 80104BE0 SUB R1,R11,R0, LSL #+1 \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C 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)); \ 00000140 0E00A0E3 MOV R0,#+14 \ 00000144 2E0100EF SWI +302 \ 00000148 0080A0E1 MOV R8,R0 \ 0000014C 0E00A0E3 MOV R0,#+14 \ 00000150 2E0100EF SWI +302 \ 00000154 0090A0E1 MOV R9,R0 \ 00000158 0500A0E3 MOV R0,#+5 \ 0000015C C50100EF SWI +453 \ 00000160 1C008DE5 STR R0,[SP, #+28] \ 00000164 0900A0E3 MOV R0,#+9 \ 00000168 C50100EF SWI +453 \ 0000016C 00A0A0E1 MOV R10,R0 \ 00000170 00012DE9 PUSH {R8} \ 00000174 00022DE9 PUSH {R9} \ 00000178 0000A0E3 MOV R0,#+0 \ 0000017C 01002DE9 PUSH {R0} \ 00000180 24109DE5 LDR R1,[SP, #+36] \ 00000184 28009DE5 LDR R0,[SP, #+40] \ 00000188 00004BE0 SUB R0,R11,R0 \ 0000018C 033040E2 SUB R3,R0,#+3 \ 00000190 18009DE5 LDR R0,[SP, #+24] \ 00000194 910000E0 MUL R0,R1,R0 \ 00000198 20109DE5 LDR R1,[SP, #+32] \ 0000019C ........ _BLF ??div32_a,??rA??div32_a \ 000001A0 0120A0E1 MOV R2,R1 \ 000001A4 8A004BE0 SUB R0,R11,R10, LSL #+1 \ 000001A8 011080E2 ADD R1,R0,#+1 \ 000001AC 0100A0E3 MOV R0,#+1 \ 000001B0 B40100EF SWI +436 4058 // wstrcatprintf(data->ws1,"\nLoading images..."); 4059 4060 if(total_smiles) \ 000001B4 B0019FE5 LDR R0,??method0_0+0x8 ;; total_smiles \ 000001B8 001090E5 LDR R1,[R0, #+0] \ 000001BC 18D08DE2 ADD SP,SP,#+24 \ 000001C0 000051E3 CMP R1,#+0 \ 000001C4 0500000A BEQ ??method0_2 4061 { 4062 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001C8 002090E5 LDR R2,[R0, #+0] \ 000001CC F800A0E3 MOV R0,#+248 \ 000001D0 400E80E3 ORR R0,R0,#0x400 \ 000001D4 071080E0 ADD R1,R0,R7 \ 000001D8 340094E5 LDR R0,[R4, #+52] \ 000001DC 160200EF SWI +534 4063 } 4064 if (xstatuses_load) \ ??method0_2: \ 000001E0 88019FE5 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,??DataTable138 ;; total_xstatuses \ 000001F4 002090E5 LDR R2,[R0, #+0] \ 000001F8 0C00A0E3 MOV R0,#+12 \ 000001FC 500E80E3 ORR R0,R0,#0x500 \ 00000200 071080E0 ADD R1,R0,R7 \ 00000204 340094E5 LDR R0,[R4, #+52] \ 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)); \ ??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 0500A0E3 MOV R0,#+5 \ 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 0810A0E3 MOV R1,#+8 \ 00000254 02002DE9 PUSH {R1} \ 00000258 01002DE9 PUSH {R0} \ 0000025C 340094E5 LDR R0,[R4, #+52] \ 00000260 1B20A0E3 MOV R2,#+27 \ 00000264 0310A0E3 MOV R1,#+3 \ 00000268 4C0100EF SWI +332 4072 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 0000026C 380094E5 LDR R0,[R4, #+56] \ 00000270 522E87E2 ADD R2,R7,#+1312 \ 00000274 101087E2 ADD R1,R7,#+16 \ 00000278 240100EF SWI +292 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)); \ 0000027C 1700A0E3 MOV R0,#+23 \ 00000280 2E0100EF SWI +302 \ 00000284 0050A0E1 MOV R5,R0 \ 00000288 0000A0E3 MOV R0,#+0 \ 0000028C 2E0100EF SWI +302 \ 00000290 0090A0E1 MOV R9,R0 \ 00000294 0500A0E3 MOV R0,#+5 \ 00000298 C50100EF SWI +453 \ 0000029C 18109DE5 LDR R1,[SP, #+24] \ 000002A0 20002DE9 PUSH {R5} \ 000002A4 C1A0A0E1 ASR R10,R1,#+1 \ 000002A8 00022DE9 PUSH {R9} \ 000002AC 0410A0E3 MOV R1,#+4 \ 000002B0 02002DE9 PUSH {R1} \ 000002B4 0830A0E1 MOV R3,R8 \ 000002B8 00204BE0 SUB R2,R11,R0 \ 000002BC 0510A0E3 MOV R1,#+5 \ 000002C0 02002DE9 PUSH {R1} \ 000002C4 0B10A0E1 MOV R1,R11 \ 000002C8 02002DE9 PUSH {R1} \ 000002CC 380094E5 LDR R0,[R4, #+56] \ 000002D0 0A10A0E1 MOV R1,R10 \ 000002D4 4C0100EF SWI +332 \ 000002D8 28D08DE2 ADD SP,SP,#+40 4075 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 000002DC B40196E5 LDR R0,[R6, #+436] \ 000002E0 000050E3 CMP R0,#+0 \ 000002E4 0300000A BEQ ??method0_3 \ 000002E8 2800A0E3 MOV R0,#+40 \ 000002EC 500E80E3 ORR R0,R0,#0x500 \ 000002F0 072080E0 ADD R2,R0,R7 \ 000002F4 000000EA B ??method0_4 \ ??method0_3: \ 000002F8 162087E2 ADD R2,R7,#+22 \ ??method0_4: \ 000002FC 380094E5 LDR R0,[R4, #+56] \ 00000300 101087E2 ADD R1,R7,#+16 \ 00000304 240100EF SWI +292 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)); \ 00000308 1700A0E3 MOV R0,#+23 \ 0000030C 2E0100EF SWI +302 \ 00000310 0050A0E1 MOV R5,R0 \ 00000314 0000A0E3 MOV R0,#+0 \ 00000318 2E0100EF SWI +302 \ 0000031C 0060A0E1 MOV R6,R0 \ 00000320 0500A0E3 MOV R0,#+5 \ 00000324 C50100EF SWI +453 \ 00000328 20002DE9 PUSH {R5} \ 0000032C 40002DE9 PUSH {R6} \ 00000330 0110A0E3 MOV R1,#+1 \ 00000334 02002DE9 PUSH {R1} \ 00000338 0A30A0E1 MOV R3,R10 \ 0000033C 00204BE0 SUB R2,R11,R0 \ 00000340 0510A0E3 MOV R1,#+5 \ 00000344 02002DE9 PUSH {R1} \ 00000348 0B10A0E1 MOV R1,R11 \ 0000034C 02002DE9 PUSH {R1} \ 00000350 380094E5 LDR R0,[R4, #+56] \ 00000354 0310A0E3 MOV R1,#+3 \ 00000358 4C0100EF SWI +332 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)); 4081 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 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)); 4084 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 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)); 4087 // DrawImg(15,200,(int)"4:\\zbin\\naticq\\img\\smiles_logo.png"); 4088 wsprintf(data->ws2,percent_t,"Mod Evilfox(c), Windes, kluchnik"); 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)); 4091 #endif 4092 } \ 0000035C 28D08DE2 ADD SP,SP,#+40 \ 00000360 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_0: \ 00000364 ........ DC32 pictures_max \ 00000368 ........ DC32 pictures_loaded \ 0000036C ........ DC32 total_smiles \ 00000370 ........ 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 340084E5 STR R0,[R4, #+52] 4097 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 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 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 4104 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 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 041090E5 LDR R1,[R0, #+4] \ 0000001C 402F82E3 ORR R2,R2,#0x100 \ 00000020 020051E1 CMP R1,R2 \ 00000024 2600001A BNE ??method5_0 4125 { 4126 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R5,??DataTable155 ;; S_ICONS \ 0000002C 080090E5 LDR R0,[R0, #+8] \ 00000030 ........ LDR R4,??DataTable154 ;; create_connect \ 00000034 5410A0E3 MOV R1,#+84 \ 00000038 601D81E3 ORR R1,R1,#0x1800 \ 0000003C 056081E0 ADD R6,R1,R5 \ 00000040 0370A0E3 MOV R7,#+3 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 0600000A BEQ ??method5_1 \ 0000004C 030050E2 SUBS R0,R0,#+3 \ 00000050 0A00000A BEQ ??method5_2 \ 00000054 070050E2 SUBS R0,R0,#+7 \ 00000058 0A00000A BEQ ??method5_3 \ 0000005C 250050E2 SUBS R0,R0,#+37 \ 00000060 1000000A BEQ ??method5_4 \ 00000064 030000EA B ??method5_5 4127 { 4128 #ifdef kluchnik 4129 case LEFT_SOFT: 4130 if (cltop) create_contactlist_menu(); \ ??method5_1: \ 00000068 B40195E5 LDR R0,[R5, #+436] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 F280BD08 POPEQ {R1,R4-R7,PC} \ 00000074 ........ BL create_contactlist_menu \ ??method5_5: \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C F280BDE8 POP {R1,R4-R7,PC} 4131 // if (cltop) remake_clmenu(); 4132 break; 4133 case RIGHT_SOFT: 4134 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_2: \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 F280BDE8 POP {R1,R4-R7,PC} 4135 #else 4136 case LEFT_SOFT: 4137 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 4138 case RIGHT_SOFT: 4139 // if (cltop) remake_clmenu(); 4140 if (cltop) create_contactlist_menu(); 4141 break; 4142 #endif 4143 case GREEN_BUTTON: 4144 disautorecconect=0; \ ??method5_3: \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C 600185E5 STR R0,[R5, #+352] 4145 if ((connect_state==0)&&(sock==-1)) \ 00000090 8C0195E5 LDR R0,[R5, #+396] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 90019505 LDREQ R0,[R5, #+400] \ 0000009C 01007003 CMNEQ R0,#+1 \ 000000A0 0700001A BNE ??method5_0 4146 { 4147 GBS_DelTimer(&reconnect_tmr); \ 000000A4 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: \ 000000A8 ........ LDR R0,??DataTable150 ;; end_socket \ 000000AC 710100EF SWI +369 4154 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000B0 0600A0E1 MOV R0,R6 \ 000000B4 8C0100EF SWI +396 4155 DNR_TRIES=3; \ 000000B8 D87185E5 STR R7,[R5, #+472] 4156 SUBPROC((void *)create_connect); \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 710100EF SWI +369 4157 break; 4158 } 4159 } 4160 return(0); \ ??method5_0: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 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 70402DE9 PUSH {R4-R6,LR} \ 00000004 0050A0E1 MOV R5,R0 4184 if (m==KEY_DOWN) \ 00000008 9300A0E3 MOV R0,#+147 \ 0000000C 400F80E3 ORR R0,R0,#0x100 \ 00000010 000051E1 CMP R1,R0 \ 00000014 1F00001A BNE ??my_keyhook_0 4185 { 4186 if(change_back_status==1) \ 00000018 ........ LDR R4,??DataTable155 ;; S_ICONS \ 0000001C 0060A0E3 MOV R6,#+0 \ 00000020 400194E5 LDR R0,[R4, #+320] \ 00000024 010050E3 CMP R0,#+1 \ 00000028 0300001A BNE ??my_keyhook_1 4187 { 4188 CurrentStatus=status_rem; \ 0000002C 3C0194E5 LDR R0,[R4, #+316] \ 00000030 740184E5 STR R0,[R4, #+372] 4189 set_my_status(); \ 00000034 ........ BL set_my_status 4190 // SUBPROC((void*)WriteDefSettings); 4191 change_back_status=0; \ 00000038 406184E5 STR R6,[R4, #+320] 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())) \ ??my_keyhook_1: \ 0000003C 140055E3 CMP R5,#+20 \ 00000040 0E00001A BNE ??my_keyhook_2 \ 00000044 430000EF SWI +67 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0B00001A BNE ??my_keyhook_2 4213 #endif 4214 { 4215 GBS_StopTimer(&away_tmr); \ 00000050 6400A0E3 MOV R0,#+100 \ 00000054 580D80E3 ORR R0,R0,#0x1600 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 440100EF SWI +324 4216 msg_away_timer=AUTO_ENGADE; \ 00000060 ........ LDR R0,??DataTable143 ;; AUTO_ENGADE \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 300184E5 STR R0,[R4, #+304] 4217 away_timer(); \ 0000006C ........ BL away_timer 4218 main_d=1; \ 00000070 0100A0E3 MOV R0,#+1 \ 00000074 E00084E5 STR R0,[R4, #+224] \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C 7080BDE8 POP {R4-R6,PC} 4219 } 4220 else 4221 { 4222 #endif 4223 if(Reset_timer) \ ??my_keyhook_2: \ 00000080 18009FE5 LDR R0,??my_keyhook_3 ;; Reset_timer \ 00000084 000090E5 LDR R0,[R0, #+0] \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 7080BD08 POPEQ {R4-R6,PC} 4224 { 4225 msg_away_timer=0; \ 00000090 306184E5 STR R6,[R4, #+304] 4226 away_m=0; \ 00000094 386184E5 STR R6,[R4, #+312] 4227 } 4228 #ifdef ELKA 4229 } 4230 #endif 4231 } 4232 return 0; \ ??my_keyhook_0: \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_keyhook_3: \ 000000A0 ........ 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 C2F0E5ECFF20 DC8 "\302\360\345\354\377 \342 \356\355\353\340\351\355:\012%02d:%02d:%02d\012\321\345\360\342\345\360:\012%s" \ E220EEEDEBE0 \ E9ED3A0A2530 \ 32643A253032 \ 643A25303264 \ 0AD1E5F0E2E5 \ F03A0A257300 \ 00000046 0000 DC8 0, 0 \ 00000048 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 00000051 000000 DC8 0, 0, 0 \ 00000054 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 0000005E 0000 DC8 0, 0 \ 00000060 566962726120 DC8 "Vibra On" \ 4F6E00 \ 00000069 000000 DC8 0, 0, 0 \ 0000006C 566962726120 DC8 "Vibra Off" \ 4F666600 \ 00000076 0000 DC8 0, 0 \ 00000078 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 00000086 0000 DC8 0, 0 \ 00000088 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 00000097 00 DC8 0 \ 00000098 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 000000A5 000000 DC8 0, 0, 0 \ 000000A8 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 000000B6 0000 DC8 0, 0 \ 000000B8 3E3E20257320 DC8 ">> %s <<" \ 3C3C00 \ 000000C1 000000 DC8 0, 0, 0 \ 000000C4 2563257400 DC8 "%c%t" \ 000000C9 000000 DC8 0, 0, 0 \ 000000CC 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000000D4 EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 000000DB 00 DC8 0 \ 000000DC 426164207061 DC8 "Bad packet" \ 636B657400 \ 000000E7 00 DC8 0 \ 000000E8 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 000000F3 00 DC8 0 \ 000000F4 4552523A2025 DC8 "ERR: %s" \ 7300 \ 000000FC 75696E256400 DC8 "uin%d" \ 00000102 0000 DC8 0, 0 \ 00000104 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 0000010E 0000 DC8 0, 0 \ 00000110 257325642E77 DC8 "%s%d.wav" \ 617600 \ 00000119 000000 DC8 0, 0, 0 \ 0000011C 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000130 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ 0000013C 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 00000144 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 2CH, 6BH \ 2C6B \ 0000014C 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 2CH \ 6B2C \ 00000154 77696E646573 DC8 77H, 69H, 6EH, 64H, 65H, 73H, 20H, 62H \ 2062 \ 0000015C 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 00000164 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 0000016C 20323035382C DC8 20H, 32H, 30H, 35H, 38H, 2CH, 20H, 6DH \ 206D \ 00000174 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 0000017C 202573206174 DC8 20H, 25H, 73H, 20H, 61H, 74H, 20H, 25H \ 2025 \ 00000184 732000 DC8 73H, 20H, 0 \ 00000187 00 DC8 0 \ 00000188 466562203237 DC8 "Feb 27 2008" \ 203230303800 \ 00000194 31303A34393A DC8 "10:49:49" \ 343900 \ 0000019D 000000 DC8 0, 0, 0 \ 000001A0 47414D453A00 DC8 "GAME:" \ 000001A6 0000 DC8 0, 0 \ 000001A8 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 \ 000001D3 00 DC8 0 \ 000001D4 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 000001E4 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 \ 00000214 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 00000221 000000 DC8 0, 0, 0 \ 00000224 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 00000231 000000 DC8 0, 0, 0 \ 00000234 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 0000024D 000000 DC8 0, 0, 0 \ 00000250 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 0000025D 000000 DC8 0, 0, 0 \ 00000260 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 00000274 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 00000281 000000 DC8 0, 0, 0 \ 00000284 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 \ 000002A0 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 000002AD 000000 DC8 0, 0, 0 \ 000002B0 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 000002CB 00 DC8 0 \ 000002CC 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 000002D4 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 000002DC 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 000002E4 696C65732F6E DC8 69H, 6CH, 65H, 73H, 2FH, 6EH, 61H, 74H \ 6174 \ 000002EC 6963715F6D6F DC8 69H, 63H, 71H, 5FH, 6DH, 6FH, 64H, 32H \ 6432 \ 000002F4 303538732E7A DC8 30H, 35H, 38H, 73H, 2EH, 7AH, 69H, 70H \ 6970 \ 000002FC 202873676F6C DC8 20H, 28H, 73H, 67H, 6FH, 6CH, 64H, 29H \ 6429 \ 00000304 202020202834 DC8 20H, 20H, 20H, 20H, 28H, 34H, 30H, 6BH \ 306B \ 0000030C 622968747470 DC8 62H, 29H, 68H, 74H, 74H, 70H, 3AH, 2FH \ 3A2F \ 00000314 2F77696E6465 DC8 2FH, 77H, 69H, 6EH, 64H, 65H, 73H, 2EH \ 732E \ 0000031C 6E61726F642E DC8 6EH, 61H, 72H, 6FH, 64H, 2EH, 72H, 75H \ 7275 \ 00000324 2F66696C6573 DC8 2FH, 66H, 69H, 6CH, 65H, 73H, 2FH, 6EH \ 2F6E \ 0000032C 61746963715F DC8 61H, 74H, 69H, 63H, 71H, 5FH, 6DH, 6FH \ 6D6F \ 00000334 64323035386E DC8 64H, 32H, 30H, 35H, 38H, 6EH, 2EH, 7AH \ 2E7A \ 0000033C 697020284E65 DC8 69H, 70H, 20H, 28H, 4EH, 65H, 77H, 53H \ 7753 \ 00000344 476F6C642920 DC8 47H, 6FH, 6CH, 64H, 29H, 20H, 28H, 34H \ 2834 \ 0000034C 306B62296874 DC8 30H, 6BH, 62H, 29H, 68H, 74H, 74H, 70H \ 7470 \ 00000354 3A2F2F77696E DC8 3AH, 2FH, 2FH, 77H, 69H, 6EH, 64H, 65H \ 6465 \ 0000035C 732E6E61726F DC8 73H, 2EH, 6EH, 61H, 72H, 6FH, 64H, 2EH \ 642E \ 00000364 72752F66696C DC8 72H, 75H, 2FH, 66H, 69H, 6CH, 65H, 73H \ 6573 \ 0000036C 2F6E61746963 DC8 2FH, 6EH, 61H, 74H, 69H, 63H, 71H, 5FH \ 715F \ 00000374 6D6F64323035 DC8 6DH, 6FH, 64H, 32H, 30H, 35H, 38H, 65H \ 3865 \ 0000037C 2E7A69702028 DC8 2EH, 7AH, 69H, 70H, 20H, 28H, 65H, 6CH \ 656C \ 00000384 6B6129202020 DC8 6BH, 61H, 29H, 20H, 20H, 20H, 20H, 20H \ 2020 \ 0000038C 2834306B6229 DC8 28H, 34H, 30H, 6BH, 62H, 29H, 66H, 69H \ 6669 \ 00000394 6C65733A2068 DC8 6CH, 65H, 73H, 3AH, 20H, 68H, 74H, 74H \ 7474 \ 0000039C 703A2F2F7769 DC8 70H, 3AH, 2FH, 2FH, 77H, 69H, 6EH, 64H \ 6E64 \ 000003A4 65732E6E6172 DC8 65H, 73H, 2EH, 6EH, 61H, 72H, 6FH, 64H \ 6F64 \ 000003AC 2E72752F6669 DC8 2EH, 72H, 75H, 2FH, 66H, 69H, 6CH, 65H \ 6C65 \ 000003B4 732F6E617469 DC8 73H, 2FH, 6EH, 61H, 74H, 69H, 63H, 71H \ 6371 \ 000003BC 6D6F645F616C DC8 6DH, 6FH, 64H, 5FH, 61H, 6CH, 6CH, 66H \ 6C66 \ 000003C4 696C65735F77 DC8 69H, 6CH, 65H, 73H, 5FH, 77H, 2EH, 7AH \ 2E7A \ 000003CC 697020283433 DC8 69H, 70H, 20H, 28H, 34H, 33H, 32H, 6BH \ 326B \ 000003D4 622953746174 DC8 62H, 29H, 53H, 74H, 61H, 74H, 75H, 73H \ 7573 \ 000003DC 206F6E206963 DC8 20H, 6FH, 6EH, 20H, 69H, 63H, 6FH, 6EH \ 6F6E \ 000003E4 626172206874 DC8 62H, 61H, 72H, 20H, 68H, 74H, 74H, 70H \ 7470 \ 000003EC 3A2F2F77696E DC8 3AH, 2FH, 2FH, 77H, 69H, 6EH, 64H, 65H \ 6465 \ 000003F4 732E6E61726F DC8 73H, 2EH, 6EH, 61H, 72H, 6FH, 64H, 2EH \ 642E \ 000003FC 72752F66696C DC8 72H, 75H, 2FH, 66H, 69H, 6CH, 65H, 73H \ 6573 \ 00000404 2F696D673136 DC8 2FH, 69H, 6DH, 67H, 31H, 36H, 78H, 31H \ 7831 \ 0000040C 362E7A697020 DC8 36H, 2EH, 7AH, 69H, 70H, 20H, 28H, 37H \ 2837 \ 00000414 346B6229D2E0 DC8 34H, 6BH, 62H, 29H, 0D2H, 0E0H, 0EAH, 20H \ EA20 \ 0000041C E6E520E2F1E5 DC8 0E6H, 0E5H, 20H, 0E2H, 0F1H, 0E5H, 20H, 0E1H \ 20E1 \ 00000424 F3E4E5F220F2 DC8 0F3H, 0E4H, 0E5H, 0F2H, 20H, 0F2H, 0F3H, 0F2H \ F3F2 \ 0000042C 20687474703A DC8 20H, 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH \ 2F2F \ 00000434 6B6C6375686E DC8 6BH, 6CH, 63H, 75H, 68H, 6EH, 69H, 6BH \ 696B \ 0000043C 2E6A696E6F2D DC8 2EH, 6AH, 69H, 6EH, 6FH, 2DH, 6EH, 65H \ 6E65 \ 00000444 742E72752F6E DC8 74H, 2EH, 72H, 75H, 2FH, 6EH, 61H, 74H \ 6174 \ 0000044C 6963716D6F64 DC8 69H, 63H, 71H, 6DH, 6FH, 64H, 2FH, 0 \ 2F00 \ 00000454 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 00000468 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 00000475 000000 DC8 0, 0, 0 \ 00000478 204F6E6C696E DC8 " Online: %02d:%02d:%02d %02d-%02d" \ 653A20253032 \ 643A25303264 \ 3A2530326420 \ 253032642D25 \ 30326400 \ 0000049A 0000 DC8 0, 0 \ 0000049C 204F66666C69 DC8 " Offline: %02d:%02d:%02d %02d-%02d" \ 6E653A202530 \ 32643A253032 \ 643A25303264 \ 20253032642D \ 2530326400 \ 000004BF 00 DC8 0 \ 000004C0 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 000004C8 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 000004D0 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 000004D8 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 000004E0 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 000004E8 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 000004F0 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 000004F6 0000 DC8 0, 0 \ 000004F8 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 0000050A 0000 DC8 0, 0 \ 0000050C 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 0000051F 00 DC8 0 \ 00000520 4578697400 DC8 "Exit" \ 00000525 000000 DC8 0, 0, 0 \ 00000528 434C69737400 DC8 "CList" \ 0000052E 0000 DC8 0, 0 \ 00000530 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 00000558 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 00000563 00 DC8 0 \ 00000564 49646C655570 DC8 "IdleUpd" \ 6400 \ 0000056C 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 00000583 00 DC8 0 \ 00000584 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 0000058F 00 DC8 0 \ 00000590 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000005A8 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000005B8 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000005C4 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000005CD 000000 DC8 0, 0, 0 \ 000005D0 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 \ 000005F8 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 \ 0000061A 0000 DC8 0, 0 \ 0000061C 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 0000063F 00 DC8 0 \ 00000640 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 0000065F 00 DC8 0 \ 00000660 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 0000066A 0000 DC8 0, 0 \ 0000066C C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ 00000680 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 0000068D 000000 DC8 0, 0, 0 \ 00000690 343A5C5A4269 DC8 "4:\\ZBin\\BalletMini\\BalletMini.elf" \ 6E5C42616C6C \ 65744D696E69 \ 5C42616C6C65 \ 744D696E692E \ 656C6600 \ 000006B2 0000 DC8 0, 0 \ 000006B4 526571756573 DC8 "Request info..." \ 7420696E666F \ 2E2E2E00 \ 000006C4 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 000006E7 00 DC8 0 \ ipc_my_name: \ 000006E8 4E6174494351 DC8 "NatICQ" \ 00 \ 000006EF 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006FF 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 00000708 585461736B00 DC8 "XTask" \ 0000070E 0000 DC8 0, 0 \ x_status_change: \ 00000710 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ ipc_game_name: \ 00000720 436F6D626174 DC8 "Combats" \ 7300 \ gui_methods: \ 00000728 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 00000744 ............ 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 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ input_awaymsg_hdr: \ 00000038 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 00000040 00000000.... DC32 0H, `?`, 2147483647 \ ....FFFFFF7F \ 0000004C D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345:\012" \ EDE8E53A0A00 \ 00000058 D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345 2:\012" \ EDE8E520323A \ 0A00 \ 00000066 0000 DC8 0, 0 \ 00000068 EAEEE3E4E020 DC8 "\352\356\343\344\340 \361\354\356\343\363 \356\362\342\345\367\363:)" \ F1ECEEE3F320 \ EEF2E2E5F7F3 \ 3A2900 \ 0000007D 000000 DC8 0, 0, 0 \ 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 4000A0E3 MOV R0,#+64 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 4010A0E3 MOV R1,#+64 \ 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,??DataTable158 ;; `?` \ 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 2800A0E3 MOV R0,#+40 \ 00000050 700E80E3 ORR R0,R0,#0x700 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 040086E5 STR R0,[R6, #+4] 4246 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000005C 158000EF SWI +32789 \ 00000060 200086E5 STR R0,[R6, #+32] 4247 csm->csm.state=0; \ 00000064 107085E5 STR R7,[R5, #+16] 4248 csm->csm.unk1=0; \ 00000068 147085E5 STR R7,[R5, #+20] 4249 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 0000006C 0600A0E1 MOV R0,R6 \ 00000070 370100EF SWI +311 \ 00000074 280085E5 STR R0,[R5, #+40] \ 00000078 ........ LDR R5,??DataTable155 ;; S_ICONS \ 0000007C 1C0185E5 STR R0,[R5, #+284] 4250 ews=AllocWS(16384); \ 00000080 400CA0E3 MOV R0,#+16384 \ 00000084 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); \ 00000088 ........ LDR R2,??DataTable146 ;; process_active_timer \ 0000008C 2C0185E5 STR R0,[R5, #+300] \ 00000090 0300A0E3 MOV R0,#+3 \ 00000094 D80185E5 STR R0,[R5, #+472] \ 00000098 871EA0E3 MOV R1,#+2160 \ 0000009C 6400A0E3 MOV R0,#+100 \ 000000A0 600D80E3 ORR R0,R0,#0x1800 \ 000000A4 050080E0 ADD R0,R0,R5 \ 000000A8 4D0000EF SWI +77 4256 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000AC ........ LDR R0,??DataTable178 ;; UIN \ 000000B0 131084E2 ADD R1,R4,#+19 \ 000000B4 002090E5 LDR R2,[R0, #+0] \ 000000B8 EE00A0E3 MOV R0,#+238 \ 000000BC 600E80E3 ORR R0,R0,#0x600 \ 000000C0 040080E0 ADD R0,R0,R4 \ 000000C4 160000EF SWI +22 4257 gipc.name_to=ipc_my_name; \ 000000C8 E800A0E3 MOV R0,#+232 \ 000000CC 600E80E3 ORR R0,R0,#0x600 \ 000000D0 041080E0 ADD R1,R0,R4 \ 000000D4 BC1085E5 STR R1,[R5, #+188] 4258 gipc.name_from=ipc_my_name; \ 000000D8 040080E0 ADD R0,R0,R4 \ 000000DC C00085E5 STR R0,[R5, #+192] 4259 gipc.data=(void *)-1; \ 000000E0 0700E0E1 MVN R0,R7 \ 000000E4 C40085E5 STR R0,[R5, #+196] 4260 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000E8 BC3085E2 ADD R3,R5,#+188 \ 000000EC 0120A0E3 MOV R2,#+1 \ 000000F0 B010A0E3 MOV R1,#+176 \ 000000F4 DE1C81E3 ORR R1,R1,#0xDE00 \ 000000F8 0900A0E3 MOV R0,#+9 \ 000000FC 420C80E3 ORR R0,R0,#0x4200 \ 00000100 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 } \ 00000104 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,??DataTable155 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C ........ LDR R0,??DataTable149 ;; my_keyhook \ 00000010 2D0100EF SWI +301 \ 00000014 6400A0E3 MOV R0,#+100 \ 00000018 600D80E3 ORR R0,R0,#0x1800 \ 0000001C 040080E0 ADD R0,R0,R4 \ 00000020 8C0100EF SWI +396 4296 GBS_DelTimer(&tmr_vibra); \ 00000024 4400A0E3 MOV R0,#+68 \ 00000028 600D80E3 ORR R0,R0,#0x1800 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 8C0100EF SWI +396 4297 GBS_DelTimer(&reconnect_tmr); \ 00000034 5400A0E3 MOV R0,#+84 \ 00000038 600D80E3 ORR R0,R0,#0x1800 \ 0000003C 040080E0 ADD R0,R0,R4 \ 00000040 8C0100EF SWI +396 4298 GBS_DelTimer(&tmr_illumination); \ 00000044 3400A0E3 MOV R0,#+52 \ 00000048 600D80E3 ORR R0,R0,#0x1800 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 8C0100EF SWI +396 4299 GBS_DelTimer(&mytmr); \ 00000054 7400A0E3 MOV R0,#+116 \ 00000058 580D80E3 ORR R0,R0,#0x1600 \ 0000005C 040080E0 ADD R0,R0,R4 \ 00000060 8C0100EF SWI +396 4300 GBS_DelTimer(&mytmr2); \ 00000064 8400A0E3 MOV R0,#+132 \ 00000068 580D80E3 ORR R0,R0,#0x1600 \ 0000006C 040080E0 ADD R0,R0,R4 \ 00000070 8C0100EF SWI +396 4301 GBS_DelTimer(&mytmr3); \ 00000074 EC00A0E3 MOV R0,#+236 \ 00000078 4C0D80E3 ORR R0,R0,#0x1300 \ 0000007C 040080E0 ADD R0,R0,R4 \ 00000080 8C0100EF SWI +396 4302 GBS_DelTimer(&mytmr4); \ 00000084 9400A0E3 MOV R0,#+148 \ 00000088 580D80E3 ORR R0,R0,#0x1600 \ 0000008C 040080E0 ADD R0,R0,R4 \ 00000090 8C0100EF SWI +396 4303 #ifdef NEWSGOLD 4304 GBS_DelTimer(&tracktmr); \ 00000094 A400A0E3 MOV R0,#+164 \ 00000098 580D80E3 ORR R0,R0,#0x1600 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 8C0100EF SWI +396 4305 #endif 4306 GBS_DelTimer(&develop); \ 000000A4 B000A0E3 MOV R0,#+176 \ 000000A8 680D80E3 ORR R0,R0,#0x1A00 \ 000000AC 040080E0 ADD R0,R0,R4 \ 000000B0 8C0100EF SWI +396 4307 GBS_DelTimer(&away_tmr); \ 000000B4 6400A0E3 MOV R0,#+100 \ 000000B8 580D80E3 ORR R0,R0,#0x1600 \ 000000BC 040080E0 ADD R0,R0,R4 \ 000000C0 8C0100EF SWI +396 4308 SetVibration(0); \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 7C0000EF SWI +124 4309 FreeTemplates(); \ 000000CC ........ BL FreeTemplates 4310 FreeCLIST(); \ 000000D0 ........ _BLF FreeCLIST,??FreeCLIST??rA 4311 free_ICONS(); \ 000000D4 ........ BL free_ICONS 4312 // FreeSmiles(); 4313 FreeWS(ews); \ 000000D8 2C0194E5 LDR R0,[R4, #+300] \ 000000DC 290100EF SWI +297 4314 FreeXStatusText(); \ 000000E0 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 4315 // MutexDestroy(&contactlist_mtx); 4316 SUBPROC((void *)FreeSmiles); \ 000000E4 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 000000E8 710100EF SWI +369 4317 SUBPROC((void *)FreeXStatusesImg); \ 000000EC 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 000000F0 710100EF SWI +369 4318 SUBPROC((void *)end_socket); \ 000000F4 ........ LDR R0,??DataTable150 ;; end_socket \ 000000F8 710100EF SWI +369 4319 SUBPROC((void *)ClearSendQ); \ 000000FC ........ LDR R0,??DataTable181 ;; ClearSendQ \ 00000100 710100EF SWI +369 4320 SUBPROC((void *)ElfKiller); \ 00000104 ........ LDR R0,??DataTable152 ;; ElfKiller \ 00000108 710100EF SWI +369 4321 } \ 0000010C 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000110 ........ DC32 FreeSmiles \ 00000114 ........ 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,??DataTable155 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 AC1190E5 LDR R1,[R0, #+428] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 4326 { 4327 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 D81180E5 STR R1,[R0, #+472] 4328 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable154 ;; 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,??DataTable155 ;; S_ICONS \ 00000008 C40094E5 LDR R0,[R4, #+196] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1500000A BEQ ??CheckDoubleRun_0 4336 { 4337 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable158 ;; `?` \ 00000018 0820A0E3 MOV R2,#+8 \ 0000001C 702E82E3 ORR R2,R2,#0x700 \ 00000020 012082E0 ADD R2,R2,R1 \ 00000024 BC2084E5 STR R2,[R4, #+188] 4338 gipc.name_from=ipc_my_name; \ 00000028 E820A0E3 MOV R2,#+232 \ 0000002C 602E82E3 ORR R2,R2,#0x600 \ 00000030 011082E0 ADD R1,R2,R1 \ 00000034 C01084E5 STR R1,[R4, #+192] 4339 gipc.data=(void *)csm_id; \ 00000038 C40084E5 STR R0,[R4, #+196] 4340 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000003C BC3084E2 ADD R3,R4,#+188 \ 00000040 0220A0E3 MOV R2,#+2 \ 00000044 B010A0E3 MOV R1,#+176 \ 00000048 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000004C 0900A0E3 MOV R0,#+9 \ 00000050 420C80E3 ORR R0,R0,#0x4200 \ 00000054 000100EF SWI +256 4341 LockSched(); \ 00000058 460100EF SWI +326 4342 CloseCSM(maincsm_id); \ 0000005C 180194E5 LDR R0,[R4, #+280] \ 00000060 FC0100EF SWI +508 4343 //ShowMSG(1,(int)LG_ALREADY_STARTED); 4344 UnlockSched(); \ 00000064 470100EF SWI +327 \ 00000068 1080BDE8 POP {R4,PC} 4345 } 4346 else 4347 { 4348 InitXStatusesImg(); \ ??CheckDoubleRun_0: \ 0000006C ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 4349 //InitSmiles(); Это вызовется из InitXStatusesImg 4350 create_connect(); \ 00000070 ........ BL create_connect 4351 } 4352 } \ 00000074 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 1CD04DE2 SUB SP,SP,#+28 \ 00000008 ........ LDR R5,??DataTable157 ;; S_ICONS \ 0000000C ........ LDR R7,??DataTable158 ;; `?` \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 040094E5 LDR R0,[R4, #+4] \ 00000018 0060A0E3 MOV R6,#+0 \ 0000001C B010A0E3 MOV R1,#+176 \ 00000020 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000024 010050E1 CMP R0,R1 \ 00000028 8400001A 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 0C8094E5 LDR R8,[R4, #+12] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 8100000A BEQ ??maincsm_onmessage_2 4373 { 4374 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C E890A0E3 MOV R9,#+232 \ 00000040 609E89E3 ORR R9,R9,#0x600 \ 00000044 071089E0 ADD R1,R9,R7 \ 00000048 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 7A00001A BNE ??maincsm_onmessage_2 4375 { 4376 switch (msg->submess) \ 00000054 081094E5 LDR R1,[R4, #+8] \ 00000058 040098E5 LDR R0,[R8, #+4] \ 0000005C 011041E2 SUB R1,R1,#+1 \ 00000060 040051E3 CMP R1,#+4 \ 00000064 7500008A BHI ??maincsm_onmessage_2 \ 00000068 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 0000006C 0120D2E7 LDRB R2,[R2, R1] \ 00000070 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000074 010A1116 DC8 +1,+10,+17,+22 \ 00000078 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: \ 0000007C 071089E0 ADD R1,R9,R7 \ 00000080 010050E1 CMP R0,R1 \ 00000084 0200001A BNE ??maincsm_onmessage_4 \ 00000088 840A9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000008C 710100EF SWI +369 \ 00000090 6A0000EA B ??maincsm_onmessage_2 4381 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 00000094 180195E5 LDR R0,[R5, #+280] \ 00000098 080088E5 STR R0,[R8, #+8] \ 0000009C 670000EA 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: \ 000000A0 071089E0 ADD R1,R9,R7 \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 0100001A BNE ??maincsm_onmessage_7 \ 000000AC 640A9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000B0 710100EF SWI +369 4386 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000B4 ........ BL SMART_REDRAW \ 000000B8 600000EA 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: \ 000000BC 071089E0 ADD R1,R9,R7 \ 000000C0 010050E1 CMP R0,R1 \ 000000C4 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000C8 4C0A9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000CC 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: \ 000000D0 071089E0 ADD R1,R9,R7 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 5800001A BNE ??maincsm_onmessage_2 4401 { 4402 CLIST *t=(CLIST *)cltop; \ 000000DC B48195E5 LDR R8,[R5, #+436] 4403 int f=0; \ 000000E0 0090A0E3 MOV R9,#+0 \ 000000E4 000058E3 CMP R8,#+0 \ 000000E8 2500000A BEQ ??maincsm_onmessage_11 4404 while(t) 4405 { 4406 if(t->just_now) \ ??maincsm_onmessage_12: \ 000000EC 5C0098E5 LDR R0,[R8, #+92] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0200000A BEQ ??maincsm_onmessage_13 4407 { 4408 if (!(--(t->just_now))) f=1; \ 000000F8 010050E2 SUBS R0,R0,#+1 \ 000000FC 5C0088E5 STR R0,[R8, #+92] \ 00000100 0190A003 MOVEQ R9,#+1 4409 } 4410 if (t->isactive) \ ??maincsm_onmessage_13: \ 00000104 800098E5 LDR R0,[R8, #+128] \ 00000108 000050E3 CMP R0,#+0 \ 0000010C 0C00000A BEQ ??maincsm_onmessage_14 4411 { 4412 if (!(--(t->isactive))) \ 00000110 010050E2 SUBS R0,R0,#+1 \ 00000114 800088E5 STR R0,[R8, #+128] \ 00000118 0900001A BNE ??maincsm_onmessage_14 4413 { 4414 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 4415 if ((t->log)&&(!t->isunread)) \ 0000011C 740098E5 LDR R0,[R8, #+116] \ 00000120 0190A0E3 MOV R9,#+1 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0500000A BEQ ??maincsm_onmessage_14 \ 0000012C 640098E5 LDR R0,[R8, #+100] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0200001A BNE ??maincsm_onmessage_14 4416 { 4417 FreeLOGQ(&t->log); \ 00000138 740088E2 ADD R0,R8,#+116 \ 0000013C ........ BL FreeLOGQ 4418 t->msg_count=0; \ 00000140 846088E5 STR R6,[R8, #+132] 4419 } 4420 } 4421 } 4422 t=(CLIST *)(t->next); \ ??maincsm_onmessage_14: \ 00000144 008098E5 LDR R8,[R8, #+0] 4423 } \ 00000148 000058E3 CMP R8,#+0 \ 0000014C E6FFFF1A BNE ??maincsm_onmessage_12 4424 if (f) \ 00000150 000059E3 CMP R9,#+0 \ 00000154 0A00000A BEQ ??maincsm_onmessage_11 4425 { 4426 CLIST *oldt=NULL; 4427 if (contactlist_menu_id) \ 00000158 BC1195E5 LDR R1,[R5, #+444] \ 0000015C 0000A0E3 MOV R0,#+0 \ 00000160 000051E3 CMP R1,#+0 \ 00000164 0400000A BEQ ??maincsm_onmessage_15 4428 { 4429 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000168 BC0195E5 LDR R0,[R5, #+444] \ 0000016C 0010A0E3 MOV R1,#+0 \ 00000170 090200EF SWI +521 \ 00000174 8F0100EF SWI +399 \ 00000178 ........ _BLF FindContactByN,??FindContactByN??rA 4430 } 4431 RecountMenu(oldt,1); \ ??maincsm_onmessage_15: \ 0000017C 0110A0E3 MOV R1,#+1 \ 00000180 ........ BL RecountMenu 4432 } 4433 if (time_to_stop_t9) \ ??maincsm_onmessage_11: \ 00000184 E80195E5 LDR R0,[R5, #+488] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 2B00000A BEQ ??maincsm_onmessage_2 4434 { 4435 if (!(--time_to_stop_t9)) \ 00000190 010050E2 SUBS R0,R0,#+1 \ 00000194 E80185E5 STR R0,[R5, #+488] \ 00000198 2800001A BNE ??maincsm_onmessage_2 4436 { 4437 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 0000019C C00195E5 LDR R0,[R5, #+448] \ 000001A0 350100EF SWI +309 \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 2400000A BEQ ??maincsm_onmessage_2 \ 000001AC 960100EF SWI +406 \ 000001B0 220000EA 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: \ 000001B4 080098E5 LDR R0,[R8, #+8] \ 000001B8 040090E5 LDR R0,[R0, #+4] \ 000001BC 1B0000EF SWI +27 \ 000001C0 0090A0E1 MOV R9,R0 4444 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 000001C4 260089E2 ADD R0,R9,#+38 \ 000001C8 140000EF SWI +20 \ 000001CC 00A0A0E1 MOV R10,R0 4445 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 000001D0 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); \ 000001D4 0920A0E1 MOV R2,R9 \ 000001D8 000090E5 LDR R0,[R0, #+0] \ 000001DC 00008AE5 STR R0,[R10, #+0] \ 000001E0 0200A0E3 MOV R0,#+2 \ 000001E4 B400CAE1 STRH R0,[R10, #+4] \ 000001E8 B690CAE1 STRH R9,[R10, #+6] \ 000001EC 080098E5 LDR R0,[R8, #+8] \ 000001F0 041090E5 LDR R1,[R0, #+4] \ 000001F4 08008AE2 ADD R0,R10,#+8 \ 000001F8 1E0100EF SWI +286 4449 //slientsend=1; 4450 if(strstr(msg->data,PASS)==0) \ 000001FC 1C199FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 00000200 08008AE2 ADD R0,R10,#+8 \ 00000204 180100EF SWI +280 \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 0400000A BEQ ??maincsm_onmessage_17 4451 { 4452 SENDMSGCOUNT++; //Номер сообщения 4453 SUBPROC((void *)SendAnswer,0,msg); 4454 } 4455 else 4456 { 4457 msg->pkt.data_len=40; \ 00000210 2800A0E3 MOV R0,#+40 \ 00000214 B600CAE1 STRH R0,[R10, #+6] 4458 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 00000218 531E87E2 ADD R1,R7,#+1328 \ 0000021C 08008AE2 ADD R0,R10,#+8 \ 00000220 1A0000EF SWI +26 4459 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_17: \ 00000224 200195E5 LDR R0,[R5, #+288] 4460 SUBPROC((void *)SendAnswer,0,msg); \ 00000228 0A20A0E1 MOV R2,R10 \ 0000022C 010080E2 ADD R0,R0,#+1 \ 00000230 200185E5 STR R0,[R5, #+288] \ 00000234 ........ LDR R0,??DataTable179 ;; SendAnswer \ 00000238 0010A0E3 MOV R1,#+0 \ 0000023C 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: \ 00000240 068100EF SWI +33030 \ 00000244 040090E5 LDR R0,[R0, #+4] \ 00000248 080100EF SWI +264 \ 0000024C 2C0090E5 LDR R0,[R0, #+44] 4470 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 00000250 350100EF SWI +309 \ 00000254 000050E3 CMP R0,#+0 \ 00000258 6100000A BEQ ??maincsm_onmessage_18 4471 { 4472 GUI *igui=GetTopGUI(); 4473 if (igui) //И он существует \ 0000025C 4D0100EF SWI +333 \ 00000260 000050E3 CMP R0,#+0 \ 00000264 6000000A BEQ ??maincsm_onmessage_19 4474 { 4475 //#ifdef ELKA 4476 INC_show=0; \ 00000268 F06185E5 STR R6,[R5, #+496] 4477 //#endif 4478 canvasdata=BuildCanvas(); //void * - belyj fon! \ 0000026C F18000EF SWI +33009 \ 00000270 EC0085E5 STR R0,[R5, #+236] 4479 int icn; 4480 // if(ShowStatusIcon==0 || ShowStatusIcon==3) 4481 // { 4482 if(total_unread) \ 00000274 B00195E5 LDR R0,[R5, #+432] \ 00000278 000050E3 CMP R0,#+0 4483 icn=IS_MSG; \ 0000027C 0D00A013 MOVNE R0,#+13 \ 00000280 0500001A BNE ??maincsm_onmessage_20 4484 else 4485 { 4486 switch(connect_state) \ 00000284 8C0195E5 LDR R0,[R5, #+396] \ 00000288 000050E3 CMP R0,#+0 \ 0000028C 0200000A BEQ ??maincsm_onmessage_20 \ 00000290 030050E2 SUBS R0,R0,#+3 4487 { 4488 case 0: 4489 icn=IS_OFFLINE; break; 4490 case 3: 4491 icn=CurrentStatus; //IS_ONLINE; \ 00000294 74019505 LDREQ R0,[R5, #+372] 4492 break; 4493 default: 4494 icn=IS_UNKNOWN; break; \ 00000298 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: \ 0000029C ........ LDR R1,??DataTable184 ;; ShowStatusIcon \ 000002A0 001091E5 LDR R1,[R1, #+0] \ 000002A4 000051E3 CMP R1,#+0 \ 000002A8 02005113 CMPNE R1,#+2 \ 000002AC 03005113 CMPNE R1,#+3 \ 000002B0 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); \ 000002B4 008185E0 ADD R8,R5,R0, LSL #+2 \ 000002B8 000098E5 LDR R0,[R8, #+0] \ 000002BC 210000EF SWI +33 \ 000002C0 0090A0E1 MOV R9,R0 \ 000002C4 000098E5 LDR R0,[R8, #+0] \ 000002C8 220000EF SWI +34 \ 000002CC 50189FE5 LDR R1,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 000002D0 00A091E5 LDR R10,[R1, #+0] \ 000002D4 4C189FE5 LDR R1,??maincsm_onmessage_5+0x14 ;; IDLEICON_Y \ 000002D8 0A0080E0 ADD R0,R0,R10 \ 000002DC 00B091E5 LDR R11,[R1, #+0] \ 000002E0 0110A0E3 MOV R1,#+1 \ 000002E4 02002DE9 PUSH {R1} \ 000002E8 013040E2 SUB R3,R0,#+1 \ 000002EC 0B20A0E1 MOV R2,R11 \ 000002F0 0B1089E0 ADD R1,R9,R11 \ 000002F4 011041E2 SUB R1,R1,#+1 \ 000002F8 02002DE9 PUSH {R1} \ 000002FC EC0095E5 LDR R0,[R5, #+236] \ 00000300 0A10A0E1 MOV R1,R10 \ 00000304 250000EF SWI +37 4505 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000308 002098E5 LDR R2,[R8, #+0] \ 0000030C 0B10A0E1 MOV R1,R11 \ 00000310 0A00A0E1 MOV R0,R10 \ 00000314 230000EF SWI +35 \ 00000318 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: \ 0000031C ........ LDR R0,??DataTable185 ;; show_xstatus \ 00000320 000090E5 LDR R0,[R0, #+0] \ 00000324 010050E3 CMP R0,#+1 \ 00000328 03005013 CMPNE R0,#+3 \ 0000032C 2700001A BNE ??maincsm_onmessage_22 4509 { 4510 PNGTOP_DESC *pltop=PNG_TOP(); 4511 pltop->dyn_pltop=XStatusesImgList; 4512 DisableIDLETMR(); \ 00000330 F4879FE5 LDR R8,??maincsm_onmessage_5+0x18 ;; XStatusesIconArray \ 00000334 B98100EF SWI +33209 \ 00000338 ........ LDR R1,??DataTable162 ;; XStatusesImgList \ 0000033C 001091E5 LDR R1,[R1, #+0] \ 00000340 081080E5 STR R1,[R0, #+8] \ 00000344 7F0100EF SWI +383 \ 00000348 ........ LDR R0,??DataTable186 ;; CurrentXStatus \ 0000034C 001098E5 LDR R1,[R8, #+0] \ 00000350 000090E5 LDR R0,[R0, #+0] \ 00000354 000191E7 LDR R0,[R1, +R0, LSL #+2] 4513 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 4514 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 00000358 210000EF SWI +33 \ 0000035C 001098E5 LDR R1,[R8, #+0] \ 00000360 0090A0E1 MOV R9,R0 \ 00000364 ........ LDR R0,??DataTable186 ;; CurrentXStatus \ 00000368 000090E5 LDR R0,[R0, #+0] \ 0000036C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000370 220000EF SWI +34 \ 00000374 B4179FE5 LDR R1,??maincsm_onmessage_5+0x1C ;; IDLEICON_XX \ 00000378 00A091E5 LDR R10,[R1, #+0] \ 0000037C B0179FE5 LDR R1,??maincsm_onmessage_5+0x20 ;; IDLEICON_YX \ 00000380 0A0080E0 ADD R0,R0,R10 \ 00000384 00B091E5 LDR R11,[R1, #+0] \ 00000388 0110A0E3 MOV R1,#+1 \ 0000038C 02002DE9 PUSH {R1} \ 00000390 013040E2 SUB R3,R0,#+1 \ 00000394 0B20A0E1 MOV R2,R11 \ 00000398 0B1089E0 ADD R1,R9,R11 \ 0000039C 011041E2 SUB R1,R1,#+1 \ 000003A0 02002DE9 PUSH {R1} \ 000003A4 EC0095E5 LDR R0,[R5, #+236] \ 000003A8 0A10A0E1 MOV R1,R10 \ 000003AC 250000EF SWI +37 4515 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 000003B0 ........ LDR R0,??DataTable186 ;; CurrentXStatus \ 000003B4 001098E5 LDR R1,[R8, #+0] \ 000003B8 000090E5 LDR R0,[R0, #+0] \ 000003BC 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 000003C0 0B10A0E1 MOV R1,R11 \ 000003C4 0A00A0E1 MOV R0,R10 \ 000003C8 230000EF SWI +35 \ 000003CC 08D08DE2 ADD SP,SP,#+8 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) \ ??maincsm_onmessage_22: \ 000003D0 B00195E5 LDR R0,[R5, #+432] \ 000003D4 000050E3 CMP R0,#+0 \ 000003D8 0300000A BEQ ??maincsm_onmessage_19 4530 SLI_On(); \ 000003DC ........ BL SLI_On \ 000003E0 010000EA B ??maincsm_onmessage_19 4531 #endif 4532 } 4533 } 4534 else 4535 { 4536 main_d=1; \ ??maincsm_onmessage_18: \ 000003E4 0100A0E3 MOV R0,#+1 \ 000003E8 E00085E5 STR R0,[R5, #+224] 4537 } 4538 } 4539 4540 //---------------------------------------------------// 4541 4542 if(msg->msg == MSG_IPC) \ ??maincsm_onmessage_19: \ 000003EC 040094E5 LDR R0,[R4, #+4] \ 000003F0 B010A0E3 MOV R1,#+176 \ 000003F4 DE1C81E3 ORR R1,R1,#0xDE00 \ 000003F8 010050E1 CMP R0,R1 \ 000003FC BC00001A BNE ??maincsm_onmessage_23 4543 { 4544 IPC_REQ *ipc; 4545 if ((ipc=(IPC_REQ*)msg->data0)) \ 00000400 0C0094E5 LDR R0,[R4, #+12] \ 00000404 000050E3 CMP R0,#+0 \ 00000408 1601000A BEQ ??maincsm_onmessage_24 4546 { 4547 if (strcmp_nocase(ipc->name_to,"IdleUpd")==0) \ 0000040C 000090E5 LDR R0,[R0, #+0] \ 00000410 6410A0E3 MOV R1,#+100 \ 00000414 501E81E3 ORR R1,R1,#0x500 \ 00000418 071081E0 ADD R1,R1,R7 \ 0000041C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000420 000050E3 CMP R0,#+0 4548 { 4549 switch (msg->submess) \ 00000424 08009405 LDREQ R0,[R4, #+8] \ 00000428 00005003 CMPEQ R0,#+0 \ 0000042C B000001A BNE ??maincsm_onmessage_23 4550 { 4551 case 0: 4552 { 4553 if (main_d==1) \ 00000430 E00095E5 LDR R0,[R5, #+224] \ 00000434 010050E3 CMP R0,#+1 \ 00000438 8100001A BNE ??maincsm_onmessage_25 4554 { 4555 ClearScreen(); \ 0000043C ........ _BLF ClearScreen,??ClearScreen??rA 4556 if(Is_SMARTCPU_On) \ 00000440 040195E5 LDR R0,[R5, #+260] \ 00000444 000050E3 CMP R0,#+0 \ 00000448 7C00000A BEQ ??maincsm_onmessage_26 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) \ 0000044C E4069FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 00000450 E83095E5 LDR R3,[R5, #+232] \ 00000454 6A1D85E2 ADD R1,R5,#+6784 \ 00000458 14108DE5 STR R1,[SP, #+20] \ 0000045C 5010A0E3 MOV R1,#+80 \ 00000460 681D81E3 ORR R1,R1,#0x1A00 \ 00000464 051081E0 ADD R1,R1,R5 \ 00000468 10108DE5 STR R1,[SP, #+16] \ 0000046C 2010A0E3 MOV R1,#+32 \ 00000470 681D81E3 ORR R1,R1,#0x1A00 \ 00000474 051081E0 ADD R1,R1,R5 \ 00000478 0C108DE5 STR R1,[SP, #+12] \ 0000047C F010A0E3 MOV R1,#+240 \ 00000480 641D81E3 ORR R1,R1,#0x1900 \ 00000484 051081E0 ADD R1,R1,R5 \ 00000488 08108DE5 STR R1,[SP, #+8] \ 0000048C 008090E5 LDR R8,[R0, #+0] \ 00000490 A4069FE5 LDR R0,??maincsm_onmessage_5+0x28 ;; msg_d_y \ 00000494 672D85E2 ADD R2,R5,#+6592 \ 00000498 009090E5 LDR R9,[R0, #+0] \ 0000049C 9C069FE5 LDR R0,??maincsm_onmessage_5+0x2C ;; spaco2 \ 000004A0 00A090E5 LDR R10,[R0, #+0] \ 000004A4 ........ LDR R0,??DataTable195 ;; fonto \ 000004A8 00B090E5 LDR R11,[R0, #+0] \ 000004AC 0A00A0E1 MOV R0,R10 \ 000004B0 01002DE9 PUSH {R0} \ 000004B4 01005BE3 CMP R11,#+1 \ 000004B8 2B00001A BNE ??maincsm_onmessage_27 4566 { 4567 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 000004BC 0100A0E3 MOV R0,#+1 \ 000004C0 01002DE9 PUSH {R0} \ 000004C4 0910A0E1 MOV R1,R9 \ 000004C8 0800A0E1 MOV R0,R8 \ 000004CC ........ _BLF PrintField,??PrintField??rA 4568 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 000004D0 0A00A0E1 MOV R0,R10 \ 000004D4 01002DE9 PUSH {R0} \ 000004D8 0100A0E3 MOV R0,#+1 \ 000004DC 01002DE9 PUSH {R0} \ 000004E0 E83095E5 LDR R3,[R5, #+232] \ 000004E4 18209DE5 LDR R2,[SP, #+24] \ 000004E8 F00095E5 LDR R0,[R5, #+240] \ 000004EC 091080E0 ADD R1,R0,R9 \ 000004F0 0800A0E1 MOV R0,R8 \ 000004F4 ........ _BLF PrintField,??PrintField??rA 4569 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 000004F8 0A00A0E1 MOV R0,R10 \ 000004FC 01002DE9 PUSH {R0} \ 00000500 0100A0E3 MOV R0,#+1 \ 00000504 01002DE9 PUSH {R0} \ 00000508 E83095E5 LDR R3,[R5, #+232] \ 0000050C 24209DE5 LDR R2,[SP, #+36] \ 00000510 F00095E5 LDR R0,[R5, #+240] \ 00000514 801089E0 ADD R1,R9,R0, LSL #+1 \ 00000518 0800A0E1 MOV R0,R8 \ 0000051C ........ _BLF PrintField,??PrintField??rA 4570 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 00000520 0A00A0E1 MOV R0,R10 \ 00000524 01002DE9 PUSH {R0} \ 00000528 0100A0E3 MOV R0,#+1 \ 0000052C 01002DE9 PUSH {R0} \ 00000530 E83095E5 LDR R3,[R5, #+232] \ 00000534 30209DE5 LDR R2,[SP, #+48] \ 00000538 F00095E5 LDR R0,[R5, #+240] \ 0000053C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000540 091080E0 ADD R1,R0,R9 \ 00000544 0800A0E1 MOV R0,R8 \ 00000548 ........ _BLF PrintField,??PrintField??rA 4571 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 0000054C 00042DE9 PUSH {R10} \ 00000550 0100A0E3 MOV R0,#+1 \ 00000554 01002DE9 PUSH {R0} \ 00000558 E83095E5 LDR R3,[R5, #+232] \ 0000055C 3C209DE5 LDR R2,[SP, #+60] \ 00000560 F00095E5 LDR R0,[R5, #+240] \ 00000564 001189E0 ADD R1,R9,R0, LSL #+2 \ 00000568 310000EA B ??maincsm_onmessage_28 4572 } 4573 else 4574 { 4575 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_27: \ 0000056C 0B00A0E1 MOV R0,R11 \ 00000570 01002DE9 PUSH {R0} \ 00000574 0910A0E1 MOV R1,R9 \ 00000578 0800A0E1 MOV R0,R8 \ 0000057C ........ _BLF PrintField,??PrintField??rA 4576 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000580 F00095E5 LDR R0,[R5, #+240] \ 00000584 C50100EF SWI +453 \ 00000588 0A10A0E1 MOV R1,R10 \ 0000058C 02002DE9 PUSH {R1} \ 00000590 090080E0 ADD R0,R0,R9 \ 00000594 0B10A0E1 MOV R1,R11 \ 00000598 02002DE9 PUSH {R1} \ 0000059C E83095E5 LDR R3,[R5, #+232] \ 000005A0 18209DE5 LDR R2,[SP, #+24] \ 000005A4 011080E2 ADD R1,R0,#+1 \ 000005A8 0800A0E1 MOV R0,R8 \ 000005AC ........ _BLF PrintField,??PrintField??rA 4577 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 000005B0 F00095E5 LDR R0,[R5, #+240] \ 000005B4 C50100EF SWI +453 \ 000005B8 0A10A0E1 MOV R1,R10 \ 000005BC 02002DE9 PUSH {R1} \ 000005C0 800089E0 ADD R0,R9,R0, LSL #+1 \ 000005C4 0B10A0E1 MOV R1,R11 \ 000005C8 02002DE9 PUSH {R1} \ 000005CC E83095E5 LDR R3,[R5, #+232] \ 000005D0 24209DE5 LDR R2,[SP, #+36] \ 000005D4 021080E2 ADD R1,R0,#+2 \ 000005D8 0800A0E1 MOV R0,R8 \ 000005DC ........ _BLF PrintField,??PrintField??rA 4578 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 000005E0 F00095E5 LDR R0,[R5, #+240] \ 000005E4 C50100EF SWI +453 \ 000005E8 0A10A0E1 MOV R1,R10 \ 000005EC 02002DE9 PUSH {R1} \ 000005F0 800080E0 ADD R0,R0,R0, LSL #+1 \ 000005F4 090080E0 ADD R0,R0,R9 \ 000005F8 0B10A0E1 MOV R1,R11 \ 000005FC 02002DE9 PUSH {R1} \ 00000600 E83095E5 LDR R3,[R5, #+232] \ 00000604 30209DE5 LDR R2,[SP, #+48] \ 00000608 031080E2 ADD R1,R0,#+3 \ 0000060C 0800A0E1 MOV R0,R8 \ 00000610 ........ _BLF PrintField,??PrintField??rA 4579 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 00000614 F00095E5 LDR R0,[R5, #+240] \ 00000618 C50100EF SWI +453 \ 0000061C 00042DE9 PUSH {R10} \ 00000620 00082DE9 PUSH {R11} \ 00000624 E83095E5 LDR R3,[R5, #+232] \ 00000628 3C209DE5 LDR R2,[SP, #+60] \ 0000062C 000189E0 ADD R0,R9,R0, LSL #+2 \ 00000630 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_28: \ 00000634 0800A0E1 MOV R0,R8 \ 00000638 ........ _BLF PrintField,??PrintField??rA \ 0000063C 28D08DE2 ADD SP,SP,#+40 4580 } 4581 #endif 4582 } 4583 main_d=0; \ ??maincsm_onmessage_26: \ 00000640 E06085E5 STR R6,[R5, #+224] 4584 } 4585 if(Is_UPTIME_On) \ ??maincsm_onmessage_25: \ 00000644 440195E5 LDR R0,[R5, #+324] \ 00000648 000050E3 CMP R0,#+0 \ 0000064C 0100000A BEQ ??maincsm_onmessage_29 4586 Draw22(canvasdata); \ 00000650 EC0095E5 LDR R0,[R5, #+236] \ 00000654 ........ BL Draw22 4587 if(Is_PING_On) \ ??maincsm_onmessage_29: \ 00000658 FC0095E5 LDR R0,[R5, #+252] \ 0000065C 000050E3 CMP R0,#+0 \ 00000660 0100000A BEQ ??maincsm_onmessage_30 4588 Draw11(canvasdata); \ 00000664 EC0095E5 LDR R0,[R5, #+236] \ 00000668 ........ BL Draw11 4589 4590 if(Auto_Status && showAwayIdle) \ ??maincsm_onmessage_30: \ 0000066C ........ LDR R0,??DataTable167 ;; Auto_Status \ 00000670 000090E5 LDR R0,[R0, #+0] \ 00000674 000050E3 CMP R0,#+0 \ 00000678 0500000A BEQ ??maincsm_onmessage_31 \ 0000067C ........ LDR R0,??DataTable168 ;; showAwayIdle \ 00000680 000090E5 LDR R0,[R0, #+0] \ 00000684 000050E3 CMP R0,#+0 \ 00000688 0100000A BEQ ??maincsm_onmessage_31 4591 DrawAutoMSG(canvasdata); \ 0000068C EC0095E5 LDR R0,[R5, #+236] \ 00000690 ........ BL DrawAutoMSG 4592 if(Is_Unread_On) \ ??maincsm_onmessage_31: \ 00000694 A8049FE5 LDR R0,??maincsm_onmessage_5+0x30 ;; Is_Unread_On \ 00000698 000090E5 LDR R0,[R0, #+0] \ 0000069C 000050E3 CMP R0,#+0 \ 000006A0 1300000A BEQ ??maincsm_onmessage_23 4593 { 4594 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 000006A4 142195E5 LDR R2,[R5, #+276] \ 000006A8 F78FA0E3 MOV R8,#+988 \ 000006AC 5F0F88E2 ADD R0,R8,#+380 \ 000006B0 071080E0 ADD R1,R0,R7 \ 000006B4 050088E0 ADD R0,R8,R5 \ 000006B8 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); \ 000006BC ........ LDR R0,??DataTable169 ;; spaco1 \ 000006C0 052088E0 ADD R2,R8,R5 \ 000006C4 000090E5 LDR R0,[R0, #+0] \ 000006C8 01002DE9 PUSH {R0} \ 000006CC ........ LDR R0,??DataTable195 ;; fonto \ 000006D0 000090E5 LDR R0,[R0, #+0] \ 000006D4 01002DE9 PUSH {R0} \ 000006D8 E83095E5 LDR R3,[R5, #+232] \ 000006DC 64049FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; unread_Y \ 000006E0 001090E5 LDR R1,[R0, #+0] \ 000006E4 60049FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; unread_X \ 000006E8 000090E5 LDR R0,[R0, #+0] \ 000006EC ........ _BLF PrintField,??PrintField??rA \ 000006F0 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_23: \ 000006F4 040094E5 LDR R0,[R4, #+4] \ 000006F8 AF10A0E3 MOV R1,#+175 \ 000006FC DE1C81E3 ORR R1,R1,#0xDE00 \ 00000700 010050E1 CMP R0,R1 \ 00000704 2E00001A BNE ??maincsm_onmessage_32 4610 { 4611 extern const char *successed_config_filename; 4612 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 00000708 ........ LDR R0,??DataTable192 ;; successed_config_filename \ 0000070C 0C1094E5 LDR R1,[R4, #+12] \ 00000710 000090E5 LDR R0,[R0, #+0] \ 00000714 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000718 000050E3 CMP R0,#+0 \ 0000071C 2800001A BNE ??maincsm_onmessage_32 4613 { 4614 ShowMSG(1,(int)"NatICQ config updated!"); 4615 InitConfig(); 4616 initTags(); 4617 FontPathFree(); 4618 #ifdef EVILFOX 4619 FontPathInit(fonto,(char *)fontpath, 0); 4620 #else 4621 FontPathInit(fonto,(char *)fontpath, 1); \ 00000720 ........ LDR R8,??DataTable194 ;; fontpath \ 00000724 6C00A0E3 MOV R0,#+108 \ 00000728 500E80E3 ORR R0,R0,#0x500 \ 0000072C 071080E0 ADD R1,R0,R7 \ 00000730 0100A0E3 MOV R0,#+1 \ 00000734 480100EF SWI +328 \ 00000738 ........ _BLF InitConfig,??InitConfig??rA \ 0000073C ........ _BLF initTags,??initTags??rA \ 00000740 ........ _BLF FontPathFree,??FontPathFree??rA \ 00000744 ........ LDR R0,??DataTable195 ;; fonto \ 00000748 0120A0E3 MOV R2,#+1 \ 0000074C 00B090E5 LDR R11,[R0, #+0] \ 00000750 0810A0E1 MOV R1,R8 \ 00000754 0B00A0E1 MOV R0,R11 \ 00000758 ........ _BLF FontPathInit,??FontPathInit??rA 4622 #endif 4623 //#ifdef ELKA 4624 if(fonto==1) \ 0000075C 01005BE3 CMP R11,#+1 \ 00000760 0E00001A BNE ??maincsm_onmessage_33 4625 { 4626 char *heght=malloc(64); \ 00000764 4000A0E3 MOV R0,#+64 \ 00000768 140000EF SWI +20 \ 0000076C 0090A0E1 MOV R9,R0 4627 sprintf(heght, "%s2240.png", fontpath); \ 00000770 0820A0E1 MOV R2,R8 \ 00000774 8400A0E3 MOV R0,#+132 \ 00000778 500E80E3 ORR R0,R0,#0x500 \ 0000077C 071080E0 ADD R1,R0,R7 \ 00000780 0900A0E1 MOV R0,R9 \ 00000784 160000EF SWI +22 4628 paused_height=GetImgHeight((int)heght); \ 00000788 0900A0E1 MOV R0,R9 \ 0000078C 210000EF SWI +33 \ 00000790 F00085E5 STR R0,[R5, #+240] 4629 mfree(heght); \ 00000794 0900A0E1 MOV R0,R9 \ 00000798 150000EF SWI +21 \ 0000079C 010000EA B ??maincsm_onmessage_34 4630 } 4631 else 4632 paused_height=fonto-100; \ ??maincsm_onmessage_33: \ 000007A0 64004BE2 SUB R0,R11,#+100 \ 000007A4 F00085E5 STR R0,[R5, #+240] 4633 //#endif 4634 free_ICONS(); \ ??maincsm_onmessage_34: \ 000007A8 ........ BL free_ICONS 4635 setup_ICONS(); \ 000007AC ........ BL setup_ICONS 4636 ResortCL(); \ 000007B0 ........ _BLF ResortCL,??ResortCL??rA 4637 RecountMenu(NULL,1); \ 000007B4 0110A0E3 MOV R1,#+1 \ 000007B8 0000A0E3 MOV R0,#+0 \ 000007BC ........ BL RecountMenu 4638 init_time_zone(); \ 000007C0 ........ BL init_time_zone 4639 // InitSmiles(); 4640 } 4641 } 4642 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_32: \ 000007C4 040094E5 LDR R0,[R4, #+4] \ 000007C8 0E10A0E3 MOV R1,#+14 \ 000007CC 641C81E3 ORR R1,R1,#0x6400 \ 000007D0 010050E1 CMP R0,R1 \ 000007D4 0E00001A BNE ??maincsm_onmessage_35 4643 { 4644 if ((int)msg->data0==csm->gui_id) \ 000007D8 1C109DE5 LDR R1,[SP, #+28] \ 000007DC 0C0094E5 LDR R0,[R4, #+12] \ 000007E0 281091E5 LDR R1,[R1, #+40] \ 000007E4 010050E1 CMP R0,R1 4645 { 4646 csm->csm.state=-3; \ 000007E8 1C009D05 LDREQ R0,[SP, #+28] \ 000007EC 0210E003 MVNEQ R1,#+2 \ 000007F0 10108005 STREQ R1,[R0, #+16] 4647 } 4648 if ((int)msg->data0==contactlist_menu_id) \ 000007F4 0C0094E5 LDR R0,[R4, #+12] \ 000007F8 BC1195E5 LDR R1,[R5, #+444] \ 000007FC 010050E1 CMP R0,R1 4649 { 4650 contactlist_menu_id=0; \ 00000800 BC618505 STREQ R6,[R5, #+444] 4651 prev_clmenu_itemcount=0; \ 00000804 C4618505 STREQ R6,[R5, #+452] 4652 } 4653 if ((int)msg->data0==edchat_id) \ 00000808 C01195E5 LDR R1,[R5, #+448] \ 0000080C 010050E1 CMP R0,R1 4654 { 4655 edchat_id=0; \ 00000810 C0618505 STREQ R6,[R5, #+448] 4656 } 4657 } 4658 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_35: \ 00000814 040094E5 LDR R0,[R4, #+4] \ 00000818 AE10A0E3 MOV R1,#+174 \ 0000081C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000820 010050E1 CMP R0,R1 \ 00000824 0F00001A BNE ??maincsm_onmessage_24 4659 { 4660 switch((int)msg->data0) \ 00000828 0C0094E5 LDR R0,[R4, #+12] \ 0000082C 101094E5 LDR R1,[R4, #+16] \ 00000830 ........ LDR R9,??DataTable174 ;; do_reconnect \ 00000834 5420A0E3 MOV R2,#+84 \ 00000838 602D82E3 ORR R2,R2,#0x1800 \ 0000083C 054082E0 ADD R4,R2,R5 \ 00000840 482F42E2 SUB R2,R2,#+288 \ 00000844 058082E0 ADD R8,R2,R5 \ 00000848 802050E2 SUBS R2,R0,#+128 \ 0000084C 0800000A BEQ ??maincsm_onmessage_36 \ 00000850 022052E2 SUBS R2,R2,#+2 \ 00000854 0200000A BEQ ??maincsm_onmessage_37 \ 00000858 122052E2 SUBS R2,R2,#+18 \ 0000085C 1400000A BEQ ??maincsm_onmessage_38 \ 00000860 1E0000EA B ??maincsm_onmessage_39 4661 { 4662 case LMAN_DISCONNECT_IND: 4663 is_gprs_online=0; \ ??maincsm_onmessage_37: \ 00000864 AC6185E5 STR R6,[R5, #+428] 4664 return(1); \ ??maincsm_onmessage_24: \ 00000868 0100A0E3 MOV R0,#+1 \ 0000086C 20D08DE2 ADD SP,SP,#+32 \ 00000870 F08FBDE8 POP {R4-R11,PC} ;; return 4665 case LMAN_CONNECT_CNF: 4666 vibra_count=1; \ ??maincsm_onmessage_36: \ 00000874 0100A0E3 MOV R0,#+1 \ 00000878 7C0185E5 STR R0,[R5, #+380] 4667 start_vibra(); \ 0000087C ........ BL start_vibra 4668 is_gprs_online=1; \ 00000880 0100A0E3 MOV R0,#+1 \ 00000884 AC0185E5 STR R0,[R5, #+428] 4669 strcpy(logmsg,LG_GRGPRSUP); \ 00000888 591E87E2 ADD R1,R7,#+1424 \ 0000088C 0800A0E1 MOV R0,R8 \ 00000890 1A0000EF SWI +26 4670 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000894 ........ LDR R0,??DataTable182 ;; RECONNECT_TIME \ 00000898 0920A0E1 MOV R2,R9 \ 0000089C 000090E5 LDR R0,[R0, #+0] \ 000008A0 D830A0E3 MOV R3,#+216 \ 000008A4 930001E0 MUL R1,R3,R0 \ 000008A8 0400A0E1 MOV R0,R4 \ 000008AC 4D0000EF SWI +77 4671 return(1); \ 000008B0 070000EA B ??maincsm_onmessage_40 4672 case ENIP_DNR_HOST_BY_NAME: 4673 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_38: \ 000008B4 D40195E5 LDR R0,[R5, #+468] \ 000008B8 000051E1 CMP R1,R0 \ 000008BC E9FFFF1A BNE ??maincsm_onmessage_24 4674 { 4675 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 000008C0 D80195E5 LDR R0,[R5, #+472] \ 000008C4 000050E3 CMP R0,#+0 \ 000008C8 E6FFFF0A BEQ ??maincsm_onmessage_24 \ 000008CC ........ LDR R0,??DataTable206 ;; create_connect \ ??maincsm_onmessage_41: \ 000008D0 710100EF SWI +369 4676 } 4677 return(1); \ ??maincsm_onmessage_40: \ 000008D4 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_42: \ 000008D8 20D08DE2 ADD SP,SP,#+32 \ 000008DC F08FBDE8 POP {R4-R11,PC} 4678 } 4679 if ((int)msg->data1==sock) \ ??maincsm_onmessage_39: \ 000008E0 902195E5 LDR R2,[R5, #+400] \ 000008E4 020051E1 CMP R1,R2 \ 000008E8 DEFFFF1A BNE ??maincsm_onmessage_24 4680 { 4681 //Если наш сокет 4682 if ((((unsigned int)msg->data0)>>28)==0xA) \ 000008EC 201EA0E1 LSR R1,R0,#+28 \ 000008F0 0A0051E3 CMP R1,#+10 \ 000008F4 0200001A BNE ??maincsm_onmessage_43 4683 { 4684 //Принят пакет 4685 ProcessPacket((TPKT *)msg->data0); \ 000008F8 ........ BL ProcessPacket 4686 return(0); \ 000008FC 0000A0E3 MOV R0,#+0 \ 00000900 F4FFFFEA B ??maincsm_onmessage_42 4687 } 4688 switch((int)msg->data0) \ ??maincsm_onmessage_43: \ 00000904 ........ LDR R2,??DataTable177 ;; VIBR_ON_CONNECT \ 00000908 8C1195E5 LDR R1,[R5, #+396] \ 0000090C 00A092E5 LDR R10,[R2, #+0] \ 00000910 8A0040E2 SUB R0,R0,#+138 \ 00000914 050050E3 CMP R0,#+5 \ 00000918 D2FFFF8A BHI ??maincsm_onmessage_24 \ 0000091C 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000920 D02092E1 LDRSB R2,[R2, R0] \ 00000924 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000928 46463F01 DC8 +70,+70,+63,+1 \ 0000092C 4F4B0000 DC8 +79,+75,+0,+0 4689 { 4690 case ENIP_SOCK_CONNECTED: 4691 if (connect_state==1) \ ??maincsm_onmessage_44: \ 00000930 010051E3 CMP R1,#+1 \ 00000934 3700001A BNE ??maincsm_onmessage_45 4692 { 4693 if(VIBR_ON_CONNECT) \ 00000938 00005AE3 CMP R10,#+0 4694 vibra_count=2; \ 0000093C 0200A013 MOVNE R0,#+2 4695 else 4696 vibra_count=1; \ 00000940 0100A003 MOVEQ R0,#+1 \ 00000944 7C0185E5 STR R0,[R5, #+380] 4697 start_vibra(); \ 00000948 ........ BL start_vibra 4698 //Соединение установленно, посылаем пакет login 4699 strcpy(logmsg, LG_GRTRYLOGIN); \ 0000094C A800A0E3 MOV R0,#+168 \ 00000950 500E80E3 ORR R0,R0,#0x500 \ 00000954 071080E0 ADD R1,R0,R7 \ 00000958 0800A0E1 MOV R0,R8 \ 0000095C 1A0000EF SWI +26 4700 { 4701 int i=strlen(PASS); \ 00000960 B8019FE5 LDR R0,??maincsm_onmessage_5+0xC ;; PASS \ 00000964 1B0000EF SWI +27 \ 00000968 0080A0E1 MOV R8,R0 4702 TPKT *p=malloc(sizeof(PKT)+i); \ 0000096C 080088E2 ADD R0,R8,#+8 \ 00000970 140000EF SWI +20 4703 p->pkt.uin=UIN; 4704 p->pkt.type=T_REQLOGIN; 4705 p->pkt.data_len=i; 4706 memcpy(p->data,PASS,i); \ 00000974 A4119FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 00000978 0090A0E1 MOV R9,R0 \ 0000097C ........ LDR R0,??DataTable178 ;; UIN \ 00000980 0820A0E1 MOV R2,R8 \ 00000984 004090E5 LDR R4,[R0, #+0] \ 00000988 0100A0E3 MOV R0,#+1 \ 0000098C 004089E5 STR R4,[R9, #+0] \ 00000990 B400C9E1 STRH R0,[R9, #+4] \ 00000994 B680C9E1 STRH R8,[R9, #+6] \ 00000998 080089E2 ADD R0,R9,#+8 \ 0000099C 1E0100EF SWI +286 4707 SUBPROC((void *)send_login,0,p); \ 000009A0 A8019FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; send_login \ 000009A4 0920A0E1 MOV R2,R9 \ 000009A8 0010A0E3 MOV R1,#+0 \ 000009AC 710100EF SWI +369 4708 } 4709 GROUP_CACHE=0; \ 000009B0 B86185E5 STR R6,[R5, #+440] 4710 SENDMSGCOUNT=0; //Начинаем отсчет \ 000009B4 206185E5 STR R6,[R5, #+288] 4711 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 000009B8 0600A0E1 MOV R0,R6 \ 000009BC ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000009C0 000050E3 CMP R0,#+0 \ 000009C4 0400001A BNE ??maincsm_onmessage_46 \ 000009C8 B800A0E3 MOV R0,#+184 \ 000009CC 500E80E3 ORR R0,R0,#0x500 \ 000009D0 071080E0 ADD R1,R0,R7 \ 000009D4 0000A0E3 MOV R0,#+0 \ 000009D8 ........ _BLF AddGroup,??AddGroup??rA 4712 if (!FindContactByUin(UIN)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_46: \ 000009DC 0400A0E1 MOV R0,R4 \ 000009E0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000009E4 000050E3 CMP R0,#+0 \ 000009E8 0600001A BNE ??maincsm_onmessage_47 \ 000009EC 0130A0E3 MOV R3,#+1 \ 000009F0 0020A0E3 MOV R2,#+0 \ 000009F4 C400A0E3 MOV R0,#+196 \ 000009F8 500E80E3 ORR R0,R0,#0x500 \ 000009FC 071080E0 ADD R1,R0,R7 \ 00000A00 0400A0E1 MOV R0,R4 \ 00000A04 ........ _BLF AddContact,??AddContact??rA 4713 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_47: \ 00000A08 44019FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; LoadLocalCL \ 00000A0C 710100EF SWI +369 4714 SMART_REDRAW(); \ 00000A10 ........ BL SMART_REDRAW \ 00000A14 AEFFFFEA B ??maincsm_onmessage_40 4715 } 4716 else 4717 { 4718 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_45: \ 00000A18 5D1E87E2 ADD R1,R7,#+1488 \ ??maincsm_onmessage_48: \ 00000A1C 0100A0E3 MOV R0,#+1 \ 00000A20 480100EF SWI +328 \ 00000A24 AAFFFFEA B ??maincsm_onmessage_40 4719 } 4720 break; 4721 case ENIP_SOCK_DATA_READ: 4722 if (connect_state>=2) \ ??maincsm_onmessage_49: \ 00000A28 020051E3 CMP R1,#+2 4723 { 4724 //Если посылали send 4725 SUBPROC((void *)get_answer); \ 00000A2C 24019FA5 LDRGE R0,??maincsm_onmessage_5+0x44 ;; get_answer \ 00000A30 A6FFFFAA BGE ??maincsm_onmessage_41 4726 //SMART_REDRAW(); 4727 } 4728 else 4729 { 4730 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000A34 F800A0E3 MOV R0,#+248 \ 00000A38 500E80E3 ORR R0,R0,#0x500 \ 00000A3C 071080E0 ADD R1,R0,R7 \ 00000A40 F5FFFFEA B ??maincsm_onmessage_48 4731 } 4732 break; 4733 case ENIP_BUFFER_FREE: 4734 case ENIP_BUFFER_FREE1: 4735 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_50: \ 00000A44 ........ LDR R0,??DataTable179 ;; SendAnswer \ 00000A48 0020A0E3 MOV R2,#+0 \ 00000A4C 0210A0E1 MOV R1,R2 \ 00000A50 710100EF SWI +369 \ 00000A54 9EFFFFEA B ??maincsm_onmessage_40 4736 break; 4737 case ENIP_SOCK_REMOTE_CLOSED: 4738 //Закрыт со стороны сервера 4739 if (connect_state) \ ??maincsm_onmessage_51: \ 00000A58 000051E3 CMP R1,#+0 \ 00000A5C 81FFFF0A BEQ ??maincsm_onmessage_24 4740 SUBPROC((void *)end_socket); \ 00000A60 ........ LDR R0,??DataTable204 ;; end_socket \ 00000A64 99FFFFEA B ??maincsm_onmessage_41 4741 break; 4742 case ENIP_SOCK_CLOSED: 4743 //strcpy(logmsg, "No connection"); 4744 //Dump not received 4745 /* if (RXstate>(-(int)sizeof(PKT))) 4746 { 4747 unsigned int err; 4748 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 4749 if (f!=-1) 4750 { 4751 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 4752 fclose(f,&err); 4753 } 4754 }*/ 4755 FillAllOffline(); \ ??maincsm_onmessage_52: \ 00000A68 ........ _BLF FillAllOffline,??FillAllOffline??rA 4756 RecountMenu(NULL,1); \ 00000A6C 0110A0E3 MOV R1,#+1 \ 00000A70 0000A0E3 MOV R0,#+0 \ 00000A74 ........ BL RecountMenu 4757 connect_state=0; \ 00000A78 8C6185E5 STR R6,[R5, #+396] 4758 sock=-1; \ 00000A7C 0600E0E1 MVN R0,R6 \ 00000A80 900185E5 STR R0,[R5, #+400] 4759 if(VIBR_ON_CONNECT) \ 00000A84 00005AE3 CMP R10,#+0 4760 vibra_count=4; \ 00000A88 0400A013 MOVNE R0,#+4 4761 else 4762 vibra_count=1; \ 00000A8C 0100A003 MOVEQ R0,#+1 \ 00000A90 7C0185E5 STR R0,[R5, #+380] 4763 4764 start_vibra(); \ 00000A94 ........ BL start_vibra 4765 if (sendq_p) \ 00000A98 A80195E5 LDR R0,[R5, #+424] \ 00000A9C 000050E3 CMP R0,#+0 \ 00000AA0 0600000A BEQ ??maincsm_onmessage_53 4766 { 4767 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000AA4 A43195E5 LDR R3,[R5, #+420] \ 00000AA8 1C00A0E3 MOV R0,#+28 \ 00000AAC 600E80E3 ORR R0,R0,#0x600 \ 00000AB0 072080E0 ADD R2,R0,R7 \ 00000AB4 FF10A0E3 MOV R1,#+255 \ 00000AB8 0800A0E1 MOV R0,R8 \ 00000ABC 1B0100EF SWI +283 4768 } 4769 SMART_REDRAW(); \ ??maincsm_onmessage_53: \ 00000AC0 ........ BL SMART_REDRAW 4770 SUBPROC((void *)ClearSendQ); \ 00000AC4 ........ LDR R0,??DataTable181 ;; ClearSendQ \ 00000AC8 710100EF SWI +369 4771 #ifdef EVILFOX 4772 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 4773 #else 4774 if (!disautorecconect) \ 00000ACC 600195E5 LDR R0,[R5, #+352] \ 00000AD0 000050E3 CMP R0,#+0 \ 00000AD4 63FFFF1A BNE ??maincsm_onmessage_24 4775 { 4776 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000AD8 ........ LDR R0,??DataTable182 ;; RECONNECT_TIME \ 00000ADC 0920A0E1 MOV R2,R9 \ 00000AE0 005090E5 LDR R5,[R0, #+0] \ 00000AE4 D800A0E3 MOV R0,#+216 \ 00000AE8 900501E0 MUL R1,R0,R5 \ 00000AEC 0400A0E1 MOV R0,R4 \ 00000AF0 4D0000EF SWI +77 4777 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000AF4 20002DE9 PUSH {R5} \ 00000AF8 0830A0E1 MOV R3,R8 \ 00000AFC 642E87E2 ADD R2,R7,#+1600 \ 00000B00 FF10A0E3 MOV R1,#+255 \ 00000B04 0800A0E1 MOV R0,R8 \ 00000B08 1B0100EF SWI +283 \ 00000B0C 04D08DE2 ADD SP,SP,#+4 \ 00000B10 6FFFFFEA B ??maincsm_onmessage_40 \ ??maincsm_onmessage_5: \ 00000B14 ........ DC32 CheckDoubleRun \ 00000B18 ........ DC32 ProcessNextSmile \ 00000B1C ........ DC32 ProcessNextXStatImg \ 00000B20 ........ DC32 PASS \ 00000B24 ........ DC32 IDLEICON_X \ 00000B28 ........ DC32 IDLEICON_Y \ 00000B2C ........ DC32 XStatusesIconArray \ 00000B30 ........ DC32 IDLEICON_XX \ 00000B34 ........ DC32 IDLEICON_YX \ 00000B38 ........ DC32 msg_d_x \ 00000B3C ........ DC32 msg_d_y \ 00000B40 ........ DC32 spaco2 \ 00000B44 ........ DC32 Is_Unread_On \ 00000B48 ........ DC32 unread_Y \ 00000B4C ........ DC32 unread_X \ 00000B50 ........ DC32 send_login \ 00000B54 ........ DC32 LoadLocalCL \ 00000B58 ........ DC32 get_answer 4778 } 4779 4780 #endif 4781 break; 4782 } 4783 } 4784 } 4785 return(1); 4786 } 4787 4788 4789 //-------------------- ICON IN ICONBAR ------------// 4790 4791 4792 #pragma swi_number=0x27 4793 __swi __arm void AddIconToIconBar(int pic, short *num); 4794 4795 extern const unsigned int NumStatusToIconBar; 4796 extern const unsigned int NumXStatusToIconBar; 4797 //extern void SetIconBarHandler(); 4798 extern const int ShowStatusIcon; 4799 \ In segment CODE, align 4, keep-with-next 4800 int IsIdle(void) 4801 { \ IsIdle: \ 00000000 00402DE9 PUSH {LR} 4802 void *icsm=FindCSMbyID(CSM_root()->idle_id); \ 00000004 068100EF SWI +33030 \ 00000008 040090E5 LDR R0,[R0, #+4] \ 0000000C 080100EF SWI +264 4803 if (IsGuiOnTop(((int*)icsm)[DISPLACE_OF_IDLEGUI_ID/4 ])) \ 00000010 2C0090E5 LDR R0,[R0, #+44] \ 00000014 350100EF SWI +309 \ 00000018 000050E3 CMP R0,#+0 4804 return(1); \ 0000001C 0100A013 MOVNE R0,#+1 4805 else 4806 return(0); \ 00000020 0080BDE8 POP {PC} ;; return 4807 } 4808 \ In segment CODE, align 4, keep-with-next 4809 void addIconBar(short* num) 4810 { \ addIconBar: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4811 int icn; 4812 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ 00000004 ........ LDR R6,??DataTable205 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C F4009FE5 LDR R0,??addIconBar_0 ;; NumStatusToIconBar \ 00000010 005090E5 LDR R5,[R0, #+0] \ 00000014 ........ LDR R0,??DataTable184 ;; ShowStatusIcon \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 010050E3 CMP R0,#+1 \ 00000020 03005013 CMPNE R0,#+3 \ 00000024 2600001A BNE ??addIconBar_1 4813 { 4814 if(total_unread) \ 00000028 B00196E5 LDR R0,[R6, #+432] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 1C00000A BEQ ??addIconBar_2 4815 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); \ ??addIconBar_3: \ 00000034 0410A0E1 MOV R1,R4 \ 00000038 0D0085E2 ADD R0,R5,#+13 \ ??addIconBar_4: \ 0000003C 270000EF SWI +39 4816 else 4817 { 4818 switch(connect_state) 4819 { 4820 case 0: 4821 icn=IS_OFFLINE; break; 4822 case 3: 4823 icn=CurrentStatus; //IS_ONLINE; 4824 break; 4825 default: 4826 icn=IS_UNKNOWN; break; 4827 } 4828 AddIconToIconBar(NumStatusToIconBar + icn, num); 4829 } 4830 } 4831 else 4832 { 4833 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 4834 { 4835 if(!(IsIdle())) 4836 { 4837 if(total_unread) 4838 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 4839 else 4840 { 4841 switch(connect_state) 4842 { 4843 case 0: 4844 icn=IS_OFFLINE; break; 4845 case 3: 4846 icn=CurrentStatus; //IS_ONLINE; 4847 break; 4848 default: 4849 icn=IS_UNKNOWN; break; 4850 } 4851 AddIconToIconBar(NumStatusToIconBar + icn, num); 4852 } 4853 } 4854 } 4855 } 4856 4857 if(show_xstatus==2 || show_xstatus==3) \ ??addIconBar_5: \ 00000040 ........ LDR R0,??DataTable185 ;; show_xstatus \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 020050E3 CMP R0,#+2 \ 0000004C 03005013 CMPNE R0,#+3 \ 00000050 0800001A BNE ??addIconBar_6 4858 if(CurrentXStatus!=0) \ 00000054 ........ LDR R0,??DataTable186 ;; CurrentXStatus \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 0400000A BEQ ??addIconBar_6 4859 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ 00000064 A0209FE5 LDR R2,??addIconBar_0+0x4 ;; NumXStatusToIconBar \ 00000068 0410A0E1 MOV R1,R4 \ 0000006C 002092E5 LDR R2,[R2, #+0] \ 00000070 020080E0 ADD R0,R0,R2 \ 00000074 270000EF SWI +39 4860 #ifdef kluchnik 4861 // if(solnce==1) 4862 //{ 4863 CLIST *t; 4864 t=FindContactByUin(438532198); \ ??addIconBar_6: \ 00000078 90009FE5 LDR R0,??addIconBar_0+0x8 ;; 0x1a237866 \ 0000007C ........ _BLF FindContactByUin,??FindContactByUin??rA 4865 if(t->state!=0xFFFF) \ 00000080 B415D0E1 LDRH R1,[R0, #+84] \ 00000084 FF20A0E3 MOV R2,#+255 \ 00000088 FF2C82E3 ORR R2,R2,#0xFF00 \ 0000008C 020051E1 CMP R1,R2 \ 00000090 7080BD08 POPEQ {R4-R6,PC} 4866 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 00000094 ........ BL GetIconIndex \ 00000098 0410A0E1 MOV R1,R4 \ 0000009C 050080E0 ADD R0,R0,R5 \ 000000A0 270000EF SWI +39 4867 // } 4868 #endif 4869 } \ 000000A4 7080BDE8 POP {R4-R6,PC} ;; return \ ??addIconBar_2: \ 000000A8 8C0196E5 LDR R0,[R6, #+396] \ 000000AC 000050E3 CMP R0,#+0 \ 000000B0 1100000A BEQ ??addIconBar_7 \ 000000B4 030050E2 SUBS R0,R0,#+3 \ 000000B8 0E00001A BNE ??addIconBar_8 \ ??addIconBar_9: \ 000000BC 740196E5 LDR R0,[R6, #+372] \ 000000C0 0D0000EA B ??addIconBar_7 \ ??addIconBar_1: \ 000000C4 020050E3 CMP R0,#+2 \ 000000C8 DCFFFF1A BNE ??addIconBar_5 \ 000000CC ........ BL IsIdle \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 D9FFFF1A BNE ??addIconBar_5 \ 000000D8 B00196E5 LDR R0,[R6, #+432] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 D3FFFF1A BNE ??addIconBar_3 \ 000000E4 8C0196E5 LDR R0,[R6, #+396] \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC 0200000A BEQ ??addIconBar_7 \ 000000F0 030050E2 SUBS R0,R0,#+3 \ 000000F4 F0FFFF0A BEQ ??addIconBar_9 \ ??addIconBar_8: \ 000000F8 0E00A0E3 MOV R0,#+14 \ ??addIconBar_7: \ 000000FC 0410A0E1 MOV R1,R4 \ 00000100 050080E0 ADD R0,R0,R5 \ 00000104 CCFFFFEA B ??addIconBar_4 \ ??addIconBar_0: \ 00000108 ........ DC32 NumStatusToIconBar \ 0000010C ........ DC32 NumXStatusToIconBar \ 00000110 6678231A DC32 0x1a237866 4870 4871 typedef struct 4872 { 4873 char check_name[8]; 4874 int addr; 4875 }ICONBAR_H; 4876 4877 \ In segment DATA_C, align 4, align-sorted 4878 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 4879 \ In segment DATA_Z, align 4, align-sorted 4880 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 4881 4882 struct 4883 { 4884 CSM_DESC maincsm; 4885 WSHDR maincsm_name; 4886 ICONBAR_H iconbar_handler; 4887 }MAINCSM = 4888 { 4889 { 4890 maincsm_onmessage, 4891 maincsm_oncreate, 4892 #ifdef NEWSGOLD 4893 0, 4894 0, 4895 0, 4896 0, 4897 #endif 4898 maincsm_onclose, 4899 sizeof(MAIN_CSM), 4900 1, 4901 &minus11 4902 }, 4903 { 4904 maincsm_name_body, 4905 NAMECSM_MAGIC1, 4906 NAMECSM_MAGIC2, 4907 0x0, 4908 139 4909 }, 4910 { 4911 "IconBar" 4912 } 4913 }; 4914 \ In segment CODE, align 4, keep-with-next 4915 void UpdateCSMname(void) 4916 { 4917 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable191 ;; 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 + 156 \ 00000014 240100EF SWI +292 4918 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 S_ICONS + 156 4919 \ In segment CODE, align 4, keep-with-next 4920 void SetIconBarHandler() 4921 { 4922 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; S_ICONS + 184 \ 00000004 ........ LDR R1,??DataTable196 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 4923 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 S_ICONS + 184 4924 \ In segment CODE, align 4, keep-with-next 4925 int main(char *filename) 4926 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 4927 MAIN_CSM main_csm; 4928 char *s; 4929 int len; 4930 extern const char *successed_config_filename; 4931 WSHDR *ws; 4932 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable205 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable190 ;; `?` \ 0000000C 2CD04DE2 SUB SP,SP,#+44 \ 00000010 0060A0E1 MOV R6,R0 \ 00000014 661E85E2 ADD R1,R5,#+1632 \ 00000018 FC00A0E3 MOV R0,#+252 \ 0000001C 4C0D80E3 ORR R0,R0,#0x1300 \ 00000020 040080E0 ADD R0,R0,R4 \ 00000024 160000EF SWI +22 4933 InitConfig(); \ 00000028 ........ _BLF InitConfig,??InitConfig??rA 4934 s=strrchr(filename,'\\'); 4935 len=(s-filename)+1; \ 0000002C 5C10A0E3 MOV R1,#+92 \ 00000030 0600A0E1 MOV R0,R6 \ 00000034 170100EF SWI +279 \ 00000038 060040E0 SUB R0,R0,R6 \ 0000003C 017080E2 ADD R7,R0,#+1 4936 strncpy(elf_path,filename,len); \ 00000040 0720A0E1 MOV R2,R7 \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 8F0F84E2 ADD R0,R4,#+572 \ 0000004C 160100EF SWI +278 4937 elf_path[len]=0; \ 00000050 040087E0 ADD R0,R7,R4 \ 00000054 0010A0E3 MOV R1,#+0 \ 00000058 3C12C0E5 STRB R1,[R0, #+572] 4938 if (!UIN) \ 0000005C ........ LDR R0,??DataTable191 ;; UIN \ 00000060 000090E5 LDR R0,[R0, #+0] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 1700001A BNE ??main_0 4939 { 4940 LockSched(); \ 0000006C 460100EF SWI +326 4941 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000070 6C00A0E3 MOV R0,#+108 \ 00000074 600E80E3 ORR R0,R0,#0x600 \ 00000078 051080E0 ADD R1,R0,R5 \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 480100EF SWI +328 4942 ws=AllocWS(150); \ 00000084 9600A0E3 MOV R0,#+150 \ 00000088 250100EF SWI +293 \ 0000008C 0040A0E1 MOV R4,R0 4943 str_2ws(ws,successed_config_filename,128); \ 00000090 ........ LDR R0,??DataTable192 ;; successed_config_filename \ 00000094 8020A0E3 MOV R2,#+128 \ 00000098 001090E5 LDR R1,[R0, #+0] \ 0000009C 0400A0E1 MOV R0,R4 \ 000000A0 6C0100EF SWI +364 4944 ExecuteFile(ws,0,0); \ 000000A4 0020A0E3 MOV R2,#+0 \ 000000A8 0010A0E3 MOV R1,#+0 \ 000000AC 0400A0E1 MOV R0,R4 \ 000000B0 940000EF SWI +148 4945 UnlockSched(); \ 000000B4 470100EF SWI +327 4946 SUBPROC((void *)ElfKiller); \ 000000B8 ........ LDR R0,??DataTable193 ;; ElfKiller \ 000000BC 710100EF SWI +369 4947 return 0; \ 000000C0 0000A0E3 MOV R0,#+0 \ 000000C4 2CD08DE2 ADD SP,SP,#+44 \ 000000C8 F080BDE8 POP {R4-R7,PC} 4948 } 4949 ReadDefSettings(); 4950 setup_ICONS(); 4951 LoadXStatusText(); 4952 UpdateCSMname(); 4953 LockSched(); 4954 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); 4955 UnlockSched(); 4956 #ifdef EVILFOX 4957 FontPathInit(fonto,(char *)fontpath, 0); 4958 away_timer(); 4959 #else 4960 FontPathInit(fonto,(char *)fontpath, 1); \ ??main_0: \ 000000CC ........ LDR R7,??DataTable194 ;; fontpath \ 000000D0 ........ BL ReadDefSettings \ 000000D4 ........ BL setup_ICONS \ 000000D8 ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000DC ........ BL UpdateCSMname \ 000000E0 460100EF SWI +326 \ 000000E4 0020A0E3 MOV R2,#+0 \ 000000E8 0D10A0E1 MOV R1,SP \ 000000EC 740084E2 ADD R0,R4,#+116 \ 000000F0 070100EF SWI +263 \ 000000F4 180184E5 STR R0,[R4, #+280] \ 000000F8 470100EF SWI +327 \ 000000FC ........ LDR R0,??DataTable195 ;; fonto \ 00000100 0120A0E3 MOV R2,#+1 \ 00000104 006090E5 LDR R6,[R0, #+0] \ 00000108 0710A0E1 MOV R1,R7 \ 0000010C 0600A0E1 MOV R0,R6 \ 00000110 ........ _BLF FontPathInit,??FontPathInit??rA 4961 away_timer(); \ 00000114 ........ BL away_timer 4962 #endif 4963 SetIconBarHandler(); \ 00000118 ........ LDR R0,??DataTable196 ;; addIconBar 4964 //#ifdef ELKA 4965 if(fonto==1) \ 0000011C 010056E3 CMP R6,#+1 \ 00000120 B80084E5 STR R0,[R4, #+184] \ 00000124 0E00001A BNE ??main_1 4966 { 4967 char *heght=malloc(64); \ 00000128 4000A0E3 MOV R0,#+64 \ 0000012C 140000EF SWI +20 \ 00000130 0060A0E1 MOV R6,R0 4968 sprintf(heght, "%s2240.png", fontpath); \ 00000134 0720A0E1 MOV R2,R7 \ 00000138 8400A0E3 MOV R0,#+132 \ 0000013C 500E80E3 ORR R0,R0,#0x500 \ 00000140 051080E0 ADD R1,R0,R5 \ 00000144 0600A0E1 MOV R0,R6 \ 00000148 160000EF SWI +22 4969 paused_height=GetImgHeight((int)heght); \ 0000014C 0600A0E1 MOV R0,R6 \ 00000150 210000EF SWI +33 \ 00000154 F00084E5 STR R0,[R4, #+240] 4970 mfree(heght); \ 00000158 0600A0E1 MOV R0,R6 \ 0000015C 150000EF SWI +21 \ 00000160 010000EA B ??main_2 4971 } 4972 else 4973 paused_height=fonto-100; \ ??main_1: \ 00000164 640046E2 SUB R0,R6,#+100 \ 00000168 F00084E5 STR R0,[R4, #+240] 4974 //#endif 4975 GBS_StartTimerProc(&mytmr3, 12000, Pinger2); \ ??main_2: \ 0000016C ........ LDR R2,??DataTable197 ;; Pinger2 \ 00000170 E010A0E3 MOV R1,#+224 \ 00000174 B81D81E3 ORR R1,R1,#0x2E00 \ 00000178 EC00A0E3 MOV R0,#+236 \ 0000017C 4C0D80E3 ORR R0,R0,#0x1300 \ 00000180 040080E0 ADD R0,R0,R4 \ 00000184 4D0000EF SWI +77 4976 x_zstatus(); \ 00000188 ........ BL x_zstatus 4977 #ifdef NEWSGOLD 4978 initTags(); \ 0000018C ........ _BLF initTags,??initTags??rA 4979 #endif 4980 init_time_zone(); \ 00000190 ........ BL init_time_zone 4981 AddKeybMsgHook((void *)my_keyhook); \ 00000194 ........ LDR R0,??DataTable198 ;; my_keyhook \ 00000198 2B0100EF SWI +299 4982 return 0; \ 0000019C 0000A0E3 MOV R0,#+0 \ 000001A0 2CD08DE2 ADD SP,SP,#+44 \ 000001A4 F080BDE8 POP {R4-R7,PC} ;; return 4983 } 4984 4985 //=========================================================== 4986 // Edit chat 4987 //=========================================================== \ In segment CODE, align 4, keep-with-next 4988 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 4989 \ In segment CODE, align 4, keep-with-next 4990 char *ExtractAnswer(WSHDR *ws) 4991 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4992 S_SMILES *t; 4993 int c; 4994 int len=0; 4995 int scur; 4996 char *msg=NULL; 4997 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 4998 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 4999 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 5000 { 5001 for (int i=0; i=0xE100) 5005 { 5006 t=FindSmileByUni(c); 5007 if (t) 5008 { 5009 if (t->lines) 5010 { 5011 len+=strlen(t->lines->text); 5012 } 5013 } 5014 else len++; 5015 } 5016 else len++; 5017 } 5018 5019 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 5020 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 5021 for (int wcur=0; wcur=0xE100) 5026 { 5027 t=FindSmileByUni(c); 5028 if (t) 5029 { 5030 int w; 5031 char *s; 5032 if (t->lines) 5033 { 5034 s=t->lines->text; 5035 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 5062 { 5063 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 5064 } 5065 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable200 ;; S_ICONS + 436 \ 00000020 020000EA B ??FindNextActiveContact_2 5066 while(t=(CLIST *)(t->next)) 5067 { 5068 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 801090E5 LDR R1,[R0, #+128] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 5069 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 5070 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 5071 } 5072 \ In segment CODE, align 4, keep-with-next 5073 CLIST *FindPrevActiveContact(CLIST *t) 5074 { 5075 CLIST *cl; 5076 CLIST *cl_active=NULL; 5077 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable200 ;; S_ICONS + 436 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 5078 5079 5080 while(cl=cl->next) 5081 { 5082 if (cl==t) 5083 { 5084 if (cl_active==NULL) break; 5085 else return (cl_active); 5086 } 5087 else 5088 { 5089 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 803092E5 LDR R3,[R2, #+128] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 5090 } \ ??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 5091 } 5092 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 5093 { 5094 if (t->isactive) cl_active=t; \ 00000044 802090E5 LDR R2,[R0, #+128] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 5095 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 5096 } 5097 return cl_active; 5098 } 5099 5100 \ In segment CODE, align 4, keep-with-next 5101 void ed_options_handler(USR_MENU_ITEM *item) 5102 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 5103 EDCHAT_STRUCT *ed_struct=item->user_pointer; 5104 CLIST *t; 5105 int i=item->cur_item; 5106 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable205 ;; 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 5107 { 5108 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ws,LG_MNUEDNEXTACT); 5112 break; 5113 case 1: 5114 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 5115 break; 5116 default: 5117 i-=2; 5118 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 841195E5 LDR R1,[R5, #+388] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 5119 break; 5120 } 5121 } 5122 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 5123 { 5124 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 5125 { 5126 case 0: 5127 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 5128 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 5129 { 5130 GeneralFunc_flag1(edchat_id,1); \ 00000094 C00195E5 LDR R0,[R5, #+448] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 5131 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 5132 } 5133 break; 5134 case 1: 5135 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 5136 if (t && t!=ed_struct->ed_contact) 5137 { 5138 GeneralFunc_flag1(edchat_id,1); 5139 CreateEditChat(t); 5140 } 5141 break; 5142 default: 5143 i-=2; 5144 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 5145 { 5146 EDITCONTROL ec; 5147 WSHDR *ed_ws; 5148 int c; 5149 char *p=templates_lines[i]; \ 000000CC 840195E5 LDR R0,[R5, #+388] 5150 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 5151 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 5152 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 5153 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 5154 { 5155 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 5156 while(c=*p++) 5157 { 5158 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 5159 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 5160 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 5161 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 5162 } 5163 else 5164 { 5165 while(c=*p++) 5166 { 5167 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 5168 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 5169 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 5170 } 5171 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 5172 } 5173 break; 5174 } 5175 } 5176 } \ ??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) 5185 { 5186 s = str; 5187 w = ws; 5188 l = len; 5189 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 5190 if(!l) return ws; 5191 ws++; 5192 (*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} 5193 } 5194 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 5195 5196 } 5197 \ In segment CODE, align 4, keep-with-next 5198 int IsUrl(WSHDR *ws, int pos, char *link) 5199 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 5200 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 5201 5202 int len = wstrlen(ws); 5203 unsigned short *str = ws->wsbody+1, *tmp, *begin; 5204 tmp = str; 5205 5206 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable203 ;; `?` \ 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 5207 5208 while(str && (begin-tmp <= pos)) 5209 { 5210 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 5211 if(str-tmp >= pos-2) 5212 { 5213 for(;begin < str; begin++, link++) 5214 *link = char16to8(*begin); 5215 link[str-begin] = 0; 5216 return 1; 5217 } 5218 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 5219 } 5220 5221 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 5222 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} 5223 while(str && (begin-tmp <= pos)) 5224 { 5225 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 5226 if(str-tmp >= pos-2) 5227 { 5228 for(;begin < str; begin++, link++) 5229 *link = char16to8(*begin); 5230 link[str-begin] = 0; 5231 return 1; 5232 } 5233 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 5234 } 5235 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 5236 } 5237 5238 #define UTF16_DIS_UNDERLINE (0xE002) 5239 #define UTF16_ENA_UNDERLINE (0xE001) 5240 \ In segment CODE, align 4, keep-with-next 5241 void ParseAnswer(WSHDR *ws, const char *s) 5242 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 5243 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 5244 S_SMILES *t; 5245 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 5246 STXT_SMILES *st; 5247 unsigned int wchar; 5248 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 5249 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 5250 int i; 5251 while(wchar=*s) 5252 { 5253 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 5254 { 5255 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 5256 while(*s && strchr(valid, *s)) 5257 { 5258 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 5259 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 5260 s++; 5261 } \ 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 5262 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 5263 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 5264 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable203 ;; `?` \ 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 5265 } 5266 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 5267 while(t) 5268 { 5269 st=t->lines; 5270 while(st) 5271 { 5272 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 5273 { 5274 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 5275 } 5276 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] 5277 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 5278 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 5279 } 5280 L1: 5281 if (t) 5282 { 5283 wchar=t->uni_smile; 5284 s+=strlen(st->text); 5285 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 5286 } 5287 else 5288 { 5289 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 5290 s++; 5291 ulb>>=8; 5292 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 5293 } \ ??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 5294 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 5295 } 5296 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 5297 while(i>1) 5298 { 5299 if (ws->wsbody[i--]!=13) break; 5300 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 5301 } 5302 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 5303 \ In segment CODE, align 4, keep-with-next 5304 void SaveAnswer(CLIST *cl, WSHDR *ws) 5305 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 5306 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 5307 mfree(cl->answer); \ 00000014 780094E5 LDR R0,[R4, #+120] \ 00000018 150000EF SWI +21 5308 cl->answer=p; \ 0000001C 785084E5 STR R5,[R4, #+120] 5309 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 5310 5311 //links applicator 5312 5313 \ In segment CODE, align 4, keep-with-next 5314 int GetTempName(void) 5315 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 5316 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 5317 unsigned long iday; 5318 TTime tt; 5319 TDate dd; 5320 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 5321 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 5322 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 5323 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] 5324 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 5325 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 5326 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 5327 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 5328 } \ 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 5329 5330 \ In segment CODE, align 4, keep-with-next 5331 void recon() 5332 { 5333 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable204 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 5334 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable205 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 5400A0E3 MOV R0,#+84 \ 00000014 600D80E3 ORR R0,R0,#0x1800 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 5335 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 D80184E5 STR R0,[R4, #+472] 5336 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable206 ;; create_connect \ 0000002C 710100EF SWI +369 5337 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 5338 \ In segment CODE, align 4, keep-with-next 5339 int edchat_onkey(GUI *data, GUI_MSG *msg) 5340 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5341 //-1 - do redraw 5342 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R5,??DataTable214 ;; S_ICONS \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 3400A0E3 MOV R0,#+52 \ 00000018 600D80E3 ORR R0,R0,#0x1800 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 8C0100EF SWI +396 5343 CLIST *t; 5344 TPKT *p; 5345 EDITCONTROL ec; 5346 int len, f;//2026rev 5347 unsigned err;//2026rev 5348 char *s; 5349 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 088090E5 LDR R8,[R0, #+8] 5350 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 5351 char fn[256]; 5352 5353 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 5354 { 5355 void ec_menu(EDCHAT_STRUCT *); 5356 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 5357 return(-1); \ ??edchat_onkey_1: \ 00000054 310100EA B ??edchat_onkey_2 5358 } 5359 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 2E0100EA B ??edchat_onkey_4 \ ??edchat_onkey_3: \ 00000068 040097E5 LDR R0,[R7, #+4] \ 0000006C 9510A0E3 MOV R1,#+149 \ 00000070 040090E5 LDR R0,[R0, #+4] \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 6A00001A BNE ??edchat_onkey_5 5360 #ifdef EVILFOX 5361 if (msg->gbsmsg->msg==LONG_PRESS) 5362 { 5363 if (l==VOL_DOWN_BUTTON) 5364 { 5365 WSHDR *ws; 5366 ExtractEditControl(data,ed_struct->ed_answer,&ec); 5367 if(wstrlen(ec.pWS)>0) 5368 { 5369 ws=AllocWS(1); 5370 CutWSTR(ws,0); 5371 5372 EDIT_SetFocus(data,ed_struct->ed_answer); 5373 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5374 5375 FreeWS(ws); 5376 RefreshGUI(); 5377 } 5378 } 5379 if (l==VOL_UP_BUTTON) 5380 { 5381 // WSHDR *ws=AllocWS(strlen(ed_struct->ed_contact->last_msg_buffer)+1); 5382 // ascii2ws(ws,ed_struct->ed_contact->last_msg_buffer); 5383 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 5384 ascii2ws(ws,last_msg_buffer); 5385 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 5386 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5387 FreeWS(ws); 5388 RefreshGUI(); 5389 } 5390 } 5391 #else 5392 5393 void AddSmile(GUI *data); 5394 extern const int LongRightAction; 5395 extern const int LongLeftAction; 5396 if (msg->gbsmsg->msg==LONG_PRESS) 5397 { 5398 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 2200001A BNE ??edchat_onkey_6 5399 { 5400 if(LongRightAction==2) \ 00000088 F0049FE5 LDR R0,??edchat_onkey_7 ;; LongRightAction \ 0000008C 000090E5 LDR R0,[R0, #+0] \ 00000090 020050E3 CMP R0,#+2 \ 00000094 0200001A BNE ??edchat_onkey_8 5401 CreateSmileSelectGUI(ed_struct); \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 000000A0 610000EA B ??edchat_onkey_5 5402 else 5403 if(LongRightAction==1) \ ??edchat_onkey_8: \ 000000A4 010050E3 CMP R0,#+1 \ 000000A8 5F00001A BNE ??edchat_onkey_5 5404 { 5405 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 5A00001A BNE ??edchat_onkey_5 5406 { 5407 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C0 04208DE2 ADD R2,SP,#+4 \ 000000C4 0400A0E1 MOV R0,R4 \ 000000C8 690100EF SWI +361 5408 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 4F00001A BNE ??edchat_onkey_5 5409 { 5410 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 5411 if (t && t!=ed_struct->ed_contact) \ 000000FC 0A005911 CMPNE R9,R10 \ 00000100 4900000A BEQ ??edchat_onkey_5 5412 { 5413 CreateEditChat(t); \ ??edchat_onkey_9: \ 00000104 0900A0E1 MOV R0,R9 \ 00000108 ........ BL CreateEditChat 5414 return(1); \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 030100EA B ??edchat_onkey_4 5415 } 5416 } 5417 } 5418 } 5419 } 5420 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_6: \ 00000114 3D0058E3 CMP R8,#+61 \ 00000118 1A00001A BNE ??edchat_onkey_10 \ 0000011C 60049FE5 LDR R0,??edchat_onkey_7+0x4 ;; LongLeftAction \ 00000120 000090E5 LDR R0,[R0, #+0] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 3F00000A BEQ ??edchat_onkey_5 5421 { 5422 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 3A00001A BNE ??edchat_onkey_5 5423 { 5424 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000140 04208DE2 ADD R2,SP,#+4 \ 00000144 0400A0E1 MOV R0,R4 \ 00000148 690100EF SWI +361 5425 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 2F00001A BNE ??edchat_onkey_5 5426 { 5427 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 5428 if (t && t!=ed_struct->ed_contact) \ 0000017C 0A005911 CMPNE R9,R10 \ 00000180 2900000A BEQ ??edchat_onkey_5 \ 00000184 DEFFFFEA B ??edchat_onkey_9 5429 { 5430 CreateEditChat(t); 5431 return(1); 5432 } 5433 } 5434 } 5435 } 5436 #ifdef ELKA 5437 if (l==VOL_DOWN_BUTTON) \ ??edchat_onkey_10: \ 00000188 0E0058E3 CMP R8,#+14 \ 0000018C 0F00001A BNE ??edchat_onkey_11 5438 { 5439 WSHDR *ws; 5440 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000190 081096E5 LDR R1,[R6, #+8] \ 00000194 04208DE2 ADD R2,SP,#+4 \ 00000198 0400A0E1 MOV R0,R4 \ 0000019C 690100EF SWI +361 5441 if(wstrlen(ec.pWS)>0) \ 000001A0 2C009DE5 LDR R0,[SP, #+44] \ 000001A4 230100EF SWI +291 \ 000001A8 010050E3 CMP R0,#+1 \ 000001AC 1E0000BA BLT ??edchat_onkey_5 5442 { 5443 ws=AllocWS(1); \ 000001B0 0100A0E3 MOV R0,#+1 \ 000001B4 250100EF SWI +293 \ 000001B8 0090A0E1 MOV R9,R0 5444 CutWSTR(ws,0); \ 000001BC 0010A0E3 MOV R1,#+0 \ 000001C0 260100EF SWI +294 5445 5446 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000001C4 081096E5 LDR R1,[R6, #+8] \ 000001C8 0400A0E1 MOV R0,R4 \ 000001CC 0F0000EA B ??edchat_onkey_12 5447 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5448 5449 FreeWS(ws); 5450 RefreshGUI(); 5451 } 5452 } 5453 if (l==VOL_UP_BUTTON) \ ??edchat_onkey_11: \ 000001D0 0D0058E3 CMP R8,#+13 \ 000001D4 1400001A BNE ??edchat_onkey_5 5454 { 5455 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); \ 000001D8 1C00A0E3 MOV R0,#+28 \ 000001DC 400E80E3 ORR R0,R0,#0x400 \ 000001E0 050080E0 ADD R0,R0,R5 \ 000001E4 1B0000EF SWI +27 \ 000001E8 010080E2 ADD R0,R0,#+1 \ 000001EC 250100EF SWI +293 \ 000001F0 0090A0E1 MOV R9,R0 5456 ascii2ws(ws,last_msg_buffer); \ 000001F4 1C00A0E3 MOV R0,#+28 \ 000001F8 400E80E3 ORR R0,R0,#0x400 \ 000001FC 051080E0 ADD R1,R0,R5 \ 00000200 0900A0E1 MOV R0,R9 \ 00000204 ........ _BLF ascii2ws,??ascii2ws??rA 5457 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000208 081096E5 LDR R1,[R6, #+8] \ 0000020C 040096E5 LDR R0,[R6, #+4] \ ??edchat_onkey_12: \ 00000210 9B0100EF SWI +411 5458 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000214 040096E5 LDR R0,[R6, #+4] \ 00000218 0910A0E1 MOV R1,R9 \ 0000021C 810100EF SWI +385 5459 FreeWS(ws); \ 00000220 0900A0E1 MOV R0,R9 \ 00000224 290100EF SWI +297 5460 RefreshGUI(); \ 00000228 960100EF SWI +406 5461 } 5462 #endif 5463 } 5464 #endif 5465 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_5: \ 0000022C 040097E5 LDR R0,[R7, #+4] \ 00000230 9310A0E3 MOV R1,#+147 \ 00000234 040090E5 LDR R0,[R0, #+4] \ 00000238 401F81E3 ORR R1,R1,#0x100 \ 0000023C 010050E1 CMP R0,R1 \ 00000240 0A00001A BNE ??edchat_onkey_13 5466 { 5467 if ((l>='0')&&(l<='9')) \ 00000244 300058E3 CMP R8,#+48 \ 00000248 0B0000BA BLT ??edchat_onkey_14 \ 0000024C 3A0058E3 CMP R8,#+58 \ 00000250 060000AA BGE ??edchat_onkey_13 5468 { 5469 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000254 0400A0E1 MOV R0,R4 \ 00000258 820100EF SWI +386 \ 0000025C 081096E5 LDR R1,[R6, #+8] \ 00000260 010050E1 CMP R0,R1 \ 00000264 0100000A BEQ ??edchat_onkey_13 5470 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000268 0400A0E1 MOV R0,R4 \ 0000026C 9B0100EF SWI +411 5471 } 5472 if (l==GREEN_BUTTON) 5473 { 5474 if (connect_state==3) 5475 { 5476 if ((t=ed_struct->ed_contact)) 5477 { 5478 ExtractEditControl(data,ed_struct->ed_answer,&ec); 5479 SaveAnswer(t,ec.pWS); 5480 if ((s=t->answer)) 5481 { 5482 if ((len=strlen(s))) 5483 { 5484 msg_away_timer=0; 5485 away_m=0; 5486 if(SHOW_ACTIVE) 5487 t->isactive=ACTIVE_TIME; 5488 p=malloc(sizeof(PKT)+len+1); 5489 p->pkt.uin=t->uin; 5490 p->pkt.type=T_SENDMSG; 5491 p->pkt.data_len=len; 5492 strcpy(p->data,s); 5493 /* 5494 #ifdef EVILFOX 5495 strcpy(t->last_msg_buffer, s); 5496 #else 5497 */ 5498 #ifdef ELKA 5499 strcpy(last_msg_buffer, s); 5500 #endif 5501 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF); //Номер сообщения 5502 SUBPROC((void *)SendAnswer,0,p); 5503 main2_count++; 5504 mfree(t->answer); 5505 t->answer=NULL; 5506 // request_remake_edchat=1; 5507 EDIT_SetFocus(data,ed_struct->ed_answer); 5508 CutWSTR(ews,0); 5509 EDIT_SetTextToFocused(data,ews); 5510 AddMsgToChat(data); 5511 RecountMenu(t,1); 5512 return(-1); 5513 } 5514 } 5515 } 5516 } 5517 } 5518 //================2026rev-begin 5519 if (l==ENTER_BUTTON) 5520 { 5521 5522 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 5523 { 5524 int pos, len; 5525 char *link; 5526 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 5527 wstrcpy(ews,ec.pWS); 5528 pos = EDIT_GetCursorPos(data); 5529 len = wstrlen(ews); 5530 link = malloc(len+1); 5531 5532 if(IsUrl(ews, pos, link)) 5533 { 5534 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 5535 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 5536 { 5537 fwrite(f,link,strlen(link),&err); 5538 fclose(f,&err); 5539 str_2ws(ews,fn,256); 5540 extern const int OpenBrowser; 5541 if(OpenBrowser) 5542 ExecuteFile(ews,0,0); 5543 else 5544 #ifdef NEWSGOLD 5545 ExecuteFile(ews,0,"4:\\ZBin\\BalletMini\\BalletMini.elf"); 5546 #else 5547 ExecuteFile(ews,0,"0:\\ZBin\\BalletMini\\BalletMini.elf"); 5548 #endif 5549 5550 unlink(fn, &err); 5551 } 5552 5553 // LockSched(); 5554 // ShowMSG(1,(int)link); 5555 // UnlockSched(); 5556 mfree(link); 5557 return (-1); 5558 } 5559 else 5560 { 5561 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 5562 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 5563 mfree(link); 5564 return (-1); 5565 } 5566 5567 } 5568 5569 } 5570 //================2026rev-end 5571 if (l==VOL_UP_BUTTON) 5572 { 5573 int pos; 5574 5575 if ((pos=EDIT_GetFocus(data)-2)>=2) 5576 { 5577 EDIT_SetFocus(data, pos); 5578 EDIT_SetCursorPos(data, 1); 5579 } 5580 return (-1); 5581 } 5582 if (l==VOL_DOWN_BUTTON) 5583 { 5584 int pos; 5585 5586 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 5587 { 5588 EDIT_SetFocus(data, pos); 5589 EDIT_SetCursorPos(data, 1); 5590 } 5591 return (-1); 5592 } 5593 } 5594 return(0); //Do standart keys \ ??edchat_onkey_13: \ 00000270 0000A0E3 MOV R0,#+0 \ 00000274 4CDF8DE2 ADD SP,SP,#+304 \ 00000278 F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_14: \ 0000027C 0B0058E3 CMP R8,#+11 \ 00000280 5200001A BNE ??edchat_onkey_15 \ 00000284 8C0195E5 LDR R0,[R5, #+396] \ 00000288 030050E3 CMP R0,#+3 \ 0000028C F7FFFF1A BNE ??edchat_onkey_13 \ 00000290 009096E5 LDR R9,[R6, #+0] \ 00000294 000059E3 CMP R9,#+0 \ 00000298 F4FFFF0A BEQ ??edchat_onkey_13 \ 0000029C 081096E5 LDR R1,[R6, #+8] \ 000002A0 04208DE2 ADD R2,SP,#+4 \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 690100EF SWI +361 \ 000002AC 2C109DE5 LDR R1,[SP, #+44] \ 000002B0 0900A0E1 MOV R0,R9 \ 000002B4 ........ BL SaveAnswer \ 000002B8 78A099E5 LDR R10,[R9, #+120] \ 000002BC 00005AE3 CMP R10,#+0 \ 000002C0 EAFFFF0A BEQ ??edchat_onkey_13 \ 000002C4 0A00A0E1 MOV R0,R10 \ 000002C8 1B0000EF SWI +27 \ 000002CC 00B0B0E1 MOVS R11,R0 \ 000002D0 E6FFFF0A BEQ ??edchat_onkey_13 \ 000002D4 ........ LDR R0,??DataTable208 ;; SHOW_ACTIVE \ 000002D8 0070A0E3 MOV R7,#+0 \ 000002DC 000090E5 LDR R0,[R0, #+0] \ 000002E0 307185E5 STR R7,[R5, #+304] \ 000002E4 387185E5 STR R7,[R5, #+312] \ 000002E8 000050E3 CMP R0,#+0 \ 000002EC 5A0FA013 MOVNE R0,#+360 \ 000002F0 80008915 STRNE R0,[R9, #+128] \ 000002F4 09008BE2 ADD R0,R11,#+9 \ 000002F8 140000EF SWI +20 \ 000002FC 0080A0E1 MOV R8,R0 \ 00000300 0C0099E5 LDR R0,[R9, #+12] \ 00000304 0A10A0E1 MOV R1,R10 \ 00000308 000088E5 STR R0,[R8, #+0] \ 0000030C 0200A0E3 MOV R0,#+2 \ 00000310 B400C8E1 STRH R0,[R8, #+4] \ 00000314 B6B0C8E1 STRH R11,[R8, #+6] \ 00000318 080088E2 ADD R0,R8,#+8 \ 0000031C 1A0000EF SWI +26 \ 00000320 0A10A0E1 MOV R1,R10 \ 00000324 1C00A0E3 MOV R0,#+28 \ 00000328 400E80E3 ORR R0,R0,#0x400 \ 0000032C 050080E0 ADD R0,R0,R5 \ 00000330 1A0000EF SWI +26 \ 00000334 200195E5 LDR R0,[R5, #+288] \ 00000338 ........ LDR R3,??DataTable239 ;; `?` + 23 \ 0000033C 010080E2 ADD R0,R0,#+1 \ 00000340 200185E5 STR R0,[R5, #+288] \ 00000344 8008A0E1 LSL R0,R0,#+17 \ 00000348 A008A0E1 LSR R0,R0,#+17 \ 0000034C 01002DE9 PUSH {R0} \ 00000350 082088E2 ADD R2,R8,#+8 \ 00000354 0110A0E3 MOV R1,#+1 \ 00000358 0900A0E1 MOV R0,R9 \ 0000035C ........ BL AddStringToLog \ 00000360 ........ LDR R0,??DataTable240 ;; SendAnswer \ 00000364 0820A0E1 MOV R2,R8 \ 00000368 0010A0E3 MOV R1,#+0 \ 0000036C 710100EF SWI +369 \ 00000370 ........ LDR R0,??DataTable211 ;; main2_count \ 00000374 001090E5 LDR R1,[R0, #+0] \ 00000378 011081E2 ADD R1,R1,#+1 \ 0000037C 001080E5 STR R1,[R0, #+0] \ 00000380 780099E5 LDR R0,[R9, #+120] \ 00000384 150000EF SWI +21 \ 00000388 787089E5 STR R7,[R9, #+120] \ 0000038C 081096E5 LDR R1,[R6, #+8] \ 00000390 0400A0E1 MOV R0,R4 \ 00000394 9B0100EF SWI +411 \ 00000398 2C0195E5 LDR R0,[R5, #+300] \ 0000039C 0710A0E1 MOV R1,R7 \ 000003A0 260100EF SWI +294 \ 000003A4 2C1195E5 LDR R1,[R5, #+300] \ 000003A8 0400A0E1 MOV R0,R4 \ 000003AC 810100EF SWI +385 \ 000003B0 0400A0E1 MOV R0,R4 \ 000003B4 ........ BL AddMsgToChat \ 000003B8 0110A0E3 MOV R1,#+1 \ 000003BC 0900A0E1 MOV R0,R9 \ 000003C0 ........ BL RecountMenu \ 000003C4 0700E0E1 MVN R0,R7 \ 000003C8 04D08DE2 ADD SP,SP,#+4 \ 000003CC 540000EA B ??edchat_onkey_4 \ ??edchat_onkey_15: \ 000003D0 1A0058E3 CMP R8,#+26 \ 000003D4 5400001A BNE ??edchat_onkey_16 \ 000003D8 0400A0E1 MOV R0,R4 \ 000003DC D80100EF SWI +472 \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 A1FFFF1A BNE ??edchat_onkey_13 \ 000003E8 040096E5 LDR R0,[R6, #+4] \ 000003EC 820100EF SWI +386 \ 000003F0 04208DE2 ADD R2,SP,#+4 \ 000003F4 0010A0E1 MOV R1,R0 \ 000003F8 040096E5 LDR R0,[R6, #+4] \ 000003FC 690100EF SWI +361 \ 00000400 2C0195E5 LDR R0,[R5, #+300] \ 00000404 2C109DE5 LDR R1,[SP, #+44] \ 00000408 1F0100EF SWI +287 \ 0000040C 0400A0E1 MOV R0,R4 \ 00000410 D30100EF SWI +467 \ 00000414 0080A0E1 MOV R8,R0 \ 00000418 2C0195E5 LDR R0,[R5, #+300] \ 0000041C 230100EF SWI +291 \ 00000420 010080E2 ADD R0,R0,#+1 \ 00000424 140000EF SWI +20 \ 00000428 0070A0E1 MOV R7,R0 \ 0000042C 2C0195E5 LDR R0,[R5, #+300] \ 00000430 0720A0E1 MOV R2,R7 \ 00000434 0810A0E1 MOV R1,R8 \ 00000438 ........ BL IsUrl \ 0000043C 000050E3 CMP R0,#+0 \ 00000440 2B00000A BEQ ??edchat_onkey_17 \ 00000444 3C019FE5 LDR R0,??edchat_onkey_7+0x8 ;; GetTempName \ 00000448 ........ LDR R3,??DataTable212 ;; TEMPLATES_PATH \ 0000044C 38219FE5 LDR R2,??edchat_onkey_7+0xC ;; `?` + 1664 \ 00000450 01002DE9 PUSH {R0} \ 00000454 FF10A0E3 MOV R1,#+255 \ 00000458 34008DE2 ADD R0,SP,#+52 \ 0000045C 1B0100EF SWI +283 \ 00000460 04308DE2 ADD R3,SP,#+4 \ 00000464 402FA0E3 MOV R2,#+256 \ 00000468 0110A0E3 MOV R1,#+1 \ 0000046C 831C81E3 ORR R1,R1,#0x8300 \ 00000470 34008DE2 ADD R0,SP,#+52 \ 00000474 0A0000EF SWI +10 \ 00000478 0040A0E1 MOV R4,R0 \ 0000047C 010074E3 CMN R4,#+1 \ 00000480 04D08DE2 ADD SP,SP,#+4 \ 00000484 2300000A BEQ ??edchat_onkey_18 \ 00000488 0700A0E1 MOV R0,R7 \ 0000048C 1B0000EF SWI +27 \ 00000490 0020A0E1 MOV R2,R0 \ 00000494 0D30A0E1 MOV R3,SP \ 00000498 0710A0E1 MOV R1,R7 \ 0000049C 0400A0E1 MOV R0,R4 \ 000004A0 0C0000EF SWI +12 \ 000004A4 0D10A0E1 MOV R1,SP \ 000004A8 0400A0E1 MOV R0,R4 \ 000004AC 0D0000EF SWI +13 \ 000004B0 2C0195E5 LDR R0,[R5, #+300] \ 000004B4 402FA0E3 MOV R2,#+256 \ 000004B8 30108DE2 ADD R1,SP,#+48 \ 000004BC 6C0100EF SWI +364 \ 000004C0 C8009FE5 LDR R0,??edchat_onkey_7+0x10 ;; OpenBrowser \ 000004C4 000090E5 LDR R0,[R0, #+0] \ 000004C8 000050E3 CMP R0,#+0 \ 000004CC C0209F05 LDREQ R2,??edchat_onkey_7+0x14 ;; `?` + 1680 \ 000004D0 2C0195E5 LDR R0,[R5, #+300] \ 000004D4 0020A013 MOVNE R2,#+0 \ 000004D8 0010A013 MOVNE R1,#+0 \ 000004DC 0010A003 MOVEQ R1,#+0 \ 000004E0 940000EF SWI +148 \ 000004E4 0D10A0E1 MOV R1,SP \ 000004E8 30008DE2 ADD R0,SP,#+48 \ 000004EC 6B0100EF SWI +363 \ ??edchat_onkey_19: \ 000004F0 080000EA B ??edchat_onkey_18 \ ??edchat_onkey_17: \ 000004F4 000096E5 LDR R0,[R6, #+0] \ 000004F8 0C0090E5 LDR R0,[R0, #+12] \ 000004FC ........ BL LoadTemplates \ 00000500 90109FE5 LDR R1,??edchat_onkey_7+0x18 ;; ed_options_handler \ 00000504 100086E5 STR R0,[R6, #+16] \ 00000508 023080E2 ADD R3,R0,#+2 \ 0000050C 0620A0E1 MOV R2,R6 \ 00000510 0400A0E1 MOV R0,R4 \ 00000514 E50100EF SWI +485 \ ??edchat_onkey_18: \ 00000518 0700A0E1 MOV R0,R7 \ 0000051C 150000EF SWI +21 \ ??edchat_onkey_2: \ 00000520 0000E0E3 MVN R0,#+0 \ ??edchat_onkey_4: \ 00000524 4CDF8DE2 ADD SP,SP,#+304 \ 00000528 F08FBDE8 POP {R4-R11,PC} \ ??edchat_onkey_16: \ 0000052C 0D0058E3 CMP R8,#+13 \ 00000530 0A00001A BNE ??edchat_onkey_20 \ 00000534 0400A0E1 MOV R0,R4 \ 00000538 820100EF SWI +386 \ 0000053C 021040E2 SUB R1,R0,#+2 \ 00000540 020051E3 CMP R1,#+2 \ ??edchat_onkey_21: \ 00000544 F5FFFFBA BLT ??edchat_onkey_2 \ 00000548 0400A0E1 MOV R0,R4 \ 0000054C 9B0100EF SWI +411 \ 00000550 0110A0E3 MOV R1,#+1 \ 00000554 0400A0E1 MOV R0,R4 \ 00000558 D40100EF SWI +468 \ 0000055C EFFFFFEA B ??edchat_onkey_2 \ ??edchat_onkey_20: \ 00000560 0E0058E3 CMP R8,#+14 \ 00000564 41FFFF1A BNE ??edchat_onkey_13 \ 00000568 0400A0E1 MOV R0,R4 \ 0000056C 820100EF SWI +386 \ 00000570 021080E2 ADD R1,R0,#+2 \ 00000574 080096E5 LDR R0,[R6, #+8] \ 00000578 010050E1 CMP R0,R1 \ 0000057C F0FFFFEA B ??edchat_onkey_21 \ ??edchat_onkey_7: \ 00000580 ........ DC32 LongRightAction \ 00000584 ........ DC32 LongLeftAction \ 00000588 ........ DC32 GetTempName \ 0000058C ........ DC32 `?` + 1664 \ 00000590 ........ DC32 OpenBrowser \ 00000594 ........ DC32 `?` + 1680 \ 00000598 ........ DC32 ed_options_handler 5595 //1: close 5596 } 5597 5598 static const HEADER_DESC edchat_hdr={0,0,NULL,NULL,NULL,0,LGP_NULL}; 5599 5600 void (*old_ed_redraw)(void *data); \ In segment CODE, align 4, keep-with-next 5601 void my_ed_redraw(void *data) 5602 { \ my_ed_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5603 void *edchat_gui; 5604 EDCHAT_STRUCT *ed_struct; 5605 if (old_ed_redraw) old_ed_redraw(data); \ 00000004 ........ LDR R4,??DataTable215 ;; S_ICONS \ 00000008 F81194E5 LDR R1,[R4, #+504] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0100000A BEQ ??my_ed_redraw_0 \ 00000014 31FF2FE1 BLX R1 5606 edchat_gui=FindGUIbyId(edchat_id,NULL); \ 00000018 0010A0E3 MOV R1,#+0 \ ??my_ed_redraw_0: \ 0000001C C00194E5 LDR R0,[R4, #+448] \ 00000020 090200EF SWI +521 5607 if (edchat_gui) \ 00000024 000050E3 CMP R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 5608 { 5609 ed_struct=EDIT_GetUserPointer(edchat_gui); \ 0000002C DF0100EF SWI +479 5610 if (ed_struct) \ 00000030 000050E3 CMP R0,#+0 \ 00000034 3080BD08 POPEQ {R4,R5,PC} 5611 { 5612 int icon, width; 5613 #ifndef NEWSGOLD 5614 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 5615 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 5616 DrawImg(ScreenW()-1-width,1,icon); 5617 #else 5618 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C ........ BL GetIconIndex \ 00000040 004194E7 LDR R4,[R4, +R0, LSL #+2] 5619 width=GetImgWidth(icon); \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 220000EF SWI +34 \ 0000004C 0050A0E1 MOV R5,R0 5620 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); \ 00000050 8A8100EF SWI +33162 \ 00000054 0420A0E1 MOV R2,R4 \ 00000058 050040E0 SUB R0,R0,R5 \ 0000005C 1810A0E3 MOV R1,#+24 \ 00000060 C01081E0 ADD R1,R1,R0, ASR #+1 \ 00000064 0200A0E3 MOV R0,#+2 \ 00000068 230000EF SWI +35 5621 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 5622 GetPaletteAdrByColorIndex(0), 5623 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 5624 #endif 5625 } 5626 } 5627 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return 5628 \ In segment CODE, align 4, keep-with-next 5629 void edchat_ghook(GUI *data, int cmd) 5630 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 5631 5632 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 5633 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 5634 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 5635 int j; 5636 EDITCONTROL ec; 5637 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 5638 PNGTOP_DESC *pltop=PNG_TOP(); 5639 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable214 ;; 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 5640 { 5641 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 3400A0E3 MOV R0,#+52 \ 00000034 600D80E3 ORR R0,R0,#0x1800 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 5642 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 5643 } 5644 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 5645 { 5646 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 5647 // edgui_data=data; 5648 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 5649 5650 static void *methods[16]; 5651 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 5652 if (m) 5653 { 5654 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6700000A BEQ ??edchat_ghook_3 5655 { 5656 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 7F6FA0E3 MOV R6,#+508 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 5657 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 F80184E5 STR R0,[R4, #+504] 5658 methods[0]=(void *)my_ed_redraw; \ 00000098 84019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 5659 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} 5660 } 5661 } 5662 } 5663 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 5664 { 5665 // if (edgui_data==data) edgui_data=NULL; 5666 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 5667 { 5668 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 5669 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 5670 } 5671 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 5672 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 5673 } 5674 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0D00001A BNE ??edchat_ghook_7 5675 { 5676 pltop->dyn_pltop=SmilesImgList; \ 000000FC 24019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 080088E5 STR R0,[R8, #+8] 5677 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 5678 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C B00194E5 LDR R0,[R4, #+432] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 B00184E5 STR R0,[R4, #+432] 5679 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] 5680 #ifdef ELKA 5681 if (!total_unread) \ 00000120 B00194E5 LDR R0,[R4, #+432] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 3B00001A BNE ??edchat_ghook_3 5682 { 5683 SLI_Off(); \ 0000012C ........ BL SLI_Off \ 00000130 DCFFFFEA B ??edchat_ghook_1 5684 } 5685 #endif 5686 /* if (request_close_edchat) 5687 { 5688 request_close_edchat=0; 5689 GeneralFunc_flag1(edchat_id,1); 5690 return; 5691 }*/ 5692 } 5693 if (cmd==7) \ ??edchat_ghook_7: \ 00000134 070059E3 CMP R9,#+7 \ 00000138 2800001A BNE ??edchat_ghook_8 5694 { 5695 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000013C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000140 0020A0E3 MOV R2,#+0 \ 00000144 0810A0E1 MOV R1,R8 \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 680100EF SWI +360 5696 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000150 081097E5 LDR R1,[R7, #+8] \ 00000154 0D20A0E1 MOV R2,SP \ 00000158 0500A0E1 MOV R0,R5 \ 0000015C 690100EF SWI +361 5697 if (ec.pWS->wsbody[0]==0) \ 00000160 28009DE5 LDR R0,[SP, #+40] \ 00000164 000090E5 LDR R0,[R0, #+0] \ 00000168 B000D0E1 LDRH R0,[R0, #+0] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0300001A BNE ??edchat_ghook_9 5698 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000174 0120A0E3 MOV R2,#+1 \ 00000178 081088E2 ADD R1,R8,#+8 \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 680100EF SWI +360 5699 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000184 0500A0E1 MOV R0,R5 \ 00000188 1C0200EF SWI +540 \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 2100001A BNE ??edchat_ghook_3 5700 { 5701 time_to_stop_t9=0; \ 00000194 E86184E5 STR R6,[R4, #+488] 5702 if (ed_struct->ed_contact->req_add) \ 00000198 000097E5 LDR R0,[R7, #+0] \ 0000019C 6C1090E5 LDR R1,[R0, #+108] \ 000001A0 000051E3 CMP R1,#+0 \ 000001A4 0500000A BEQ ??edchat_ghook_10 5703 { 5704 ed_struct->ed_contact->req_add=0; \ 000001A8 6C6080E5 STR R6,[R0, #+108] 5705 AddMsgToChat(data); \ 000001AC 0500A0E1 MOV R0,R5 \ 000001B0 ........ BL AddMsgToChat 5706 RecountMenu(ed_struct->ed_contact,1); \ 000001B4 000097E5 LDR R0,[R7, #+0] \ 000001B8 0110A0E3 MOV R1,#+1 \ 000001BC ........ BL RecountMenu 5707 } 5708 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001C0 000097E5 LDR R0,[R7, #+0] \ 000001C4 701090E5 LDR R1,[R0, #+112] \ 000001C8 000051E3 CMP R1,#+0 \ 000001CC 1200000A BEQ ??edchat_ghook_3 5709 { 5710 ed_struct->ed_contact->req_drawack=0; \ 000001D0 706080E5 STR R6,[R0, #+112] 5711 DrawAck(data); \ 000001D4 0500A0E1 MOV R0,R5 \ 000001D8 ........ BL DrawAck \ 000001DC B1FFFFEA B ??edchat_ghook_1 5712 } 5713 } 5714 } 5715 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E0 0C0059E3 CMP R9,#+12 \ 000001E4 0C00001A BNE ??edchat_ghook_3 5716 { 5717 j=EDIT_GetFocus(data); \ 000001E8 0500A0E1 MOV R0,R5 \ 000001EC 820100EF SWI +386 \ 000001F0 0040A0E1 MOV R4,R0 5718 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001F4 0500A0E1 MOV R0,R5 \ 000001F8 830100EF SWI +387 \ 000001FC 040050E1 CMP R0,R4 \ 00000200 050000AA BGE ??edchat_ghook_3 \ 00000204 080097E5 LDR R0,[R7, #+8] \ 00000208 000054E1 CMP R4,R0 \ 0000020C 0200000A BEQ ??edchat_ghook_3 5719 EDIT_SetCursorPos(data,1); \ 00000210 0110A0E3 MOV R1,#+1 \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 D40100EF SWI +468 5720 } 5721 } \ ??edchat_ghook_3: \ 0000021C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000220 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000224 ........ DC32 my_ed_redraw \ 00000228 ........ DC32 SmilesImgList \ 0000022C ........ DC32 ??sk_1 \ In segment DATA_C, align 4, align-sorted 5722 5723 5724 5725 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 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ 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 `?` 5726 { 5727 1, 5728 edchat_onkey, 5729 edchat_ghook, 5730 (void *)edchat_locret, 5731 0, 5732 &menu_skt, 5733 {0,NULL,NULL,NULL}, 5734 FONT_SMALL, 5735 100, 5736 101, 5737 0, 5738 // 0x00000001 - Выровнять по правому краю 5739 // 0x00000002 - Выровнять по центру 5740 // 0x00000004 - Инверсия знакомест 5741 // 0x00000008 - UnderLine 5742 // 0x00000020 - Не переносить слова 5743 // 0x00000200 - bold 5744 0, 5745 // 0x00000002 - ReadOnly 5746 // 0x00000004 - Не двигается курсор 5747 // 0x40000000 - Поменять местами софт-кнопки 5748 0x40000000 5749 }; 5750 \ In segment CODE, align 4, keep-with-next 5751 void CreateEditChat(CLIST *t) 5752 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5753 extern const int FIRST_LETTER; 5754 void *ma=malloc_adr(); 5755 void *eq; 5756 EDITCONTROL ec; 5757 EDITC_OPTIONS ec_options; 5758 int color, font, type; 5759 int zc; 5760 5761 LOGQ *lp; 5762 int edchat_toitem; 5763 // edcontact=t; 5764 5765 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 8C649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 5766 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 5767 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable215 ;; 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] 5768 5769 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 5770 5771 /* hist = malloc(256); 5772 if(!GetHistory(hist, 256, t->uin)) 5773 { 5774 ascii2ws(ews,hist); 5775 PrepareEditControl(&ec); 5776 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 5777 } 5778 mfree(hist); 5779 5780 AddEditControlToEditQend(eq,&ec,ma); */ 5781 lp=t->log; \ 0000003C 749094E5 LDR R9,[R4, #+116] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 9500000A BEQ ??CreateEditChat_1 5782 5783 while(lp) 5784 { 5785 font = ED_H_FONT_SIZE; 5786 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C ........ LDR R2,??DataTable216 ;; ED_X_FONT_SIZE \ 00000050 ........ LDR R0,??DataTable217 ;; 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,??DataTable218 ;; I_COLOR \ 00000064 1C208DE5 STR R2,[SP, #+28] \ 00000068 ........ LDR R2,??DataTable219 ;; X_COLOR \ 0000006C 030010E2 ANDS R0,R0,#0x3 \ 00000070 002092E5 LDR R2,[R2, #+0] \ 00000074 14208DE5 STR R2,[SP, #+20] \ 00000078 ........ LDR R2,??DataTable220 ;; O_ED_X_FONT_SIZE \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 18208DE5 STR R2,[SP, #+24] \ 00000084 ........ LDR R2,??DataTable221 ;; 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 5787 { 5788 if (zc==1) \ 00000098 010050E3 CMP R0,#+1 \ 0000009C 1E00001A BNE ??CreateEditChat_4 5789 color=ACK_COLOR; //Зеленый \ 000000A0 ........ LDR R0,??DataTable222 ;; ACK_COLOR \ 000000A4 1B0000EA B ??CreateEditChat_5 5790 else 5791 color=I_COLOR; 5792 } 5793 else 5794 { 5795 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 000000A8 080099E5 LDR R0,[R9, #+8] \ 000000AC 010070E3 CMN R0,#+1 \ 000000B0 1700001A BNE ??CreateEditChat_6 5796 { 5797 type = lp->type&0x0F; \ 000000B4 0C0099E5 LDR R0,[R9, #+12] \ 000000B8 0F1000E2 AND R1,R0,#0xF 5798 if(lp->type&0x10) \ 000000BC 100010E3 TST R0,#0x10 \ 000000C0 0B00000A BEQ ??CreateEditChat_7 5799 { 5800 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000C4 010051E3 CMP R1,#+1 \ 000000C8 ........ LDREQ R0,??DataTable223 ;; 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,??DataTable224 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000E4 00B090E5 LDR R11,[R0, #+0] \ 000000E8 ........ LDR R0,??DataTable225 ;; O_ED_H_FONT_SIZE \ 000000EC 00A090E5 LDR R10,[R0, #+0] \ 000000F0 090000EA B ??CreateEditChat_4 5801 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 5802 } 5803 else 5804 { 5805 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,??DataTable226 ;; TO_COLOR \ 00000110 000000EA B ??CreateEditChat_5 5806 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 5807 } 5808 } 5809 else 5810 color=UNACK_COLOR; //????? \ ??CreateEditChat_6: \ 00000114 ........ LDR R0,??DataTable227 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 00000118 00B090E5 LDR R11,[R0, #+0] 5811 } 5812 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 0000011C 20008DE2 ADD R0,SP,#+32 \ 00000120 640100EF SWI +356 5813 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 5814 { 5815 ascii2ws(ews,lp->hdr); \ 00000134 2C0197E5 LDR R0,[R7, #+300] \ 00000138 101089E2 ADD R1,R9,#+16 \ 0000013C ........ _BLF ascii2ws,??ascii2ws??rA 5816 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000140 2C3197E5 LDR R3,[R7, #+300] \ 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 5817 } 5818 else 5819 { 5820 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_9: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 2C3197E5 LDR R3,[R7, #+300] \ 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 5821 } 5822 PrepareEditCOptions(&ec_options); \ 00000178 0D00A0E1 MOV R0,SP \ 0000017C C80100EF SWI +456 5823 SetPenColorToEditCOptions(&ec_options,color); \ 00000180 0B10A0E1 MOV R1,R11 \ 00000184 0D00A0E1 MOV R0,SP \ 00000188 CC0100EF SWI +460 5824 SetFontToEditCOptions(&ec_options,font); \ 0000018C 0A10A0E1 MOV R1,R10 \ 00000190 0D00A0E1 MOV R0,SP \ 00000194 CA0100EF SWI +458 5825 CopyOptionsToEditControl(&ec,&ec_options); \ 00000198 0D10A0E1 MOV R1,SP \ 0000019C 20008DE2 ADD R0,SP,#+32 \ 000001A0 CE0100EF SWI +462 5826 AddEditControlToEditQend(eq,&ec,ma); \ 000001A4 0520A0E1 MOV R2,R5 \ 000001A8 20108DE2 ADD R1,SP,#+32 \ 000001AC 0800A0E1 MOV R0,R8 \ 000001B0 660100EF SWI +358 5827 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 5828 { 5829 ParseAnswer(ews,lp->text); \ 000001C4 2C0197E5 LDR R0,[R7, #+300] \ 000001C8 601089E2 ADD R1,R9,#+96 \ 000001CC ........ BL ParseAnswer \ 000001D0 050000EA B ??CreateEditChat_12 5830 } 5831 else 5832 { 5833 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 2C0197E5 LDR R0,[R7, #+300] \ 000001E0 14209D05 LDREQ R2,[SP, #+20] \ 000001E4 601089E2 ADD R1,R9,#+96 \ 000001E8 ........ BL ParseXStatusText 5834 } 5835 PrepareEditControl(&ec); \ ??CreateEditChat_12: \ 000001EC 20008DE2 ADD R0,SP,#+32 \ 000001F0 640100EF SWI +356 5836 ConstructEditControl(&ec, 5837 ECT_NORMAL_TEXT, 5838 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 5839 ews,ews->wsbody[0]); \ 000001F4 2C3197E5 LDR R3,[R7, #+300] \ 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 5840 PrepareEditCOptions(&ec_options); \ 00000220 04008DE2 ADD R0,SP,#+4 \ 00000224 C80100EF SWI +456 5841 //#ifdef M75 5842 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 5843 { 5844 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 0000023C 100010E3 TST R0,#0x10 \ 00000240 ........ LDRNE R0,??DataTable228 ;; O_ED_FONT_SIZE \ 00000244 ........ LDREQ R0,??DataTable230 ;; ED_FONT_SIZE \ 00000248 001090E5 LDR R1,[R0, #+0] \ 0000024C 080000EA B ??CreateEditChat_14 5845 } 5846 else 5847 { 5848 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 5849 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 5850 } 5851 //#else 5852 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 5853 //#endif 5854 CopyOptionsToEditControl(&ec,&ec_options); \ 0000027C 0D10A0E1 MOV R1,SP \ 00000280 20008DE2 ADD R0,SP,#+32 \ 00000284 CE0100EF SWI +462 5855 AddEditControlToEditQend(eq,&ec,ma); \ 00000288 0520A0E1 MOV R2,R5 \ 0000028C 20108DE2 ADD R1,SP,#+32 \ 00000290 0800A0E1 MOV R0,R8 \ 00000294 660100EF SWI +358 5856 lp=lp->next; \ 00000298 009099E5 LDR R9,[R9, #+0] 5857 } \ 0000029C 000059E3 CMP R9,#+0 \ 000002A0 69FFFF1A BNE ??CreateEditChat_2 5858 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 000002A4 640094E5 LDR R0,[R4, #+100] 5859 total_unread2=total_unread2-t->unread_msg; 5860 t->unread_msg=0; \ 000002A8 0090A0E3 MOV R9,#+0 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 B0019715 LDRNE R0,[R7, #+432] \ 000002B4 01004012 SUBNE R0,R0,#+1 \ 000002B8 B0018715 STRNE R0,[R7, #+432] \ 000002BC 140197E5 LDR R0,[R7, #+276] \ 000002C0 681094E5 LDR R1,[R4, #+104] \ 000002C4 010040E0 SUB R0,R0,R1 \ 000002C8 140187E5 STR R0,[R7, #+276] \ 000002CC 689084E5 STR R9,[R4, #+104] 5861 t->isunread=0; \ 000002D0 649084E5 STR R9,[R4, #+100] 5862 ChangeContactPos(t); \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 5863 wsprintf(ews, "-------"); \ 000002DC 2C0197E5 LDR R0,[R7, #+300] \ 000002E0 4C1086E2 ADD R1,R6,#+76 \ 000002E4 240100EF SWI +292 5864 PrepareEditControl(&ec); \ 000002E8 20008DE2 ADD R0,SP,#+32 \ 000002EC 640100EF SWI +356 5865 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002F0 2C3197E5 LDR R3,[R7, #+300] \ 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 5866 PrepareEditCOptions(&ec_options); \ 00000310 04008DE2 ADD R0,SP,#+4 \ 00000314 C80100EF SWI +456 5867 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000318 ........ LDR R0,??DataTable230 ;; ED_FONT_SIZE \ 0000031C 00A090E5 LDR R10,[R0, #+0] \ 00000320 04008DE2 ADD R0,SP,#+4 \ 00000324 0A10A0E1 MOV R1,R10 \ 00000328 CA0100EF SWI +458 5868 CopyOptionsToEditControl(&ec,&ec_options); \ 0000032C 04108DE2 ADD R1,SP,#+4 \ 00000330 24008DE2 ADD R0,SP,#+36 \ 00000334 CE0100EF SWI +462 5869 AddEditControlToEditQend(eq,&ec,ma); \ 00000338 0520A0E1 MOV R2,R5 \ 0000033C 24108DE2 ADD R1,SP,#+36 \ 00000340 0800A0E1 MOV R0,R8 \ 00000344 660100EF SWI +358 5870 5871 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 2C0197E5 LDR R0,[R7, #+300] \ 0000035C ........ BL ParseAnswer \ 00000360 020000EA B ??CreateEditChat_16 5872 else CutWSTR(ews,0); \ ??CreateEditChat_15: \ 00000364 2C0197E5 LDR R0,[R7, #+300] \ 00000368 0010A0E3 MOV R1,#+0 \ 0000036C 260100EF SWI +294 5873 PrepareEditControl(&ec); \ ??CreateEditChat_16: \ 00000370 20008DE2 ADD R0,SP,#+32 \ 00000374 640100EF SWI +356 5874 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); \ 00000378 1C019FE5 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 2C3197E5 LDR R3,[R7, #+300] \ 00000394 402DA013 MOVNE R2,#+4096 \ 00000398 0020A003 MOVEQ R2,#+0 \ 0000039C 24008DE2 ADD R0,SP,#+36 \ 000003A0 650100EF SWI +357 5875 5876 PrepareEditCOptions(&ec_options); \ 000003A4 04008DE2 ADD R0,SP,#+4 \ 000003A8 C80100EF SWI +456 5877 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000003AC 0A10A0E1 MOV R1,R10 \ 000003B0 04008DE2 ADD R0,SP,#+4 \ 000003B4 CA0100EF SWI +458 5878 CopyOptionsToEditControl(&ec,&ec_options); \ 000003B8 04108DE2 ADD R1,SP,#+4 \ 000003BC 24008DE2 ADD R0,SP,#+36 \ 000003C0 CE0100EF SWI +462 5879 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 5880 5881 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 5882 { 5883 FreeXText(t); \ 000003E8 0400A0E1 MOV R0,R4 \ 000003EC ........ _BLF FreeXText,??FreeXText??rA 5884 t->req_xtext=0; \ 000003F0 8C9084E5 STR R9,[R4, #+140] 5885 RequestXText(t->uin); \ 000003F4 0C0094E5 LDR R0,[R4, #+12] \ 000003F8 ........ BL RequestXText 5886 } 5887 5888 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_17: \ 000003FC 1400A0E3 MOV R0,#+20 \ 00000400 140000EF SWI +20 \ 00000404 0050A0E1 MOV R5,R0 5889 ed_struct->ed_contact=t; \ 00000408 004085E5 STR R4,[R5, #+0] 5890 ed_struct->ed_answer=edchat_toitem; \ 0000040C 08A085E5 STR R10,[R5, #+8] 5891 ed_struct->requested_decrement_total_unread=0; \ 00000410 0C9085E5 STR R9,[R5, #+12] 5892 t->req_add=0; \ 00000414 6C9084E5 STR R9,[R4, #+108] 5893 t->last_log=NULL; \ 00000418 7C9084E5 STR R9,[R4, #+124] 5894 5895 // int scr_w=ScreenW(); 5896 // int scr_h=ScreenH(); 5897 // int head_h=HeaderH(); 5898 5899 patch_header(&edchat_hdr); \ 0000041C B893C6E1 STRH R9,[R6, #+56] \ 00000420 1800A0E3 MOV R0,#+24 \ 00000424 BA03C6E1 STRH R0,[R6, #+58] \ 00000428 888100EF SWI +33160 \ 0000042C 010040E2 SUB R0,R0,#+1 \ 00000430 BC03C6E1 STRH R0,[R6, #+60] \ 00000434 8A8100EF SWI +33162 \ 00000438 170080E2 ADD R0,R0,#+23 \ 0000043C BE03C6E1 STRH R0,[R6, #+62] 5900 patch_input(&edchat_desc); \ 00000440 B891C6E1 STRH R9,[R6, #+24] \ 00000444 8A8100EF SWI +33162 \ 00000448 190080E2 ADD R0,R0,#+25 \ 0000044C BA01C6E1 STRH R0,[R6, #+26] \ 00000450 888100EF SWI +33160 \ 00000454 010040E2 SUB R0,R0,#+1 \ 00000458 BC01C6E1 STRH R0,[R6, #+28] \ 0000045C 898100EF SWI +33161 \ 00000460 0040A0E1 MOV R4,R0 \ 00000464 8B8100EF SWI +33163 \ 00000468 000044E0 SUB R0,R4,R0 \ 0000046C 010040E2 SUB R0,R0,#+1 \ 00000470 BE01C6E1 STRH R0,[R6, #+30] 5901 // edchat_desc.font=ED_FONT_SIZE; 5902 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000474 20002DE9 PUSH {R5} \ 00000478 0130A0E3 MOV R3,#+1 \ 0000047C 0820A0E1 MOV R2,R8 \ 00000480 381086E2 ADD R1,R6,#+56 \ 00000484 0600A0E1 MOV R0,R6 \ 00000488 670100EF SWI +359 \ 0000048C C00187E5 STR R0,[R7, #+448] 5903 } \ 00000490 50D08DE2 ADD SP,SP,#+80 \ 00000494 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000498 ........ DC32 edchat_desc \ 0000049C ........ DC32 FIRST_LETTER 5904 5905 //----------------------------------------------------------------------------- 5906 #define EC_MNU_MAX 8 5907 \ In segment CODE, align 4, keep-with-next 5908 void Quote(GUI *data) 5909 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 5910 int q_n; 5911 EDITCONTROL ec, ec_hdr; 5912 EDITCONTROL ec_ed; 5913 WSHDR *ed_ws; 5914 WSHDR *ws; 5915 5916 EDCHAT_STRUCT *ed_struct; 5917 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 5918 5919 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 5920 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 5921 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 5922 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 5923 5924 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 5925 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 5926 { 5927 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 5928 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 5929 } 5930 else 5931 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 5932 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 5933 { 5934 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 5935 } 5936 else 5937 { 5938 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 5939 } 5940 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 5941 do 5942 { 5943 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 5944 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 5945 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 5946 } 5947 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 5948 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 5949 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 5950 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 5951 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 5952 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 5953 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 5954 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 5955 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 5956 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 5957 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 5958 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 5959 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 5960 5961 \ In segment CODE, align 4, keep-with-next 5962 void GetShortInfo(GUI *data) 5963 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 5964 EDCHAT_STRUCT *ed_struct; 5965 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 5966 5967 TPKT *p; 5968 CLIST *t; 5969 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 2000000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable238 ;; S_ICONS + 396 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1C00001A BNE ??GetShortInfo_0 5970 { 5971 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 5972 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 5973 p->pkt.type=T_REQINFOSHORT; 5974 p->pkt.data_len=0; 5975 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,??DataTable232 ;; `?` \ 00000054 02002DE9 PUSH {R1} \ 00000058 173080E2 ADD R3,R0,#+23 \ 0000005C B410A0E3 MOV R1,#+180 \ 00000060 601E81E3 ORR R1,R1,#0x600 \ 00000064 002081E0 ADD R2,R1,R0 \ 00000068 0110A0E3 MOV R1,#+1 \ 0000006C 0500A0E1 MOV R0,R5 \ 00000070 ........ BL AddStringToLog 5976 AddMsgToChat(ed_struct->ed_chatgui); \ 00000074 040094E5 LDR R0,[R4, #+4] \ 00000078 ........ BL AddMsgToChat 5977 RecountMenu(t,1); \ 0000007C 0110A0E3 MOV R1,#+1 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 ........ BL RecountMenu 5978 SUBPROC((void *)SendAnswer,0,p); \ 00000088 ........ LDR R0,??DataTable240 ;; SendAnswer \ 0000008C 0620A0E1 MOV R2,R6 \ 00000090 0010A0E3 MOV R1,#+0 \ 00000094 710100EF SWI +369 \ 00000098 04D08DE2 ADD SP,SP,#+4 5979 } 5980 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 0000009C 0100A0E3 MOV R0,#+1 \ 000000A0 3B0100EF SWI +315 5981 } \ 000000A4 7080BDE8 POP {R4-R6,PC} ;; return 5982 5983 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 5984 void AddCurContact(GUI *data) 5985 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 5986 EDCHAT_STRUCT *ed_struct; 5987 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 5988 5989 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,??DataTable238 ;; S_ICONS + 396 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 5990 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 5991 } \ 00000030 0080BDE8 POP {PC} ;; return 5992 \ In segment CODE, align 4, keep-with-next 5993 void SendAuthReq(GUI *data) 5994 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 5995 EDCHAT_STRUCT *ed_struct; 5996 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 5997 5998 TPKT *p; 5999 CLIST *t; 6000 int l; 6001 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,??DataTable238 ;; S_ICONS + 396 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1E00001A BNE ??SendAuthReq_1 6003 { 6004 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 6005 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 6006 p->pkt.type=T_AUTHREQ; 6007 p->pkt.data_len=l; 6008 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 6009 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 ........ LDR R3,??DataTable239 ;; `?` + 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 6010 AddMsgToChat(ed_struct->ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 6011 RecountMenu(t,1); \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 ........ BL RecountMenu 6012 SUBPROC((void *)SendAnswer,0,p); \ 000000A4 ........ LDR R0,??DataTable240 ;; SendAnswer \ 000000A8 0720A0E1 MOV R2,R7 \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 710100EF SWI +369 \ 000000B4 04D08DE2 ADD SP,SP,#+4 6013 } 6014 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 3B0100EF SWI +315 6015 } \ 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,??DataTable238 ;; S_ICONS + 396 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1E00001A BNE ??SendAuthGrant_1 6027 { 6028 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 6029 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 6030 p->pkt.type=T_AUTHGRANT; 6031 p->pkt.data_len=l; 6032 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 6033 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 ........ LDR R3,??DataTable239 ;; `?` + 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 6034 AddMsgToChat(ed_struct->ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 6035 RecountMenu(t,1); \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 ........ BL RecountMenu 6036 SUBPROC((void *)SendAnswer,0,p); \ 000000A4 ........ LDR R0,??DataTable240 ;; SendAnswer \ 000000A8 0720A0E1 MOV R2,R7 \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 710100EF SWI +369 \ 000000B4 04D08DE2 ADD SP,SP,#+4 6037 } 6038 GeneralFuncF1(1); \ ??SendAuthGrant_1: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 3B0100EF SWI +315 6039 } \ 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 1800000A BEQ ??OpenLogfile_0 6054 { 6055 #ifdef EVILFOX 6056 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 6057 #else 6058 #ifdef UIN_WRITE 6059 if (HISTORY_TYPE) \ 00000024 70409FE5 LDR R4,??OpenLogfile_1 ;; HISTORY_TYPE \ 00000028 0C3090E5 LDR R3,[R0, #+12] \ 0000002C 004094E5 LDR R4,[R4, #+0] \ 00000030 68109FE5 LDR R1,??OpenLogfile_1+0x4 ;; `?` \ 00000034 68209FE5 LDR R2,??OpenLogfile_1+0x8 ;; HIST_PATH \ 00000038 08002DE9 PUSH {R3} \ 0000003C 000054E3 CMP R4,#+0 \ 00000040 0700000A BEQ ??OpenLogfile_2 6060 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); \ 00000044 140080E2 ADD R0,R0,#+20 \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable241 ;; UIN \ 00000050 003090E5 LDR R3,[R0, #+0] \ 00000054 0500A0E1 MOV R0,R5 \ 00000058 240100EF SWI +292 \ 0000005C 08D08DE2 ADD SP,SP,#+8 \ 00000060 040000EA B ??OpenLogfile_3 6061 else 6062 wsprintf(ws,"%s\\%s(%d).txt",HIST_PATH,t->name, t->uin); \ ??OpenLogfile_2: \ 00000064 143080E2 ADD R3,R0,#+20 \ 00000068 141081E2 ADD R1,R1,#+20 \ 0000006C 0500A0E1 MOV R0,R5 \ 00000070 240100EF SWI +292 \ 00000074 04D08DE2 ADD SP,SP,#+4 6063 #else 6064 if (HISTORY_TYPE) 6065 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); 6066 else 6067 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); 6068 #endif 6069 #endif 6070 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 00000078 0020A0E3 MOV R2,#+0 \ 0000007C 0010A0E3 MOV R1,#+0 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 940000EF SWI +148 6071 } 6072 FreeWS(ws); \ ??OpenLogfile_0: \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 290100EF SWI +297 6073 GeneralFuncF1(1); \ 00000090 0100A0E3 MOV R0,#+1 \ 00000094 3B0100EF SWI +315 6074 } \ 00000098 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 0000009C ........ DC32 HISTORY_TYPE \ 000000A0 ........ DC32 `?` \ 000000A4 ........ DC32 HIST_PATH 6075 \ In segment CODE, align 4, keep-with-next 6076 void ClearLog(GUI *data/*,void *dummy*/) 6077 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 6078 EDITCONTROL ec; 6079 EDCHAT_STRUCT *ed_struct; 6080 WSHDR *ws; 6081 CLIST *t; 6082 6083 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 6084 6085 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 6086 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 6087 { 6088 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 6089 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 6090 6091 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 6092 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 6093 6094 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 6095 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 6096 } 6097 else 6098 { 6099 6100 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 6101 { 6102 if (t->log) \ 00000074 740095E5 LDR R0,[R5, #+116] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 6103 { 6104 FreeLOGQ(&t->log); \ 00000084 740085E2 ADD R0,R5,#+116 \ 00000088 ........ BL FreeLOGQ 6105 t->msg_count=0; \ 0000008C 846085E5 STR R6,[R5, #+132] 6106 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 6107 { 6108 while(ed_struct->ed_answer!=2) 6109 { 6110 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 6111 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 6112 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 6113 } 6114 } 6115 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 806085E5 STR R6,[R5, #+128] 6116 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 6117 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 6118 } 6119 } 6120 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 6121 \ In segment CODE, align 4, keep-with-next 6122 void ecmenu_ghook(void *data, int cmd) 6123 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 6124 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 6125 { 6126 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 6127 } 6128 } \ 00000010 0080BDE8 POP {PC} ;; return 6129 \ In segment DATA_C, align 4, align-sorted 6130 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ MAINCSM: \ 00000074 DS8 72 \ 000000BC REQUIRE `?` \ gipc: \ 000000BC DS8 12 \ 000000C8 REQUIRE `?` \ game_gipc: \ 000000C8 DS8 12 \ 000000D4 REQUIRE `?` \ tmr_gipc: \ 000000D4 DS8 12 \ 000000E0 REQUIRE `?` \ main_d: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ dontLogOnConnect: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ align: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ canvasdata: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ paused_height: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ uins: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ saver_on: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ Is_PING_On: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ Is_SLI_On: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ Is_SMARTCPU_On: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ Is_INC_On: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ Is_ILU_On: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ Is_Double_Vibra_On: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ total_unread2: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ maincsm_id: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ maingui_id: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ SENDMSGCOUNT: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ IsActiveUp: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ Is_Id3tag_Enabled: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ ews: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ msg_away_timer: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ inp_away_msg2: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ away_m: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ status_rem: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ change_back_status: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ Is_UPTIME_On: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ xstatus_old: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ minimum_xstatus: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ maximum: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ tracktimer: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ inp_away_m: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ silenthide: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ disautorecconect: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ Is_Show_Offline: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ Is_Show_Groups: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ CurrentStatus: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ CurrentPrivateStatus: \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ vibra_count: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ templates_chars: \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ templates_lines: \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ RXstate: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ connect_state: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ sock: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ TOTALRECEIVED: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ TOTALSENDED: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ ALLTOTALRECEIVED: \ 0000019C DS8 4 \ 000001A0 REQUIRE `?` \ ALLTOTALSENDED: \ 000001A0 DS8 4 \ 000001A4 REQUIRE `?` \ sendq_l: \ 000001A4 DS8 4 \ 000001A8 REQUIRE `?` \ sendq_p: \ 000001A8 DS8 4 \ 000001AC REQUIRE `?` \ is_gprs_online: \ 000001AC DS8 4 \ 000001B0 REQUIRE `?` \ total_unread: \ 000001B0 DS8 4 \ 000001B4 REQUIRE `?` \ cltop: \ 000001B4 DS8 4 \ 000001B8 REQUIRE `?` \ GROUP_CACHE: \ 000001B8 DS8 4 \ 000001BC REQUIRE `?` \ contactlist_menu_id: \ 000001BC DS8 4 \ 000001C0 REQUIRE `?` \ edchat_id: \ 000001C0 DS8 4 \ 000001C4 REQUIRE `?` \ 000001C4 DS8 4 \ 000001C8 REQUIRE `?` \ tenseconds_to_ping: \ 000001C8 DS8 4 \ 000001CC REQUIRE `?` \ kopa_online: \ 000001CC DS8 4 \ 000001D0 REQUIRE `?` \ kopa_kontaktu: \ 000001D0 DS8 4 \ 000001D4 REQUIRE `?` \ DNR_ID: \ 000001D4 DS8 4 \ 000001D8 REQUIRE `?` \ DNR_TRIES: \ 000001D8 DS8 4 \ 000001DC REQUIRE `?` \ host_counter: \ 000001DC DS8 4 \ 000001E0 REQUIRE `?` \ ping_time: \ 000001E0 DS8 4 \ 000001E4 REQUIRE `?` \ NEW_MSG: \ 000001E4 DS8 4 \ 000001E8 REQUIRE `?` \ time_to_stop_t9: \ 000001E8 DS8 4 \ 000001EC REQUIRE `?` \ comanda: \ 000001EC DS8 4 \ 000001F0 REQUIRE `?` \ INC_show: \ 000001F0 DS8 4 \ 000001F4 REQUIRE `?` \ font: \ 000001F4 DS8 4 \ 000001F8 REQUIRE `?` \ old_ed_redraw: \ 000001F8 DS8 4 \ 000001FC REQUIRE `?` \ 000001FC DS8 64 \ 0000023C REQUIRE `?` \ elf_path: \ 0000023C DS8 256 \ 0000033C REQUIRE `?` \ ContactT9Key: \ 0000033C DS8 32 \ 0000035C REQUIRE `?` \ talk_sound: \ 0000035C DS8 128 \ 000003DC REQUIRE `?` \ unread_msg_info: \ 000003DC DS8 64 \ 0000041C REQUIRE `?` \ last_msg_buffer: \ 0000041C DS8 4048 \ 000013EC REQUIRE `?` \ mytmr3: \ 000013EC DS8 16 \ 000013FC REQUIRE `?` \ PINGO: \ 000013FC DS8 256 \ 000014FC REQUIRE `?` \ away_msg: \ 000014FC DS8 264 \ 00001604 REQUIRE `?` \ away_msg_time: \ 00001604 DS8 64 \ 00001644 REQUIRE `?` \ away_msg_time_dace: \ 00001644 DS8 16 \ 00001654 REQUIRE `?` \ tim_zone: \ 00001654 DS8 16 \ 00001664 REQUIRE `?` \ away_tmr: \ 00001664 DS8 16 \ 00001674 REQUIRE `?` \ mytmr: \ 00001674 DS8 16 \ 00001684 REQUIRE `?` \ mytmr2: \ 00001684 DS8 16 \ 00001694 REQUIRE `?` \ mytmr4: \ 00001694 DS8 16 \ 000016A4 REQUIRE `?` \ tracktmr: \ 000016A4 DS8 16 \ 000016B4 REQUIRE `?` \ hah: \ 000016B4 DS8 128 \ 00001734 REQUIRE `?` \ logmsg: \ 00001734 DS8 256 \ 00001834 REQUIRE `?` \ tmr_illumination: \ 00001834 DS8 16 \ 00001844 REQUIRE `?` \ tmr_vibra: \ 00001844 DS8 16 \ 00001854 REQUIRE `?` \ reconnect_tmr: \ 00001854 DS8 16 \ 00001864 REQUIRE `?` \ tmr_active: \ 00001864 DS8 16 \ 00001874 REQUIRE `?` \ clm_hdr_text: \ 00001874 DS8 48 \ 000018A4 REQUIRE `?` \ clmenu_sk_r: \ 000018A4 DS8 16 \ 000018B4 REQUIRE `?` \ hostbuf2: \ 000018B4 DS8 128 \ 00001934 REQUIRE `?` \ hostname: \ 00001934 DS8 128 \ 000019B4 REQUIRE `?` \ I_UIN: \ 000019B4 DS8 12 \ 000019C0 REQUIRE `?` \ a_txt: \ 000019C0 DS8 48 \ 000019F0 REQUIRE `?` \ s_txt: \ 000019F0 DS8 48 \ 00001A20 REQUIRE `?` \ d_txt: \ 00001A20 DS8 48 \ 00001A50 REQUIRE `?` \ f_txt: \ 00001A50 DS8 48 \ 00001A80 REQUIRE `?` \ g_txt: \ 00001A80 DS8 48 \ 00001AB0 REQUIRE `?` \ develop: \ 00001AB0 DS8 16 \ 00001AC0 REQUIRE `?` \ requests1: \ 00001AC0 DS8 24 \ 00001AD8 REQUIRE `?` \ requests2: \ 00001AD8 DS8 20 \ 00001AEC REQUIRE `?` \ requests3: \ 00001AEC DS8 24 \ 00001B04 REQUIRE `?` \ requests4: \ 00001B04 DS8 20 \ 00001B18 REQUIRE `?` \ requests6: \ 00001B18 DS8 24 \ 00001B30 REQUIRE `?` \ mod_info: \ 00001B30 DS8 264 \ 00001C38 REQUIRE `?` \ show_nick: \ 00001C38 DS8 32 \ 00001C58 REQUIRE `?` 6144 { 6145 Quote, 6146 AddSmile, 6147 GetShortInfo, 6148 AddCurContact, 6149 SendAuthReq, 6150 SendAuthGrant, 6151 OpenLogfile, 6152 ClearLog, 6153 }; 6154 6155 char ecm_contactname[64]; \ ecm_contactname: \ 00001C58 DS8 64 \ 00001C98 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 `?` 6156 \ In segment DATA_C, align 4, align-sorted 6157 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, 2147483647 \ ....FFFFFF7F \ 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 6158 6159 static const MENU_DESC ecmenu_STRUCT= 6160 { 6161 8,NULL,ecmenu_ghook,NULL, 6162 menusoftkeys, 6163 &menu_skt, 6164 0, 6165 NULL, 6166 ecmenu_ITEMS, 6167 ecmenu_HNDLS, 6168 EC_MNU_MAX 6169 }; 6170 \ In segment CODE, align 4, keep-with-next 6171 void ec_menu(EDCHAT_STRUCT *ed_struct) 6172 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 \ 00000008 0040A0E1 MOV R4,R0 6173 CLIST *t; 6174 int to_remove[EC_MNU_MAX+1]; 6175 int remove=0; 6176 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4500000A BEQ ??ec_menu_0 6177 { 6178 if (t->name) \ 00000018 ........ LDR R5,??DataTable242 ;; S_ICONS \ 0000001C 5800A0E3 MOV R0,#+88 \ 00000020 700D80E3 ORR R0,R0,#0x1C00 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 6179 { 6180 strncpy(ecm_contactname,t->name,63); \ 00000030 3F20A0E3 MOV R2,#+63 \ 00000034 141081E2 ADD R1,R1,#+20 \ 00000038 160100EF SWI +278 \ 0000003C 020000EA B ??ec_menu_2 6181 } 6182 else 6183 { 6184 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 3B1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 6185 } 6186 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 0160A0E3 MOV R6,#+1 \ 00000054 820100EF SWI +386 \ 00000058 082094E5 LDR R2,[R4, #+8] \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 020050E1 CMP R0,R2 6187 { 6188 to_remove[++remove]=0; \ 00000064 04108D05 STREQ R1,[SP, #+4] 6189 } 6190 else 6191 { 6192 to_remove[++remove]=1; \ 00000068 0120A013 MOVNE R2,#+1 \ 0000006C 04208D15 STRNE R2,[SP, #+4] 6193 } 6194 6195 if (ed_struct->ed_answer<=2) to_remove[++remove]=7; \ 00000070 080094E5 LDR R0,[R4, #+8] \ 00000074 030050E3 CMP R0,#+3 \ 00000078 0720A0B3 MOVLT R2,#+7 \ 0000007C 08208DB5 STRLT R2,[SP, #+8] 6196 if (!ed_struct->ed_contact || connect_state!=3) \ 00000080 000094E5 LDR R0,[R4, #+0] \ 00000084 0260A0B3 MOVLT R6,#+2 \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0200000A BEQ ??ec_menu_4 \ 00000090 8C0195E5 LDR R0,[R5, #+396] \ 00000094 030050E3 CMP R0,#+3 \ 00000098 0D00000A BEQ ??ec_menu_5 6197 { 6198 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000009C 010086E2 ADD R0,R6,#+1 \ 000000A0 0D20A0E1 MOV R2,SP \ 000000A4 0230A0E3 MOV R3,#+2 \ 000000A8 003182E7 STR R3,[R2, +R0, LSL #+2] 6199 to_remove[++remove]=3; \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 0330A0E3 MOV R3,#+3 \ 000000B4 003182E7 STR R3,[R2, +R0, LSL #+2] 6200 to_remove[++remove]=4; \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC 0430A0E3 MOV R3,#+4 \ 000000C0 003182E7 STR R3,[R2, +R0, LSL #+2] 6201 to_remove[++remove]=5; \ 000000C4 016080E2 ADD R6,R0,#+1 \ 000000C8 0D00A0E1 MOV R0,SP \ 000000CC 0520A0E3 MOV R2,#+5 \ 000000D0 062180E7 STR R2,[R0, +R6, LSL #+2] 6202 } 6203 6204 patch_header(&ecmenu_HDR); \ ??ec_menu_5: \ 000000D4 60509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 000000D8 1800A0E3 MOV R0,#+24 \ 000000DC B010C5E1 STRH R1,[R5, #+0] \ 000000E0 B200C5E1 STRH R0,[R5, #+2] \ 000000E4 888100EF SWI +33160 \ 000000E8 010040E2 SUB R0,R0,#+1 \ 000000EC B400C5E1 STRH R0,[R5, #+4] \ 000000F0 8A8100EF SWI +33162 \ 000000F4 170080E2 ADD R0,R0,#+23 \ 000000F8 B600C5E1 STRH R0,[R5, #+6] 6205 to_remove[0]=remove; \ 000000FC 00608DE5 STR R6,[SP, #+0] 6206 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 00000100 0D00A0E1 MOV R0,SP \ 00000104 01002DE9 PUSH {R0} \ 00000108 10002DE9 PUSH {R4} \ 0000010C 0530A0E1 MOV R3,R5 \ 00000110 0800A0E3 MOV R0,#+8 \ 00000114 01002DE9 PUSH {R0} \ 00000118 142085E2 ADD R2,R5,#+20 \ 0000011C 0010A0E3 MOV R1,#+0 \ 00000120 0000A0E3 MOV R0,#+0 \ 00000124 01002DE9 PUSH {R0} \ 00000128 520100EF SWI +338 \ 0000012C 10D08DE2 ADD SP,SP,#+16 6207 } 6208 } \ ??ec_menu_0: \ 00000130 24D08DE2 ADD SP,SP,#+36 ;; stack cleaning \ 00000134 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000138 25750000 DC8 "%u",+0 \ 0000013C ........ DC32 ecmenu_HDR 6209 6210 \ In segment CODE, align 4, keep-with-next 6211 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 6212 { 6213 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 6214 } 6215 \ In segment CODE, align 4, keep-with-next 6216 void AddSmile(GUI *data) 6217 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 6218 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 6219 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 6220 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 6221 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 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 \ ??DataTable11: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable14: \ 00000000 ........ DC32 GetTags \ 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 \ ??DataTable27: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable32: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable35: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable44: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable51: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable55: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable56: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 S_ICONS + 436 \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable65: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable67: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable68: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable70: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable74: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 SendAnswer \ 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 \ ??DataTable81: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable82: \ 00000000 ........ DC32 S_ICONS \ 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 \ ??DataTable110: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable114: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable117: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable118: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable119: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 ignor_list \ In segment CODE, align 4, keep-with-next \ ??DataTable121: \ 00000000 ........ DC32 away_msg2 \ In segment CODE, align 4, keep-with-next \ ??DataTable123: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable126: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable127: \ 00000000 ........ DC32 extended_sounds \ In segment CODE, align 4, keep-with-next \ ??DataTable128: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable129: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable130: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable132: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable133: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable136: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable149: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable150: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable152: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable154: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable155: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable157: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable158: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable162: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable167: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable168: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable169: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable174: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable177: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable178: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable179: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable181: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable182: \ 00000000 ........ DC32 RECONNECT_TIME \ In segment CODE, align 4, keep-with-next \ ??DataTable184: \ 00000000 ........ DC32 ShowStatusIcon \ In segment CODE, align 4, keep-with-next \ ??DataTable185: \ 00000000 ........ DC32 show_xstatus \ In segment CODE, align 4, keep-with-next \ ??DataTable186: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable190: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable191: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable192: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable193: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable194: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable195: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable196: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable197: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable198: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable200: \ 00000000 ........ DC32 S_ICONS + 436 \ In segment CODE, align 4, keep-with-next \ ??DataTable203: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable204: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable205: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable206: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable208: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable211: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable212: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable215: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable216: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable217: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable218: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable219: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable220: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable223: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable224: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable225: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable226: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable227: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable228: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable232: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable238: \ 00000000 ........ DC32 S_ICONS + 396 \ In segment CODE, align 4, keep-with-next \ ??DataTable239: \ 00000000 ........ DC32 `?` + 23 \ In segment CODE, align 4, keep-with-next \ ??DataTable240: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable241: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable242: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable243: \ 00000000 ........ DC32 GetTags \ 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, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 00000090 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 000000AC 8B00 DC16 139 \ 000000AE 0000 DC8 0, 0 \ 000000B0 49636F6E4261 DC8 "IconBar" \ 7200 \ 000000B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E4 00000000 DC32 0 \ `?`: \ 000000E8 00000000 DC32 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 DC8 0, 0, 0, 0 \ `?`: \ 00000114 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000118 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000011C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000120 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000124 01000000 DC32 1 \ `?`: \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000130 00000000 DC32 0 \ `?`: \ 00000134 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000138 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000013C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000140 00000000 DC8 0, 0, 0, 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 DC32 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 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000174 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000178 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000017C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000180 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000184 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000188 F6FFFFFF DC32 -10 \ `?`: \ 0000018C 00000000 DC32 0 \ `?`: \ 00000190 FFFFFFFF DC32 -1 \ `?`: \ 00000194 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000198 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000019C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A4 00000000 DC32 0 \ `?`: \ 000001A8 00000000 DC32 0H \ `?`: \ 000001AC 01000000 DC32 1 \ `?`: \ 000001B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D4 00000000 DC32 0 \ `?`: \ 000001D8 03000000 DC32 3 \ `?`: \ 000001DC 00000000 DC32 0 \ `?`: \ 000001E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F4 09000000 DC32 9 \ `?`: \ 000001F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000020C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000021C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000022C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000023C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000024C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000025C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000026C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000027C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000028C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000029C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000030C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000031C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000032C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000033C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000034C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000035C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000036C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000037C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000038C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000039C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000040C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000041C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000042C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000043C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000044C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000045C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000046C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000047C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000048C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000049C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000050C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000051C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000052C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000053C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000054C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000055C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000056C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000057C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000058C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000059C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000060C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 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, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ABC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ACC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ADC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ECC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000100C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000101C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000102C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000103C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000104C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000105C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000106C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000107C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000108C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000109C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000110C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000111C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000112C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000113C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000114C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000115C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000116C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000117C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000118C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000119C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000120C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000121C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000122C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000123C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000124C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000125C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000126C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000127C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000128C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000129C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000130C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000131C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000132C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000133C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000134C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000135C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000136C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000137C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000138C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000139C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000013EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000013FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000140C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000141C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000142C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000143C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000144C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000145C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000146C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000147C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000148C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000149C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000014FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000150C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000151C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000152C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000153C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000154C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000155C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000156C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000157C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000158C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000159C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001604 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001614 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001624 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001634 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001644 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001654 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001664 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001674 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001684 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001694 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000016A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000016B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001704 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001714 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001724 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001734 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001744 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001754 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001764 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001774 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001784 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001794 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001804 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001814 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001824 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001834 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001844 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001854 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001864 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001874 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001884 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001894 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001904 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001914 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001924 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001934 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001944 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001954 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001964 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001974 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001984 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001994 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000019C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AC0 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00001AD7 00 DC8 0 \ `?`: \ 00001AD8 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001AEC 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00001B04 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001B18 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 00001B30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001C38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C88 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 CBE5E200 DC8 "\313\345\342" \ 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:00" \ 343A303000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 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 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 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 4, align-sorted \ `?`: \ 00000000 4175746F626F DC8 "Autobot Off" \ 74204F666600 \ 0000000C 4175746F626F DC8 "Autobot On" \ 74204F6E00 \ 00000017 00 DC8 0 \ 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\\%s(%d).txt" \ 257328256429 \ 2E74787400 \ 00000011 000000 DC8 0, 0, 0 \ 00000014 25735C257328 DC8 "%s\\%s(%d).txt" \ 2564292E7478 \ 7400 \ 00000022 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 Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 108 AddSmile 4 AddStringToLog 188 AddToMain 44 AskNickAndAddContact 4 AutobotInit 4 BackSpaceContactT9 8 ChangeSound 4 ChangeVibra 4 CheckComand 72 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 24 InputAwayMsg 88 IsIdle 4 IsUrl 44 LastLOGQ 0 LoadTemplates 332 NewLOGQ 12 OpenLogfile 20 ParseAnswer 36 ParseXStatusText 20 Pinger2 16 Play 236 ProcessPacket 372 Quote 152 ReadDefSettings 156 RecountMenu 20 Remind_Timer2 8 Reminder_timer 4 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SLI_Off 4 SLI_On 8 SLI_Timer 4 SLI_check 4 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 56 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 1096 init_time_zone 4 input_awaymsg_ghook 4 input_awaymsg_locret 0 input_awaymsg_onkey 72 main 64 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 108 method0 96 method1 8 method2 8 method3 8 method4 0 method5 24 method8 0 method9 0 my_ed_redraw 12 my_keyhook 16 process_active_timer 12 recon 8 send_login 36 set_my_status 4 set_my_xstatus 48 set_my_xstatus2 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 20 xstatuse 12 Segment part sizes: Function/Label Bytes -------------- ----- solnce 4 Pinger2 144 SLI_TYPE 4 SMART_REDRAW 48 timeh 4 timemin 4 away_timer 228 init_time_zone 356 Draw11 80 Remind_Timer2 68 Reminder_timer 32 xstatuse 96 x_zstatus 156 Draw22 148 DrawAutoMSG 140 input_awaymsg_id 4 input_awaymsg_onkey 328 input_awaymsg_ghook 68 input_awaymsg_locret 4 InputAwayMsg 472 SLI_On 60 SLI_Off 72 SLI_check 32 SLI_Timer 36 setup_ICONS 72 free_ICONS 44 IlluminationOff 60 IlluminationOn 120 ReadDefSettings 372 WriteDefSettings 372 Play 304 start_vibra 100 stop_vibra 88 start_vibra2 60 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 428 ClearContactT9Key 24 AddContactT9Key 36 BackSpaceContactT9 36 create_contactlist_menu 108 contactlist_menu_ghook 68 RecountMenu 160 contactlist_menu_onkey 1608 GetOnTotalContact 92 contactlist_menu_iconhndl 600 GetHost 192 atoi 84 GetPort 276 GetHostsCount 120 create_connect 744 ClearSendQ 32 end_socket 40 SendAnswer 388 send_login 148 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1448 AddToMain 556 AddStringToLog 580 ParseXStatusText 152 AddMsgToChat 832 DrawAck 340 ask_my_info 4 set_my_status 72 set_my_xstatus 532 set_my_xstatus2 244 to_develop 96 ReqAddMsgToChat 120 begin_to_develop 52 autobot 4 AutobotInit 76 CheckComand 1632 INC_Nick 32 show_pp_sender 284 Get_Online_total 92 ProcessPacket 2780 process_active_timer 148 method0 884 method1 44 method2 36 method3 24 method4 20 method5 204 method8 8 method9 8 my_keyhook 164 ? 1876 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 128 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 264 maincsm_onclose 280 do_reconnect 40 CheckDoubleRun 120 maincsm_onmessage 2908 IsIdle 36 addIconBar 276 minus11 4 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 main 424 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 1436 my_ed_redraw 112 edchat_ghook 560 edchat_desc 84 sk 16 CreateEditChat 1184 Quote 416 GetShortInfo 168 AddCurContact 52 SendAuthReq 204 SendAuthGrant 200 OpenLogfile 168 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 224 ecmenu_HNDLS 32 S_ICONS 7320 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 ecmenu_HDR 64 ec_menu 320 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable3 4 ??DataTable5 4 ??DataTable11 4 ??DataTable14 4 ??DataTable19 4 ??DataTable20 4 ??DataTable21 4 ??DataTable23 4 ??DataTable27 4 ??DataTable32 4 ??DataTable33 4 ??DataTable34 4 ??DataTable35 4 ??DataTable41 4 ??DataTable44 4 ??DataTable48 4 ??DataTable51 4 ??DataTable55 4 ??DataTable56 4 ??DataTable58 4 ??DataTable61 4 ??DataTable62 4 ??DataTable63 4 ??DataTable64 4 ??DataTable65 4 ??DataTable67 4 ??DataTable68 4 ??DataTable70 4 ??DataTable74 4 ??DataTable75 4 ??DataTable77 4 ??DataTable78 4 ??DataTable79 4 ??DataTable81 4 ??DataTable82 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 ??DataTable110 4 ??DataTable114 4 ??DataTable116 4 ??DataTable117 4 ??DataTable118 4 ??DataTable119 4 ??DataTable120 4 ??DataTable121 4 ??DataTable123 4 ??DataTable126 4 ??DataTable127 4 ??DataTable128 4 ??DataTable129 4 ??DataTable130 4 ??DataTable131 4 ??DataTable132 4 ??DataTable133 4 ??DataTable136 4 ??DataTable137 4 ??DataTable138 4 ??DataTable143 4 ??DataTable146 4 ??DataTable149 4 ??DataTable150 4 ??DataTable152 4 ??DataTable154 4 ??DataTable155 4 ??DataTable157 4 ??DataTable158 4 ??DataTable162 4 ??DataTable167 4 ??DataTable168 4 ??DataTable169 4 ??DataTable174 4 ??DataTable177 4 ??DataTable178 4 ??DataTable179 4 ??DataTable181 4 ??DataTable182 4 ??DataTable184 4 ??DataTable185 4 ??DataTable186 4 ??DataTable190 4 ??DataTable191 4 ??DataTable192 4 ??DataTable193 4 ??DataTable194 4 ??DataTable195 4 ??DataTable196 4 ??DataTable197 4 ??DataTable198 4 ??DataTable200 4 ??DataTable203 4 ??DataTable204 4 ??DataTable205 4 ??DataTable206 4 ??DataTable208 4 ??DataTable211 4 ??DataTable212 4 ??DataTable214 4 ??DataTable215 4 ??DataTable216 4 ??DataTable217 4 ??DataTable218 4 ??DataTable219 4 ??DataTable220 4 ??DataTable221 4 ??DataTable222 4 ??DataTable223 4 ??DataTable224 4 ??DataTable225 4 ??DataTable226 4 ??DataTable227 4 ??DataTable228 4 ??DataTable230 4 ??DataTable232 4 ??DataTable238 4 ??DataTable239 4 ??DataTable240 4 ??DataTable241 4 ??DataTable242 4 ??DataTable243 4 ? 7320 ? 8 ? 24 ? 8 ? 4 ? 8 ? 8 ? 8 ? 8 ? 48 ? 396 ? 32 ? 16 ? 3 ? 16 ? 4 ? 4 ? 4 ? 4 ? 4 ? 204 ? 2 ? 40 ? 12 ? 3 ? 8 ? 52 ? 24 ? 3 ? 12 ? 12 ? 164 ? 8 ? 36 ? 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 Others 1016 35 504 bytes in segment CODE 4 686 bytes in segment DATA_C 7 360 bytes in segment DATA_I 7 360 bytes in segment DATA_ID 33 116 bytes in segment DATA_Z 24 bytes in segment INITTAB 34 512 bytes of CODE memory (+ 1 016 bytes shared) 12 046 bytes of CONST memory 40 476 bytes of DATA memory Errors: none Warnings: none