############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 26/Feb/2008 15:04:06 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\main.c # # Command line = "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\main.c" -D NEWSGOLD -D ELKA # # --preprocess "D:\Pasha\elf\mod_src\naticq_2nd_mod # # to all(17.02.08)\Release_ELKA\List\" -lC # # "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\Release_ELKA\List\" -o # # "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\Release_ELKA\Obj\" -s9 --no_unroll # # --cpu_mode arm --endian little --cpu ARM926EJ-S # # --stack_align 4 --interwork -e --fpu None # # --dlib_config "D:\Pasha\ARM_Embedded_Workbench\Embed # # ded Workbench 4.0 Evaluation\ARM\LIB\dl5tpainl8n.h" # # -I "D:\Pasha\ARM_Embedded_Workbench\Embedded # # Workbench 4.0 Evaluation\ARM\INC\" # # --inline_threshold=2 # # List file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\Release_ELKA\List\main.lst # # Object file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\Release_ELKA\Obj\main.r79 # # # # # ############################################################################## D:\Pasha\elf\mod_src\naticq_2nd_mod to all(17.02.08)\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 "manage_cl.h" 16 #include "cl_work.h" 17 #include "select_smile.h" 18 #include "revision.h" 19 #ifdef EVILFOX 20 #include "print.h" 21 #endif 22 23 #ifndef NEWSGOLD 24 #define SEND_TIMER 25 #endif 26 27 int total_unread; 28 #define EOP -10 29 int CurrentStatus; 30 int CurrentXStatus; 31 volatile CLIST *cltop; 32 33 //#ifdef EVILFOX 34 //=========================mod definitions 35 #ifdef ELKA 36 #pragma swi_number=54 37 __swi __arm void SLI_SetState(unsigned char state); //for sli usage 38 #endif 39 #ifdef NEWSGOLD 40 #pragma swi_number=0x0C5 41 __swi __arm int IsIdleUiOnTop(); //for check if idlegui 42 #endif \ In segment DATA_Z, align 4, align-sorted 43 char upcoming[64]; //for nick that comes online \ upcoming: \ 00000000 DS8 64 \ In segment DATA_Z, align 4, align-sorted 44 int total_unread2; //for total unread mesages \ total_unread2: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 45 int total_c_online; //for count of contacts who just came online \ total_c_online: \ 00000000 DS8 4 46 #ifdef ELKA 47 int Is_SLI_On; //for checking if is active sli \ In segment DATA_Z, align 4, align-sorted 48 GBSTMR mytmr; //timer for sli \ mytmr: \ 00000000 DS8 16 49 #endif 50 //extern const int SLI_TYPE; //for check where to activate sli 51 int Is_ILU_On; // for ilumination use 52 int seconds; //sekundes 53 int minutes; //minuutes 54 int hours; //hours \ In segment DATA_Z, align 4, align-sorted 55 GBSTMR ctmr; //time counter \ ctmr: \ 00000000 DS8 16 56 char online_txt[18]; //online txt 57 extern const unsigned int ONTIME_X; //cordinates for online time ms 58 extern const unsigned int ONTIME_Y; //cordinates for online time ms 59 extern const int Pause_Time; // for time refresher \ In segment DATA_Z, align 4, align-sorted 60 int align=0; //align for png font \ align: \ 00000000 DS8 4 61 extern const unsigned int fonto; // font number 62 extern const unsigned int spaco1; // space between letters in png font 63 extern const unsigned int spaco2; // space between letters in png font 64 extern const unsigned int system_color; //system font color \ In segment DATA_Z, align 4, align-sorted 65 int spaco1r; //display \ spaco1r: \ 00000000 DS8 4 66 extern const char fontpath[64]; //font path for png 67 int time_draw; //refresh for mainscreen 68 void *canvasdata; //just canvasdata 69 int show_ping; //for autoping not show \ In segment DATA_Z, align 4, align-sorted 70 int ping_sec; //for autoping engaging \ ping_sec: \ 00000000 DS8 4 71 extern const int Show_Ping; //do ping if 1 72 extern const unsigned int PING_X; //cordinates for ping ms 73 extern const unsigned int PING_Y; //cordinates for ping ms 74 char ping_txt[16]; // ping txt 75 extern const unsigned int UNREAD_X; //cordinates for unread ms 76 extern const unsigned int UNREAD_Y; //cordinates for unread ms \ In segment DATA_Z, align 4, align-sorted 77 char unread_txt[16]; //unread msg txt \ unread_txt: \ 00000000 DS8 16 78 extern const int Is_Unread_On; //show/hide unread on ms 79 extern const int Is_Online_On; //show/hide online time on ms \ In segment DATA_Z, align 4, align-sorted 80 int INC_show; //for popup sender counter \ INC_show: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 81 char show_nick[64]; //nick save for popup sender \ show_nick: \ 00000000 DS8 64 82 int Is_INC_On; // show//hide popup sender \ In segment DATA_Z, align 4, align-sorted 83 GBSTMR incs; // popup sendet timer \ incs: \ 00000000 DS8 16 84 #ifdef ELKA 85 int font=9; // font for popup sender 86 #else 87 #ifdef NEWSGOLD 88 int font=11; // font for popup sender 89 #else 90 int font=7; // font for popup sender 91 #endif 92 #endif 93 //const char color[4]={255,255,255,100}; // color for popup sender \ In segment DATA_Z, align 4, align-sorted 94 int pp_color; // color for popup sender \ pp_color: \ 00000000 DS8 4 95 extern const int Is_DRAWMAIN_On; //show/hide main msg \ In segment DATA_Z, align 4, align-sorted 96 int main_d; // refresher for main msg \ main_d: \ 00000000 DS8 4 97 extern const unsigned int MSG_Y; // cordinates for main msg 98 extern const unsigned int MSG_X; // cordinates for main msg \ In segment DATA_Z, align 4, align-sorted 99 int paused_height; // vertical height of font \ paused_height: \ 00000000 DS8 4 100 int in_count; // count incoming messages 101 int out_count; // count outgoing messages 102 #ifdef ELKA 103 char last_msg_buffer[3072]; // last message buffer 104 #endif 105 int comanda; //for check comand to add it to log \ In segment DATA_Z, align 4, align-sorted 106 int msg_away_timer; // time for autostatus \ msg_away_timer: \ 00000000 DS8 4 107 extern const unsigned int AUTO_ENGADE; //time to start autostatus \ In segment DATA_Z, align 4, align-sorted 108 int change_back_status; //to do changeback or not \ change_back_status: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 109 int status_rem; //remember your status before change \ status_rem: \ 00000000 DS8 4 110 char away_msg_time[64]; //away time char 111 char away_msg[256]; // away txt 112 int away_m; //use to check if auto time engaged 113 extern const int Auto_Status; //use autostatus or not to use 114 extern const char away_msg1[24]; //for hello msg in autostatus 115 extern const char away_msg2[64]; //for automsg txt 116 extern const int time_zone; //for time zone initialization \ In segment DATA_Z, align 4, align-sorted 117 char tim_zone[24]; //timezone txt \ tim_zone: \ 00000000 DS8 24 \ In segment DATA_Z, align 4, align-sorted 118 int In_EXT_On; //to initialize extended sounds \ In_EXT_On: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 119 char ext_sound[128]; //path to play or init ext sound \ ext_sound: \ 00000000 DS8 128 120 extern const char sndMsg2[64]; //path to extended sounds \ In segment DATA_Z, align 4, align-sorted 121 int total_count; //counter for extender sound info display \ total_count: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 122 int in_ext; //counter for extender sound info display \ in_ext: \ 00000000 DS8 4 123 char LG_MENU2[32]; //moved menu name here for my needs 124 extern const unsigned int main_draw_l; // lenght of txt to draw on main 125 extern const int TIME_OR_MSG; // for check what to draw with main header 126 int icon_change; //for icon change on ms \ In segment DATA_Z, align 4, align-sorted 127 int icon_change2; //for icon change on ms \ icon_change2: \ 00000000 DS8 4 128 extern int *XStatusesIconArray; // strange need but ok 129 char mod_info[]="2nd generation mod based on revision 1848! mod date: 19.02.08 14:02!"; //just info for mod info 130 //=========================end 131 //#endif 132 133 #ifdef EVILFOX 134 //=========================modification functions 135 #ifdef ELKA 136 void SLI_Off(void); 137 void SLI_On() 138 { 139 if (total_unread) 140 { 141 SLI_SetState(1); 142 GBS_StartTimerProc(&mytmr, 21, SLI_Off); 143 } 144 else 145 SLI_SetState(0); 146 } 147 148 void SLI_Off() 149 { 150 SLI_SetState(2); 151 if (total_unread) 152 GBS_StartTimerProc(&mytmr, 21, SLI_On); //26*SLI_time2 153 else 154 SLI_SetState(0); 155 } 156 157 void SLI_Timer() 158 { 159 if(Is_SLI_On) 160 GBS_StartTimerProc(&mytmr, 262, SLI_On); //262*SLI_time 161 } 162 #endif 163 //===============time count========= 164 void time_count() 165 { 166 seconds++; 167 if(seconds==60) 168 { 169 seconds=0; 170 minutes++; 171 } 172 if(minutes==60) 173 { 174 minutes=0; 175 hours++; 176 } 177 } 178 179 void time_counter() 180 { 181 if(connect_state==3) 182 { 183 time_count(); 184 GBS_StartTimerProc(&ctmr, 216, time_counter); 185 } 186 else 187 { 188 if(!Pause_Time) 189 { 190 seconds=0; 191 minutes=0; 192 hours=0; 193 } 194 GBS_StartTimerProc(&ctmr, 216, time_counter); 195 } 196 time_draw=1; 197 } 198 //=========================time count===== 199 //=========================mainscreen ping=============== 200 static void PingToServer2(void) 201 { 202 TPKT *p; 203 p=malloc(sizeof(PKT)+sizeof(TTime)); 204 GetDateTime(NULL,(TTime *)p->data); 205 p->pkt.uin=0; 206 p->pkt.type=T_ECHO; 207 p->pkt.data_len=sizeof(TTime); 208 SUBPROC((void *)SendAnswer,0,p); 209 } 210 //=========================mainscreen ping============== 211 212 //=========================popup sender========================= 213 void show_pp_sender() 214 { 215 if(INC_show>0) 216 { 217 WSHDR *ws=AllocWS(64); 218 ascii2ws(ws,show_nick); 219 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); 220 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,GetPaletteAdrByColorIndex(pp_color),GetPaletteAdrByColorIndex(23)); 221 FreeWS(ws); 222 INC_show--; 223 GBS_StartTimerProc(&incs, 5, show_pp_sender); 224 } 225 } 226 //==================================popup sender=============== 227 //===========================main msg add=================== 228 char a_txt[64]; 229 char s_txt[64]; 230 char d_txt[64]; 231 char f_txt[64]; 232 char g_txt[64]; 233 234 static AddToMain(const char *nameu,const char *si) 235 { 236 char de[64]; 237 char du[64]; 238 int text_l=0; 239 int iz=0; 240 int name_l=0; 241 name_l=strlen(nameu); 242 text_l=main_draw_l-name_l; 243 244 if(strlen(si)>text_l) 245 { 246 strncpy(du,si,text_l); 247 du[text_l]='\0'; 248 sprintf(de,"%s%s",du,"..."); 249 } 250 else 251 strcpy(de, si); 252 iz=0; 253 while(strlen(de)!=iz) 254 { 255 if((de[iz]==0x0D)||(de[iz]==0x0A)) de[iz]=0x20; 256 iz++; 257 } 258 de[iz]='\0'; 259 strcpy(a_txt, s_txt); 260 strcpy(s_txt, d_txt); 261 strcpy(d_txt, f_txt); 262 strcpy(f_txt, g_txt); 263 sprintf(g_txt, "%s: %s", nameu,de); 264 main_d=1; 265 } 266 //=================================main msg add============ 267 //==================================autostatus============= 268 void away_engage() 269 { 270 TTime tt; 271 GetDateTime(NULL,&tt); 272 sprintf(away_msg_time, "(away since %02d : %02d ( %s ) )", tt.hour, tt.min, tim_zone); 273 away_m=1; 274 if(CurrentStatus!=2) 275 { 276 status_rem=CurrentStatus; 277 CurrentStatus=2; 278 set_my_status(); 279 change_back_status=1; 280 } 281 } 282 283 int my_keyhook(int key, int m) 284 { 285 if (m==KEY_DOWN) 286 { 287 if(change_back_status==1) 288 { 289 CurrentStatus=status_rem; 290 set_my_status(); 291 change_back_status=0; 292 } 293 #ifdef ELKA 294 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) 295 { 296 msg_away_timer=AUTO_ENGADE; 297 away_engage(); 298 } 299 else 300 #endif 301 msg_away_timer=away_m=0; 302 } 303 return 0; 304 } 305 306 void init_time_zone() 307 { 308 switch(time_zone) 309 { 310 case 0: 311 sprintf(tim_zone, "GMT -12:00"); 312 break; 313 case 1: 314 sprintf(tim_zone, "GMT -11:00"); 315 break; 316 case 2: 317 sprintf(tim_zone, "GMT -10:00"); 318 break; 319 case 3: 320 sprintf(tim_zone, "GMT -09:00"); 321 break; 322 case 4: 323 sprintf(tim_zone, "GMT -08:00"); 324 break; 325 case 5: 326 sprintf(tim_zone, "GMT -07:00"); 327 break; 328 case 6: 329 sprintf(tim_zone, "GMT -06:00"); 330 break; 331 case 7: 332 sprintf(tim_zone, "GMT -05:00"); 333 break; 334 case 8: 335 sprintf(tim_zone, "GMT -04:00"); 336 break; 337 case 9: 338 sprintf(tim_zone, "GMT -03:30"); 339 break; 340 case 10: 341 sprintf(tim_zone, "GMT -03:00"); 342 break; 343 case 11: 344 sprintf(tim_zone, "GMT -02:00"); 345 break; 346 case 12: 347 sprintf(tim_zone, "GMT -01:00"); 348 break; 349 case 13: 350 sprintf(tim_zone, "GMT 00:00"); 351 break; 352 case 14: 353 sprintf(tim_zone, "GMT +01:00"); 354 break; 355 case 15: 356 sprintf(tim_zone, "GMT +02:00"); 357 break; 358 case 16: 359 sprintf(tim_zone, "GMT +03:00"); 360 break; 361 case 17: 362 sprintf(tim_zone, "GMT +03:30"); 363 break; 364 case 18: 365 sprintf(tim_zone, "GMT +04:00"); 366 break; 367 case 19: 368 sprintf(tim_zone, "GMT +04:30"); 369 break; 370 case 20: 371 sprintf(tim_zone, "GMT +05:00"); 372 break; 373 case 21: 374 sprintf(tim_zone, "GMT +05:30"); 375 break; 376 case 22: 377 sprintf(tim_zone, "GMT +05:45"); 378 break; 379 case 23: 380 sprintf(tim_zone, "GMT +06:00"); 381 break; 382 case 24: 383 sprintf(tim_zone, "GMT +06:30"); 384 break; 385 case 25: 386 sprintf(tim_zone, "GMT +07:00"); 387 break; 388 case 26: 389 sprintf(tim_zone, "GMT +08:00"); 390 break; 391 case 27: 392 sprintf(tim_zone, "GMT +09:00"); 393 break; 394 case 28: 395 sprintf(tim_zone, "GMT +09:30"); 396 break; 397 case 29: 398 sprintf(tim_zone, "GMT +10:00"); 399 break; 400 case 30: 401 sprintf(tim_zone, "GMT +11:00"); 402 break; 403 case 31: 404 sprintf(tim_zone, "GMT +12:00"); 405 break; 406 case 32: 407 sprintf(tim_zone, "GMT +13:00"); 408 break; 409 } 410 } 411 //==================================autostatus============= 412 //============================init extended sounds============= 413 void Init_Ext_Sounds(void) 414 { 415 total_count=0; 416 in_ext=0; 417 // unsigned int uli; 418 char msgboxer[64]; 419 CLIST *t; 420 t=(CLIST *)(&cltop); 421 while(t=(CLIST *)(t->next)) 422 { 423 if(!t->isgroup) 424 { 425 total_count++; 426 volatile int hFile_ex; 427 unsigned int io_error_ex = 0; 428 sprintf(ext_sound, "%s%d.wav", sndMsg2, t->uin); 429 hFile_ex = fopen(ext_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 430 if(hFile_ex!=-1) 431 { 432 in_ext++; 433 t->ext_snd=1; 434 fclose(hFile_ex, &io_error_ex); 435 } 436 else 437 t->ext_snd=0; 438 } 439 } 440 sprintf(msgboxer, "Complete!\n" 441 "Enabled for:\n" 442 "%d / %d contacts", 443 in_ext, total_count); 444 sprintf(LG_MENU2, "Меню ", in_ext, total_count); 445 ShowMSG(1,(int)msgboxer); 446 } 447 //============================init extended sounds============= 448 //=========================end of modification functions 449 #endif 450 451 char hostname[128]; 452 extern volatile int total_smiles; 453 extern volatile int total_xstatuses; 454 extern volatile int xstatuses_load; 455 456 #define USE_MLMENU 457 458 #define TMR_SECOND 216 459 460 //IPC 461 const char ipc_my_name[32]=IPC_NATICQ_NAME; 462 const char ipc_xtask_name[]=IPC_XTASK_NAME; 463 IPC_REQ gipc; 464 465 466 char elf_path[256]; 467 int maincsm_id; 468 int maingui_id; 469 \ In segment CODE, align 4, keep-with-next 470 void SMART_REDRAW(void) 471 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 472 int f; 473 LockSched(); \ 00000004 460100EF SWI +326 474 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 208 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 475 UnlockSched(); \ 00000018 470100EF SWI +327 476 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 477 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 208 478 479 //По 10 секунд 480 #ifdef EVILFOX 481 #define ACTIVE_TIME 30 482 #else 483 #define ACTIVE_TIME 360 484 #endif 485 486 //Максимальное количество сообщений в логе 487 #define MAXLOGMSG (20) 488 489 // Строковые описания статусов 490 491 const char S_OFFLINE[]="Offline"; 492 const char S_INVISIBLE[]="Invisible"; 493 const char S_AWAY[]="Away"; 494 const char S_NA[]="N/A"; 495 const char S_OCCUPIED[]="Occupied"; 496 const char S_DND[]="DND"; 497 const char S_ONLINE[]="Online"; 498 const char S_FFC[]="FFC"; 499 500 volatile int SENDMSGCOUNT; 501 502 int IsActiveUp=0; 503 504 int Is_Vibra_Enabled; 505 unsigned int Is_Sounds_Enabled; 506 int Is_Show_Offline; 507 int Is_Show_Groups; 508 509 int S_ICONS[TOTAL_ICONS+1]; 510 511 512 513 WSHDR *ews; 514 515 extern const unsigned int UIN; 516 extern const char PASS[]; 517 518 static const char * const icons_names[TOTAL_ICONS]= 519 { 520 "offline.png", 521 "invisible.png", 522 "away.png", 523 "na.png", 524 "occupied.png", 525 "dnd.png", 526 "depression.png", 527 "evil.png", 528 "home.png", 529 "lunch.png", 530 "work.png", 531 "online.png", 532 "ffc.png", 533 "message.png", 534 "unknown.png", 535 "groupon.png", 536 "groupoff.png", 537 "null.png", 538 "addcont.png", 539 "head.png", 540 "logo.png", 541 "ping.png", 542 "settings.png", 543 "vis1.png", 544 "vis2.png", 545 "vis3.png", 546 "vis4.png", 547 "vis5.png" 548 }; 549 550 extern const char ICON_PATH[]; 551 \ In segment CODE, align 4, keep-with-next 552 void setup_ICONS(void) 553 { \ setup_ICONS: \ 00000000 70402DE9 PUSH {R4-R6,LR} 554 int i=0; \ 00000004 ........ LDR R4,??DataTable1 ;; S_ICONS \ 00000008 34509FE5 LDR R5,??setup_ICONS_0 ;; icons_names \ 0000000C 1C60A0E3 MOV R6,#+28 555 do 556 { 557 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_1: \ 00000010 000094E5 LDR R0,[R4, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400001A BNE ??setup_ICONS_2 \ 0000001C 24009FE5 LDR R0,??setup_ICONS_0+0x4 ;; ICON_PATH \ 00000020 002095E5 LDR R2,[R5, #+0] \ 00000024 5C10A0E3 MOV R1,#+92 \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 000084E5 STR R0,[R4, #+0] 558 i++; 559 } 560 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 791 else 792 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 793 } 794 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 vibraPower \ 00000064 ........ DC32 stop_vibra 795 \ In segment CODE, align 4, keep-with-next 796 void stop_vibra(void) 797 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 798 extern const int VIBR_TYPE; 799 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 800 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable22 ;; S_ICONS \ 00000010 041190E5 LDR R1,[R0, #+260] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 041180E5 STR R1,[R0, #+260] \ 0000001C 0080BD08 POPEQ {PC} 801 { 802 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 1C10A0E3 MOV R1,#+28 \ 00000028 481D81E3 ORR R1,R1,#0x1200 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable11 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 803 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 804 else 805 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 806 } 807 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 808 \ In segment CODE, align 4, keep-with-next 809 void ChangeVibra(void) 810 { 811 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable22 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 E81090E5 LDR R1,[R0, #+232] \ 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 70119FE5 LDR R1,??LoadTemplates_0+0x4 ;; 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 081086E2 ADD R1,R6,#+8 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 160000EF SWI +22 855 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 856 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 857 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 858 { 859 L1: 860 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 0610A0E1 MOV R1,R6 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 861 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 862 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 863 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 864 } 865 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 866 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable22 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 080184E5 STR R0,[R4, #+264] \ 000000F8 0060A0E1 MOV R6,R0 867 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] 868 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 869 i=0; \ 00000124 0070A0E3 MOV R7,#+0 870 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 871 for(;;) 872 { 873 c=*p; 874 if (c<32) 875 { 876 if (pp&&(pp!=p)) 877 { 878 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 879 templates_lines[i++]=pp; 880 } 881 pp=NULL; 882 if (!c) break; 883 *p=0; 884 } 885 else 886 { 887 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 888 } 889 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 0C0194E5 LDR R0,[R4, #+268] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 0C0184E5 STR R0,[R4, #+268] \ 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 890 } 891 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 `?` \ 0000018C ........ DC32 TEMPLATES_PATH 892 } 893 894 895 //=================================================================== 896 897 typedef struct 898 { 899 CSM_RAM csm; 900 int gui_id; 901 }MAIN_CSM; 902 903 typedef struct 904 { 905 GUI gui; 906 WSHDR *ws1; 907 WSHDR *ws2; 908 int i1; 909 }MAIN_GUI; 910 911 912 913 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 914 \ In segment DATA_Z, align 4, align-sorted 915 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 916 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 917 918 int connect_state=0; 919 920 int sock=-1; 921 922 volatile unsigned long TOTALRECEIVED; 923 volatile unsigned long TOTALSENDED; 924 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 925 volatile unsigned long ALLTOTALSENDED; 926 927 volatile int sendq_l=0; //Длинна очереди для send 928 volatile void *sendq_p=NULL; //указатель очереди 929 930 volatile int is_gprs_online=1; 931 932 GBSTMR reconnect_tmr; 933 934 extern void kill_data(void *p,void (*func_p)(void *)); 935 \ In segment CODE, align 4, keep-with-next 936 void ElfKiller(void) 937 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 938 extern void *ELF_BEGIN; 939 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000004 158000EF SWI +32789 \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 04009FE5 LDR R0,??ElfKiller_0 ;; ELF_BEGIN \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 00000018 ........ DC32 ELF_BEGIN 940 } 941 942 943 944 //=============================================================================================== 945 #pragma inline 946 void patch_rect(RECT*rc,int x,int y, int x2, int y2) 947 { 948 rc->x=x; 949 rc->y=y; 950 rc->x2=x2; 951 rc->y2=y2; 952 } 953 954 #pragma inline 955 void patch_header(const HEADER_DESC* head) 956 { 957 ((HEADER_DESC*)head)->rc.x=0; 958 ((HEADER_DESC*)head)->rc.y=YDISP; 959 ((HEADER_DESC*)head)->rc.x2=ScreenW()-1; 960 ((HEADER_DESC*)head)->rc.y2=HeaderH()+YDISP-1; 961 } 962 #pragma inline 963 void patch_input(const INPUTDIA_DESC* inp) 964 { 965 ((INPUTDIA_DESC*)inp)->rc.x=0; 966 ((INPUTDIA_DESC*)inp)->rc.y=HeaderH()+1+YDISP; 967 ((INPUTDIA_DESC*)inp)->rc.x2=ScreenW()-1; 968 ((INPUTDIA_DESC*)inp)->rc.y2=ScreenH()-SoftkeyH()-1; 969 } 970 //=============================================================================================== 971 972 973 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 974 975 volatile int contactlist_menu_id; 976 977 GBSTMR tmr_active; 978 979 volatile int edchat_id; 980 981 //Применяется для добавления сообщений 982 //CLIST *edcontact; 983 //void *edgui_data; 984 985 static int prev_clmenu_itemcount; 986 987 char clm_hdr_text[48]; 988 static const char def_clm_hdr_text[] = LG_CLTITLE; 989 static const char key_clm_hdr_text[] = LG_CLT9INP; 990 991 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 992 static const int menusoftkeys[] = {0,1,2}; 993 static const SOFTKEY_DESC menu_sk[] = 994 { 995 {0x0018, 0x0000, (int)LG_SELECT}, 996 {0x0001, 0x0000, (int)LG_CLOSE}, 997 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 998 }; 999 1000 char clmenu_sk_r[16]; 1001 static const char def_clmenu_sk_r[] = LG_CLOSE; 1002 static const char key_clmenu_sk_r[] = LG_CLEAR; 1003 1004 static const SOFTKEY_DESC clmenu_sk[]= 1005 { 1006 {0x0018, 0x0000, (int)LG_OPTIONS}, 1007 {0x0001, 0x0000, (int)clmenu_sk_r}, 1008 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1009 }; 1010 1011 const SOFTKEYSTAB menu_skt = 1012 { 1013 menu_sk, 0 1014 }; 1015 1016 static const SOFTKEYSTAB clmenu_skt = 1017 { 1018 clmenu_sk, 0 1019 }; 1020 1021 void contactlist_menu_ghook(void *data, int cmd); 1022 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 1023 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 1024 1025 #ifdef USE_MLMENU 1026 static const ML_MENU_DESC contactlist_menu= 1027 { 1028 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1029 menusoftkeys, 1030 &clmenu_skt, 1031 0x11, //+0x400 1032 contactlist_menu_iconhndl, 1033 NULL, //Items 1034 NULL, //Procs 1035 0, //n 1036 1 //Добавочных строк 1037 }; 1038 #else 1039 static const MENU_DESC contactlist_menu= 1040 { 1041 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1042 menusoftkeys, 1043 &clmenu_skt, 1044 0x11, //+0x400 1045 contactlist_menu_iconhndl, 1046 NULL, //Items 1047 NULL, //Procs 1048 0 //n 1049 }; 1050 #endif 1051 1052 //GBSTMR tmr_ping; 1053 int tenseconds_to_ping; 1054 \ In segment CODE, align 4, keep-with-next 1055 LOGQ *NewLOGQ(const char *s) 1056 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1057 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 1058 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1059 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1060 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1061 } 1062 \ In segment CODE, align 4, keep-with-next 1063 LOGQ *LastLOGQ(LOGQ **pp) 1064 { 1065 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1066 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1067 { 1068 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 1069 } 1070 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1071 } 1072 1073 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1074 void FreeLOGQ(LOGQ **pp) 1075 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1076 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1077 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1078 while(p) 1079 { 1080 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1081 mfree(p); \ 00000020 150000EF SWI +21 1082 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1083 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1084 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1085 1086 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1087 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1088 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1089 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1090 LOGQ *qp; 1091 while(qp=q->next) 1092 { 1093 if (qp==p) 1094 { 1095 q->next=p->next; 1096 break; 1097 } 1098 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] 1099 } 1100 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1101 } \ 00000030 0080BDE8 POP {PC} ;; return 1102 1103 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1104 int AddLOGQ(LOGQ **queue, LOGQ *p) 1105 { 1106 LOGQ *q=(LOGQ *)queue; 1107 LOGQ *qp; 1108 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1109 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 1110 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1111 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1112 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1113 } 1114 1115 //Получаем последний полученный X-статус \ In segment CODE, align 4, keep-with-next 1116 char *GetLastXTextLOGQ(CLIST *t) 1117 { 1118 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 701090E5 LDR R1,[R0, #+112] 1119 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1120 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1121 while(p->next) 1122 { 1123 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1124 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1125 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1126 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1127 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1128 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1129 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1130 } 1131 \ In segment CODE, align 4, keep-with-next 1132 int GetIconIndex(CLIST *t) 1133 { 1134 unsigned short s; 1135 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1136 { 1137 s=t->state; 1138 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 1139 if (t->isunread) \ 0000001C 580090E5 LDR R0,[R0, #+88] \ 00000020 000050E3 CMP R0,#+0 1140 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1141 else 1142 { 1143 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 1144 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 1145 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1146 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1147 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1148 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 1149 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 1150 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1151 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1152 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1153 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1154 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1155 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1156 } 1157 } 1158 else 1159 { 1160 return(IS_UNKNOWN); 1161 } 1162 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1163 } 1164 \ In segment CODE, align 4, keep-with-next 1165 LOGQ *FindContactLOGQByAck(TPKT *p) 1166 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1167 CLIST *t; 1168 LockSched(); \ 00000008 460100EF SWI +326 1169 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1170 UnlockSched(); \ 00000018 470100EF SWI +327 1171 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1172 LOGQ *q; 1173 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1174 LockSched(); \ 0000002C 460100EF SWI +326 1175 q=t->log; \ 00000030 705095E5 LDR R5,[R5, #+112] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1176 while(q) 1177 { 1178 if (q->ID==id) break; 1179 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 1180 } 1181 UnlockSched(); \ 0000004C 470100EF SWI +327 1182 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1183 } 1184 1185 1186 char ContactT9Key[32]; 1187 \ In segment CODE, align 4, keep-with-next 1188 void UpdateCLheader(void) 1189 { \ UpdateCLheader: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 1190 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R4,??DataTable22 ;; S_ICONS \ 00000008 68709FE5 LDR R7,??UpdateCLheader_0 ;; key_clmenu_sk_r \ 0000000C 7C00A0E3 MOV R0,#+124 \ 00000010 480D80E3 ORR R0,R0,#0x1200 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 3000C0E3 BIC R0,R0,#0x30 \ 0000001C 046080E0 ADD R6,R0,R4 \ 00000020 A88FA0E3 MOV R8,#+672 \ 00000024 040088E0 ADD R0,R8,R4 \ 00000028 1B0000EF SWI +27 \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 0900000A BEQ ??UpdateCLheader_1 1191 { 1192 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000034 0C1087E2 ADD R1,R7,#+12 \ 00000038 0600A0E1 MOV R0,R6 \ 0000003C 1A0000EF SWI +26 1193 strcat(clm_hdr_text,ContactT9Key); \ 00000040 041088E0 ADD R1,R8,R4 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 170000EF SWI +23 1194 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 0000004C 0710A0E1 MOV R1,R7 \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 1A0000EF SWI +26 \ 00000058 F081BDE8 POP {R4-R8,PC} 1195 } 1196 else 1197 { 1198 #ifdef EVILFOX 1199 if(TIME_OR_MSG) 1200 { 1201 if(total_c_online>0) 1202 sprintf(clm_hdr_text, "%s(%d/%d) On:%02d",def_clm_hdr_text,total_unread,total_unread2, total_c_online); 1203 else 1204 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); 1205 } 1206 else 1207 { 1208 TTime the; 1209 GetDateTime(NULL,&the); 1210 if(total_c_online>0) 1211 sprintf(clm_hdr_text, "%s(%02d:%02d) On:%02d",def_clm_hdr_text, the.hour, the.min, total_c_online); 1212 else 1213 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); 1214 } 1215 #else 1216 strcpy(clm_hdr_text,def_clm_hdr_text); \ ??UpdateCLheader_1: \ 0000005C 041087E2 ADD R1,R7,#+4 \ 00000060 0600A0E1 MOV R0,R6 \ 00000064 1A0000EF SWI +26 1217 #endif 1218 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ 00000068 181087E2 ADD R1,R7,#+24 \ 0000006C 0500A0E1 MOV R0,R5 \ 00000070 1A0000EF SWI +26 1219 } 1220 } \ 00000074 F081BDE8 POP {R4-R8,PC} ;; return \ ??UpdateCLheader_0: \ 00000078 ........ DC32 key_clmenu_sk_r 1221 \ In segment CODE, align 4, keep-with-next 1222 void ClearContactT9Key(void) 1223 { 1224 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 672 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1225 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 672 1226 \ In segment CODE, align 4, keep-with-next 1227 void AddContactT9Key(int chr) 1228 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1229 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable22 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C A80F85E2 ADD R0,R5,#+672 \ 00000010 1B0000EF SWI +27 1230 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 1231 { 1232 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C A042C035 STRBCC R4,[R0, #+672] 1233 } 1234 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 1235 \ In segment CODE, align 4, keep-with-next 1236 void BackSpaceContactT9(void) 1237 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1238 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable22 ;; S_ICONS \ 00000008 A80F84E2 ADD R0,R4,#+672 \ 0000000C 1B0000EF SWI +27 1239 if (l) \ 00000010 000050E3 CMP R0,#+0 1240 { 1241 l--; 1242 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C 9F12C015 STRBNE R1,[R0, #+671] 1243 } 1244 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1245 \ In segment CODE, align 4, keep-with-next 1246 void create_contactlist_menu(void) 1247 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1248 int i; 1249 i=CountContacts(); 1250 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable22 ;; S_ICONS 1251 UpdateCLheader(); 1252 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 444185E5 STR R4,[R5, #+324] \ 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] 1253 #ifdef USE_MLMENU 1254 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 3C0185E5 STR R0,[R5, #+316] 1255 #else 1256 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 1257 #endif 1258 } \ 00000064 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000068 ........ DC32 contactlist_menuhdr 1259 \ In segment CODE, align 4, keep-with-next 1260 void contactlist_menu_ghook(void *data, int cmd) 1261 { \ contactlist_menu_ghook: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 1262 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 1263 if (cmd==9) \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 090054E3 CMP R4,#+9 1264 { 1265 pltop->dyn_pltop=NULL; \ 00000014 08108005 STREQ R1,[R0, #+8] \ 00000018 1080BD08 POPEQ {R4,PC} 1266 } 1267 if (cmd==0x0A) \ 0000001C 0A0054E3 CMP R4,#+10 \ 00000020 1080BD18 POPNE {R4,PC} 1268 { 1269 silenthide=0; \ 00000024 14209FE5 LDR R2,??contactlist_menu_ghook_0 ;; S_ICONS + 224 \ 00000028 001082E5 STR R1,[R2, #+0] 1270 pltop->dyn_pltop=XStatusesImgList; \ 0000002C ........ LDR R1,??DataTable20 ;; XStatusesImgList \ 00000030 001091E5 LDR R1,[R1, #+0] \ 00000034 081080E5 STR R1,[R0, #+8] 1271 DisableIDLETMR(); \ 00000038 7F0100EF SWI +383 1272 } 1273 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??contactlist_menu_ghook_0: \ 00000040 ........ DC32 S_ICONS + 224 1274 \ In segment CODE, align 4, keep-with-next 1275 void RecountMenu(CLIST *req, int needfocus) 1276 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1277 int i; 1278 int j; 1279 void *data; 1280 UpdateCLheader(); 1281 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable22 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 3C0196E5 LDR R0,[R6, #+316] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 1282 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 3C0196E5 LDR R0,[R6, #+316] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 1283 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 1284 { 1285 j=0; 1286 } 1287 else 1288 { 1289 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 1290 } 1291 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 1292 if (j>=i) j=i-1; 1293 if (j<0) j=0; 1294 if (i!=prev_clmenu_itemcount) \ 00000048 441196E5 LDR R1,[R6, #+324] \ 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 1295 { 1296 prev_clmenu_itemcount=i; \ 00000064 440186E5 STR R0,[R6, #+324] 1297 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 1298 } 1299 if(needfocus) SetCursorToMenuItem(data,j); \ ??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 1300 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 3C0196E5 LDR R0,[R6, #+316] \ 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 1301 } 1302 \ In segment CODE, align 4, keep-with-next 1303 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 1304 { \ contactlist_menu_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0140A0E1 MOV R4,R1 1305 CLIST *t; 1306 int i; 1307 i=GetCurMenuItem(data); \ 00000008 8F0100EF SWI +399 1308 t=FindContactByN(i); \ 0000000C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000010 0050A0E1 MOV R5,R0 1309 if (msg->keys==0x18) \ 00000014 F200D4E1 LDRSH R0,[R4, #+2] \ 00000018 180050E3 CMP R0,#+24 \ 0000001C 0100001A BNE ??contactlist_menu_onkey_0 1310 { 1311 ShowMainMenu(); \ 00000020 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 1312 return(-1); \ 00000024 270000EA B ??contactlist_menu_onkey_1 1313 } 1314 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_0: \ 00000028 ........ LDR R8,??DataTable22 ;; S_ICONS \ 0000002C FF60A0E3 MOV R6,#+255 \ 00000030 FF6C86E3 ORR R6,R6,#0xFF00 \ 00000034 A87FA0E3 MOV R7,#+672 \ 00000038 3D0050E3 CMP R0,#+61 \ 0000003C 2300001A BNE ??contactlist_menu_onkey_2 1315 { 1316 if (t) \ 00000040 000055E3 CMP R5,#+0 \ 00000044 2B00000A BEQ ??contactlist_menu_onkey_3 1317 { 1318 if (t->isgroup) \ 00000048 080095E5 LDR R0,[R5, #+8] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 0500000A BEQ ??contactlist_menu_onkey_4 1319 { 1320 t->state^=0xFFFF; \ 00000054 B405D5E1 LDRH R0,[R5, #+84] 1321 RecountMenu(t, 1); \ 00000058 0110A0E3 MOV R1,#+1 \ 0000005C 000026E0 EOR R0,R6,R0 \ 00000060 B405C5E1 STRH R0,[R5, #+84] \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 210000EA B ??contactlist_menu_onkey_5 1322 return(-1); 1323 } 1324 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_4: \ 0000006C 080087E0 ADD R0,R7,R8 \ 00000070 1B0000EF SWI +27 \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0500000A BEQ ??contactlist_menu_onkey_6 1325 { 1326 ClearContactT9Key(); \ 0000007C 2010A0E3 MOV R1,#+32 \ 00000080 080087E0 ADD R0,R7,R8 \ 00000084 1D0100EF SWI +285 1327 RecountMenu(NULL, 1); \ 00000088 0110A0E3 MOV R1,#+1 \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 ........ BL RecountMenu 1328 } 1329 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_2: \ 000000D0 010050E3 CMP R0,#+1 \ 000000D4 0900001A BNE ??contactlist_menu_onkey_8 1335 { 1336 if (strlen(ContactT9Key)) \ 000000D8 080087E0 ADD R0,R7,R8 \ 000000DC 1B0000EF SWI +27 \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 0500000A BEQ ??contactlist_menu_onkey_8 1337 { 1338 BackSpaceContactT9(); \ 000000E8 ........ BL BackSpaceContactT9 1339 RecountMenu(NULL, 1); \ 000000EC 0110A0E3 MOV R1,#+1 \ 000000F0 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_5: \ 000000F4 ........ BL RecountMenu 1340 return(-1); \ ??contactlist_menu_onkey_3: \ 000000F8 0000E0E3 MVN R0,#+0 \ 000000FC F08FBDE8 POP {R4-R11,PC} 1341 } 1342 } 1343 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_8: \ 00000100 040094E5 LDR R0,[R4, #+4] \ 00000104 ........ LDR R9,??DataTable26 ;; Canvas \ 00000108 041090E5 LDR R1,[R0, #+4] \ 0000010C 00A0A0E3 MOV R10,#+0 \ 00000110 01B0A0E3 MOV R11,#+1 \ 00000114 9320A0E3 MOV R2,#+147 \ 00000118 402F82E3 ORR R2,R2,#0x100 \ 0000011C 020051E1 CMP R1,R2 \ 00000120 2600001A BNE ??contactlist_menu_onkey_9 1344 { 1345 int key=msg->gbsmsg->submess; \ 00000124 080090E5 LDR R0,[R0, #+8] 1346 #ifdef EVILFOX 1347 if ((key>='0')&&(key<='9')) 1348 #else 1349 if (((key>='0')&&(key<='9'))||(key=='#')||(key=='*')) \ 00000128 081095E5 LDR R1,[R5, #+8] \ 0000012C 300050E3 CMP R0,#+48 \ 00000130 070000BA BLT ??contactlist_menu_onkey_10 \ 00000134 3A0050E3 CMP R0,#+58 \ 00000138 080000BA BLT ??contactlist_menu_onkey_11 1350 #endif 1351 { 1352 AddContactT9Key(key); 1353 RecountMenu(NULL, 1); 1354 return(-1); 1355 } 1356 if (key==VOL_UP_BUTTON) 1357 { 1358 char *small_info=malloc(256); 1359 sprintf(small_info, "Online time:\n" 1360 "%02d:%02d:%02d\n" 1361 "Server:\n" 1362 "%s" 1363 , hours, minutes, seconds, hostname); 1364 ShowMSG(1,(int)small_info); 1365 mfree(small_info); 1366 } 1367 if (key==LEFT_BUTTON) \ 0000013C 3D0050E3 CMP R0,#+61 \ 00000140 4600001A BNE ??contactlist_menu_onkey_12 1368 { 1369 #ifdef EVILFOX 1370 while(t=(CLIST *)(t->next)) 1371 { 1372 if (t->isunread) goto doit; 1373 } 1374 t=(CLIST *)(&cltop); 1375 while(t=(CLIST *)(t->next)) 1376 { 1377 if (t->isunread) goto doit; 1378 } 1379 t=(CLIST *)(&cltop); 1380 if(Is_Show_Groups) 1381 { 1382 while(t=(CLIST *)(t->next)) 1383 { 1384 if (t->isgroup) 1385 { 1386 if(!t->state) 1387 t->state^=0xFFFF; 1388 } 1389 } 1390 } 1391 goto doit2; 1392 doit: 1393 { 1394 CLIST *g=FindGroupByID(t->group); 1395 if (g) 1396 { 1397 if (g->state) 1398 { 1399 g->state=0; 1400 } 1401 } 1402 } 1403 doit2: 1404 RecountMenu(t, 1); 1405 #else 1406 IsActiveUp=!IsActiveUp; \ 00000144 D80098E5 LDR R0,[R8, #+216] \ 00000148 000050E3 CMP R0,#+0 \ 0000014C 00B0A013 MOVNE R11,#+0 \ 00000150 3C0000EA B ??contactlist_menu_onkey_13 \ ??contactlist_menu_onkey_10: \ 00000154 230050E3 CMP R0,#+35 \ 00000158 2A005013 CMPNE R0,#+42 \ 0000015C 0100001A BNE ??contactlist_menu_onkey_14 \ ??contactlist_menu_onkey_11: \ 00000160 ........ BL AddContactT9Key \ 00000164 380000EA B ??contactlist_menu_onkey_15 \ ??contactlist_menu_onkey_14: \ 00000168 0D0050E3 CMP R0,#+13 \ 0000016C 4900001A BNE ??contactlist_menu_onkey_16 \ 00000170 400FA0E3 MOV R0,#+256 \ 00000174 140000EF SWI +20 \ 00000178 0050A0E1 MOV R5,R0 \ 0000017C 8C00A0E3 MOV R0,#+140 \ 00000180 400D80E3 ORR R0,R0,#0x1000 \ 00000184 080080E0 ADD R0,R0,R8 \ 00000188 01002DE9 PUSH {R0} \ 0000018C 9C0098E5 LDR R0,[R8, #+156] \ 00000190 631F89E2 ADD R1,R9,#+396 \ 00000194 01002DE9 PUSH {R0} \ 00000198 A03098E5 LDR R3,[R8, #+160] \ 0000019C A42098E5 LDR R2,[R8, #+164] \ 000001A0 0500A0E1 MOV R0,R5 \ 000001A4 160000EF SWI +22 \ 000001A8 0510A0E1 MOV R1,R5 \ 000001AC 0100A0E3 MOV R0,#+1 \ 000001B0 480100EF SWI +328 \ 000001B4 0500A0E1 MOV R0,R5 \ 000001B8 150000EF SWI +21 \ 000001BC 08D08DE2 ADD SP,SP,#+8 1407 RecountMenu(NULL, 1); 1408 #endif 1409 return(-1); 1410 } 1411 #ifdef EVILFOX 1412 if (key=='*') 1413 { 1414 while(t=(CLIST *)(t->next)) 1415 { 1416 if (t->just_now) goto doit3; 1417 } 1418 t=(CLIST *)(&cltop); 1419 while(t=(CLIST *)(t->next)) 1420 { 1421 if (t->just_now) goto doit3; 1422 } 1423 return(-1); 1424 doit3: 1425 { 1426 CLIST *g=FindGroupByID(t->group); 1427 if (g) 1428 { 1429 if (g->state) 1430 { 1431 g->state=0; 1432 } 1433 } 1434 } 1435 RecountMenu(t, 1); 1436 return(-1); 1437 } 1438 if (key=='#') 1439 { 1440 while(t=(CLIST *)(t->next)) 1441 { 1442 if (t->isactive) goto doit4; 1443 } 1444 t=(CLIST *)(&cltop); 1445 while(t=(CLIST *)(t->next)) 1446 { 1447 if (t->isactive) goto doit4; 1448 } 1449 return(-1); 1450 doit4: 1451 { 1452 CLIST *g=FindGroupByID(t->group); 1453 if (g) 1454 { 1455 if (g->state) 1456 { 1457 g->state=0; 1458 } 1459 } 1460 } 1461 RecountMenu(t, 1); 1462 return(-1); 1463 } 1464 #endif 1465 if (key==RIGHT_BUTTON) 1466 { 1467 //Послать запрос текста XStatus 1468 if (t) 1469 { 1470 if (!t->isgroup) 1471 { 1472 FreeXText(t); 1473 t->req_xtext=0; 1474 RequestXText(t->uin); 1475 RefreshGUI(); 1476 return(-1); 1477 } 1478 } 1479 } 1480 if (key==GREEN_BUTTON) 1481 { 1482 #ifdef EVILFOX 1483 IsActiveUp=!IsActiveUp; 1484 RecountMenu(NULL, 1); 1485 #else 1486 if (t && Is_Show_Groups) {//есть контакт и показываем группы? 1487 if (!t->isgroup) 1488 t=FindGroupByID(t->group); 1489 if (t && !t->state) {//группа нашлась и она открыта? 1490 t->state^=0xFFFF; 1491 RecountMenu(t, 1); 1492 } 1493 } 1494 #endif 1495 return(-1); 1496 } 1497 } 1498 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_9: \ 000001C0 040094E5 LDR R0,[R4, #+4] \ 000001C4 652F8BE3 ORR R2,R11,#0x194 \ 000001C8 041090E5 LDR R1,[R0, #+4] \ 000001CC 020051E1 CMP R1,R2 \ 000001D0 5700001A BNE ??contactlist_menu_onkey_17 1499 { 1500 if (msg->gbsmsg->submess=='#') \ 000001D4 081090E5 LDR R1,[R0, #+8] \ 000001D8 0940A0E3 MOV R4,#+9 \ 000001DC 424C84E3 ORR R4,R4,#0x4200 \ 000001E0 B050A0E3 MOV R5,#+176 \ 000001E4 DE5C85E3 ORR R5,R5,#0xDE00 \ 000001E8 756FA0E3 MOV R6,#+468 \ 000001EC 230051E3 CMP R1,#+35 \ 000001F0 3C00001A BNE ??contactlist_menu_onkey_18 1501 { 1502 ClearContactT9Key(); \ 000001F4 2010A0E3 MOV R1,#+32 \ 000001F8 080087E0 ADD R0,R7,R8 \ 000001FC 1D0100EF SWI +285 1503 RecountMenu(NULL, 1); \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0A00A0E1 MOV R0,R10 \ 00000208 ........ BL RecountMenu 1504 gipc.name_to=ipc_xtask_name; \ 0000020C 090086E0 ADD R0,R6,R9 \ 00000210 740088E5 STR R0,[R8, #+116] 1505 gipc.name_from=ipc_my_name; \ 00000214 6D0F89E2 ADD R0,R9,#+436 \ 00000218 780088E5 STR R0,[R8, #+120] 1506 gipc.data=0; \ 0000021C 7CA088E5 STR R10,[R8, #+124] 1507 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000220 743088E2 ADD R3,R8,#+116 \ 00000224 0B20A0E1 MOV R2,R11 \ 00000228 0510A0E1 MOV R1,R5 \ 0000022C 0400A0E1 MOV R0,R4 \ 00000230 000100EF SWI +256 1508 if (IsUnlocked()) \ 00000234 430000EF SWI +67 \ 00000238 000050E3 CMP R0,#+0 \ 0000023C ADFFFF0A BEQ ??contactlist_menu_onkey_3 1509 { 1510 KbdLock(); \ 00000240 A90000EF SWI +169 \ 00000244 9FFFFFEA B ??contactlist_menu_onkey_1 1511 } 1512 return(-1); 1513 } \ ??contactlist_menu_onkey_13: \ 00000248 D8B088E5 STR R11,[R8, #+216] \ ??contactlist_menu_onkey_15: \ 0000024C 0110A0E3 MOV R1,#+1 \ 00000250 0000A0E3 MOV R0,#+0 \ 00000254 ........ BL RecountMenu \ 00000258 0A00E0E1 MVN R0,R10 \ 0000025C F08FBDE8 POP {R4-R11,PC} \ ??contactlist_menu_onkey_12: \ 00000260 3E0050E3 CMP R0,#+62 \ 00000264 D5FFFF1A BNE ??contactlist_menu_onkey_9 \ 00000268 000055E3 CMP R5,#+0 \ 0000026C D3FFFF0A BEQ ??contactlist_menu_onkey_9 \ 00000270 000051E3 CMP R1,#+0 \ 00000274 D1FFFF1A BNE ??contactlist_menu_onkey_9 \ 00000278 0500A0E1 MOV R0,R5 \ 0000027C ........ _BLF FreeXText,??FreeXText??rA \ 00000280 88A085E5 STR R10,[R5, #+136] \ 00000284 0C0095E5 LDR R0,[R5, #+12] \ 00000288 ........ BL RequestXText \ 0000028C 960100EF SWI +406 \ 00000290 0A00E0E1 MVN R0,R10 \ 00000294 F08FBDE8 POP {R4-R11,PC} \ ??contactlist_menu_onkey_16: \ 00000298 0B0050E3 CMP R0,#+11 \ 0000029C C7FFFF1A BNE ??contactlist_menu_onkey_9 \ 000002A0 000055E3 CMP R5,#+0 \ 000002A4 F4009815 LDRNE R0,[R8, #+244] \ 000002A8 00005013 CMPNE R0,#+0 \ 000002AC 91FFFF0A BEQ ??contactlist_menu_onkey_3 \ 000002B0 000051E3 CMP R1,#+0 \ 000002B4 0300001A BNE ??contactlist_menu_onkey_19 \ 000002B8 100095E5 LDR R0,[R5, #+16] \ 000002BC ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000002C0 0050B0E1 MOVS R5,R0 \ 000002C4 8BFFFF0A BEQ ??contactlist_menu_onkey_3 \ ??contactlist_menu_onkey_19: \ 000002C8 B405D5E1 LDRH R0,[R5, #+84] \ 000002CC 000050E3 CMP R0,#+0 \ 000002D0 88FFFF1A BNE ??contactlist_menu_onkey_3 \ 000002D4 B465C5E1 STRH R6,[R5, #+84] \ 000002D8 0110A0E3 MOV R1,#+1 \ 000002DC 0500A0E1 MOV R0,R5 \ 000002E0 ........ BL RecountMenu \ 000002E4 77FFFFEA B ??contactlist_menu_onkey_1 1514 if (msg->gbsmsg->submess=='*'){ \ ??contactlist_menu_onkey_18: \ 000002E8 2A0051E3 CMP R1,#+42 \ 000002EC 1000001A BNE ??contactlist_menu_onkey_17 1515 ClearContactT9Key(); \ 000002F0 2010A0E3 MOV R1,#+32 \ 000002F4 080087E0 ADD R0,R7,R8 \ 000002F8 1D0100EF SWI +285 1516 RecountMenu(NULL, 1); \ 000002FC 0110A0E3 MOV R1,#+1 \ 00000300 0A00A0E1 MOV R0,R10 \ 00000304 ........ BL RecountMenu 1517 silenthide=1; \ 00000308 E0B088E5 STR R11,[R8, #+224] 1518 gipc.name_to=ipc_xtask_name; \ 0000030C 090086E0 ADD R0,R6,R9 \ 00000310 740088E5 STR R0,[R8, #+116] 1519 gipc.name_from=ipc_my_name; \ 00000314 6D0F89E2 ADD R0,R9,#+436 \ 00000318 780088E5 STR R0,[R8, #+120] 1520 gipc.data=0; \ 0000031C 7CA088E5 STR R10,[R8, #+124] 1521 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000320 743088E2 ADD R3,R8,#+116 \ 00000324 0B20A0E1 MOV R2,R11 \ 00000328 0510A0E1 MOV R1,R5 \ 0000032C 0400A0E1 MOV R0,R4 \ 00000330 000100EF SWI +256 1522 } 1523 } 1524 return(0); \ ??contactlist_menu_onkey_17: \ 00000334 0000A0E3 MOV R0,#+0 \ 00000338 F08FBDE8 POP {R4-R11,PC} ;; return 1525 } 1526 \ In segment CODE, align 4, keep-with-next 1527 void GetOnTotalContact(int group_id,int *_onlinetotal) 1528 { 1529 CLIST *t; 1530 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable25 ;; S_ICONS + 144 \ 00000004 30002DE9 PUSH {R4,R5} 1531 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 1532 while((t=t->next)) 1533 { 1534 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 1535 { 1536 total++; 1537 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 1538 } 1539 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 1540 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 1541 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 1542 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 1543 1544 \ In segment CODE, align 4, keep-with-next 1545 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 1546 { \ contactlist_menu_iconhndl: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 \ 00000008 0040A0E1 MOV R4,R0 1547 CLIST *t; 1548 #ifdef USE_MLMENU 1549 void *item=AllocMLMenuItem(data); 1550 #else 1551 void *item=AllocMenuItem(data); 1552 #endif 1553 int icon; 1554 1555 WSHDR *ws2; 1556 #ifdef USE_MLMENU 1557 WSHDR *ws4; 1558 #endif 1559 WSHDR ws1loc, *ws1; 1560 unsigned short num[128]; 1561 ws1=CreateLocalWS(&ws1loc,num,128); 1562 #ifdef USE_MLMENU 1563 WSHDR ws3loc, *ws3; 1564 unsigned short num3[128]; 1565 ws3=CreateLocalWS(&ws3loc,num3,128); 1566 char s[64]; 1567 #endif 1568 t=FindContactByN(curitem); 1569 if (t) \ 0000000C ........ LDR R11,??DataTable26 ;; Canvas \ 00000010 0150A0E1 MOV R5,R1 \ 00000014 190200EF SWI +537 \ 00000018 0060A0E1 MOV R6,R0 \ 0000001C 8020A0E3 MOV R2,#+128 \ 00000020 08108DE2 ADD R1,SP,#+8 \ 00000024 920F8DE2 ADD R0,SP,#+584 \ 00000028 270100EF SWI +295 \ 0000002C 0070A0E1 MOV R7,R0 \ 00000030 8020A0E3 MOV R2,#+128 \ 00000034 421F8DE2 ADD R1,SP,#+264 \ 00000038 970F8DE2 ADD R0,SP,#+604 \ 0000003C 270100EF SWI +295 \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 0500A0E1 MOV R0,R5 \ 00000048 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000004C 00A0B0E1 MOVS R10,R0 \ 00000050 4100000A BEQ ??contactlist_menu_iconhndl_0 1570 { 1571 icon=GetIconIndex(t); \ 00000054 ........ BL GetIconIndex \ 00000058 0090A0E1 MOV R9,R0 1572 if (icon!=IS_GROUP) \ 0000005C 0F0059E3 CMP R9,#+15 \ 00000060 2C00000A BEQ ??contactlist_menu_iconhndl_1 1573 { 1574 #ifdef EVILFOX 1575 if(t->just_now) 1576 { 1577 // char *test=malloc(64); 1578 sprintf(upcoming, ">> %s <<", t->name); 1579 wsprintf(ws1,percent_t,upcoming); 1580 // mfree(test); 1581 } 1582 else 1583 wsprintf(ws1,percent_t,t->name); 1584 if (t->just_now) 1585 { 1586 wsInsertChar(ws1,0x0004,1); 1587 wsInsertChar(ws1,0xE008,1); 1588 } 1589 else 1590 #else 1591 wsprintf(ws1,percent_t,t->name); \ 00000064 14208AE2 ADD R2,R10,#+20 \ 00000068 08108BE2 ADD R1,R11,#+8 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 240100EF SWI +292 1592 #endif 1593 /* if (t->isactive) 1594 { 1595 wsInsertChar(ws1,0x0002,1); 1596 wsInsertChar(ws1,0xE008,1); 1597 }*/ 1598 #ifdef USE_MLMENU 1599 if (t->xtext && t->xtext[0]!=0) \ 00000074 84009AE5 LDR R0,[R10, #+132] \ 00000078 000050E3 CMP R0,#+0 \ 0000007C 0000D015 LDRBNE R0,[R0, #+0] \ 00000080 00005013 CMPNE R0,#+0 \ 00000084 1000000A BEQ ??contactlist_menu_iconhndl_2 1600 { 1601 int i; 1602 zeromem(s,64); \ 00000088 4010A0E3 MOV R1,#+64 \ 0000008C 820F8DE2 ADD R0,SP,#+520 \ 00000090 1D0100EF SWI +285 1603 i=t->xtext[0]; \ 00000094 84009AE5 LDR R0,[R10, #+132] \ 00000098 0020D0E5 LDRB R2,[R0, #+0] 1604 if (i>63) i=63; 1605 strncpy(s,t->xtext+1,i); \ 0000009C 011080E2 ADD R1,R0,#+1 \ 000000A0 820F8DE2 ADD R0,SP,#+520 \ 000000A4 400052E3 CMP R2,#+64 \ 000000A8 3F20A0A3 MOVGE R2,#+63 \ 000000AC 160100EF SWI +278 1606 wsprintf(ws3,"%c%t",0xE012,s); \ 000000B0 823F8DE2 ADD R3,SP,#+520 \ 000000B4 1220A0E3 MOV R2,#+18 \ 000000B8 E02C82E3 ORR R2,R2,#0xE000 \ 000000BC 611F8BE2 ADD R1,R11,#+388 \ 000000C0 0800A0E1 MOV R0,R8 \ 000000C4 240100EF SWI +292 \ 000000C8 030000EA B ??contactlist_menu_iconhndl_3 1607 } 1608 else 1609 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_2: \ 000000CC 0C209AE5 LDR R2,[R10, #+12] \ 000000D0 0B108BE2 ADD R1,R11,#+11 \ 000000D4 0800A0E1 MOV R0,R8 \ 000000D8 240100EF SWI +292 1610 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_3: \ 000000DC B605DAE1 LDRH R0,[R10, #+86] \ 000000E0 ........ LDR R2,??DataTable27 ;; total_xstatuses \ 000000E4 0010A0E1 MOV R1,R0 \ 000000E8 002092E5 LDR R2,[R2, #+0] \ 000000EC 020051E1 CMP R1,R2 \ 000000F0 1C0000AA BGE ??contactlist_menu_iconhndl_4 \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 1A00000A BEQ ??contactlist_menu_iconhndl_4 1611 { 1612 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 000000FC 0120A0E3 MOV R2,#+1 \ 00000100 2A00A0E3 MOV R0,#+42 \ 00000104 E10C80E3 ORR R0,R0,#0xE100 \ 00000108 011080E0 ADD R1,R0,R1 \ 0000010C 0800A0E1 MOV R0,R8 \ 00000110 1D0000EF SWI +29 \ 00000114 130000EA B ??contactlist_menu_iconhndl_4 1613 } 1614 #endif 1615 } 1616 else 1617 { 1618 int onlinetotal[2]; 1619 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 00000118 10009AE5 LDR R0,[R10, #+16] \ 0000011C 0D10A0E1 MOV R1,SP \ 00000120 ........ BL GetOnTotalContact 1620 #ifdef USE_MLMENU 1621 wsprintf(ws1,percent_t,t->name); \ 00000124 14208AE2 ADD R2,R10,#+20 \ 00000128 08108BE2 ADD R1,R11,#+8 \ 0000012C 0700A0E1 MOV R0,R7 \ 00000130 240100EF SWI +292 1622 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 00000134 04309DE5 LDR R3,[SP, #+4] \ 00000138 00209DE5 LDR R2,[SP, #+0] \ 0000013C 5F1F8BE2 ADD R1,R11,#+380 \ 00000140 0800A0E1 MOV R0,R8 \ 00000144 240100EF SWI +292 1623 #else 1624 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 1625 #endif 1626 if (t->state) icon++; //Модификация иконки группы \ 00000148 B405DAE1 LDRH R0,[R10, #+84] \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 0400000A BEQ ??contactlist_menu_iconhndl_4 \ 00000154 019089E2 ADD R9,R9,#+1 \ 00000158 020000EA B ??contactlist_menu_iconhndl_4 1627 } 1628 } 1629 else 1630 { 1631 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 0000015C 5D1F8BE2 ADD R1,R11,#+372 \ 00000160 0700A0E1 MOV R0,R7 \ 00000164 240100EF SWI +292 1632 } 1633 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ ??contactlist_menu_iconhndl_4: \ 00000168 000097E5 LDR R0,[R7, #+0] \ 0000016C B010D0E1 LDRH R1,[R0, #+0] \ 00000170 0400A0E1 MOV R0,R4 \ 00000174 980100EF SWI +408 \ 00000178 00A0A0E1 MOV R10,R0 1634 wstrcpy(ws2,ws1); \ 0000017C 0710A0E1 MOV R1,R7 \ 00000180 1F0100EF SWI +287 1635 1636 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 00000184 ........ LDR R0,??DataTable28 ;; S_ICONS \ 00000188 0610A0E1 MOV R1,R6 \ 0000018C 092180E0 ADD R2,R0,R9, LSL #+2 \ 00000190 0400A0E1 MOV R0,R4 \ 00000194 990100EF SWI +409 1637 #ifdef USE_MLMENU 1638 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 00000198 000098E5 LDR R0,[R8, #+0] \ 0000019C B010D0E1 LDRH R1,[R0, #+0] \ 000001A0 0400A0E1 MOV R0,R4 \ 000001A4 980100EF SWI +408 \ 000001A8 0070A0E1 MOV R7,R0 1639 wstrcpy(ws4,ws3); \ 000001AC 0810A0E1 MOV R1,R8 \ 000001B0 1F0100EF SWI +287 1640 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 000001B4 20002DE9 PUSH {R5} \ 000001B8 0730A0E1 MOV R3,R7 \ 000001BC 0A20A0E1 MOV R2,R10 \ 000001C0 0610A0E1 MOV R1,R6 \ 000001C4 0400A0E1 MOV R0,R4 \ 000001C8 180200EF SWI +536 1641 #else 1642 SetMenuItemText(data, item, ws2, curitem); 1643 #endif 1644 } \ 000001CC 9DDF8DE2 ADD SP,SP,#+628 \ 000001D0 F08FBDE8 POP {R4-R11,PC} ;; return 1645 1646 //=============================================================================================== 1647 int DNR_ID=0; 1648 int DNR_TRIES=3; 1649 1650 extern const char NATICQ_HOST[]; 1651 extern const unsigned int NATICQ_PORT; 1652 1653 int host_counter = 0; 1654 1655 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1656 const char *GetHost(int cnt, const char *str, char *buf) 1657 { 1658 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 1659 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0E00001A BNE ??GetHost_0 1660 { 1661 for(;cnt;cnt--) 1662 { 1663 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); 1664 if(!*str) str = tmp; 1665 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); 1666 if(!*str) str = tmp; 1667 } 1668 } 1669 tmp = buf; \ ??GetHost_1: \ 0000000C 0200A0E1 MOV R0,R2 1670 begin = str; \ 00000010 0130A0E1 MOV R3,R1 \ 00000014 1B0000EA B ??GetHost_2 \ ??GetHost_3: \ 00000018 011081E2 ADD R1,R1,#+1 \ ??GetHost_4: \ 0000001C 00C0D1E5 LDRB R12,[R1, #+0] \ 00000020 3B005CE3 CMP R12,#+59 \ 00000024 20005C13 CMPNE R12,#+32 \ 00000028 0D005C13 CMPNE R12,#+13 \ 0000002C 0A005C13 CMPNE R12,#+10 \ 00000030 0100001A BNE ??GetHost_5 \ 00000034 00005CE3 CMP R12,#+0 \ 00000038 F6FFFF1A BNE ??GetHost_3 \ ??GetHost_5: \ 0000003C 00005CE3 CMP R12,#+0 \ 00000040 0310A001 MOVEQ R1,R3 \ 00000044 010040E2 SUB R0,R0,#+1 \ ??GetHost_0: \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0100001A BNE ??GetHost_6 \ 00000050 EDFFFFEA B ??GetHost_1 \ ??GetHost_7: \ 00000054 011081E2 ADD R1,R1,#+1 \ ??GetHost_6: \ 00000058 00C0D1E5 LDRB R12,[R1, #+0] \ 0000005C 3B005CE3 CMP R12,#+59 \ 00000060 20005C13 CMPNE R12,#+32 \ 00000064 0D005C13 CMPNE R12,#+13 \ 00000068 0A005C13 CMPNE R12,#+10 \ 0000006C 00005C13 CMPNE R12,#+0 \ 00000070 F7FFFF1A BNE ??GetHost_7 \ 00000074 00005CE3 CMP R12,#+0 \ 00000078 E7FFFF1A BNE ??GetHost_4 \ 0000007C 0310A0E1 MOV R1,R3 \ 00000080 E5FFFFEA B ??GetHost_4 1671 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_8: \ 00000084 011081E2 ADD R1,R1,#+1 \ ??GetHost_2: \ 00000088 00C0D1E5 LDRB R12,[R1, #+0] \ 0000008C 3B005CE3 CMP R12,#+59 \ 00000090 3A005C13 CMPNE R12,#+58 \ 00000094 20005C13 CMPNE R12,#+32 \ 00000098 0D005C13 CMPNE R12,#+13 \ 0000009C 0A005C13 CMPNE R12,#+10 \ 000000A0 00005C13 CMPNE R12,#+0 \ 000000A4 F6FFFF1A BNE ??GetHost_8 1672 end = str; 1673 for(;begin0x2F && attr[k]<0x3A) {ret=ret*10+attr[k]-0x30;} else { if ( attr[k]=='-') {neg=-1;} else {return(ret*neg);}} \ ??atoi_1: \ 00000010 3A0053E3 CMP R3,#+58 \ 00000014 0800002A BCS ??atoi_2 \ 00000018 9C3121E0 MLA R1,R12,R1,R3 \ 0000001C 301041E2 SUB R1,R1,#+48 \ ??atoi_3: \ 00000020 010080E2 ADD R0,R0,#+1 \ ??atoi_0: \ 00000024 0030D0E5 LDRB R3,[R0, #+0] \ 00000028 300053E3 CMP R3,#+48 \ 0000002C F7FFFF2A BCS ??atoi_1 \ 00000030 2D0053E3 CMP R3,#+45 \ 00000034 0020E003 MVNEQ R2,#+0 \ 00000038 F8FFFF0A BEQ ??atoi_3 \ ??atoi_2: \ 0000003C 920100E0 MUL R0,R2,R1 \ 00000040 1EFF2FE1 BX LR ;; return 1685 } 1686 } 1687 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1688 int GetPort(int cnt, const char *str) 1689 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 1690 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 1691 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 1692 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0C00001A BNE ??GetPort_0 \ 0000001C 1B0000EA B ??GetPort_1 1693 { 1694 for(;cnt;cnt--) 1695 { 1696 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); 1697 if(!*str) str = tmp; 1698 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetPort_2: \ 00000020 011081E2 ADD R1,R1,#+1 \ ??GetPort_3: \ 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 0100001A BNE ??GetPort_4 \ 0000003C 000054E3 CMP R4,#+0 \ 00000040 F6FFFF1A BNE ??GetPort_2 1699 if(!*str) str = tmp; \ ??GetPort_4: \ 00000044 000054E3 CMP R4,#+0 \ 00000048 0C10A001 MOVEQ R1,R12 \ 0000004C 010040E2 SUB R0,R0,#+1 \ ??GetPort_0: \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0100001A BNE ??GetPort_5 \ 00000058 0C0000EA B ??GetPort_1 \ ??GetPort_6: \ 0000005C 011081E2 ADD R1,R1,#+1 \ ??GetPort_5: \ 00000060 0040D1E5 LDRB R4,[R1, #+0] \ 00000064 3B0054E3 CMP R4,#+59 \ 00000068 20005413 CMPNE R4,#+32 \ 0000006C 0D005413 CMPNE R4,#+13 \ 00000070 0A005413 CMPNE R4,#+10 \ 00000074 00005413 CMPNE R4,#+0 \ 00000078 F7FFFF1A BNE ??GetPort_6 \ 0000007C 000054E3 CMP R4,#+0 \ 00000080 E7FFFF1A BNE ??GetPort_3 \ 00000084 0C10A0E1 MOV R1,R12 \ 00000088 E5FFFFEA B ??GetPort_3 1700 } 1701 } 1702 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_7: \ 0000008C 011081E2 ADD R1,R1,#+1 \ ??GetPort_1: \ 00000090 0000D1E5 LDRB R0,[R1, #+0] \ 00000094 3B0050E3 CMP R0,#+59 \ 00000098 3A005013 CMPNE R0,#+58 \ 0000009C 20005013 CMPNE R0,#+32 \ 000000A0 0D005013 CMPNE R0,#+13 \ 000000A4 0A005013 CMPNE R0,#+10 \ 000000A8 00005013 CMPNE R0,#+0 \ 000000AC F6FFFF1A BNE ??GetPort_7 1703 if(*str!=':') return NATICQ_PORT; \ 000000B0 ........ LDRB R0,[R1], #+1 \ 000000B4 3A0050E3 CMP R0,#+58 \ 000000B8 58009F15 LDRNE R0,??GetPort_8 ;; NATICQ_PORT \ 000000BC 00009015 LDRNE R0,[R0, #+0] \ 000000C0 1680BD18 POPNE {R1,R2,R4,PC} 1704 str++; 1705 numbuf[5] = 0; \ 000000C4 0520CDE5 STRB R2,[SP, #+5] \ 000000C8 030000EA B ??GetPort_9 1706 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str && numcnt<5; numbuf[numcnt] = *str, str++, numcnt++); \ ??GetPort_10: \ 000000CC ........ LDRB R4,[R1], #+1 \ 000000D0 013083E2 ADD R3,R3,#+1 \ 000000D4 FF3003E2 AND R3,R3,#0xFF \ 000000D8 0040C0E5 STRB R4,[R0, #+0] \ ??GetPort_9: \ 000000DC 0D40A0E1 MOV R4,SP \ 000000E0 040083E0 ADD R0,R3,R4 \ 000000E4 0040D1E5 LDRB R4,[R1, #+0] \ 000000E8 3B0054E3 CMP R4,#+59 \ 000000EC 20005413 CMPNE R4,#+32 \ 000000F0 0D005413 CMPNE R4,#+13 \ 000000F4 0A005413 CMPNE R4,#+10 \ 000000F8 00005413 CMPNE R4,#+0 \ 000000FC 0100000A BEQ ??GetPort_11 \ 00000100 050053E3 CMP R3,#+5 \ 00000104 F0FFFF3A BCC ??GetPort_10 1707 numbuf[numcnt] = 0; \ ??GetPort_11: \ 00000108 0020C0E5 STRB R2,[R0, #+0] 1708 return atoi(numbuf); \ 0000010C 0D00A0E1 MOV R0,SP \ 00000110 ........ BL atoi \ 00000114 1680BDE8 POP {R1,R2,R4,PC} ;; return \ ??GetPort_8: \ 00000118 ........ DC32 NATICQ_PORT 1709 1710 } 1711 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1712 int GetHostsCount(const char *str) 1713 { 1714 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 1715 for(;cnt;cnt++) 1716 { 1717 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 1718 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 1719 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 1720 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 1721 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 1722 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 1723 1724 } 1725 //--------------------------------------------------------------------------- 1726 \ In segment CODE, align 4, keep-with-next 1727 void create_connect(void) 1728 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1729 char hostbuf[128]; 1730 int hostport; 1731 int ***p_res=NULL; 1732 void do_reconnect(void); 1733 SOCK_ADDR sa; 1734 //Устанавливаем соединение 1735 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable40 ;; S_ICONS 1736 int err; 1737 unsigned int ip; 1738 GBS_DelTimer(&reconnect_tmr); 1739 if (!IsGPRSEnabled()) \ 00000008 74829FE5 LDR R8,??create_connect_0 ;; `? GetHostsCount(NATICQ_HOST)-1) host_counter = 0; \ ??create_connect_1: \ 0000005C 24929FE5 LDR R9,??create_connect_0+0x4 ;; NATICQ_HOST 1750 GetHost(host_counter, NATICQ_HOST, hostbuf); 1751 hostport = GetPort(host_counter, NATICQ_HOST); 1752 host_counter++; 1753 1754 // sprintf(hostname, "%s:%d", hostbuf, hostport); 1755 strcpy(hostname, hostbuf); 1756 1757 SMART_REDRAW(); 1758 1759 ip=str2ip(hostbuf); 1760 if (ip!=0xFFFFFFFF) \ 00000060 ........ LDR R10,??DataTable30 ;; do_reconnect \ 00000064 4C4185E5 STR R4,[R5, #+332] \ 00000068 7C8100EF SWI +33148 \ 0000006C 004080E5 STR R4,[R0, #+0] \ 00000070 0900A0E1 MOV R0,R9 \ 00000074 ........ BL GetHostsCount \ 00000078 541195E5 LDR R1,[R5, #+340] \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 010050E1 CMP R0,R1 \ 00000084 544185B5 STRLT R4,[R5, #+340] \ 00000088 540195E5 LDR R0,[R5, #+340] \ 0000008C 14208DE2 ADD R2,SP,#+20 \ 00000090 0910A0E1 MOV R1,R9 \ 00000094 ........ BL GetHost \ 00000098 540195E5 LDR R0,[R5, #+340] \ 0000009C 0910A0E1 MOV R1,R9 \ 000000A0 ........ BL GetPort \ 000000A4 0090A0E1 MOV R9,R0 \ 000000A8 540195E5 LDR R0,[R5, #+340] \ 000000AC 14108DE2 ADD R1,SP,#+20 \ 000000B0 010080E2 ADD R0,R0,#+1 \ 000000B4 540185E5 STR R0,[R5, #+340] \ 000000B8 8C00A0E3 MOV R0,#+140 \ 000000BC 400D80E3 ORR R0,R0,#0x1000 \ 000000C0 050080E0 ADD R0,R0,R5 \ 000000C4 1A0000EF SWI +26 \ 000000C8 ........ BL SMART_REDRAW \ 000000CC 14008DE2 ADD R0,SP,#+20 \ 000000D0 B70100EF SWI +439 \ 000000D4 04B0E0E1 MVN R11,R4 \ 000000D8 0B0050E1 CMP R0,R11 \ 000000DC 0500000A BEQ ??create_connect_3 1761 { 1762 sa.ip=ip; \ 000000E0 08008DE5 STR R0,[SP, #+8] 1763 strcpy(logmsg,"\nConnect by IP!"); \ 000000E4 901088E2 ADD R1,R8,#+144 \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 1A0000EF SWI +26 1764 SMART_REDRAW(); \ 000000F0 ........ BL SMART_REDRAW 1765 goto L_CONNECT; \ 000000F4 2D0000EA B ??create_connect_4 1766 } 1767 strcpy(logmsg,LG_GRSENDDNR); \ ??create_connect_3: \ 000000F8 841088E2 ADD R1,R8,#+132 \ 000000FC 0700A0E1 MOV R0,R7 \ 00000100 1A0000EF SWI +26 1768 SMART_REDRAW(); \ 00000104 ........ BL SMART_REDRAW 1769 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000108 532F85E2 ADD R2,R5,#+332 \ 0000010C 0D10A0E1 MOV R1,SP \ 00000110 14008DE2 ADD R0,SP,#+20 \ 00000114 B60100EF SWI +438 \ 00000118 0030B0E1 MOVS R3,R0 1770 if (err) \ 0000011C 1300000A BEQ ??create_connect_5 1771 { 1772 if ((err==0xC9)||(err==0xD6)) \ 00000120 C90053E3 CMP R3,#+201 \ 00000124 D6005313 CMPNE R3,#+214 \ 00000128 0600001A BNE ??create_connect_6 1773 { 1774 if (DNR_ID) \ 0000012C 4C0195E5 LDR R0,[R5, #+332] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0D00000A BEQ ??create_connect_5 1775 { 1776 host_counter--; \ 00000138 540195E5 LDR R0,[R5, #+340] \ 0000013C 010040E2 SUB R0,R0,#+1 \ 00000140 540185E5 STR R0,[R5, #+340] 1777 return; //Ждем готовности DNR \ 00000144 300000EA B ??create_connect_7 1778 } 1779 } 1780 else 1781 { 1782 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000148 742088E2 ADD R2,R8,#+116 \ 0000014C FF10A0E3 MOV R1,#+255 \ 00000150 0700A0E1 MOV R0,R7 \ 00000154 1B0100EF SWI +283 1783 SMART_REDRAW(); \ 00000158 ........ BL SMART_REDRAW 1784 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ ??create_connect_8: \ 0000015C 0A20A0E1 MOV R2,R10 \ 00000160 871EA0E3 MOV R1,#+2160 \ 00000164 0600A0E1 MOV R0,R6 \ 00000168 4D0000EF SWI +77 1785 return; \ 0000016C 260000EA B ??create_connect_7 1786 } 1787 } 1788 if (p_res) \ ??create_connect_5: \ 00000170 00009DE5 LDR R0,[SP, #+0] \ 00000174 000050E3 CMP R0,#+0 \ 00000178 3700000A BEQ ??create_connect_9 1789 { 1790 if (p_res[3]) \ 0000017C 0C0090E5 LDR R0,[R0, #+12] \ 00000180 000050E3 CMP R0,#+0 \ 00000184 3C00000A BEQ ??create_connect_10 1791 { 1792 strcpy(logmsg,LG_GRDNROK); \ 00000188 5C1088E2 ADD R1,R8,#+92 \ 0000018C 0700A0E1 MOV R0,R7 \ 00000190 1A0000EF SWI +26 1793 SMART_REDRAW(); \ 00000194 ........ BL SMART_REDRAW 1794 DNR_TRIES=0; \ 00000198 504185E5 STR R4,[R5, #+336] 1795 sa.ip=p_res[3][0][0]; \ 0000019C 00109DE5 LDR R1,[SP, #+0] \ 000001A0 0C1091E5 LDR R1,[R1, #+12] \ 000001A4 001091E5 LDR R1,[R1, #+0] \ 000001A8 001091E5 LDR R1,[R1, #+0] \ 000001AC 08108DE5 STR R1,[SP, #+8] 1796 L_CONNECT: 1797 sock=socket(1,1,0); \ ??create_connect_4: \ 000001B0 0020A0E3 MOV R2,#+0 \ 000001B4 0110A0E3 MOV R1,#+1 \ 000001B8 0100A0E1 MOV R0,R1 \ 000001BC 730100EF SWI +371 \ 000001C0 180185E5 STR R0,[R5, #+280] 1798 if (sock!=-1) \ 000001C4 0B0050E1 CMP R0,R11 \ 000001C8 1A00000A BEQ ??create_connect_11 1799 { 1800 sa.family=1; \ 000001CC 0170A0E3 MOV R7,#+1 \ 000001D0 B470CDE1 STRH R7,[SP, #+4] 1801 sa.port=htons(hostport); \ 000001D4 0908A0E1 MOV R0,R9, LSL #+16 \ 000001D8 2008A0E1 MOV R0,R0, LSR #+16 \ 000001DC 7A0100EF SWI +378 \ 000001E0 B600CDE1 STRH R0,[SP, #+6] 1802 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 1803 if (connect(sock,&sa,sizeof(sa))!=-1) \ 000001E4 180195E5 LDR R0,[R5, #+280] \ 000001E8 1020A0E3 MOV R2,#+16 \ 000001EC 04108DE2 ADD R1,SP,#+4 \ 000001F0 740100EF SWI +372 \ 000001F4 0B0050E1 CMP R0,R11 \ 000001F8 0500000A BEQ ??create_connect_12 1804 { 1805 connect_state=1; \ 000001FC 147185E5 STR R7,[R5, #+276] 1806 TOTALRECEIVED=0; \ 00000200 1C4185E5 STR R4,[R5, #+284] 1807 TOTALSENDED=0; \ 00000204 204185E5 STR R4,[R5, #+288] 1808 SMART_REDRAW(); \ ??create_connect_2: \ 00000208 ........ BL SMART_REDRAW \ ??create_connect_7: \ 0000020C 94D08DE2 ADD SP,SP,#+148 \ 00000210 F08FBDE8 POP {R4-R11,PC} 1809 } 1810 else 1811 { 1812 closesocket(sock); \ ??create_connect_12: \ 00000214 180195E5 LDR R0,[R5, #+280] \ 00000218 760100EF SWI +374 1813 sock=-1; \ 0000021C 18B185E5 STR R11,[R5, #+280] 1814 LockSched(); \ 00000220 460100EF SWI +326 1815 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000224 401088E2 ADD R1,R8,#+64 \ 00000228 0100A0E3 MOV R0,#+1 \ 0000022C 480100EF SWI +328 1816 UnlockSched(); \ 00000230 470100EF SWI +327 1817 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ 00000234 C8FFFFEA B ??create_connect_8 1818 } 1819 } 1820 else 1821 { 1822 LockSched(); \ ??create_connect_11: \ 00000238 460100EF SWI +326 1823 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 0000023C 141088E2 ADD R1,R8,#+20 \ 00000240 0100A0E3 MOV R0,#+1 \ 00000244 480100EF SWI +328 1824 UnlockSched(); \ 00000248 470100EF SWI +327 1825 //Не осилили создания сокета, закрываем GPRS-сессию 1826 GPRS_OnOff(0,1); \ 0000024C 0110A0E3 MOV R1,#+1 \ 00000250 0000A0E3 MOV R0,#+0 \ 00000254 8E0100EF SWI +398 \ 00000258 EBFFFFEA B ??create_connect_7 1827 } 1828 } 1829 } 1830 else 1831 { 1832 DNR_TRIES--; \ ??create_connect_9: \ 0000025C 500195E5 LDR R0,[R5, #+336] \ 00000260 010040E2 SUB R0,R0,#+1 \ 00000264 500185E5 STR R0,[R5, #+336] 1833 LockSched(); \ 00000268 460100EF SWI +326 1834 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 0000026C 0810A0E1 MOV R1,R8 \ 00000270 0100A0E3 MOV R0,#+1 \ 00000274 480100EF SWI +328 1835 UnlockSched(); \ 00000278 470100EF SWI +327 \ ??create_connect_10: \ 0000027C 94D08DE2 ADD SP,SP,#+148 ;; stack cleaning \ 00000280 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 00000284 ........ DC32 `?=0) \ 00000004 ........ LDR R4,??DataTable40 ;; S_ICONS \ 00000008 180194E5 LDR R0,[R4, #+280] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 1856 { 1857 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 1858 closesocket(sock); \ 0000001C 180194E5 LDR R0,[R4, #+280] \ 00000020 760100EF SWI +374 1859 } 1860 #ifdef SEND_TIMER 1861 GBS_DelTimer(&send_tmr); 1862 #endif 1863 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 1864 1865 #ifdef SEND_TIMER 1866 static void resend(void) 1867 { 1868 void SendAnswer(int dummy, TPKT *p); 1869 SUBPROC((void*)SendAnswer,0,0); 1870 } 1871 #endif 1872 \ In segment CODE, align 4, keep-with-next 1873 void SendAnswer(int dummy, TPKT *p) 1874 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 1875 int i; 1876 int j; 1877 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable40 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 140194E5 LDR R0,[R4, #+276] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 1878 { 1879 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 1880 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 1881 } 1882 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 1883 { 1884 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 1885 TOTALSENDED+=j; \ 00000034 200194E5 LDR R0,[R4, #+288] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 200184E5 STR R0,[R4, #+288] 1886 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 280194E5 LDR R0,[R4, #+296] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 280184E5 STR R0,[R4, #+296] 1887 //Проверяем, не надо ли добавить в очередь 1888 if (sendq_p) \ 0000004C 300194E5 LDR R0,[R4, #+304] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 1889 { 1890 //Есть очередь, добавляем в нее 1891 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 2C1194E5 LDR R1,[R4, #+300] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 300184E5 STR R0,[R4, #+304] 1892 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 2C0194E5 LDR R0,[R4, #+300] \ 0000006C 303194E5 LDR R3,[R4, #+304] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 1893 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 1894 sendq_l+=j; \ 00000088 2C0194E5 LDR R0,[R4, #+300] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 2C0184E5 STR R0,[R4, #+300] 1895 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 1896 } 1897 sendq_p=p; \ ??SendAnswer_2: \ 00000098 306184E5 STR R6,[R4, #+304] 1898 sendq_l=j; \ 0000009C 2C5184E5 STR R5,[R4, #+300] \ 000000A0 080000EA B ??SendAnswer_1 1899 } 1900 //Отправляем уже существующее в очереди 1901 while((i=sendq_l)!=0) 1902 { 1903 if (i>0x400) i=0x400; 1904 j=send(sock,(void *)sendq_p,i,0); 1905 snprintf(logmsg,255,"send res %d",j); 1906 SMART_REDRAW(); 1907 if (j<0) 1908 { 1909 j=*socklasterr(); 1910 if ((j==0xC9)||(j==0xD6)) 1911 { 1912 //Передали что хотели 1913 strcpy(logmsg,"Send delayed..."); 1914 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 1915 } 1916 else 1917 { 1918 //Ошибка 1919 LockSched(); 1920 ShowMSG(1,(int)"Send error!"); 1921 UnlockSched(); 1922 end_socket(); 1923 return; 1924 } 1925 } 1926 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 2C0194E5 LDR R0,[R4, #+300] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC 2C2184E5 STR R2,[R4, #+300] \ 000000B0 300194E5 LDR R0,[R4, #+304] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 1927 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 180194E5 LDR R0,[R4, #+280] \ 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 0C00A0E3 MOV R0,#+12 \ 00000108 440D80E3 ORR R0,R0,#0x1100 \ 0000010C 048080E0 ADD R8,R0,R4 \ 00000110 0530A0E1 MOV R3,R5 \ 00000114 1C2089E2 ADD R2,R9,#+28 \ 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 0910A0E1 MOV R1,R9 \ 0000015C 0100A0E3 MOV R0,#+1 \ 00000160 480100EF SWI +328 \ 00000164 470100EF SWI +327 \ 00000168 ........ BL end_socket \ 0000016C F083BDE8 POP {R4-R9,PC} 1936 } 1937 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 1938 sendq_p=NULL; \ 00000178 306184E5 STR R6,[R4, #+304] 1939 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 1940 \ In segment CODE, align 4, keep-with-next 1941 void send_login(int dummy, TPKT *p) 1942 { 1943 connect_state=2; 1944 char rev[16]; 1945 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 1946 //А Вова будет банить на форуме! 1947 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,??DataTable40 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 140186E5 STR R0,[R6, #+276] \ 00000020 3830A0E3 MOV R3,#+56 \ 00000024 703E83E3 ORR R3,R3,#0x700 \ 00000028 0910A0E3 MOV R1,#+9 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 1B0100EF SWI +283 1948 1949 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 1950 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable36 ;; UIN 1951 p2->pkt.type=T_SETCLIENT_ID; 1952 p2->pkt.data_len=8; 1953 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 1954 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 1955 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 1956 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 100186E5 STR R0,[R6, #+272] 1957 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 1958 \ In segment CODE, align 4, keep-with-next 1959 void do_ping(void) 1960 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 1961 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 1962 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable36 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 1963 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 1964 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1965 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 1966 } 1967 \ In segment CODE, align 4, keep-with-next 1968 void SendMSGACK(int i) 1969 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1970 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 1971 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 1972 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 1973 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1974 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 1975 } 1976 \ In segment CODE, align 4, keep-with-next 1977 void RequestXText(unsigned int uin) 1978 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1979 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 1980 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 1981 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 1982 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1983 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable67 ;; SendAnswer \ 0000002C 710100EF SWI +369 1984 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 1985 \ In segment CODE, align 4, keep-with-next 1986 void get_answer(void) 1987 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1988 void *p; 1989 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable40 ;; S_ICONS \ 00000008 14D04DE2 SUB SP,SP,#+20 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 1990 int j; 1991 int n; 1992 char rb[1024]; 1993 char *rp=rb; 1994 if (connect_state<2) return; \ 00000010 140195E5 LDR R0,[R5, #+276] \ 00000014 109195E5 LDR R9,[R5, #+272] \ 00000018 14108DE2 ADD R1,SP,#+20 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 040100BA BLT ??get_answer_1 \ 00000028 0A0079E3 CMN R9,#+10 \ 0000002C 0201000A BEQ ??get_answer_1 1995 if (i==EOP) return; 1996 j=recv(sock,rb,sizeof(rb),0); \ 00000030 180195E5 LDR R0,[R5, #+280] \ 00000034 10649FE5 LDR R6,??get_answer_2+0x4 ;; RXbuf \ 00000038 0030A0E3 MOV R3,#+0 \ 0000003C 402EA0E3 MOV R2,#+1024 \ 00000040 780100EF SWI +376 \ 00000044 0080A0E1 MOV R8,R0 \ 00000048 AEA0A0E3 MOV R10,#+174 \ 0000004C DEAC8AE3 ORR R10,R10,#0xDE00 \ 00000050 0E0000EA B ??get_answer_3 1997 while(j>0) 1998 { 1999 if (i<0) 2000 { 2001 //Принимаем заголовок 2002 n=-i; //Требуемое количество байт 2003 if (j=0) 2010 { 2011 //Принимаем тельце ;) 2012 n=RXbuf.pkt.data_len; //Всего в тельце 2013 if (n>16383) 2014 { 2015 //Слишком много 2016 strcpy(logmsg,LG_GRBADPACKET); 2017 end_socket(); 2018 RXstate=EOP; 2019 return; 2020 } 2021 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2022 if (n>0) 2023 { 2024 if (jhour*3600+pt->min*60+pt->sec; 2120 s1-=s2; 2121 if (s1<0) s1+=86400; 2122 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 2123 sprintf(ping_txt, "Ping: %dsec",s1); 2124 LockSched(); 2125 if (show_ping==1) 2126 { 2127 ShowMSG(1,(int)logmsg); 2128 show_ping=0; 2129 } 2130 UnlockSched(); 2131 } 2132 break; 2133 case T_LASTPRIVACY: 2134 n=i+sizeof(PKT); \ ??get_answer_4: \ 00000054 0040A0E1 MOV R4,R0 2135 p=malloc(n); \ ??get_answer_5: \ 00000058 140000EF SWI +20 \ 0000005C 00B0A0E1 MOV R11,R0 2136 memcpy(p,&RXbuf,n); \ 00000060 0420A0E1 MOV R2,R4 \ ??get_answer_6: \ 00000064 0610A0E1 MOV R1,R6 \ 00000068 1E0100EF SWI +286 2137 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 0000006C 180195E5 LDR R0,[R5, #+280] \ 00000070 0B30A0E1 MOV R3,R11 \ 00000074 01002DE9 PUSH {R0} \ 00000078 0020A0E3 MOV R2,#+0 \ 0000007C 0A10A0E1 MOV R1,R10 \ 00000080 0900A0E1 MOV R0,R9 \ 00000084 000100EF SWI +256 \ ??get_answer_7: \ 00000088 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 2138 break; 2139 } 2140 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_8: \ 0000008C 0790E0E3 MVN R9,#+7 \ ??get_answer_3: \ 00000090 010058E3 CMP R8,#+1 \ 00000094 E70000BA BLT ??get_answer_9 \ 00000098 000059E3 CMP R9,#+0 \ 0000009C 0C00005A BPL ??get_answer_10 \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 004069E2 RSB R4,R9,#+0 \ 000000A8 040058E1 CMP R8,R4 \ 000000AC 0840A0B1 MOVLT R4,R8 \ 000000B0 0420A0E1 MOV R2,R4 \ 000000B4 060089E0 ADD R0,R9,R6 \ 000000B8 080080E2 ADD R0,R0,#+8 \ 000000BC 1E0100EF SWI +286 \ 000000C0 00109DE5 LDR R1,[SP, #+0] \ 000000C4 099084E0 ADD R9,R4,R9 \ 000000C8 048048E0 SUB R8,R8,R4 \ 000000CC 011084E0 ADD R1,R4,R1 \ 000000D0 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D4 000059E3 CMP R9,#+0 \ 000000D8 ECFFFF4A BMI ??get_answer_3 \ 000000DC B640D6E1 LDRH R4,[R6, #+6] \ 000000E0 0C00A0E3 MOV R0,#+12 \ 000000E4 440D80E3 ORR R0,R0,#0x1100 \ 000000E8 057080E0 ADD R7,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 54139FE5 LDR R1,??get_answer_2+0x8 ;; `?` + 64 \ 000000F8 0700A0E1 MOV R0,R7 \ 000000FC 1A0000EF SWI +26 \ 00000100 ........ BL end_socket \ 00000104 0900E0E3 MVN R0,#+9 \ 00000108 100185E5 STR R0,[R5, #+272] \ 0000010C 14D08DE2 ADD SP,SP,#+20 \ 00000110 40DE8DE2 ADD SP,SP,#+1024 \ 00000114 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000118 094044E0 SUB R4,R4,R9 \ 0000011C 010054E3 CMP R4,#+1 \ 00000120 0B0000BA BLT ??get_answer_12 \ 00000124 00109DE5 LDR R1,[SP, #+0] \ 00000128 040058E1 CMP R8,R4 \ 0000012C 0840A0B1 MOVLT R4,R8 \ 00000130 0420A0E1 MOV R2,R4 \ 00000134 060089E0 ADD R0,R9,R6 \ 00000138 080080E2 ADD R0,R0,#+8 \ 0000013C 1E0100EF SWI +286 \ 00000140 00109DE5 LDR R1,[SP, #+0] \ 00000144 099084E0 ADD R9,R4,R9 \ 00000148 048048E0 SUB R8,R8,R4 \ 0000014C 011084E0 ADD R1,R4,R1 \ 00000150 00108DE5 STR R1,[SP, #+0] \ ??get_answer_12: \ 00000154 B600D6E1 LDRH R0,[R6, #+6] \ 00000158 090050E1 CMP R0,R9 \ 0000015C CBFFFF1A BNE ??get_answer_3 \ 00000160 1C1195E5 LDR R1,[R5, #+284] \ 00000164 080089E2 ADD R0,R9,#+8 \ 00000168 011080E0 ADD R1,R0,R1 \ 0000016C 1C1185E5 STR R1,[R5, #+284] \ 00000170 241195E5 LDR R1,[R5, #+292] \ 00000174 00B0A0E3 MOV R11,#+0 \ 00000178 011080E0 ADD R1,R0,R1 \ 0000017C 241185E5 STR R1,[R5, #+292] \ 00000180 061089E0 ADD R1,R9,R6 \ 00000184 08B0C1E5 STRB R11,[R1, #+8] \ 00000188 B410D6E1 LDRH R1,[R6, #+4] \ 0000018C 094089E2 ADD R4,R9,#+9 \ 00000190 0990A0E3 MOV R9,#+9 \ 00000194 429C89E3 ORR R9,R9,#0x4200 \ 00000198 031041E2 SUB R1,R1,#+3 \ 0000019C 1C0051E3 CMP R1,#+28 \ 000001A0 B9FFFF8A BHI ??get_answer_8 \ 000001A4 012F8FE2 ADR R2,??get_answer_0 \ 000001A8 D12092E1 LDRSB R2,[R2, R1] \ 000001AC 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001B0 4107B63A DC8 +65,+7,+182,+58 \ 000001B4 22B624B6 DC8 +34,+182,+36,+182 \ 000001B8 B6B664B6 DC8 +182,+182,+100,+182 \ 000001BC B66A70B6 DC8 +182,+106,+112,+182 \ 000001C0 752222B6 DC8 +117,+34,+34,+182 \ 000001C4 B6B622B6 DC8 +182,+182,+34,+182 \ 000001C8 B6B6B6B6 DC8 +182,+182,+182,+182 \ 000001CC A8000000 DC8 +168,+0,+0,+0 \ ??get_answer_13: \ 000001D0 0400A0E1 MOV R0,R4 \ 000001D4 140000EF SWI +20 \ 000001D8 00B0A0E1 MOV R11,R0 \ 000001DC 0420A0E1 MOV R2,R4 \ 000001E0 0610A0E1 MOV R1,R6 \ 000001E4 1E0100EF SWI +286 \ 000001E8 180195E5 LDR R0,[R5, #+280] \ 000001EC 0B30A0E1 MOV R3,R11 \ 000001F0 01002DE9 PUSH {R0} \ 000001F4 0020A0E3 MOV R2,#+0 \ 000001F8 0A10A0E1 MOV R1,R10 \ 000001FC 0900A0E1 MOV R0,R9 \ 00000200 000100EF SWI +256 \ 00000204 48029FE5 LDR R0,??get_answer_2+0xC ;; sndStartup \ 00000208 ........ BL Play \ 0000020C 083086E2 ADD R3,R6,#+8 \ 00000210 8C2F8FE2 ADR R2,??get_answer_2 ;; "%s" \ 00000214 FF10A0E3 MOV R1,#+255 \ 00000218 0700A0E1 MOV R0,R7 \ 0000021C 1B0100EF SWI +283 \ 00000220 0300A0E3 MOV R0,#+3 \ 00000224 140185E5 STR R0,[R5, #+276] \ 00000228 540195E5 LDR R0,[R5, #+340] \ 0000022C 010040E2 SUB R0,R0,#+1 \ 00000230 540185E5 STR R0,[R5, #+340] \ 00000234 ........ BL SMART_REDRAW \ 00000238 92FFFFEA B ??get_answer_7 \ ??get_answer_14: \ 0000023C 0400A0E1 MOV R0,R4 \ 00000240 84FFFFEA B ??get_answer_5 \ ??get_answer_15: \ 00000244 0040A0E1 MOV R4,R0 \ 00000248 140000EF SWI +20 \ 0000024C 00B0A0E1 MOV R11,R0 \ 00000250 0420A0E1 MOV R2,R4 \ 00000254 0610A0E1 MOV R1,R6 \ 00000258 1E0100EF SWI +286 \ 0000025C B800D6E1 LDRH R0,[R6, #+8] \ 00000260 F0219FE5 LDR R2,??get_answer_2+0x10 ;; `?` + 52 \ 00000264 FF10A0E3 MOV R1,#+255 \ 00000268 01002DE9 PUSH {R0} \ 0000026C 003096E5 LDR R3,[R6, #+0] \ 00000270 0700A0E1 MOV R0,R7 \ 00000274 1B0100EF SWI +283 \ 00000278 180195E5 LDR R0,[R5, #+280] \ 0000027C 0B30A0E1 MOV R3,R11 \ 00000280 01002DE9 PUSH {R0} \ 00000284 0020A0E3 MOV R2,#+0 \ 00000288 0A10A0E1 MOV R1,R10 \ 0000028C 0900A0E1 MOV R0,R9 \ 00000290 000100EF SWI +256 \ ??get_answer_16: \ 00000294 08D08DE2 ADD SP,SP,#+8 ;; stack cleaning \ 00000298 7BFFFFEA B ??get_answer_8 \ ??get_answer_17: \ 0000029C B8219FE5 LDR R2,??get_answer_2+0x14 ;; `?` + 44 \ 000002A0 083086E2 ADD R3,R6,#+8 \ 000002A4 FF10A0E3 MOV R1,#+255 \ 000002A8 0700A0E1 MOV R0,R7 \ 000002AC 1B0100EF SWI +283 \ 000002B0 ........ BL SMART_REDRAW \ 000002B4 74FFFFEA B ??get_answer_8 \ ??get_answer_18: \ 000002B8 0400A0E1 MOV R0,R4 \ 000002BC 140000EF SWI +20 \ 000002C0 00B0A0E1 MOV R11,R0 \ 000002C4 0420A0E1 MOV R2,R4 \ 000002C8 0610A0E1 MOV R1,R6 \ 000002CC 1E0100EF SWI +286 \ 000002D0 08008BE2 ADD R0,R11,#+8 \ 000002D4 030000EA B ??get_answer_19 \ ??get_answer_20: \ 000002D8 030051E3 CMP R1,#+3 \ 000002DC 2010A0B3 MOVLT R1,#+32 \ 000002E0 0010C0B5 STRBLT R1,[R0, #+0] \ 000002E4 010080E2 ADD R0,R0,#+1 \ ??get_answer_19: \ 000002E8 0010D0E5 LDRB R1,[R0, #+0] \ 000002EC 000051E3 CMP R1,#+0 \ 000002F0 F8FFFF1A BNE ??get_answer_20 \ 000002F4 64219FE5 LDR R2,??get_answer_2+0x18 ;; `?` + 32 \ 000002F8 080086E2 ADD R0,R6,#+8 \ 000002FC 01002DE9 PUSH {R0} \ 00000300 003096E5 LDR R3,[R6, #+0] \ 00000304 FF10A0E3 MOV R1,#+255 \ 00000308 0700A0E1 MOV R0,R7 \ 0000030C 1B0100EF SWI +283 \ 00000310 1C0195E5 LDR R0,[R5, #+284] \ 00000314 ........ BL SendMSGACK \ 00000318 180195E5 LDR R0,[R5, #+280] \ 0000031C 0B30A0E1 MOV R3,R11 \ 00000320 01002DE9 PUSH {R0} \ 00000324 0020A0E3 MOV R2,#+0 \ 00000328 0A10A0E1 MOV R1,R10 \ 0000032C 0900A0E1 MOV R0,R9 \ 00000330 000100EF SWI +256 \ 00000334 ........ BL SMART_REDRAW \ 00000338 24019FE5 LDR R0,??get_answer_2+0x1C ;; sndMsg \ 0000033C ........ BL Play \ 00000340 D3FFFFEA B ??get_answer_16 \ ??get_answer_21: \ 00000344 460100EF SWI +326 \ 00000348 081086E2 ADD R1,R6,#+8 \ 0000034C 0100A0E3 MOV R0,#+1 \ 00000350 480100EF SWI +328 \ ??get_answer_22: \ 00000354 470100EF SWI +327 \ 00000358 4BFFFFEA B ??get_answer_8 \ ??get_answer_23: \ 0000035C 0600A0E1 MOV R0,R6 \ 00000360 ........ BL FindContactLOGQByAck \ 00000364 000050E3 CMP R0,#+0 \ 00000368 0100000A BEQ ??get_answer_24 \ 0000036C F4009FE5 LDR R0,??get_answer_2+0x20 ;; sndMsgSent \ 00000370 ........ BL Play \ ??get_answer_24: \ 00000374 0A00A0E3 MOV R0,#+10 \ 00000378 140000EF SWI +20 \ 0000037C 00B0A0E1 MOV R11,R0 \ 00000380 0A20A0E3 MOV R2,#+10 \ 00000384 36FFFFEA B ??get_answer_6 \ ??get_answer_25: \ 00000388 04108DE2 ADD R1,SP,#+4 \ 0000038C 0C008DE2 ADD R0,SP,#+12 \ 00000390 B40000EF SWI +180 \ 00000394 0400DDE5 LDRB R0,[SP, #+4] \ 00000398 0520DDE5 LDRB R2,[SP, #+5] \ 0000039C E11EA0E3 MOV R1,#+3600 \ 000003A0 3C30A0E3 MOV R3,#+60 \ 000003A4 930202E0 MUL R2,R3,R2 \ 000003A8 912020E0 MLA R0,R1,R0,R2 \ 000003AC 0610DDE5 LDRB R1,[SP, #+6] \ 000003B0 E12EA0E3 MOV R2,#+3600 \ 000003B4 000081E0 ADD R0,R1,R0 \ 000003B8 0810D6E5 LDRB R1,[R6, #+8] \ 000003BC 920101E0 MUL R1,R2,R1 \ 000003C0 A4209FE5 LDR R2,??get_answer_2+0x24 ;; `?` + 12 \ 000003C4 010040E0 SUB R0,R0,R1 \ 000003C8 0910D6E5 LDRB R1,[R6, #+9] \ 000003CC 930101E0 MUL R1,R3,R1 \ 000003D0 010040E0 SUB R0,R0,R1 \ 000003D4 0A10D6E5 LDRB R1,[R6, #+10] \ 000003D8 014050E0 SUBS R4,R0,R1 \ 000003DC 500BA043 MOVMI R0,#+81920 \ 000003E0 460D8043 ORRMI R0,R0,#0x1180 \ 000003E4 04408040 ADDMI R4,R0,R4 \ 000003E8 010084E2 ADD R0,R4,#+1 \ 000003EC 01002DE9 PUSH {R0} \ 000003F0 0430A0E1 MOV R3,R4 \ 000003F4 FF10A0E3 MOV R1,#+255 \ 000003F8 0700A0E1 MOV R0,R7 \ 000003FC 1B0100EF SWI +283 \ 00000400 68109FE5 LDR R1,??get_answer_2+0x28 ;; `?` \ 00000404 0420A0E1 MOV R2,R4 \ 00000408 B50F85E2 ADD R0,R5,#+724 \ 0000040C 160000EF SWI +22 \ 00000410 460100EF SWI +326 \ 00000414 B00095E5 LDR R0,[R5, #+176] \ 00000418 04D08DE2 ADD SP,SP,#+4 \ 0000041C 010050E3 CMP R0,#+1 \ 00000420 CBFFFF1A BNE ??get_answer_22 \ 00000424 0710A0E1 MOV R1,R7 \ 00000428 0100A0E3 MOV R0,#+1 \ 0000042C 480100EF SWI +328 \ 00000430 B0B085E5 STR R11,[R5, #+176] \ 00000434 C6FFFFEA B ??get_answer_22 2141 } 2142 } 2143 } 2144 RXstate=i; \ ??get_answer_9: \ 00000438 109185E5 STR R9,[R5, #+272] 2145 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 2146 // SMART_REDRAW(); 2147 } \ ??get_answer_1: \ 0000043C 14D08DE2 ADD SP,SP,#+20 \ 00000440 40DE8DE2 ADD SP,SP,#+1024 \ 00000444 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_2: \ 00000448 25730000 DC8 "%s",+0 \ 0000044C ........ DC32 RXbuf \ 00000450 ........ DC32 `?` + 64 \ 00000454 ........ DC32 sndStartup \ 00000458 ........ DC32 `?` + 52 \ 0000045C ........ DC32 `?` + 44 \ 00000460 ........ DC32 `?` + 32 \ 00000464 ........ DC32 sndMsg \ 00000468 ........ DC32 sndMsgSent \ 0000046C ........ DC32 `?` + 12 \ 00000470 ........ DC32 `?` 2148 \ In segment CODE, align 4, keep-with-next 2149 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK) 2150 { \ 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 2151 char hs[128], *lastX; 2152 TTime tt; 2153 TDate d; 2154 GetDateTime(&d,&tt); \ 0000001C 0D10A0E1 MOV R1,SP \ 00000020 08008DE2 ADD R0,SP,#+8 \ 00000024 B40000EF SWI +180 2155 int i; 2156 2157 if (code==3 && NOT_LOG_SAME_XTXT) \ 00000028 030055E3 CMP R5,#+3 \ 0000002C 1600001A BNE ??AddStringToLog_0 \ 00000030 C8019FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 1200000A BEQ ??AddStringToLog_0 2158 { 2159 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 01002DE9 PUSH {R0} \ 00000098 1000DDE5 LDRB R0,[SP, #+16] \ 0000009C 182089E2 ADD R2,R9,#+24 \ 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 2166 if(code != 3 || LOG_XTXT) //Нужно сохранять иксстатус \ 000000C4 030055E3 CMP R5,#+3 \ 000000C8 10D08DE2 ADD SP,SP,#+16 \ 000000CC 0300001A BNE ??AddStringToLog_4 \ 000000D0 30019FE5 LDR R0,??AddStringToLog_1+0x8 ;; LOG_XTXT \ 000000D4 000090E5 LDR R0,[R0, #+0] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0400000A BEQ ??AddStringToLog_5 2167 Add2History(t, hs, s, code); // Запись хистори \ ??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 2168 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000F4 0700A0E1 MOV R0,R7 \ 000000F8 ........ BL NewLOGQ \ 000000FC 0070A0E1 MOV R7,R0 2169 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 0920A0E1 MOV R2,R9 \ 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 2170 p->type=code; \ 00000130 0C5087E5 STR R5,[R7, #+12] 2171 p->ID=IDforACK; //0-32767 \ 00000134 088087E5 STR R8,[R7, #+8] 2172 i=AddLOGQ(&t->log,p); \ 00000138 0710A0E1 MOV R1,R7 \ 0000013C 700084E2 ADD R0,R4,#+112 \ 00000140 ........ BL AddLOGQ \ 00000144 0060A0E1 MOV R6,R0 \ 00000148 150056E3 CMP R6,#+21 \ 0000014C 10D08DE2 ADD SP,SP,#+16 \ 00000150 090000BA BLT ??AddStringToLog_6 2173 while(i>MAXLOGMSG) 2174 { 2175 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000154 780094E5 LDR R0,[R4, #+120] \ 00000158 701094E5 LDR R1,[R4, #+112] 2176 RemoveLOGQ(&t->log,t->log); 2177 i--; \ 0000015C 016046E2 SUB R6,R6,#+1 \ 00000160 000051E1 CMP R1,R0 \ 00000164 00009005 LDREQ R0,[R0, #+0] \ 00000168 78008405 STREQ R0,[R4, #+120] \ 0000016C 700084E2 ADD R0,R4,#+112 \ 00000170 ........ BL RemoveLOGQ 2178 } \ 00000174 150056E3 CMP R6,#+21 \ 00000178 F5FFFFAA BGE ??AddStringToLog_7 2179 t->msg_count=i; \ ??AddStringToLog_6: \ 0000017C 806084E5 STR R6,[R4, #+128] 2180 if (!t->last_log) t->last_log=p; \ 00000180 780094E5 LDR R0,[R4, #+120] 2181 if (code==3) \ 00000184 ........ LDR R6,??DataTable40 ;; S_ICONS \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 78708405 STREQ R7,[R4, #+120] \ 00000190 0170A0E3 MOV R7,#+1 \ 00000194 030055E3 CMP R5,#+3 \ 00000198 0D00001A BNE ??AddStringToLog_8 2182 { 2183 if (edchat_id) \ 0000019C 400196E5 LDR R0,[R6, #+320] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 1000000A BEQ ??AddStringToLog_9 2184 { 2185 void *data=FindGUIbyId(edchat_id,NULL); \ 000001A8 400196E5 LDR R0,[R6, #+320] \ 000001AC 0010A0E3 MOV R1,#+0 \ 000001B0 090200EF SWI +521 2186 if (data) \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 0B00000A BEQ ??AddStringToLog_9 2187 { 2188 EDCHAT_STRUCT *ed_struct; 2189 ed_struct=EDIT_GetUserPointer(data); \ 000001BC DF0100EF SWI +479 2190 if (ed_struct) \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 0800000A BEQ ??AddStringToLog_9 2191 { 2192 if (ed_struct->ed_contact==t) \ 000001C8 000090E5 LDR R0,[R0, #+0] \ 000001CC 040050E1 CMP R0,R4 \ 000001D0 0500001A BNE ??AddStringToLog_9 2193 { 2194 goto L_INC; 2195 } 2196 } 2197 } 2198 } 2199 goto L_NOINC; 2200 } 2201 L_INC: 2202 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001D4 580094E5 LDR R0,[R4, #+88] \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 8C009605 LDREQ R0,[R6, #+140] \ 000001E0 01008002 ADDEQ R0,R0,#+1 \ 000001E4 8C008605 STREQ R0,[R6, #+140] 2203 #ifdef EVILFOX 2204 t->unread_msg++; 2205 total_unread2++; 2206 #endif 2207 t->isunread=1; \ 000001E8 587084E5 STR R7,[R4, #+88] 2208 L_NOINC: 2209 ChangeContactPos(t); \ ??AddStringToLog_9: \ 000001EC 0400A0E1 MOV R0,R4 \ 000001F0 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2210 time_draw=1; \ 000001F4 A87086E5 STR R7,[R6, #+168] 2211 } \ ??AddStringToLog_3: \ 000001F8 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 000001FC F083BDE8 POP {R4-R9,PC} ;; return \ ??AddStringToLog_1: \ 00000200 ........ DC32 NOT_LOG_SAME_XTXT \ 00000204 ........ DC32 `?` \ 00000208 ........ DC32 LOG_XTXT 2212 2213 void ParseAnswer(WSHDR *ws, const char *s); 2214 2215 int time_to_stop_t9; 2216 \ In segment CODE, align 4, keep-with-next 2217 void ParseXStatusText(WSHDR *ws, const char *s, int color) 2218 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 2219 int c; 2220 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 2221 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 2222 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} 2223 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 2224 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 2225 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 2226 while((c=*s++)) 2227 { 2228 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 2229 { 2230 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 2231 { 2232 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 2233 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 2234 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 2235 } 2236 } 2237 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 2238 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 2239 } 2240 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 2241 void AddMsgToChat(void *data) 2242 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 40D04DE2 SUB SP,SP,#+64 2243 LOGQ *p; 2244 EDITCONTROL ec; 2245 EDITC_OPTIONS ec_options; 2246 EDCHAT_STRUCT *ed_struct; 2247 int j; 2248 int color, font, type; 2249 int zc; 2250 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C400000A BEQ ??AddMsgToChat_0 2251 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0060B0E1 MOVS R6,R0 2252 if (!ed_struct) return; \ 00000018 C100000A BEQ ??AddMsgToChat_0 2253 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000096E5 LDR R0,[R6, #+0] \ 00000020 581090E5 LDR R1,[R0, #+88] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 BD00000A BEQ ??AddMsgToChat_0 2254 2255 2256 p=ed_struct->ed_contact->last_log; \ 0000002C 787090E5 LDR R7,[R0, #+120] 2257 if (p) \ 00000030 ........ LDR R8,??DataTable71 ;; S_ICONS \ 00000034 000057E3 CMP R7,#+0 \ 00000038 A800000A BEQ ??AddMsgToChat_1 2258 { 2259 while(p) 2260 { 2261 font = ED_H_FONT_SIZE; 2262 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C ........ LDR R2,??DataTable42 ;; ED_X_FONT_SIZE \ 00000040 ........ LDR R0,??DataTable63 ;; ED_H_FONT_SIZE \ 00000044 002092E5 LDR R2,[R2, #+0] \ 00000048 ........ LDR R1,??DataTable44 ;; 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,??DataTable45 ;; O_ED_X_FONT_SIZE \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 009091E5 LDR R9,[R1, #+0] \ 00000068 ........ LDR R1,??DataTable46 ;; O_X_COLOR \ 0000006C 005091E5 LDR R5,[R1, #+0] \ 00000070 ........ LDR R1,??DataTable61 ;; I_COLOR \ 00000074 00B091E5 LDR R11,[R1, #+0] \ 00000078 0300000A BEQ ??AddMsgToChat_3 2263 { 2264 if (zc==1) \ 0000007C 010050E3 CMP R0,#+1 \ 00000080 1E00001A BNE ??AddMsgToChat_4 2265 color=ACK_COLOR; //Зеленый \ 00000084 ........ LDR R0,??DataTable57 ;; ACK_COLOR \ 00000088 1B0000EA B ??AddMsgToChat_5 2266 else 2267 color=I_COLOR; 2268 } 2269 else 2270 { 2271 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 0000008C 080097E5 LDR R0,[R7, #+8] \ 00000090 010070E3 CMN R0,#+1 \ 00000094 1700001A BNE ??AddMsgToChat_6 2272 { 2273 type = p->type&0x0F; \ 00000098 0C0097E5 LDR R0,[R7, #+12] \ 0000009C 0F1000E2 AND R1,R0,#0xF 2274 if(p->type&0x10) \ 000000A0 100010E3 TST R0,#0x10 \ 000000A4 0B00000A BEQ ??AddMsgToChat_7 2275 { 2276 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000A8 010051E3 CMP R1,#+1 \ 000000AC ........ LDREQ R0,??DataTable59 ;; 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,??DataTable58 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000C8 00B090E5 LDR R11,[R0, #+0] \ 000000CC ........ LDR R0,??DataTable64 ;; O_ED_H_FONT_SIZE \ 000000D0 00A090E5 LDR R10,[R0, #+0] \ 000000D4 090000EA B ??AddMsgToChat_4 2277 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 2278 } 2279 else 2280 { 2281 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,??DataTable60 ;; TO_COLOR \ 000000F4 000000EA B ??AddMsgToChat_5 2282 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 2283 } 2284 } 2285 else 2286 color=UNACK_COLOR; //Серый \ ??AddMsgToChat_6: \ 000000F8 ........ LDR R0,??DataTable62 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000FC 00B090E5 LDR R11,[R0, #+0] 2287 } 2288 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 00000100 14008DE2 ADD R0,SP,#+20 \ 00000104 640100EF SWI +356 2289 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 2290 { 2291 ascii2ws(ews,p->hdr); \ 00000118 DC0098E5 LDR R0,[R8, #+220] \ 0000011C 101087E2 ADD R1,R7,#+16 \ 00000120 ........ _BLF ascii2ws,??ascii2ws??rA 2292 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000124 DC3098E5 LDR R3,[R8, #+220] \ 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 2293 } 2294 else 2295 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_9: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 01002DE9 PUSH {R0} \ 00000144 DC3098E5 LDR R3,[R8, #+220] \ 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 2296 PrepareEditCOptions(&ec_options); \ 0000015C 04008DE2 ADD R0,SP,#+4 \ 00000160 C80100EF SWI +456 2297 SetPenColorToEditCOptions(&ec_options,color); \ 00000164 0B10A0E1 MOV R1,R11 \ 00000168 04008DE2 ADD R0,SP,#+4 \ 0000016C CC0100EF SWI +460 2298 SetFontToEditCOptions(&ec_options,font); \ 00000170 0A10A0E1 MOV R1,R10 \ 00000174 04008DE2 ADD R0,SP,#+4 \ 00000178 CA0100EF SWI +458 2299 CopyOptionsToEditControl(&ec,&ec_options); \ 0000017C 04108DE2 ADD R1,SP,#+4 \ 00000180 14008DE2 ADD R0,SP,#+20 \ 00000184 CE0100EF SWI +462 2300 //AddEditControlToEditQend(eq,&ec,ma); 2301 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 2302 ed_struct->ed_answer++; \ 0000019C 080096E5 LDR R0,[R6, #+8] \ 000001A0 010080E2 ADD R0,R0,#+1 \ 000001A4 080086E5 STR R0,[R6, #+8] 2303 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 2304 { 2305 ParseAnswer(ews,p->text); \ 000001B8 DC0098E5 LDR R0,[R8, #+220] \ 000001BC 601087E2 ADD R1,R7,#+96 \ 000001C0 ........ BL ParseAnswer \ 000001C4 050000EA B ??AddMsgToChat_12 2306 } 2307 else 2308 { 2309 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_11: \ 000001C8 100010E3 TST R0,#0x10 \ 000001CC DC0098E5 LDR R0,[R8, #+220] \ 000001D0 0520A011 MOVNE R2,R5 \ 000001D4 0420A001 MOVEQ R2,R4 \ 000001D8 601087E2 ADD R1,R7,#+96 \ 000001DC ........ BL ParseXStatusText 2310 } 2311 PrepareEditControl(&ec); \ ??AddMsgToChat_12: \ 000001E0 14008DE2 ADD R0,SP,#+20 \ 000001E4 640100EF SWI +356 2312 ConstructEditControl(&ec, 2313 ECT_NORMAL_TEXT, 2314 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 2315 ews,ews->wsbody[0]); \ 000001E8 DC3098E5 LDR R3,[R8, #+220] \ 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 2316 PrepareEditCOptions(&ec_options); \ 00000214 08008DE2 ADD R0,SP,#+8 \ 00000218 C80100EF SWI +456 2317 //#ifdef M75 2318 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 2319 { 2320 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable54 ;; O_ED_FONT_SIZE \ 00000238 ........ LDREQ R0,??DataTable55 ;; ED_FONT_SIZE \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 080000EA B ??AddMsgToChat_14 2321 } 2322 else 2323 { 2324 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 2325 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 2326 } 2327 //#else 2328 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 2329 //#endif 2330 CopyOptionsToEditControl(&ec,&ec_options); \ 00000270 04108DE2 ADD R1,SP,#+4 \ 00000274 14008DE2 ADD R0,SP,#+20 \ 00000278 CE0100EF SWI +462 2331 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 2332 ed_struct->ed_answer++; \ 00000290 080096E5 LDR R0,[R6, #+8] \ 00000294 010080E2 ADD R0,R0,#+1 \ 00000298 080086E5 STR R0,[R6, #+8] 2333 p=p->next; \ 0000029C 007097E5 LDR R7,[R7, #+0] 2334 } \ 000002A0 000057E3 CMP R7,#+0 \ 000002A4 64FFFF1A BNE ??AddMsgToChat_2 2335 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 000002A8 001096E5 LDR R1,[R6, #+0] \ 000002AC 801091E5 LDR R1,[R1, #+128] \ 000002B0 011081E2 ADD R1,R1,#+1 \ 000002B4 8140A0E1 LSL R4,R1,#+1 \ 000002B8 000054E1 CMP R4,R0 \ 000002BC 070000AA BGE ??AddMsgToChat_1 2336 while(jed_answer) 2337 { 2338 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_15: \ 000002C0 040096E5 LDR R0,[R6, #+4] \ 000002C4 0110A0E3 MOV R1,#+1 \ 000002C8 D10100EF SWI +465 2339 ed_struct->ed_answer--; \ 000002CC 080096E5 LDR R0,[R6, #+8] \ 000002D0 010040E2 SUB R0,R0,#+1 \ 000002D4 080086E5 STR R0,[R6, #+8] 2340 } \ 000002D8 000054E1 CMP R4,R0 \ 000002DC F7FFFFBA BLT ??AddMsgToChat_15 2341 } 2342 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002E0 000096E5 LDR R0,[R6, #+0] \ 000002E4 0040A0E3 MOV R4,#+0 \ 000002E8 784080E5 STR R4,[R0, #+120] 2343 if (IsGuiOnTop(edchat_id)) \ 000002EC 400198E5 LDR R0,[R8, #+320] \ 000002F0 350100EF SWI +309 \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 0300000A BEQ ??AddMsgToChat_16 2344 total_unread--; \ 000002FC 8C0098E5 LDR R0,[R8, #+140] \ 00000300 010040E2 SUB R0,R0,#+1 \ 00000304 8C0088E5 STR R0,[R8, #+140] \ 00000308 020000EA B ??AddMsgToChat_17 2345 else 2346 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] 2347 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_17: \ 00000318 000096E5 LDR R0,[R6, #+0] \ 0000031C 584080E5 STR R4,[R0, #+88] 2348 #ifdef EVILFOX 2349 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; 2350 ed_struct->ed_contact->unread_msg=0; 2351 #endif 2352 ChangeContactPos(ed_struct->ed_contact); \ 00000320 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2353 // EDIT_SetFocus(data,ed_struct->ed_answer); 2354 } \ ??AddMsgToChat_0: \ 00000324 44D08DE2 ADD SP,SP,#+68 ;; stack cleaning \ 00000328 F08FBDE8 POP {R4-R11,PC} ;; return 2355 2356 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 2357 void DrawAck(void *data) 2358 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 2359 LOGQ *p; 2360 EDITCONTROL ec; 2361 EDITC_OPTIONS ec_options; 2362 EDCHAT_STRUCT *ed_struct; 2363 int j; 2364 int color; 2365 int dorefresh=0; \ 0000000C 0070A0E3 MOV R7,#+0 2366 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 2367 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 2368 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 2369 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 2370 j=ed_struct->ed_answer; 2371 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 705091E5 LDR R5,[R1, #+112] \ 0000002C 801091E5 LDR R1,[R1, #+128] \ 00000030 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000034 016040E2 SUB R6,R0,#+1 \ 00000038 0F0000EA B ??DrawAck_1 2372 while(p) 2373 { 2374 if (j>=1) //Пока возможно лишнее 2375 { 2376 if (!(p->acked&4)) 2377 { 2378 ExtractEditControl(data,j,&ec); 2379 PrepareEditCOptions(&ec_options); 2380 if (p->acked) 2381 { 2382 if (p->acked==1) 2383 color=ACK_COLOR; //Зеленый 2384 else 2385 color=I_COLOR; 2386 } 2387 else 2388 { 2389 if (p->ID==0xFFFFFFFF) 2390 color=(p->type&0x10)?(((p->type&0x0F)==1)?O_I_COLOR:O_TO_COLOR):(((p->type&0x0F)==1)?I_COLOR:TO_COLOR); 2391 else 2392 color=UNACK_COLOR; //Серый 2393 } 2394 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 2395 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); \ ??DrawAck_2: \ 0000003C 001090E5 LDR R1,[R0, #+0] \ 00000040 0D00A0E1 MOV R0,SP \ 00000044 CA0100EF SWI +458 2396 CopyOptionsToEditControl(&ec,&ec_options); \ 00000048 0D10A0E1 MOV R1,SP \ 0000004C 10008DE2 ADD R0,SP,#+16 \ 00000050 CE0100EF SWI +462 2397 StoreEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0610A0E1 MOV R1,R6 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 6A0100EF SWI +362 2398 p->acked|=4; //Обработали \ 00000064 040095E5 LDR R0,[R5, #+4] 2399 dorefresh=1; \ 00000068 0170A0E3 MOV R7,#+1 \ 0000006C 040080E3 ORR R0,R0,#0x4 \ 00000070 040085E5 STR R0,[R5, #+4] 2400 } 2401 } 2402 j+=2; 2403 p=p->next; \ ??DrawAck_3: \ 00000074 005095E5 LDR R5,[R5, #+0] \ 00000078 026086E2 ADD R6,R6,#+2 \ ??DrawAck_1: \ 0000007C 000055E3 CMP R5,#+0 \ 00000080 2900000A BEQ ??DrawAck_4 \ 00000084 010056E3 CMP R6,#+1 \ 00000088 F9FFFFBA BLT ??DrawAck_3 \ 0000008C 040095E5 LDR R0,[R5, #+4] \ 00000090 040010E3 TST R0,#0x4 \ 00000094 F6FFFF1A BNE ??DrawAck_3 \ 00000098 10208DE2 ADD R2,SP,#+16 \ 0000009C 0610A0E1 MOV R1,R6 \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 690100EF SWI +361 \ 000000A8 0D00A0E1 MOV R0,SP \ 000000AC C80100EF SWI +456 \ 000000B0 040095E5 LDR R0,[R5, #+4] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0300000A BEQ ??DrawAck_5 \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 ........ LDRNE R0,??DataTable61 ;; I_COLOR \ 000000C4 ........ LDREQ R0,??DataTable57 ;; ACK_COLOR \ 000000C8 0F0000EA B ??DrawAck_6 \ ??DrawAck_5: \ 000000CC 080095E5 LDR R0,[R5, #+8] \ 000000D0 010070E3 CMN R0,#+1 \ 000000D4 0B00001A BNE ??DrawAck_7 \ 000000D8 0C0095E5 LDR R0,[R5, #+12] \ 000000DC 100010E3 TST R0,#0x10 \ 000000E0 0F0000E2 AND R0,R0,#0xF \ 000000E4 0300000A BEQ ??DrawAck_8 \ 000000E8 010050E3 CMP R0,#+1 \ 000000EC ........ LDRNE R0,??DataTable58 ;; O_TO_COLOR \ 000000F0 ........ LDREQ R0,??DataTable59 ;; O_I_COLOR \ 000000F4 040000EA B ??DrawAck_6 \ ??DrawAck_8: \ 000000F8 010050E3 CMP R0,#+1 \ 000000FC ........ LDRNE R0,??DataTable60 ;; TO_COLOR \ 00000100 ........ LDREQ R0,??DataTable61 ;; I_COLOR \ 00000104 000000EA B ??DrawAck_6 \ ??DrawAck_7: \ 00000108 ........ LDR R0,??DataTable62 ;; UNACK_COLOR \ ??DrawAck_6: \ 0000010C 001090E5 LDR R1,[R0, #+0] \ 00000110 0D00A0E1 MOV R0,SP \ 00000114 CC0100EF SWI +460 \ 00000118 0C0095E5 LDR R0,[R5, #+12] \ 0000011C 100010E3 TST R0,#0x10 \ 00000120 ........ LDREQ R0,??DataTable63 ;; ED_H_FONT_SIZE \ 00000124 ........ LDRNE R0,??DataTable64 ;; O_ED_H_FONT_SIZE \ 00000128 C3FFFFEA B ??DrawAck_2 2404 } 2405 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_4: \ 0000012C 1C009FE5 LDR R0,??DrawAck_9 ;; S_ICONS + 320 \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 350100EF SWI +309 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 00005713 CMPNE R7,#+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_9: \ 00000150 ........ DC32 S_ICONS + 320 2406 } 2407 \ In segment CODE, align 4, keep-with-next 2408 void ask_my_info(void) 2409 { 2410 /* TPKT *p; 2411 CLIST *t; 2412 p=malloc(sizeof(PKT)); 2413 p->pkt.uin=UIN; 2414 p->pkt.type=T_REQINFOSHORT; 2415 p->pkt.data_len=0; 2416 // AddStringToLog(t,0x01,"Request info...",I_str); 2417 SUBPROC((void *)SendAnswer,0,p);*/ 2418 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 2419 \ In segment CODE, align 4, keep-with-next 2420 void set_my_status(void) 2421 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 2422 TPKT *p; 2423 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 2424 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 2425 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2426 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2427 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 248 2428 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,??DataTable67 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 2429 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 248 2430 \ In segment CODE, align 4, keep-with-next 2431 void set_my_xstatus(void) 2432 { \ set_my_xstatus: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 2433 TPKT *p; 2434 char *s1; 2435 char *s2; 2436 int l1; 2437 int l2; 2438 p=malloc(sizeof(PKT)+1); 2439 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 2440 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 2441 p->pkt.data_len=1; // Длина пакета: 1 байт 2442 p->data[0]=CurrentXStatus; \ 00000004 ........ LDR R8,??DataTable71 ;; S_ICONS 2443 SUBPROC((void *)SendAnswer,0,p); \ 00000008 ........ LDR R6,??DataTable67 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 0900A0E3 MOV R0,#+9 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 0050A0E3 MOV R5,#+0 \ 00000020 005084E5 STR R5,[R4, #+0] \ 00000024 1600A0E3 MOV R0,#+22 \ 00000028 B400C4E1 STRH R0,[R4, #+4] \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 B600C4E1 STRH R0,[R4, #+6] \ 00000034 FC0098E5 LDR R0,[R8, #+252] \ 00000038 0420A0E1 MOV R2,R4 \ 0000003C 0800C4E5 STRB R0,[R4, #+8] \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 710100EF SWI +369 2444 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 0000004C FC0098E5 LDR R0,[R8, #+252] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000058 010080E2 ADD R0,R0,#+1 \ 0000005C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000060 0070A0E1 MOV R7,R0 2445 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000064 FC0098E5 LDR R0,[R8, #+252] \ 00000068 04108DE2 ADD R1,SP,#+4 \ 0000006C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000070 020080E2 ADD R0,R0,#+2 \ 00000074 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000078 0080A0E1 MOV R8,R0 2446 if ((!s1)||(!s2)) return; \ 0000007C 000057E3 CMP R7,#+0 \ 00000080 00005813 CMPNE R8,#+0 \ 00000084 F781BD08 POPEQ {R0-R2,R4-R8,PC} 2447 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000088 00009DE5 LDR R0,[SP, #+0] \ 0000008C 04109DE5 LDR R1,[SP, #+4] \ 00000090 000081E0 ADD R0,R1,R0 \ 00000094 090080E2 ADD R0,R0,#+9 \ 00000098 140000EF SWI +20 \ 0000009C 0040A0E1 MOV R4,R0 2448 p->pkt.uin=0; \ 000000A0 005084E5 STR R5,[R4, #+0] 2449 p->pkt.type=T_XTEXT_SET; \ 000000A4 1A00A0E3 MOV R0,#+26 \ 000000A8 B400C4E1 STRH R0,[R4, #+4] 2450 p->pkt.data_len=l1+l2+1; \ 000000AC 00009DE5 LDR R0,[SP, #+0] \ 000000B0 04109DE5 LDR R1,[SP, #+4] \ 000000B4 000081E0 ADD R0,R1,R0 \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC B600C4E1 STRH R0,[R4, #+6] 2451 strncpy(p->data+0,s1,l1); \ 000000C0 00209DE5 LDR R2,[SP, #+0] \ 000000C4 0710A0E1 MOV R1,R7 \ 000000C8 080084E2 ADD R0,R4,#+8 \ 000000CC 160100EF SWI +278 2452 p->data[l1]=0; \ 000000D0 00009DE5 LDR R0,[SP, #+0] 2453 strncpy(p->data+l1+1,s2,l2); \ 000000D4 0810A0E1 MOV R1,R8 \ 000000D8 040080E0 ADD R0,R0,R4 \ 000000DC 0850C0E5 STRB R5,[R0, #+8] \ 000000E0 00009DE5 LDR R0,[SP, #+0] \ 000000E4 04209DE5 LDR R2,[SP, #+4] \ 000000E8 040080E0 ADD R0,R0,R4 \ 000000EC 090080E2 ADD R0,R0,#+9 \ 000000F0 160100EF SWI +278 2454 SUBPROC((void *)SendAnswer,0,p); \ 000000F4 0420A0E1 MOV R2,R4 \ 000000F8 0010A0E3 MOV R1,#+0 \ 000000FC 0600A0E1 MOV R0,R6 \ 00000100 710100EF SWI +369 2455 } \ 00000104 F781BDE8 POP {R0-R2,R4-R8,PC} ;; return 2456 \ In segment CODE, align 4, keep-with-next 2457 void to_develop(void) 2458 { 2459 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable71 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 E01090E5 LDR R1,[R0, #+224] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 2460 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable81 ;; Canvas 2461 gipc.name_from=ipc_my_name; 2462 gipc.data=(void *)maincsm_id; 2463 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000018 743080E2 ADD R3,R0,#+116 \ 0000001C 752F81E2 ADD R2,R1,#+468 \ 00000020 6D1F81E2 ADD R1,R1,#+436 \ 00000024 781080E5 STR R1,[R0, #+120] \ 00000028 CC1090E5 LDR R1,[R0, #+204] \ 0000002C 742080E5 STR R2,[R0, #+116] \ 00000030 7C1080E5 STR R1,[R0, #+124] \ 00000034 0220A0E3 MOV R2,#+2 \ 00000038 B010A0E3 MOV R1,#+176 \ 0000003C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000040 0900A0E3 MOV R0,#+9 \ 00000044 420C80E3 ORR R0,R0,#0x4200 \ 00000048 000100EF SWI +256 2464 } \ 0000004C 0080BDE8 POP {PC} ;; return 2465 \ In segment CODE, align 4, keep-with-next 2466 void ReqAddMsgToChat(CLIST *t) 2467 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2468 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable71 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 400195E5 LDR R0,[R5, #+320] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 2469 { 2470 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 400195E5 LDR R0,[R5, #+320] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 2471 { 2472 EDCHAT_STRUCT *ed_struct; 2473 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 2474 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 2475 { 2476 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 2477 { 2478 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 2479 { 2480 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 680084E5 STR R0,[R4, #+104] 2481 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 580185E5 STR R0,[R5, #+344] \ 00000060 7080BDE8 POP {R4-R6,PC} 2482 } 2483 else 2484 { 2485 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 2486 DirectRedrawGUI_ID(edchat_id); \ 0000006C 400195E5 LDR R0,[R5, #+320] \ 00000070 400100EF SWI +320 2487 } 2488 } 2489 } 2490 } 2491 } 2492 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 2493 \ In segment CODE, align 4, keep-with-next 2494 void CheckComand(char *txt, CLIST *t, char *ddd) 2495 { \ CheckComand: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2496 comanda=1; \ 00000004 ........ LDR R5,??DataTable71 ;; S_ICONS 2497 if(!strcmp(txt, "GET_ONLINE_TIME")) \ 00000008 64829FE5 LDR R8,??CheckComand_0 ;; `?` \ 0000000C ........ LDR R6,??DataTable72 ;; SendAnswer \ 00000010 04D04DE2 SUB SP,SP,#+4 \ 00000014 0090A0E1 MOV R9,R0 \ 00000018 0140A0E1 MOV R4,R1 \ 0000001C 0100A0E3 MOV R0,#+1 \ 00000020 C00085E5 STR R0,[R5, #+192] \ 00000024 0270A0E3 MOV R7,#+2 \ 00000028 00A0A0E3 MOV R10,#+0 \ 0000002C 841088E2 ADD R1,R8,#+132 \ 00000030 0900A0E1 MOV R0,R9 \ 00000034 190000EF SWI +25 \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0B00001A BNE ??CheckComand_1 2498 { 2499 comanda=0; \ 00000040 C0A085E5 STR R10,[R5, #+192] 2500 TPKT *p; 2501 sprintf(online_txt, "online: %02d:%02d:%02d \nServer: %s", hours, minutes, seconds, hostname); \ 00000044 8C00A0E3 MOV R0,#+140 \ 00000048 400D80E3 ORR R0,R0,#0x1000 \ 0000004C 050080E0 ADD R0,R0,R5 \ 00000050 01002DE9 PUSH {R0} \ 00000054 9C0095E5 LDR R0,[R5, #+156] \ 00000058 B09FA0E3 MOV R9,#+704 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 A03095E5 LDR R3,[R5, #+160] \ 00000064 A42095E5 LDR R2,[R5, #+164] \ 00000068 941088E2 ADD R1,R8,#+148 \ 0000006C 670000EA B ??CheckComand_2 2502 p=malloc(sizeof(PKT)+strlen(online_txt)+1); 2503 p->pkt.uin=t->uin; 2504 p->pkt.type=T_SENDMSG; 2505 p->pkt.data_len=strlen(online_txt); 2506 strcpy(p->data,online_txt); 2507 SENDMSGCOUNT++; 2508 SUBPROC((void *)SendAnswer,0,p); 2509 return; 2510 } 2511 if(!strcmp(txt, "GET_MSG_INFO")) \ ??CheckComand_1: \ 00000070 5C1088E2 ADD R1,R8,#+92 \ 00000074 0900A0E1 MOV R0,R9 \ 00000078 190000EF SWI +25 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 0B00001A BNE ??CheckComand_3 2512 { 2513 comanda=0; \ 00000084 C0A085E5 STR R10,[R5, #+192] 2514 TPKT *p; 2515 char *send_txt=malloc(64); \ 00000088 4000A0E3 MOV R0,#+64 \ 0000008C 140000EF SWI +20 2516 sprintf(send_txt, "sent: %d \n" 2517 "recieved: %d" 2518 , out_count, in_count); \ 00000090 B83095E5 LDR R3,[R5, #+184] \ 00000094 BC2095E5 LDR R2,[R5, #+188] \ 00000098 0090A0E1 MOV R9,R0 \ 0000009C 6C1088E2 ADD R1,R8,#+108 \ 000000A0 160000EF SWI +22 2519 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000000A4 0900A0E1 MOV R0,R9 \ 000000A8 1B0000EF SWI +27 \ 000000AC 090080E2 ADD R0,R0,#+9 \ 000000B0 340000EA B ??CheckComand_4 2520 p->pkt.uin=t->uin; 2521 p->pkt.type=T_SENDMSG; 2522 p->pkt.data_len=strlen(send_txt); 2523 strcpy(p->data,send_txt); 2524 SENDMSGCOUNT++; 2525 SUBPROC((void *)SendAnswer,0,p); 2526 mfree(send_txt); 2527 return; 2528 } 2529 if(!strcmp(txt, "GET_MOD_INFO")) \ ??CheckComand_3: \ 000000B4 4C1088E2 ADD R1,R8,#+76 \ 000000B8 0900A0E1 MOV R0,R9 \ 000000BC 190000EF SWI +25 \ 000000C0 000050E3 CMP R0,#+0 \ 000000C4 2000001A BNE ??CheckComand_5 2530 { 2531 comanda=0; \ 000000C8 C0A085E5 STR R10,[R5, #+192] 2532 TPKT *p; 2533 char *send_txt=malloc(256); \ 000000CC 400FA0E3 MOV R0,#+256 \ 000000D0 140000EF SWI +20 \ 000000D4 0080A0E1 MOV R8,R0 2534 strcpy(send_txt, mod_info); \ 000000D8 4400A0E3 MOV R0,#+68 \ 000000DC 400D80E3 ORR R0,R0,#0x1000 \ 000000E0 051080E0 ADD R1,R0,R5 \ 000000E4 0800A0E1 MOV R0,R8 \ 000000E8 1A0000EF SWI +26 2535 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000000EC 0800A0E1 MOV R0,R8 \ 000000F0 1B0000EF SWI +27 \ 000000F4 090080E2 ADD R0,R0,#+9 \ 000000F8 140000EF SWI +20 \ 000000FC 0090A0E1 MOV R9,R0 2536 p->pkt.uin=t->uin; \ 00000100 0C0094E5 LDR R0,[R4, #+12] \ 00000104 000089E5 STR R0,[R9, #+0] 2537 p->pkt.type=T_SENDMSG; \ 00000108 B470C9E1 STRH R7,[R9, #+4] 2538 p->pkt.data_len=strlen(send_txt); \ 0000010C 0800A0E1 MOV R0,R8 \ 00000110 1B0000EF SWI +27 \ 00000114 B600C9E1 STRH R0,[R9, #+6] 2539 strcpy(p->data,send_txt); \ 00000118 0810A0E1 MOV R1,R8 \ 0000011C 080089E2 ADD R0,R9,#+8 \ 00000120 1A0000EF SWI +26 2540 SENDMSGCOUNT++; \ 00000124 D40095E5 LDR R0,[R5, #+212] 2541 SUBPROC((void *)SendAnswer,0,p); \ 00000128 0920A0E1 MOV R2,R9 \ 0000012C 010080E2 ADD R0,R0,#+1 \ 00000130 D40085E5 STR R0,[R5, #+212] \ 00000134 0010A0E3 MOV R1,#+0 \ 00000138 0600A0E1 MOV R0,R6 \ 0000013C 710100EF SWI +369 2542 mfree(send_txt); \ 00000140 0800A0E1 MOV R0,R8 \ 00000144 150000EF SWI +21 \ 00000148 F187BDE8 POP {R0,R4-R10,PC} 2543 return; 2544 } 2545 if(!strcmp(txt, "GET_BAT_INFO")) \ ??CheckComand_5: \ 0000014C 0810A0E1 MOV R1,R8 \ 00000150 0900A0E1 MOV R0,R9 \ 00000154 190000EF SWI +25 \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 1E00001A BNE ??CheckComand_6 2546 { 2547 comanda=0; \ 00000160 C0A085E5 STR R10,[R5, #+192] 2548 TPKT *p; 2549 int bat; 2550 bat=*RamCap(); \ 00000164 C88000EF SWI +32968 \ 00000168 B0A0D0E1 LDRH R10,[R0, #+0] 2551 char *send_txt=malloc(64); \ 0000016C 4000A0E3 MOV R0,#+64 \ 00000170 140000EF SWI +20 \ 00000174 0090A0E1 MOV R9,R0 2552 sprintf(send_txt, "battery: %d percents", bat); \ 00000178 0A20A0E1 MOV R2,R10 \ 0000017C 341088E2 ADD R1,R8,#+52 \ 00000180 160000EF SWI +22 2553 p=malloc(sizeof(PKT)+21+1); \ 00000184 1E00A0E3 MOV R0,#+30 \ ??CheckComand_4: \ 00000188 140000EF SWI +20 \ 0000018C 0080A0E1 MOV R8,R0 2554 p->pkt.uin=t->uin; \ 00000190 0C0094E5 LDR R0,[R4, #+12] \ 00000194 000088E5 STR R0,[R8, #+0] 2555 p->pkt.type=T_SENDMSG; \ 00000198 B470C8E1 STRH R7,[R8, #+4] 2556 p->pkt.data_len=strlen(send_txt); \ 0000019C 0900A0E1 MOV R0,R9 \ 000001A0 1B0000EF SWI +27 \ 000001A4 B600C8E1 STRH R0,[R8, #+6] 2557 strcpy(p->data,send_txt); \ 000001A8 0910A0E1 MOV R1,R9 \ 000001AC 080088E2 ADD R0,R8,#+8 \ 000001B0 1A0000EF SWI +26 2558 SENDMSGCOUNT++; \ 000001B4 D40095E5 LDR R0,[R5, #+212] 2559 SUBPROC((void *)SendAnswer,0,p); \ 000001B8 0820A0E1 MOV R2,R8 \ 000001BC 010080E2 ADD R0,R0,#+1 \ 000001C0 D40085E5 STR R0,[R5, #+212] \ 000001C4 0010A0E3 MOV R1,#+0 \ 000001C8 0600A0E1 MOV R0,R6 \ 000001CC 710100EF SWI +369 2560 mfree(send_txt); \ 000001D0 0900A0E1 MOV R0,R9 \ 000001D4 150000EF SWI +21 2561 return; \ 000001D8 F187BDE8 POP {R0,R4-R10,PC} 2562 } 2563 if(away_m==1) \ ??CheckComand_6: \ 000001DC C40095E5 LDR R0,[R5, #+196] \ 000001E0 010050E3 CMP R0,#+1 \ 000001E4 F187BD18 POPNE {R0,R4-R10,PC} 2564 { 2565 TPKT *p; 2566 sprintf(away_msg, "AutoMsg: %s %s! im not here! %s %s",away_msg1, t->name, away_msg2, away_msg_time); \ 000001E8 88209FE5 LDR R2,??CheckComand_0+0x4 ;; away_msg1 \ 000001EC 2490A0E3 MOV R9,#+36 \ 000001F0 F09E89E3 ORR R9,R9,#0xF00 \ 000001F4 400049E2 SUB R0,R9,#+64 \ 000001F8 050080E0 ADD R0,R0,R5 \ 000001FC 01002DE9 PUSH {R0} \ 00000200 74009FE5 LDR R0,??CheckComand_0+0x8 ;; away_msg2 \ 00000204 143084E2 ADD R3,R4,#+20 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 101088E2 ADD R1,R8,#+16 \ ??CheckComand_2: \ 00000210 050089E0 ADD R0,R9,R5 \ 00000214 160000EF SWI +22 2567 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000218 050089E0 ADD R0,R9,R5 \ 0000021C 1B0000EF SWI +27 \ 00000220 090080E2 ADD R0,R0,#+9 \ 00000224 140000EF SWI +20 \ 00000228 0080A0E1 MOV R8,R0 2568 p->pkt.uin=t->uin; \ 0000022C 0C0094E5 LDR R0,[R4, #+12] \ 00000230 000088E5 STR R0,[R8, #+0] 2569 p->pkt.type=T_SENDMSG; \ 00000234 B470C8E1 STRH R7,[R8, #+4] 2570 p->pkt.data_len=strlen(away_msg); \ 00000238 050089E0 ADD R0,R9,R5 \ 0000023C 1B0000EF SWI +27 \ 00000240 B600C8E1 STRH R0,[R8, #+6] 2571 strcpy(p->data,away_msg); \ 00000244 051089E0 ADD R1,R9,R5 \ 00000248 080088E2 ADD R0,R8,#+8 \ 0000024C 1A0000EF SWI +26 2572 SENDMSGCOUNT++; \ 00000250 D40095E5 LDR R0,[R5, #+212] 2573 SUBPROC((void *)SendAnswer,0,p); \ 00000254 0820A0E1 MOV R2,R8 \ 00000258 010080E2 ADD R0,R0,#+1 \ 0000025C D40085E5 STR R0,[R5, #+212] \ 00000260 0010A0E3 MOV R1,#+0 \ 00000264 0600A0E1 MOV R0,R6 \ 00000268 710100EF SWI +369 \ 0000026C 08D08DE2 ADD SP,SP,#+8 \ 00000270 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??CheckComand_0: \ 00000274 ........ DC32 `?` \ 00000278 ........ DC32 away_msg1 \ 0000027C ........ DC32 away_msg2 2574 } 2575 } 2576 \ In segment CODE, align 4, keep-with-next 2577 ProcessPacket(TPKT *p) 2578 { \ ProcessPacket: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 40DF4DE2 SUB SP,SP,#+256 2579 extern const int VIBR_TYPE, VIBR_ON_CONNECT; 2580 CLIST *t; 2581 LOGQ *q; 2582 char s[256]; 2583 switch(p->pkt.type) \ 00000008 ........ LDR R7,??DataTable81 ;; Canvas \ 0000000C ........ LDR R6,??DataTable96 ;; S_ICONS \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 B410D4E1 LDRH R1,[R4, #+4] \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 01A0A0E3 MOV R10,#+1 \ 00000020 0080A0E3 MOV R8,#+0 \ 00000024 031041E2 SUB R1,R1,#+3 \ 00000028 1C0051E3 CMP R1,#+28 \ 0000002C B701008A 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 9C000E00B301 DC16 +156,+14,+435,+435 \ B301 \ 00000048 1100B3014600 DC16 +17,+435,+70,+435 \ B301 \ 00000050 B301B301B301 DC16 +435,+435,+435,+435 \ B301 \ 00000058 B3010D010D01 DC16 +435,+269,+269,+435 \ B301 \ 00000060 B30136004400 DC16 +435,+54,+68,+435 \ B301 \ 00000068 B301B3014301 DC16 +435,+435,+323,+435 \ B301 \ 00000070 B301B301B301 DC16 +435,+435,+435,+435 \ B301 \ 00000078 B1010000 DC16 +433,+0 2584 { 2585 case T_LOGIN: 2586 set_my_status(); \ ??ProcessPacket_2: \ 0000007C ........ BL set_my_status 2587 set_my_xstatus(); \ 00000080 ........ BL set_my_xstatus \ 00000084 A10100EA B ??ProcessPacket_1 2588 break; 2589 case T_CLENTRY: 2590 if (p->pkt.uin) \ ??ProcessPacket_3: \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 1300000A BEQ ??ProcessPacket_4 2591 { 2592 if ((t=FindContactByUin(p->pkt.uin))) \ 00000090 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000094 0050B0E1 MOVS R5,R0 \ 00000098 0B00000A BEQ ??ProcessPacket_5 2593 { 2594 // t->state=0xFFFF; 2595 strncpy(t->name,p->data,63); \ 0000009C 3F20A0E3 MOV R2,#+63 \ 000000A0 081084E2 ADD R1,R4,#+8 \ 000000A4 140085E2 ADD R0,R5,#+20 \ 000000A8 160100EF SWI +278 2596 t->group=GROUP_CACHE; \ 000000AC 380196E5 LDR R0,[R6, #+312] \ 000000B0 100085E5 STR R0,[R5, #+16] 2597 ChangeContactPos(t); \ ??ProcessPacket_6: \ 000000B4 0500A0E1 MOV R0,R5 \ 000000B8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2598 RecountMenu(t, 1); \ 000000BC 0110A0E3 MOV R1,#+1 \ 000000C0 0500A0E1 MOV R0,R5 \ ??ProcessPacket_7: \ 000000C4 ........ BL RecountMenu \ 000000C8 900100EA B ??ProcessPacket_1 2599 } 2600 else 2601 { 2602 RecountMenu(AddContact(p->pkt.uin,p->data), 1); \ ??ProcessPacket_5: \ 000000CC 000094E5 LDR R0,[R4, #+0] \ 000000D0 081084E2 ADD R1,R4,#+8 \ 000000D4 ........ _BLF AddContact,??AddContact??rA \ 000000D8 0110A0E3 MOV R1,#+1 \ 000000DC F8FFFFEA B ??ProcessPacket_7 2603 } 2604 } 2605 else 2606 { 2607 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000E0 ........ LDR R0,??DataTable75 ;; VIBR_ON_CONNECT \ 000000E4 000090E5 LDR R0,[R0, #+0] \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC 0100000A BEQ ??ProcessPacket_8 2608 { 2609 vibra_count=1; \ 000000F0 04A186E5 STR R10,[R6, #+260] 2610 start_vibra(); \ 000000F4 ........ BL start_vibra 2611 } 2612 GROUP_CACHE=0; \ ??ProcessPacket_8: \ 000000F8 388186E5 STR R8,[R6, #+312] 2613 ask_my_info(); 2614 if (contactlist_menu_id) \ 000000FC 3C0196E5 LDR R0,[R6, #+316] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0200000A BEQ ??ProcessPacket_9 2615 { 2616 RecountMenu(NULL, 1); \ 00000108 0110A0E3 MOV R1,#+1 \ 0000010C 0800A0E1 MOV R0,R8 \ ??ProcessPacket_10: \ 00000110 EBFFFFEA B ??ProcessPacket_7 2617 } 2618 else 2619 create_contactlist_menu(); \ ??ProcessPacket_9: \ 00000114 ........ BL create_contactlist_menu \ 00000118 7C0100EA B ??ProcessPacket_1 2620 } 2621 break; 2622 case T_GROUPID: 2623 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_11: \ 0000011C 380186E5 STR R0,[R6, #+312] \ 00000120 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000124 0050B0E1 MOVS R5,R0 \ 00000128 0400000A BEQ ??ProcessPacket_12 2624 { 2625 strncpy(t->name,p->data,63); \ 0000012C 3F20A0E3 MOV R2,#+63 \ 00000130 081084E2 ADD R1,R4,#+8 \ 00000134 140085E2 ADD R0,R5,#+20 \ 00000138 160100EF SWI +278 2626 ChangeContactPos(t); \ 0000013C DCFFFFEA B ??ProcessPacket_6 2627 RecountMenu(t, 1); 2628 } 2629 else 2630 { 2631 RecountMenu(AddGroup(p->pkt.uin,p->data), 1); \ ??ProcessPacket_12: \ 00000140 000094E5 LDR R0,[R4, #+0] \ 00000144 081084E2 ADD R1,R4,#+8 \ 00000148 ........ _BLF AddGroup,??AddGroup??rA \ 0000014C 0110A0E3 MOV R1,#+1 \ 00000150 DBFFFFEA B ??ProcessPacket_7 2632 } 2633 break; 2634 case T_GROUPFOLLOW: 2635 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_13: \ 00000154 380186E5 STR R0,[R6, #+312] \ 00000158 6C0100EA B ??ProcessPacket_1 2636 break; 2637 case T_STATUSCHANGE: 2638 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_14: \ 0000015C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000160 0050B0E1 MOVS R5,R0 2639 if (t) \ 00000164 4300000A BEQ ??ProcessPacket_15 2640 { 2641 int i=t->state; 2642 CLIST *oldt=NULL; \ 00000168 0A00D4E5 LDRB R0,[R4, #+10] \ 0000016C B615D5E1 LDRH R1,[R5, #+86] \ 00000170 B475D5E1 LDRH R7,[R5, #+84] \ 00000174 0090A0E3 MOV R9,#+0 \ 00000178 000051E1 CMP R1,R0 \ 0000017C 1D00000A BEQ ??ProcessPacket_16 2643 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 2644 { 2645 t->xstate=p->data[2]; \ 00000180 B605C5E1 STRH R0,[R5, #+86] 2646 FreeXText(t); \ 00000184 0500A0E1 MOV R0,R5 \ 00000188 ........ _BLF FreeXText,??FreeXText??rA 2647 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 0000018C B605D5E1 LDRH R0,[R5, #+86] \ 00000190 000050E3 CMP R0,#+0 \ 00000194 1600000A BEQ ??ProcessPacket_17 \ 00000198 84059FE5 LDR R0,??ProcessPacket_18+0x4 ;; ENA_AUTO_XTXT \ 0000019C 000090E5 LDR R0,[R0, #+0] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 1200000A BEQ ??ProcessPacket_17 2648 { 2649 t->req_xtext=1; \ 000001A8 88A085E5 STR R10,[R5, #+136] 2650 if (edchat_id) // Если открыт чат \ 000001AC 400196E5 LDR R0,[R6, #+320] \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 0F00000A BEQ ??ProcessPacket_16 2651 { 2652 void *data=FindGUIbyId(edchat_id,NULL); \ 000001B8 400196E5 LDR R0,[R6, #+320] \ 000001BC 0010A0E3 MOV R1,#+0 \ 000001C0 090200EF SWI +521 2653 if (data) \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 0A00000A BEQ ??ProcessPacket_16 2654 { 2655 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001CC DF0100EF SWI +479 2656 if (ed_struct) \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 0700000A BEQ ??ProcessPacket_16 2657 { 2658 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001D8 000090E5 LDR R0,[R0, #+0] \ 000001DC 050050E1 CMP R0,R5 \ 000001E0 0400001A BNE ??ProcessPacket_16 2659 { 2660 t->req_xtext=0; \ 000001E4 888085E5 STR R8,[R5, #+136] 2661 RequestXText(t->uin); \ 000001E8 0C0095E5 LDR R0,[R5, #+12] \ 000001EC ........ BL RequestXText \ 000001F0 000000EA B ??ProcessPacket_16 2662 } 2663 } 2664 } 2665 } 2666 } 2667 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 2668 { 2669 t->req_xtext=0; \ ??ProcessPacket_17: \ 000001F4 888085E5 STR R8,[R5, #+136] 2670 } 2671 } 2672 if (contactlist_menu_id) \ ??ProcessPacket_16: \ 000001F8 3C0196E5 LDR R0,[R6, #+316] \ 000001FC 000050E3 CMP R0,#+0 \ 00000200 0500000A BEQ ??ProcessPacket_19 2673 { 2674 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000204 3C0196E5 LDR R0,[R6, #+316] \ 00000208 0010A0E3 MOV R1,#+0 \ 0000020C 090200EF SWI +521 \ 00000210 8F0100EF SWI +399 \ 00000214 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000218 0090A0E1 MOV R9,R0 2675 } 2676 t->state=*((unsigned short *)(p->data)); \ ??ProcessPacket_19: \ 0000021C B800D4E1 LDRH R0,[R4, #+8] \ 00000220 B405C5E1 STRH R0,[R5, #+84] 2677 LogStatusChange(t); \ 00000224 0500A0E1 MOV R0,R5 \ 00000228 ........ _BLF LogStatusChange,??LogStatusChange??rA 2678 ChangeContactPos(t); \ 0000022C 0500A0E1 MOV R0,R5 \ 00000230 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2679 RecountMenu(oldt, 1); \ 00000234 0110A0E3 MOV R1,#+1 \ 00000238 0900A0E1 MOV R0,R9 \ 0000023C ........ BL RecountMenu 2680 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ 00000240 B405D5E1 LDRH R0,[R5, #+84] \ 00000244 FF10A0E3 MOV R1,#+255 \ 00000248 FF1C81E3 ORR R1,R1,#0xFF00 \ 0000024C 010050E1 CMP R0,R1 \ 00000250 0200000A BEQ ??ProcessPacket_20 \ 00000254 010057E1 CMP R7,R1 2681 { 2682 #ifdef EVILFOX 2683 if(!t->just_now) 2684 { 2685 total_c_online++; 2686 UpdateCLheader(); 2687 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 2688 } 2689 if(Is_INC_On) 2690 { 2691 strcpy(show_nick, t->name); 2692 #ifdef NEWSGOLD 2693 if(!IsIdleUiOnTop()) 2694 #else 2695 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 2696 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); 2697 if (!IsGuiOnTop(idlegui_id)) 2698 #endif 2699 { 2700 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 2701 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 2702 if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) 2703 { 2704 INC_show=15; 2705 pp_color=2; 2706 show_pp_sender(); 2707 } 2708 } 2709 } 2710 t->just_now=2; 2711 2712 #endif 2713 Play(sndGlobal); \ 00000258 C8049F05 LDREQ R0,??ProcessPacket_18+0x8 ;; sndGlobal \ 0000025C 0400000A BEQ ??ProcessPacket_21 2714 } 2715 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_20: \ 00000260 010057E1 CMP R7,R1 \ 00000264 0300000A BEQ ??ProcessPacket_15 \ 00000268 010050E1 CMP R0,R1 \ 0000026C 0100001A BNE ??ProcessPacket_15 2716 { 2717 Play(sndSrvMsg); \ 00000270 B4049FE5 LDR R0,??ProcessPacket_18+0xC ;; sndSrvMsg \ ??ProcessPacket_21: \ 00000274 ........ BL Play 2718 } 2719 } 2720 if (edchat_id) \ ??ProcessPacket_15: \ 00000278 400196E5 LDR R0,[R6, #+320] \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 2201000A BEQ ??ProcessPacket_1 2721 { 2722 void *data=FindGUIbyId(edchat_id,NULL); \ 00000284 400196E5 LDR R0,[R6, #+320] \ 00000288 0010A0E3 MOV R1,#+0 \ 0000028C 090200EF SWI +521 2723 { 2724 EDCHAT_STRUCT *ed_struct; 2725 ed_struct=EDIT_GetUserPointer(data); \ 00000290 DF0100EF SWI +479 2726 if (ed_struct) \ 00000294 000050E3 CMP R0,#+0 \ 00000298 1C01000A BEQ ??ProcessPacket_1 2727 { 2728 if (ed_struct->ed_contact==t) \ 0000029C 000090E5 LDR R0,[R0, #+0] \ 000002A0 050050E1 CMP R0,R5 \ 000002A4 1901001A BNE ??ProcessPacket_1 2729 { 2730 DirectRedrawGUI_ID(edchat_id); \ 000002A8 400196E5 LDR R0,[R6, #+320] \ 000002AC 400100EF SWI +320 \ 000002B0 160100EA B ??ProcessPacket_1 2731 } 2732 } 2733 } 2734 } 2735 break; 2736 case T_RECVMSG: 2737 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_22: \ 000002B4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000002B8 0050B0E1 MOVS R5,R0 2738 if (!t) \ 000002BC 0700001A BNE ??ProcessPacket_23 2739 { 2740 sprintf(s,percent_d,p->pkt.uin); \ 000002C0 002094E5 LDR R2,[R4, #+0] \ 000002C4 0B1087E2 ADD R1,R7,#+11 \ 000002C8 0D00A0E1 MOV R0,SP \ 000002CC 160000EF SWI +22 2741 t=AddContact(p->pkt.uin,s); \ 000002D0 000094E5 LDR R0,[R4, #+0] \ 000002D4 0D10A0E1 MOV R1,SP \ 000002D8 ........ _BLF AddContact,??AddContact??rA \ 000002DC 0050A0E1 MOV R5,R0 2742 } 2743 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ ??ProcessPacket_24: \ 0000030C 5A0FA0E3 MOV R0,#+360 \ 00000310 7C0085E5 STR R0,[R5, #+124] 2745 #ifdef EVILFOX 2746 if(t->ext_snd) 2747 { 2748 sprintf(ext_sound, "%s%d.wav", sndMsg2, t->uin); 2749 Play(ext_sound); 2750 } 2751 else 2752 Play(sndMsg); 2753 #endif 2754 #ifdef ELKA 2755 SLI_Timer(); ^ Warning[Pe223]: function "SLI_Timer" declared implicitly \ 00000314 ........ _BLF SLI_Timer,??SLI_Timer??rA 2756 #endif 2757 if(VIBR_TYPE) \ 00000318 ........ LDR R0,??DataTable77 ;; VIBR_TYPE \ 0000031C 000090E5 LDR R0,[R0, #+0] \ 00000320 000050E3 CMP R0,#+0 2758 vibra_count=2; \ 00000324 0200A013 MOVNE R0,#+2 \ 00000328 04018615 STRNE R0,[R6, #+260] 2759 else 2760 vibra_count=1; \ 0000032C 04A18605 STREQ R10,[R6, #+260] 2761 start_vibra(); \ 00000330 ........ BL start_vibra 2762 #ifdef EVILFOX 2763 if(Is_ILU_On) 2764 #endif 2765 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000334 F4039FE5 LDR R0,??ProcessPacket_18+0x10 ;; ILL_RECV_FADE \ 00000338 003090E5 LDR R3,[R0, #+0] \ 0000033C F0039FE5 LDR R0,??ProcessPacket_18+0x14 ;; ILL_RECV_TMR \ 00000340 002090E5 LDR R2,[R0, #+0] \ 00000344 EC039FE5 LDR R0,??ProcessPacket_18+0x18 ;; ILL_KEYS_RECV \ 00000348 001090E5 LDR R1,[R0, #+0] \ 0000034C E8039FE5 LDR R0,??ProcessPacket_18+0x1C ;; ILL_DISP_RECV \ 00000350 000090E5 LDR R0,[R0, #+0] \ 00000354 ........ BL IlluminationOn 2766 if (t->name[0]=='#') \ 00000358 1400D5E5 LDRB R0,[R5, #+20] \ 0000035C 230050E3 CMP R0,#+35 \ 00000360 1400001A BNE ??ProcessPacket_25 2767 { 2768 //Если это конференция, патчим имя 2769 char *s=strchr(p->data,'>'); \ 00000364 3E10A0E3 MOV R1,#+62 \ 00000368 080084E2 ADD R0,R4,#+8 \ 0000036C 180000EF SWI +24 2770 //Если нашли символ > и после него пробел и ник короче 16 символов 2771 if (s) \ 00000370 000050E3 CMP R0,#+0 \ 00000374 0F00000A BEQ ??ProcessPacket_25 2772 { 2773 if ((s[1]==' ')&&((s-p->data)<16)) \ 00000378 0110D0E5 LDRB R1,[R0, #+1] \ 0000037C 200051E3 CMP R1,#+32 \ 00000380 0C00001A BNE ??ProcessPacket_25 \ 00000384 081084E2 ADD R1,R4,#+8 \ 00000388 011040E0 SUB R1,R0,R1 \ 0000038C 100051E3 CMP R1,#+16 \ 00000390 080000AA BGE ??ProcessPacket_25 2774 { 2775 *s=0; //Режем строку \ 00000394 0080C0E5 STRB R8,[R0, #+0] 2776 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF); //Добавляем имя из текста сообщения \ 00000398 0810E0E1 MVN R1,R8 \ 0000039C 02002DE9 PUSH {R1} \ 000003A0 083084E2 ADD R3,R4,#+8 \ 000003A4 022080E2 ADD R2,R0,#+2 \ 000003A8 0500A0E1 MOV R0,R5 \ 000003AC 0210A0E3 MOV R1,#+2 \ 000003B0 ........ BL AddStringToLog 2777 goto L1; \ 000003B4 090000EA B ??ProcessPacket_26 2778 } 2779 } 2780 } 2781 #ifdef EVILFOX 2782 CheckComand(p->data, t, t->name); 2783 if(comanda) 2784 { 2785 #endif 2786 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF); \ ??ProcessPacket_25: \ 000003B8 0800E0E1 MVN R0,R8 \ 000003BC 01002DE9 PUSH {R0} \ 000003C0 143085E2 ADD R3,R5,#+20 \ 000003C4 082084E2 ADD R2,R4,#+8 \ 000003C8 0210A0E3 MOV R1,#+2 \ 000003CC 0500A0E1 MOV R0,R5 \ 000003D0 ........ BL AddStringToLog 2787 in_count++; \ 000003D4 B80096E5 LDR R0,[R6, #+184] \ 000003D8 010080E2 ADD R0,R0,#+1 \ 000003DC B80086E5 STR R0,[R6, #+184] \ ??ProcessPacket_26: \ 000003E0 04D08DE2 ADD SP,SP,#+4 2788 #ifdef EVILFOX 2789 if(Is_INC_On) 2790 { 2791 strcpy(show_nick, t->name); 2792 #ifdef NEWSGOLD 2793 if(!IsIdleUiOnTop()) 2794 #else 2795 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 2796 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); 2797 if (!IsGuiOnTop(idlegui_id)) 2798 #endif 2799 { 2800 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 2801 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 2802 if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) 2803 { 2804 INC_show=15; 2805 pp_color=0; 2806 show_pp_sender(); 2807 } 2808 } 2809 } 2810 if(Is_DRAWMAIN_On) 2811 AddToMain(t->name,p->data); 2812 } 2813 #endif 2814 L1: 2815 //Разворачиваем группу, в которой пришло сообщение 2816 { 2817 CLIST *g=FindGroupByID(t->group); \ 000003E4 100095E5 LDR R0,[R5, #+16] \ 000003E8 ........ _BLF FindGroupByID,??FindGroupByID??rA 2818 if (g) \ 000003EC 000050E3 CMP R0,#+0 2819 { 2820 if (g->state) \ 000003F0 B415D011 LDRHNE R1,[R0, #+84] \ 000003F4 00005113 CMPNE R1,#+0 2821 { 2822 g->state=0; \ 000003F8 B485C011 STRHNE R8,[R0, #+84] 2823 } 2824 } 2825 } 2826 ReqAddMsgToChat(t); \ 000003FC 0500A0E1 MOV R0,R5 \ 00000400 ........ BL ReqAddMsgToChat 2827 RecountMenu(t, 1); \ 00000404 0110A0E3 MOV R1,#+1 \ 00000408 0500A0E1 MOV R0,R5 \ 0000040C ........ BL RecountMenu 2828 extern const int DEVELOP_IF; 2829 switch (DEVELOP_IF) \ 00000410 28039FE5 LDR R0,??ProcessPacket_18+0x20 ;; DEVELOP_IF \ 00000414 000090E5 LDR R0,[R0, #+0] \ 00000418 000050E3 CMP R0,#+0 \ 0000041C 0200000A BEQ ??ProcessPacket_27 \ 00000420 010050E2 SUBS R0,R0,#+1 \ 00000424 0900000A BEQ ??ProcessPacket_28 \ 00000428 B80000EA B ??ProcessPacket_1 2830 { 2831 case 0: 2832 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_27: \ 0000042C 068100EF SWI +33030 \ 00000430 080090E5 LDR R0,[R0, #+8] \ 00000434 CC1096E5 LDR R1,[R6, #+204] \ 00000438 0C0090E5 LDR R0,[R0, #+12] \ 0000043C 0C0090E5 LDR R0,[R0, #+12] \ 00000440 010050E1 CMP R0,R1 \ ??ProcessPacket_29: \ 00000444 B100000A BEQ ??ProcessPacket_1 \ 00000448 ........ BL to_develop \ 0000044C AF0000EA B ??ProcessPacket_1 2833 break; 2834 case 1: 2835 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_28: \ 00000450 068100EF SWI +33030 \ 00000454 080090E5 LDR R0,[R0, #+8] \ 00000458 CC1096E5 LDR R1,[R6, #+204] \ 0000045C 0C0090E5 LDR R0,[R0, #+12] \ 00000460 0C0090E5 LDR R0,[R0, #+12] \ 00000464 010050E1 CMP R0,R1 \ 00000468 A800000A BEQ ??ProcessPacket_1 \ 0000046C 430000EF SWI +67 \ 00000470 000050E3 CMP R0,#+0 \ 00000474 F2FFFFEA B ??ProcessPacket_29 2836 break; 2837 case 2: 2838 break; 2839 } 2840 break; 2841 case T_SRV_ACK: 2842 case T_CLIENT_ACK: 2843 q=FindContactLOGQByAck(p); \ ??ProcessPacket_30: \ 00000478 0400A0E1 MOV R0,R4 \ 0000047C ........ BL FindContactLOGQByAck \ 00000480 0050B0E1 MOVS R5,R0 2844 if (q&&(p->pkt.type==T_SRV_ACK)&&Is_ILU_On) IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000484 A100000A BEQ ??ProcessPacket_1 \ 00000488 B400D4E1 LDRH R0,[R4, #+4] \ 0000048C 100050E3 CMP R0,#+16 \ 00000490 0B00001A BNE ??ProcessPacket_31 \ 00000494 980096E5 LDR R0,[R6, #+152] \ 00000498 000050E3 CMP R0,#+0 \ 0000049C 0B00000A BEQ ??ProcessPacket_32 \ 000004A0 88029FE5 LDR R0,??ProcessPacket_18+0x10 ;; ILL_RECV_FADE \ 000004A4 003090E5 LDR R3,[R0, #+0] \ 000004A8 94029FE5 LDR R0,??ProcessPacket_18+0x24 ;; ILL_SEND_TMR \ 000004AC 002090E5 LDR R2,[R0, #+0] \ 000004B0 90029FE5 LDR R0,??ProcessPacket_18+0x28 ;; ILL_KEYS_SEND \ 000004B4 001090E5 LDR R1,[R0, #+0] \ 000004B8 8C029FE5 LDR R0,??ProcessPacket_18+0x2C ;; ILL_DISP_SEND \ 000004BC 000090E5 LDR R0,[R0, #+0] \ 000004C0 ........ BL IlluminationOn 2845 /* if (( 2846 IsGuiOnTop(contactlist_menu_id)|| 2847 IsGuiOnTop(edchat_id) 2848 )&&(q)) 2849 { 2850 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 2851 GetPaletteAdrByColorIndex(0), 2852 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 2853 }*/ 2854 if (q) 2855 { 2856 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ ??ProcessPacket_31: \ 000004C4 B400D4E1 LDRH R0,[R4, #+4] \ 000004C8 100050E3 CMP R0,#+16 \ 000004CC 0100001A BNE ??ProcessPacket_33 \ ??ProcessPacket_32: \ 000004D0 0100A0E3 MOV R0,#+1 \ 000004D4 000000EA B ??ProcessPacket_34 \ ??ProcessPacket_33: \ 000004D8 0200A0E3 MOV R0,#+2 \ ??ProcessPacket_34: \ 000004DC 040085E5 STR R0,[R5, #+4] 2857 t=FindContactByUin(p->pkt.uin); \ 000004E0 000094E5 LDR R0,[R4, #+0] \ 000004E4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000004E8 0050A0E1 MOV R5,R0 2858 if (edchat_id) \ 000004EC 400196E5 LDR R0,[R6, #+320] \ 000004F0 000050E3 CMP R0,#+0 \ 000004F4 8500000A BEQ ??ProcessPacket_1 2859 { 2860 void *data=FindGUIbyId(edchat_id,NULL); \ 000004F8 400196E5 LDR R0,[R6, #+320] \ 000004FC 0010A0E3 MOV R1,#+0 \ 00000500 090200EF SWI +521 \ 00000504 0070B0E1 MOVS R7,R0 2861 if (data) \ 00000508 8000000A BEQ ??ProcessPacket_1 2862 { 2863 EDCHAT_STRUCT *ed_struct; 2864 ed_struct=EDIT_GetUserPointer(data); \ 0000050C DF0100EF SWI +479 2865 if (ed_struct) \ 00000510 000050E3 CMP R0,#+0 \ 00000514 7D00000A BEQ ??ProcessPacket_1 2866 { 2867 if (ed_struct->ed_contact==t) \ 00000518 000090E5 LDR R0,[R0, #+0] \ 0000051C 050050E1 CMP R0,R5 \ 00000520 7A00001A BNE ??ProcessPacket_1 2868 { 2869 if (EDIT_IsBusy(data)) \ 00000524 0700A0E1 MOV R0,R7 \ 00000528 1C0200EF SWI +540 \ 0000052C 000050E3 CMP R0,#+0 \ 00000530 0300000A BEQ ??ProcessPacket_35 2870 { 2871 t->req_drawack=1; \ 00000534 6CA085E5 STR R10,[R5, #+108] 2872 time_to_stop_t9=3; \ 00000538 0300A0E3 MOV R0,#+3 \ 0000053C 580186E5 STR R0,[R6, #+344] \ 00000540 720000EA B ??ProcessPacket_1 2873 } 2874 else 2875 DrawAck(data); \ ??ProcessPacket_35: \ 00000544 0700A0E1 MOV R0,R7 \ 00000548 ........ BL DrawAck \ 0000054C 6F0000EA B ??ProcessPacket_1 2876 } 2877 } 2878 } 2879 } 2880 } 2881 break; 2882 case T_XTEXT_ACK: 2883 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_36: \ 00000550 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000554 0050B0E1 MOVS R5,R0 2884 if (t) \ 00000558 6C00000A BEQ ??ProcessPacket_1 2885 { 2886 int i; 2887 int j; 2888 FreeXText(t); \ 0000055C ........ _BLF FreeXText,??FreeXText??rA 2889 i=p->pkt.data_len; \ 00000560 B680D4E1 LDRH R8,[R4, #+6] 2890 memcpy(t->xtext=malloc(i),p->data,i); \ 00000564 0800A0E1 MOV R0,R8 \ 00000568 140000EF SWI +20 \ 0000056C 840085E5 STR R0,[R5, #+132] \ 00000570 0820A0E1 MOV R2,R8 \ 00000574 081084E2 ADD R1,R4,#+8 \ 00000578 1E0100EF SWI +286 2891 zeromem(s,256); \ 0000057C 401FA0E3 MOV R1,#+256 \ 00000580 0D00A0E1 MOV R0,SP \ 00000584 1D0100EF SWI +285 2892 strcpy(s,t->name); \ 00000588 141085E2 ADD R1,R5,#+20 \ 0000058C 0D00A0E1 MOV R0,SP \ 00000590 1A0000EF SWI +26 2893 strcat(s,":\n"); \ 00000594 611F8FE2 ADR R1,??ProcessPacket_18 ;; ":\n" \ 00000598 0D00A0E1 MOV R0,SP \ 0000059C 170000EF SWI +23 2894 i=strlen(s); \ 000005A0 0D00A0E1 MOV R0,SP \ 000005A4 1B0000EF SWI +27 2895 j=p->data[0]; \ 000005A8 0880D4E5 LDRB R8,[R4, #+8] \ 000005AC 0090A0E1 MOV R9,R0 2896 if (j>(255-i)) j=255-i; \ 000005B0 FF0069E2 RSB R0,R9,#+255 \ 000005B4 080050E1 CMP R0,R8 \ 000005B8 0080A0B1 MOVLT R8,R0 2897 strncpy(s+i,p->data+1,j); \ 000005BC 0820A0E1 MOV R2,R8 \ 000005C0 091084E2 ADD R1,R4,#+9 \ 000005C4 0D00A0E1 MOV R0,SP \ 000005C8 000089E0 ADD R0,R9,R0 \ 000005CC 160100EF SWI +278 2898 i+=j; \ 000005D0 090088E0 ADD R0,R8,R9 2899 if (i<255) \ 000005D4 FF0050E3 CMP R0,#+255 \ 000005D8 100000AA BGE ??ProcessPacket_37 2900 { 2901 s[i]='\n'; \ 000005DC 0D10A0E1 MOV R1,SP \ 000005E0 0A20A0E3 MOV R2,#+10 \ 000005E4 0120C0E7 STRB R2,[R0, +R1] 2902 i++; \ 000005E8 0810D4E5 LDRB R1,[R4, #+8] \ 000005EC B620D4E1 LDRH R2,[R4, #+6] \ 000005F0 010080E2 ADD R0,R0,#+1 2903 j=p->pkt.data_len-p->data[0]-1; 2904 if (j>(255-i)) j=255-i; 2905 strncpy(s+i,p->data+p->data[0]+1,j); \ 000005F4 0D30A0E1 MOV R3,SP \ 000005F8 012042E0 SUB R2,R2,R1 \ 000005FC 018042E2 SUB R8,R2,#+1 \ 00000600 FF2060E2 RSB R2,R0,#+255 \ 00000604 080052E1 CMP R2,R8 \ 00000608 0280A0B1 MOVLT R8,R2 \ 0000060C 0820A0E1 MOV R2,R8 \ 00000610 041081E0 ADD R1,R1,R4 \ 00000614 091081E2 ADD R1,R1,#+9 \ 00000618 030080E0 ADD R0,R0,R3 \ 0000061C 160100EF SWI +278 2906 } 2907 #ifdef EVILFOX 2908 #else 2909 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 2910 if (!edchat_id && // Только если редактор не наверху 2911 strlen(p->data)) // и x-status не пустой \ ??ProcessPacket_37: \ 00000620 400196E5 LDR R0,[R6, #+320] \ 00000624 000050E3 CMP R0,#+0 \ 00000628 0600001A BNE ??ProcessPacket_38 \ 0000062C 080084E2 ADD R0,R4,#+8 \ 00000630 1B0000EF SWI +27 \ 00000634 000050E3 CMP R0,#+0 \ 00000638 0200000A BEQ ??ProcessPacket_38 2912 ShowMSG(0,(int)s); \ 0000063C 0D10A0E1 MOV R1,SP \ 00000640 0000A0E3 MOV R0,#+0 \ 00000644 480100EF SWI +328 2913 #endif 2914 zeromem(s,256); \ ??ProcessPacket_38: \ 00000648 401FA0E3 MOV R1,#+256 \ 0000064C 0D00A0E1 MOV R0,SP \ 00000650 1D0100EF SWI +285 2915 i=0; 2916 j=p->data[0]; \ 00000654 0860D4E5 LDRB R6,[R4, #+8] 2917 if (j>(255-i)) j=255-i; 2918 strncpy(s,p->data+1,j); \ 00000658 091084E2 ADD R1,R4,#+9 \ 0000065C 0D00A0E1 MOV R0,SP \ 00000660 400F56E3 CMP R6,#+256 \ 00000664 FF60A0A3 MOVGE R6,#+255 \ 00000668 0620A0E1 MOV R2,R6 \ 0000066C 160100EF SWI +278 2919 i+=j; 2920 if (i<255) \ 00000670 FF0056E3 CMP R6,#+255 \ 00000674 100000AA BGE ??ProcessPacket_39 2921 { 2922 s[i++]=13; \ 00000678 0D10A0E1 MOV R1,SP \ 0000067C 0D20A0E3 MOV R2,#+13 \ 00000680 0120C6E7 STRB R2,[R6, +R1] \ 00000684 0810D4E5 LDRB R1,[R4, #+8] \ 00000688 B620D4E1 LDRH R2,[R4, #+6] \ 0000068C 010086E2 ADD R0,R6,#+1 2923 j=p->pkt.data_len-p->data[0]-1; 2924 if (j>(255-i)) j=255-i; 2925 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000690 0D30A0E1 MOV R3,SP \ 00000694 012042E0 SUB R2,R2,R1 \ 00000698 016042E2 SUB R6,R2,#+1 \ 0000069C FF2060E2 RSB R2,R0,#+255 \ 000006A0 060052E1 CMP R2,R6 \ 000006A4 0260A0B1 MOVLT R6,R2 \ 000006A8 0620A0E1 MOV R2,R6 \ 000006AC 041081E0 ADD R1,R1,R4 \ 000006B0 091081E2 ADD R1,R1,#+9 \ 000006B4 030080E0 ADD R0,R0,R3 \ 000006B8 160100EF SWI +278 2926 } 2927 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF); \ ??ProcessPacket_39: \ 000006BC 00006AE2 RSB R0,R10,#+0 \ 000006C0 01002DE9 PUSH {R0} \ 000006C4 773F87E2 ADD R3,R7,#+476 \ 000006C8 04208DE2 ADD R2,SP,#+4 \ 000006CC 0310A0E3 MOV R1,#+3 \ 000006D0 0500A0E1 MOV R0,R5 \ 000006D4 ........ BL AddStringToLog 2928 ReqAddMsgToChat(t); \ 000006D8 0500A0E1 MOV R0,R5 \ 000006DC ........ BL ReqAddMsgToChat 2929 if (strlen(p->data)) // Если x-status не пустой \ 000006E0 080084E2 ADD R0,R4,#+8 \ 000006E4 1B0000EF SWI +27 \ 000006E8 000050E3 CMP R0,#+0 \ 000006EC 04D08DE2 ADD SP,SP,#+4 2930 RecountMenu(t, 1); \ 000006F0 0110A013 MOVNE R1,#+1 \ 000006F4 0500A011 MOVNE R0,R5 \ 000006F8 71FEFF1A BNE ??ProcessPacket_7 2931 else 2932 RecountMenu(NULL, 0); \ 000006FC 0010A0E3 MOV R1,#+0 \ 00000700 0000A0E3 MOV R0,#+0 \ 00000704 6EFEFFEA B ??ProcessPacket_7 2933 } 2934 break; 2935 case T_LASTPRIVACY: 2936 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_40: \ 00000708 0800D4E5 LDRB R0,[R4, #+8] \ 0000070C 000186E5 STR R0,[R6, #+256] 2937 break; 2938 } 2939 mfree(p); \ ??ProcessPacket_1: \ 00000710 0400A0E1 MOV R0,R4 \ 00000714 150000EF SWI +21 2940 } \ 00000718 40DF8DE2 ADD SP,SP,#+256 \ 0000071C F087BDE8 POP {R4-R10,PC} ;; return \ ??ProcessPacket_18: \ 00000720 3A0A0000 DC8 ":\n",+0 \ 00000724 ........ DC32 ENA_AUTO_XTXT \ 00000728 ........ DC32 sndGlobal \ 0000072C ........ DC32 sndSrvMsg \ 00000730 ........ DC32 ILL_RECV_FADE \ 00000734 ........ DC32 ILL_RECV_TMR \ 00000738 ........ DC32 ILL_KEYS_RECV \ 0000073C ........ DC32 ILL_DISP_RECV \ 00000740 ........ DC32 DEVELOP_IF \ 00000744 ........ DC32 ILL_SEND_TMR \ 00000748 ........ DC32 ILL_KEYS_SEND \ 0000074C ........ DC32 ILL_DISP_SEND 2941 2942 2943 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 2944 void process_active_timer(void) 2945 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 2946 #ifdef EVILFOX 2947 msg_away_timer++; 2948 if((msg_away_timer==AUTO_ENGADE)&&(Auto_Status==1)) 2949 away_engage(); 2950 #endif 2951 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable96 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 140195E5 LDR R0,[R5, #+276] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 2952 { 2953 if (++tenseconds_to_ping>12) \ 00000018 480195E5 LDR R0,[R5, #+328] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 480185E5 STR R0,[R5, #+328] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 2954 { 2955 tenseconds_to_ping=0; 2956 SUBPROC((void *)do_ping); \ 0000002C 58009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 484185E5 STR R4,[R5, #+328] \ 00000034 710100EF SWI +369 2957 } 2958 } 2959 #ifdef EVILFOX 2960 if((ping_sec>=6)&&(Show_Ping)) 2961 { 2962 ping_sec=0; 2963 PingToServer2(); 2964 } 2965 else 2966 ping_sec++; 2967 #endif 2968 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable81 ;; Canvas \ 0000003C 6D0FA0E3 MOV R0,#+436 \ 00000040 012080E0 ADD R2,R0,R1 \ 00000044 802085E5 STR R2,[R5, #+128] 2969 tmr_gipc.name_from=ipc_my_name; \ 00000048 010080E0 ADD R0,R0,R1 \ 0000004C 840085E5 STR R0,[R5, #+132] 2970 tmr_gipc.data=NULL; \ 00000050 884085E5 STR R4,[R5, #+136] 2971 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000054 803085E2 ADD R3,R5,#+128 \ 00000058 0420A0E3 MOV R2,#+4 \ 0000005C B010A0E3 MOV R1,#+176 \ 00000060 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000064 0900A0E3 MOV R0,#+9 \ 00000068 420C80E3 ORR R0,R0,#0x4200 \ 0000006C 000100EF SWI +256 2972 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000070 ........ LDR R2,??DataTable88 ;; process_active_timer \ 00000074 871EA0E3 MOV R1,#+2160 \ 00000078 3C00A0E3 MOV R0,#+60 \ 0000007C 480D80E3 ORR R0,R0,#0x1200 \ 00000080 050080E0 ADD R0,R0,R5 \ 00000084 4D0000EF SWI +77 2973 } \ 00000088 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 0000008C ........ DC32 do_ping 2974 2975 //=============================================================================================== \ In segment CODE, align 4, keep-with-next 2976 void method0(MAIN_GUI *data) 2977 { \ method0: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2978 int scr_w=ScreenW(); 2979 int scr_h=ScreenH(); 2980 /* DrawRoundedFrame(0,YDISP,scr_w-1,scr_h-1,0,0,0, 2981 GetPaletteAdrByColorIndex(0), 2982 GetPaletteAdrByColorIndex(20));*/ 2983 2984 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0, 2985 GetPaletteAdrByColorIndex(1), 2986 GetPaletteAdrByColorIndex(1)); 2987 #ifdef EVILFOX_2 2988 #else 2989 DrawImg(0,0,S_ICONS[ICON_LOGO]); 2990 #endif 2991 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //by BoBa 10.07 2992 wsprintf(data->ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000004 ........ LDR R7,??DataTable81 ;; Canvas \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 888100EF SWI +33160 \ 00000010 0050A0E1 MOV R5,R0 \ 00000014 898100EF SWI +33161 \ 00000018 00B0A0E1 MOV R11,R0 \ 0000001C 0100A0E3 MOV R0,#+1 \ 00000020 2E0100EF SWI +302 \ 00000024 0060A0E1 MOV R6,R0 \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 2E0100EF SWI +302 \ 00000030 40002DE9 PUSH {R6} \ 00000034 ........ LDR R6,??DataTable98 ;; S_ICONS \ 00000038 01002DE9 PUSH {R0} \ 0000003C 01304BE2 SUB R3,R11,#+1 \ 00000040 012045E2 SUB R2,R5,#+1 \ 00000044 1810A0E3 MOV R1,#+24 \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 B40100EF SWI +436 \ 00000054 502096E5 LDR R2,[R6, #+80] \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 0000A0E3 MOV R0,#+0 \ 00000060 230000EF SWI +35 \ 00000064 240196E5 LDR R0,[R6, #+292] \ 00000068 281196E5 LDR R1,[R6, #+296] \ 0000006C 0C20A0E3 MOV R2,#+12 \ 00000070 442D82E3 ORR R2,R2,#0x1100 \ 00000074 062082E0 ADD R2,R2,R6 \ 00000078 04002DE9 PUSH {R2} \ 0000007C 8C20A0E3 MOV R2,#+140 \ 00000080 402D82E3 ORR R2,R2,#0x1000 \ 00000084 062082E0 ADD R2,R2,R6 \ 00000088 04002DE9 PUSH {R2} \ 0000008C 2C2196E5 LDR R2,[R6, #+300] \ 00000090 04002DE9 PUSH {R2} \ 00000094 02002DE9 PUSH {R1} \ 00000098 01002DE9 PUSH {R0} \ 0000009C 103196E5 LDR R3,[R6, #+272] \ 000000A0 142196E5 LDR R2,[R6, #+276] \ 000000A4 340094E5 LDR R0,[R4, #+52] \ 000000A8 4E1F87E2 ADD R1,R7,#+312 \ 000000AC 240100EF SWI +292 2993 if (total_smiles) \ 000000B0 80019FE5 LDR R0,??method0_0 ;; total_smiles \ 000000B4 001090E5 LDR R1,[R0, #+0] \ 000000B8 20D08DE2 ADD SP,SP,#+32 \ 000000BC 000051E3 CMP R1,#+0 \ 000000C0 0300000A BEQ ??method0_1 2994 { 2995 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000000C4 002090E5 LDR R2,[R0, #+0] \ 000000C8 340094E5 LDR R0,[R4, #+52] \ 000000CC 491F87E2 ADD R1,R7,#+292 \ 000000D0 160200EF SWI +534 2996 } 2997 if (xstatuses_load) \ ??method0_1: \ 000000D4 60019FE5 LDR R0,??method0_0+0x4 ;; xstatuses_load \ 000000D8 000090E5 LDR R0,[R0, #+0] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0400000A BEQ ??method0_2 2998 { 2999 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000000E4 ........ LDR R0,??DataTable83 ;; total_xstatuses \ 000000E8 441F87E2 ADD R1,R7,#+272 \ 000000EC 002090E5 LDR R2,[R0, #+0] \ 000000F0 340094E5 LDR R0,[R4, #+52] \ 000000F4 160200EF SWI +534 3000 } 3001 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3002 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_2: \ 000000F8 1700A0E3 MOV R0,#+23 \ 000000FC 2E0100EF SWI +302 \ 00000100 0080A0E1 MOV R8,R0 \ 00000104 0000A0E3 MOV R0,#+0 \ 00000108 2E0100EF SWI +302 \ 0000010C 0090A0E1 MOV R9,R0 \ 00000110 0500A0E3 MOV R0,#+5 \ 00000114 C50100EF SWI +453 \ 00000118 00012DE9 PUSH {R8} \ 0000011C 00022DE9 PUSH {R9} \ 00000120 0010A0E3 MOV R1,#+0 \ 00000124 02002DE9 PUSH {R1} \ 00000128 04B04BE2 SUB R11,R11,#+4 \ 0000012C 00004BE0 SUB R0,R11,R0 \ 00000130 04A045E2 SUB R10,R5,#+4 \ 00000134 0810A0E3 MOV R1,#+8 \ 00000138 02002DE9 PUSH {R1} \ 0000013C 01002DE9 PUSH {R0} \ 00000140 0A30A0E1 MOV R3,R10 \ 00000144 1B20A0E3 MOV R2,#+27 \ 00000148 340094E5 LDR R0,[R4, #+52] \ 0000014C 0310A0E3 MOV R1,#+3 \ 00000150 4C0100EF SWI +332 3003 #ifdef EVILFOX 3004 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 3005 #else 3006 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 00000154 900096E5 LDR R0,[R6, #+144] \ 00000158 14D08DE2 ADD SP,SP,#+20 \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 380094E5 LDR R0,[R4, #+56] \ 00000164 422F8712 ADDNE R2,R7,#+264 \ 00000168 0E208702 ADDEQ R2,R7,#+14 \ 0000016C 081087E2 ADD R1,R7,#+8 \ 00000170 240100EF SWI +292 3007 #endif 3008 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3009 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000174 1700A0E3 MOV R0,#+23 \ 00000178 2E0100EF SWI +302 \ 0000017C 0060A0E1 MOV R6,R0 \ 00000180 0000A0E3 MOV R0,#+0 \ 00000184 2E0100EF SWI +302 \ 00000188 0080A0E1 MOV R8,R0 \ 0000018C 0500A0E3 MOV R0,#+5 \ 00000190 C50100EF SWI +453 \ 00000194 40002DE9 PUSH {R6} \ 00000198 00012DE9 PUSH {R8} \ 0000019C 0410A0E3 MOV R1,#+4 \ 000001A0 02002DE9 PUSH {R1} \ 000001A4 C550A0E1 ASR R5,R5,#+1 \ 000001A8 0A30A0E1 MOV R3,R10 \ 000001AC 00204BE0 SUB R2,R11,R0 \ 000001B0 0510A0E3 MOV R1,#+5 \ 000001B4 02002DE9 PUSH {R1} \ 000001B8 0B10A0E1 MOV R1,R11 \ 000001BC 02002DE9 PUSH {R1} \ 000001C0 380094E5 LDR R0,[R4, #+56] \ 000001C4 0510A0E1 MOV R1,R5 \ 000001C8 4C0100EF SWI +332 3010 #ifdef EVILFOX 3011 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 3012 #else 3013 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 000001CC 380094E5 LDR R0,[R4, #+56] \ 000001D0 402F87E2 ADD R2,R7,#+256 \ 000001D4 081087E2 ADD R1,R7,#+8 \ 000001D8 240100EF SWI +292 3014 #endif 3015 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3016 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 000001DC 1700A0E3 MOV R0,#+23 \ 000001E0 2E0100EF SWI +302 \ 000001E4 0060A0E1 MOV R6,R0 \ 000001E8 0000A0E3 MOV R0,#+0 \ 000001EC 2E0100EF SWI +302 \ 000001F0 0070A0E1 MOV R7,R0 \ 000001F4 0500A0E3 MOV R0,#+5 \ 000001F8 C50100EF SWI +453 \ 000001FC 40002DE9 PUSH {R6} \ 00000200 80002DE9 PUSH {R7} \ 00000204 0110A0E3 MOV R1,#+1 \ 00000208 02002DE9 PUSH {R1} \ 0000020C 0530A0E1 MOV R3,R5 \ 00000210 00204BE0 SUB R2,R11,R0 \ 00000214 0510A0E3 MOV R1,#+5 \ 00000218 02002DE9 PUSH {R1} \ 0000021C 0B10A0E1 MOV R1,R11 \ 00000220 02002DE9 PUSH {R1} \ 00000224 380094E5 LDR R0,[R4, #+56] \ 00000228 0310A0E3 MOV R1,#+3 \ 0000022C 4C0100EF SWI +332 \ 00000230 28D08DE2 ADD SP,SP,#+40 3017 #ifdef EVILFOX_2 3018 DrawImg(15,220,(int)"4:\\zbin\\naticq\\img\\smiles_logo.png"); 3019 #endif 3020 #ifdef EVILFOX 3021 wsprintf(data->ws2,percent_t,"Mod by Evilfox 2nd"); 3022 DrawString(data->ws2,3,scr_h-8-GetFontYSIZE(FONT_MEDIUM_BOLD)-GetFontYSIZE(FONT_MEDIUM_BOLD), 3023 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 3024 #endif 3025 } \ 00000234 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_0: \ 00000238 ........ DC32 total_smiles \ 0000023C ........ DC32 xstatuses_load 3026 \ In segment CODE, align 4, keep-with-next 3027 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 3028 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3029 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 3030 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 3031 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 3032 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 3033 \ In segment CODE, align 4, keep-with-next 3034 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 3035 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3036 FreeWS(data->ws1); \ 00000008 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 3037 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 00000014 290100EF SWI +297 3038 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 3039 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 3040 \ In segment CODE, align 4, keep-with-next 3041 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 3042 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3043 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 3044 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 3045 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 3046 \ In segment CODE, align 4, keep-with-next 3047 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 3048 { 3049 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 3050 return; 3051 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 3052 } \ 00000010 1EFF2FE1 BX LR ;; return 3053 \ In segment CODE, align 4, keep-with-next 3054 int method5(MAIN_GUI *data,GUI_MSG *msg) 3055 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 3056 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 3057 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 3058 { 3059 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R5,??DataTable96 ;; S_ICONS \ 0000002C 080090E5 LDR R0,[R0, #+8] \ 00000030 ........ LDR R4,??DataTable104 ;; create_connect \ 00000034 2C10A0E3 MOV R1,#+44 \ 00000038 481D81E3 ORR R1,R1,#0x1200 \ 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 0600000A 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 050000EA B ??method5_5 3060 { 3061 case LEFT_SOFT: 3062 #ifdef EVILFOX 3063 if (cltop) create_contactlist_menu(); 3064 break; 3065 #else 3066 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_1: \ 00000068 0100A0E3 MOV R0,#+1 \ 0000006C F280BDE8 POP {R1,R4-R7,PC} 3067 #endif 3068 case RIGHT_SOFT: 3069 #ifdef EVILFOX 3070 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 3071 #else 3072 if (cltop) create_contactlist_menu(); \ ??method5_2: \ 00000070 900095E5 LDR R0,[R5, #+144] \ 00000074 000050E3 CMP R0,#+0 \ 00000078 F280BD08 POPEQ {R1,R4-R7,PC} \ 0000007C ........ BL create_contactlist_menu \ ??method5_5: \ 00000080 0000A0E3 MOV R0,#+0 \ 00000084 F280BDE8 POP {R1,R4-R7,PC} 3073 break; 3074 #endif 3075 case GREEN_BUTTON: 3076 disautorecconect=0; \ ??method5_3: \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C E40085E5 STR R0,[R5, #+228] 3077 if ((connect_state==0)&&(sock==-1)) \ 00000090 140195E5 LDR R0,[R5, #+276] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 18019505 LDREQ R0,[R5, #+280] \ 0000009C 01007003 CMNEQ R0,#+1 \ 000000A0 0700001A BNE ??method5_0 3078 { 3079 GBS_DelTimer(&reconnect_tmr); \ 000000A4 010000EA B ??method5_6 3080 DNR_TRIES=3; 3081 SUBPROC((void *)create_connect); 3082 } 3083 break; 3084 case '0': 3085 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000A8 ........ LDR R0,??DataTable108 ;; end_socket \ 000000AC 710100EF SWI +369 3086 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000B0 0600A0E1 MOV R0,R6 \ 000000B4 8C0100EF SWI +396 3087 DNR_TRIES=3; \ 000000B8 507185E5 STR R7,[R5, #+336] 3088 SUBPROC((void *)create_connect); \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 710100EF SWI +369 3089 break; 3090 } 3091 } 3092 return(0); \ ??method5_0: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 F280BDE8 POP {R1,R4-R7,PC} ;; return 3093 } 3094 \ In segment CODE, align 4, keep-with-next 3095 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 3096 \ In segment CODE, align 4, keep-with-next 3097 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return \ In segment DATA_C, align 4, align-sorted 3098 3099 const void * const gui_methods[11]={ 3100 (void *)method0, //Redraw 3101 (void *)method1, //Create 3102 (void *)method2, //Close 3103 (void *)method3, //Focus 3104 (void *)method4, //Unfocus 3105 (void *)method5, //OnKey 3106 0, 3107 (void *)kill_data, //method7, //Destroy 3108 (void *)method8, 3109 (void *)method9, 3110 0 3111 }; 3112 3113 const RECT Canvas={0,0,0,0}; \ Canvas: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ percent_t: \ 00000008 257400 DC8 "%t" \ percent_d: \ 0000000B 256400 DC8 "%d" \ empty_str: \ 0000000E 00 DC8 "" \ 0000000F 00 DC8 0 \ 00000010 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 00000033 00 DC8 0 \ 00000034 25730A526563 DC8 "%s\012Reconect after 10 second..." \ 6F6E65637420 \ 616674657220 \ 313020736563 \ 6F6E642E2E2E \ 00 \ 00000053 00 DC8 0 \ 00000054 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 \ 00000076 0000 DC8 0, 0 \ 00000078 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 \ 000000A0 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000000A9 000000 DC8 0, 0, 0 \ 000000AC CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000000B8 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000000C8 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000000E0 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 000000F7 00 DC8 0 \ `?`: \ 000000F8 CCE5EDFE00 DC8 "\314\345\355\376" \ 000000FD 000000 DC8 0, 0, 0 \ 00000100 4578697400 DC8 "Exit" \ 00000105 000000 DC8 0, 0, 0 \ 00000108 434C69737400 DC8 "CList" \ 0000010E 0000 DC8 0, 0 \ 00000110 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 00000123 00 DC8 0 \ 00000124 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 00000136 0000 DC8 0, 0 \ 00000138 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 00000140 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 00000148 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 00000150 783A20256462 DC8 78H, 3AH, 20H, 25H, 64H, 62H, 2CH, 20H \ 2C20 \ 00000158 54783A202564 DC8 54H, 78H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 00000160 51756575653A DC8 51H, 75H, 65H, 75H, 65H, 3AH, 20H, 25H \ 2025 \ 00000168 64620A25730A DC8 64H, 62H, 0AH, 25H, 73H, 0AH, 25H, 74H \ 2574 \ 00000170 00 DC8 0 \ 00000171 000000 DC8 0, 0, 0 \ 00000174 EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 0000017B 00 DC8 0 \ 0000017C 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 00000184 2563257400 DC8 "%c%t" \ 00000189 000000 DC8 0, 0, 0 \ 0000018C 4F6E6C696E65 DC8 "Online time:\012%02d:%02d:%02d\012Server:\012%s" \ 2074696D653A \ 0A253032643A \ 253032643A25 \ 3032640A5365 \ 727665723A0A \ 257300 \ 000001B3 00 DC8 0 \ ipc_my_name: \ 000001B4 4E6174494351 DC8 "NatICQ" \ 00 \ 000001BB 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001CB 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000001D4 585461736B00 DC8 "XTask" \ 000001DA 0000 DC8 0, 0 \ x_status_change: \ 000001DC 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ gui_methods: \ 000001EC ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 00000208 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ 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 \ `?` \ 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 3114 \ In segment CODE, align 4, keep-with-next 3115 void maincsm_oncreate(CSM_RAM *data) 3116 { \ maincsm_oncreate: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 3117 strcpy(LG_MENU2, "Меню"); \ 00000004 ........ LDR R5,??DataTable96 ;; S_ICONS \ 00000008 FC609FE5 LDR R6,??maincsm_oncreate_0 ;; Canvas \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 F81086E2 ADD R1,R6,#+248 \ 00000014 2400A0E3 MOV R0,#+36 \ 00000018 400D80E3 ORR R0,R0,#0x1000 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 1A0000EF SWI +26 3118 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000024 4000A0E3 MOV R0,#+64 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 3119 MAIN_CSM*csm=(MAIN_CSM*)data; 3120 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000030 4010A0E3 MOV R1,#+64 \ 00000034 1D0100EF SWI +285 3121 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 00000038 898100EF SWI +33161 \ 0000003C 0080A0E1 MOV R8,R0 \ 00000040 888100EF SWI +33160 \ 00000044 011048E2 SUB R1,R8,#+1 \ 00000048 010040E2 SUB R0,R0,#+1 \ 0000004C 0080A0E3 MOV R8,#+0 \ 00000050 008086E5 STR R8,[R6, #+0] \ 00000054 B400C6E1 STRH R0,[R6, #+4] \ 00000058 B610C6E1 STRH R1,[R6, #+6] 3122 main_gui->gui.canvas=(void *)(&Canvas); \ 0000005C 006087E5 STR R6,[R7, #+0] 3123 // main_gui->gui.flag30=2; 3124 main_gui->gui.methods=(void *)gui_methods; \ 00000060 7B0F86E2 ADD R0,R6,#+492 \ 00000064 040087E5 STR R0,[R7, #+4] 3125 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000068 158000EF SWI +32789 \ 0000006C 200087E5 STR R0,[R7, #+32] 3126 csm->csm.state=0; \ 00000070 108084E5 STR R8,[R4, #+16] 3127 csm->csm.unk1=0; \ 00000074 148084E5 STR R8,[R4, #+20] 3128 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 00000078 0700A0E1 MOV R0,R7 \ 0000007C 370100EF SWI +311 \ 00000080 280084E5 STR R0,[R4, #+40] \ 00000084 D00085E5 STR R0,[R5, #+208] 3129 ews=AllocWS(16384); \ 00000088 400CA0E3 MOV R0,#+16384 \ 0000008C 250100EF SWI +293 3130 // MutexCreate(&contactlist_mtx); 3131 DNR_TRIES=3; 3132 // SUBPROC((void *)InitSmiles); 3133 // SUBPROC((void *)create_connect); 3134 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000090 ........ LDR R2,??DataTable88 ;; process_active_timer \ 00000094 DC0085E5 STR R0,[R5, #+220] \ 00000098 0300A0E3 MOV R0,#+3 \ 0000009C 500185E5 STR R0,[R5, #+336] \ 000000A0 871EA0E3 MOV R1,#+2160 \ 000000A4 3C00A0E3 MOV R0,#+60 \ 000000A8 480D80E3 ORR R0,R0,#0x1200 \ 000000AC 050080E0 ADD R0,R0,R5 \ 000000B0 4D0000EF SWI +77 3135 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000B4 ........ LDR R0,??DataTable114 ;; UIN \ 000000B8 0B1086E2 ADD R1,R6,#+11 \ 000000BC 002090E5 LDR R2,[R0, #+0] \ 000000C0 BA00A0E3 MOV R0,#+186 \ 000000C4 400F80E3 ORR R0,R0,#0x100 \ 000000C8 060080E0 ADD R0,R0,R6 \ 000000CC 160000EF SWI +22 3136 gipc.name_to=ipc_my_name; \ 000000D0 6D0FA0E3 MOV R0,#+436 \ 000000D4 061080E0 ADD R1,R0,R6 \ 000000D8 741085E5 STR R1,[R5, #+116] 3137 gipc.name_from=ipc_my_name; \ 000000DC 060080E0 ADD R0,R0,R6 \ 000000E0 780085E5 STR R0,[R5, #+120] 3138 gipc.data=(void *)-1; \ 000000E4 0800E0E1 MVN R0,R8 \ 000000E8 7C0085E5 STR R0,[R5, #+124] 3139 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000EC 743085E2 ADD R3,R5,#+116 \ 000000F0 0120A0E3 MOV R2,#+1 \ 000000F4 B010A0E3 MOV R1,#+176 \ 000000F8 DE1C81E3 ORR R1,R1,#0xDE00 \ 000000FC 0900A0E3 MOV R0,#+9 \ 00000100 420C80E3 ORR R0,R0,#0x4200 \ 00000104 000100EF SWI +256 3140 } \ 00000108 F081BDE8 POP {R4-R8,PC} ;; return \ ??maincsm_oncreate_0: \ 0000010C ........ DC32 Canvas 3141 \ In segment CODE, align 4, keep-with-next 3142 void maincsm_onclose(CSM_RAM *csm) 3143 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 3144 WriteDefSettings(); 3145 // SaveConfigData(successed_config_filename); 3146 3147 /* 3148 #pragma segment="CONFIG_C" 3149 unsigned int ul; 3150 int f; 3151 extern const CFG_HDR cfghdr0; //first var in CONFIG 3152 void *cfg=(void*)&cfghdr0; 3153 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 3154 3155 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 3156 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 3157 } 3158 fwrite(f,cfg,len,&ul); 3159 fclose(f,&ul); 3160 */ 3161 3162 // GBS_DelTimer(&tmr_dorecv); 3163 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable96 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C 3C00A0E3 MOV R0,#+60 \ 00000010 480D80E3 ORR R0,R0,#0x1200 \ 00000014 040080E0 ADD R0,R0,R4 \ 00000018 8C0100EF SWI +396 3164 // GBS_DelTimer(&tmr_ping); 3165 #ifdef EVILFOX 3166 #ifdef ELKA 3167 GBS_DelTimer(&mytmr); 3168 #endif 3169 GBS_DelTimer(&ctmr); 3170 GBS_DelTimer(&incs); 3171 RemoveKeybMsgHook((void *)my_keyhook); 3172 #endif 3173 GBS_DelTimer(&tmr_vibra); \ 0000001C 1C00A0E3 MOV R0,#+28 \ 00000020 480D80E3 ORR R0,R0,#0x1200 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 3174 GBS_DelTimer(&reconnect_tmr); \ 0000002C 2C00A0E3 MOV R0,#+44 \ 00000030 480D80E3 ORR R0,R0,#0x1200 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 3175 GBS_DelTimer(&tmr_illumination); \ 0000003C 0C00A0E3 MOV R0,#+12 \ 00000040 480D80E3 ORR R0,R0,#0x1200 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 3176 SetVibration(0); \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 7C0000EF SWI +124 3177 FreeTemplates(); \ 00000054 ........ BL FreeTemplates 3178 FreeCLIST(); \ 00000058 ........ _BLF FreeCLIST,??FreeCLIST??rA 3179 free_ICONS(); \ 0000005C ........ BL free_ICONS 3180 // FreeSmiles(); 3181 FreeWS(ews); \ 00000060 DC0094E5 LDR R0,[R4, #+220] \ 00000064 290100EF SWI +297 3182 FreeXStatusText(); \ 00000068 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 3183 // MutexDestroy(&contactlist_mtx); 3184 SUBPROC((void *)FreeSmiles); \ 0000006C 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 00000070 710100EF SWI +369 3185 SUBPROC((void *)FreeXStatusesImg); \ 00000074 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 00000078 710100EF SWI +369 3186 SUBPROC((void *)end_socket); \ 0000007C ........ LDR R0,??DataTable108 ;; end_socket \ 00000080 710100EF SWI +369 3187 SUBPROC((void *)ClearSendQ); \ 00000084 ........ LDR R0,??DataTable109 ;; ClearSendQ \ 00000088 710100EF SWI +369 3188 SUBPROC((void *)ElfKiller); \ 0000008C ........ LDR R0,??DataTable116 ;; ElfKiller \ 00000090 710100EF SWI +369 3189 } \ 00000094 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000098 ........ DC32 FreeSmiles \ 0000009C ........ DC32 FreeXStatusesImg 3190 \ In segment CODE, align 4, keep-with-next 3191 void do_reconnect(void) 3192 { 3193 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable96 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 341190E5 LDR R1,[R0, #+308] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 3194 { 3195 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 501180E5 STR R1,[R0, #+336] 3196 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable104 ;; create_connect \ 00000020 710100EF SWI +369 3197 } 3198 } \ 00000024 0080BDE8 POP {PC} ;; return 3199 \ In segment CODE, align 4, keep-with-next 3200 void CheckDoubleRun(void) 3201 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 3202 int csm_id; 3203 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable96 ;; S_ICONS \ 00000008 7C0094E5 LDR R0,[R4, #+124] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1100000A BEQ ??CheckDoubleRun_0 3204 { 3205 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable99 ;; Canvas 3206 gipc.name_from=ipc_my_name; 3207 gipc.data=(void *)csm_id; \ 00000018 7C0084E5 STR R0,[R4, #+124] \ 0000001C 752F81E2 ADD R2,R1,#+468 \ 00000020 742084E5 STR R2,[R4, #+116] \ 00000024 6D1F81E2 ADD R1,R1,#+436 \ 00000028 781084E5 STR R1,[R4, #+120] 3208 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000002C 743084E2 ADD R3,R4,#+116 \ 00000030 0220A0E3 MOV R2,#+2 \ 00000034 B010A0E3 MOV R1,#+176 \ 00000038 DE1C81E3 ORR R1,R1,#0xDE00 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 3209 LockSched(); \ 00000048 460100EF SWI +326 3210 CloseCSM(maincsm_id); \ 0000004C CC0094E5 LDR R0,[R4, #+204] \ 00000050 FC0100EF SWI +508 3211 //ShowMSG(1,(int)LG_ALREADY_STARTED); 3212 UnlockSched(); \ 00000054 470100EF SWI +327 \ 00000058 1080BDE8 POP {R4,PC} 3213 } 3214 else 3215 { 3216 InitXStatusesImg(); \ ??CheckDoubleRun_0: \ 0000005C ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 3217 //InitSmiles(); Это вызовется из InitXStatusesImg 3218 create_connect(); \ 00000060 ........ BL create_connect 3219 } 3220 } \ 00000064 1080BDE8 POP {R4,PC} ;; return 3221 \ In segment CODE, align 4, keep-with-next 3222 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 3223 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 \ 00000008 ........ LDR R4,??DataTable98 ;; S_ICONS \ 0000000C ........ LDR R6,??DataTable99 ;; Canvas \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 040097E5 LDR R0,[R7, #+4] \ 00000018 0050A0E3 MOV R5,#+0 \ 0000001C B010A0E3 MOV R1,#+176 \ 00000020 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000024 010050E1 CMP R0,R1 \ 00000028 6E00001A BNE ??maincsm_onmessage_2 3224 extern const int VIBR_ON_CONNECT; 3225 3226 // char ss[100]; 3227 MAIN_CSM *csm=(MAIN_CSM*)data; 3228 { 3229 //IPC 3230 if (msg->msg==MSG_IPC) 3231 { 3232 IPC_REQ *ipc; 3233 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 0C8097E5 LDR R8,[R7, #+12] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 6B00000A BEQ ??maincsm_onmessage_2 3234 { 3235 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C 6D9FA0E3 MOV R9,#+436 \ 00000040 061089E0 ADD R1,R9,R6 \ 00000044 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 6500001A BNE ??maincsm_onmessage_2 3236 { 3237 switch (msg->submess) \ 00000050 081097E5 LDR R1,[R7, #+8] \ 00000054 040098E5 LDR R0,[R8, #+4] \ 00000058 011041E2 SUB R1,R1,#+1 \ 0000005C 040051E3 CMP R1,#+4 \ 00000060 6000008A BHI ??maincsm_onmessage_2 \ 00000064 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 00000068 0120D2E7 LDRB R2,[R2, R1] \ 0000006C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000070 010A1116 DC8 +1,+10,+17,+22 \ 00000074 44000000 DC8 +68,+0,+0,+0 3238 { 3239 case IPC_CHECK_DOUBLERUN: 3240 //Если приняли свое собственное сообщение, значит запускаем чекер 3241 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 00000078 061089E0 ADD R1,R9,R6 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 0200001A BNE ??maincsm_onmessage_4 \ 00000084 FC059FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 00000088 710100EF SWI +369 \ 0000008C 550000EA B ??maincsm_onmessage_2 3242 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 00000090 CC0094E5 LDR R0,[R4, #+204] \ 00000094 080088E5 STR R0,[R8, #+8] \ 00000098 520000EA B ??maincsm_onmessage_2 3243 break; 3244 case IPC_SMILE_PROCESSED: 3245 //Только собственные смайлы ;) 3246 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 0000009C 061089E0 ADD R1,R9,R6 \ 000000A0 010050E1 CMP R0,R1 \ 000000A4 0100001A BNE ??maincsm_onmessage_7 \ 000000A8 DC059FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000AC 710100EF SWI +369 3247 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000B0 ........ BL SMART_REDRAW \ 000000B4 4B0000EA B ??maincsm_onmessage_2 3248 break; 3249 case IPC_XSTATUSIMG_PROCESSED: 3250 //Только собственные иксстатусы ;) 3251 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_9: \ 000000B8 061089E0 ADD R1,R9,R6 \ 000000BC 010050E1 CMP R0,R1 \ 000000C0 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000C4 C4059FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000C8 F7FFFFEA B ??maincsm_onmessage_8 3252 SMART_REDRAW(); 3253 break; 3254 case IPC_TENSECONDS: 3255 //Только свое сообщение 3256 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000CC 061089E0 ADD R1,R9,R6 \ 000000D0 010050E1 CMP R0,R1 \ 000000D4 4300001A BNE ??maincsm_onmessage_2 3257 { 3258 CLIST *t=(CLIST *)cltop; \ 000000D8 900094E5 LDR R0,[R4, #+144] 3259 int f=0; \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 1A00000A BEQ ??maincsm_onmessage_11 3260 while(t) 3261 { 3262 if(t->just_now) \ ??maincsm_onmessage_12: \ 000000E8 5C2090E5 LDR R2,[R0, #+92] \ 000000EC 000052E3 CMP R2,#+0 \ 000000F0 0200000A BEQ ??maincsm_onmessage_13 3263 { 3264 if (!(--(t->just_now))) { \ 000000F4 012052E2 SUBS R2,R2,#+1 \ 000000F8 5C2080E5 STR R2,[R0, #+92] 3265 f=1; \ 000000FC 0110A003 MOVEQ R1,#+1 3266 #ifdef EVILFOX 3267 total_c_online--; 3268 #endif 3269 } 3270 } 3271 if (t->isactive) \ ??maincsm_onmessage_13: \ 00000100 7C2090E5 LDR R2,[R0, #+124] \ 00000104 000052E3 CMP R2,#+0 \ 00000108 0200000A BEQ ??maincsm_onmessage_14 3272 { 3273 if (!(--(t->isactive))) f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню \ 0000010C 012052E2 SUBS R2,R2,#+1 \ 00000110 7C2080E5 STR R2,[R0, #+124] \ 00000114 0110A003 MOVEQ R1,#+1 3274 } 3275 t=(CLIST *)(t->next); \ ??maincsm_onmessage_14: \ 00000118 000090E5 LDR R0,[R0, #+0] 3276 } \ 0000011C 000050E3 CMP R0,#+0 \ 00000120 F0FFFF1A BNE ??maincsm_onmessage_12 3277 if (f) \ 00000124 000051E3 CMP R1,#+0 \ 00000128 0900000A BEQ ??maincsm_onmessage_11 3278 { 3279 CLIST *oldt=NULL; 3280 if (contactlist_menu_id) \ 0000012C 3C1194E5 LDR R1,[R4, #+316] \ 00000130 000051E3 CMP R1,#+0 \ 00000134 0400000A BEQ ??maincsm_onmessage_15 3281 { 3282 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000138 3C0194E5 LDR R0,[R4, #+316] \ 0000013C 0010A0E3 MOV R1,#+0 \ 00000140 090200EF SWI +521 \ 00000144 8F0100EF SWI +399 \ 00000148 ........ _BLF FindContactByN,??FindContactByN??rA 3283 } 3284 RecountMenu(oldt, 1); \ ??maincsm_onmessage_15: \ 0000014C 0110A0E3 MOV R1,#+1 \ 00000150 ........ BL RecountMenu 3285 } 3286 if (time_to_stop_t9) \ ??maincsm_onmessage_11: \ 00000154 580194E5 LDR R0,[R4, #+344] \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 2100000A BEQ ??maincsm_onmessage_2 3287 { 3288 if (!(--time_to_stop_t9)) \ 00000160 010050E2 SUBS R0,R0,#+1 \ 00000164 580184E5 STR R0,[R4, #+344] \ 00000168 1E00001A BNE ??maincsm_onmessage_2 3289 { 3290 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 0000016C 400194E5 LDR R0,[R4, #+320] \ 00000170 350100EF SWI +309 \ 00000174 000050E3 CMP R0,#+0 \ 00000178 1A00000A BEQ ??maincsm_onmessage_2 \ 0000017C 960100EF SWI +406 \ 00000180 180000EA B ??maincsm_onmessage_2 3291 } 3292 } 3293 } 3294 break; 3295 #ifdef EVILFOX 3296 #else 3297 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 3298 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_16: \ 00000184 080098E5 LDR R0,[R8, #+8] \ 00000188 040090E5 LDR R0,[R0, #+4] \ 0000018C 1B0000EF SWI +27 \ 00000190 0090A0E1 MOV R9,R0 3299 TPKT *msg=malloc(sizeof(PKT)+l); \ 00000194 080089E2 ADD R0,R9,#+8 \ 00000198 140000EF SWI +20 \ 0000019C 00A0A0E1 MOV R10,R0 3300 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 000001A0 080098E5 LDR R0,[R8, #+8] 3301 msg->pkt.type=T_SENDMSG; 3302 msg->pkt.data_len=l; 3303 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 000001A4 0920A0E1 MOV R2,R9 \ 000001A8 000090E5 LDR R0,[R0, #+0] \ 000001AC 00008AE5 STR R0,[R10, #+0] \ 000001B0 0200A0E3 MOV R0,#+2 \ 000001B4 B400CAE1 STRH R0,[R10, #+4] \ 000001B8 B690CAE1 STRH R9,[R10, #+6] \ 000001BC 080098E5 LDR R0,[R8, #+8] \ 000001C0 041090E5 LDR R1,[R0, #+4] \ 000001C4 08008AE2 ADD R0,R10,#+8 \ 000001C8 1E0100EF SWI +286 3304 //slientsend=1; 3305 SENDMSGCOUNT++; //Номер сообщения \ 000001CC D40094E5 LDR R0,[R4, #+212] 3306 SUBPROC((void *)SendAnswer,0,msg); \ 000001D0 0A20A0E1 MOV R2,R10 \ 000001D4 010080E2 ADD R0,R0,#+1 \ 000001D8 D40084E5 STR R0,[R4, #+212] \ 000001DC ........ LDR R0,??DataTable122 ;; SendAnswer \ 000001E0 0010A0E3 MOV R1,#+0 \ 000001E4 710100EF SWI +369 3307 break; 3308 #endif 3309 } 3310 } 3311 } 3312 } 3313 //Нарисуем иконочку моего статуса 3314 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 3315 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 000001E8 068100EF SWI +33030 \ 000001EC 040090E5 LDR R0,[R0, #+4] \ 000001F0 080100EF SWI +264 3316 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 000001F4 2C0090E5 LDR R0,[R0, #+44] \ 000001F8 350100EF SWI +309 \ 000001FC 000050E3 CMP R0,#+0 \ 00000200 4F00000A BEQ ??maincsm_onmessage_17 3317 { 3318 GUI *igui=GetTopGUI(); 3319 if (igui) //И он существует \ 00000204 4D0100EF SWI +333 \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 4C00000A BEQ ??maincsm_onmessage_17 3320 { 3321 //// void *canvasdata=BuildCanvas(); 3322 canvasdata=BuildCanvas(); \ 00000210 F18000EF SWI +33009 \ 00000214 AC0084E5 STR R0,[R4, #+172] 3323 int icn; 3324 #ifdef EVILFOX 3325 if(time_draw) 3326 { 3327 #endif 3328 if (total_unread) \ 00000218 8C0094E5 LDR R0,[R4, #+140] \ 0000021C 000050E3 CMP R0,#+0 3329 icn=IS_MSG; \ 00000220 0D10A013 MOVNE R1,#+13 \ 00000224 0500001A BNE ??maincsm_onmessage_18 3330 else 3331 { 3332 switch(connect_state) \ 00000228 141194E5 LDR R1,[R4, #+276] \ 0000022C 000051E3 CMP R1,#+0 \ 00000230 0200000A BEQ ??maincsm_onmessage_18 \ 00000234 031051E2 SUBS R1,R1,#+3 3333 { 3334 case 0: 3335 icn=IS_OFFLINE; break; 3336 case 3: 3337 icn=CurrentStatus; //IS_ONLINE; \ 00000238 F8109405 LDREQ R1,[R4, #+248] 3338 break; 3339 default: 3340 icn=IS_UNKNOWN; break; \ 0000023C 0E10A013 MOVNE R1,#+14 3341 } 3342 } 3343 3344 //Тут трохи поменял 3345 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 3346 if((icon_change)||(total_unread)||(connect_state!=3)) \ ??maincsm_onmessage_18: \ 00000240 C82094E5 LDR R2,[R4, #+200] \ 00000244 000052E3 CMP R2,#+0 \ 00000248 00005003 CMPEQ R0,#+0 \ 0000024C 14019405 LDREQ R0,[R4, #+276] \ 00000250 03005003 CMPEQ R0,#+3 \ 00000254 1600000A BEQ ??maincsm_onmessage_19 3347 { 3348 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 3349 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ 00000258 018184E0 ADD R8,R4,R1, LSL #+2 \ 0000025C 000098E5 LDR R0,[R8, #+0] \ 00000260 210000EF SWI +33 \ 00000264 0090A0E1 MOV R9,R0 \ 00000268 000098E5 LDR R0,[R8, #+0] \ 0000026C 220000EF SWI +34 \ 00000270 1C149FE5 LDR R1,??maincsm_onmessage_5+0xC ;; IDLEICON_X \ 00000274 00A091E5 LDR R10,[R1, #+0] \ 00000278 18149FE5 LDR R1,??maincsm_onmessage_5+0x10 ;; IDLEICON_Y \ 0000027C 0A0080E0 ADD R0,R0,R10 \ 00000280 00B091E5 LDR R11,[R1, #+0] \ 00000284 0110A0E3 MOV R1,#+1 \ 00000288 02002DE9 PUSH {R1} \ 0000028C 013040E2 SUB R3,R0,#+1 \ 00000290 0B20A0E1 MOV R2,R11 \ 00000294 0B1089E0 ADD R1,R9,R11 \ 00000298 011041E2 SUB R1,R1,#+1 \ 0000029C 02002DE9 PUSH {R1} \ 000002A0 AC0094E5 LDR R0,[R4, #+172] \ 000002A4 0A10A0E1 MOV R1,R10 \ 000002A8 250000EF SWI +37 3350 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 000002AC 002098E5 LDR R2,[R8, #+0] \ 000002B0 1F0000EA B ??maincsm_onmessage_20 3351 } 3352 else 3353 { 3354 PNGTOP_DESC *pltop=PNG_TOP(); 3355 pltop->dyn_pltop=XStatusesImgList; 3356 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 3357 IDLEICON_Y+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ ??maincsm_onmessage_19: \ 000002B4 E0839FE5 LDR R8,??maincsm_onmessage_5+0x14 ;; XStatusesIconArray \ 000002B8 B98100EF SWI +33209 \ 000002BC ........ LDR R1,??DataTable101 ;; XStatusesImgList \ 000002C0 001091E5 LDR R1,[R1, #+0] \ 000002C4 081080E5 STR R1,[R0, #+8] \ 000002C8 FC0094E5 LDR R0,[R4, #+252] \ 000002CC 001098E5 LDR R1,[R8, #+0] \ 000002D0 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 000002D4 210000EF SWI +33 \ 000002D8 001098E5 LDR R1,[R8, #+0] \ 000002DC 0090A0E1 MOV R9,R0 \ 000002E0 FC0094E5 LDR R0,[R4, #+252] \ 000002E4 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 000002E8 220000EF SWI +34 \ 000002EC A0139FE5 LDR R1,??maincsm_onmessage_5+0xC ;; IDLEICON_X \ 000002F0 00A091E5 LDR R10,[R1, #+0] \ 000002F4 9C139FE5 LDR R1,??maincsm_onmessage_5+0x10 ;; IDLEICON_Y \ 000002F8 0A0080E0 ADD R0,R0,R10 \ 000002FC 00B091E5 LDR R11,[R1, #+0] \ 00000300 0110A0E3 MOV R1,#+1 \ 00000304 02002DE9 PUSH {R1} \ 00000308 013040E2 SUB R3,R0,#+1 \ 0000030C 0B20A0E1 MOV R2,R11 \ 00000310 0B1089E0 ADD R1,R9,R11 \ 00000314 011041E2 SUB R1,R1,#+1 \ 00000318 02002DE9 PUSH {R1} \ 0000031C AC0094E5 LDR R0,[R4, #+172] \ 00000320 0A10A0E1 MOV R1,R10 \ 00000324 250000EF SWI +37 3358 DrawImg(IDLEICON_X,IDLEICON_Y,XStatusesIconArray[CurrentXStatus]); \ 00000328 FC0094E5 LDR R0,[R4, #+252] \ 0000032C 001098E5 LDR R1,[R8, #+0] \ 00000330 002191E7 LDR R2,[R1, +R0, LSL #+2] \ ??maincsm_onmessage_20: \ 00000334 0B10A0E1 MOV R1,R11 \ 00000338 0A00A0E1 MOV R0,R10 \ 0000033C 230000EF SWI +35 \ 00000340 08D08DE2 ADD SP,SP,#+8 3359 } 3360 #ifdef EVILFOX_2 3361 DrawImg(IDLEICON_X-1,IDLEICON_Y-8,(int)"4:\\zbin\\naticq\\img\\naticq_ms.png"); 3362 #endif 3363 #ifdef EVILFOX 3364 if(connect_state==3) 3365 sprintf(online_txt, "online: %02d:%02d:%02d", hours, minutes, seconds); 3366 else 3367 sprintf(online_txt ,"Offline"); 3368 if(Is_Online_On) 3369 PrintField(ONTIME_X,ONTIME_Y, online_txt, align, fonto, spaco1r); 3370 if(Show_Ping) 3371 PrintField(PING_X,PING_Y, ping_txt, align, fonto, spaco1r); 3372 if(Is_Unread_On) 3373 { 3374 sprintf(unread_txt, "Unread: %d", total_unread2); 3375 PrintField(UNREAD_X,UNREAD_Y, unread_txt, align, fonto, spaco1r); 3376 } 3377 if(Is_DRAWMAIN_On&&main_d) 3378 { 3379 if(fonto==1) 3380 { 3381 PrintField(MSG_X,MSG_Y, a_txt, align, fonto, spaco2); 3382 PrintField(MSG_X,MSG_Y+paused_height+1, s_txt, align, fonto, spaco2); 3383 PrintField(MSG_X,MSG_Y+(2*paused_height)+2, d_txt, align, fonto, spaco2); 3384 PrintField(MSG_X,MSG_Y+(3*paused_height)+3, f_txt, align, fonto, spaco2); 3385 PrintField(MSG_X,MSG_Y+(4*paused_height)+4, g_txt, align, fonto, spaco2); 3386 } 3387 else 3388 { 3389 PrintField(MSG_X,MSG_Y, a_txt, align, fonto, spaco1r); 3390 PrintField(MSG_X,MSG_Y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco1r); 3391 PrintField(MSG_X,MSG_Y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco1r); 3392 PrintField(MSG_X,MSG_Y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco1r); 3393 PrintField(MSG_X,MSG_Y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco1r); 3394 } 3395 main_d=0; 3396 } 3397 icon_change2=!(icon_change2); 3398 if(icon_change2) 3399 icon_change=!(icon_change); 3400 time_draw=0; 3401 } 3402 #endif 3403 } 3404 } 3405 #ifdef EVILFOX 3406 else 3407 { 3408 time_draw=1; 3409 main_d=1; 3410 } 3411 #endif 3412 } 3413 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_17: \ 00000344 040097E5 LDR R0,[R7, #+4] \ 00000348 AF10A0E3 MOV R1,#+175 \ 0000034C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000350 010050E1 CMP R0,R1 \ 00000354 0F00001A BNE ??maincsm_onmessage_21 3414 { 3415 extern const char *successed_config_filename; 3416 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 00000358 ........ LDR R0,??DataTable115 ;; successed_config_filename \ 0000035C 0C1097E5 LDR R1,[R7, #+12] \ 00000360 000090E5 LDR R0,[R0, #+0] \ 00000364 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 0900001A BNE ??maincsm_onmessage_21 3417 { 3418 ShowMSG(1,(int)"NatICQ config updated!"); \ 00000370 E01086E2 ADD R1,R6,#+224 \ 00000374 0100A0E3 MOV R0,#+1 \ 00000378 480100EF SWI +328 3419 InitConfig(); \ 0000037C ........ _BLF InitConfig,??InitConfig??rA 3420 #ifdef EVILFOX 3421 FontPathFree(); 3422 FontPathInit(fonto,(char *)fontpath, 0); 3423 if(fonto==1) 3424 { 3425 spaco1r=spaco1; 3426 char *heght=malloc(64); 3427 sprintf(heght, "%s2240.png", fontpath); 3428 paused_height=GetImgHeight((int)heght); 3429 mfree(heght); 3430 } 3431 else 3432 { 3433 spaco1r=10001+(system_color*100); 3434 paused_height=fonto-100; 3435 } 3436 init_time_zone(); 3437 #endif 3438 free_ICONS(); \ 00000380 ........ BL free_ICONS 3439 setup_ICONS(); \ 00000384 ........ BL setup_ICONS 3440 ResortCL(); \ 00000388 ........ _BLF ResortCL,??ResortCL??rA 3441 RecountMenu(NULL, 1); \ 0000038C 0110A0E3 MOV R1,#+1 \ 00000390 0000A0E3 MOV R0,#+0 \ 00000394 ........ BL RecountMenu 3442 // InitSmiles(); 3443 } 3444 } 3445 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_21: \ 00000398 040097E5 LDR R0,[R7, #+4] \ 0000039C 0E10A0E3 MOV R1,#+14 \ 000003A0 641C81E3 ORR R1,R1,#0x6400 \ 000003A4 010050E1 CMP R0,R1 \ 000003A8 0E00001A BNE ??maincsm_onmessage_22 3446 { 3447 if ((int)msg->data0==csm->gui_id) \ 000003AC 0C109DE5 LDR R1,[SP, #+12] \ 000003B0 0C0097E5 LDR R0,[R7, #+12] \ 000003B4 281091E5 LDR R1,[R1, #+40] \ 000003B8 010050E1 CMP R0,R1 3448 { 3449 csm->csm.state=-3; \ 000003BC 0C009D05 LDREQ R0,[SP, #+12] \ 000003C0 0210E003 MVNEQ R1,#+2 \ 000003C4 10108005 STREQ R1,[R0, #+16] 3450 } 3451 if ((int)msg->data0==contactlist_menu_id) \ 000003C8 0C0097E5 LDR R0,[R7, #+12] \ 000003CC 3C1194E5 LDR R1,[R4, #+316] \ 000003D0 010050E1 CMP R0,R1 3452 { 3453 contactlist_menu_id=0; \ 000003D4 3C518405 STREQ R5,[R4, #+316] 3454 prev_clmenu_itemcount=0; \ 000003D8 44518405 STREQ R5,[R4, #+324] 3455 } 3456 if ((int)msg->data0==edchat_id) \ 000003DC 401194E5 LDR R1,[R4, #+320] \ 000003E0 010050E1 CMP R0,R1 3457 { 3458 edchat_id=0; \ 000003E4 40518405 STREQ R5,[R4, #+320] 3459 } 3460 } 3461 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_22: \ 000003E8 040097E5 LDR R0,[R7, #+4] \ 000003EC AE10A0E3 MOV R1,#+174 \ 000003F0 DE1C81E3 ORR R1,R1,#0xDE00 \ 000003F4 010050E1 CMP R0,R1 \ 000003F8 2600001A BNE ??maincsm_onmessage_23 3462 { 3463 switch((int)msg->data0) \ 000003FC 0C0097E5 LDR R0,[R7, #+12] \ 00000400 101097E5 LDR R1,[R7, #+16] \ 00000404 ........ LDR R9,??DataTable103 ;; do_reconnect \ 00000408 2C20A0E3 MOV R2,#+44 \ 0000040C 482D82E3 ORR R2,R2,#0x1200 \ 00000410 047082E0 ADD R7,R2,R4 \ 00000414 482F42E2 SUB R2,R2,#+288 \ 00000418 048082E0 ADD R8,R2,R4 \ 0000041C 01A0A0E3 MOV R10,#+1 \ 00000420 802050E2 SUBS R2,R0,#+128 \ 00000424 0800000A BEQ ??maincsm_onmessage_24 \ 00000428 022052E2 SUBS R2,R2,#+2 \ 0000042C 0200000A BEQ ??maincsm_onmessage_25 \ 00000430 122052E2 SUBS R2,R2,#+18 \ 00000434 0F00000A BEQ ??maincsm_onmessage_26 \ 00000438 190000EA B ??maincsm_onmessage_27 3464 { 3465 case LMAN_DISCONNECT_IND: 3466 is_gprs_online=0; \ ??maincsm_onmessage_25: \ 0000043C 345184E5 STR R5,[R4, #+308] 3467 return(1); \ 00000440 0100A0E3 MOV R0,#+1 \ 00000444 10D08DE2 ADD SP,SP,#+16 \ 00000448 F08FBDE8 POP {R4-R11,PC} ;; return 3468 case LMAN_CONNECT_CNF: 3469 vibra_count=1; \ ??maincsm_onmessage_24: \ 0000044C 04A184E5 STR R10,[R4, #+260] 3470 start_vibra(); \ 00000450 ........ BL start_vibra 3471 is_gprs_online=1; \ 00000454 34A184E5 STR R10,[R4, #+308] 3472 strcpy(logmsg,LG_GRGPRSUP); \ 00000458 C81086E2 ADD R1,R6,#+200 \ 0000045C 0800A0E1 MOV R0,R8 \ 00000460 1A0000EF SWI +26 3473 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ 00000464 0920A0E1 MOV R2,R9 \ 00000468 871EA0E3 MOV R1,#+2160 \ 0000046C 0700A0E1 MOV R0,R7 \ 00000470 4D0000EF SWI +77 3474 return(1); \ 00000474 070000EA B ??maincsm_onmessage_23 3475 case ENIP_DNR_HOST_BY_NAME: 3476 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_26: \ 00000478 4C0194E5 LDR R0,[R4, #+332] \ 0000047C 000051E1 CMP R1,R0 \ 00000480 0400001A BNE ??maincsm_onmessage_23 3477 { 3478 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000484 500194E5 LDR R0,[R4, #+336] \ 00000488 000050E3 CMP R0,#+0 \ 0000048C 0100000A BEQ ??maincsm_onmessage_23 \ 00000490 ........ LDR R0,??DataTable104 ;; create_connect \ ??maincsm_onmessage_28: \ 00000494 710100EF SWI +369 3479 } 3480 return(1); \ ??maincsm_onmessage_23: \ 00000498 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_29: \ 0000049C 10D08DE2 ADD SP,SP,#+16 \ 000004A0 F08FBDE8 POP {R4-R11,PC} 3481 } 3482 if ((int)msg->data1==sock) \ ??maincsm_onmessage_27: \ 000004A4 182194E5 LDR R2,[R4, #+280] \ 000004A8 020051E1 CMP R1,R2 \ 000004AC F9FFFF1A BNE ??maincsm_onmessage_23 3483 { 3484 //Если наш сокет 3485 if ((((unsigned int)msg->data0)>>28)==0xA) \ 000004B0 201EA0E1 LSR R1,R0,#+28 \ 000004B4 0A0051E3 CMP R1,#+10 \ 000004B8 0200001A BNE ??maincsm_onmessage_30 3486 { 3487 //Принят пакет 3488 ProcessPacket((TPKT *)msg->data0); \ 000004BC ........ BL ProcessPacket 3489 return(0); \ 000004C0 0000A0E3 MOV R0,#+0 \ 000004C4 F4FFFFEA B ??maincsm_onmessage_29 3490 } 3491 switch((int)msg->data0) \ ??maincsm_onmessage_30: \ 000004C8 ........ LDR R2,??DataTable105 ;; VIBR_ON_CONNECT \ 000004CC 141194E5 LDR R1,[R4, #+276] \ 000004D0 00B092E5 LDR R11,[R2, #+0] \ 000004D4 8A0040E2 SUB R0,R0,#+138 \ 000004D8 050050E3 CMP R0,#+5 \ 000004DC EDFFFF8A BHI ??maincsm_onmessage_23 \ 000004E0 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 000004E4 D02092E1 LDRSB R2,[R2, R0] \ 000004E8 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 000004EC 39393401 DC8 +57,+57,+52,+1 \ 000004F0 423E0000 DC8 +66,+62,+0,+0 3492 { 3493 case ENIP_SOCK_CONNECTED: 3494 if (connect_state==1) \ ??maincsm_onmessage_31: \ 000004F4 010051E3 CMP R1,#+1 \ 000004F8 2C00001A BNE ??maincsm_onmessage_32 3495 { 3496 if(VIBR_ON_CONNECT) 3497 vibra_count=2; 3498 else 3499 vibra_count=1; 3500 start_vibra(); 3501 //Соединение установленно, посылаем пакет login 3502 strcpy(logmsg, LG_GRTRYLOGIN); 3503 { 3504 int i=strlen(PASS); \ 000004FC 9C719FE5 LDR R7,??maincsm_onmessage_5+0x18 ;; PASS \ 00000500 00005BE3 CMP R11,#+0 \ 00000504 0200A013 MOVNE R0,#+2 \ 00000508 04018415 STRNE R0,[R4, #+260] \ 0000050C 04A18405 STREQ R10,[R4, #+260] \ 00000510 ........ BL start_vibra \ 00000514 B81086E2 ADD R1,R6,#+184 \ 00000518 0800A0E1 MOV R0,R8 \ 0000051C 1A0000EF SWI +26 \ 00000520 0700A0E1 MOV R0,R7 \ 00000524 1B0000EF SWI +27 \ 00000528 0080A0E1 MOV R8,R0 3505 TPKT *p=malloc(sizeof(PKT)+i); \ 0000052C 080088E2 ADD R0,R8,#+8 \ 00000530 140000EF SWI +20 \ 00000534 0090A0E1 MOV R9,R0 3506 p->pkt.uin=UIN; \ 00000538 ........ LDR R0,??DataTable114 ;; UIN 3507 p->pkt.type=T_REQLOGIN; 3508 p->pkt.data_len=i; 3509 memcpy(p->data,PASS,i); \ 0000053C 0820A0E1 MOV R2,R8 \ 00000540 00B090E5 LDR R11,[R0, #+0] \ 00000544 0710A0E1 MOV R1,R7 \ 00000548 00B089E5 STR R11,[R9, #+0] \ 0000054C B4A0C9E1 STRH R10,[R9, #+4] \ 00000550 B680C9E1 STRH R8,[R9, #+6] \ 00000554 080089E2 ADD R0,R9,#+8 \ 00000558 1E0100EF SWI +286 3510 SUBPROC((void *)send_login,0,p); \ 0000055C 40019FE5 LDR R0,??maincsm_onmessage_5+0x1C ;; send_login \ 00000560 0920A0E1 MOV R2,R9 \ 00000564 0010A0E3 MOV R1,#+0 \ 00000568 710100EF SWI +369 3511 } 3512 GROUP_CACHE=0; \ 0000056C 385184E5 STR R5,[R4, #+312] 3513 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000570 D45084E5 STR R5,[R4, #+212] 3514 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000574 0500A0E1 MOV R0,R5 \ 00000578 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 0000057C 000050E3 CMP R0,#+0 \ 00000580 0100001A BNE ??maincsm_onmessage_33 \ 00000584 AC1086E2 ADD R1,R6,#+172 \ 00000588 ........ _BLF AddGroup,??AddGroup??rA 3515 if (!FindContactByUin(UIN)) AddContact(UIN, LG_CLLOOPBACK); \ ??maincsm_onmessage_33: \ 0000058C 0B00A0E1 MOV R0,R11 \ 00000590 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000594 000050E3 CMP R0,#+0 \ 00000598 0200001A BNE ??maincsm_onmessage_34 \ 0000059C A01086E2 ADD R1,R6,#+160 \ 000005A0 0B00A0E1 MOV R0,R11 \ 000005A4 ........ _BLF AddContact,??AddContact??rA 3516 SMART_REDRAW(); \ ??maincsm_onmessage_34: \ 000005A8 ........ BL SMART_REDRAW \ 000005AC B9FFFFEA B ??maincsm_onmessage_23 3517 } 3518 else 3519 { 3520 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_32: \ 000005B0 781086E2 ADD R1,R6,#+120 \ ??maincsm_onmessage_35: \ 000005B4 0100A0E3 MOV R0,#+1 \ 000005B8 480100EF SWI +328 \ 000005BC B5FFFFEA B ??maincsm_onmessage_23 3521 } 3522 break; 3523 case ENIP_SOCK_DATA_READ: 3524 if (connect_state>=2) \ ??maincsm_onmessage_36: \ 000005C0 020051E3 CMP R1,#+2 3525 { 3526 //Если посылали send 3527 SUBPROC((void *)get_answer); \ 000005C4 DC009FA5 LDRGE R0,??maincsm_onmessage_5+0x20 ;; get_answer \ 000005C8 B1FFFFAA BGE ??maincsm_onmessage_28 3528 //SMART_REDRAW(); 3529 } 3530 else 3531 { 3532 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 000005CC 541086E2 ADD R1,R6,#+84 \ 000005D0 F7FFFFEA B ??maincsm_onmessage_35 3533 } 3534 break; 3535 case ENIP_BUFFER_FREE: 3536 case ENIP_BUFFER_FREE1: 3537 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_37: \ 000005D4 ........ LDR R0,??DataTable122 ;; SendAnswer \ 000005D8 0020A0E3 MOV R2,#+0 \ 000005DC 0210A0E1 MOV R1,R2 \ 000005E0 710100EF SWI +369 \ 000005E4 ABFFFFEA B ??maincsm_onmessage_23 3538 break; 3539 case ENIP_SOCK_REMOTE_CLOSED: 3540 //Закрыт со стороны сервера 3541 if (connect_state) \ ??maincsm_onmessage_38: \ 000005E8 000051E3 CMP R1,#+0 \ 000005EC A9FFFF0A BEQ ??maincsm_onmessage_23 3542 SUBPROC((void *)end_socket); \ 000005F0 ........ LDR R0,??DataTable108 ;; end_socket \ 000005F4 A6FFFFEA B ??maincsm_onmessage_28 3543 break; 3544 case ENIP_SOCK_CLOSED: 3545 //strcpy(logmsg, "No connection"); 3546 //Dump not received 3547 /* if (RXstate>(-(int)sizeof(PKT))) 3548 { 3549 unsigned int err; 3550 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 3551 if (f!=-1) 3552 { 3553 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 3554 fclose(f,&err); 3555 } 3556 }*/ 3557 FillAllOffline(); \ ??maincsm_onmessage_39: \ 000005F8 ........ _BLF FillAllOffline,??FillAllOffline??rA 3558 RecountMenu(NULL, 1); \ 000005FC 0110A0E3 MOV R1,#+1 \ 00000600 0500A0E1 MOV R0,R5 \ 00000604 ........ BL RecountMenu 3559 connect_state=0; \ 00000608 145184E5 STR R5,[R4, #+276] 3560 sock=-1; \ 0000060C 0500E0E1 MVN R0,R5 \ 00000610 180184E5 STR R0,[R4, #+280] 3561 if(VIBR_ON_CONNECT) \ 00000614 00005BE3 CMP R11,#+0 3562 vibra_count=4; \ 00000618 0400A013 MOVNE R0,#+4 \ 0000061C 04018415 STRNE R0,[R4, #+260] 3563 else 3564 vibra_count=1; \ 00000620 04A18405 STREQ R10,[R4, #+260] 3565 3566 start_vibra(); \ 00000624 ........ BL start_vibra 3567 if (sendq_p) \ 00000628 300194E5 LDR R0,[R4, #+304] \ 0000062C 000050E3 CMP R0,#+0 \ 00000630 0400000A BEQ ??maincsm_onmessage_40 3568 { 3569 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000634 2C3194E5 LDR R3,[R4, #+300] \ 00000638 102086E2 ADD R2,R6,#+16 \ 0000063C FF10A0E3 MOV R1,#+255 \ 00000640 0800A0E1 MOV R0,R8 \ 00000644 1B0100EF SWI +283 3570 } 3571 SMART_REDRAW(); \ ??maincsm_onmessage_40: \ 00000648 ........ BL SMART_REDRAW 3572 SUBPROC((void *)ClearSendQ); \ 0000064C ........ LDR R0,??DataTable109 ;; ClearSendQ \ 00000650 710100EF SWI +369 3573 if (!disautorecconect) \ 00000654 E40094E5 LDR R0,[R4, #+228] \ 00000658 000050E3 CMP R0,#+0 \ 0000065C 8DFFFF1A BNE ??maincsm_onmessage_23 3574 { 3575 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ 00000660 0920A0E1 MOV R2,R9 \ 00000664 871EA0E3 MOV R1,#+2160 \ 00000668 0700A0E1 MOV R0,R7 \ 0000066C 4D0000EF SWI +77 3576 snprintf(logmsg,255,"%s\nReconect after 10 second...",logmsg); \ 00000670 0830A0E1 MOV R3,R8 \ 00000674 342086E2 ADD R2,R6,#+52 \ 00000678 FF10A0E3 MOV R1,#+255 \ 0000067C 0800A0E1 MOV R0,R8 \ 00000680 1B0100EF SWI +283 \ 00000684 83FFFFEA B ??maincsm_onmessage_23 \ ??maincsm_onmessage_5: \ 00000688 ........ DC32 CheckDoubleRun \ 0000068C ........ DC32 ProcessNextSmile \ 00000690 ........ DC32 ProcessNextXStatImg \ 00000694 ........ DC32 IDLEICON_X \ 00000698 ........ DC32 IDLEICON_Y \ 0000069C ........ DC32 XStatusesIconArray \ 000006A0 ........ DC32 PASS \ 000006A4 ........ DC32 send_login \ 000006A8 ........ DC32 get_answer 3577 } 3578 break; 3579 } 3580 } 3581 } 3582 return(1); 3583 } 3584 3585 \ In segment DATA_C, align 4, align-sorted 3586 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 3587 \ In segment DATA_Z, align 4, align-sorted 3588 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 3589 3590 const struct 3591 { 3592 CSM_DESC maincsm; 3593 WSHDR maincsm_name; \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ 0000000C C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 3594 }MAINCSM = \ MAINCSM: \ 00000020 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 0000003C 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 00000058 8B00 DC16 139 \ 0000005A 0000 DC8 0, 0 3595 { 3596 { 3597 maincsm_onmessage, 3598 maincsm_oncreate, 3599 #ifdef NEWSGOLD 3600 0, 3601 0, 3602 0, 3603 0, 3604 #endif 3605 maincsm_onclose, 3606 sizeof(MAIN_CSM), 3607 1, 3608 &minus11 3609 }, 3610 { 3611 maincsm_name_body, 3612 NAMECSM_MAGIC1, 3613 NAMECSM_MAGIC2, 3614 0x0, 3615 139 3616 } 3617 }; 3618 \ In segment CODE, align 4, keep-with-next 3619 void UpdateCSMname(void) 3620 { 3621 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable113 ;; `?` \ 00000004 ........ LDR R1,??DataTable114 ;; UIN \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002091E5 LDR R2,[R1, #+0] \ 00000010 0010A0E1 MOV R1,R0 \ 00000014 480080E2 ADD R0,R0,#+72 \ 00000018 240100EF SWI +292 3622 } \ 0000001C 0080BDE8 POP {PC} ;; return 3623 3624 \ In segment CODE, align 4, keep-with-next 3625 int main(char *filename) 3626 { \ main: \ 00000000 70402DE9 PUSH {R4-R6,LR} 3627 MAIN_CSM main_csm; 3628 char *s; 3629 int len; 3630 extern const char *successed_config_filename; 3631 WSHDR *ws; 3632 3633 InitConfig(); 3634 s=strrchr(filename,'\\'); 3635 len=(s-filename)+1; 3636 strncpy(elf_path,filename,len); \ 00000004 ........ LDR R6,??DataTable124 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ _BLF InitConfig,??InitConfig??rA \ 00000014 5C10A0E3 MOV R1,#+92 \ 00000018 0400A0E1 MOV R0,R4 \ 0000001C 170100EF SWI +279 \ 00000020 040040E0 SUB R0,R0,R4 \ 00000024 015080E2 ADD R5,R0,#+1 \ 00000028 0520A0E1 MOV R2,R5 \ 0000002C 0410A0E1 MOV R1,R4 3637 elf_path[len]=0; 3638 if (!UIN) \ 00000030 ........ LDR R4,??DataTable113 ;; `?` \ 00000034 680F86E2 ADD R0,R6,#+416 \ 00000038 160100EF SWI +278 \ 0000003C 060085E0 ADD R0,R5,R6 \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 A011C0E5 STRB R1,[R0, #+416] \ 00000048 ........ LDR R0,??DataTable114 ;; UIN \ 0000004C 000090E5 LDR R0,[R0, #+0] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 1500001A BNE ??main_0 3639 { 3640 LockSched(); \ 00000058 460100EF SWI +326 3641 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 0000005C 0C1084E2 ADD R1,R4,#+12 \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 480100EF SWI +328 3642 ws=AllocWS(150); \ 00000068 9600A0E3 MOV R0,#+150 \ 0000006C 250100EF SWI +293 \ 00000070 0040A0E1 MOV R4,R0 3643 str_2ws(ws,successed_config_filename,128); \ 00000074 ........ LDR R0,??DataTable115 ;; successed_config_filename \ 00000078 8020A0E3 MOV R2,#+128 \ 0000007C 001090E5 LDR R1,[R0, #+0] \ 00000080 0400A0E1 MOV R0,R4 \ 00000084 6C0100EF SWI +364 3644 ExecuteFile(ws,0,0); \ 00000088 0020A0E3 MOV R2,#+0 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0400A0E1 MOV R0,R4 \ 00000094 940000EF SWI +148 3645 UnlockSched(); \ 00000098 470100EF SWI +327 3646 SUBPROC((void *)ElfKiller); \ 0000009C ........ LDR R0,??DataTable116 ;; ElfKiller \ 000000A0 710100EF SWI +369 3647 return 0; \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC 7080BDE8 POP {R4-R6,PC} 3648 } 3649 ReadDefSettings(); \ ??main_0: \ 000000B0 ........ BL ReadDefSettings 3650 setup_ICONS(); \ 000000B4 ........ BL setup_ICONS 3651 LoadXStatusText(); \ 000000B8 ........ _BLF LoadXStatusText,??LoadXStatusText??rA 3652 UpdateCSMname(); \ 000000BC ........ BL UpdateCSMname 3653 LockSched(); \ 000000C0 460100EF SWI +326 3654 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); \ 000000C4 0020A0E3 MOV R2,#+0 \ 000000C8 0D10A0E1 MOV R1,SP \ 000000CC 200084E2 ADD R0,R4,#+32 \ 000000D0 070100EF SWI +263 \ 000000D4 CC0086E5 STR R0,[R6, #+204] 3655 UnlockSched(); \ 000000D8 470100EF SWI +327 3656 #ifdef EVILFOX 3657 time_counter(); 3658 FontPathInit(fonto,(char *)fontpath, 1); 3659 if(fonto==1) 3660 { 3661 spaco1r=spaco1; 3662 char *heght=malloc(64); 3663 sprintf(heght, "%s2240.png", fontpath); 3664 paused_height=GetImgHeight((int)heght); 3665 mfree(heght); 3666 } 3667 else 3668 { 3669 spaco1r=10001+(system_color*100); 3670 paused_height=fonto-100; 3671 } 3672 sprintf(ping_txt, "Ping: none"); 3673 init_time_zone(); 3674 AddKeybMsgHook((void *)my_keyhook); 3675 #endif 3676 return 0; \ 000000DC 0000A0E3 MOV R0,#+0 \ 000000E0 2CD08DE2 ADD SP,SP,#+44 \ 000000E4 7080BDE8 POP {R4-R6,PC} ;; return 3677 } 3678 3679 //=========================================================== 3680 // Edit chat 3681 //=========================================================== \ In segment CODE, align 4, keep-with-next 3682 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 3683 \ In segment CODE, align 4, keep-with-next 3684 char *ExtractAnswer(WSHDR *ws) 3685 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3686 S_SMILES *t; 3687 int c; 3688 int len=0; 3689 int scur; 3690 char *msg=NULL; 3691 unsigned short *wsbody=ws->wsbody; \ 00000004 008090E5 LDR R8,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 3692 int wslen=wsbody[0]; \ 0000000C B060D8E1 LDRH R6,[R8, #+0] \ 00000010 0050A0E3 MOV R5,#+0 3693 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 2E00000A BEQ ??ExtractAnswer_0 3694 { 3695 for (int i=0; i=0xE100) \ 00000030 E10C57E3 CMP R7,#+57600 \ 00000034 0A0000BA BLT ??ExtractAnswer_3 3699 { 3700 t=FindSmileByUni(c); \ 00000038 0700A0E1 MOV R0,R7 \ 0000003C ........ _BLF FindSmileByUni,??FindSmileByUni??rA 3701 if (t) \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0600000A BEQ ??ExtractAnswer_3 3702 { 3703 if (t->lines) \ 00000048 080090E5 LDR R0,[R0, #+8] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 0400000A BEQ ??ExtractAnswer_4 3704 { 3705 len+=strlen(t->lines->text); \ 00000054 0C0080E2 ADD R0,R0,#+12 \ 00000058 1B0000EF SWI +27 \ 0000005C 044080E0 ADD R4,R0,R4 \ 00000060 000000EA B ??ExtractAnswer_4 3706 } 3707 } 3708 else len++; \ ??ExtractAnswer_3: \ 00000064 014084E2 ADD R4,R4,#+1 3709 } 3710 else len++; 3711 } \ ??ExtractAnswer_4: \ 00000068 025085E2 ADD R5,R5,#+2 \ 0000006C 019059E2 SUBS R9,R9,#+1 \ 00000070 EDFFFF1A BNE ??ExtractAnswer_2 3712 3713 msg=malloc(len+1); \ ??ExtractAnswer_1: \ 00000074 010084E2 ADD R0,R4,#+1 \ 00000078 140000EF SWI +20 \ 0000007C 0050A0E1 MOV R5,R0 3714 scur=0; \ 00000080 0090A0E3 MOV R9,#+0 3715 for (int wcur=0; wcur=0xE100) 3720 { 3721 t=FindSmileByUni(c); 3722 if (t) 3723 { 3724 int w; 3725 char *s; 3726 if (t->lines) 3727 { 3728 s=t->lines->text; 3729 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 3756 { 3757 if (t->isactive) return t; \ 0000000C 7C1090E5 LDR R1,[R0, #+124] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 3758 } 3759 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable118 ;; S_ICONS + 144 \ 00000020 020000EA B ??FindNextActiveContact_2 3760 while(t=(CLIST *)(t->next)) 3761 { 3762 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 7C1090E5 LDR R1,[R0, #+124] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 3763 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 3764 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 3765 } 3766 \ In segment CODE, align 4, keep-with-next 3767 CLIST *FindPrevActiveContact(CLIST *t) 3768 { 3769 CLIST *cl; 3770 CLIST *cl_active=NULL; 3771 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable118 ;; S_ICONS + 144 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 3772 3773 3774 while(cl=cl->next) 3775 { 3776 if (cl==t) 3777 { 3778 if (cl_active==NULL) break; 3779 else return (cl_active); 3780 } 3781 else 3782 { 3783 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 7C3092E5 LDR R3,[R2, #+124] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 3784 } \ ??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 3785 } 3786 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 3787 { 3788 if (t->isactive) cl_active=t; \ 00000044 7C2090E5 LDR R2,[R0, #+124] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 3789 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 3790 } 3791 return cl_active; 3792 } 3793 3794 \ In segment CODE, align 4, keep-with-next 3795 void ed_options_handler(USR_MENU_ITEM *item) 3796 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 3797 EDCHAT_STRUCT *ed_struct=item->user_pointer; 3798 CLIST *t; 3799 int i=item->cur_item; 3800 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable124 ;; 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 3801 { 3802 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ws,LG_MNUEDNEXTACT); 3806 break; 3807 case 1: 3808 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 3809 break; 3810 default: 3811 i-=2; 3812 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 0C1195E5 LDR R1,[R5, #+268] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 3813 break; 3814 } 3815 } 3816 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 3817 { 3818 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 3819 { 3820 case 0: 3821 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 3822 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 3823 { 3824 GeneralFunc_flag1(edchat_id,1); \ 00000094 400195E5 LDR R0,[R5, #+320] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 3825 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 3826 } 3827 break; 3828 case 1: 3829 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 3830 if (t && t!=ed_struct->ed_contact) 3831 { 3832 GeneralFunc_flag1(edchat_id,1); 3833 CreateEditChat(t); 3834 } 3835 break; 3836 default: 3837 i-=2; 3838 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 3839 { 3840 EDITCONTROL ec; 3841 WSHDR *ed_ws; 3842 int c; 3843 char *p=templates_lines[i]; \ 000000CC 0C0195E5 LDR R0,[R5, #+268] 3844 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 3845 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 3846 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 3847 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 3848 { 3849 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 3850 while(c=*p++) 3851 { 3852 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 3853 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 3854 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 3855 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 3856 } 3857 else 3858 { 3859 while(c=*p++) 3860 { 3861 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 3862 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 3863 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 3864 } 3865 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 3866 } 3867 break; 3868 } 3869 } 3870 } \ ??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 `?lines; 3887 while(st) 3888 { 3889 if ((ulb&st->mask)==st->key) 3890 { 3891 if (!strncmp(s,st->text,strlen(st->text))) goto L1; 3892 } 3893 st=st->next; 3894 } 3895 t=t->next; 3896 } 3897 L1: 3898 if (t) 3899 { 3900 wchar=t->uni_smile; \ ??ParseAnswer_2: \ 00000044 04909AE5 LDR R9,[R10, #+4] 3901 s+=strlen(st->text); \ 00000048 0C0084E2 ADD R0,R4,#+12 \ 0000004C 1B0000EF SWI +27 \ 00000050 066080E0 ADD R6,R0,R6 3902 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000054 0000D6E5 LDRB R0,[R6, #+0] \ 00000058 0110D6E5 LDRB R1,[R6, #+1] \ 0000005C 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000060 0210D6E5 LDRB R1,[R6, #+2] \ 00000064 010880E0 ADD R0,R0,R1, LSL #+16 \ 00000068 0310D6E5 LDRB R1,[R6, #+3] \ 0000006C 018C80E0 ADD R8,R0,R1, LSL #+24 3903 } 3904 else 3905 { 3906 wchar=char8to16(wchar); 3907 s++; 3908 ulb>>=8; 3909 ulb+=s[3]<<24; 3910 } 3911 if (wchar!=10) wsAppendChar(ws,wchar); \ ??ParseAnswer_3: \ 00000070 0A0059E3 CMP R9,#+10 \ 00000074 0200000A BEQ ??ParseAnswer_1 \ 00000078 0910A0E1 MOV R1,R9 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 1C0000EF SWI +28 \ ??ParseAnswer_1: \ 00000084 0090D6E5 LDRB R9,[R6, #+0] \ 00000088 000059E3 CMP R9,#+0 \ 0000008C 2F00000A BEQ ??ParseAnswer_4 \ 00000090 07A0A0E1 MOV R10,R7 \ 00000094 220000EA B ??ParseAnswer_5 \ ??ParseAnswer_6: \ 00000098 0B00D4E5 LDRB R0,[R4, #+11] \ 0000009C 0A10D4E5 LDRB R1,[R4, #+10] \ 000000A0 0620D4E5 LDRB R2,[R4, #+6] \ 000000A4 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000A8 0910D4E5 LDRB R1,[R4, #+9] \ 000000AC 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000B0 0810D4E5 LDRB R1,[R4, #+8] \ 000000B4 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000B8 0710D4E5 LDRB R1,[R4, #+7] \ 000000BC 080000E0 AND R0,R0,R8 \ 000000C0 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000C4 0520D4E5 LDRB R2,[R4, #+5] \ 000000C8 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000CC 0420D4E5 LDRB R2,[R4, #+4] \ 000000D0 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 0700001A BNE ??ParseAnswer_7 \ 000000DC 0C0084E2 ADD R0,R4,#+12 \ 000000E0 1B0000EF SWI +27 \ 000000E4 0020A0E1 MOV R2,R0 \ 000000E8 0C1084E2 ADD R1,R4,#+12 \ 000000EC 0600A0E1 MOV R0,R6 \ 000000F0 150100EF SWI +277 \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 D1FFFF0A BEQ ??ParseAnswer_2 \ ??ParseAnswer_7: \ 000000FC 0D00A0E1 MOV R0,SP \ 00000100 0410A0E3 MOV R1,#+4 \ ??ParseAnswer_8: \ 00000104 ........ LDRB R2,[R4], #+1 \ 00000108 011051E2 SUBS R1,R1,#+1 \ 0000010C ........ STRB R2,[R0], #+1 \ 00000110 FBFFFF1A BNE ??ParseAnswer_8 \ 00000114 00409DE5 LDR R4,[SP, #+0] \ ??ParseAnswer_9: \ 00000118 000054E3 CMP R4,#+0 \ 0000011C DDFFFF1A BNE ??ParseAnswer_6 \ 00000120 00A09AE5 LDR R10,[R10, #+0] \ ??ParseAnswer_5: \ 00000124 00005AE3 CMP R10,#+0 \ 00000128 08409A15 LDRNE R4,[R10, #+8] \ 0000012C F9FFFF1A BNE ??ParseAnswer_9 \ 00000130 0900A0E1 MOV R0,R9 \ 00000134 ........ _BLF char8to16,??char8to16??rA \ 00000138 0090A0E1 MOV R9,R0 \ 0000013C 016086E2 ADD R6,R6,#+1 \ 00000140 0300D6E5 LDRB R0,[R6, #+3] \ 00000144 000CA0E1 LSL R0,R0,#+24 \ 00000148 288480E0 ADD R8,R0,R8, LSR #+8 \ 0000014C C7FFFFEA B ??ParseAnswer_3 3912 } 3913 i=ws->wsbody[0]; \ ??ParseAnswer_4: \ 00000150 000095E5 LDR R0,[R5, #+0] \ 00000154 B010D0E1 LDRH R1,[R0, #+0] \ 00000158 020051E3 CMP R1,#+2 \ 0000015C F187BDB8 POPLT {R0,R4-R10,PC} 3914 while(i>1) 3915 { 3916 if (ws->wsbody[i--]!=13) break; \ ??ParseAnswer_10: \ 00000160 0120A0E1 MOV R2,R1 \ 00000164 011042E2 SUB R1,R2,#+1 \ 00000168 822080E0 ADD R2,R0,R2, LSL #+1 \ 0000016C B020D2E1 LDRH R2,[R2, #+0] \ 00000170 0D0052E3 CMP R2,#+13 \ 00000174 F187BD18 POPNE {R0,R4-R10,PC} 3917 ws->wsbody[0]=i; \ 00000178 B010C0E1 STRH R1,[R0, #+0] 3918 } \ 0000017C 020051E3 CMP R1,#+2 \ 00000180 F6FFFFAA BGE ??ParseAnswer_10 3919 } \ 00000184 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000188 ........ DC32 s_top 3920 \ In segment CODE, align 4, keep-with-next 3921 void SaveAnswer(CLIST *cl, WSHDR *ws) 3922 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 3923 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 3924 mfree(cl->answer); \ 00000014 740094E5 LDR R0,[R4, #+116] \ 00000018 150000EF SWI +21 3925 cl->answer=p; \ 0000001C 745084E5 STR R5,[R4, #+116] 3926 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 3927 \ In segment CODE, align 4, keep-with-next 3928 int edchat_onkey(GUI *data, GUI_MSG *msg) 3929 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3930 //-1 - do redraw 3931 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R7,??DataTable124 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 0C00A0E3 MOV R0,#+12 \ 00000018 480D80E3 ORR R0,R0,#0x1200 \ 0000001C 070080E0 ADD R0,R0,R7 \ 00000020 8C0100EF SWI +396 3932 CLIST *t; 3933 TPKT *p; 3934 EDITCONTROL ec; 3935 int len; 3936 char *s; 3937 int l=msg->gbsmsg->submess; \ 00000024 040094E5 LDR R0,[R4, #+4] \ 00000028 089090E5 LDR R9,[R0, #+8] 3938 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 3939 3940 if (msg->keys==0xFFF) \ 00000038 F200D4E1 LDRSH R0,[R4, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 3941 { 3942 void ec_menu(EDCHAT_STRUCT *); 3943 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 3944 return(-1); \ 00000054 980000EA B ??edchat_onkey_1 3945 } 3946 if (msg->keys==0xFF0) return (1); \ ??edchat_onkey_0: \ 00000058 FF0E50E3 CMP R0,#+4080 \ 0000005C 0100A003 MOVEQ R0,#+1 \ 00000060 3C00000A BEQ ??edchat_onkey_2 3947 if (msg->gbsmsg->msg==LONG_PRESS) \ 00000064 040094E5 LDR R0,[R4, #+4] \ 00000068 B98FA0E3 MOV R8,#+740 \ 0000006C 040090E5 LDR R0,[R0, #+4] \ 00000070 9510A0E3 MOV R1,#+149 \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 2300001A BNE ??edchat_onkey_3 3948 { 3949 #ifdef ELKA 3950 if (l==VOL_DOWN_BUTTON) \ 00000080 0E0059E3 CMP R9,#+14 \ 00000084 0F00001A BNE ??edchat_onkey_4 3951 { 3952 WSHDR *ws; 3953 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000088 081096E5 LDR R1,[R6, #+8] \ 0000008C 0D20A0E1 MOV R2,SP \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 690100EF SWI +361 3954 if(wstrlen(ec.pWS)>0) \ 00000098 28009DE5 LDR R0,[SP, #+40] \ 0000009C 230100EF SWI +291 \ 000000A0 010050E3 CMP R0,#+1 \ 000000A4 190000BA BLT ??edchat_onkey_3 3955 { 3956 ws=AllocWS(1); \ 000000A8 0100A0E3 MOV R0,#+1 \ 000000AC 250100EF SWI +293 \ 000000B0 00A0A0E1 MOV R10,R0 3957 CutWSTR(ws,0); \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 260100EF SWI +294 3958 3959 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000000BC 081096E5 LDR R1,[R6, #+8] \ 000000C0 0500A0E1 MOV R0,R5 \ 000000C4 0A0000EA B ??edchat_onkey_5 3960 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 3961 3962 FreeWS(ws); 3963 RefreshGUI(); 3964 } 3965 } 3966 if (l==VOL_UP_BUTTON) \ ??edchat_onkey_4: \ 000000C8 0D0059E3 CMP R9,#+13 \ 000000CC 0F00001A BNE ??edchat_onkey_3 3967 { 3968 // WSHDR *ws=AllocWS(strlen(ed_struct->ed_contact->last_msg_buffer)+1); 3969 // ascii2ws(ws,ed_struct->ed_contact->last_msg_buffer); 3970 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); \ 000000D0 070088E0 ADD R0,R8,R7 \ 000000D4 1B0000EF SWI +27 \ 000000D8 010080E2 ADD R0,R0,#+1 \ 000000DC 250100EF SWI +293 \ 000000E0 00A0A0E1 MOV R10,R0 3971 ascii2ws(ws,last_msg_buffer); \ 000000E4 071088E0 ADD R1,R8,R7 \ 000000E8 ........ _BLF ascii2ws,??ascii2ws??rA 3972 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 000000EC 081096E5 LDR R1,[R6, #+8] \ 000000F0 040096E5 LDR R0,[R6, #+4] \ ??edchat_onkey_5: \ 000000F4 9B0100EF SWI +411 3973 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 000000F8 040096E5 LDR R0,[R6, #+4] \ 000000FC 0A10A0E1 MOV R1,R10 \ 00000100 810100EF SWI +385 3974 FreeWS(ws); \ 00000104 0A00A0E1 MOV R0,R10 \ 00000108 290100EF SWI +297 3975 RefreshGUI(); \ 0000010C 960100EF SWI +406 3976 } 3977 #else 3978 if (l==RIGHT_BUTTON) 3979 { 3980 if (EDIT_GetFocus(data)==ed_struct->ed_answer) 3981 { 3982 ExtractEditControl(data,ed_struct->ed_answer,&ec); 3983 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) 3984 { 3985 t=FindNextActiveContact(ed_struct->ed_contact); 3986 if (t && t!=ed_struct->ed_contact) 3987 { 3988 CreateEditChat(t); 3989 return(1); 3990 } 3991 } 3992 } 3993 } 3994 #endif 3995 } 3996 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_3: \ 00000110 040094E5 LDR R0,[R4, #+4] \ 00000114 9310A0E3 MOV R1,#+147 \ 00000118 040090E5 LDR R0,[R0, #+4] \ 0000011C 401F81E3 ORR R1,R1,#0x100 \ 00000120 010050E1 CMP R0,R1 \ 00000124 0A00001A BNE ??edchat_onkey_6 3997 { 3998 if ((l>='0')&&(l<='9')) \ 00000128 300059E3 CMP R9,#+48 \ 0000012C 0B0000BA BLT ??edchat_onkey_7 \ 00000130 3A0059E3 CMP R9,#+58 \ 00000134 060000AA BGE ??edchat_onkey_6 3999 { 4000 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000138 0500A0E1 MOV R0,R5 \ 0000013C 820100EF SWI +386 \ 00000140 081096E5 LDR R1,[R6, #+8] \ 00000144 010050E1 CMP R0,R1 \ 00000148 0100000A BEQ ??edchat_onkey_6 4001 EDIT_SetFocus(data,ed_struct->ed_answer); \ 0000014C 0500A0E1 MOV R0,R5 \ 00000150 9B0100EF SWI +411 4002 } 4003 if (l==GREEN_BUTTON) 4004 { 4005 if (connect_state==3) 4006 { 4007 if ((t=ed_struct->ed_contact)) 4008 { 4009 ExtractEditControl(data,ed_struct->ed_answer,&ec); 4010 SaveAnswer(t,ec.pWS); 4011 if ((s=t->answer)) 4012 { 4013 if ((len=strlen(s))) 4014 { 4015 t->isactive=ACTIVE_TIME; 4016 p=malloc(sizeof(PKT)+len+1); 4017 p->pkt.uin=t->uin; 4018 p->pkt.type=T_SENDMSG; 4019 p->pkt.data_len=len; 4020 strcpy(p->data,s); 4021 #ifdef ELKA 4022 strcpy(last_msg_buffer, s); 4023 #endif 4024 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF); //Номер сообщения 4025 out_count++; 4026 SUBPROC((void *)SendAnswer,0,p); 4027 mfree(t->answer); 4028 t->answer=NULL; 4029 // request_remake_edchat=1; 4030 EDIT_SetFocus(data,ed_struct->ed_answer); 4031 CutWSTR(ews,0); 4032 EDIT_SetTextToFocused(data,ews); 4033 AddMsgToChat(data); 4034 RecountMenu(t, 1); 4035 return(-1); 4036 } 4037 } 4038 } 4039 } 4040 } 4041 if (l==ENTER_BUTTON) 4042 { 4043 // t=FindNextActiveContact(ed_struct->ed_contact); 4044 // if ((t!=ed_struct->ed_contact) && t) 4045 { 4046 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 4047 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 4048 return (-1); 4049 } 4050 } 4051 if (l==VOL_UP_BUTTON) 4052 { 4053 int pos; 4054 4055 if ((pos=EDIT_GetFocus(data)-2)>=2) 4056 { 4057 EDIT_SetFocus(data, pos); 4058 EDIT_SetCursorPos(data, 1); 4059 } 4060 return (-1); 4061 } 4062 if (l==VOL_DOWN_BUTTON) 4063 { 4064 int pos; 4065 4066 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 4067 { 4068 EDIT_SetFocus(data, pos); 4069 EDIT_SetCursorPos(data, 1); 4070 } 4071 return (-1); 4072 } 4073 } 4074 return(0); //Do standart keys \ ??edchat_onkey_6: \ 00000154 0000A0E3 MOV R0,#+0 \ ??edchat_onkey_2: \ 00000158 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 0000015C F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_7: \ 00000160 004096E5 LDR R4,[R6, #+0] \ 00000164 0B0059E3 CMP R9,#+11 \ 00000168 4900001A BNE ??edchat_onkey_8 \ 0000016C 140197E5 LDR R0,[R7, #+276] \ 00000170 030050E3 CMP R0,#+3 \ 00000174 F6FFFF1A BNE ??edchat_onkey_6 \ 00000178 000054E3 CMP R4,#+0 \ 0000017C F4FFFF0A BEQ ??edchat_onkey_6 \ 00000180 081096E5 LDR R1,[R6, #+8] \ 00000184 0D20A0E1 MOV R2,SP \ 00000188 0500A0E1 MOV R0,R5 \ 0000018C 690100EF SWI +361 \ 00000190 28109DE5 LDR R1,[SP, #+40] \ 00000194 0400A0E1 MOV R0,R4 \ 00000198 ........ BL SaveAnswer \ 0000019C 74A094E5 LDR R10,[R4, #+116] \ 000001A0 00005AE3 CMP R10,#+0 \ 000001A4 EAFFFF0A BEQ ??edchat_onkey_6 \ 000001A8 0A00A0E1 MOV R0,R10 \ 000001AC 1B0000EF SWI +27 \ 000001B0 00B0B0E1 MOVS R11,R0 \ 000001B4 E6FFFF0A BEQ ??edchat_onkey_6 \ 000001B8 5A0FA0E3 MOV R0,#+360 \ 000001BC 7C0084E5 STR R0,[R4, #+124] \ 000001C0 09008BE2 ADD R0,R11,#+9 \ 000001C4 140000EF SWI +20 \ 000001C8 0090A0E1 MOV R9,R0 \ 000001CC 0C0094E5 LDR R0,[R4, #+12] \ 000001D0 0A10A0E1 MOV R1,R10 \ 000001D4 000089E5 STR R0,[R9, #+0] \ 000001D8 0200A0E3 MOV R0,#+2 \ 000001DC B400C9E1 STRH R0,[R9, #+4] \ 000001E0 B6B0C9E1 STRH R11,[R9, #+6] \ 000001E4 080089E2 ADD R0,R9,#+8 \ 000001E8 1A0000EF SWI +26 \ 000001EC 0A10A0E1 MOV R1,R10 \ 000001F0 070088E0 ADD R0,R8,R7 \ 000001F4 1A0000EF SWI +26 \ 000001F8 D40097E5 LDR R0,[R7, #+212] \ 000001FC ........ LDR R3,??DataTable146 ;; `?ed_contact)); 4095 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 4096 DrawImg(ScreenW()-1-width,1,icon); 4097 #else 4098 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] 4099 width=GetImgWidth(icon); \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 220000EF SWI +34 \ 0000004C 0050A0E1 MOV R5,R0 4100 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 4101 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 4102 GetPaletteAdrByColorIndex(0), 4103 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 4104 #endif 4105 } 4106 } 4107 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return 4108 \ In segment CODE, align 4, keep-with-next 4109 void edchat_ghook(GUI *data, int cmd) 4110 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 4111 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 4112 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 4113 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 4114 int j; 4115 EDITCONTROL ec; 4116 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 4117 PNGTOP_DESC *pltop=PNG_TOP(); 4118 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable124 ;; 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 4119 { 4120 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 0C00A0E3 MOV R0,#+12 \ 00000034 480D80E3 ORR R0,R0,#0x1200 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 4121 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 4122 } 4123 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 4124 { 4125 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 4126 // edgui_data=data; 4127 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 4128 4129 static void *methods[16]; 4130 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 4131 if (m) 4132 { 4133 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6300000A BEQ ??edchat_ghook_3 4134 { 4135 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 586FA0E3 MOV R6,#+352 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 4136 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 5C0184E5 STR R0,[R4, #+348] 4137 methods[0]=(void *)my_ed_redraw; \ 00000098 74019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 4138 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} 4139 } 4140 } 4141 } 4142 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 4143 { 4144 // if (edgui_data==data) edgui_data=NULL; 4145 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 4146 { 4147 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 4148 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 4149 } 4150 RecountMenu(ed_struct->ed_contact, 1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 4151 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 4152 } 4153 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0900001A BNE ??edchat_ghook_7 4154 { 4155 pltop->dyn_pltop=SmilesImgList; \ 000000FC 14019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 080088E5 STR R0,[R8, #+8] 4156 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 4157 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C 8C0094E5 LDR R0,[R4, #+140] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 8C0084E5 STR R0,[R4, #+140] 4158 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] \ 00000120 E0FFFFEA B ??edchat_ghook_1 4159 /* if (request_close_edchat) 4160 { 4161 request_close_edchat=0; 4162 GeneralFunc_flag1(edchat_id,1); 4163 return; 4164 }*/ 4165 } 4166 if (cmd==7) \ ??edchat_ghook_7: \ 00000124 070059E3 CMP R9,#+7 \ 00000128 2800001A BNE ??edchat_ghook_8 4167 { 4168 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000012C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk \ 00000130 0020A0E3 MOV R2,#+0 \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0500A0E1 MOV R0,R5 \ 0000013C 680100EF SWI +360 4169 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000140 081097E5 LDR R1,[R7, #+8] \ 00000144 0D20A0E1 MOV R2,SP \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 690100EF SWI +361 4170 if (ec.pWS->wsbody[0]==0) \ 00000150 28009DE5 LDR R0,[SP, #+40] \ 00000154 000090E5 LDR R0,[R0, #+0] \ 00000158 B000D0E1 LDRH R0,[R0, #+0] \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 0300001A BNE ??edchat_ghook_9 4171 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000164 0120A0E3 MOV R2,#+1 \ 00000168 081088E2 ADD R1,R8,#+8 \ 0000016C 0500A0E1 MOV R0,R5 \ 00000170 680100EF SWI +360 4172 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 1C0200EF SWI +540 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 2100001A BNE ??edchat_ghook_3 4173 { 4174 time_to_stop_t9=0; \ 00000184 586184E5 STR R6,[R4, #+344] 4175 if (ed_struct->ed_contact->req_add) \ 00000188 000097E5 LDR R0,[R7, #+0] \ 0000018C 681090E5 LDR R1,[R0, #+104] \ 00000190 000051E3 CMP R1,#+0 \ 00000194 0500000A BEQ ??edchat_ghook_10 4176 { 4177 ed_struct->ed_contact->req_add=0; \ 00000198 686080E5 STR R6,[R0, #+104] 4178 AddMsgToChat(data); \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 ........ BL AddMsgToChat 4179 RecountMenu(ed_struct->ed_contact, 1); \ 000001A4 000097E5 LDR R0,[R7, #+0] \ 000001A8 0110A0E3 MOV R1,#+1 \ 000001AC ........ BL RecountMenu 4180 } 4181 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001B0 000097E5 LDR R0,[R7, #+0] \ 000001B4 6C1090E5 LDR R1,[R0, #+108] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 1200000A BEQ ??edchat_ghook_3 4182 { 4183 ed_struct->ed_contact->req_drawack=0; \ 000001C0 6C6080E5 STR R6,[R0, #+108] 4184 DrawAck(data); \ 000001C4 0500A0E1 MOV R0,R5 \ 000001C8 ........ BL DrawAck \ 000001CC B5FFFFEA B ??edchat_ghook_1 4185 } 4186 } 4187 } 4188 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001D0 0C0059E3 CMP R9,#+12 \ 000001D4 0C00001A BNE ??edchat_ghook_3 4189 { 4190 j=EDIT_GetFocus(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC 820100EF SWI +386 \ 000001E0 0040A0E1 MOV R4,R0 4191 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001E4 0500A0E1 MOV R0,R5 \ 000001E8 830100EF SWI +387 \ 000001EC 040050E1 CMP R0,R4 \ 000001F0 050000AA BGE ??edchat_ghook_3 \ 000001F4 080097E5 LDR R0,[R7, #+8] \ 000001F8 000054E1 CMP R4,R0 \ 000001FC 0200000A BEQ ??edchat_ghook_3 4192 EDIT_SetCursorPos(data,1); \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 D40100EF SWI +468 4193 } 4194 } \ ??edchat_ghook_3: \ 0000020C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000210 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000214 ........ DC32 my_ed_redraw \ 00000218 ........ DC32 SmilesImgList \ 0000021C ........ DC32 ??sk \ In segment DATA_C, align 4, align-sorted 4195 4196 4197 4198 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: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 4199 { 4200 1, 4201 edchat_onkey, 4202 edchat_ghook, 4203 (void *)edchat_locret, 4204 0, 4205 &menu_skt, 4206 {0,NULL,NULL,NULL}, 4207 FONT_SMALL, 4208 100, 4209 101, 4210 0, 4211 // 0x00000001 - Выровнять по правому краю 4212 // 0x00000002 - Выровнять по центру 4213 // 0x00000004 - Инверсия знакомест 4214 // 0x00000008 - UnderLine 4215 // 0x00000020 - Не переносить слова 4216 // 0x00000200 - bold 4217 0, 4218 // 0x00000002 - ReadOnly 4219 // 0x00000004 - Не двигается курсор 4220 // 0x40000000 - Поменять местами софт-кнопки 4221 0x40000000 4222 }; 4223 \ In segment CODE, align 4, keep-with-next 4224 void CreateEditChat(CLIST *t) 4225 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4226 extern const int FIRST_LETTER; 4227 void *ma=malloc_adr(); 4228 void *eq; 4229 EDITCONTROL ec; 4230 EDITC_OPTIONS ec_options; 4231 int color, font, type; 4232 int zc; 4233 4234 LOGQ *lp; 4235 int edchat_toitem; 4236 // edcontact=t; 4237 4238 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 78649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 4239 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 4240 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable125 ;; 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] 4241 4242 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 4243 4244 4245 lp=t->log; \ 0000003C 709094E5 LDR R9,[R4, #+112] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 9500000A BEQ ??CreateEditChat_1 4246 4247 while(lp) 4248 { 4249 font = ED_H_FONT_SIZE; 4250 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C ........ LDR R2,??DataTable126 ;; ED_X_FONT_SIZE \ 00000050 ........ LDR R0,??DataTable127 ;; 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,??DataTable128 ;; I_COLOR \ 00000064 1C208DE5 STR R2,[SP, #+28] \ 00000068 ........ LDR R2,??DataTable129 ;; X_COLOR \ 0000006C 030010E2 ANDS R0,R0,#0x3 \ 00000070 002092E5 LDR R2,[R2, #+0] \ 00000074 14208DE5 STR R2,[SP, #+20] \ 00000078 ........ LDR R2,??DataTable130 ;; O_ED_X_FONT_SIZE \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 18208DE5 STR R2,[SP, #+24] \ 00000084 ........ LDR R2,??DataTable131 ;; 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 4251 { 4252 if (zc==1) \ 00000098 010050E3 CMP R0,#+1 \ 0000009C 1E00001A BNE ??CreateEditChat_4 4253 color=ACK_COLOR; //Зеленый \ 000000A0 ........ LDR R0,??DataTable132 ;; ACK_COLOR \ 000000A4 1B0000EA B ??CreateEditChat_5 4254 else 4255 color=I_COLOR; 4256 } 4257 else 4258 { 4259 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 000000A8 080099E5 LDR R0,[R9, #+8] \ 000000AC 010070E3 CMN R0,#+1 \ 000000B0 1700001A BNE ??CreateEditChat_6 4260 { 4261 type = lp->type&0x0F; \ 000000B4 0C0099E5 LDR R0,[R9, #+12] \ 000000B8 0F1000E2 AND R1,R0,#0xF 4262 if(lp->type&0x10) \ 000000BC 100010E3 TST R0,#0x10 \ 000000C0 0B00000A BEQ ??CreateEditChat_7 4263 { 4264 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000C4 010051E3 CMP R1,#+1 \ 000000C8 ........ LDREQ R0,??DataTable133 ;; 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,??DataTable134 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000E4 00B090E5 LDR R11,[R0, #+0] \ 000000E8 ........ LDR R0,??DataTable135 ;; O_ED_H_FONT_SIZE \ 000000EC 00A090E5 LDR R10,[R0, #+0] \ 000000F0 090000EA B ??CreateEditChat_4 4265 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 4266 } 4267 else 4268 { 4269 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,??DataTable136 ;; TO_COLOR \ 00000110 000000EA B ??CreateEditChat_5 4270 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 4271 } 4272 } 4273 else 4274 color=UNACK_COLOR; //Серый \ ??CreateEditChat_6: \ 00000114 ........ LDR R0,??DataTable137 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 00000118 00B090E5 LDR R11,[R0, #+0] 4275 } 4276 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 0000011C 20008DE2 ADD R0,SP,#+32 \ 00000120 640100EF SWI +356 4277 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 4278 { 4279 ascii2ws(ews,lp->hdr); \ 00000134 DC0097E5 LDR R0,[R7, #+220] \ 00000138 101089E2 ADD R1,R9,#+16 \ 0000013C ........ _BLF ascii2ws,??ascii2ws??rA 4280 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000140 DC3097E5 LDR R3,[R7, #+220] \ 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 4281 } 4282 else 4283 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_9: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 DC3097E5 LDR R3,[R7, #+220] \ 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 4284 PrepareEditCOptions(&ec_options); \ 00000178 0D00A0E1 MOV R0,SP \ 0000017C C80100EF SWI +456 4285 SetPenColorToEditCOptions(&ec_options,color); \ 00000180 0B10A0E1 MOV R1,R11 \ 00000184 0D00A0E1 MOV R0,SP \ 00000188 CC0100EF SWI +460 4286 SetFontToEditCOptions(&ec_options,font); \ 0000018C 0A10A0E1 MOV R1,R10 \ 00000190 0D00A0E1 MOV R0,SP \ 00000194 CA0100EF SWI +458 4287 CopyOptionsToEditControl(&ec,&ec_options); \ 00000198 0D10A0E1 MOV R1,SP \ 0000019C 20008DE2 ADD R0,SP,#+32 \ 000001A0 CE0100EF SWI +462 4288 AddEditControlToEditQend(eq,&ec,ma); \ 000001A4 0520A0E1 MOV R2,R5 \ 000001A8 20108DE2 ADD R1,SP,#+32 \ 000001AC 0800A0E1 MOV R0,R8 \ 000001B0 660100EF SWI +358 4289 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 4290 { 4291 ParseAnswer(ews,lp->text); \ 000001C4 DC0097E5 LDR R0,[R7, #+220] \ 000001C8 601089E2 ADD R1,R9,#+96 \ 000001CC ........ BL ParseAnswer \ 000001D0 050000EA B ??CreateEditChat_12 4292 } 4293 else 4294 { 4295 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 DC0097E5 LDR R0,[R7, #+220] \ 000001E0 14209D05 LDREQ R2,[SP, #+20] \ 000001E4 601089E2 ADD R1,R9,#+96 \ 000001E8 ........ BL ParseXStatusText 4296 } 4297 PrepareEditControl(&ec); \ ??CreateEditChat_12: \ 000001EC 20008DE2 ADD R0,SP,#+32 \ 000001F0 640100EF SWI +356 4298 ConstructEditControl(&ec, 4299 ECT_NORMAL_TEXT, 4300 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 4301 ews,ews->wsbody[0]); \ 000001F4 DC3097E5 LDR R3,[R7, #+220] \ 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 4302 PrepareEditCOptions(&ec_options); \ 00000220 04008DE2 ADD R0,SP,#+4 \ 00000224 C80100EF SWI +456 4303 //#ifdef M75 4304 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 4305 { 4306 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 0000023C 100010E3 TST R0,#0x10 \ 00000240 ........ LDRNE R0,??DataTable138 ;; O_ED_FONT_SIZE \ 00000244 ........ LDREQ R0,??DataTable140 ;; ED_FONT_SIZE \ 00000248 001090E5 LDR R1,[R0, #+0] \ 0000024C 080000EA B ??CreateEditChat_14 4307 } 4308 else 4309 { 4310 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 4311 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 4312 } 4313 //#else 4314 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 4315 //#endif 4316 CopyOptionsToEditControl(&ec,&ec_options); \ 0000027C 0D10A0E1 MOV R1,SP \ 00000280 20008DE2 ADD R0,SP,#+32 \ 00000284 CE0100EF SWI +462 4317 AddEditControlToEditQend(eq,&ec,ma); \ 00000288 0520A0E1 MOV R2,R5 \ 0000028C 20108DE2 ADD R1,SP,#+32 \ 00000290 0800A0E1 MOV R0,R8 \ 00000294 660100EF SWI +358 4318 lp=lp->next; \ 00000298 009099E5 LDR R9,[R9, #+0] 4319 } \ 0000029C 000059E3 CMP R9,#+0 \ 000002A0 69FFFF1A BNE ??CreateEditChat_2 4320 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 000002A4 580094E5 LDR R0,[R4, #+88] 4321 t->isunread=0; \ 000002A8 0090A0E3 MOV R9,#+0 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 8C009715 LDRNE R0,[R7, #+140] \ 000002B4 01004012 SUBNE R0,R0,#+1 \ 000002B8 8C008715 STRNE R0,[R7, #+140] \ 000002BC 589084E5 STR R9,[R4, #+88] 4322 #ifdef EVILFOX 4323 total_unread2=total_unread2-t->unread_msg; 4324 t->unread_msg=0; 4325 #endif 4326 ChangeContactPos(t); \ 000002C0 0400A0E1 MOV R0,R4 \ 000002C4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4327 wsprintf(ews, "-------"); \ 000002C8 DC0097E5 LDR R0,[R7, #+220] \ 000002CC 4C1086E2 ADD R1,R6,#+76 \ 000002D0 240100EF SWI +292 4328 PrepareEditControl(&ec); \ 000002D4 20008DE2 ADD R0,SP,#+32 \ 000002D8 640100EF SWI +356 4329 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002DC DC3097E5 LDR R3,[R7, #+220] \ 000002E0 4020A0E3 MOV R2,#+64 \ 000002E4 000093E5 LDR R0,[R3, #+0] \ 000002E8 0110A0E3 MOV R1,#+1 \ 000002EC B000D0E1 LDRH R0,[R0, #+0] \ 000002F0 01002DE9 PUSH {R0} \ 000002F4 24008DE2 ADD R0,SP,#+36 \ 000002F8 650100EF SWI +357 4330 PrepareEditCOptions(&ec_options); \ 000002FC 04008DE2 ADD R0,SP,#+4 \ 00000300 C80100EF SWI +456 4331 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000304 ........ LDR R0,??DataTable140 ;; ED_FONT_SIZE \ 00000308 00A090E5 LDR R10,[R0, #+0] \ 0000030C 04008DE2 ADD R0,SP,#+4 \ 00000310 0A10A0E1 MOV R1,R10 \ 00000314 CA0100EF SWI +458 4332 CopyOptionsToEditControl(&ec,&ec_options); \ 00000318 04108DE2 ADD R1,SP,#+4 \ 0000031C 24008DE2 ADD R0,SP,#+36 \ 00000320 CE0100EF SWI +462 4333 AddEditControlToEditQend(eq,&ec,ma); \ 00000324 0520A0E1 MOV R2,R5 \ 00000328 24108DE2 ADD R1,SP,#+36 \ 0000032C 0800A0E1 MOV R0,R8 \ 00000330 660100EF SWI +358 4334 4335 if (t->answer) ParseAnswer(ews,t->answer); \ 00000334 741094E5 LDR R1,[R4, #+116] \ 00000338 04D08DE2 ADD SP,SP,#+4 \ 0000033C 000051E3 CMP R1,#+0 \ 00000340 0200000A BEQ ??CreateEditChat_15 \ 00000344 DC0097E5 LDR R0,[R7, #+220] \ 00000348 ........ BL ParseAnswer \ 0000034C 020000EA B ??CreateEditChat_16 4336 else CutWSTR(ews,0); \ ??CreateEditChat_15: \ 00000350 DC0097E5 LDR R0,[R7, #+220] \ 00000354 0010A0E3 MOV R1,#+0 \ 00000358 260100EF SWI +294 4337 PrepareEditControl(&ec); \ ??CreateEditChat_16: \ 0000035C 20008DE2 ADD R0,SP,#+32 \ 00000360 640100EF SWI +356 4338 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); \ 00000364 1C019FE5 LDR R0,??CreateEditChat_0+0x4 ;; FIRST_LETTER \ 00000368 0310A0E3 MOV R1,#+3 \ 0000036C 000090E5 LDR R0,[R0, #+0] \ 00000370 000050E3 CMP R0,#+0 \ 00000374 400EA0E3 MOV R0,#+1024 \ 00000378 01002DE9 PUSH {R0} \ 0000037C DC3097E5 LDR R3,[R7, #+220] \ 00000380 402DA013 MOVNE R2,#+4096 \ 00000384 0020A003 MOVEQ R2,#+0 \ 00000388 24008DE2 ADD R0,SP,#+36 \ 0000038C 650100EF SWI +357 4339 4340 PrepareEditCOptions(&ec_options); \ 00000390 04008DE2 ADD R0,SP,#+4 \ 00000394 C80100EF SWI +456 4341 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000398 0A10A0E1 MOV R1,R10 \ 0000039C 04008DE2 ADD R0,SP,#+4 \ 000003A0 CA0100EF SWI +458 4342 CopyOptionsToEditControl(&ec,&ec_options); \ 000003A4 04108DE2 ADD R1,SP,#+4 \ 000003A8 24008DE2 ADD R0,SP,#+36 \ 000003AC CE0100EF SWI +462 4343 edchat_toitem=AddEditControlToEditQend(eq,&ec,ma); \ 000003B0 0520A0E1 MOV R2,R5 \ 000003B4 24108DE2 ADD R1,SP,#+36 \ 000003B8 0800A0E1 MOV R0,R8 \ 000003BC 660100EF SWI +358 \ 000003C0 00A0A0E1 MOV R10,R0 4344 4345 if (t->req_xtext) \ 000003C4 880094E5 LDR R0,[R4, #+136] \ 000003C8 04D08DE2 ADD SP,SP,#+4 \ 000003CC 000050E3 CMP R0,#+0 \ 000003D0 0400000A BEQ ??CreateEditChat_17 4346 { 4347 FreeXText(t); \ 000003D4 0400A0E1 MOV R0,R4 \ 000003D8 ........ _BLF FreeXText,??FreeXText??rA 4348 t->req_xtext=0; \ 000003DC 889084E5 STR R9,[R4, #+136] 4349 RequestXText(t->uin); \ 000003E0 0C0094E5 LDR R0,[R4, #+12] \ 000003E4 ........ BL RequestXText 4350 } 4351 4352 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_17: \ 000003E8 1400A0E3 MOV R0,#+20 \ 000003EC 140000EF SWI +20 \ 000003F0 0050A0E1 MOV R5,R0 4353 ed_struct->ed_contact=t; \ 000003F4 004085E5 STR R4,[R5, #+0] 4354 ed_struct->ed_answer=edchat_toitem; \ 000003F8 08A085E5 STR R10,[R5, #+8] 4355 ed_struct->requested_decrement_total_unread=0; \ 000003FC 0C9085E5 STR R9,[R5, #+12] 4356 t->req_add=0; \ 00000400 689084E5 STR R9,[R4, #+104] 4357 t->last_log=NULL; \ 00000404 789084E5 STR R9,[R4, #+120] 4358 4359 // int scr_w=ScreenW(); 4360 // int scr_h=ScreenH(); 4361 // int head_h=HeaderH(); 4362 4363 patch_header(&edchat_hdr); \ 00000408 B893C6E1 STRH R9,[R6, #+56] \ 0000040C 1800A0E3 MOV R0,#+24 \ 00000410 BA03C6E1 STRH R0,[R6, #+58] \ 00000414 888100EF SWI +33160 \ 00000418 010040E2 SUB R0,R0,#+1 \ 0000041C BC03C6E1 STRH R0,[R6, #+60] \ 00000420 8A8100EF SWI +33162 \ 00000424 170080E2 ADD R0,R0,#+23 \ 00000428 BE03C6E1 STRH R0,[R6, #+62] 4364 patch_input(&edchat_desc); \ 0000042C B891C6E1 STRH R9,[R6, #+24] \ 00000430 8A8100EF SWI +33162 \ 00000434 190080E2 ADD R0,R0,#+25 \ 00000438 BA01C6E1 STRH R0,[R6, #+26] \ 0000043C 888100EF SWI +33160 \ 00000440 010040E2 SUB R0,R0,#+1 \ 00000444 BC01C6E1 STRH R0,[R6, #+28] \ 00000448 898100EF SWI +33161 \ 0000044C 0040A0E1 MOV R4,R0 \ 00000450 8B8100EF SWI +33163 \ 00000454 000044E0 SUB R0,R4,R0 \ 00000458 010040E2 SUB R0,R0,#+1 \ 0000045C BE01C6E1 STRH R0,[R6, #+30] 4365 // edchat_desc.font=ED_FONT_SIZE; 4366 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000460 20002DE9 PUSH {R5} \ 00000464 0130A0E3 MOV R3,#+1 \ 00000468 0820A0E1 MOV R2,R8 \ 0000046C 381086E2 ADD R1,R6,#+56 \ 00000470 0600A0E1 MOV R0,R6 \ 00000474 670100EF SWI +359 \ 00000478 400187E5 STR R0,[R7, #+320] 4367 } \ 0000047C 50D08DE2 ADD SP,SP,#+80 \ 00000480 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000484 ........ DC32 edchat_desc \ 00000488 ........ DC32 FIRST_LETTER 4368 4369 //----------------------------------------------------------------------------- 4370 #define EC_MNU_MAX 8 4371 \ In segment CODE, align 4, keep-with-next 4372 void Quote(GUI *data) 4373 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 4374 int q_n; 4375 EDITCONTROL ec, ec_hdr; 4376 EDITCONTROL ec_ed; 4377 WSHDR *ed_ws; 4378 WSHDR *ws; 4379 4380 EDCHAT_STRUCT *ed_struct; 4381 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 4382 4383 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 4384 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 4385 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 4386 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 4387 4388 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 4389 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 4390 { 4391 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 4392 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 4393 } 4394 else 4395 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 4396 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 4397 { 4398 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 4399 } 4400 else 4401 { 4402 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 4403 } 4404 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 4405 do 4406 { 4407 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 4408 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 4409 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 4410 } 4411 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 4412 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 4413 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 4414 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 4415 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 4416 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 4417 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 4418 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 4419 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 4420 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 4421 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 4422 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 4423 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 4424 4425 \ In segment CODE, align 4, keep-with-next 4426 void GetShortInfo(GUI *data) 4427 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4428 EDCHAT_STRUCT *ed_struct; 4429 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 4430 4431 TPKT *p; 4432 CLIST *t; 4433 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 1E00000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable149 ;; S_ICONS + 276 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1A00001A BNE ??GetShortInfo_0 4434 { 4435 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 4436 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 4437 p->pkt.type=T_REQINFOSHORT; 4438 p->pkt.data_len=0; 4439 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,??DataTable148 ;; `?ed_chatgui); \ 0000006C 040094E5 LDR R0,[R4, #+4] \ 00000070 ........ BL AddMsgToChat 4441 RecountMenu(t, 1); \ 00000074 0110A0E3 MOV R1,#+1 \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C ........ BL RecountMenu 4442 SUBPROC((void *)SendAnswer,0,p); \ 00000080 ........ LDR R0,??DataTable150 ;; SendAnswer \ 00000084 0620A0E1 MOV R2,R6 \ 00000088 0010A0E3 MOV R1,#+0 \ 0000008C 710100EF SWI +369 \ 00000090 04D08DE2 ADD SP,SP,#+4 4443 } 4444 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000094 0100A0E3 MOV R0,#+1 \ 00000098 3B0100EF SWI +315 4445 } \ 0000009C 7080BDE8 POP {R4-R6,PC} ;; return 4446 4447 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 4448 void AddCurContact(GUI *data) 4449 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 4450 EDCHAT_STRUCT *ed_struct; 4451 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 4452 4453 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,??DataTable149 ;; S_ICONS + 276 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 4454 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 4455 } \ 00000030 0080BDE8 POP {PC} ;; return 4456 \ In segment CODE, align 4, keep-with-next 4457 void SendAuthReq(GUI *data) 4458 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 4459 EDCHAT_STRUCT *ed_struct; 4460 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 4461 4462 TPKT *p; 4463 CLIST *t; 4464 int l; 4465 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,??DataTable149 ;; S_ICONS + 276 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1E00001A BNE ??SendAuthReq_1 4467 { 4468 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 4469 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 4470 p->pkt.type=T_AUTHREQ; 4471 p->pkt.data_len=l; 4472 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 4473 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 ........ LDR R3,??DataTable146 ;; `?ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 4475 RecountMenu(t, 1); \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 ........ BL RecountMenu 4476 SUBPROC((void *)SendAnswer,0,p); \ 000000A4 ........ LDR R0,??DataTable150 ;; SendAnswer \ 000000A8 0720A0E1 MOV R2,R7 \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 710100EF SWI +369 \ 000000B4 04D08DE2 ADD SP,SP,#+4 4477 } 4478 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 3B0100EF SWI +315 4479 } \ 000000C0 14D08DE2 ADD SP,SP,#+20 \ 000000C4 F080BDE8 POP {R4-R7,PC} ;; return \ ??SendAuthReq_0: \ 000000C8 ........ DC32 `?ed_contact)&&(connect_state==3)) \ 00000020 006094E5 LDR R6,[R4, #+0] \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2200000A BEQ ??SendAuthGrant_0 \ 0000002C ........ LDR R0,??DataTable149 ;; S_ICONS + 276 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1E00001A BNE ??SendAuthGrant_0 4491 { 4492 p=malloc(sizeof(PKT)+(l=strlen(s))+1); \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 1B0000EF SWI +27 \ 00000044 0070A0E1 MOV R7,R0 \ 00000048 090087E2 ADD R0,R7,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0080A0E1 MOV R8,R0 4493 p->pkt.uin=t->uin; \ 00000054 0C0096E5 LDR R0,[R6, #+12] 4494 p->pkt.type=T_AUTHGRANT; 4495 p->pkt.data_len=l; 4496 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000088E5 STR R0,[R8, #+0] \ 00000060 0E00A0E3 MOV R0,#+14 \ 00000064 B400C8E1 STRH R0,[R8, #+4] \ 00000068 B670C8E1 STRH R7,[R8, #+6] \ 0000006C 080088E2 ADD R0,R8,#+8 \ 00000070 1A0000EF SWI +26 4497 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 0000E0E3 MVN R0,#+0 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 103085E2 ADD R3,R5,#+16 \ 00000080 082088E2 ADD R2,R8,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 0600A0E1 MOV R0,R6 \ 0000008C ........ BL AddStringToLog 4498 AddMsgToChat(ed_struct->ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 4499 RecountMenu(t, 1); \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 0600A0E1 MOV R0,R6 \ 000000A0 ........ BL RecountMenu 4500 SUBPROC((void *)SendAnswer,0,p); \ 000000A4 ........ LDR R0,??DataTable150 ;; SendAnswer \ 000000A8 0820A0E1 MOV R2,R8 \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 710100EF SWI +369 \ 000000B4 04D08DE2 ADD SP,SP,#+4 4501 } 4502 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 3B0100EF SWI +315 4503 } \ 000000C0 FF81BDE8 POP {R0-R8,PC} ;; return 4504 \ In segment CODE, align 4, keep-with-next 4505 void OpenLogfile(GUI *data) 4506 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 4507 EDCHAT_STRUCT *ed_struct; 4508 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 4509 4510 extern const char HIST_PATH[64]; 4511 #ifdef EVILFOX_2 4512 #else 4513 extern const int HISTORY_TYPE; 4514 #endif 4515 CLIST *t; 4516 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0050A0E1 MOV R5,R0 4517 if ((t=ed_struct->ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??OpenLogfile_0 4518 { 4519 #ifdef EVILFOX_2 4520 wsprintf(ws,"%s\\%u\\%s.txt",HIST_PATH,UIN,t->name); 4521 #else 4522 if (HISTORY_TYPE) \ 00000024 64309FE5 LDR R3,??OpenLogfile_1 ;; HISTORY_TYPE \ 00000028 64109FE5 LDR R1,??OpenLogfile_1+0x4 ;; `?` \ 0000002C 003093E5 LDR R3,[R3, #+0] \ 00000030 60209FE5 LDR R2,??OpenLogfile_1+0x8 ;; HIST_PATH \ 00000034 000053E3 CMP R3,#+0 \ 00000038 0700000A BEQ ??OpenLogfile_2 4523 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); \ 0000003C 0C0090E5 LDR R0,[R0, #+12] \ 00000040 01002DE9 PUSH {R0} \ 00000044 ........ LDR R0,??DataTable151 ;; UIN \ 00000048 003090E5 LDR R3,[R0, #+0] \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 240100EF SWI +292 \ 00000054 04D08DE2 ADD SP,SP,#+4 \ 00000058 030000EA B ??OpenLogfile_3 4524 else 4525 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); \ ??OpenLogfile_2: \ 0000005C 0C3090E5 LDR R3,[R0, #+12] \ 00000060 101081E2 ADD R1,R1,#+16 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 240100EF SWI +292 4526 #endif 4527 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 0000006C 0020A0E3 MOV R2,#+0 \ 00000070 0010A0E3 MOV R1,#+0 \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 940000EF SWI +148 4528 } 4529 FreeWS(ws); \ ??OpenLogfile_0: \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 290100EF SWI +297 4530 GeneralFuncF1(1); \ 00000084 0100A0E3 MOV R0,#+1 \ 00000088 3B0100EF SWI +315 4531 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 00000090 ........ DC32 HISTORY_TYPE \ 00000094 ........ DC32 `?` \ 00000098 ........ DC32 HIST_PATH 4532 \ In segment CODE, align 4, keep-with-next 4533 void ClearLog(GUI *data/*,void *dummy*/) 4534 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 4535 EDITCONTROL ec; 4536 EDCHAT_STRUCT *ed_struct; 4537 WSHDR *ws; 4538 CLIST *t; 4539 4540 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 4541 4542 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 4543 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 4544 { 4545 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 4546 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 4547 4548 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 4549 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 4550 4551 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 4552 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 4553 } 4554 else 4555 { 4556 4557 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 4558 { 4559 if (t->log) \ 00000074 700095E5 LDR R0,[R5, #+112] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 4560 { 4561 FreeLOGQ(&t->log); \ 00000084 700085E2 ADD R0,R5,#+112 \ 00000088 ........ BL FreeLOGQ 4562 t->msg_count=0; \ 0000008C 806085E5 STR R6,[R5, #+128] 4563 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 4564 { 4565 while(ed_struct->ed_answer!=2) 4566 { 4567 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 4568 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 4569 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 4570 } 4571 } 4572 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 7C6085E5 STR R6,[R5, #+124] 4573 RecountMenu(t, 1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 4574 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 4575 } 4576 } 4577 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 4578 \ In segment CODE, align 4, keep-with-next 4579 void ecmenu_ghook(void *data, int cmd) 4580 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 4581 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 4582 { 4583 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 4584 } 4585 } \ 00000010 0080BDE8 POP {PC} ;; return 4586 \ In segment DATA_C, align 4, align-sorted 4587 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ gipc: \ 00000074 DS8 12 \ 00000080 REQUIRE `?` \ tmr_gipc: \ 00000080 DS8 12 \ 0000008C REQUIRE `?` \ total_unread: \ 0000008C DS8 4 \ 00000090 REQUIRE `?` \ cltop: \ 00000090 DS8 4 \ 00000094 REQUIRE `?` \ Is_SLI_On: \ 00000094 DS8 4 \ 00000098 REQUIRE `?` \ Is_ILU_On: \ 00000098 DS8 4 \ 0000009C REQUIRE `?` \ seconds: \ 0000009C DS8 4 \ 000000A0 REQUIRE `?` \ minutes: \ 000000A0 DS8 4 \ 000000A4 REQUIRE `?` \ hours: \ 000000A4 DS8 4 \ 000000A8 REQUIRE `?` \ time_draw: \ 000000A8 DS8 4 \ 000000AC REQUIRE `?` \ canvasdata: \ 000000AC DS8 4 \ 000000B0 REQUIRE `?` \ show_ping: \ 000000B0 DS8 4 \ 000000B4 REQUIRE `?` \ Is_INC_On: \ 000000B4 DS8 4 \ 000000B8 REQUIRE `?` \ in_count: \ 000000B8 DS8 4 \ 000000BC REQUIRE `?` \ out_count: \ 000000BC DS8 4 \ 000000C0 REQUIRE `?` \ comanda: \ 000000C0 DS8 4 \ 000000C4 REQUIRE `?` \ away_m: \ 000000C4 DS8 4 \ 000000C8 REQUIRE `?` \ icon_change: \ 000000C8 DS8 4 \ 000000CC REQUIRE `?` \ maincsm_id: \ 000000CC DS8 4 \ 000000D0 REQUIRE `?` \ maingui_id: \ 000000D0 DS8 4 \ 000000D4 REQUIRE `?` \ SENDMSGCOUNT: \ 000000D4 DS8 4 \ 000000D8 REQUIRE `?` \ IsActiveUp: \ 000000D8 DS8 4 \ 000000DC REQUIRE `?` \ ews: \ 000000DC DS8 4 \ 000000E0 REQUIRE `?` \ silenthide: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ disautorecconect: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ Is_Vibra_Enabled: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ Is_Sounds_Enabled: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ Is_Show_Offline: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ Is_Show_Groups: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ CurrentStatus: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ CurrentXStatus: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ CurrentPrivateStatus: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ vibra_count: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ templates_chars: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ templates_lines: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ RXstate: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ connect_state: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ sock: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ TOTALRECEIVED: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ TOTALSENDED: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ ALLTOTALRECEIVED: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ ALLTOTALSENDED: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ sendq_l: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ sendq_p: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ is_gprs_online: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ GROUP_CACHE: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ contactlist_menu_id: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ edchat_id: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ tenseconds_to_ping: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ DNR_ID: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ DNR_TRIES: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ host_counter: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ time_to_stop_t9: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ old_ed_redraw: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ 00000160 DS8 64 \ 000001A0 REQUIRE `?` \ elf_path: \ 000001A0 DS8 256 \ 000002A0 REQUIRE `?` \ ContactT9Key: \ 000002A0 DS8 32 \ 000002C0 REQUIRE `?` \ online_txt: \ 000002C0 DS8 20 \ 000002D4 REQUIRE `?` \ ping_txt: \ 000002D4 DS8 16 \ 000002E4 REQUIRE `?` \ last_msg_buffer: \ 000002E4 DS8 3072 \ 00000EE4 REQUIRE `?` \ away_msg_time: \ 00000EE4 DS8 64 \ 00000F24 REQUIRE `?` \ away_msg: \ 00000F24 DS8 256 \ 00001024 REQUIRE `?` \ LG_MENU2: \ 00001024 DS8 32 \ 00001044 REQUIRE `?` \ mod_info: \ 00001044 DS8 72 \ 0000108C REQUIRE `?` \ hostname: \ 0000108C DS8 128 \ 0000110C REQUIRE `?` \ logmsg: \ 0000110C DS8 256 \ 0000120C REQUIRE `?` \ tmr_illumination: \ 0000120C DS8 16 \ 0000121C REQUIRE `?` \ tmr_vibra: \ 0000121C DS8 16 \ 0000122C REQUIRE `?` \ reconnect_tmr: \ 0000122C DS8 16 \ 0000123C REQUIRE `?` \ tmr_active: \ 0000123C DS8 16 \ 0000124C REQUIRE `?` \ clm_hdr_text: \ 0000124C DS8 48 \ 0000127C REQUIRE `?` \ clmenu_sk_r: \ 0000127C DS8 16 \ 0000128C REQUIRE `?` 4601 { 4602 Quote, 4603 AddSmile, 4604 GetShortInfo, 4605 AddCurContact, 4606 SendAuthReq, 4607 SendAuthGrant, 4608 OpenLogfile, 4609 ClearLog, 4610 }; 4611 4612 char ecm_contactname[64]; \ ecm_contactname: \ 0000128C DS8 64 \ 000012CC REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ font: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` 4613 \ In segment DATA_C, align 4, align-sorted 4614 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 4615 4616 static const MENU_DESC ecmenu_STRUCT= 4617 { 4618 8,NULL,ecmenu_ghook,NULL, 4619 menusoftkeys, 4620 &menu_skt, 4621 0, 4622 NULL, 4623 ecmenu_ITEMS, 4624 ecmenu_HNDLS, 4625 EC_MNU_MAX 4626 }; 4627 \ In segment CODE, align 4, keep-with-next 4628 void ec_menu(EDCHAT_STRUCT *ed_struct) 4629 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 \ 00000008 0040A0E1 MOV R4,R0 4630 CLIST *t; 4631 int to_remove[EC_MNU_MAX+1]; 4632 int remove=0; 4633 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4500000A BEQ ??ec_menu_0 4634 { 4635 if (t->name) \ 00000018 ........ LDR R5,??DataTable152 ;; S_ICONS \ 0000001C 8C00A0E3 MOV R0,#+140 \ 00000020 480D80E3 ORR R0,R0,#0x1200 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 4636 { 4637 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 4638 } 4639 else 4640 { 4641 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 4642 } 4643 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 4644 { 4645 to_remove[++remove]=0; \ 00000064 04108D05 STREQ R1,[SP, #+4] 4646 } 4647 else 4648 { 4649 to_remove[++remove]=1; \ 00000068 0120A013 MOVNE R2,#+1 \ 0000006C 04208D15 STRNE R2,[SP, #+4] 4650 } 4651 4652 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] 4653 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 140195E5 LDR R0,[R5, #+276] \ 00000094 030050E3 CMP R0,#+3 \ 00000098 0D00000A BEQ ??ec_menu_5 4654 { 4655 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] 4656 to_remove[++remove]=3; \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 0330A0E3 MOV R3,#+3 \ 000000B4 003182E7 STR R3,[R2, +R0, LSL #+2] 4657 to_remove[++remove]=4; \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC 0430A0E3 MOV R3,#+4 \ 000000C0 003182E7 STR R3,[R2, +R0, LSL #+2] 4658 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] 4659 } 4660 4661 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] 4662 to_remove[0]=remove; \ 000000FC 00608DE5 STR R6,[SP, #+0] 4663 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 4664 } 4665 } \ ??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 4666 4667 \ In segment CODE, align 4, keep-with-next 4668 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 4669 { 4670 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 4671 } 4672 \ In segment CODE, align 4, keep-with-next 4673 void AddSmile(GUI *data) 4674 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 4675 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 4676 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 4677 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 4678 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable5: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable6: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable22: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable23: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 S_ICONS + 144 \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable28: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable30: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable36: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable39: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable40: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable42: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable44: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable45: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable46: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable55: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable57: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable60: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable67: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable71: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable72: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable76: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable77: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable81: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable83: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable88: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable96: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable98: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable99: \ 00000000 ........ DC32 Canvas \ In segment CODE, align 4, keep-with-next \ ??DataTable101: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable103: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable104: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable105: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable108: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable109: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable113: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable114: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable118: \ 00000000 ........ DC32 S_ICONS + 144 \ In segment CODE, align 4, keep-with-next \ ??DataTable122: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable124: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable125: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable126: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable127: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable128: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable129: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable130: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable132: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable133: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable134: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable135: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable136: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable140: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 `?`: \ 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 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 0000008C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000090 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000094 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000098 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000009C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D8 00000000 DC32 0 \ `?`: \ 000000DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000100 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000104 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000108 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000010C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000110 F6FFFFFF DC32 -10 \ `?`: \ 00000114 00000000 DC32 0 \ `?`: \ 00000118 FFFFFFFF DC32 -1 \ `?`: \ 0000011C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000120 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000124 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 00000000 DC32 0 \ `?`: \ 00000130 00000000 DC32 0H \ `?`: \ 00000134 01000000 DC32 1 \ `?`: \ 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 DC32 0 \ `?`: \ 00000150 03000000 DC32 3 \ `?`: \ 00000154 00000000 DC32 0 \ `?`: \ 00000158 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000015C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000160 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000170 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000180 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000190 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000001A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000200 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000210 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000220 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000230 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000240 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000250 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000260 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000270 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000280 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000290 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000002A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000002C0 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 \ `?`: \ 000002D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000002E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000304 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000314 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000324 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000334 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000344 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000354 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000364 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000374 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000384 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000394 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000404 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000414 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000424 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000434 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000444 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000454 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000464 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000474 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000484 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000494 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000504 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000514 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000524 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000534 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000544 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000554 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000564 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000574 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000584 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000594 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000604 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000614 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000624 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000634 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000644 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000654 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000664 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000674 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000684 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000694 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000704 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000714 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000724 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000734 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000744 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000754 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000764 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000774 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000784 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000794 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000804 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000814 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000824 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000834 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000844 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000854 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000864 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000874 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000884 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000894 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000904 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000914 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000924 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000934 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000944 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000954 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000964 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000974 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000984 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000994 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ED4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000EE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000F24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001004 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001014 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001024 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001034 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001044 326E64206765 DC8 32H, 6EH, 64H, 20H, 67H, 65H, 6EH, 65H \ 6E65 \ 0000104C 726174696F6E DC8 72H, 61H, 74H, 69H, 6FH, 6EH, 20H, 6DH \ 206D \ 00001054 6F6420626173 DC8 6FH, 64H, 20H, 62H, 61H, 73H, 65H, 64H \ 6564 \ 0000105C 206F6E207265 DC8 20H, 6FH, 6EH, 20H, 72H, 65H, 76H, 69H \ 7669 \ 00001064 73696F6E2031 DC8 73H, 69H, 6FH, 6EH, 20H, 31H, 38H, 34H \ 3834 \ 0000106C 3821206D6F64 DC8 38H, 21H, 20H, 6DH, 6FH, 64H, 20H, 64H \ 2064 \ 00001074 6174653A2031 DC8 61H, 74H, 65H, 3AH, 20H, 31H, 39H, 2EH \ 392E \ 0000107C 30322E303820 DC8 30H, 32H, 2EH, 30H, 38H, 20H, 31H, 34H \ 3134 \ 00001084 3A30322100 DC8 3AH, 30H, 32H, 21H, 0 \ 00001089 000000 DC8 0, 0, 0 \ `?`: \ 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 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 09000000 DC32 9 \ 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 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ 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 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ 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 776F726B2E70 DC8 "work.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 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 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 646E642E706E DC8 "dnd.png" \ 6700 \ 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 6E612E706E67 DC8 "na.png" \ 00 \ 00000007 00 DC8 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 696E76697369 DC8 "invisible.png" \ 626C652E706E \ 6700 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F66666C696E DC8 "offline.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C25755C DC8 "%s\\%u\\%u.txt" \ 25752E747874 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ 00000010 25735C25752E DC8 "%s\\%u.txt" \ 74787400 \ 0000001A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ 00000010 4175746F4D73 DC8 "AutoMsg: %s %s! im not here! %s %s" \ 673A20257320 \ 25732120696D \ 206E6F742068 \ 657265212025 \ 7320257300 \ 00000033 00 DC8 0 \ 00000034 626174746572 DC8 "battery: %d percents" \ 793A20256420 \ 70657263656E \ 747300 \ 00000049 000000 DC8 0, 0, 0 \ 0000004C 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 00000059 000000 DC8 0, 0, 0 \ 0000005C 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 00000069 000000 DC8 0, 0, 0 \ 0000006C 73656E743A20 DC8 "sent: %d \012recieved: %d" \ 2564200A7265 \ 636965766564 \ 3A20256400 \ 00000083 00 DC8 0 \ 00000084 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000094 6F6E6C696E65 DC8 "online: %02d:%02d:%02d \012Server: %s" \ 3A2025303264 \ 3A253032643A \ 25303264200A \ 536572766572 \ 3A20257300 \ 000000B7 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d %02d-%02d %s:" \ 303264202530 \ 32642D253032 \ 642025733A00 \ 00000018 253032643A25 DC8 "%02d:%02d %02d-%02d %s:\015\012" \ 303264202530 \ 32642D253032 \ 642025733A0D \ 0A00 \ 00000032 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ 0000000C 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000020 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 0000002A 0000 DC8 0, 0 \ 0000002C 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000034 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 0000003F 00 DC8 0 \ 00000040 426164207061 DC8 "Bad packet" \ 636B657400 \ 0000004B 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ 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 4, align-sorted \ `?`: \ 00000000 53656E642065 DC8 "Send error!" \ 72726F722100 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 73656E642072 DC8 "send res %d" \ 657320256400 \ 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 5C302E747874 DC8 "\\0.txt" \ 00 \ 00000007 00 DC8 0 \ 00000008 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ 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 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ 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 766973352E70 DC8 "vis5.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 766973332E70 DC8 "vis3.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 766973312E70 DC8 "vis1.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 70696E672E70 DC8 "ping.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 Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 108 AddSmile 4 AddStringToLog 188 AskNickAndAddContact 4 BackSpaceContactT9 8 ChangeSound 4 ChangeVibra 4 CheckComand 44 CheckDoubleRun 8 ClearContactT9Key 4 ClearLog 60 ClearSendQ 8 CreateEditChat 116 DrawAck 80 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 IlluminationOff 8 IlluminationOn 24 LastLOGQ 0 LoadTemplates 332 NewLOGQ 12 OpenLogfile 16 ParseAnswer 36 ParseXStatusText 20 Play 236 ProcessPacket 292 Quote 152 ReadDefSettings 152 RecountMenu 20 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SMART_REDRAW 8 SaveAnswer 12 SendAnswer 28 SendAuthGrant 44 SendAuthReq 44 SendMSGACK 8 UpdateCLheader 24 UpdateCSMname 4 WriteDefSettings 152 ask_my_info 0 atoi 0 contactlist_menu_ghook 8 contactlist_menu_iconhndl 664 contactlist_menu_onkey 44 create_connect 184 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 84 end_socket 8 free_ICONS 16 get_answer 1088 main 60 maincsm_onclose 8 maincsm_oncreate 24 maincsm_onmessage 60 method0 76 method1 8 method2 8 method3 8 method4 0 method5 24 method8 0 method9 0 my_ed_redraw 12 process_active_timer 12 send_login 36 set_my_status 4 set_my_xstatus 36 setup_ICONS 16 start_vibra 8 stop_vibra 4 to_develop 4 Segment part sizes: Function/Label Bytes -------------- ----- upcoming 64 total_unread2 4 total_c_online 4 mytmr 16 ctmr 16 align 4 spaco1r 4 ping_sec 4 unread_txt 16 INC_show 4 show_nick 64 incs 16 pp_color 4 main_d 4 paused_height 4 msg_away_timer 4 change_back_status 4 status_rem 4 tim_zone 24 In_EXT_On 4 ext_sound 128 total_count 4 in_ext 4 icon_change2 4 SMART_REDRAW 48 setup_ICONS 76 free_ICONS 40 IlluminationOff 60 IlluminationOn 120 ReadDefSettings 244 WriteDefSettings 212 Play 304 start_vibra 104 stop_vibra 88 ChangeVibra 56 ChangeSound 56 FreeTemplates 56 LoadTemplates 400 RXbuf 16392 TXbuf 16392 ElfKiller 28 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 UpdateCLheader 124 ClearContactT9Key 24 AddContactT9Key 36 BackSpaceContactT9 36 create_contactlist_menu 108 contactlist_menu_ghook 68 RecountMenu 160 contactlist_menu_onkey 828 GetOnTotalContact 92 contactlist_menu_iconhndl 468 GetHost 196 atoi 68 GetPort 284 GetHostsCount 120 create_connect 652 ClearSendQ 32 end_socket 40 SendAnswer 388 send_login 148 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1140 AddStringToLog 524 ParseXStatusText 152 AddMsgToChat 812 DrawAck 340 ask_my_info 4 set_my_status 72 set_my_xstatus 264 to_develop 80 ReqAddMsgToChat 120 CheckComand 640 ProcessPacket 1872 process_active_timer 144 method0 576 method1 44 method2 36 method3 24 method4 20 method5 204 method8 8 method9 8 Canvas 536 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 ? 92 UpdateCSMname 32 main 232 edchat_locret 4 ExtractAnswer 300 ??FindNextActiveContact_0 64 FindPrevActiveContact 88 ed_options_handler 436 ParseAnswer 396 SaveAnswer 36 edchat_onkey 800 my_ed_redraw 112 edchat_ghook 544 edchat_desc 84 sk 16 CreateEditChat 1164 Quote 416 GetShortInfo 160 AddCurContact 52 SendAuthReq 204 SendAuthGrant 196 OpenLogfile 156 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 224 ecmenu_HNDLS 32 S_ICONS 4812 font 4 ecmenu_HDR 64 ec_menu 320 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable5 4 ??DataTable6 4 ??DataTable11 4 ??DataTable20 4 ??DataTable22 4 ??DataTable23 4 ??DataTable25 4 ??DataTable26 4 ??DataTable27 4 ??DataTable28 4 ??DataTable30 4 ??DataTable36 4 ??DataTable39 4 ??DataTable40 4 ??DataTable42 4 ??DataTable44 4 ??DataTable45 4 ??DataTable46 4 ??DataTable54 4 ??DataTable55 4 ??DataTable57 4 ??DataTable58 4 ??DataTable59 4 ??DataTable60 4 ??DataTable61 4 ??DataTable62 4 ??DataTable63 4 ??DataTable64 4 ??DataTable67 4 ??DataTable71 4 ??DataTable72 4 ??DataTable75 4 ??DataTable76 4 ??DataTable77 4 ??DataTable81 4 ??DataTable83 4 ??DataTable88 4 ??DataTable96 4 ??DataTable98 4 ??DataTable99 4 ??DataTable101 4 ??DataTable103 4 ??DataTable104 4 ??DataTable105 4 ??DataTable108 4 ??DataTable109 4 ??DataTable113 4 ??DataTable114 4 ??DataTable115 4 ??DataTable116 4 ??DataTable118 4 ??DataTable122 4 ??DataTable124 4 ??DataTable125 4 ??DataTable126 4 ??DataTable127 4 ??DataTable128 4 ??DataTable129 4 ??DataTable130 4 ??DataTable131 4 ??DataTable132 4 ??DataTable133 4 ??DataTable134 4 ??DataTable135 4 ??DataTable136 4 ??DataTable137 4 ??DataTable138 4 ??DataTable140 4 ??DataTable146 4 ??DataTable148 4 ??DataTable149 4 ??DataTable150 4 ??DataTable151 4 ??DataTable152 4 ? 4812 ? 4 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 16 ? 8 ? 12 ? 16 ? 12 ? 28 ? 184 ? 3 ? 3 ? 52 ? 76 ? 3 ? 12 ? 40 ? 16 ? 16 ? 12 ? 8 ? 8 ? 8 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 Others 776 22 964 bytes in segment CODE 2 669 bytes in segment DATA_C 4 816 bytes in segment DATA_I 4 816 bytes in segment DATA_ID 33 472 bytes in segment DATA_Z 24 bytes in segment INITTAB 22 212 bytes of CODE memory (+ 776 bytes shared) 7 485 bytes of CONST memory 38 288 bytes of DATA memory Errors: none Warnings: 1