############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 31/Mar/2008 11:29:10 # # 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 -D # # BCFGGEN --preprocess D:\Pasha\elf\_MY_PROJECT_\natic # # q_mod\kluch_BCFGGEN\List\ -lC # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kluch_BCFGGEN\L # # ist\ -o D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kluch_B # # CFGGEN\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\kluch_BCFGGEN\L # # ist\main.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kluch_BCFGGEN\O # # bj\main.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" 27 28 29 //--------------------------------------------------------------------// 30 // READ CONFIGS // 31 //--------------------------------------------------------------------// 32 typedef struct 33 { 34 35 CFG_HDR cfghdr0; 36 unsigned int UIN; 37 38 CFG_HDR cfghdr1; 39 char PASS[9]; 40 41 //Network settings 42 CFG_HDR cfghdr2; 43 CFG_HDR cfghdr2_1; 44 char NATICQ_HOST[128]; 45 46 CFG_HDR cfghdr2_2; 47 unsigned int NATICQ_PORT; 48 49 CFG_HDR cfghdr2_3; 50 unsigned int RECONNECT_TIME; 51 52 CFG_HDR cfghdr2_4; 53 char HIST_PATH[64]; 54 55 CFG_HDR cfghdr2_5; 56 char SMILE_FILE[64]; 57 58 CFG_HDR cfghdr2_6; 59 char SMILE_PATH[64]; 60 61 CFG_HDR cfghdr2_7; 62 char ICON_PATH[64]; 63 64 CFG_HDR cfghdr2_8; 65 char XSTATUSES_PATH[64]; 66 67 CFG_HDR cfghdr2_9; 68 char TEMPLATES_PATH[64]; 69 CFG_HDR cfghdr3; 70 71 //View settings 72 CFG_HDR cfghdr4; 73 //Status icon on mainscreen position 74 CFG_HDR cfghdr4_1; 75 unsigned int IDLEICON_X; 76 unsigned int IDLEICON_Y; 77 78 //Popup chat 79 CFG_HDR cfghdr4_2; 80 int DEVELOP_IF; 81 CFG_CBOX_ITEM cfgcbox4_2[3]; 82 83 //Sorting 84 CFG_HDR cfghdr4_3; 85 int SORT_CLIST; 86 CFG_CBOX_ITEM cfgcbox4_3[2]; 87 88 //First letter when typing 89 CFG_HDR cfghdr4_4; 90 int FIRST_LETTER; 91 CFG_CBOX_ITEM cfgcbox4_4[2]; 92 93 //Fonts and colors 94 CFG_HDR cfghdr4_5; 95 CFG_HDR cfghdr4_5_1; 96 unsigned int I_COLOR; 97 98 CFG_HDR cfghdr4_5_2; 99 unsigned int TO_COLOR; 100 101 CFG_HDR cfghdr4_5_3; 102 unsigned int X_COLOR; 103 104 CFG_HDR cfghdr4_5_4; 105 unsigned int ED_FONT_SIZE; 106 107 CFG_HDR cfghdr4_5_5; 108 unsigned int ED_H_FONT_SIZE; 109 110 CFG_HDR cfghdr4_5_6; 111 unsigned int ED_X_FONT_SIZE; 112 113 CFG_HDR cfghdr4_5_7; 114 unsigned int O_I_COLOR; 115 116 CFG_HDR cfghdr4_5_8; 117 unsigned int O_TO_COLOR; 118 119 CFG_HDR cfghdr4_5_9; 120 unsigned int O_X_COLOR; 121 122 CFG_HDR cfghdr4_5_10; 123 unsigned int O_ED_FONT_SIZE; 124 125 CFG_HDR cfghdr4_5_11; 126 unsigned int O_ED_H_FONT_SIZE; 127 128 CFG_HDR cfghdr4_5_12; 129 unsigned int O_ED_X_FONT_SIZE; 130 131 CFG_HDR cfghdr4_5_13; 132 unsigned int ACK_COLOR; 133 134 CFG_HDR cfghdr4_5_14; 135 unsigned int UNACK_COLOR; 136 137 //Color for background in select smail 138 CFG_HDR cfghdr19_1;//={CFG_UINT,"Smile BG color",0,23}; 139 unsigned int color_choose;// = 1; 140 141 CFG_HDR cfghdr4_6; 142 143 //Illumination by BoBa 19.04.2007 144 CFG_HDR cfghdr4_7; 145 CFG_HDR cfghdr4_7_1; 146 unsigned int ILL_DISP_RECV; 147 148 CFG_HDR cfghdr4_7_2; 149 unsigned int ILL_KEYS_RECV; 150 151 CFG_HDR cfghdr4_7_3; 152 unsigned int ILL_RECV_TMR; 153 154 CFG_HDR cfghdr4_7_4; 155 unsigned int ILL_RECV_FADE; 156 157 CFG_HDR cfghdr4_7_5; 158 unsigned int ILL_DISP_SEND; 159 160 CFG_HDR cfghdr4_7_6; 161 unsigned int ILL_KEYS_SEND; 162 163 CFG_HDR cfghdr4_7_7; 164 unsigned int ILL_SEND_TMR; 165 166 CFG_HDR cfghdr4_7_8; 167 unsigned int ILL_SEND_FADE; 168 169 CFG_HDR cfghdr4_7_9; 170 unsigned int ILL_OFF_FADE; 171 CFG_HDR cfghdr4_8; 172 173 CFG_HDR cfghdr5; 174 175 176 //------------------------------------------------------------------------------// 177 // HISTORY 178 //------------------------------------------------------------------------------// 179 180 //History 181 CFG_HDR cfghdr6; 182 183 CFG_HDR cfghdr6_8; 184 int SHOW_ACTIVE; 185 CFG_CBOX_ITEM cfgcbox6_8[2]; 186 //Enable history logging 187 CFG_HDR cfghdr6_1; 188 int LOG_ALL; 189 CFG_CBOX_ITEM cfgcbox6_1[2]; 190 191 //History type 192 CFG_HDR cfghdr6_2; 193 int HISTORY_TYPE; 194 CFG_CBOX_ITEM cfgcbox6_2[2]; 195 196 //Enable status logging 197 CFG_HDR cfghdr6_3; 198 int LOG_STATCH; 199 CFG_CBOX_ITEM cfgcbox6_3[2]; 200 201 //Enable X-status logging 202 CFG_HDR cfghdr6_4; 203 int LOG_XTXT; 204 CFG_CBOX_ITEM cfgcbox6_4[2]; 205 206 //Auto request X-status if entering to chat 207 CFG_HDR cfghdr6_5; 208 int ENA_AUTO_XTXT; 209 CFG_CBOX_ITEM cfgcbox6_5[2]; 210 211 //Don't log X-status, if it same as prevision 212 CFG_HDR cfghdr6_6; 213 int NOT_LOG_SAME_XTXT; 214 CFG_CBOX_ITEM cfgcbox6_6[2]; 215 216 //Buffer for fill from history 217 CFG_HDR cfghdr6_7; 218 int HISTORY_BUFFER; 219 CFG_CBOX_ITEM cfgcbox6_7[7]; 220 221 CFG_HDR cfghdr7; 222 223 224 //Notify 225 CFG_HDR cfghdr8; 226 227 CFG_HDR cfghdr8_1; 228 unsigned int sndVolume; 229 230 CFG_HDR cfghdr8_2; 231 unsigned int vibraPower; 232 233 CFG_HDR cfghdr8_3; 234 int VIBR_TYPE; 235 CFG_CBOX_ITEM cfgcbox8_3[2]; 236 237 CFG_HDR cfghdr8_4; 238 int VIBR_ON_CONNECT; 239 CFG_CBOX_ITEM cfgcbox8_4[2]; 240 241 CFG_HDR cfghdr8_5; 242 243 CFG_HDR cfghdr181; 244 unsigned int extended_sounds; 245 CFG_CBOX_ITEM cfgcbox18_3_2[2]; 246 247 CFG_HDR cfghdr8_5_1; 248 char sndStartup[64]; 249 250 CFG_HDR cfghdr8_5_2; 251 char sndSrvMsg[64]; 252 253 CFG_HDR cfghdr8_5_3; 254 char sndGlobal[64]; 255 256 CFG_HDR cfghdr8_5_4; 257 char sndMsg[64]; 258 259 CFG_HDR cfghdr8_5_5; 260 char sndMsgSent[64]; 261 262 CFG_HDR cfghdr15; 263 char sndGlobal2[64]; 264 265 CFG_HDR cfghdr161; 266 char sndMsg2[64]; 267 268 CFG_HDR cfghdr16r1; 269 char pingsnd[64]; 270 CFG_HDR cfghdr8_6; 271 272 CFG_HDR cfghdr9; 273 }myConfig; 274 275 typedef struct 276 { 277 278 //-----------------------------------------------------------------------------// 279 // НАСТРОЙКА КЛАВИШ 280 //-----------------------------------------------------------------------------// 281 282 //View settings 283 CFG_HDR cfghdr23_4; 284 285 //Long press right in chat 286 CFG_HDR cfghdr4_67; 287 int LongRightAction; 288 CFG_CBOX_ITEM cfgcbox4_56[3]; 289 290 //Long press right in chat 291 CFG_HDR cfghdr34_64; 292 int LongLeftAction ; 293 CFG_CBOX_ITEM cfgcbox444_56[2]; 294 295 //Action on # button in contact list 296 CFG_HDR cfghdr78_4520; 297 int ActionResh; 298 CFG_CBOX_ITEM cfgcbox_668_z[2]; 299 //Press vol up or vol down button in CL 300 CFG_HDR cfghdr34_642;//={CFG_CBOX,"Действие на громк.вниз",0,2}; 301 int isVolDownButton;// = 1; 302 CFG_CBOX_ITEM cfgcbox434_56[2];//={"Нет","Да"}; 303 304 CFG_HDR cfghdr34_6342;//={CFG_CBOX,"Действие на громк.вверх",0,2}; 305 int isVolUpButton;// = 1; 306 CFG_CBOX_ITEM cfgcbox4134_56[2];//={"Нет","Да"}; 307 308 CFG_HDR cfghdr223_5; //НАСТРОКА КЛАВИШ 309 310 311 //------------------------------- STATUS SETTING --------------------------------// 312 313 CFG_HDR cfghdr_45; 314 315 //Status icon on mainscreen position 316 CFG_HDR cfghdr467_1; 317 int ShowStatusIcon; 318 CFG_CBOX_ITEM cfgcbox9_1[5]; 319 /* 320 CFG_HDR cfghdr4_1;//in original config!!! 321 unsigned int IDLEICON_X; 322 unsigned int IDLEICON_Y;*/ 323 324 //Show x-status on iconbar or mainscreen 325 CFG_HDR cfghdrz_68; 326 int show_xstatus; 327 CFG_CBOX_ITEM cfgcbox_8z[4]; 328 329 CFG_HDR cfghdrz_1; 330 unsigned int IDLEICON_XX; 331 unsigned int IDLEICON_YX; 332 333 334 //Number first pic status in folder img for show in iconbar 335 CFG_HDR cfghdr19_22; 336 unsigned int NumStatusToIconBar; 337 338 //Number first pic x-status in folder img for show in iconbar 339 CFG_HDR cfghdr19_242; 340 unsigned int NumXStatusToIconBar; 341 342 CFG_HDR cfghdr_4;//STATUS SETTINGS 343 344 345 //------------------------------------- PNGFONT SETTING -------------------------------------// 346 347 348 CFG_HDR cfghdr1_45; 349 350 //Nember png-font or system 351 CFG_HDR cfghdr65z; 352 unsigned int fonto; 353 354 //Path to png-font 355 CFG_HDR cfghdr98; 356 char fontpath[64]; 357 358 //Coordinates for message on idle 359 CFG_HDR cfghd83; 360 unsigned int msg_d_x ; 361 unsigned int msg_d_y ; 362 363 CFG_HDR cfghdr60_2; 364 char fontColor[4]; 365 366 CFG_HDR cfghdr60_3; 367 char bgrColor[4]; 368 369 //Max show symbol on idle 370 CFG_HDR cfghdr19a_1; 371 unsigned int main_lenght; 372 373 CFG_HDR cfghdr9z9; 374 int use_cutter; 375 CFG_CBOX_ITEM cfgcbox18a_4[2]; 376 377 CFG_HDR cfghdr65y; 378 unsigned int spaco1; 379 380 //__root const CFG_HDR cfghdr65u={CFG_UINT,"Main msg space",0,999999}; 381 //__root const unsigned int spaco2=0; 382 383 CFG_HDR cfghdrss_45;//PNGFONT SETTING 384 385 386 //-----------------------------------------------------------------------------// 387 // ONLINE TIME 388 //-----------------------------------------------------------------------------// 389 390 391 CFG_HDR cfghdr_m71; 392 393 CFG_HDR cfghdr699; 394 unsigned int onlineTime_x; 395 unsigned int onlineTime_y; 396 397 CFG_HDR cfghdr698; 398 int Pause_Time; 399 CFG_CBOX_ITEM cfgcbox85[2]; 400 401 CFG_HDR cfghdr_m70; 402 403 404 //-----------------------------------------------------------------------------// 405 // AUTO PING/UNREAD 406 //-----------------------------------------------------------------------------// 407 408 409 CFG_HDR cfghdr_m91; 410 411 CFG_HDR cfghd66; 412 unsigned int Ping_X ; 413 unsigned int Ping_Y ; 414 415 CFG_HDR cfghdr1z9a_1; 416 unsigned int ping_time_config ; 417 418 CFG_HDR cfghdr298; 419 int Is_Unread_On; 420 CFG_CBOX_ITEM cfgcbox86[2]; 421 422 CFG_HDR cfghd67; 423 unsigned int unread_X; 424 unsigned int unread_Y; 425 426 CFG_HDR cfghdr_m90; 427 428 429 //-----------------------------------------------------------------------------// 430 // AUTO STATUS // 431 //-----------------------------------------------------------------------------// 432 433 434 CFG_HDR cfghdr_m61; 435 436 CFG_HDR cfghdr668; 437 int Auto_Status; 438 CFG_CBOX_ITEM cfgcbox89[2]; 439 440 CFG_HDR cfghdr667; 441 unsigned int AUTO_ENGADE; 442 443 CFG_HDR cfghdr_13; 444 int time_zone; 445 CFG_CBOX_ITEM cfgcbox_13[33]; 446 447 CFG_HDR cfghdrzz_8; 448 char awayHelloMsg[24]; 449 450 CFG_HDR cfghdrzz_9; 451 char awayMsg[64]; 452 453 CFG_HDR cfghdr66_2; 454 int Reset_timer; 455 CFG_CBOX_ITEM cfgcbox90[2]; 456 457 //Show away time on idle 458 CFG_HDR cfghdr663; 459 int showAwayIdle ; 460 CFG_CBOX_ITEM cfgcbox82[2]; 461 462 CFG_HDR cfghd6_7; 463 unsigned int auto_x; 464 unsigned int auto_y; 465 466 CFG_HDR cfghdr_m60; 467 468 469 //------------------------------------------------------------------------------// 470 // EXTRA CONFIG // 471 //------------------------------------------------------------------------------// 472 473 474 CFG_HDR cfghdr_m51; 475 476 //Show contact header with... 477 CFG_HDR cfghdr467; 478 int TIME_OR_MSG; 479 CFG_CBOX_ITEM cfgcbox91[4]; 480 481 //Vibra count in vibra remaider 482 CFG_HDR cfghdr65; 483 unsigned int Vibra_cc; 484 485 //CSM for player 486 CFG_HDR cfghdr66; 487 char CsmAdr[9]; //el=A087B454 //es=A068E244 488 489 //Text before name track 490 CFG_HDR cfghdr67; 491 char playing[13]; 492 493 //Show command sending 494 CFG_HDR cfghdr780; 495 int show_send_info; 496 CFG_CBOX_ITEM cfgcbox8_z[2]; 497 498 //Show time offline contact 499 CFG_HDR cfghdr7_80; 500 int isLogOffline; 501 CFG_CBOX_ITEM cfgcbox8df_z[2]; 502 503 //Show time onlain contact 504 CFG_HDR cfghdr7_81; 505 int isLogOnline; 506 CFG_CBOX_ITEM cfgcbox9df_z[2]; 507 508 //Show Loopback contact in CL 509 CFG_HDR cfghdr71_30; 510 int IsShowLoopback; 511 CFG_CBOX_ITEM cfgcbox_3z[2]; 512 513 514 #ifdef kluchnik 515 //from me!!!))) 516 /* 517 CFG_HDR cfghdr71280={CFG_CBOX,"Auto bot kel",0,2}; 518 int autobot_kel = 0; 519 CFG_CBOX_ITEM cfgcbox8a_z[2]={"Off","On"}; 520 521 CFG_HDR cfghdr781={CFG_UINT,"Autobot target",0,0xFFFFFFFF}; 522 unsigned int AUTOBOT_UIN=0;*/ 523 #endif 524 CFG_HDR cfghdr_m50;//level 525 526 CFG_HDR cfghdr11_9;//level 527 char ignor_list[256]; 528 }myConfigMod; 529 530 531 //-----------------------------------------------------------------------------------// 532 // ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ // 533 //-----------------------------------------------------------------------------------// 534 535 #ifdef BCFGGEN 536 extern const unsigned int Vibra_cc; 537 extern const unsigned int Ping_X; 538 extern const unsigned int Ping_Y; 539 extern const unsigned int unread_X; 540 extern const unsigned int unread_Y; 541 extern const int show_xstatus; 542 extern const char fontpath[64]; 543 extern const int ShowStatusIcon; 544 extern const unsigned int color_choose; 545 546 //For online/offline log 547 extern const int isLogOffline; 548 extern const int isLogOnline; 549 550 #ifdef ELKA 551 //If action vol up && vol down button on elka 552 extern const int isVolUpButton; 553 extern const int isVolDownButton; 554 #endif 555 556 //Autoaway message 557 extern const char awayHelloMsg[24];//hello msg 558 extern const char awayMsg[64];//message 559 560 extern const int IsShowLoopback;//Show Loopback contact in CL 561 //For png font 562 extern const unsigned int fonto; 563 extern const unsigned int spaco1; 564 //extern const 565 unsigned int spaco2; 566 //int spaco2=spaco1; 567 extern const char fontColor[];//Цвет для системного шрифта 568 extern const char bgrColor[]; 569 570 extern const unsigned int AUTO_ENGADE; 571 extern const int Is_Unread_On; 572 573 extern const unsigned int UIN; 574 extern const char PASS[]; 575 576 extern const int Pause_Time; 577 578 extern const unsigned int auto_x; 579 extern const unsigned int auto_y; 580 extern const int showAwayIdle; 581 582 //Online time on idle 583 extern const unsigned int onlineTime_x; 584 extern const unsigned int onlineTime_y; 585 586 extern const int Auto_Status;//Включен автостатус или нет 587 extern const int time_zone; 588 589 extern const int TIME_OR_MSG; 590 591 extern const char NATICQ_HOST[]; 592 extern const unsigned int NATICQ_PORT; 593 extern const unsigned int RECONNECT_TIME; //2058 594 595 extern const char pingsnd[64]; 596 extern const unsigned int ping_time_config; 597 extern const char ignor_list[256]; 598 599 extern const unsigned int msg_d_x; 600 extern const unsigned int msg_d_y; 601 extern const unsigned int main_lenght; 602 extern const int use_cutter; 603 604 extern const char playing[13]; 605 extern const int Reset_timer; 606 extern const unsigned int NumStatusToIconBar; 607 extern const unsigned int NumXStatusToIconBar; 608 extern const int ShowStatusIcon; 609 610 extern const int LongRightAction; 611 extern const int LongLeftAction; 612 613 //extern const int OpenBrowser; 614 //extern const char BalleteMiniPath[]; //kluchnik 26.03.08 615 616 #ifdef kluchnik 617 /*unsigned int AUTOBOT_UIN; 618 int autobot_kel;*/ 619 #endif 620 621 extern const int SHOW_ACTIVE; 622 extern const int VIBR_TYPE, VIBR_ON_CONNECT; 623 extern const int DEVELOP_IF; 624 625 extern const int VIBR_ON_CONNECT; 626 extern const int FIRST_LETTER; 627 extern const char HIST_PATH[64]; 628 extern const int HISTORY_TYPE; 629 extern const int show_send_info; 630 extern const int ActionResh; 631 extern const unsigned int vibraPower; 632 633 extern const unsigned int IDLEICON_X; 634 extern const unsigned int IDLEICON_Y; 635 636 extern const unsigned int IDLEICON_XX; 637 extern const unsigned int IDLEICON_YX; 638 639 extern const unsigned int I_COLOR; 640 extern const unsigned int TO_COLOR; 641 extern const unsigned int X_COLOR; 642 extern const unsigned int O_I_COLOR; 643 extern const unsigned int O_TO_COLOR; 644 extern const unsigned int O_X_COLOR; 645 646 extern const unsigned int ED_FONT_SIZE; 647 extern const unsigned int ED_H_FONT_SIZE; 648 extern const unsigned int ED_X_FONT_SIZE; 649 extern const unsigned int O_ED_FONT_SIZE; 650 extern const unsigned int O_ED_H_FONT_SIZE; 651 extern const unsigned int O_ED_X_FONT_SIZE; 652 653 extern const unsigned int ACK_COLOR; 654 extern const unsigned int UNACK_COLOR; 655 656 extern const int ENA_AUTO_XTXT; 657 extern const int NOT_LOG_SAME_XTXT; 658 extern const int LOG_XTXT; 659 extern const int HISTORY_BUFFER; 660 661 //Illumination by BoBa 19.04.2007 662 /////////// 663 extern const unsigned int ILL_DISP_RECV; 664 extern const unsigned int ILL_KEYS_RECV; 665 extern const unsigned int ILL_DISP_SEND; 666 extern const unsigned int ILL_KEYS_SEND; 667 extern const unsigned int ILL_SEND_TMR; 668 extern const unsigned int ILL_SEND_FADE; 669 extern const unsigned int ILL_RECV_TMR; 670 extern const unsigned int ILL_RECV_FADE; 671 extern const unsigned int ILL_OFF_FADE; 672 673 //=============================Проигрывание звука======================= 674 675 extern const char sndStartup[]; 676 extern const char sndSrvMsg[]; 677 extern const char sndGlobal[]; 678 extern const char sndGlobal2[]; 679 extern const char sndMsg[]; 680 extern const char sndMsg2[]; 681 extern const unsigned int extended_sounds; 682 extern const char sndMsgSent[]; 683 extern const unsigned int sndVolume; 684 685 //=============================================================== 686 687 extern const int VIBR_TYPE; 688 extern const unsigned int vibraPower; 689 690 extern const char TEMPLATES_PATH[]; 691 extern const char ICON_PATH[]; 692 #else 693 unsigned int color_choose; 694 unsigned int Vibra_cc; 695 unsigned int Ping_X; 696 unsigned int Ping_Y; 697 unsigned int unread_X; 698 unsigned int unread_Y; 699 int show_xstatus; 700 char fontpath[64]; 701 int ShowStatusIcon; 702 703 //For online/offline log 704 int isLogOffline; 705 int isLogOnline; 706 707 #ifdef ELKA 708 //If action vol up && vol down button on elka 709 int isVolUpButton; 710 int isVolDownButton; 711 #endif 712 713 //Autoaway message 714 char awayHelloMsg[24];//hello msg 715 char awayMsg[64];//message 716 717 int IsShowLoopback;//Show Loopback contact in CL 718 //For png font 719 unsigned int fonto; 720 unsigned int spaco1; 721 unsigned int spaco2; 722 //int spaco2=spaco1; 723 char fontColor[];//Цвет для системного шрифта 724 char bgrColor[]; 725 726 unsigned int AUTO_ENGADE; 727 int Is_Unread_On; 728 729 unsigned int UIN; 730 char PASS[]; 731 732 int Pause_Time; 733 734 unsigned int auto_x; 735 unsigned int auto_y; 736 int showAwayIdle; 737 738 //Online time on idle 739 unsigned int onlineTime_x; 740 unsigned int onlineTime_y; 741 742 int Auto_Status;//Включен автостатус или нет 743 int time_zone; 744 745 int TIME_OR_MSG; 746 747 char NATICQ_HOST[]; 748 unsigned int NATICQ_PORT; 749 unsigned int RECONNECT_TIME; //2058 750 751 char pingsnd[64]; 752 unsigned int ping_time_config; 753 char ignor_list[256]; 754 755 unsigned int msg_d_x; 756 unsigned int msg_d_y; 757 unsigned int main_lenght; 758 int use_cutter; 759 760 char playing[13]; 761 int Reset_timer; 762 unsigned int NumStatusToIconBar; 763 unsigned int NumXStatusToIconBar; 764 int ShowStatusIcon; 765 766 int LongRightAction; 767 int LongLeftAction; 768 769 int OpenBrowser; 770 char BalleteMiniPath[]; //kluchnik 26.03.08 771 772 #ifdef kluchnik 773 unsigned int AUTOBOT_UIN; 774 int autobot_kel; 775 #endif 776 777 int SHOW_ACTIVE; 778 int VIBR_TYPE, VIBR_ON_CONNECT; 779 int DEVELOP_IF; 780 781 int VIBR_ON_CONNECT; 782 int FIRST_LETTER; 783 char HIST_PATH[64]; 784 int HISTORY_TYPE; 785 int show_send_info; 786 int ActionResh; 787 unsigned int vibraPower; 788 789 unsigned int IDLEICON_X; 790 unsigned int IDLEICON_Y; 791 792 unsigned int IDLEICON_XX; 793 unsigned int IDLEICON_YX; 794 795 unsigned int I_COLOR; 796 unsigned int TO_COLOR; 797 unsigned int X_COLOR; 798 unsigned int O_I_COLOR; 799 unsigned int O_TO_COLOR; 800 unsigned int O_X_COLOR; 801 802 unsigned int ED_FONT_SIZE; 803 unsigned int ED_H_FONT_SIZE; 804 unsigned int ED_X_FONT_SIZE; 805 unsigned int O_ED_FONT_SIZE; 806 unsigned int O_ED_H_FONT_SIZE; 807 unsigned int O_ED_X_FONT_SIZE; 808 809 unsigned int ACK_COLOR; 810 unsigned int UNACK_COLOR; 811 812 int ENA_AUTO_XTXT; 813 int NOT_LOG_SAME_XTXT; 814 int LOG_XTXT; 815 int HISTORY_BUFFER; 816 817 //Illumination by BoBa 19.04.2007 818 /////////// 819 unsigned int ILL_DISP_RECV; 820 unsigned int ILL_KEYS_RECV; 821 unsigned int ILL_DISP_SEND; 822 unsigned int ILL_KEYS_SEND; 823 unsigned int ILL_SEND_TMR; 824 unsigned int ILL_SEND_FADE; 825 unsigned int ILL_RECV_TMR; 826 unsigned int ILL_RECV_FADE; 827 unsigned int ILL_OFF_FADE; 828 829 //=============================Проигрывание звука======================= 830 831 char sndStartup[]; 832 char sndSrvMsg[]; 833 char sndGlobal[]; 834 char sndGlobal2[]; 835 char sndMsg[]; 836 char sndMsg2[]; 837 unsigned int extended_sounds; 838 char sndMsgSent[]; 839 unsigned int sndVolume; 840 841 //=============================================================== 842 843 int VIBR_TYPE; 844 unsigned int vibraPower; 845 846 char TEMPLATES_PATH[]; 847 char ICON_PATH[]; 848 #endif 849 //-----------------------------------------------------------------------------------// 850 // -------------------------------- INIT CONFIGS -----------------------------------// 851 //-----------------------------------------------------------------------------------// 852 853 extern int janis; 854 char per_s[]="%s"; 855 \ In segment CODE, align 4, keep-with-next 856 void UpdateConfig() 857 { \ UpdateConfig: \ 00000000 30402DE9 PUSH {R4,R5,LR} 858 int myConfigSize = sizeof(myConfig); 859 myConfig* myConf = (myConfig*)malloc(myConfigSize); 860 int newCfgFile = InitConfig(myConf, myConfigSize, "NATICQ",4); \ 00000004 38509FE5 LDR R5,??UpdateConfig_0 ;; `?` \ 00000008 B840A0E3 MOV R4,#+184 \ 0000000C 544D84E3 ORR R4,R4,#0x1500 \ 00000010 0400A0E1 MOV R0,R4 \ 00000014 140000EF SWI +20 \ 00000018 0430A0E3 MOV R3,#+4 \ 0000001C 0520A0E1 MOV R2,R5 \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 ........ _BLF InitConfig,??InitConfig??rA 861 862 int myConfigModSize = sizeof(myConfigMod); 863 myConfigMod* myConfMod = (myConfigMod*)malloc(myConfigSize); \ 00000028 0400A0E1 MOV R0,R4 \ 0000002C 140000EF SWI +20 864 int newCfgModFile = InitConfig(myConfMod, myConfigModSize, "NATICQMod",4); \ 00000030 0430A0E3 MOV R3,#+4 \ 00000034 082085E2 ADD R2,R5,#+8 \ 00000038 4C1044E2 SUB R1,R4,#+76 \ 0000003C 3040BDE8 POP {R4,R5,LR} ;; Pop \ 00000040 ........ _BF InitConfig,??InitConfig??rA ;; tailcall \ ??UpdateConfig_0: \ 00000044 ........ DC32 `?` 865 866 #ifdef BCFGGEN 867 #else 868 869 //--------------------------- 870 // MOD CONFIG 871 //--------------------------- 872 Vibra_cc=myConfMod->Vibra_cc; 873 Ping_X=myConfMod->Ping_X; 874 Ping_Y=myConfMod->Ping_Y; 875 unread_X=myConfMod->unread_X; 876 unread_Y=myConfMod->unread_Y; 877 show_xstatus=myConfMod->show_xstatus; 878 sprintf(fontpath,per_s,myConfMod->fontpath); 879 ShowStatusIcon=myConfMod->ShowStatusIcon; 880 AUTO_ENGADE=myConfMod->AUTO_ENGADE; 881 882 //For online/offline log 883 isLogOffline=myConfMod->isLogOffline; 884 isLogOnline=myConfMod->isLogOnline; 885 886 #ifdef ELKA 887 //If action vol up && vol down button on elka 888 isVolUpButton=myConfMod->isVolUpButton; 889 isVolDownButton=myConfMod->isVolDownButton; 890 #endif 891 892 //Autoaway message 893 sprintf(awayHelloMsg,per_s,myConfMod->awayHelloMsg);//hello msg 894 sprintf(awayMsg,per_s,myConfMod->awayMsg);//message 895 896 IsShowLoopback=myConfMod->IsShowLoopback;//Show Loopback contact in CL 897 //For png font 898 fonto=myConfMod->fonto; 899 spaco1=myConfMod->spaco1; 900 spaco2=myConfMod->spaco1; 901 //int spaco2=spaco1; 902 sprintf(fontColor,per_s,myConfMod->fontColor);//Цвет для системного шрифта 903 sprintf(bgrColor,per_s,myConfMod->bgrColor); 904 905 AUTO_ENGADE=myConfMod->AUTO_ENGADE; 906 Is_Unread_On=myConfMod->Is_Unread_On; 907 Pause_Time=myConfMod->Pause_Time; 908 909 auto_x=myConfMod->auto_x; 910 auto_y=myConfMod->auto_y; 911 showAwayIdle=myConfMod->showAwayIdle; 912 913 //Online time on idle 914 onlineTime_x=myConfMod->onlineTime_x; 915 onlineTime_y=myConfMod->onlineTime_y; 916 917 Auto_Status=myConfMod->Auto_Status;//Включен автостатус или нет 918 time_zone=myConfMod->time_zone; 919 920 TIME_OR_MSG=myConfMod->TIME_OR_MSG; 921 922 sprintf(pingsnd,per_s,myConf->pingsnd); 923 ping_time_config=myConfMod->ping_time_config; 924 sprintf(ignor_list,per_s,myConfMod->ignor_list); 925 926 msg_d_x=myConfMod->msg_d_x; 927 msg_d_y=myConfMod->msg_d_y; 928 main_lenght=myConfMod->main_lenght; 929 use_cutter=myConfMod->use_cutter; 930 931 sprintf(playing,per_s,myConfMod->playing); 932 Reset_timer=myConfMod->Reset_timer; 933 NumStatusToIconBar=myConfMod->NumStatusToIconBar; 934 NumXStatusToIconBar=myConfMod->NumXStatusToIconBar; 935 ShowStatusIcon=myConfMod->ShowStatusIcon; 936 937 LongRightAction=myConfMod->LongRightAction; 938 LongLeftAction=myConfMod->LongLeftAction; 939 940 //Позиция хстатус на гэ 941 IDLEICON_XX=myConfMod->IDLEICON_XX; 942 IDLEICON_YX=myConfMod->IDLEICON_YX; 943 // OpenBrowser=myConfMod->OpenBrowser; 944 // sprintf(BalleteMiniPath,per_s,myConfMod->BalleteMiniPath); //kluchnik 26.03.08 945 946 #ifdef kluchnik 947 /* AUTOBOT_UIN=myConfMod->AUTOBOT_UIN; 948 autobot_kel=myConfMod->autobot_kel;*/ 949 #endif 950 951 952 953 //-------------------------------- 954 // ORIGINAL CONFIG 955 //-------------------------------- 956 UIN=myConf->UIN; 957 sprintf(PASS,per_s,myConf->PASS); 958 959 SHOW_ACTIVE=myConf->SHOW_ACTIVE; 960 VIBR_TYPE=myConf->VIBR_TYPE; 961 // VIBR_ON_CONNECT=myConf->VIBRA_ON_CONNECT; 962 DEVELOP_IF=myConf->DEVELOP_IF; 963 964 FIRST_LETTER=myConf->FIRST_LETTER; 965 966 sprintf(HIST_PATH,per_s,myConf->HIST_PATH); 967 968 HISTORY_TYPE=myConf->HISTORY_TYPE; 969 show_send_info=myConfMod->show_send_info; 970 ActionResh=myConfMod->ActionResh; 971 972 973 sprintf(NATICQ_HOST,per_s,myConf->NATICQ_HOST); 974 NATICQ_PORT=myConf->NATICQ_PORT; 975 RECONNECT_TIME=myConf->RECONNECT_TIME; //2058 976 977 vibraPower=myConf->vibraPower; 978 979 IDLEICON_X=myConf->IDLEICON_X; 980 IDLEICON_Y=myConf->IDLEICON_Y; 981 982 I_COLOR=myConf->I_COLOR; 983 TO_COLOR=myConf->TO_COLOR; 984 X_COLOR=myConf->X_COLOR; 985 O_I_COLOR=myConf->O_I_COLOR; 986 O_TO_COLOR=myConf->O_TO_COLOR; 987 O_X_COLOR=myConf->O_X_COLOR; 988 989 ED_FONT_SIZE=myConf->ED_FONT_SIZE; 990 ED_H_FONT_SIZE=myConf->ED_H_FONT_SIZE; 991 ED_X_FONT_SIZE=myConf->ED_X_FONT_SIZE; 992 O_ED_FONT_SIZE=myConf->O_ED_FONT_SIZE; 993 O_ED_H_FONT_SIZE=myConf->O_ED_H_FONT_SIZE; 994 O_ED_X_FONT_SIZE=myConf->O_ED_X_FONT_SIZE; 995 996 ACK_COLOR=myConf->ACK_COLOR; 997 UNACK_COLOR=myConf->UNACK_COLOR; 998 999 ENA_AUTO_XTXT=myConf->ENA_AUTO_XTXT; 1000 NOT_LOG_SAME_XTXT=myConf->NOT_LOG_SAME_XTXT; 1001 LOG_XTXT=myConf->LOG_XTXT; 1002 1003 HISTORY_BUFFER=myConf->HISTORY_BUFFER; 1004 1005 //Illumination by BoBa 19.04.2007 1006 /////////// 1007 ILL_DISP_RECV=myConf->ILL_DISP_RECV; 1008 ILL_KEYS_RECV=myConf->ILL_KEYS_RECV; 1009 ILL_DISP_SEND=myConf->ILL_DISP_SEND; 1010 ILL_KEYS_SEND=myConf->ILL_KEYS_SEND; 1011 ILL_SEND_TMR=myConf->ILL_SEND_TMR; 1012 ILL_SEND_FADE=myConf->ILL_SEND_FADE; 1013 ILL_RECV_TMR=myConf->ILL_RECV_TMR; 1014 ILL_RECV_FADE=myConf->ILL_RECV_FADE; 1015 ILL_OFF_FADE=myConf->ILL_OFF_FADE; 1016 1017 //=============================Проигрывание звука======================= 1018 1019 sprintf(sndStartup,per_s,myConf->sndStartup); 1020 sprintf(sndSrvMsg,per_s,myConf->sndSrvMsg); 1021 sprintf(sndGlobal,per_s,myConf->sndGlobal); 1022 sprintf(sndGlobal2,per_s,myConf->sndGlobal2); 1023 sprintf(sndMsg,per_s,myConf->sndMsg); 1024 sprintf(sndMsg2,per_s,myConf->sndMsg2); 1025 extended_sounds=myConf->extended_sounds; 1026 sprintf(sndMsgSent,per_s,myConf->sndMsgSent); 1027 sndVolume=myConf->sndVolume; 1028 1029 //=============================================================== 1030 1031 vibraPower=myConf->vibraPower; 1032 1033 sprintf(TEMPLATES_PATH,per_s,myConf->TEMPLATES_PATH); 1034 sprintf(ICON_PATH,per_s,myConf->ICON_PATH); 1035 1036 1037 mfree(myConf); 1038 mfree(myConfMod); 1039 #endif 1040 } 1041 1042 //--------------------------------------------------------------------// 1043 //---------------------------READ CONFIGS-----------------------------// 1044 //--------------------------------------------------------------------// 1045 1046 extern int *XStatusesIconArray; 1047 1048 #ifndef NEWSGOLD 1049 #define SEND_TIMER 1050 #endif 1051 1052 #ifdef ELKA 1053 #pragma swi_number=54 1054 __swi __arm void SLI_SetState(unsigned char state); 1055 #endif 1056 1057 #define IN_TICKS(sec) (sec * TMR_SECOND) 1058 1059 int main_d; 1060 int align=0; 1061 //int space=1; 1062 void *canvasdata; 1063 int paused_height; 1064 1065 1066 char talk_sound[128]; 1067 int uins; 1068 //char m_1[]="unofficial! private use only"; 1069 //char m_2[]="mod by (c)Evilfox 315384924"; 1070 char unread_msg_info[64]; 1071 1072 int saver_on; 1073 1074 #ifdef NEWSGOLD 1075 extern char teast2[256]; 1076 #endif 1077 1078 #ifdef ELKA 1079 char last_msg_buffer[4048]; 1080 #endif 1081 1082 1083 ///////////////////////////////////////////////auto ping//////////////////// 1084 GBSTMR mytmr3; 1085 static void PingToServer2(void) 1086 { 1087 TPKT *p; 1088 p=malloc(sizeof(PKT)+sizeof(TTime)); 1089 GetDateTime(NULL,(TTime *)p->data); 1090 p->pkt.uin=0; 1091 p->pkt.type=T_ECHO; 1092 p->pkt.data_len=sizeof(TTime); 1093 SUBPROC((void *)SendAnswer,0,p); 1094 } 1095 1096 int Is_PING_On; 1097 \ In segment CODE, align 4, keep-with-next 1098 void Pinger2() 1099 { 1100 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable34 ;; S_ICONS \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C EC10A0E3 MOV R1,#+236 \ 00000010 4C1D81E3 ORR R1,R1,#0x1300 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 FC0090E5 LDR R0,[R0, #+252] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??Pinger2_0 1101 { 1102 PingToServer2(); \ 00000024 1000A0E3 MOV R0,#+16 \ 00000028 140000EF SWI +20 \ 0000002C 0060A0E1 MOV R6,R0 \ 00000030 081086E2 ADD R1,R6,#+8 \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 B40000EF SWI +180 \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 000086E5 STR R0,[R6, #+0] \ 00000044 1200A0E3 MOV R0,#+18 \ 00000048 B400C6E1 STRH R0,[R6, #+4] \ 0000004C 0800A0E3 MOV R0,#+8 \ 00000050 B600C6E1 STRH R0,[R6, #+6] \ 00000054 ........ LDR R0,??DataTable2 ;; SendAnswer \ 00000058 0620A0E1 MOV R2,R6 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 710100EF SWI +369 1103 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} 1104 } 1105 else 1106 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 1107 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 1108 1109 //////////////////////////////////////auto ping///////////////////////////// 1110 1111 extern volatile int total_smiles; 1112 extern volatile int total_xstatuses; 1113 extern volatile int xstatuses_load; 1114 extern volatile int pictures_max; //2026rev 1115 extern volatile int pictures_loaded; //2026rev 1116 1117 #ifdef ELKA 1118 int Is_SLI_On;//мигаем светодиодом 1119 #endif 1120 1121 int Is_SMARTCPU_On;//Вывод сообщений на гэ 1122 int Is_INC_On;//Popup message 1123 int Is_ILU_On;//Режим подсветки 1124 int Is_Double_Vibra_On;//Режим напоминания 1125 int total_unread; 1126 int total_unread2; 1127 1128 #ifdef ELKA \ In segment DATA_C, align 4, align-sorted 1129 const int SLI_TYPE=1; \ SLI_TYPE: \ 00000000 01000000 DC32 1 1130 #endif 1131 1132 char PINGO[256]; 1133 1134 #ifdef ELKA 1135 extern const unsigned int SLI_time; 1136 extern const unsigned int SLI_time2; 1137 #endif 1138 #define USE_MLMENU 1139 1140 #define TMR_SECOND 216 1141 1142 //IPC 1143 const char ipc_my_name[32]=IPC_NATICQ_NAME; 1144 const char ipc_xtask_name[]=IPC_XTASK_NAME; 1145 const char ipc_test_name[]="test"; 1146 IPC_REQ gipc; 1147 1148 1149 char elf_path[256]; 1150 int maincsm_id; 1151 int maingui_id; 1152 \ In segment CODE, align 4, keep-with-next 1153 void SMART_REDRAW(void) 1154 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 1155 int f; 1156 LockSched(); \ 00000004 460100EF SWI +326 1157 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 284 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 1158 UnlockSched(); \ 00000018 470100EF SWI +327 1159 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 1160 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 284 1161 1162 //По 10 секунд 1163 #define ACTIVE_TIME 360 1164 1165 //Максимальное количество сообщений в логе 1166 #define MAXLOGMSG (20) 1167 1168 // Строковые описания статусов 1169 1170 const char S_OFFLINE[]="Offline"; 1171 const char S_INVISIBLE[]="Invisible"; 1172 const char S_AWAY[]="Away"; 1173 const char S_NA[]="N/A"; 1174 const char S_OCCUPIED[]="Occupied"; 1175 const char S_DND[]="DND"; 1176 const char S_ONLINE[]="Online"; 1177 const char S_FFC[]="FFC"; 1178 1179 volatile int SENDMSGCOUNT; 1180 #ifdef kluchnik 1181 int IsActiveUp=1; 1182 #else 1183 int IsActiveUp=0; 1184 #endif 1185 int Is_Vibra_Enabled; 1186 int Is_Id3tag_Enabled; 1187 unsigned int Is_Sounds_Enabled; 1188 int Is_Show_Offline; 1189 int Is_Show_Groups; 1190 1191 int S_ICONS[TOTAL_ICONS+1]; 1192 1193 #define EOP -10 1194 int CurrentStatus; 1195 #ifdef NEWSGOLD 1196 extern int CurrentXStatus; 1197 #else 1198 int CurrentXStatus; 1199 #endif 1200 1201 WSHDR *ews; 1202 1203 1204 static const char * const icons_names[TOTAL_ICONS]= 1205 { 1206 "offline.png", 1207 "invisible.png", 1208 "away.png", 1209 "na.png", 1210 "occupied.png", 1211 "dnd.png", 1212 "depression.png", 1213 "evil.png", 1214 "home.png", 1215 "lunch.png", 1216 "work.png", 1217 "online.png", 1218 "ffc.png", 1219 "message.png", 1220 "unknown.png", 1221 "groupon.png", 1222 "groupoff.png", 1223 "null.png", 1224 "addcont.png", 1225 "head.png", 1226 "logo.png", 1227 "ping.png", 1228 "settings.png", 1229 "vis1.png", 1230 "vis2.png", 1231 "vis3.png", 1232 "vis4.png", 1233 "vis5.png" 1234 }; 1235 1236 1237 1238 ////=================================away_msg============== 1239 1240 #ifdef NEWSGOLD 1241 #pragma swi_number=0x0C5 1242 __swi __arm int IsIdleUiOnTop();//На сг нет этой функции 1243 #else 1244 int IsIdleUiOnTop(void) 1245 { 1246 void *icsm=FindCSMbyID(CSM_root()->idle_id); 1247 if (IsGuiOnTop(((int*)icsm)[DISPLACE_OF_IDLEGUI_ID/4 ])) 1248 return(1); 1249 else 1250 return(0); 1251 } 1252 #endif 1253 1254 int msg_away_timer=0;//Счетчик для автостатуса 1255 char away_msg[264];//Само сообщение для ответа 1256 char away_msg_time[64];//Время когда сработал таймер 1257 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 1258 char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 1259 char tim_zone[16]; \ In segment DATA_Z, align 4, align-sorted 1260 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 1261 int timemin; \ timemin: \ 00000000 DS8 4 1262 int away_m; 1263 int status_rem;//ДЛя сохранения текущего статуса 1264 int change_back_status;//вернуть предыдущий статус или нет 1265 GBSTMR away_tmr; 1266 1267 1268 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 1269 void FreeXText2(CLIST *t) 1270 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1271 if (t->xtext2) {mfree(t->xtext2);t->xtext2=NULL;} \ 00000008 8C0094E5 LDR R0,[R4, #+140] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 8C0084E5 STR R0,[R4, #+140] 1272 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1273 \ In segment CODE, align 4, keep-with-next 1274 void away_timer()//Таймер автостатуса 1275 { 1276 if(msg_away_timer==AUTO_ENGADE) \ away_timer: \ 00000000 ........ LDR R1,??DataTable3 ;; AUTO_ENGADE \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable34 ;; S_ICONS \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 2C0194E5 LDR R0,[R4, #+300] \ 00000014 001091E5 LDR R1,[R1, #+0] \ 00000018 010050E1 CMP R0,R1 \ 0000001C 2000001A BNE ??away_timer_0 1277 { 1278 TTime tt; 1279 GetDateTime(NULL,&tt); 1280 sprintf(away_msg_time_dace, "%2d:%2d", tt.hour, tt.min); \ 00000020 B4509FE5 LDR R5,??away_timer_1 ;; `?` \ 00000024 0D10A0E1 MOV R1,SP \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C B40000EF SWI +180 \ 00000030 0130DDE5 LDRB R3,[SP, #+1] \ 00000034 0020DDE5 LDRB R2,[SP, #+0] \ 00000038 0510A0E1 MOV R1,R5 \ 0000003C 4400A0E3 MOV R0,#+68 \ 00000040 580D80E3 ORR R0,R0,#0x1600 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 160000EF SWI +22 1281 sprintf(away_msg_time, "( отсутствую примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 0000004C 5400A0E3 MOV R0,#+84 \ 00000050 580D80E3 ORR R0,R0,#0x1600 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 01002DE9 PUSH {R0} \ 0000005C 0530DDE5 LDRB R3,[SP, #+5] \ 00000060 0420DDE5 LDRB R2,[SP, #+4] \ 00000064 081085E2 ADD R1,R5,#+8 \ 00000068 0400A0E3 MOV R0,#+4 \ 0000006C 580D80E3 ORR R0,R0,#0x1600 \ 00000070 040080E0 ADD R0,R0,R4 \ 00000074 160000EF SWI +22 1282 away_m=1; 1283 if(CurrentStatus!=2) \ 00000078 740194E5 LDR R0,[R4, #+372] \ 0000007C 0150A0E3 MOV R5,#+1 \ 00000080 345184E5 STR R5,[R4, #+308] \ 00000084 020050E3 CMP R0,#+2 \ 00000088 04D08DE2 ADD SP,SP,#+4 \ 0000008C 0400000A BEQ ??away_timer_0 1284 { 1285 status_rem=CurrentStatus; \ 00000090 380184E5 STR R0,[R4, #+312] 1286 CurrentStatus=2; \ 00000094 0200A0E3 MOV R0,#+2 \ 00000098 740184E5 STR R0,[R4, #+372] 1287 set_my_status(); \ 0000009C ........ BL set_my_status 1288 // SUBPROC((void*)WriteDefSettings); 1289 change_back_status=1; \ 000000A0 3C5184E5 STR R5,[R4, #+316] 1290 } 1291 } 1292 1293 if(Auto_Status) \ ??away_timer_0: \ 000000A4 ........ LDR R0,??DataTable5 ;; Auto_Status 1294 msg_away_timer++; 1295 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 000000A8 30209FE5 LDR R2,??away_timer_1+0x4 ;; away_timer \ 000000AC 000090E5 LDR R0,[R0, #+0] \ 000000B0 3810A0E3 MOV R1,#+56 \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 2C019415 LDRNE R0,[R4, #+300] \ 000000BC 401E81E3 ORR R1,R1,#0x400 \ 000000C0 01008012 ADDNE R0,R0,#+1 \ 000000C4 2C018415 STRNE R0,[R4, #+300] \ 000000C8 6400A0E3 MOV R0,#+100 \ 000000CC 580D80E3 ORR R0,R0,#0x1600 \ 000000D0 040080E0 ADD R0,R0,R4 \ 000000D4 4D0000EF SWI +77 1296 } \ 000000D8 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??away_timer_1: \ 000000DC ........ DC32 `?` \ 000000E0 ........ DC32 away_timer 1297 1298 \ In segment CODE, align 4, keep-with-next 1299 void init_time_zone() 1300 { 1301 switch(time_zone) \ init_time_zone: \ 00000000 50219FE5 LDR R2,??init_time_zone_1 ;; time_zone \ 00000004 50019FE5 LDR R0,??init_time_zone_1+0x4 ;; S_ICONS + 5716 \ 00000008 50119FE5 LDR R1,??init_time_zone_1+0x8 ;; `?` \ 0000000C 00402DE9 PUSH {LR} \ 00000010 002092E5 LDR R2,[R2, #+0] \ 00000014 200052E3 CMP R2,#+32 \ 00000018 0080BD88 POPHI {PC} \ 0000001C 013F8FE2 ADR R3,??init_time_zone_0 \ 00000020 0230D3E7 LDRB R3,[R3, R2] \ 00000024 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??init_time_zone_0: \ 00000028 0C080B0E DC8 +12,+8,+11,+14 \ 0000002C 10121416 DC8 +16,+18,+20,+22 \ 00000030 181A1C1E DC8 +24,+26,+28,+30 \ 00000034 20222426 DC8 +32,+34,+36,+38 \ 00000038 282A2C2E DC8 +40,+42,+44,+46 \ 0000003C 30323436 DC8 +48,+50,+52,+54 \ 00000040 383A3C3E DC8 +56,+58,+60,+62 \ 00000044 40424446 DC8 +64,+66,+68,+70 \ 00000048 48000000 DC8 +72,+0,+0,+0 1302 { 1303 case 0: 1304 sprintf(tim_zone, "GMT -12:00"); 1305 break; 1306 case 1: 1307 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_2: \ 0000004C 0C1081E2 ADD R1,R1,#+12 \ 00000050 160000EF SWI +22 \ 00000054 0080BDE8 POP {PC} 1308 break; 1309 case 2: 1310 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_3: \ 00000058 181081E2 ADD R1,R1,#+24 \ ??init_time_zone_4: \ 0000005C 160000EF SWI +22 \ 00000060 0080BDE8 POP {PC} 1311 break; 1312 case 3: 1313 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_5: \ 00000064 241081E2 ADD R1,R1,#+36 \ 00000068 FBFFFFEA B ??init_time_zone_4 1314 break; 1315 case 4: 1316 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_6: \ 0000006C 301081E2 ADD R1,R1,#+48 \ 00000070 F9FFFFEA B ??init_time_zone_4 1317 break; 1318 case 5: 1319 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_7: \ 00000074 3C1081E2 ADD R1,R1,#+60 \ 00000078 F7FFFFEA B ??init_time_zone_4 1320 break; 1321 case 6: 1322 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000007C 481081E2 ADD R1,R1,#+72 \ 00000080 F5FFFFEA B ??init_time_zone_4 1323 break; 1324 case 7: 1325 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000084 541081E2 ADD R1,R1,#+84 \ 00000088 F3FFFFEA B ??init_time_zone_4 1326 break; 1327 case 8: 1328 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000008C 601081E2 ADD R1,R1,#+96 \ 00000090 F1FFFFEA B ??init_time_zone_4 1329 break; 1330 case 9: 1331 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 00000094 6C1081E2 ADD R1,R1,#+108 \ 00000098 EFFFFFEA B ??init_time_zone_4 1332 break; 1333 case 10: 1334 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 0000009C 781081E2 ADD R1,R1,#+120 \ 000000A0 EDFFFFEA B ??init_time_zone_4 1335 break; 1336 case 11: 1337 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000A4 841081E2 ADD R1,R1,#+132 \ 000000A8 EBFFFFEA B ??init_time_zone_4 1338 break; 1339 case 12: 1340 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000AC 901081E2 ADD R1,R1,#+144 \ 000000B0 E9FFFFEA B ??init_time_zone_4 1341 break; 1342 case 13: 1343 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000B4 9C1081E2 ADD R1,R1,#+156 \ 000000B8 E7FFFFEA B ??init_time_zone_4 1344 break; 1345 case 14: 1346 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000BC A81081E2 ADD R1,R1,#+168 \ 000000C0 E5FFFFEA B ??init_time_zone_4 1347 break; 1348 case 15: 1349 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000C4 B41081E2 ADD R1,R1,#+180 \ 000000C8 E3FFFFEA B ??init_time_zone_4 1350 break; 1351 case 16: 1352 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000CC C01081E2 ADD R1,R1,#+192 \ 000000D0 E1FFFFEA B ??init_time_zone_4 1353 break; 1354 case 17: 1355 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000D4 CC1081E2 ADD R1,R1,#+204 \ 000000D8 DFFFFFEA B ??init_time_zone_4 1356 break; 1357 case 18: 1358 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC 5D1F81E2 ADD R1,R1,#+372 \ 000000E0 DDFFFFEA B ??init_time_zone_4 1359 break; 1360 case 19: 1361 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 D81081E2 ADD R1,R1,#+216 \ 000000E8 DBFFFFEA B ??init_time_zone_4 1362 break; 1363 case 20: 1364 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000EC E41081E2 ADD R1,R1,#+228 \ 000000F0 D9FFFFEA B ??init_time_zone_4 1365 break; 1366 case 21: 1367 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 000000F4 F01081E2 ADD R1,R1,#+240 \ 000000F8 D7FFFFEA B ??init_time_zone_4 1368 break; 1369 case 22: 1370 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 000000FC FC1081E2 ADD R1,R1,#+252 \ 00000100 D5FFFFEA B ??init_time_zone_4 1371 break; 1372 case 23: 1373 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000104 421F81E2 ADD R1,R1,#+264 \ 00000108 D3FFFFEA B ??init_time_zone_4 1374 break; 1375 case 24: 1376 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000010C 451F81E2 ADD R1,R1,#+276 \ 00000110 D1FFFFEA B ??init_time_zone_4 1377 break; 1378 case 25: 1379 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000114 481F81E2 ADD R1,R1,#+288 \ 00000118 CFFFFFEA B ??init_time_zone_4 1380 break; 1381 case 26: 1382 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000011C 4B1F81E2 ADD R1,R1,#+300 \ 00000120 CDFFFFEA B ??init_time_zone_4 1383 break; 1384 case 27: 1385 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000124 4E1F81E2 ADD R1,R1,#+312 \ 00000128 CBFFFFEA B ??init_time_zone_4 1386 break; 1387 case 28: 1388 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000012C 511F81E2 ADD R1,R1,#+324 \ 00000130 C9FFFFEA B ??init_time_zone_4 1389 break; 1390 case 29: 1391 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000134 541F81E2 ADD R1,R1,#+336 \ 00000138 C7FFFFEA B ??init_time_zone_4 1392 break; 1393 case 30: 1394 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 571F81E2 ADD R1,R1,#+348 \ 00000140 C5FFFFEA B ??init_time_zone_4 1395 break; 1396 case 31: 1397 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 5A1F81E2 ADD R1,R1,#+360 \ 00000148 C3FFFFEA B ??init_time_zone_4 1398 break; 1399 case 32: 1400 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 601F81E2 ADD R1,R1,#+384 \ 00000150 160000EF SWI +22 1401 break; 1402 } 1403 } \ ??init_time_zone_35: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 S_ICONS + 5716 \ 00000160 ........ DC32 `?` 1404 1405 //=================================away_msg=============== 1406 //////////////////////////////////////////tozhe dlja auto ping/////////////// 1407 \ In segment CODE, align 4, keep-with-next 1408 void DrawPing(void *canv) 1409 { 1410 #ifdef EVILFOX 1411 PrintField(date_X,date_Y, PINGO, align, fonto, space); 1412 #else 1413 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R1,??DataTable20 ;; spaco1 \ 00000004 ........ LDR R0,??DataTable34 ;; S_ICONS \ 00000008 00402DE9 PUSH {LR} \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 02002DE9 PUSH {R1} \ 00000014 ........ LDR R1,??DataTable21 ;; fonto \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 02002DE9 PUSH {R1} \ 00000020 E83090E5 LDR R3,[R0, #+232] \ 00000024 FC10A0E3 MOV R1,#+252 \ 00000028 4C1D81E3 ORR R1,R1,#0x1300 \ 0000002C 002081E0 ADD R2,R1,R0 \ 00000030 10009FE5 LDR R0,??DrawPing_0 ;; Ping_Y \ 00000034 001090E5 LDR R1,[R0, #+0] \ 00000038 0C009FE5 LDR R0,??DrawPing_0+0x4 ;; Ping_X \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 ........ _BLF PrintField,??PrintField??rA 1414 #endif 1415 } \ 00000044 0380BDE8 POP {R0,R1,PC} ;; return \ ??DrawPing_0: \ 00000048 ........ DC32 Ping_Y \ 0000004C ........ DC32 Ping_X 1416 1417 //////////////////////////////////////////tozhe dlja auto ping/////////////// 1418 1419 GBSTMR mytmr; 1420 GBSTMR mytmr2; 1421 volatile int vibra_count; 1422 #ifdef ELKA 1423 void SLI_Off(void); 1424 #endif 1425 void start_vibra2(void); 1426 1427 //////////////////////////reminder timer///////////////////////// 1428 \ In segment CODE, align 4, keep-with-next 1429 void Remind_Timer2() 1430 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 1431 if (total_unread) \ 00000004 ........ LDR R4,??DataTable34 ;; S_ICONS \ 00000008 B00194E5 LDR R0,[R4, #+432] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 1432 { 1433 vibra_count=Vibra_cc; \ 00000014 24009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 7C0184E5 STR R0,[R4, #+380] 1434 start_vibra2(); \ 00000020 ........ BL start_vibra2 1435 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable11 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 B30F41E2 SUB R0,R1,#+716 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 1436 } 1437 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000040 ........ DC32 Vibra_cc 1438 \ In segment CODE, align 4, keep-with-next 1439 void Reminder_timer() 1440 { 1441 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable11 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 5764 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 1442 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 S_ICONS + 5764 1443 //////////////////////////reminder timer///////////////////////// 1444 1445 //////////////////////////uptime////////////////////////// 1446 int Is_UPTIME_On; 1447 int xstatus_old; 1448 int minimum_xstatus; 1449 int maximum; 1450 1451 1452 \ In segment CODE, align 4, keep-with-next 1453 void xstatuse() 1454 { 1455 maximum++; \ xstatuse: \ 00000000 ........ LDR R0,??DataTable34 ;; S_ICONS \ 00000004 501190E5 LDR R1,[R0, #+336] 1456 if(maximum==60) \ 00000008 4C2190E5 LDR R2,[R0, #+332] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 1457 { 1458 // if(saver_on) reftes(); 1459 maximum=0; \ 00000014 0010A003 MOVEQ R1,#+0 1460 minimum_xstatus++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C 501180E5 STR R1,[R0, #+336] 1461 } 1462 if(minimum_xstatus==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??xstatuse_0 1463 { 1464 minimum_xstatus=0; 1465 xstatus_old++; \ 00000028 481190E5 LDR R1,[R0, #+328] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 481180E5 STR R1,[R0, #+328] \ ??xstatuse_0: \ 00000038 4C2180E5 STR R2,[R0, #+332] 1466 } 1467 } \ 0000003C 1EFF2FE1 BX LR ;; return 1468 1469 GBSTMR mytmr4; 1470 #ifdef NEWSGOLD 1471 GBSTMR tracktmr; 1472 int tracktimer; 1473 #endif 1474 1475 \ In segment CODE, align 4, keep-with-next 1476 void x_zstatus() 1477 { \ x_zstatus: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1478 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable34 ;; S_ICONS \ 00000008 84609FE5 LDR R6,??x_zstatus_0 ;; x_zstatus \ 0000000C 9400A0E3 MOV R0,#+148 \ 00000010 580D80E3 ORR R0,R0,#0x1600 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 8C0194E5 LDR R0,[R4, #+396] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0F00001A BNE ??x_zstatus_1 1479 { 1480 xstatuse(); \ 00000028 ........ BL xstatuse 1481 #ifdef NEWSGOLD 1482 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C 540194E5 LDR R0,[R4, #+340] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 070000BA BLT ??x_zstatus_2 1483 { 1484 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable14 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 A400A0E3 MOV R0,#+164 \ 00000048 580D80E3 ORR R0,R0,#0x1600 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 4D0000EF SWI +77 1485 tracktimer=0; \ 00000054 547184E5 STR R7,[R4, #+340] 1486 } 1487 tracktimer++; \ ??x_zstatus_2: \ 00000058 540194E5 LDR R0,[R4, #+340] \ 0000005C 010080E2 ADD R0,R0,#+1 \ 00000060 540184E5 STR R0,[R4, #+340] 1488 #endif 1489 GBS_StartTimerProc(&mytmr4, 216, x_zstatus); \ 00000064 050000EA B ??x_zstatus_3 1490 } 1491 else 1492 { 1493 if(!Pause_Time) \ ??x_zstatus_1: \ 00000068 28009FE5 LDR R0,??x_zstatus_0+0x4 ;; Pause_Time \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 000050E3 CMP R0,#+0 1494 { 1495 xstatus_old=0; \ 00000074 48718405 STREQ R7,[R4, #+328] 1496 minimum_xstatus=0; \ 00000078 4C718405 STREQ R7,[R4, #+332] 1497 maximum=0; \ 0000007C 50718405 STREQ R7,[R4, #+336] 1498 } 1499 GBS_StartTimerProc(&mytmr4, 216, x_zstatus); \ ??x_zstatus_3: \ 00000080 0620A0E1 MOV R2,R6 \ 00000084 D810A0E3 MOV R1,#+216 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 4D0000EF SWI +77 1500 } 1501 } \ 00000090 F080BDE8 POP {R4-R7,PC} ;; return \ ??x_zstatus_0: \ 00000094 ........ DC32 x_zstatus \ 00000098 ........ DC32 Pause_Time 1502 1503 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 1504 void DrawOnlineTime(void *canv) 1505 { 1506 1507 if(connect_state==3) \ DrawOnlineTime: \ 00000000 80109FE5 LDR R1,??DrawOnlineTime_0 ;; `?` \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable34 ;; S_ICONS \ 0000000C B400A0E3 MOV R0,#+180 \ 00000010 580D80E3 ORR R0,R0,#0x1600 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 8C0194E5 LDR R0,[R4, #+396] \ 0000001C 030050E3 CMP R0,#+3 \ 00000020 0700001A BNE ??DrawOnlineTime_1 1508 { 1509 sprintf(onlineTime,"Online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); \ 00000024 500194E5 LDR R0,[R4, #+336] \ 00000028 01002DE9 PUSH {R0} \ 0000002C 4C3194E5 LDR R3,[R4, #+332] \ 00000030 482194E5 LDR R2,[R4, #+328] \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 160000EF SWI +22 \ 0000003C 04D08DE2 ADD SP,SP,#+4 \ 00000040 020000EA B ??DrawOnlineTime_2 1510 } 1511 else 1512 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_1: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 160000EF SWI +22 1513 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_2: \ 00000050 ........ LDR R0,??DataTable20 ;; spaco1 \ 00000054 0520A0E1 MOV R2,R5 \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 01002DE9 PUSH {R0} \ 00000060 ........ LDR R0,??DataTable21 ;; fonto \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 01002DE9 PUSH {R0} \ 0000006C E83094E5 LDR R3,[R4, #+232] \ 00000070 14009FE5 LDR R0,??DrawOnlineTime_0+0x4 ;; onlineTime_y \ 00000074 001090E5 LDR R1,[R0, #+0] \ 00000078 10009FE5 LDR R0,??DrawOnlineTime_0+0x8 ;; onlineTime_x \ 0000007C 000090E5 LDR R0,[R0, #+0] \ 00000080 ........ _BLF PrintField,??PrintField??rA 1514 } \ 00000084 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_0: \ 00000088 ........ DC32 `?` \ 0000008C ........ DC32 onlineTime_y \ 00000090 ........ DC32 onlineTime_x 1515 1516 //-------------------------- Вывод времени на идле -----------------// 1517 1518 \ In segment CODE, align 4, keep-with-next 1519 void DrawAutoMSG(void *canv) 1520 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 1521 char awayTime[64]; 1522 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable34 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 340194E5 LDR R0,[R4, #+308] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 1700000A BEQ ??DrawAutoMSG_0 \ 00000018 ........ LDR R0,??DataTable19 ;; showAwayIdle \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 1300000A BEQ ??DrawAutoMSG_0 1523 { 1524 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000028 50109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 0000002C 4400A0E3 MOV R0,#+68 \ 00000030 580D80E3 ORR R0,R0,#0x1600 \ 00000034 042080E0 ADD R2,R0,R4 \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 160000EF SWI +22 1525 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000040 ........ LDR R0,??DataTable20 ;; spaco1 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable21 ;; fonto \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 01002DE9 PUSH {R0} \ 00000058 E83094E5 LDR R3,[R4, #+232] \ 0000005C 20009FE5 LDR R0,??DrawAutoMSG_1+0x4 ;; auto_y \ 00000060 08208DE2 ADD R2,SP,#+8 \ 00000064 001090E5 LDR R1,[R0, #+0] \ 00000068 18009FE5 LDR R0,??DrawAutoMSG_1+0x8 ;; auto_x \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 ........ _BLF PrintField,??PrintField??rA \ 00000074 08D08DE2 ADD SP,SP,#+8 1526 } 1527 } \ ??DrawAutoMSG_0: \ 00000078 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 0000007C 1080BDE8 POP {R4,PC} ;; return \ ??DrawAutoMSG_1: \ 00000080 ........ DC32 `?` \ 00000084 ........ DC32 auto_y \ 00000088 ........ DC32 auto_x 1528 1529 1530 //---------------------------- Input away msg ---------------------------// 1531 1532 //Вводим сообщение какое хотим,а не то что прописали в конфиге 1533 int input_awaymsg_id; 1534 1535 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 1536 void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 1537 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 1538 { \ input_awaymsg_onkey: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0070A0E1 MOV R7,R0 \ 0000000C 0140A0E1 MOV R4,R1 1539 WSHDR *ws=AllocWS(64); 1540 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON)//0xFFF \ 00000010 ........ LDR R6,??DataTable34 ;; S_ICONS \ 00000014 4000A0E3 MOV R0,#+64 \ 00000018 250100EF SWI +293 \ 0000001C F200D4E1 LDRSH R0,[R4, #+2] \ 00000020 0050A0E3 MOV R5,#+0 \ 00000024 FF10A0E3 MOV R1,#+255 \ 00000028 F01E81E3 ORR R1,R1,#0xF00 \ 0000002C 010050E1 CMP R0,R1 \ 00000030 0E005013 CMPNE R0,#+14 \ 00000034 3A00001A BNE ??input_awaymsg_onkey_0 1541 { 1542 EDITCONTROL ec; 1543 ExtractEditControl(data,2,&ec); \ 00000038 0D20A0E1 MOV R2,SP \ 0000003C 0210A0E3 MOV R1,#+2 \ 00000040 0700A0E1 MOV R0,R7 \ 00000044 690100EF SWI +361 1544 ws=ec.pWS; 1545 inp_away_msg2=malloc(ec.maxlen); \ 00000048 F801DDE1 LDRSH R0,[SP, #+24] \ 0000004C 28809DE5 LDR R8,[SP, #+40] 1546 int i=0; 1547 for(i=0;iwsbody[0];i++) \ 00000050 0090A0E3 MOV R9,#+0 \ 00000054 140000EF SWI +20 \ 00000058 300186E5 STR R0,[R6, #+304] \ 0000005C 000098E5 LDR R0,[R8, #+0] \ 00000060 B000D0E1 LDRH R0,[R0, #+0] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0600001A BNE ??input_awaymsg_onkey_1 \ 0000006C 090000EA B ??input_awaymsg_onkey_2 1548 *(inp_away_msg2+i)=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_3: \ 00000070 890080E0 ADD R0,R0,R9, LSL #+1 \ 00000074 B200D0E1 LDRH R0,[R0, #+2] \ 00000078 ........ _BLF char16to8,??char16to8??rA \ 0000007C 301196E5 LDR R1,[R6, #+304] \ 00000080 0100C9E7 STRB R0,[R9, +R1] \ 00000084 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_1: \ 00000088 000098E5 LDR R0,[R8, #+0] \ 0000008C B010D0E1 LDRH R1,[R0, #+0] \ 00000090 010059E1 CMP R9,R1 \ 00000094 F5FFFFBA BLT ??input_awaymsg_onkey_3 1549 *(inp_away_msg2+i++)=0; \ ??input_awaymsg_onkey_2: \ 00000098 300196E5 LDR R0,[R6, #+304] 1550 1551 #ifdef kluchnik 1552 char *s; 1553 ExtractEditControl(data,4,&ec); \ 0000009C 0D20A0E1 MOV R2,SP \ 000000A0 0050C9E7 STRB R5,[R9, +R0] \ 000000A4 0410A0E3 MOV R1,#+4 \ 000000A8 0700A0E1 MOV R0,R7 \ 000000AC 690100EF SWI +361 1554 ws=ec.pWS; 1555 s=malloc(ec.maxlen); \ 000000B0 F801DDE1 LDRSH R0,[SP, #+24] \ 000000B4 28709DE5 LDR R7,[SP, #+40] 1556 for(i=0;iwsbody[0];i++) \ 000000B8 0090A0E3 MOV R9,#+0 \ 000000BC 140000EF SWI +20 \ 000000C0 0080A0E1 MOV R8,R0 \ 000000C4 000097E5 LDR R0,[R7, #+0] \ 000000C8 B000D0E1 LDRH R0,[R0, #+0] \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 0500001A BNE ??input_awaymsg_onkey_4 \ 000000D4 080000EA B ??input_awaymsg_onkey_5 1557 *(s+i)=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_6: \ 000000D8 890080E0 ADD R0,R0,R9, LSL #+1 \ 000000DC B200D0E1 LDRH R0,[R0, #+2] \ 000000E0 ........ _BLF char16to8,??char16to8??rA \ 000000E4 0800C9E7 STRB R0,[R9, +R8] \ 000000E8 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_4: \ 000000EC 000097E5 LDR R0,[R7, #+0] \ 000000F0 B010D0E1 LDRH R1,[R0, #+0] \ 000000F4 010059E1 CMP R9,R1 \ 000000F8 F6FFFFBA BLT ??input_awaymsg_onkey_6 1558 *(s+i++)=0; \ ??input_awaymsg_onkey_5: \ 000000FC 0850C9E7 STRB R5,[R9, +R8] 1559 strcat(inp_away_msg2,s); \ 00000100 300196E5 LDR R0,[R6, #+304] \ 00000104 0810A0E1 MOV R1,R8 \ 00000108 170000EF SWI +23 1560 #endif 1561 1562 UpdateCLheader(); \ 0000010C ........ BL UpdateCLheader 1563 GeneralFunc_flag1(input_awaymsg_id,1); \ 00000110 580196E5 LDR R0,[R6, #+344] \ 00000114 0110A0E3 MOV R1,#+1 \ 00000118 3D0100EF SWI +317 1564 FreeWS(ws); \ 0000011C 0700A0E1 MOV R0,R7 \ 00000120 290100EF SWI +297 1565 // GeneralFuncF1(1); 1566 } 1567 1568 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 00000124 F200D4E1 LDRSH R0,[R4, #+2] \ 00000128 010050E3 CMP R0,#+1 \ 0000012C 0C005013 CMPNE R0,#+12 \ 00000130 0200001A BNE ??input_awaymsg_onkey_7 1569 { 1570 msg_away_timer=0; \ 00000134 2C5186E5 STR R5,[R6, #+300] 1571 away_m=0; \ 00000138 345186E5 STR R5,[R6, #+308] 1572 UpdateCLheader(); \ 0000013C ........ BL UpdateCLheader 1573 } 1574 return(0); \ ??input_awaymsg_onkey_7: \ 00000140 0000A0E3 MOV R0,#+0 \ 00000144 2CD08DE2 ADD SP,SP,#+44 \ 00000148 F083BDE8 POP {R4-R9,PC} ;; return 1575 } 1576 \ In segment CODE, align 4, keep-with-next 1577 void input_awaymsg_ghook(GUI *gui, int cmd) 1578 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 1579 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 1580 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 1581 { 1582 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} 1583 } 1584 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 1585 { 1586 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 1587 } 1588 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 1589 { 1590 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 1591 } 1592 if(cmd==0x03){} 1593 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 1594 \ In segment CODE, align 4, keep-with-next 1595 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 1596 1597 SOFTKEY_DESC input_awaymsg_sk[]= 1598 { 1599 {0x0018,0x0000,(int)"Лев"}, 1600 {0x0001,0x0000,(int)"Прав"}, 1601 {0x003D,0x0000,(int)LGP_DOIT_PIC} 1602 }; 1603 1604 SOFTKEYSTAB input_awaymsg_skt= 1605 { 1606 input_awaymsg_sk,0 1607 }; 1608 1609 const INPUTDIA_DESC input_awaymsg_desc= 1610 { 1611 1, 1612 input_awaymsg_onkey, 1613 input_awaymsg_ghook, 1614 (void *)input_awaymsg_locret, 1615 0, 1616 &input_awaymsg_skt, 1617 {0,NULL,NULL,NULL}, 1618 FONT_SMALL, 1619 100, 1620 101, 1621 0, 1622 0x00000000, 1623 0x40000000 1624 }; 1625 \ In segment CODE, align 4, keep-with-next 1626 void InputAwayMsg() 1627 { \ InputAwayMsg: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 1628 WSHDR *wss=AllocWS(256); 1629 void *ma=malloc_adr(); 1630 void *eq=AllocEQueue(ma, mfree_adr()); 1631 EDITCONTROL ec; 1632 PrepareEditControl(&ec); 1633 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 CC619FE5 LDR R6,??InputAwayMsg_0+0x4 ;; input_awaymsg_desc \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0040A0E1 MOV R4,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 0050A0E1 MOV R5,R0 \ 00000034 0D00A0E1 MOV R0,SP \ 00000038 640100EF SWI +356 \ 0000003C 648F8FE2 ADR R8,??InputAwayMsg_0 ;; "%t" \ 00000040 4C2086E2 ADD R2,R6,#+76 \ 00000044 0810A0E1 MOV R1,R8 \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 240100EF SWI +292 1634 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); \ 00000050 2000A0E3 MOV R0,#+32 \ 00000054 01002DE9 PUSH {R0} \ 00000058 0430A0E1 MOV R3,R4 \ 0000005C 0020A0E3 MOV R2,#+0 \ 00000060 0110A0E3 MOV R1,#+1 \ 00000064 04008DE2 ADD R0,SP,#+4 \ 00000068 650100EF SWI +357 1635 AddEditControlToEditQend(eq,&ec,ma); \ 0000006C 0720A0E1 MOV R2,R7 \ 00000070 04108DE2 ADD R1,SP,#+4 \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 660100EF SWI +358 1636 1637 PrepareEditControl(&ec); \ 0000007C 04008DE2 ADD R0,SP,#+4 \ 00000080 640100EF SWI +356 1638 CutWSTR(wss,0); \ 00000084 0010A0E3 MOV R1,#+0 \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 260100EF SWI +294 1639 ascii2ws(wss,awayMsg); \ 00000090 ........ LDR R1,??DataTable23 ;; awayMsg \ 00000094 0400A0E1 MOV R0,R4 \ 00000098 ........ _BLF ascii2ws,??ascii2ws??rA 1640 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 0000009C FF00A0E3 MOV R0,#+255 \ 000000A0 01002DE9 PUSH {R0} \ 000000A4 0430A0E1 MOV R3,R4 \ 000000A8 4020A0E3 MOV R2,#+64 \ 000000AC 0310A0E3 MOV R1,#+3 \ 000000B0 08008DE2 ADD R0,SP,#+8 \ 000000B4 650100EF SWI +357 1641 AddEditControlToEditQend(eq,&ec,ma); \ 000000B8 0720A0E1 MOV R2,R7 \ 000000BC 08108DE2 ADD R1,SP,#+8 \ 000000C0 0500A0E1 MOV R0,R5 \ 000000C4 660100EF SWI +358 1642 #ifdef kluchnik 1643 PrepareEditControl(&ec); \ 000000C8 08008DE2 ADD R0,SP,#+8 \ 000000CC 640100EF SWI +356 1644 wsprintf(wss,"%t","Сообщение 2:\n"); \ 000000D0 582086E2 ADD R2,R6,#+88 \ 000000D4 0810A0E1 MOV R1,R8 \ 000000D8 0400A0E1 MOV R0,R4 \ 000000DC 240100EF SWI +292 1645 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); \ 000000E0 2000A0E3 MOV R0,#+32 \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 0430A0E1 MOV R3,R4 \ 000000EC 0020A0E3 MOV R2,#+0 \ 000000F0 0110A0E3 MOV R1,#+1 \ 000000F4 0C008DE2 ADD R0,SP,#+12 \ 000000F8 650100EF SWI +357 1646 AddEditControlToEditQend(eq,&ec,ma); \ 000000FC 0720A0E1 MOV R2,R7 \ 00000100 0C108DE2 ADD R1,SP,#+12 \ 00000104 0500A0E1 MOV R0,R5 \ 00000108 660100EF SWI +358 1647 1648 ascii2ws(wss,"когда смогу отвечу:)"); \ 0000010C 681086E2 ADD R1,R6,#+104 \ 00000110 0400A0E1 MOV R0,R4 \ 00000114 ........ _BLF ascii2ws,??ascii2ws??rA 1649 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 00000118 FF00A0E3 MOV R0,#+255 \ 0000011C 01002DE9 PUSH {R0} \ 00000120 0430A0E1 MOV R3,R4 \ 00000124 4020A0E3 MOV R2,#+64 \ 00000128 0310A0E3 MOV R1,#+3 \ 0000012C 10008DE2 ADD R0,SP,#+16 \ 00000130 650100EF SWI +357 1650 AddEditControlToEditQend(eq,&ec,ma); \ 00000134 0720A0E1 MOV R2,R7 \ 00000138 10108DE2 ADD R1,SP,#+16 \ 0000013C 0500A0E1 MOV R0,R5 \ 00000140 660100EF SWI +358 1651 #endif 1652 patch_header(&input_awaymsg_hdr); \ 00000144 0070A0E3 MOV R7,#+0 \ 00000148 B873C6E1 STRH R7,[R6, #+56] \ 0000014C 1800A0E3 MOV R0,#+24 \ 00000150 BA03C6E1 STRH R0,[R6, #+58] \ 00000154 888100EF SWI +33160 \ 00000158 010040E2 SUB R0,R0,#+1 \ 0000015C BC03C6E1 STRH R0,[R6, #+60] \ 00000160 8A8100EF SWI +33162 \ 00000164 170080E2 ADD R0,R0,#+23 \ 00000168 BE03C6E1 STRH R0,[R6, #+62] 1653 patch_input(&input_awaymsg_desc); \ 0000016C B871C6E1 STRH R7,[R6, #+24] \ 00000170 8A8100EF SWI +33162 \ 00000174 190080E2 ADD R0,R0,#+25 \ 00000178 BA01C6E1 STRH R0,[R6, #+26] \ 0000017C 888100EF SWI +33160 \ 00000180 010040E2 SUB R0,R0,#+1 \ 00000184 BC01C6E1 STRH R0,[R6, #+28] \ 00000188 898100EF SWI +33161 \ 0000018C 0070A0E1 MOV R7,R0 \ 00000190 8B8100EF SWI +33163 \ 00000194 000047E0 SUB R0,R7,R0 \ 00000198 010040E2 SUB R0,R0,#+1 \ 0000019C BE01C6E1 STRH R0,[R6, #+30] 1654 1655 FreeWS(wss); \ 000001A0 0400A0E1 MOV R0,R4 \ 000001A4 290100EF SWI +297 1656 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 000001A8 0000A0E3 MOV R0,#+0 \ 000001AC 01002DE9 PUSH {R0} \ 000001B0 0130A0E3 MOV R3,#+1 \ 000001B4 0520A0E1 MOV R2,R5 \ 000001B8 381086E2 ADD R1,R6,#+56 \ 000001BC 0600A0E1 MOV R0,R6 \ 000001C0 670100EF SWI +359 \ 000001C4 10109FE5 LDR R1,??InputAwayMsg_0+0x8 ;; S_ICONS + 344 \ 000001C8 000081E5 STR R0,[R1, #+0] 1657 } \ 000001CC 40D08DE2 ADD SP,SP,#+64 \ 000001D0 F081BDE8 POP {R4-R8,PC} ;; return \ ??InputAwayMsg_0: \ 000001D4 25740000 DC8 "%t",+0 \ 000001D8 ........ DC32 input_awaymsg_desc \ 000001DC ........ DC32 S_ICONS + 344 1658 1659 1660 //////////////////////////uptime////////////////////////// 1661 #ifdef ELKA \ In segment CODE, align 4, keep-with-next 1662 void SLI_On() 1663 { \ SLI_On: \ 00000000 10402DE9 PUSH {R4,LR} 1664 if(Is_SLI_On) \ 00000004 ........ LDR R4,??DataTable34 ;; S_ICONS \ 00000008 000194E5 LDR R0,[R4, #+256] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100000A BEQ ??SLI_On_0 1665 SLI_SetState(1); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 360000EF SWI +54 1666 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_Off); \ ??SLI_On_0: \ 0000001C 14209FE5 LDR R2,??SLI_On_1 ;; SLI_Off \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 7400A0E3 MOV R0,#+116 \ 00000028 580D80E3 ORR R0,R0,#0x1600 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 1667 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SLI_On_1: \ 00000038 ........ DC32 SLI_Off 1668 \ In segment CODE, align 4, keep-with-next 1669 void SLI_Off() 1670 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 1671 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 1672 if(total_unread) \ 0000000C ........ LDR R0,??DataTable34 ;; S_ICONS \ 00000010 B01190E5 LDR R1,[R0, #+432] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0600000A BEQ ??SLI_Off_0 1673 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 \ 0000001C 20209FE5 LDR R2,??SLI_Off_1 ;; SLI_On \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 7430A0E3 MOV R3,#+116 \ 00000028 583D83E3 ORR R3,R3,#0x1600 \ 0000002C 000083E0 ADD R0,R3,R0 \ 00000030 4D0000EF SWI +77 \ 00000034 0080BDE8 POP {PC} 1674 else 1675 SLI_SetState(0); \ ??SLI_Off_0: \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 360000EF SWI +54 1676 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??SLI_Off_1: \ 00000044 ........ DC32 SLI_On 1677 \ In segment CODE, align 4, keep-with-next 1678 void SLI_check() 1679 { 1680 if (total_unread) \ SLI_check: \ 00000000 14009FE5 LDR R0,??SLI_check_0 ;; S_ICONS + 432 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0080BD08 POPEQ {PC} 1681 SLI_On(); \ 00000014 ........ BL SLI_On 1682 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_check_0: \ 0000001C ........ DC32 S_ICONS + 432 1683 \ In segment CODE, align 4, keep-with-next 1684 void SLI_Timer() 1685 { 1686 GBS_StartTimerProc(&mytmr, 262, SLI_check); //262*SLI_time \ SLI_Timer: \ 00000000 14209FE5 LDR R2,??SLI_Timer_0 ;; SLI_check \ 00000004 14009FE5 LDR R0,??SLI_Timer_0+0x4 ;; S_ICONS + 5748 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0610A0E3 MOV R1,#+6 \ 00000010 401F81E3 ORR R1,R1,#0x100 \ 00000014 4D0000EF SWI +77 1687 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_Timer_0: \ 0000001C ........ DC32 SLI_check \ 00000020 ........ DC32 S_ICONS + 5748 1688 #endif 1689 \ In segment CODE, align 4, keep-with-next 1690 void setup_ICONS(void) 1691 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1692 int i=0; \ 00000004 ........ LDR R5,??DataTable27 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 1693 do 1694 { 1695 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 0000000C 040195E7 LDR R0,[R5, +R4, LSL #+2] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0500001A BNE ??setup_ICONS_1 \ 00000018 20009FE5 LDR R0,??setup_ICONS_2 ;; icons_names \ 0000001C 5C10A0E3 MOV R1,#+92 \ 00000020 042190E7 LDR R2,[R0, +R4, LSL #+2] \ 00000024 18009FE5 LDR R0,??setup_ICONS_2+0x4 ;; ICON_PATH \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 040185E7 STR R0,[R5, +R4, LSL #+2] 1696 i++; \ ??setup_ICONS_1: \ 00000030 014084E2 ADD R4,R4,#+1 1697 } 1698 while(i>2,stop_vibra); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 1910 else 1911 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 1912 } 1913 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ DC32 stop_vibra 1914 \ In segment CODE, align 4, keep-with-next 1915 void stop_vibra(void) 1916 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1917 1918 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1919 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable57 ;; S_ICONS \ 00000010 7C1190E5 LDR R1,[R0, #+380] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 7C1180E5 STR R1,[R0, #+380] \ 0000001C 0080BD08 POPEQ {PC} 1920 { 1921 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 4410A0E3 MOV R1,#+68 \ 00000028 601D81E3 ORR R1,R1,#0x1800 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable44 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 1922 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 1923 else 1924 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 1925 } 1926 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ DC32 start_vibra 1927 \ In segment CODE, align 4, keep-with-next 1928 void start_vibra2(void) 1929 { 1930 1931 void stop_vibra2(void); 1932 1933 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable41 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1934 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable44 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; S_ICONS + 6212 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 1935 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1936 else 1937 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 1938 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 S_ICONS + 6212 \ 00000038 ........ DC32 stop_vibra2 1939 \ In segment CODE, align 4, keep-with-next 1940 void stop_vibra2(void) 1941 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1942 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1943 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable57 ;; S_ICONS \ 00000010 7C1190E5 LDR R1,[R0, #+380] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 7C1180E5 STR R1,[R0, #+380] \ 0000001C 0080BD08 POPEQ {PC} 1944 { 1945 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 4410A0E3 MOV R1,#+68 \ 00000028 601D81E3 ORR R1,R1,#0x1800 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable44 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra2_1 1946 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1947 else 1948 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 0000004C 4D0000EF SWI +77 1949 } 1950 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ DC32 start_vibra2 1951 \ In segment CODE, align 4, keep-with-next 1952 void ChangeVibra(void) 1953 { 1954 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable57 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 641190E5 LDR R1,[R0, #+356] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeTemplates \ 00000014 ........ LDR R1,??DataTable48 ;; TEMPLATES_PATH \ 00000018 2C008DE2 ADD R0,SP,#+44 \ 0000001C 1A0000EF SWI +26 \ 00000020 2C008DE2 ADD R0,SP,#+44 \ 00000024 1B0000EF SWI +27 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 2C008DE2 ADD R0,SP,#+44 \ 00000030 005087E0 ADD R5,R7,R0 \ 00000034 0420A0E1 MOV R2,R4 \ 00000038 0610A0E1 MOV R1,R6 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 160000EF SWI +22 1997 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; \ 00000044 0040E0E3 MVN R4,#+0 \ 00000048 0D20A0E1 MOV R2,SP \ 0000004C 04108DE2 ADD R1,SP,#+4 \ 00000050 2C008DE2 ADD R0,SP,#+44 \ 00000054 840000EF SWI +132 \ 00000058 040050E1 CMP R0,R4 \ 0000005C 0A00000A BEQ ??LoadTemplates_1 1998 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1999 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) \ 0000006C 0D30A0E1 MOV R3,SP \ 00000070 8020A0E3 MOV R2,#+128 \ 00000074 801CA0E3 MOV R1,#+32768 \ 00000078 2C008DE2 ADD R0,SP,#+44 \ 0000007C 0A0000EF SWI +10 \ 00000080 0080A0E1 MOV R8,R0 \ 00000084 040058E1 CMP R8,R4 \ 00000088 1400001A BNE ??LoadTemplates_2 2000 { 2001 L1: 2002 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 2003 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 00000098 0D20A0E1 MOV R2,SP \ 0000009C 04108DE2 ADD R1,SP,#+4 \ 000000A0 2C008DE2 ADD R0,SP,#+44 \ 000000A4 840000EF SWI +132 \ 000000A8 040050E1 CMP R0,R4 \ 000000AC 0200001A BNE ??LoadTemplates_3 \ ??LoadTemplates_4: \ 000000B0 0000A0E3 MOV R0,#+0 \ ??LoadTemplates_5: \ 000000B4 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000B8 F087BDE8 POP {R4-R10,PC} ;; return 2004 if ((fsize=stat.size)<=0) return 0; \ ??LoadTemplates_3: \ 000000BC 08709DE5 LDR R7,[SP, #+8] \ 000000C0 010057E3 CMP R7,#+1 \ 000000C4 F9FFFFBA BLT ??LoadTemplates_4 2005 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 000000C8 0D30A0E1 MOV R3,SP \ 000000CC 8020A0E3 MOV R2,#+128 \ 000000D0 801CA0E3 MOV R1,#+32768 \ 000000D4 2C008DE2 ADD R0,SP,#+44 \ 000000D8 0A0000EF SWI +10 \ 000000DC 0080A0E1 MOV R8,R0 2006 } 2007 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 2008 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable57 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 800184E5 STR R0,[R4, #+384] \ 000000F8 0060A0E1 MOV R6,R0 2009 p[fread(f,p,fsize,&ul)]=0; \ 000000FC 0050A0E3 MOV R5,#+0 \ 00000100 0D30A0E1 MOV R3,SP \ 00000104 0720A0E1 MOV R2,R7 \ 00000108 0610A0E1 MOV R1,R6 \ 0000010C 0800A0E1 MOV R0,R8 \ 00000110 0B0000EF SWI +11 \ 00000114 0650C0E7 STRB R5,[R0, +R6] 2010 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 2011 i=0; \ 00000124 0070A0E3 MOV R7,#+0 2012 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 2013 for(;;) 2014 { 2015 c=*p; 2016 if (c<32) 2017 { 2018 if (pp&&(pp!=p)) 2019 { 2020 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 2021 templates_lines[i++]=pp; 2022 } 2023 pp=NULL; 2024 if (!c) break; 2025 *p=0; 2026 } 2027 else 2028 { 2029 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 2030 } 2031 p++; \ ??LoadTemplates_8: \ 00000138 016086E2 ADD R6,R6,#+1 \ ??LoadTemplates_6: \ 0000013C 0090D6E5 LDRB R9,[R6, #+0] \ 00000140 200059E3 CMP R9,#+32 \ 00000144 F9FFFFAA BGE ??LoadTemplates_7 \ 00000148 000058E3 CMP R8,#+0 \ 0000014C 06005811 CMPNE R8,R6 \ 00000150 0600000A BEQ ??LoadTemplates_9 \ 00000154 840194E5 LDR R0,[R4, #+388] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 840184E5 STR R0,[R4, #+388] \ 00000168 078180E7 STR R8,[R0, +R7, LSL #+2] \ 0000016C 0A70A0E1 MOV R7,R10 \ ??LoadTemplates_9: \ 00000170 0080A0E3 MOV R8,#+0 \ 00000174 000059E3 CMP R9,#+0 2032 } 2033 return i; \ 00000178 0700A001 MOVEQ R0,R7 \ 0000017C CCFFFF0A BEQ ??LoadTemplates_5 \ 00000180 0050C6E5 STRB R5,[R6, #+0] \ 00000184 EBFFFFEA B ??LoadTemplates_8 \ ??LoadTemplates_0: \ 00000188 ........ DC32 `?` 2034 } 2035 2036 2037 //=================================================================== 2038 2039 typedef struct 2040 { 2041 CSM_RAM csm; 2042 int gui_id; 2043 }MAIN_CSM; 2044 2045 typedef struct 2046 { 2047 GUI gui; 2048 WSHDR *ws1; 2049 WSHDR *ws2; 2050 int i1; 2051 }MAIN_GUI; 2052 2053 2054 2055 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 2056 \ In segment DATA_Z, align 4, align-sorted 2057 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 2058 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 2059 2060 int connect_state=0; 2061 2062 int sock=-1; 2063 2064 volatile unsigned long TOTALRECEIVED; 2065 volatile unsigned long TOTALSENDED; 2066 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 2067 volatile unsigned long ALLTOTALSENDED; 2068 2069 volatile int sendq_l=0; //Длинна очереди для send 2070 volatile void *sendq_p=NULL; //указатель очереди 2071 2072 volatile int is_gprs_online=1; 2073 2074 GBSTMR reconnect_tmr; 2075 2076 extern void kill_data(void *p,void (*func_p)(void *)); 2077 \ In segment CODE, align 4, keep-with-next 2078 void ElfKiller(void) 2079 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 2080 // if(SLI_TYPE) 2081 // GBS_StopTimer(&mytmr); 2082 // if(Is_Double_Vibra_On) 2083 // GBS_StopTimer(&mytmr2); 2084 // GBS_StopTimer(&mytmr3); 2085 // GBS_StopTimer(&mytmr4); 2086 // DoChangeWall2(); 2087 PrintLibFree(); \ 00000004 ........ _BLF PrintLibFree,??PrintLibFree??rA 2088 extern void *ELF_BEGIN; 2089 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 2090 } 2091 2092 int total_unread; //2058 - tam tak /windes 2093 2094 volatile CLIST *cltop; 2095 2096 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 2097 2098 volatile int contactlist_menu_id; 2099 2100 GBSTMR tmr_active; 2101 2102 volatile int edchat_id; 2103 2104 //Применяется для добавления сообщений 2105 //CLIST *edcontact; 2106 //void *edgui_data; 2107 2108 static int prev_clmenu_itemcount; 2109 2110 char clm_hdr_text[48]; 2111 static const char def_clm_hdr_text[] = LG_CLTITLE; 2112 static const char key_clm_hdr_text[] = LG_CLT9INP; 2113 2114 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 2115 static const int menusoftkeys[] = {0,1,2}; 2116 static const SOFTKEY_DESC menu_sk[] = 2117 { 2118 {0x0018, 0x0000, (int)LG_SELECT}, 2119 {0x0001, 0x0000, (int)LG_CLOSE}, 2120 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2121 }; 2122 2123 char clmenu_sk_r[16]; 2124 static const char def_clmenu_sk_r[] = LG_CLOSE; 2125 static const char key_clmenu_sk_r[] = LG_CLEAR; 2126 2127 static const SOFTKEY_DESC clmenu_sk[]= 2128 { 2129 {0x0018, 0x0000, (int)LG_OPTIONS}, 2130 {0x0001, 0x0000, (int)clmenu_sk_r}, 2131 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2132 }; 2133 2134 const SOFTKEYSTAB menu_skt = 2135 { 2136 menu_sk, 0 2137 }; 2138 2139 static const SOFTKEYSTAB clmenu_skt = 2140 { 2141 clmenu_sk, 0 2142 }; 2143 2144 void contactlist_menu_ghook(void *data, int cmd); 2145 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 2146 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 2147 2148 #ifdef USE_MLMENU 2149 static const ML_MENU_DESC contactlist_menu= 2150 { 2151 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 2152 menusoftkeys, 2153 &clmenu_skt, 2154 0x11, //+0x400 2155 contactlist_menu_iconhndl, 2156 NULL, //Items 2157 NULL, //Procs 2158 0, //n 2159 1 //Добавочных строк 2160 }; 2161 #else 2162 static const MENU_DESC contactlist_menu= 2163 { 2164 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 2165 menusoftkeys, 2166 &clmenu_skt, 2167 0x11, //+0x400 2168 contactlist_menu_iconhndl, 2169 NULL, //Items 2170 NULL, //Procs 2171 0 //n 2172 }; 2173 #endif 2174 2175 //GBSTMR tmr_ping; 2176 int tenseconds_to_ping; 2177 \ In segment CODE, align 4, keep-with-next 2178 LOGQ *NewLOGQ(const char *s) 2179 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2180 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 2181 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 2182 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 2183 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 2184 } 2185 \ In segment CODE, align 4, keep-with-next 2186 LOGQ *LastLOGQ(LOGQ **pp) 2187 { 2188 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 2189 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 2190 { 2191 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 2192 } 2193 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 2194 } 2195 2196 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 2197 void FreeLOGQ(LOGQ **pp) 2198 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 2199 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 2200 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 2201 while(p) 2202 { 2203 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 2204 mfree(p); \ 00000020 150000EF SWI +21 2205 p=np; \ 00000024 0400B0E1 MOVS R0,R4 2206 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 2207 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 2208 2209 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 2210 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 2211 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 2212 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 2213 LOGQ *qp; 2214 while(qp=q->next) 2215 { 2216 if (qp==p) 2217 { 2218 q->next=p->next; 2219 break; 2220 } 2221 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] 2222 } 2223 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 2224 } \ 00000030 0080BDE8 POP {PC} ;; return 2225 2226 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 2227 int AddLOGQ(LOGQ **queue, LOGQ *p) 2228 { 2229 LOGQ *q=(LOGQ *)queue; 2230 LOGQ *qp; 2231 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 2232 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 2233 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 2234 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 2235 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 2236 } 2237 \ In segment CODE, align 4, keep-with-next 2238 char *GetLastXTextLOGQ(CLIST *t) 2239 { 2240 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 741090E5 LDR R1,[R0, #+116] 2241 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 2242 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 2243 while(p->next) 2244 { 2245 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 2246 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 2247 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 2248 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 2249 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 2250 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 2251 return s; \ 00000044 1EFF2FE1 BX LR ;; return 2252 } 2253 \ In segment CODE, align 4, keep-with-next 2254 int GetIconIndex(CLIST *t) 2255 { 2256 unsigned short s; 2257 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 2258 { 2259 s=t->state; 2260 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 2261 if (t->isunread) \ 0000001C 640090E5 LDR R0,[R0, #+100] \ 00000020 000050E3 CMP R0,#+0 2262 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 2263 else 2264 { 2265 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 2266 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 2267 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 2268 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 2269 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 2270 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 2271 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 2272 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 2273 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 2274 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 2275 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 2276 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 2277 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 2278 } 2279 } 2280 else 2281 { 2282 return(IS_UNKNOWN); 2283 } 2284 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 2285 } 2286 \ In segment CODE, align 4, keep-with-next 2287 LOGQ *FindContactLOGQByAck(TPKT *p) 2288 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2289 CLIST *t; 2290 LockSched(); \ 00000008 460100EF SWI +326 2291 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 2292 UnlockSched(); \ 00000018 470100EF SWI +327 2293 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 2294 LOGQ *q; 2295 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 2296 LockSched(); \ 0000002C 460100EF SWI +326 2297 q=t->log; \ 00000030 745095E5 LDR R5,[R5, #+116] \ 00000034 000000EA B ??FindContactLOGQByAck_0 2298 while(q) 2299 { 2300 if (q->ID==id) break; 2301 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 2302 } 2303 UnlockSched(); \ 0000004C 470100EF SWI +327 2304 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 2305 } 2306 2307 GBSTMR statusTmr; 2308 2309 char ContactT9Key[32]; 2310 int kopa_online; 2311 int kopa_kontaktu; 2312 char status[64]; \ In segment CODE, align 4, keep-with-next 2313 void DrawStatusBar() 2314 { \ DrawStatusBar: \ 00000000 30402DE9 PUSH {R4,R5,LR} 2315 // PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 2316 // if(TIME_OR_MSG==4) 2317 if(contactlist_menu_id) \ 00000004 ........ LDR R4,??DataTable57 ;; S_ICONS \ 00000008 BC0194E5 LDR R0,[R4, #+444] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 2200000A BEQ ??DrawStatusBar_0 2318 { 2319 DrawRectangle(40,YDISP,scr_w-1,YDISP+30,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 2E0100EF SWI +302 \ 0000001C 0050A0E1 MOV R5,R0 \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 2E0100EF SWI +302 \ 00000028 20002DE9 PUSH {R5} \ 0000002C 01002DE9 PUSH {R0} \ 00000030 3630A0E3 MOV R3,#+54 \ 00000034 1810A0E3 MOV R1,#+24 \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 01002DE9 PUSH {R0} \ 00000040 74009FE5 LDR R0,??DrawStatusBar_1 ;; scr_w \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 012040E2 SUB R2,R0,#+1 \ 0000004C 2800A0E3 MOV R0,#+40 \ 00000050 B40100EF SWI +436 2320 PrintText(33,YDISP+2,status,0,1,1,2,0,0,ScreenW()-20); \ 00000054 888100EF SWI +33160 \ 00000058 140040E2 SUB R0,R0,#+20 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 0030A0E3 MOV R3,#+0 \ 00000064 1A10A0E3 MOV R1,#+26 \ 00000068 0000A0E3 MOV R0,#+0 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 01002DE9 PUSH {R0} \ 00000074 0200A0E3 MOV R0,#+2 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 01002DE9 PUSH {R0} \ 00000084 01002DE9 PUSH {R0} \ 00000088 C400A0E3 MOV R0,#+196 \ 0000008C 600D80E3 ORR R0,R0,#0x1800 \ 00000090 042080E0 ADD R2,R0,R4 \ 00000094 2100A0E3 MOV R0,#+33 \ 00000098 ........ _BLF PrintText,??PrintText??rA \ 0000009C 24D08DE2 ADD SP,SP,#+36 2321 } 2322 //PrintField( int x, int y, char *str, int align, int font, int space); 2323 // PrintField( 40, YDISP, status,0, t, int space); 2324 GBS_StartTimerProc(&statusTmr,120,DrawStatusBar); \ ??DrawStatusBar_0: \ 000000A0 18209FE5 LDR R2,??DrawStatusBar_1+0x4 ;; DrawStatusBar \ 000000A4 7810A0E3 MOV R1,#+120 \ 000000A8 B400A0E3 MOV R0,#+180 \ 000000AC 600D80E3 ORR R0,R0,#0x1800 \ 000000B0 040080E0 ADD R0,R0,R4 \ 000000B4 4D0000EF SWI +77 2325 } \ 000000B8 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawStatusBar_1: \ 000000BC ........ DC32 scr_w \ 000000C0 ........ DC32 DrawStatusBar 2326 \ In segment CODE, align 4, keep-with-next 2327 void UpdateCLheader(void) 2328 { \ UpdateCLheader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2329 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R5,??DataTable57 ;; S_ICONS \ 00000008 6C429FE5 LDR R4,??UpdateCLheader_1+0x14 ;; key_clmenu_sk_r \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 A410A0E3 MOV R1,#+164 \ 00000014 601D81E3 ORR R1,R1,#0x1800 \ 00000018 051081E0 ADD R1,R1,R5 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 7400A0E3 MOV R0,#+116 \ 00000024 600D80E3 ORR R0,R0,#0x1800 \ 00000028 05B080E0 ADD R11,R0,R5 \ 0000002C CF6FA0E3 MOV R6,#+828 \ 00000030 050086E0 ADD R0,R6,R5 \ 00000034 1B0000EF SWI +27 \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0900000A BEQ ??UpdateCLheader_2 2330 { 2331 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000040 541084E2 ADD R1,R4,#+84 \ 00000044 0B00A0E1 MOV R0,R11 \ 00000048 1A0000EF SWI +26 2332 strcat(clm_hdr_text,ContactT9Key); \ 0000004C 051086E0 ADD R1,R6,R5 \ 00000050 0B00A0E1 MOV R0,R11 \ 00000054 170000EF SWI +23 2333 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000058 00009DE5 LDR R0,[SP, #+0] \ 0000005C 0410A0E1 MOV R1,R4 \ 00000060 1A0000EF SWI +26 \ 00000064 F78FBDE8 POP {R0-R2,R4-R11,PC} 2334 } 2335 else 2336 { 2337 switch(TIME_OR_MSG) \ ??UpdateCLheader_2: \ 00000068 ........ LDR R0,??DataTable52 ;; TIME_OR_MSG \ 0000006C B06195E5 LDR R6,[R5, #+432] \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 147195E5 LDR R7,[R5, #+276] \ 00000078 7A8F8FE2 ADR R8,??UpdateCLheader_1 ;; "[V]" \ 0000007C 7A9F8FE2 ADR R9,??UpdateCLheader_1+0x4 ;; "[I]" \ 00000080 7AAF8FE2 ADR R10,??UpdateCLheader_1+0x8 ;; "[A]" \ 00000084 040050E3 CMP R0,#+4 \ 00000088 7200008A BHI ??UpdateCLheader_3 \ 0000008C 011F8FE2 ADR R1,??UpdateCLheader_0 \ 00000090 0010D1E7 LDRB R1,[R1, R0] \ 00000094 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??UpdateCLheader_0: \ 00000098 010D1218 DC8 +1,+13,+18,+24 \ 0000009C 40000000 DC8 +64,+0,+0,+0 2338 { 2339 case 0: 2340 { 2341 TTime the; 2342 GetDateTime(NULL,&the); \ ??UpdateCLheader_4: \ 000000A0 04108DE2 ADD R1,SP,#+4 \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 B40000EF SWI +180 2343 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ 000000AC 0500DDE5 LDRB R0,[SP, #+5] \ 000000B0 482084E2 ADD R2,R4,#+72 \ 000000B4 041084E2 ADD R1,R4,#+4 \ 000000B8 01002DE9 PUSH {R0} \ 000000BC 0830DDE5 LDRB R3,[SP, #+8] \ ??UpdateCLheader_5: \ 000000C0 0B00A0E1 MOV R0,R11 \ 000000C4 160000EF SWI +22 \ 000000C8 04D08DE2 ADD SP,SP,#+4 \ 000000CC 610000EA B ??UpdateCLheader_3 2344 } 2345 break; 2346 case 1: 2347 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_6: \ 000000D0 80002DE9 PUSH {R7} \ 000000D4 0630A0E1 MOV R3,R6 \ 000000D8 482084E2 ADD R2,R4,#+72 \ 000000DC 141084E2 ADD R1,R4,#+20 \ 000000E0 F6FFFFEA B ??UpdateCLheader_5 2348 break; 2349 case 2: 2350 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); \ ??UpdateCLheader_7: \ 000000E4 CC0195E5 LDR R0,[R5, #+460] \ 000000E8 482084E2 ADD R2,R4,#+72 \ 000000EC 01002DE9 PUSH {R0} \ 000000F0 D03195E5 LDR R3,[R5, #+464] \ 000000F4 141084E2 ADD R1,R4,#+20 \ 000000F8 F0FFFFEA B ??UpdateCLheader_5 2351 break; 2352 case 3: 2353 { 2354 void Get_Online_total(); 2355 Get_Online_total(); \ ??UpdateCLheader_8: \ 000000FC ........ BL Get_Online_total 2356 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] ",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000100 80002DE9 PUSH {R7} \ 00000104 40002DE9 PUSH {R6} \ 00000108 CC3195E5 LDR R3,[R5, #+460] \ 0000010C D02195E5 LDR R2,[R5, #+464] \ 00000110 201084E2 ADD R1,R4,#+32 \ 00000114 0B00A0E1 MOV R0,R11 \ 00000118 160000EF SWI +22 2357 if(away_m) strcat(clm_hdr_text,"[A]"); \ 0000011C 340195E5 LDR R0,[R5, #+308] \ 00000120 08D08DE2 ADD SP,SP,#+8 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0200000A BEQ ??UpdateCLheader_9 \ 0000012C 0A10A0E1 MOV R1,R10 \ 00000130 0B00A0E1 MOV R0,R11 \ 00000134 170000EF SWI +23 2358 if(CurrentPrivateStatus==1) strcat(clm_hdr_text,"[I]"); \ ??UpdateCLheader_9: \ 00000138 780195E5 LDR R0,[R5, #+376] \ 0000013C 010050E3 CMP R0,#+1 \ 00000140 0200001A BNE ??UpdateCLheader_10 \ 00000144 0910A0E1 MOV R1,R9 \ 00000148 0B00A0E1 MOV R0,R11 \ 0000014C 170000EF SWI +23 2359 if(Is_Vibra_Enabled) strcat(clm_hdr_text,"[V]"); \ ??UpdateCLheader_10: \ 00000150 640195E5 LDR R0,[R5, #+356] \ 00000154 000050E3 CMP R0,#+0 \ 00000158 0200000A BEQ ??UpdateCLheader_11 \ 0000015C 0810A0E1 MOV R1,R8 \ 00000160 0B00A0E1 MOV R0,R11 \ 00000164 170000EF SWI +23 2360 if(Is_Sounds_Enabled) strcat(clm_hdr_text,"[S]"); \ ??UpdateCLheader_11: \ 00000168 680195E5 LDR R0,[R5, #+360] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0200000A BEQ ??UpdateCLheader_12 \ 00000174 3E1F8FE2 ADR R1,??UpdateCLheader_1+0xC ;; "[S]" \ 00000178 0B00A0E1 MOV R0,R11 \ 0000017C 170000EF SWI +23 2361 if(Is_Double_Vibra_On) strcat(clm_hdr_text,"[R]"); \ ??UpdateCLheader_12: \ 00000180 100195E5 LDR R0,[R5, #+272] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 3200000A BEQ ??UpdateCLheader_3 \ 0000018C 391F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 00000190 0B00A0E1 MOV R0,R11 \ 00000194 170000EF SWI +23 \ 00000198 2E0000EA B ??UpdateCLheader_3 2362 } 2363 break; 2364 case 4: 2365 { 2366 void Get_Online_total(); 2367 Get_Online_total(); \ ??UpdateCLheader_13: \ 0000019C ........ BL Get_Online_total 2368 sprintf(status, "%s[%d/%d] [%d/%d] ",def_clm_hdr_text,kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 000001A0 C400A0E3 MOV R0,#+196 \ 000001A4 600D80E3 ORR R0,R0,#0x1800 \ 000001A8 05B080E0 ADD R11,R0,R5 \ 000001AC 80002DE9 PUSH {R7} \ 000001B0 40002DE9 PUSH {R6} \ 000001B4 CC0195E5 LDR R0,[R5, #+460] \ 000001B8 482084E2 ADD R2,R4,#+72 \ 000001BC 01002DE9 PUSH {R0} \ 000001C0 D03195E5 LDR R3,[R5, #+464] \ 000001C4 341084E2 ADD R1,R4,#+52 \ 000001C8 0B00A0E1 MOV R0,R11 \ 000001CC 160000EF SWI +22 2369 if(away_m) strcat(status,"[A]"); \ 000001D0 340195E5 LDR R0,[R5, #+308] \ 000001D4 0CD08DE2 ADD SP,SP,#+12 \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 0200000A BEQ ??UpdateCLheader_14 \ 000001E0 0A10A0E1 MOV R1,R10 \ 000001E4 0B00A0E1 MOV R0,R11 \ 000001E8 170000EF SWI +23 2370 if(CurrentPrivateStatus==1) strcat(status,"[I]"); \ ??UpdateCLheader_14: \ 000001EC 780195E5 LDR R0,[R5, #+376] \ 000001F0 010050E3 CMP R0,#+1 \ 000001F4 0200001A BNE ??UpdateCLheader_15 \ 000001F8 0910A0E1 MOV R1,R9 \ 000001FC 0B00A0E1 MOV R0,R11 \ 00000200 170000EF SWI +23 2371 if(Is_Vibra_Enabled) strcat(status,"[V]"); \ ??UpdateCLheader_15: \ 00000204 640195E5 LDR R0,[R5, #+356] \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 0200000A BEQ ??UpdateCLheader_16 \ 00000210 0810A0E1 MOV R1,R8 \ 00000214 0B00A0E1 MOV R0,R11 \ 00000218 170000EF SWI +23 2372 if(Is_Sounds_Enabled) strcat(status,"[S]"); \ ??UpdateCLheader_16: \ 0000021C 680195E5 LDR R0,[R5, #+360] \ 00000220 000050E3 CMP R0,#+0 \ 00000224 0200000A BEQ ??UpdateCLheader_17 \ 00000228 111F8FE2 ADR R1,??UpdateCLheader_1+0xC ;; "[S]" \ 0000022C 0B00A0E1 MOV R0,R11 \ 00000230 170000EF SWI +23 2373 if(Is_Double_Vibra_On) strcat(status,"[R]"); \ ??UpdateCLheader_17: \ 00000234 100195E5 LDR R0,[R5, #+272] \ 00000238 000050E3 CMP R0,#+0 \ 0000023C 0200000A BEQ ??UpdateCLheader_18 \ 00000240 0C1F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 00000244 0B00A0E1 MOV R0,R11 \ 00000248 170000EF SWI +23 2374 canvasdata=BuildCanvas(); \ ??UpdateCLheader_18: \ 0000024C F18000EF SWI +33009 \ 00000250 EC0085E5 STR R0,[R5, #+236] 2375 DrawStatusBar(); \ 00000254 ........ BL DrawStatusBar 2376 } 2377 break; 2378 } 2379 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_3: \ 00000258 00009DE5 LDR R0,[SP, #+0] \ 0000025C 601084E2 ADD R1,R4,#+96 \ 00000260 1A0000EF SWI +26 2380 } 2381 } \ 00000264 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??UpdateCLheader_1: \ 00000268 5B565D00 DC8 "[V]" \ 0000026C 5B495D00 DC8 "[I]" \ 00000270 5B415D00 DC8 "[A]" \ 00000274 5B535D00 DC8 "[S]" \ 00000278 5B525D00 DC8 "[R]" \ 0000027C ........ DC32 key_clmenu_sk_r 2382 \ In segment CODE, align 4, keep-with-next 2383 void ClearContactT9Key(void) 2384 { 2385 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 828 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 2386 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 828 2387 \ In segment CODE, align 4, keep-with-next 2388 void AddContactT9Key(int chr) 2389 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 2390 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable57 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C CF0F85E2 ADD R0,R5,#+828 \ 00000010 1B0000EF SWI +27 2391 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 2392 { 2393 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C 3C43C035 STRBCC R4,[R0, #+828] 2394 } 2395 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 2396 \ In segment CODE, align 4, keep-with-next 2397 void BackSpaceContactT9(void) 2398 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 2399 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable57 ;; S_ICONS \ 00000008 CF0F84E2 ADD R0,R4,#+828 \ 0000000C 1B0000EF SWI +27 2400 if (l) \ 00000010 000050E3 CMP R0,#+0 2401 { 2402 l--; 2403 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C 3B13C015 STRBNE R1,[R0, #+827] 2404 } 2405 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 2406 \ In segment CODE, align 4, keep-with-next 2407 void create_contactlist_menu(void) 2408 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2409 int i; 2410 i=CountContacts(); 2411 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable57 ;; S_ICONS 2412 UpdateCLheader(); 2413 patch_header(&contactlist_menuhdr); \ 00000008 58609FE5 LDR R6,??create_contactlist_menu_0 ;; contactlist_menuhdr \ 0000000C ........ _BLF CountContacts,??CountContacts??rA \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 C44185E5 STR R4,[R5, #+452] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 B000C6E1 STRH R0,[R6, #+0] \ 00000024 1800A0E3 MOV R0,#+24 \ 00000028 B200C6E1 STRH R0,[R6, #+2] \ 0000002C 888100EF SWI +33160 \ 00000030 010040E2 SUB R0,R0,#+1 \ 00000034 B400C6E1 STRH R0,[R6, #+4] \ 00000038 8A8100EF SWI +33162 \ 0000003C 170080E2 ADD R0,R0,#+23 \ 00000040 B600C6E1 STRH R0,[R6, #+6] 2414 #ifdef USE_MLMENU 2415 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); \ 00000044 10002DE9 PUSH {R4} \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 0630A0E1 MOV R3,R6 \ 00000054 142086E2 ADD R2,R6,#+20 \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 170200EF SWI +535 \ 00000060 BC0185E5 STR R0,[R5, #+444] 2416 #else 2417 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 2418 #endif 2419 } \ 00000064 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000068 ........ DC32 contactlist_menuhdr 2420 \ In segment CODE, align 4, keep-with-next 2421 void contactlist_menu_ghook(void *data, int cmd) 2422 { \ contactlist_menu_ghook: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 2423 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 2424 if (cmd==9) \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 090054E3 CMP R4,#+9 2425 { 2426 pltop->dyn_pltop=NULL; \ 00000014 08108005 STREQ R1,[R0, #+8] \ 00000018 1080BD08 POPEQ {R4,PC} 2427 } 2428 if (cmd==0x0A) \ 0000001C 0A0054E3 CMP R4,#+10 \ 00000020 1080BD18 POPNE {R4,PC} 2429 { 2430 silenthide=0; \ 00000024 14209FE5 LDR R2,??contactlist_menu_ghook_0 ;; S_ICONS + 348 \ 00000028 001082E5 STR R1,[R2, #+0] 2431 pltop->dyn_pltop=XStatusesImgList; \ 0000002C ........ LDR R1,??DataTable56 ;; XStatusesImgList \ 00000030 001091E5 LDR R1,[R1, #+0] \ 00000034 081080E5 STR R1,[R0, #+8] 2432 DisableIDLETMR(); \ 00000038 7F0100EF SWI +383 2433 } 2434 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??contactlist_menu_ghook_0: \ 00000040 ........ DC32 S_ICONS + 348 2435 \ In segment CODE, align 4, keep-with-next 2436 void RecountMenu(CLIST *req, int needfocus) 2437 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 2438 int i; 2439 int j; 2440 void *data; 2441 UpdateCLheader(); 2442 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable57 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 BC0196E5 LDR R0,[R6, #+444] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 2443 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 BC0196E5 LDR R0,[R6, #+444] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 2444 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 2445 { 2446 j=0; 2447 } 2448 else 2449 { 2450 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 2451 } 2452 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 2453 if (j>=i) j=i-1; 2454 if (j<0) j=0; 2455 if (i!=prev_clmenu_itemcount) \ 00000048 C41196E5 LDR R1,[R6, #+452] \ 0000004C 000054E1 CMP R4,R0 \ 00000050 014040A2 SUBGE R4,R0,#+1 \ 00000054 000054E3 CMP R4,#+0 \ 00000058 0040A043 MOVMI R4,#+0 \ 0000005C 010050E1 CMP R0,R1 \ 00000060 0300000A BEQ ??RecountMenu_1 2456 { 2457 prev_clmenu_itemcount=i; \ 00000064 C40186E5 STR R0,[R6, #+452] 2458 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 2459 } 2460 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 2461 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 BC0196E5 LDR R0,[R6, #+444] \ 0000008C 350100EF SWI +309 \ 00000090 000050E3 CMP R0,#+0 \ 00000094 F080BD08 POPEQ {R4-R7,PC} \ 00000098 960100EF SWI +406 \ 0000009C F080BDE8 POP {R4-R7,PC} ;; return 2462 } 2463 2464 char hostbuf2[128]; 2465 \ In segment CODE, align 4, keep-with-next 2466 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 2467 { \ contactlist_menu_onkey: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 2468 CLIST *t; 2469 int i; 2470 i=GetCurMenuItem(data); \ 00000008 8F0100EF SWI +399 2471 t=FindContactByN(i); \ 0000000C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000010 00A0A0E1 MOV R10,R0 2472 if (msg->keys==0x18) \ 00000014 08009DE5 LDR R0,[SP, #+8] \ 00000018 F200D0E1 LDRSH R0,[R0, #+2] \ 0000001C 180050E3 CMP R0,#+24 \ 00000020 0100001A BNE ??contactlist_menu_onkey_1 2473 { 2474 ShowMainMenu(); \ 00000024 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 2475 return(-1); \ 00000028 E40000EA B ??contactlist_menu_onkey_2 2476 } 2477 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_1: \ 0000002C ........ LDR R6,??DataTable58 ;; S_ICONS \ 00000030 CF5FA0E3 MOV R5,#+828 \ 00000034 3D0050E3 CMP R0,#+61 \ 00000038 2400001A BNE ??contactlist_menu_onkey_3 2478 { 2479 if (t) \ 0000003C 00005AE3 CMP R10,#+0 \ 00000040 2C00000A BEQ ??contactlist_menu_onkey_4 2480 { 2481 if (t->isgroup) \ 00000044 08009AE5 LDR R0,[R10, #+8] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0700000A BEQ ??contactlist_menu_onkey_5 2482 { 2483 t->state^=0xFFFF; \ 00000050 B405DAE1 LDRH R0,[R10, #+84] \ 00000054 FF10A0E3 MOV R1,#+255 \ 00000058 FF1C81E3 ORR R1,R1,#0xFF00 \ 0000005C 000021E0 EOR R0,R1,R0 \ 00000060 B405CAE1 STRH R0,[R10, #+84] 2484 RecountMenu(t,1); \ 00000064 0110A0E3 MOV R1,#+1 \ 00000068 0A00A0E1 MOV R0,R10 \ 0000006C 200000EA B ??contactlist_menu_onkey_6 2485 return(-1); 2486 } 2487 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_5: \ 00000070 060085E0 ADD R0,R5,R6 \ 00000074 1B0000EF SWI +27 \ 00000078 000050E3 CMP R0,#+0 \ 0000007C 0500000A BEQ ??contactlist_menu_onkey_7 2488 { 2489 ClearContactT9Key(); \ 00000080 2010A0E3 MOV R1,#+32 \ 00000084 060085E0 ADD R0,R5,R6 \ 00000088 1D0100EF SWI +285 2490 RecountMenu(NULL,1); \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 ........ BL RecountMenu 2491 } 2492 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_3: \ 000000D0 010050E3 CMP R0,#+1 \ 000000D4 0900001A BNE ??contactlist_menu_onkey_9 2498 { 2499 if (strlen(ContactT9Key)) \ 000000D8 060085E0 ADD R0,R5,R6 \ 000000DC 1B0000EF SWI +27 \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 0500000A BEQ ??contactlist_menu_onkey_9 2500 { 2501 BackSpaceContactT9(); \ 000000E8 ........ BL BackSpaceContactT9 2502 RecountMenu(NULL,1); \ 000000EC 0110A0E3 MOV R1,#+1 \ 000000F0 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_6: \ 000000F4 ........ BL RecountMenu 2503 return(-1); \ ??contactlist_menu_onkey_4: \ 000000F8 0000E0E3 MVN R0,#+0 \ 000000FC FE8FBDE8 POP {R1-R11,PC} 2504 } 2505 } 2506 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_9: \ 00000100 08009DE5 LDR R0,[SP, #+8] \ 00000104 ........ LDR R7,??DataTable65 ;; `?gbsmsg->submess; \ 00000138 088090E5 LDR R8,[R0, #+8] 2509 if ((key>='0')&&(key<='9')) \ 0000013C 300058E3 CMP R8,#+48 \ 00000140 070000BA BLT ??contactlist_menu_onkey_11 \ 00000144 3A0058E3 CMP R8,#+58 \ 00000148 1F0000AA BGE ??contactlist_menu_onkey_12 2510 { 2511 AddContactT9Key(key); \ 0000014C 0800A0E1 MOV R0,R8 \ 00000150 ........ BL AddContactT9Key 2512 RecountMenu(NULL,1); \ 00000154 0110A0E3 MOV R1,#+1 \ 00000158 0900A0E1 MOV R0,R9 \ 0000015C ........ BL RecountMenu \ 00000160 A50000EA B ??contactlist_menu_onkey_13 2513 return(-1); 2514 } 2515 #ifdef ELKA 2516 if (key==VOL_UP_BUTTON && isVolUpButton) \ ??contactlist_menu_onkey_11: \ 00000164 0D0058E3 CMP R8,#+13 \ 00000168 1700001A BNE ??contactlist_menu_onkey_12 \ 0000016C 98059FE5 LDR R0,??contactlist_menu_onkey_14 ;; isVolUpButton \ 00000170 000090E5 LDR R0,[R0, #+0] \ 00000174 000050E3 CMP R0,#+0 \ 00000178 1300000A BEQ ??contactlist_menu_onkey_12 2517 { 2518 char *small_info=malloc(256); \ 0000017C 400FA0E3 MOV R0,#+256 \ 00000180 140000EF SWI +20 \ 00000184 00B0A0E1 MOV R11,R0 2519 sprintf(small_info, "Время в онлайн:\n" 2520 "%02d:%02d:%02d\n" 2521 "Сервер:\n%s" 2522 ,xstatus_old, minimum_xstatus, maximum, hostbuf2); \ 00000188 0400A0E3 MOV R0,#+4 \ 0000018C 640D80E3 ORR R0,R0,#0x1900 \ 00000190 060080E0 ADD R0,R0,R6 \ 00000194 01002DE9 PUSH {R0} \ 00000198 500196E5 LDR R0,[R6, #+336] \ 0000019C 241087E2 ADD R1,R7,#+36 \ 000001A0 01002DE9 PUSH {R0} \ 000001A4 4C3196E5 LDR R3,[R6, #+332] \ 000001A8 482196E5 LDR R2,[R6, #+328] \ 000001AC 0B00A0E1 MOV R0,R11 \ 000001B0 160000EF SWI +22 2523 ShowMSG(1,(int)small_info); \ 000001B4 0B10A0E1 MOV R1,R11 \ 000001B8 0100A0E3 MOV R0,#+1 \ 000001BC 480100EF SWI +328 2524 mfree(small_info); \ 000001C0 0B00A0E1 MOV R0,R11 \ 000001C4 150000EF SWI +21 \ 000001C8 08D08DE2 ADD SP,SP,#+8 2525 } 2526 2527 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) \ ??contactlist_menu_onkey_12: \ 000001CC 08009DE5 LDR R0,[SP, #+8] \ 000001D0 040090E5 LDR R0,[R0, #+4] \ 000001D4 080090E5 LDR R0,[R0, #+8] \ 000001D8 0E0050E3 CMP R0,#+14 \ 000001DC 1400001A BNE ??contactlist_menu_onkey_15 \ 000001E0 28059FE5 LDR R0,??contactlist_menu_onkey_14+0x4 ;; isVolDownButton \ 000001E4 000090E5 LDR R0,[R0, #+0] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 1000000A BEQ ??contactlist_menu_onkey_15 2528 { 2529 if(!away_m) \ 000001F0 340196E5 LDR R0,[R6, #+308] \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 0900001A BNE ??contactlist_menu_onkey_16 2530 { 2531 away_m=!away_m; \ 000001FC 344186E5 STR R4,[R6, #+308] 2532 GBS_StopTimer(&away_tmr); \ 00000200 04009DE5 LDR R0,[SP, #+4] \ 00000204 440100EF SWI +324 2533 msg_away_timer=AUTO_ENGADE; \ 00000208 ........ LDR R0,??DataTable62 ;; AUTO_ENGADE \ 0000020C 000090E5 LDR R0,[R0, #+0] \ 00000210 2C0186E5 STR R0,[R6, #+300] 2534 away_timer(); \ 00000214 ........ BL away_timer 2535 main_d=1; \ 00000218 E44086E5 STR R4,[R6, #+228] 2536 // ShowMSG(1,(int)"Автоответчик включен!"); 2537 InputAwayMsg(); \ 0000021C ........ BL InputAwayMsg \ 00000220 010000EA B ??contactlist_menu_onkey_17 2538 } 2539 else 2540 { 2541 msg_away_timer=0; \ ??contactlist_menu_onkey_16: \ 00000224 2C9186E5 STR R9,[R6, #+300] 2542 away_m=!away_m; \ 00000228 349186E5 STR R9,[R6, #+308] 2543 // ShowMSG(1,(int)"Автоответчик выключен!"); 2544 } 2545 UpdateCLheader(); \ ??contactlist_menu_onkey_17: \ 0000022C ........ BL UpdateCLheader 2546 RefreshGUI(); \ 00000230 960100EF SWI +406 2547 } 2548 #endif 2549 if (key==GREEN_BUTTON) \ ??contactlist_menu_onkey_15: \ 00000234 0B0058E3 CMP R8,#+11 \ 00000238 0900001A BNE ??contactlist_menu_onkey_18 2550 { 2551 #ifdef kluchnik 2552 Show_XTX=!(Show_XTX); \ 0000023C 400196E5 LDR R0,[R6, #+320] \ 00000240 000050E3 CMP R0,#+0 \ 00000244 0040A013 MOVNE R4,#+0 \ 00000248 404186E5 STR R4,[R6, #+320] 2553 if(Show_XTX) \ 0000024C 000054E3 CMP R4,#+0 \ 00000250 60108702 ADDEQ R1,R7,#+96 2554 ShowMSG(1,(int)"Show x-status"); \ 00000254 50108712 ADDNE R1,R7,#+80 \ 00000258 0100A0E3 MOV R0,#+1 \ 0000025C 480100EF SWI +328 \ 00000260 560000EA B ??contactlist_menu_onkey_2 2555 else 2556 ShowMSG(1,(int)"Show time"); 2557 #else 2558 IsActiveUp=!IsActiveUp; 2559 RecountMenu(NULL,1); 2560 #endif 2561 return(-1); 2562 } 2563 if (key==LEFT_BUTTON) \ ??contactlist_menu_onkey_18: \ 00000264 3D0058E3 CMP R8,#+61 \ 00000268 1B00000A BEQ ??contactlist_menu_onkey_19 2564 { 2565 while(t=(CLIST *)(t->next)) 2566 { 2567 if (t->isunread) goto doit; 2568 } 2569 t=(CLIST *)(&cltop); 2570 while(t=(CLIST *)(t->next)) 2571 { 2572 if (t->isunread) goto doit; 2573 } 2574 if (t && Is_Show_Groups) {//???? ??????? ? ?????????? ??????? 2575 if (!t->isgroup) 2576 t=FindGroupByID(t->group); 2577 if (t && !t->state) {//?????? ??????? ? ??? ???????? 2578 t->state^=0xFFFF; 2579 goto does; 2580 } 2581 } 2582 doit: 2583 { 2584 CLIST *g=FindGroupByID(t->group); 2585 if (g) 2586 { 2587 if (g->state) 2588 { 2589 g->state=0; 2590 } 2591 } 2592 } 2593 does: 2594 RecountMenu(t,1); 2595 return(-1); 2596 } 2597 if (key=='*') \ 0000026C 2A0058E3 CMP R8,#+42 \ 00000270 3100000A BEQ ??contactlist_menu_onkey_20 2598 { 2599 while(t=(CLIST *)(t->next)) 2600 { 2601 if (t->just_now) goto doit3; 2602 } 2603 t=(CLIST *)(&cltop); 2604 while(t=(CLIST *)(t->next)) 2605 { 2606 if (t->just_now) goto doit3; 2607 } 2608 return(-1); 2609 doit3: 2610 { 2611 CLIST *g=FindGroupByID(t->group); 2612 if (g) 2613 { 2614 if (g->state) 2615 { 2616 g->state=0; 2617 } 2618 } 2619 } 2620 RecountMenu(t,1); 2621 return(-1); 2622 } 2623 2624 if (key=='#') \ 00000274 230058E3 CMP R8,#+35 \ 00000278 5200001A BNE ??contactlist_menu_onkey_21 2625 { 2626 if(ActionResh) \ 0000027C 90049FE5 LDR R0,??contactlist_menu_onkey_14+0x8 ;; ActionResh \ 00000280 000090E5 LDR R0,[R0, #+0] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 3900001A BNE ??contactlist_menu_onkey_22 2627 { 2628 while(t=(CLIST *)(t->next)) 2629 { 2630 if (t->isactive) goto doit4; 2631 } 2632 t=(CLIST *)(&cltop); 2633 while(t=(CLIST *)(t->next)) 2634 { 2635 if (t->isactive) goto doit4; 2636 } 2637 return(-1); 2638 doit4: 2639 { 2640 CLIST *g=FindGroupByID(t->group); 2641 if (g) 2642 { 2643 if (g->state) 2644 { 2645 g->state=0; 2646 } 2647 } 2648 } 2649 RecountMenu(t,1); 2650 } 2651 else 2652 { 2653 if(t->log) \ 0000028C 74009AE5 LDR R0,[R10, #+116] \ 00000290 000050E3 CMP R0,#+0 \ 00000294 0200000A BEQ ??contactlist_menu_onkey_23 2654 { 2655 FreeLOGQ(&t->log); \ 00000298 74008AE2 ADD R0,R10,#+116 \ 0000029C ........ BL FreeLOGQ 2656 t->msg_count=0; \ 000002A0 84908AE5 STR R9,[R10, #+132] 2657 } 2658 if(strlen(ContactT9Key)) \ ??contactlist_menu_onkey_23: \ 000002A4 060085E0 ADD R0,R5,R6 \ 000002A8 1B0000EF SWI +27 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 0200000A BEQ ??contactlist_menu_onkey_24 2659 ClearContactT9Key(); \ 000002B4 2010A0E3 MOV R1,#+32 \ 000002B8 060085E0 ADD R0,R5,R6 \ 000002BC 1D0100EF SWI +285 2660 t->isactive=0; \ ??contactlist_menu_onkey_24: \ 000002C0 80908AE5 STR R9,[R10, #+128] 2661 RecountMenu(NULL,0); \ 000002C4 0010A0E3 MOV R1,#+0 \ 000002C8 0100A0E1 MOV R0,R1 \ 000002CC 3A0000EA B ??contactlist_menu_onkey_25 2662 } \ ??contactlist_menu_onkey_26: \ 000002D0 64009AE5 LDR R0,[R10, #+100] \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 0900001A BNE ??contactlist_menu_onkey_27 \ ??contactlist_menu_onkey_19: \ 000002DC 00A09AE5 LDR R10,[R10, #+0] \ 000002E0 00005AE3 CMP R10,#+0 \ 000002E4 F9FFFF1A BNE ??contactlist_menu_onkey_26 \ 000002E8 6DAF86E2 ADD R10,R6,#+436 \ ??contactlist_menu_onkey_28: \ 000002EC 00A09AE5 LDR R10,[R10, #+0] \ 000002F0 00005AE3 CMP R10,#+0 \ 000002F4 0200000A BEQ ??contactlist_menu_onkey_27 \ 000002F8 64009AE5 LDR R0,[R10, #+100] \ 000002FC 000050E3 CMP R0,#+0 \ 00000300 F9FFFF0A BEQ ??contactlist_menu_onkey_28 \ ??contactlist_menu_onkey_27: \ 00000304 10009AE5 LDR R0,[R10, #+16] \ 00000308 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 0000030C 000050E3 CMP R0,#+0 \ 00000310 B415D011 LDRHNE R1,[R0, #+84] \ 00000314 00005113 CMPNE R1,#+0 \ 00000318 B495C011 STRHNE R9,[R0, #+84] \ 0000031C 0110A0E3 MOV R1,#+1 \ 00000320 0A00A0E1 MOV R0,R10 \ 00000324 ........ BL RecountMenu \ 00000328 000064E2 RSB R0,R4,#+0 \ 0000032C FE8FBDE8 POP {R1-R11,PC} \ ??contactlist_menu_onkey_29: \ 00000330 5C009AE5 LDR R0,[R10, #+92] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 F1FFFF1A BNE ??contactlist_menu_onkey_27 \ ??contactlist_menu_onkey_20: \ 0000033C 00A09AE5 LDR R10,[R10, #+0] \ 00000340 00005AE3 CMP R10,#+0 \ 00000344 F9FFFF1A BNE ??contactlist_menu_onkey_29 \ 00000348 6DAF86E2 ADD R10,R6,#+436 \ ??contactlist_menu_onkey_30: \ 0000034C 00A09AE5 LDR R10,[R10, #+0] \ 00000350 00005AE3 CMP R10,#+0 \ 00000354 67FFFF0A BEQ ??contactlist_menu_onkey_4 \ 00000358 5C009AE5 LDR R0,[R10, #+92] \ 0000035C 000050E3 CMP R0,#+0 \ 00000360 F9FFFF0A BEQ ??contactlist_menu_onkey_30 \ 00000364 E6FFFFEA B ??contactlist_menu_onkey_27 \ ??contactlist_menu_onkey_31: \ 00000368 80009AE5 LDR R0,[R10, #+128] \ 0000036C 000050E3 CMP R0,#+0 \ 00000370 0900001A BNE ??contactlist_menu_onkey_32 \ ??contactlist_menu_onkey_22: \ 00000374 00A09AE5 LDR R10,[R10, #+0] \ 00000378 00005AE3 CMP R10,#+0 \ 0000037C F9FFFF1A BNE ??contactlist_menu_onkey_31 \ 00000380 6DAF86E2 ADD R10,R6,#+436 \ ??contactlist_menu_onkey_33: \ 00000384 00A09AE5 LDR R10,[R10, #+0] \ 00000388 00005AE3 CMP R10,#+0 \ 0000038C 59FFFF0A BEQ ??contactlist_menu_onkey_4 \ 00000390 80009AE5 LDR R0,[R10, #+128] \ 00000394 000050E3 CMP R0,#+0 \ 00000398 F9FFFF0A BEQ ??contactlist_menu_onkey_33 \ ??contactlist_menu_onkey_32: \ 0000039C 10009AE5 LDR R0,[R10, #+16] \ 000003A0 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000003A4 000050E3 CMP R0,#+0 \ 000003A8 B415D011 LDRHNE R1,[R0, #+84] \ 000003AC 00005113 CMPNE R1,#+0 \ 000003B0 B495C011 STRHNE R9,[R0, #+84] \ 000003B4 0110A0E3 MOV R1,#+1 \ 000003B8 0A00A0E1 MOV R0,R10 \ ??contactlist_menu_onkey_25: \ 000003BC ........ BL RecountMenu \ ??contactlist_menu_onkey_2: \ 000003C0 0000E0E3 MVN R0,#+0 \ 000003C4 FE8FBDE8 POP {R1-R11,PC} 2663 return(-1); 2664 } 2665 if (key==RIGHT_BUTTON) \ ??contactlist_menu_onkey_21: \ 000003C8 3E0058E3 CMP R8,#+62 \ 000003CC 0C00001A BNE ??contactlist_menu_onkey_10 2666 { 2667 //Послать запрос текста XStatus 2668 if (t) \ 000003D0 00005AE3 CMP R10,#+0 \ 000003D4 0A00000A BEQ ??contactlist_menu_onkey_10 2669 { 2670 if (!t->isgroup) \ 000003D8 08009AE5 LDR R0,[R10, #+8] \ 000003DC 000050E3 CMP R0,#+0 \ 000003E0 0700001A BNE ??contactlist_menu_onkey_10 2671 { 2672 FreeXText(t); \ 000003E4 0A00A0E1 MOV R0,R10 \ 000003E8 ........ _BLF FreeXText,??FreeXText??rA 2673 t->req_xtext=0; \ 000003EC 90908AE5 STR R9,[R10, #+144] 2674 RequestXText(t->uin); \ 000003F0 0C009AE5 LDR R0,[R10, #+12] \ 000003F4 ........ BL RequestXText 2675 RefreshGUI(); \ 000003F8 960100EF SWI +406 2676 return(-1); \ ??contactlist_menu_onkey_13: \ 000003FC 000064E2 RSB R0,R4,#+0 \ 00000400 FE8FBDE8 POP {R1-R11,PC} 2677 } 2678 } 2679 } 2680 /* 2681 if (key==0x19) 2682 { 2683 CreateScreenSelectGUI(); 2684 // GeneralFuncF1(1); 2685 return(-1); 2686 }*/ 2687 } 2688 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_10: \ 00000404 08009DE5 LDR R0,[SP, #+8] \ 00000408 652F84E3 ORR R2,R4,#0x194 \ 0000040C 040090E5 LDR R0,[R0, #+4] \ 00000410 041090E5 LDR R1,[R0, #+4] \ 00000414 020051E1 CMP R1,R2 \ 00000418 B900001A BNE ??contactlist_menu_onkey_34 2689 { 2690 if (msg->gbsmsg->submess=='#') \ 0000041C 081090E5 LDR R1,[R0, #+8] \ 00000420 0980A0E3 MOV R8,#+9 \ 00000424 428C88E3 ORR R8,R8,#0x4200 \ 00000428 B0B0A0E3 MOV R11,#+176 \ 0000042C DEBC8BE3 ORR R11,R11,#0xDE00 \ 00000430 230051E3 CMP R1,#+35 \ 00000434 1600001A BNE ??contactlist_menu_onkey_35 2691 { 2692 // if(isLongPressResh==1) 2693 // { 2694 ClearContactT9Key(); \ 00000438 2010A0E3 MOV R1,#+32 \ 0000043C 060085E0 ADD R0,R5,R6 \ 00000440 1D0100EF SWI +285 2695 RecountMenu(NULL,1); \ 00000444 0110A0E3 MOV R1,#+1 \ 00000448 0900A0E1 MOV R0,R9 \ 0000044C ........ BL RecountMenu 2696 gipc.name_to=ipc_xtask_name; \ 00000450 EC0F85E2 ADD R0,R5,#+944 \ 00000454 070080E0 ADD R0,R0,R7 \ 00000458 BC0086E5 STR R0,[R6, #+188] 2697 gipc.name_from=ipc_my_name; \ 0000045C E40F85E2 ADD R0,R5,#+912 \ 00000460 070080E0 ADD R0,R0,R7 \ 00000464 C00086E5 STR R0,[R6, #+192] 2698 gipc.data=0; \ 00000468 C49086E5 STR R9,[R6, #+196] 2699 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 0000046C BC3086E2 ADD R3,R6,#+188 \ 00000470 0420A0E1 MOV R2,R4 \ 00000474 0B10A0E1 MOV R1,R11 \ 00000478 0800A0E1 MOV R0,R8 \ 0000047C 000100EF SWI +256 2700 if (IsUnlocked()) \ 00000480 430000EF SWI +67 \ 00000484 000050E3 CMP R0,#+0 \ 00000488 1AFFFF0A BEQ ??contactlist_menu_onkey_4 2701 { 2702 KbdLock(); \ 0000048C A90000EF SWI +169 \ 00000490 CAFFFFEA B ??contactlist_menu_onkey_2 2703 } 2704 // } 2705 2706 // CreateScreenSelectGUI(); 2707 return(-1); 2708 } 2709 if (msg->gbsmsg->submess=='*') \ ??contactlist_menu_onkey_35: \ 00000494 2A0051E3 CMP R1,#+42 \ 00000498 1200001A BNE ??contactlist_menu_onkey_36 2710 { 2711 ClearContactT9Key(); \ 0000049C 2010A0E3 MOV R1,#+32 \ 000004A0 060085E0 ADD R0,R5,R6 \ 000004A4 1D0100EF SWI +285 2712 RecountMenu(NULL,1); \ 000004A8 0110A0E3 MOV R1,#+1 \ 000004AC 0900A0E1 MOV R0,R9 \ 000004B0 ........ BL RecountMenu 2713 silenthide=1; \ 000004B4 5C4186E5 STR R4,[R6, #+348] 2714 gipc.name_to=ipc_xtask_name; \ 000004B8 EC0F85E2 ADD R0,R5,#+944 \ 000004BC 070080E0 ADD R0,R0,R7 \ 000004C0 BC0086E5 STR R0,[R6, #+188] 2715 gipc.name_from=ipc_my_name; \ 000004C4 E40F85E2 ADD R0,R5,#+912 \ 000004C8 070080E0 ADD R0,R0,R7 \ 000004CC C00086E5 STR R0,[R6, #+192] 2716 gipc.data=0; \ 000004D0 C49086E5 STR R9,[R6, #+196] 2717 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000004D4 BC3086E2 ADD R3,R6,#+188 \ 000004D8 0420A0E1 MOV R2,R4 \ 000004DC 0B10A0E1 MOV R1,R11 \ 000004E0 0800A0E1 MOV R0,R8 \ 000004E4 000100EF SWI +256 2718 } 2719 2720 //-------------------- LONG PRESS ACTION ON CL --------------------// 2721 2722 switch(msg->gbsmsg->submess) \ ??contactlist_menu_onkey_36: \ 000004E8 08009DE5 LDR R0,[SP, #+8] \ 000004EC 24829FE5 LDR R8,??contactlist_menu_onkey_14+0xC ;; WriteDefSettings \ 000004F0 040090E5 LDR R0,[R0, #+4] \ 000004F4 080090E5 LDR R0,[R0, #+8] \ 000004F8 310040E2 SUB R0,R0,#+49 \ 000004FC 080050E3 CMP R0,#+8 \ 00000500 7100008A BHI ??contactlist_menu_onkey_37 \ 00000504 011F8FE2 ADR R1,??contactlist_menu_onkey_0 \ 00000508 0010D1E7 LDRB R1,[R1, R0] \ 0000050C 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??contactlist_menu_onkey_0: \ 00000510 020F1D29 DC8 +2,+15,+29,+41 \ 00000514 37506E6E DC8 +55,+80,+110,+110 \ 00000518 60000000 DC8 +96,+0,+0,+0 2723 { 2724 case '1': 2725 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??contactlist_menu_onkey_38: \ 0000051C 680196E5 LDR R0,[R6, #+360] \ 00000520 000050E3 CMP R0,#+0 \ 00000524 0040A013 MOVNE R4,#+0 \ 00000528 684186E5 STR R4,[R6, #+360] 2726 if(Is_Sounds_Enabled) \ 0000052C 000054E3 CMP R4,#+0 2727 ShowMSG(1,(int)"Sound 0n"); \ 00000530 6C108712 ADDNE R1,R7,#+108 2728 else 2729 ShowMSG(1,(int)"Sound Off"); \ 00000534 78108702 ADDEQ R1,R7,#+120 \ 00000538 0100A0E3 MOV R0,#+1 \ 0000053C 480100EF SWI +328 2730 SUBPROC((void*)WriteDefSettings); \ 00000540 0800A0E1 MOV R0,R8 \ 00000544 710100EF SWI +369 2731 RefreshGUI(); \ 00000548 960100EF SWI +406 \ 0000054C 5E0000EA B ??contactlist_menu_onkey_37 2732 break; 2733 case '2': 2734 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??contactlist_menu_onkey_39: \ 00000550 640196E5 LDR R0,[R6, #+356] \ 00000554 000050E3 CMP R0,#+0 \ 00000558 0040A013 MOVNE R4,#+0 \ 0000055C 644186E5 STR R4,[R6, #+356] 2735 SUBPROC((void*)WriteDefSettings); \ 00000560 0800A0E1 MOV R0,R8 \ 00000564 710100EF SWI +369 2736 RefreshGUI(); \ 00000568 960100EF SWI +406 2737 if(Is_Vibra_Enabled) \ 0000056C 640196E5 LDR R0,[R6, #+356] \ 00000570 000050E3 CMP R0,#+0 \ 00000574 90108702 ADDEQ R1,R7,#+144 2738 ShowMSG(1,(int)"Vibra On"); \ 00000578 84108712 ADDNE R1,R7,#+132 \ ??contactlist_menu_onkey_40: \ 0000057C 0100A0E3 MOV R0,#+1 \ ??contactlist_menu_onkey_41: \ 00000580 480100EF SWI +328 \ 00000584 500000EA B ??contactlist_menu_onkey_37 2739 else 2740 ShowMSG(1,(int)"Vibra Off"); 2741 break; 2742 case '3': 2743 if(CurrentPrivateStatus!=1) \ ??contactlist_menu_onkey_42: \ 00000588 780196E5 LDR R0,[R6, #+376] \ 0000058C 010050E3 CMP R0,#+1 \ 00000590 0400000A BEQ ??contactlist_menu_onkey_43 2744 { 2745 SetPrivateStatus(1);//Инвиз \ 00000594 0100A0E3 MOV R0,#+1 \ 00000598 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 2746 ShowMSG(1,(int)"Инвиз включен"); \ 0000059C 9C1087E2 ADD R1,R7,#+156 \ 000005A0 0400A0E1 MOV R0,R4 \ ??contactlist_menu_onkey_44: \ 000005A4 F5FFFFEA B ??contactlist_menu_onkey_41 2747 } 2748 else 2749 { 2750 SetPrivateStatus(3);//не инвиз:) \ ??contactlist_menu_onkey_43: \ 000005A8 0300A0E3 MOV R0,#+3 \ 000005AC ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 2751 ShowMSG(1,(int)"Инвиз выключен"); \ 000005B0 AC1087E2 ADD R1,R7,#+172 \ 000005B4 F0FFFFEA B ??contactlist_menu_onkey_40 2752 } 2753 break; 2754 case '4': 2755 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??contactlist_menu_onkey_45: \ 000005B8 100196E5 LDR R0,[R6, #+272] \ 000005BC 000050E3 CMP R0,#+0 \ 000005C0 0040A013 MOVNE R4,#+0 \ 000005C4 104186E5 STR R4,[R6, #+272] 2756 SUBPROC((void*)WriteDefSettings); \ 000005C8 0800A0E1 MOV R0,R8 \ 000005CC 710100EF SWI +369 2757 RefreshGUI(); \ 000005D0 960100EF SWI +406 2758 if(Is_Double_Vibra_On) \ 000005D4 100196E5 LDR R0,[R6, #+272] \ 000005D8 000050E3 CMP R0,#+0 2759 ShowMSG(1,(int)"Vibra rem On"); \ 000005DC BC108712 ADDNE R1,R7,#+188 \ 000005E0 0100A013 MOVNE R0,#+1 \ 000005E4 E5FFFF1A BNE ??contactlist_menu_onkey_41 2760 else 2761 ShowMSG(1,(int)"Vibra rem Off"); \ 000005E8 CC1087E2 ADD R1,R7,#+204 \ 000005EC E2FFFFEA B ??contactlist_menu_onkey_40 2762 break; 2763 case '5': 2764 { 2765 CLIST *cl; 2766 cl=(CLIST *)cltop; \ ??contactlist_menu_onkey_46: \ 000005F0 B44196E5 LDR R4,[R6, #+436] \ 000005F4 000054E3 CMP R4,#+0 \ 000005F8 0800000A BEQ ??contactlist_menu_onkey_47 2767 while(cl) 2768 { 2769 if(cl->log) \ ??contactlist_menu_onkey_48: \ 000005FC 740094E5 LDR R0,[R4, #+116] \ 00000600 000050E3 CMP R0,#+0 \ 00000604 0200000A BEQ ??contactlist_menu_onkey_49 2770 { 2771 FreeLOGQ(&cl->log); \ 00000608 740084E2 ADD R0,R4,#+116 \ 0000060C ........ BL FreeLOGQ 2772 cl->msg_count=0; \ 00000610 849084E5 STR R9,[R4, #+132] 2773 } 2774 cl=cl->next; \ ??contactlist_menu_onkey_49: \ 00000614 004094E5 LDR R4,[R4, #+0] 2775 } \ 00000618 000054E3 CMP R4,#+0 \ 0000061C F6FFFF1A BNE ??contactlist_menu_onkey_48 2776 2777 if(strlen(ContactT9Key)) \ ??contactlist_menu_onkey_47: \ 00000620 060085E0 ADD R0,R5,R6 \ 00000624 1B0000EF SWI +27 \ 00000628 000050E3 CMP R0,#+0 \ 0000062C 0200000A BEQ ??contactlist_menu_onkey_50 2778 ClearContactT9Key(); \ 00000630 2010A0E3 MOV R1,#+32 \ 00000634 060085E0 ADD R0,R5,R6 \ 00000638 1D0100EF SWI +285 2779 t->isactive=0; \ ??contactlist_menu_onkey_50: \ 0000063C 80908AE5 STR R9,[R10, #+128] 2780 RecountMenu(NULL,1); \ 00000640 0110A0E3 MOV R1,#+1 \ 00000644 0000A0E3 MOV R0,#+0 \ 00000648 ........ BL RecountMenu 2781 return (-1); \ 0000064C 0900E0E1 MVN R0,R9 \ 00000650 FE8FBDE8 POP {R1-R11,PC} 2782 } 2783 case '6': 2784 if(!away_m) \ ??contactlist_menu_onkey_51: \ 00000654 340196E5 LDR R0,[R6, #+308] \ 00000658 000050E3 CMP R0,#+0 \ 0000065C 0800001A BNE ??contactlist_menu_onkey_52 2785 { 2786 away_m=!away_m; \ 00000660 344186E5 STR R4,[R6, #+308] 2787 GBS_StopTimer(&away_tmr); \ 00000664 04009DE5 LDR R0,[SP, #+4] \ 00000668 440100EF SWI +324 2788 msg_away_timer=AUTO_ENGADE; \ 0000066C ........ LDR R0,??DataTable62 ;; AUTO_ENGADE \ 00000670 000090E5 LDR R0,[R0, #+0] \ 00000674 2C0186E5 STR R0,[R6, #+300] 2789 away_timer(); \ 00000678 ........ BL away_timer 2790 // ShowMSG(1,(int)"Автоответчик включен!"); 2791 InputAwayMsg(); \ 0000067C ........ BL InputAwayMsg \ 00000680 010000EA B ??contactlist_menu_onkey_53 2792 } 2793 else 2794 { 2795 msg_away_timer=0; \ ??contactlist_menu_onkey_52: \ 00000684 2C9186E5 STR R9,[R6, #+300] 2796 away_m=!away_m; \ 00000688 349186E5 STR R9,[R6, #+308] 2797 // ShowMSG(1,(int)"Автоответчик выключен!"); 2798 } 2799 UpdateCLheader(); \ ??contactlist_menu_onkey_53: \ 0000068C ........ BL UpdateCLheader \ 00000690 0D0000EA B ??contactlist_menu_onkey_37 2800 break; 2801 case '9': 2802 { 2803 2804 WSHDR *ws; 2805 ws=AllocWS(150); \ ??contactlist_menu_onkey_54: \ 00000694 9600A0E3 MOV R0,#+150 \ 00000698 250100EF SWI +293 \ 0000069C 0040A0E1 MOV R4,R0 2806 str_2ws(ws,successed_config_filename,128); \ 000006A0 ........ LDR R0,??DataTable63 ;; successed_config_filename \ 000006A4 8020A0E3 MOV R2,#+128 \ 000006A8 001090E5 LDR R1,[R0, #+0] \ 000006AC 0400A0E1 MOV R0,R4 \ 000006B0 6C0100EF SWI +364 2807 ExecuteFile(ws,0,0); \ 000006B4 0020A0E3 MOV R2,#+0 \ 000006B8 0210A0E1 MOV R1,R2 \ 000006BC 0400A0E1 MOV R0,R4 \ 000006C0 940000EF SWI +148 2808 FreeWS(ws); \ 000006C4 0400A0E1 MOV R0,R4 \ 000006C8 290100EF SWI +297 2809 } 2810 } 2811 2812 int key=msg->gbsmsg->submess; \ ??contactlist_menu_onkey_37: \ 000006CC 08009DE5 LDR R0,[SP, #+8] \ 000006D0 040090E5 LDR R0,[R0, #+4] \ 000006D4 080090E5 LDR R0,[R0, #+8] 2813 if ((key>='0')&&(key<='9')) \ 000006D8 300050E3 CMP R0,#+48 \ 000006DC 080000BA BLT ??contactlist_menu_onkey_34 \ 000006E0 3A0050E3 CMP R0,#+58 \ 000006E4 060000AA BGE ??contactlist_menu_onkey_34 2814 { 2815 ClearContactT9Key(); \ 000006E8 2010A0E3 MOV R1,#+32 \ 000006EC 060085E0 ADD R0,R5,R6 \ 000006F0 1D0100EF SWI +285 2816 UpdateCLheader(); \ 000006F4 ........ BL UpdateCLheader 2817 RecountMenu(NULL,1); \ 000006F8 0110A0E3 MOV R1,#+1 \ 000006FC 0000A0E3 MOV R0,#+0 \ 00000700 ........ BL RecountMenu 2818 } 2819 } 2820 return(0); \ ??contactlist_menu_onkey_34: \ 00000704 0000A0E3 MOV R0,#+0 \ 00000708 FE8FBDE8 POP {R1-R11,PC} ;; return \ ??contactlist_menu_onkey_14: \ 0000070C ........ DC32 isVolUpButton \ 00000710 ........ DC32 isVolDownButton \ 00000714 ........ DC32 ActionResh \ 00000718 ........ DC32 WriteDefSettings 2821 } 2822 \ In segment CODE, align 4, keep-with-next 2823 void GetOnTotalContact(int group_id,int *_onlinetotal) 2824 { 2825 CLIST *t; 2826 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable64 ;; S_ICONS + 436 \ 00000004 30002DE9 PUSH {R4,R5} 2827 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 2828 while((t=t->next)) 2829 { 2830 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 2831 { 2832 total++; 2833 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 2834 } 2835 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 2836 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 2837 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 2838 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 2839 2840 \ In segment CODE, align 4, keep-with-next 2841 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 2842 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 2843 CLIST *t; 2844 #ifdef USE_MLMENU 2845 void *item=AllocMLMenuItem(data); 2846 #else 2847 void *item=AllocMenuItem(data); 2848 #endif 2849 int icon; 2850 2851 WSHDR *ws2; 2852 #ifdef USE_MLMENU 2853 WSHDR *ws4; 2854 #endif 2855 WSHDR ws1loc, *ws1; 2856 unsigned short num[128]; 2857 ws1=CreateLocalWS(&ws1loc,num,128); 2858 #ifdef USE_MLMENU 2859 WSHDR ws3loc, *ws3; 2860 unsigned short num3[128]; 2861 ws3=CreateLocalWS(&ws3loc,num3,128); 2862 char s[64]; 2863 #endif 2864 t=FindContactByN(curitem); \ 00000008 ........ LDR R10,??DataTable65 ;; `?just_now) \ 00000060 5C0098E5 LDR R0,[R8, #+92] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0C00000A BEQ ??contactlist_menu_iconhndl_2 2871 { 2872 char *test=malloc(64); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 00B0A0E1 MOV R11,R0 2873 sprintf(test, ">> %s <<", t->name); \ 00000078 142088E2 ADD R2,R8,#+20 \ 0000007C DC108AE2 ADD R1,R10,#+220 \ 00000080 160000EF SWI +22 2874 wsprintf(ws1,percent_t,test); \ 00000084 0B20A0E1 MOV R2,R11 \ 00000088 18108AE2 ADD R1,R10,#+24 \ 0000008C 0600A0E1 MOV R0,R6 \ 00000090 240100EF SWI +292 2875 mfree(test); \ 00000094 0B00A0E1 MOV R0,R11 \ 00000098 150000EF SWI +21 \ 0000009C 030000EA B ??contactlist_menu_iconhndl_3 2876 } 2877 else 2878 wsprintf(ws1,percent_t,t->name); \ ??contactlist_menu_iconhndl_2: \ 000000A0 142088E2 ADD R2,R8,#+20 \ 000000A4 18108AE2 ADD R1,R10,#+24 \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC 240100EF SWI +292 2879 if (t->just_now) \ ??contactlist_menu_iconhndl_3: \ 000000B0 5C0098E5 LDR R0,[R8, #+92] \ 000000B4 08B0A0E3 MOV R11,#+8 \ 000000B8 E0BC8BE3 ORR R11,R11,#0xE000 \ 000000BC 000050E3 CMP R0,#+0 2880 { 2881 wsInsertChar(ws1,0x0004,1); \ 000000C0 0120A013 MOVNE R2,#+1 \ 000000C4 0410A013 MOVNE R1,#+4 \ 000000C8 0400001A BNE ??contactlist_menu_iconhndl_4 2882 wsInsertChar(ws1,0xE008,1); 2883 } 2884 else 2885 if (t->isactive) \ 000000CC 800098E5 LDR R0,[R8, #+128] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 0700000A BEQ ??contactlist_menu_iconhndl_5 2886 { 2887 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 2888 wsInsertChar(ws1,0xE008,1); \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC 0B10A0E1 MOV R1,R11 \ 000000F0 0600A0E1 MOV R0,R6 \ 000000F4 1D0000EF SWI +29 2889 } 2890 #ifdef USE_MLMENU 2891 if ((t->xtext && t->xtext[0]!=0) && (Show_XTX)) \ ??contactlist_menu_iconhndl_5: \ 000000F8 880098E5 LDR R0,[R8, #+136] \ 000000FC 0AB08BE2 ADD R11,R11,#+10 \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0000D015 LDRBNE R0,[R0, #+0] \ 00000108 00005013 CMPNE R0,#+0 \ 0000010C 1300000A BEQ ??contactlist_menu_iconhndl_6 \ 00000110 78019FE5 LDR R0,??contactlist_menu_iconhndl_7 ;; S_ICONS + 320 \ 00000114 000090E5 LDR R0,[R0, #+0] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0F00000A BEQ ??contactlist_menu_iconhndl_6 2892 { 2893 int i; 2894 zeromem(s,64); \ 00000120 4010A0E3 MOV R1,#+64 \ 00000124 820F8DE2 ADD R0,SP,#+520 \ 00000128 1D0100EF SWI +285 2895 i=t->xtext[0]; \ 0000012C 880098E5 LDR R0,[R8, #+136] \ ??contactlist_menu_iconhndl_8: \ 00000130 0020D0E5 LDRB R2,[R0, #+0] 2896 if (i>63) i=63; 2897 strncpy(s,t->xtext+1,i); \ 00000134 011080E2 ADD R1,R0,#+1 \ 00000138 820F8DE2 ADD R0,SP,#+520 \ 0000013C 400052E3 CMP R2,#+64 \ 00000140 3F20A0A3 MOVGE R2,#+63 \ 00000144 160100EF SWI +278 2898 wsprintf(ws3,"%c%t",0xE012,s); \ 00000148 823F8DE2 ADD R3,SP,#+520 \ 0000014C 0B20A0E1 MOV R2,R11 \ 00000150 E8108AE2 ADD R1,R10,#+232 \ 00000154 0700A0E1 MOV R0,R7 \ 00000158 240100EF SWI +292 \ 0000015C 0D0000EA B ??contactlist_menu_iconhndl_9 2899 } 2900 else 2901 if(t->xtext2 && t->xtext2[0]!=0) \ ??contactlist_menu_iconhndl_6: \ 00000160 8C0098E5 LDR R0,[R8, #+140] \ 00000164 000050E3 CMP R0,#+0 \ 00000168 0000D015 LDRBNE R0,[R0, #+0] \ 0000016C 00005013 CMPNE R0,#+0 \ 00000170 0400000A BEQ ??contactlist_menu_iconhndl_10 2902 { 2903 int i; 2904 zeromem(s,64); \ 00000174 4010A0E3 MOV R1,#+64 \ 00000178 820F8DE2 ADD R0,SP,#+520 \ 0000017C 1D0100EF SWI +285 2905 i=t->xtext2[0]; \ 00000180 8C0098E5 LDR R0,[R8, #+140] \ 00000184 E9FFFFEA B ??contactlist_menu_iconhndl_8 2906 if (i>63) i=63; 2907 strncpy(s,t->xtext2+1,i); 2908 wsprintf(ws3,"%c%t",0xE012,s); 2909 } 2910 else 2911 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_10: \ 00000188 0C2098E5 LDR R2,[R8, #+12] \ 0000018C 1B108AE2 ADD R1,R10,#+27 \ 00000190 0700A0E1 MOV R0,R7 \ 00000194 240100EF SWI +292 2912 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_9: \ 00000198 B605D8E1 LDRH R0,[R8, #+86] \ 0000019C ........ LDR R2,??DataTable66 ;; total_xstatuses \ 000001A0 0010A0E1 MOV R1,R0 \ 000001A4 002092E5 LDR R2,[R2, #+0] \ 000001A8 020051E1 CMP R1,R2 \ 000001AC 1B0000AA BGE ??contactlist_menu_iconhndl_11 \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 1900000A BEQ ??contactlist_menu_iconhndl_11 2913 { 2914 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 000001B8 0120A0E3 MOV R2,#+1 \ 000001BC 460F8BE2 ADD R0,R11,#+280 \ 000001C0 011080E0 ADD R1,R0,R1 \ 000001C4 0700A0E1 MOV R0,R7 \ 000001C8 1D0000EF SWI +29 \ 000001CC 130000EA B ??contactlist_menu_iconhndl_11 2915 } 2916 #endif 2917 } 2918 else 2919 { 2920 int onlinetotal[2]; 2921 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 000001D0 100098E5 LDR R0,[R8, #+16] \ 000001D4 0D10A0E1 MOV R1,SP \ 000001D8 ........ BL GetOnTotalContact 2922 #ifdef USE_MLMENU 2923 wsprintf(ws1,percent_t,t->name); \ 000001DC 142088E2 ADD R2,R8,#+20 \ 000001E0 18108AE2 ADD R1,R10,#+24 \ 000001E4 0600A0E1 MOV R0,R6 \ 000001E8 240100EF SWI +292 2924 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 000001EC 04309DE5 LDR R3,[SP, #+4] \ 000001F0 00209DE5 LDR R2,[SP, #+0] \ 000001F4 F0108AE2 ADD R1,R10,#+240 \ 000001F8 0700A0E1 MOV R0,R7 \ 000001FC 240100EF SWI +292 2925 #else 2926 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 2927 #endif 2928 if (t->state) icon++; //Модификация иконки группы \ 00000200 B405D8E1 LDRH R0,[R8, #+84] \ 00000204 000050E3 CMP R0,#+0 \ 00000208 0400000A BEQ ??contactlist_menu_iconhndl_11 \ 0000020C 019089E2 ADD R9,R9,#+1 \ 00000210 020000EA B ??contactlist_menu_iconhndl_11 2929 } 2930 } 2931 else 2932 { 2933 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 00000214 F8108AE2 ADD R1,R10,#+248 \ 00000218 0600A0E1 MOV R0,R6 \ 0000021C 240100EF SWI +292 2934 } 2935 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ ??contactlist_menu_iconhndl_11: \ 00000220 000096E5 LDR R0,[R6, #+0] \ 00000224 B010D0E1 LDRH R1,[R0, #+0] \ 00000228 0400A0E1 MOV R0,R4 \ 0000022C 980100EF SWI +408 \ 00000230 0080A0E1 MOV R8,R0 2936 wstrcpy(ws2,ws1); \ 00000234 0610A0E1 MOV R1,R6 \ 00000238 1F0100EF SWI +287 2937 2938 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 0000023C ........ LDR R0,??DataTable67 ;; S_ICONS \ 00000240 0510A0E1 MOV R1,R5 \ 00000244 092180E0 ADD R2,R0,R9, LSL #+2 \ 00000248 0400A0E1 MOV R0,R4 \ 0000024C 990100EF SWI +409 2939 #ifdef USE_MLMENU 2940 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 00000250 000097E5 LDR R0,[R7, #+0] \ 00000254 B010D0E1 LDRH R1,[R0, #+0] \ 00000258 0400A0E1 MOV R0,R4 \ 0000025C 980100EF SWI +408 \ 00000260 0060A0E1 MOV R6,R0 2941 wstrcpy(ws4,ws3); \ 00000264 0710A0E1 MOV R1,R7 \ 00000268 1F0100EF SWI +287 2942 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 0000026C 70029DE5 LDR R0,[SP, #+624] \ 00000270 0630A0E1 MOV R3,R6 \ 00000274 01002DE9 PUSH {R0} \ 00000278 0820A0E1 MOV R2,R8 \ 0000027C 0510A0E1 MOV R1,R5 \ 00000280 0400A0E1 MOV R0,R4 \ 00000284 180200EF SWI +536 2943 #else 2944 SetMenuItemText(data, item, ws2, curitem); 2945 #endif 2946 } \ 00000288 9EDF8DE2 ADD SP,SP,#+632 \ 0000028C F08FBDE8 POP {R4-R11,PC} ;; return \ ??contactlist_menu_iconhndl_7: \ 00000290 ........ DC32 S_ICONS + 320 2947 2948 //=============================================================================================== 2949 2950 int DNR_ID=0; 2951 int DNR_TRIES=3; 2952 2953 char hostname[128]; //2058 che toka 128? :) 2954 2955 int host_counter = 0; 2956 2957 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2958 const char *GetHost(int cnt, const char *str, char *buf) 2959 { 2960 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 2961 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 2962 { 2963 for(;cnt;cnt--) 2964 { 2965 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 2966 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 2967 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 2968 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 2969 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 2970 } 2971 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 2972 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 2973 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 2974 end = str; 2975 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 2987 } 2988 } 2989 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2990 int GetPort(int cnt, const char *str) 2991 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 2992 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 2993 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 2994 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 2995 { 2996 for(;cnt;cnt--) 2997 { 2998 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 2999 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 3000 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 3001 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 3002 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 3003 } 3004 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 3005 if(*str!=':') return NATICQ_PORT; \ 000000A8 ........ LDRB R0,[R1], #+1 \ 000000AC 3A0050E3 CMP R0,#+58 \ 000000B0 58009F15 LDRNE R0,??GetPort_6 ;; NATICQ_PORT \ 000000B4 00009015 LDRNE R0,[R0, #+0] \ 000000B8 1680BD18 POPNE {R1,R2,R4,PC} 3006 str++; 3007 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 3008 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 3009 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 3010 return atoi(numbuf); \ 00000104 0D00A0E1 MOV R0,SP \ 00000108 ........ BL atoi \ 0000010C 1680BDE8 POP {R1,R2,R4,PC} ;; return \ ??GetPort_6: \ 00000110 ........ DC32 NATICQ_PORT 3011 3012 } 3013 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3014 int GetHostsCount(const char *str) 3015 { 3016 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 3017 for(;cnt;cnt++) 3018 { 3019 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 3020 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 3021 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 3022 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 3023 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 3024 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 3025 } 3026 //--------------------------------------------------------------------------- 3027 \ In segment CODE, align 4, keep-with-next 3028 void create_connect(void) 3029 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3030 // static int host_counter = 0; 3031 char hostbuf[128], buf[128]; 3032 int hostport; 3033 int ***p_res=NULL; 3034 void do_reconnect(void); 3035 SOCK_ADDR sa; 3036 //Устанавливаем соединение 3037 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable82 ;; S_ICONS 3038 int err; 3039 unsigned int ip; 3040 GBS_DelTimer(&reconnect_tmr); 3041 if (!IsGPRSEnabled()) \ 00000008 D0829FE5 LDR R8,??create_connect_0+0x4 ;; `?` \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 8C4185E5 STR R4,[R5, #+396] \ 0000001C 5400A0E3 MOV R0,#+84 \ 00000020 600D80E3 ORR R0,R0,#0x1800 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 3400A0E3 MOV R0,#+52 \ 00000034 5C0D80E3 ORR R0,R0,#0x1700 \ 00000038 057080E0 ADD R7,R0,R5 \ 0000003C A70000EF SWI +167 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400001A BNE ??create_connect_1 3042 { 3043 is_gprs_online=0; \ 00000048 AC4185E5 STR R4,[R5, #+428] 3044 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C 0810A0E1 MOV R1,R8 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 3045 SMART_REDRAW(); \ 00000058 800000EA B ??create_connect_2 3046 return; 3047 } 3048 DNR_ID=0; 3049 *socklasterr()=0; 3050 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 \ ??create_connect_1: \ 0000005C 80929FE5 LDR R9,??create_connect_0+0x8 ;; NATICQ_HOST 3051 GetHost(host_counter, NATICQ_HOST, hostbuf); 3052 hostport = GetPort(host_counter, NATICQ_HOST); 3053 host_counter++; 3054 3055 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf 3056 strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 3057 strcpy(logmsg,buf); 3058 SMART_REDRAW(); 3059 3060 ip=str2ip(hostbuf); 3061 if (ip!=0xFFFFFFFF) \ 00000060 ........ LDR R10,??DataTable69 ;; do_reconnect \ 00000064 D44185E5 STR R4,[R5, #+468] \ 00000068 7C8100EF SWI +33148 \ 0000006C 004080E5 STR R4,[R0, #+0] \ 00000070 0900A0E1 MOV R0,R9 \ 00000074 ........ BL GetHostsCount \ 00000078 DC1195E5 LDR R1,[R5, #+476] \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 010050E1 CMP R0,R1 \ 00000084 DC4185B5 STRLT R4,[R5, #+476] \ 00000088 DC0195E5 LDR R0,[R5, #+476] \ 0000008C 14208DE2 ADD R2,SP,#+20 \ 00000090 0910A0E1 MOV R1,R9 \ 00000094 ........ BL GetHost \ 00000098 DC0195E5 LDR R0,[R5, #+476] \ 0000009C 0910A0E1 MOV R1,R9 \ 000000A0 ........ BL GetPort \ 000000A4 0090A0E1 MOV R9,R0 \ 000000A8 DC0195E5 LDR R0,[R5, #+476] \ 000000AC 0930A0E1 MOV R3,R9 \ 000000B0 010080E2 ADD R0,R0,#+1 \ 000000B4 DC0185E5 STR R0,[R5, #+476] \ 000000B8 14208DE2 ADD R2,SP,#+20 \ 000000BC 181088E2 ADD R1,R8,#+24 \ 000000C0 8400A0E3 MOV R0,#+132 \ 000000C4 640D80E3 ORR R0,R0,#0x1900 \ 000000C8 050080E0 ADD R0,R0,R5 \ 000000CC 160000EF SWI +22 \ 000000D0 14108DE2 ADD R1,SP,#+20 \ 000000D4 0400A0E3 MOV R0,#+4 \ 000000D8 640D80E3 ORR R0,R0,#0x1900 \ 000000DC 050080E0 ADD R0,R0,R5 \ 000000E0 1A0000EF SWI +26 \ 000000E4 94108DE2 ADD R1,SP,#+148 \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 1A0000EF SWI +26 \ 000000F0 ........ BL SMART_REDRAW \ 000000F4 14008DE2 ADD R0,SP,#+20 \ 000000F8 B70100EF SWI +439 \ 000000FC 04B0E0E1 MVN R11,R4 \ 00000100 0B0050E1 CMP R0,R11 \ 00000104 0500000A BEQ ??create_connect_3 3062 { 3063 sa.ip=ip; \ 00000108 08008DE5 STR R0,[SP, #+8] 3064 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 0000010C 2C1088E2 ADD R1,R8,#+44 \ 00000110 0700A0E1 MOV R0,R7 \ 00000114 1A0000EF SWI +26 3065 SMART_REDRAW(); \ 00000118 ........ BL SMART_REDRAW 3066 goto L_CONNECT; \ 0000011C 390000EA B ??create_connect_4 3067 } \ ??create_connect_3: \ 00000120 6D1F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 00000124 0700A0E1 MOV R0,R7 3068 strcat(logmsg,"\n"); \ 00000128 170000EF SWI +23 3069 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 0000012C 3C1088E2 ADD R1,R8,#+60 \ 00000130 0700A0E1 MOV R0,R7 \ 00000134 1A0000EF SWI +26 3070 SMART_REDRAW(); \ 00000138 ........ BL SMART_REDRAW 3071 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 0000013C 752F85E2 ADD R2,R5,#+468 \ 00000140 0D10A0E1 MOV R1,SP \ 00000144 14008DE2 ADD R0,SP,#+20 \ 00000148 B60100EF SWI +438 \ 0000014C 0030B0E1 MOVS R3,R0 3072 if (err) \ 00000150 1600000A BEQ ??create_connect_5 3073 { 3074 if ((err==0xC9)||(err==0xD6)) \ 00000154 C90053E3 CMP R3,#+201 \ 00000158 D6005313 CMPNE R3,#+214 \ 0000015C 0600001A BNE ??create_connect_6 3075 { 3076 if (DNR_ID) \ 00000160 D40195E5 LDR R0,[R5, #+468] \ 00000164 000050E3 CMP R0,#+0 \ 00000168 1000000A BEQ ??create_connect_5 3077 { 3078 host_counter--; \ 0000016C DC0195E5 LDR R0,[R5, #+476] \ 00000170 010040E2 SUB R0,R0,#+1 \ 00000174 DC0185E5 STR R0,[R5, #+476] 3079 return; //Ждем готовности DNR \ 00000178 390000EA B ??create_connect_7 3080 } 3081 } 3082 else 3083 { 3084 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 0000017C 482088E2 ADD R2,R8,#+72 \ 00000180 FF10A0E3 MOV R1,#+255 \ 00000184 0700A0E1 MOV R0,R7 \ 00000188 1B0100EF SWI +283 3085 SMART_REDRAW(); \ 0000018C ........ BL SMART_REDRAW 3086 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 00000190 ........ LDR R0,??DataTable70 ;; RECONNECT_TIME \ 00000194 0A20A0E1 MOV R2,R10 \ 00000198 000090E5 LDR R0,[R0, #+0] \ 0000019C D830A0E3 MOV R3,#+216 \ 000001A0 930001E0 MUL R1,R3,R0 \ 000001A4 0600A0E1 MOV R0,R6 \ 000001A8 4D0000EF SWI +77 3087 return; \ 000001AC 2C0000EA B ??create_connect_7 3088 } 3089 } 3090 if (p_res) \ ??create_connect_5: \ 000001B0 00009DE5 LDR R0,[SP, #+0] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 3D00000A BEQ ??create_connect_9 3091 { 3092 if (p_res[3]) \ 000001BC 0C0090E5 LDR R0,[R0, #+12] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 4200000A BEQ ??create_connect_10 3093 { 3094 strcpy(logmsg,buf); \ 000001C8 94108DE2 ADD R1,SP,#+148 \ 000001CC 0700A0E1 MOV R0,R7 \ 000001D0 1A0000EF SWI +26 3095 strcat(logmsg,"\n"); \ 000001D4 401F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 000001D8 0700A0E1 MOV R0,R7 \ 000001DC 170000EF SWI +23 3096 strcpy(logmsg,LG_GRDNROK); \ 000001E0 581088E2 ADD R1,R8,#+88 \ 000001E4 0700A0E1 MOV R0,R7 \ 000001E8 1A0000EF SWI +26 3097 SMART_REDRAW(); \ 000001EC ........ BL SMART_REDRAW 3098 DNR_TRIES=0; \ 000001F0 D84185E5 STR R4,[R5, #+472] 3099 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] 3100 L_CONNECT: 3101 sock=socket(1,1,0); \ ??create_connect_4: \ 00000208 0020A0E3 MOV R2,#+0 \ 0000020C 0110A0E3 MOV R1,#+1 \ 00000210 0100A0E1 MOV R0,R1 \ 00000214 730100EF SWI +371 \ 00000218 900185E5 STR R0,[R5, #+400] 3102 if (sock!=-1) \ 0000021C 0B0050E1 CMP R0,R11 \ 00000220 1A00000A BEQ ??create_connect_11 3103 { 3104 sa.family=1; \ 00000224 0170A0E3 MOV R7,#+1 \ 00000228 B470CDE1 STRH R7,[SP, #+4] 3105 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] 3106 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 3107 if (connect(sock,&sa,sizeof(sa))!=-1) \ 0000023C 900195E5 LDR R0,[R5, #+400] \ 00000240 1020A0E3 MOV R2,#+16 \ 00000244 04108DE2 ADD R1,SP,#+4 \ 00000248 740100EF SWI +372 \ 0000024C 0B0050E1 CMP R0,R11 \ 00000250 0500000A BEQ ??create_connect_12 3108 { 3109 connect_state=1; \ 00000254 8C7185E5 STR R7,[R5, #+396] 3110 TOTALRECEIVED=0; \ 00000258 944185E5 STR R4,[R5, #+404] 3111 TOTALSENDED=0; \ 0000025C 984185E5 STR R4,[R5, #+408] 3112 SMART_REDRAW(); \ ??create_connect_2: \ 00000260 ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000264 45DF8DE2 ADD SP,SP,#+276 \ 00000268 F08FBDE8 POP {R4-R11,PC} 3113 } 3114 else 3115 { 3116 closesocket(sock); \ ??create_connect_12: \ 0000026C 900195E5 LDR R0,[R5, #+400] \ 00000270 760100EF SWI +374 3117 sock=-1; \ 00000274 90B185E5 STR R11,[R5, #+400] 3118 LockSched(); \ 00000278 460100EF SWI +326 3119 ShowMSG(1,(int)LG_MSGCANTCONN); \ 0000027C 701088E2 ADD R1,R8,#+112 \ 00000280 0100A0E3 MOV R0,#+1 \ 00000284 480100EF SWI +328 3120 UnlockSched(); \ 00000288 470100EF SWI +327 3121 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 0000028C BFFFFFEA B ??create_connect_8 3122 3123 } 3124 } 3125 else 3126 { 3127 LockSched(); \ ??create_connect_11: \ 00000290 460100EF SWI +326 3128 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 00000294 8C1088E2 ADD R1,R8,#+140 \ 00000298 0100A0E3 MOV R0,#+1 \ 0000029C 480100EF SWI +328 3129 UnlockSched(); \ 000002A0 470100EF SWI +327 3130 //Не осилили создания сокета, закрываем GPRS-сессию 3131 GPRS_OnOff(0,1); \ 000002A4 0110A0E3 MOV R1,#+1 \ 000002A8 0000A0E3 MOV R0,#+0 \ 000002AC 8E0100EF SWI +398 \ 000002B0 EBFFFFEA B ??create_connect_7 3132 } 3133 } 3134 } 3135 else 3136 { 3137 DNR_TRIES--; \ ??create_connect_9: \ 000002B4 D80195E5 LDR R0,[R5, #+472] \ 000002B8 010040E2 SUB R0,R0,#+1 \ 000002BC D80185E5 STR R0,[R5, #+472] 3138 LockSched(); \ 000002C0 460100EF SWI +326 3139 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002C4 B81088E2 ADD R1,R8,#+184 \ 000002C8 0100A0E3 MOV R0,#+1 \ 000002CC 480100EF SWI +328 3140 UnlockSched(); \ 000002D0 470100EF SWI +327 \ ??create_connect_10: \ 000002D4 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002D8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 000002DC 0A000000 DC8 "\n",+0,+0 \ 000002E0 ........ DC32 `?` \ 000002E4 ........ DC32 NATICQ_HOST 3141 } 3142 } 3143 3144 #ifdef SEND_TIMER 3145 GBSTMR send_tmr; 3146 #endif 3147 \ In segment CODE, align 4, keep-with-next 3148 void ClearSendQ(void) 3149 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 3150 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable82 ;; S_ICONS \ 00000008 A80194E5 LDR R0,[R4, #+424] \ 0000000C 150000EF SWI +21 3151 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 A80184E5 STR R0,[R4, #+424] 3152 sendq_l=NULL; \ 00000018 A40184E5 STR R0,[R4, #+420] 3153 #ifdef SEND_TIMER 3154 GBS_DelTimer(&send_tmr); 3155 #endif 3156 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 3157 \ In segment CODE, align 4, keep-with-next 3158 void end_socket(void) 3159 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 3160 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable82 ;; S_ICONS \ 00000008 900194E5 LDR R0,[R4, #+400] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 3161 { 3162 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 3163 closesocket(sock); \ 0000001C 900194E5 LDR R0,[R4, #+400] \ 00000020 760100EF SWI +374 3164 } 3165 #ifdef SEND_TIMER 3166 GBS_DelTimer(&send_tmr); 3167 #endif 3168 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 3169 3170 #ifdef SEND_TIMER 3171 static void resend(void) 3172 { 3173 void SendAnswer(int dummy, TPKT *p); 3174 SUBPROC((void*)SendAnswer,0,0); 3175 } 3176 #endif 3177 \ In segment CODE, align 4, keep-with-next 3178 void SendAnswer(int dummy, TPKT *p) 3179 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 3180 int i; 3181 int j; 3182 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable82 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 8C0194E5 LDR R0,[R4, #+396] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 3183 { 3184 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 3185 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 3186 } 3187 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 3188 { 3189 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 3190 TOTALSENDED+=j; \ 00000034 980194E5 LDR R0,[R4, #+408] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 980184E5 STR R0,[R4, #+408] 3191 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 A00194E5 LDR R0,[R4, #+416] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 A00184E5 STR R0,[R4, #+416] 3192 //Проверяем, не надо ли добавить в очередь 3193 if (sendq_p) \ 0000004C A80194E5 LDR R0,[R4, #+424] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 3194 { 3195 //Есть очередь, добавляем в нее 3196 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 A41194E5 LDR R1,[R4, #+420] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 A80184E5 STR R0,[R4, #+424] 3197 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 A40194E5 LDR R0,[R4, #+420] \ 0000006C A83194E5 LDR R3,[R4, #+424] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 3198 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 3199 sendq_l+=j; \ 00000088 A40194E5 LDR R0,[R4, #+420] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 A40184E5 STR R0,[R4, #+420] 3200 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 3201 } 3202 sendq_p=p; \ ??SendAnswer_2: \ 00000098 A86184E5 STR R6,[R4, #+424] 3203 sendq_l=j; \ 0000009C A45184E5 STR R5,[R4, #+420] \ 000000A0 080000EA B ??SendAnswer_1 3204 } 3205 //Отправляем уже существующее в очереди 3206 while((i=sendq_l)!=0) 3207 { 3208 if (i>0x400) i=0x400; 3209 j=send(sock,(void *)sendq_p,i,0); 3210 snprintf(logmsg,255,"send res %d",j); 3211 SMART_REDRAW(); 3212 if (j<0) 3213 { 3214 j=*socklasterr(); 3215 if ((j==0xC9)||(j==0xD6)) 3216 { 3217 //Передали что хотели 3218 strcpy(logmsg,"Send delayed..."); 3219 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 3220 } 3221 else 3222 { 3223 //Ошибка 3224 LockSched(); 3225 ShowMSG(1,(int)"Send error!"); 3226 UnlockSched(); 3227 end_socket(); 3228 return; 3229 } 3230 } 3231 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 A40194E5 LDR R0,[R4, #+420] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC A42184E5 STR R2,[R4, #+420] \ 000000B0 A80194E5 LDR R0,[R4, #+424] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 3232 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 900194E5 LDR R0,[R4, #+400] \ 000000F0 407EA0A3 MOVGE R7,#+1024 \ 000000F4 0030A0E3 MOV R3,#+0 \ 000000F8 0720A0E1 MOV R2,R7 \ 000000FC 790100EF SWI +377 \ 00000100 0050A0E1 MOV R5,R0 \ 00000104 3400A0E3 MOV R0,#+52 \ 00000108 5C0D80E3 ORR R0,R0,#0x1700 \ 0000010C 048080E0 ADD R8,R0,R4 \ 00000110 0530A0E1 MOV R3,R5 \ 00000114 0920A0E1 MOV R2,R9 \ 00000118 FF10A0E3 MOV R1,#+255 \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 1B0100EF SWI +283 \ 00000124 ........ BL SMART_REDRAW \ 00000128 000055E3 CMP R5,#+0 \ 0000012C DCFFFF5A BPL ??SendAnswer_3 \ 00000130 7C8100EF SWI +33148 \ 00000134 005090E5 LDR R5,[R0, #+0] \ 00000138 C90055E3 CMP R5,#+201 \ 0000013C D6005513 CMPNE R5,#+214 \ 00000140 0300001A BNE ??SendAnswer_6 \ 00000144 0C1089E2 ADD R1,R9,#+12 \ 00000148 0800A0E1 MOV R0,R8 \ 0000014C 1A0000EF SWI +26 \ 00000150 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 00000154 460100EF SWI +326 \ 00000158 1C1089E2 ADD R1,R9,#+28 \ 0000015C 0100A0E3 MOV R0,#+1 \ 00000160 480100EF SWI +328 \ 00000164 470100EF SWI +327 \ 00000168 ........ BL end_socket \ 0000016C F083BDE8 POP {R4-R9,PC} 3241 } 3242 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 3243 sendq_p=NULL; \ 00000178 A86184E5 STR R6,[R4, #+424] 3244 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 3245 3246 \ In segment CODE, align 4, keep-with-next 3247 void send_login(int dummy, TPKT *p) 3248 { 3249 connect_state=2; 3250 char rev[16]; 3251 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 3252 //А Вова будет банить на форуме! 3253 snprintf(rev,9,"Sie_%04d",__SVN_REVISION__); \ send_login: \ 00000000 88209FE5 LDR R2,??send_login_0 ;; `?` \ 00000004 F0402DE9 PUSH {R4-R7,LR} \ 00000008 ........ LDR R6,??DataTable82 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 8C0186E5 STR R0,[R6, #+396] \ 00000020 0A30A0E3 MOV R3,#+10 \ 00000024 803E83E3 ORR R3,R3,#0x800 \ 00000028 0910A0E3 MOV R1,#+9 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 1B0100EF SWI +283 3254 3255 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 3256 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable76 ;; UIN 3257 p2->pkt.type=T_SETCLIENT_ID; 3258 p2->pkt.data_len=8; 3259 memcpy(p2->data,rev,8); \ 00000044 0820A0E3 MOV R2,#+8 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 000087E5 STR R0,[R7, #+0] \ 00000054 2000A0E3 MOV R0,#+32 \ 00000058 B400C7E1 STRH R0,[R7, #+4] \ 0000005C 0800A0E3 MOV R0,#+8 \ 00000060 B600C7E1 STRH R0,[R7, #+6] \ 00000064 080087E2 ADD R0,R7,#+8 \ 00000068 1E0100EF SWI +286 3260 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 3261 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 3262 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 880186E5 STR R0,[R6, #+392] 3263 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 3264 \ In segment CODE, align 4, keep-with-next 3265 void do_ping(void) 3266 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 3267 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 3268 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable76 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 3269 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 3270 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3271 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3272 } 3273 \ In segment CODE, align 4, keep-with-next 3274 void SendMSGACK(int i) 3275 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3276 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3277 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 3278 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3279 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3280 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3281 } 3282 \ In segment CODE, align 4, keep-with-next 3283 void RequestXText(unsigned int uin) 3284 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3285 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3286 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 3287 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3288 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3289 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable77 ;; SendAnswer \ 0000002C 710100EF SWI +369 3290 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 3291 3292 extern int main2_count; 3293 3294 int ping_time; 3295 //#ifdef EVILFOX 3296 //#else 3297 3298 //#endif 3299 char I_UIN[9]; 3300 \ In segment CODE, align 4, keep-with-next 3301 void get_answer(void) 3302 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3303 void *p; 3304 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable82 ;; S_ICONS \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 3305 int j; 3306 int n; 3307 char rb[1024]; 3308 char *rp=rb; 3309 if (connect_state<2) return; \ 00000010 8C0195E5 LDR R0,[R5, #+396] \ 00000014 888195E5 LDR R8,[R5, #+392] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 4B0100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 4901000A BEQ ??get_answer_1 3310 if (i==EOP) return; 3311 j=recv(sock,rb,sizeof(rb),0); \ 00000030 900195E5 LDR R0,[R5, #+400] \ 00000034 0030A0E3 MOV R3,#+0 \ 00000038 402EA0E3 MOV R2,#+1024 \ 0000003C 780100EF SWI +376 \ 00000040 0060A0E1 MOV R6,R0 \ 00000044 0990A0E3 MOV R9,#+9 \ 00000048 429C89E3 ORR R9,R9,#0x4200 \ 0000004C 0E0000EA B ??get_answer_2 3312 while(j>0) 3313 { 3314 if (i<0) 3315 { 3316 //Принимаем заголовок 3317 n=-i; //Требуемое количество байт 3318 if (j=0) 3325 { 3326 //Принимаем тельце ;) 3327 n=RXbuf.pkt.data_len; //Всего в тельце 3328 if (n>16383) 3329 { 3330 //Слишком много 3331 strcpy(logmsg,LG_GRBADPACKET); 3332 end_socket(); 3333 RXstate=EOP; 3334 return; 3335 } 3336 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 3337 if (n>0) 3338 { 3339 if (jhour*3600+pt->min*60+pt->sec; 3482 s1-=s2; 3483 if (s1<0) s1+=86400; 3484 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 3485 sprintf(PINGO, "Ping: %dsec",s1); 3486 LockSched(); 3487 if(janis==1) 3488 { 3489 ShowMSG(1,(int)logmsg); 3490 Play(pingsnd); 3491 janis=0; 3492 } 3493 else 3494 { 3495 if(ping_time==0) 3496 { 3497 ping_time=ping_time_config; 3498 Play(pingsnd); 3499 } 3500 else 3501 ping_time--; 3502 } 3503 UnlockSched(); 3504 } 3505 break; 3506 case T_LASTPRIVACY: 3507 n=i+sizeof(PKT); \ ??get_answer_3: \ 00000050 0040A0E1 MOV R4,R0 3508 p=malloc(n); \ ??get_answer_4: \ 00000054 140000EF SWI +20 \ 00000058 00B0A0E1 MOV R11,R0 3509 memcpy(p,&RXbuf,n); \ 0000005C 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 00000060 0710A0E1 MOV R1,R7 \ 00000064 1E0100EF SWI +286 3510 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000068 900195E5 LDR R0,[R5, #+400] \ 0000006C 0B30A0E1 MOV R3,R11 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0020A0E3 MOV R2,#+0 \ 00000078 0810A0E1 MOV R1,R8 \ 0000007C 0900A0E1 MOV R0,R9 \ 00000080 000100EF SWI +256 \ ??get_answer_6: \ 00000084 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 3511 break; 3512 } 3513 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000088 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 0000008C 010056E3 CMP R6,#+1 \ 00000090 2F0100BA BLT ??get_answer_8 \ 00000094 CC749FE5 LDR R7,??get_answer_9+0x4 ;; RXbuf \ 00000098 000058E3 CMP R8,#+0 \ 0000009C 0C00005A BPL ??get_answer_10 \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 004068E2 RSB R4,R8,#+0 \ 000000A8 040056E1 CMP R6,R4 \ 000000AC 0640A0B1 MOVLT R4,R6 \ 000000B0 0420A0E1 MOV R2,R4 \ 000000B4 070088E0 ADD R0,R8,R7 \ 000000B8 080080E2 ADD R0,R0,#+8 \ 000000BC 1E0100EF SWI +286 \ 000000C0 00109DE5 LDR R1,[SP, #+0] \ 000000C4 088084E0 ADD R8,R4,R8 \ 000000C8 046046E0 SUB R6,R6,R4 \ 000000CC 011084E0 ADD R1,R4,R1 \ 000000D0 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 EBFFFF4A BMI ??get_answer_2 \ 000000DC B640D7E1 LDRH R4,[R7, #+6] \ 000000E0 3400A0E3 MOV R0,#+52 \ 000000E4 5C0D80E3 ORR R0,R0,#0x1700 \ 000000E8 05A080E0 ADD R10,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 70149FE5 LDR R1,??get_answer_9+0x8 ;; `?text_l) \ 00000030 0060A0E3 MOV R6,#+0 \ 00000034 009041E0 SUB R9,R1,R0 \ 00000038 0800A0E1 MOV R0,R8 \ 0000003C 1B0000EF SWI +27 \ 00000040 000059E1 CMP R9,R0 \ 00000044 0800003A BCC ??AddToMain_1 3556 { 3557 /* 3558 char *du=malloc(text_l); 3559 strncpy(du,si,text_l); 3560 sprintf(de,"%s%s",du,"..."); 3561 mfree(du); 3562 } 3563 */ 3564 while(text_l!=0) 3565 { 3566 de[iz]=si[iz]; 3567 iz++; 3568 text_l--; 3569 } 3570 if(use_cutter) 3571 { 3572 de[iz]='.'; 3573 iz++; 3574 de[iz]='.'; 3575 iz++; 3576 de[iz]='.'; 3577 iz++; 3578 } 3579 de[iz]='\0'; 3580 } 3581 else 3582 strcpy(de, si); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 3583 iz=0; \ ??AddToMain_2: \ 00000054 0070A0E3 MOV R7,#+0 \ 00000058 1A0000EA B ??AddToMain_3 \ ??AddToMain_4: \ 0000005C 0810D7E7 LDRB R1,[R7, +R8] \ 00000060 019049E2 SUB R9,R9,#+1 \ 00000064 0510C7E7 STRB R1,[R7, +R5] \ 00000068 0070A0E1 MOV R7,R0 \ ??AddToMain_1: \ 0000006C 010087E2 ADD R0,R7,#+1 \ 00000070 000059E3 CMP R9,#+0 \ 00000074 F8FFFF1A BNE ??AddToMain_4 \ 00000078 AC119FE5 LDR R1,??AddToMain_0+0x4 ;; use_cutter \ 0000007C 001091E5 LDR R1,[R1, #+0] \ 00000080 000051E3 CMP R1,#+0 \ 00000084 0500000A BEQ ??AddToMain_5 \ 00000088 2E10A0E3 MOV R1,#+46 \ 0000008C 0510C7E7 STRB R1,[R7, +R5] \ 00000090 0510C0E7 STRB R1,[R0, +R5] \ 00000094 010080E2 ADD R0,R0,#+1 \ 00000098 0510C0E7 STRB R1,[R0, +R5] \ 0000009C 017080E2 ADD R7,R0,#+1 \ ??AddToMain_5: \ 000000A0 0560C7E7 STRB R6,[R7, +R5] \ 000000A4 EAFFFFEA B ??AddToMain_2 3584 while(strlen(de)!=iz) 3585 { 3586 // if(d[i]==0x2A) d[i]=0x20; 3587 // if(d[i]==0x27) d[i]=0x20; 3588 // if(d[i]==0x22) d[i]=0x20; 3589 // if(d[i]==0x26) d[i]=0x20; 3590 // if(d[i]==0x3D) d[i]=0x20; 3591 // if(d[i]==0x3C) d[i]=0x20; 3592 // if(d[i]==0x3E) d[i]=0x20; 3593 // if(d[i]==0x7B) d[i]=0x20; 3594 // if(d[i]==0x7D) d[i]=0x20; 3595 // if(d[i]==0x5B) d[i]=0x20; 3596 // if(d[i]==0x5D) d[i]=0x20; 3597 // if(d[i]==0x23) d[i]=0x20; 3598 // if(d[i]==0x2F) d[i]=0x20; 3599 // if(d[i]==0x5C) d[i]=0x20; 3600 // if(d[i]==0x7E) d[i]=0x20; 3601 // if(d[i]==0x5E) d[i]=0x20; 3602 // if(d[i]==0xAC) d[i]=0x20; 3603 // if(d[i]==0xA3) d[i]=0x20; 3604 // if(d[i]==0x24) d[i]=0x20; 3605 // if(d[i]==0xA5) d[i]=0x20; 3606 if(de[iz]==0x0D) de[iz]=0x20; \ ??AddToMain_6: \ 000000A8 0510D7E7 LDRB R1,[R7, +R5] \ 000000AC 2000A0E3 MOV R0,#+32 \ 000000B0 0D0051E3 CMP R1,#+13 \ 000000B4 0500C707 STRBEQ R0,[R7, +R5] 3607 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 3608 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 3609 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 3610 de[iz]='\0'; 3611 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable81 ;; main_count \ 000000DC 0560C7E7 STRB R6,[R7, +R5] \ 000000E0 ........ LDR R6,??DataTable82 ;; S_ICONS \ 000000E4 44719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E8 1010A0E3 MOV R1,#+16 \ 000000EC 681D81E3 ORR R1,R1,#0x1A00 \ 000000F0 061081E0 ADD R1,R1,R6 \ 000000F4 04108DE5 STR R1,[SP, #+4] \ 000000F8 000098E5 LDR R0,[R8, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0400001A BNE ??AddToMain_7 \ 00000104 04009DE5 LDR R0,[SP, #+4] \ 00000108 0530A0E1 MOV R3,R5 \ 0000010C 0420A0E1 MOV R2,R4 \ 00000110 0710A0E1 MOV R1,R7 \ 00000114 160000EF SWI +22 3612 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000118 691D86E2 ADD R1,R6,#+6720 \ 0000011C 00108DE5 STR R1,[SP, #+0] \ 00000120 000098E5 LDR R0,[R8, #+0] \ 00000124 010050E3 CMP R0,#+1 \ 00000128 0400001A BNE ??AddToMain_8 \ 0000012C 00009DE5 LDR R0,[SP, #+0] \ 00000130 0530A0E1 MOV R3,R5 \ 00000134 0420A0E1 MOV R2,R4 \ 00000138 0710A0E1 MOV R1,R7 \ 0000013C 160000EF SWI +22 3613 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000140 7000A0E3 MOV R0,#+112 \ 00000144 680D80E3 ORR R0,R0,#0x1A00 \ 00000148 069080E0 ADD R9,R0,R6 \ 0000014C 000098E5 LDR R0,[R8, #+0] \ 00000150 020050E3 CMP R0,#+2 \ 00000154 0400001A BNE ??AddToMain_9 \ 00000158 0530A0E1 MOV R3,R5 \ 0000015C 0420A0E1 MOV R2,R4 \ 00000160 0710A0E1 MOV R1,R7 \ 00000164 0900A0E1 MOV R0,R9 \ 00000168 160000EF SWI +22 3614 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 0000016C A000A0E3 MOV R0,#+160 \ 00000170 680D80E3 ORR R0,R0,#0x1A00 \ 00000174 06A080E0 ADD R10,R0,R6 \ 00000178 000098E5 LDR R0,[R8, #+0] \ 0000017C 030050E3 CMP R0,#+3 \ 00000180 0400001A BNE ??AddToMain_10 \ 00000184 0530A0E1 MOV R3,R5 \ 00000188 0420A0E1 MOV R2,R4 \ 0000018C 0710A0E1 MOV R1,R7 \ 00000190 0A00A0E1 MOV R0,R10 \ 00000194 160000EF SWI +22 3615 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000198 D000A0E3 MOV R0,#+208 \ 0000019C 680D80E3 ORR R0,R0,#0x1A00 \ 000001A0 06B080E0 ADD R11,R0,R6 \ 000001A4 000098E5 LDR R0,[R8, #+0] \ 000001A8 040050E3 CMP R0,#+4 \ 000001AC 0400001A BNE ??AddToMain_11 \ 000001B0 0530A0E1 MOV R3,R5 \ 000001B4 0420A0E1 MOV R2,R4 \ 000001B8 0710A0E1 MOV R1,R7 \ 000001BC 0B00A0E1 MOV R0,R11 \ 000001C0 160000EF SWI +22 3616 if(main_count>4) \ ??AddToMain_11: \ 000001C4 000098E5 LDR R0,[R8, #+0] \ 000001C8 050050E3 CMP R0,#+5 \ 000001CC 100000BA BLT ??AddToMain_12 3617 { 3618 strcpy(a_txt, s_txt); \ 000001D0 00109DE5 LDR R1,[SP, #+0] \ 000001D4 04009DE5 LDR R0,[SP, #+4] \ 000001D8 1A0000EF SWI +26 3619 strcpy(s_txt, d_txt); \ 000001DC 00009DE5 LDR R0,[SP, #+0] \ 000001E0 0910A0E1 MOV R1,R9 \ 000001E4 1A0000EF SWI +26 3620 strcpy(d_txt, f_txt); \ 000001E8 0A10A0E1 MOV R1,R10 \ 000001EC 0900A0E1 MOV R0,R9 \ 000001F0 1A0000EF SWI +26 3621 strcpy(f_txt, g_txt); \ 000001F4 0B10A0E1 MOV R1,R11 \ 000001F8 0A00A0E1 MOV R0,R10 \ 000001FC 1A0000EF SWI +26 3622 sprintf(g_txt, "%s: %s", nameu,de); \ 00000200 0530A0E1 MOV R3,R5 \ 00000204 0420A0E1 MOV R2,R4 \ 00000208 0710A0E1 MOV R1,R7 \ 0000020C 0B00A0E1 MOV R0,R11 \ 00000210 160000EF SWI +22 3623 } 3624 mfree(de); \ ??AddToMain_12: \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 150000EF SWI +21 3625 main_d=1; \ 0000021C 0100A0E3 MOV R0,#+1 \ 00000220 E40086E5 STR R0,[R6, #+228] 3626 } \ 00000224 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000228 ........ DC32 main_lenght \ 0000022C ........ DC32 use_cutter \ 00000230 ........ DC32 `?` 3627 3628 //======================add to main info================ 3629 3630 int NEW_MSG; 3631 //int LOG_TIME_CONN=0;//not log online/offline time 3632 \ In segment CODE, align 4, keep-with-next 3633 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 3634 { \ AddStringToLog: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 90D04DE2 SUB SP,SP,#+144 \ 00000008 B0709DE5 LDR R7,[SP, #+176] \ 0000000C B4909DE5 LDR R9,[SP, #+180] \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0280A0E1 MOV R8,R2 \ 0000001C 0360A0E1 MOV R6,R3 3635 char hs[128], *lastX; 3636 TTime tt; 3637 TDate d; 3638 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 3639 int i; 3640 3641 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 3642 if ( code==3 && NOT_LOG_SAME_XTXT ) \ 0000002C 030055E3 CMP R5,#+3 \ 00000030 1600001A BNE ??AddStringToLog_0 \ 00000034 F4019FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 1200000A BEQ ??AddStringToLog_0 3643 { 3644 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 01002DE9 PUSH {R0} \ 0000009C 1000DDE5 LDRB R0,[SP, #+16] \ 000000A0 0A20A0E1 MOV R2,R10 \ 000000A4 7F10A0E3 MOV R1,#+127 \ 000000A8 01002DE9 PUSH {R0} \ 000000AC 1500DDE5 LDRB R0,[SP, #+21] \ 000000B0 01002DE9 PUSH {R0} \ 000000B4 0D00DDE5 LDRB R0,[SP, #+13] \ 000000B8 01002DE9 PUSH {R0} \ 000000BC 1030DDE5 LDRB R3,[SP, #+16] \ 000000C0 20008DE2 ADD R0,SP,#+32 \ 000000C4 1B0100EF SWI +283 3651 if(code != 3 || ((LOG_XTXT) && (flag)))//Нужно сохранять иксстатус \ 000000C8 030055E3 CMP R5,#+3 \ 000000CC 10D08DE2 ADD SP,SP,#+16 \ 000000D0 0400001A BNE ??AddStringToLog_4 \ 000000D4 5C019FE5 LDR R0,??AddStringToLog_1+0x8 ;; LOG_XTXT \ 000000D8 000090E5 LDR R0,[R0, #+0] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 00005913 CMPNE R9,#+0 \ 000000E4 0400000A BEQ ??AddStringToLog_5 3652 Add2History(t, hs, s, code); \ ??AddStringToLog_4: \ 000000E8 0530A0E1 MOV R3,R5 \ 000000EC 0820A0E1 MOV R2,R8 \ 000000F0 10108DE2 ADD R1,SP,#+16 \ 000000F4 0400A0E1 MOV R0,R4 \ 000000F8 ........ _BLF Add2History,??Add2History??rA 3653 3654 // ShowMSG(1,(int)t); 3655 // ShowMSG(1,(int)s); // Запись хистори 3656 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000FC 0800A0E1 MOV R0,R8 \ 00000100 ........ BL NewLOGQ \ 00000104 0080A0E1 MOV R8,R0 3657 snprintf(p->hdr,79,"%02d:%02d %02d-%02d %s:",tt.hour,tt.min,d.day,d.month,name); \ 00000108 40002DE9 PUSH {R6} \ 0000010C 1000DDE5 LDRB R0,[SP, #+16] \ 00000110 1C208AE2 ADD R2,R10,#+28 \ 00000114 4F10A0E3 MOV R1,#+79 \ 00000118 01002DE9 PUSH {R0} \ 0000011C 1500DDE5 LDRB R0,[SP, #+21] \ 00000120 01002DE9 PUSH {R0} \ 00000124 0D00DDE5 LDRB R0,[SP, #+13] \ 00000128 01002DE9 PUSH {R0} \ 0000012C 1030DDE5 LDRB R3,[SP, #+16] \ 00000130 100088E2 ADD R0,R8,#+16 \ 00000134 1B0100EF SWI +283 3658 p->type=code; \ 00000138 0C5088E5 STR R5,[R8, #+12] 3659 p->ID=IDforACK; //0-32767 \ 0000013C 087088E5 STR R7,[R8, #+8] 3660 i=AddLOGQ(&t->log,p); \ 00000140 0810A0E1 MOV R1,R8 \ 00000144 740084E2 ADD R0,R4,#+116 \ 00000148 ........ BL AddLOGQ \ 0000014C 0060A0E1 MOV R6,R0 \ 00000150 150056E3 CMP R6,#+21 \ 00000154 10D08DE2 ADD SP,SP,#+16 \ 00000158 090000BA BLT ??AddStringToLog_6 3661 while(i>MAXLOGMSG) 3662 { 3663 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 0000015C 7C0094E5 LDR R0,[R4, #+124] \ 00000160 741094E5 LDR R1,[R4, #+116] 3664 RemoveLOGQ(&t->log,t->log); 3665 i--; \ 00000164 016046E2 SUB R6,R6,#+1 \ 00000168 000051E1 CMP R1,R0 \ 0000016C 00009005 LDREQ R0,[R0, #+0] \ 00000170 7C008405 STREQ R0,[R4, #+124] \ 00000174 740084E2 ADD R0,R4,#+116 \ 00000178 ........ BL RemoveLOGQ 3666 } \ 0000017C 150056E3 CMP R6,#+21 \ 00000180 F5FFFFAA BGE ??AddStringToLog_7 3667 t->msg_count=i; \ ??AddStringToLog_6: \ 00000184 846084E5 STR R6,[R4, #+132] 3668 if (!t->last_log) t->last_log=p; \ 00000188 7C0094E5 LDR R0,[R4, #+124] 3669 if (code==3) \ 0000018C ........ LDR R6,??DataTable116 ;; S_ICONS \ 00000190 000050E3 CMP R0,#+0 \ 00000194 7C808405 STREQ R8,[R4, #+124] \ 00000198 030055E3 CMP R5,#+3 \ 0000019C 0D00001A BNE ??AddStringToLog_8 3670 { 3671 if (edchat_id) \ 000001A0 C00196E5 LDR R0,[R6, #+448] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 1C00000A BEQ ??AddStringToLog_9 3672 { 3673 void *data=FindGUIbyId(edchat_id,NULL); \ 000001AC C00196E5 LDR R0,[R6, #+448] \ 000001B0 0010A0E3 MOV R1,#+0 \ 000001B4 090200EF SWI +521 3674 if (data) \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 1700000A BEQ ??AddStringToLog_9 3675 { 3676 EDCHAT_STRUCT *ed_struct; 3677 ed_struct=EDIT_GetUserPointer(data); \ 000001C0 DF0100EF SWI +479 3678 if (ed_struct) \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 1400000A BEQ ??AddStringToLog_9 3679 { 3680 if (ed_struct->ed_contact==t) \ 000001CC 000090E5 LDR R0,[R0, #+0] \ 000001D0 040050E1 CMP R0,R4 \ 000001D4 1100001A BNE ??AddStringToLog_9 3681 { 3682 goto L_INC; 3683 } 3684 } 3685 } 3686 } 3687 goto L_NOINC; 3688 } 3689 L_INC: 3690 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001D8 640094E5 LDR R0,[R4, #+100] \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 B0019605 LDREQ R0,[R6, #+432] \ 000001E4 01008002 ADDEQ R0,R0,#+1 \ 000001E8 B0018605 STREQ R0,[R6, #+432] 3691 if(NEW_MSG==1) \ 000001EC E40196E5 LDR R0,[R6, #+484] \ 000001F0 010050E3 CMP R0,#+1 \ 000001F4 0700001A BNE ??AddStringToLog_10 3692 { 3693 t->unread_msg++; \ 000001F8 680094E5 LDR R0,[R4, #+104] \ 000001FC 010080E2 ADD R0,R0,#+1 \ 00000200 680084E5 STR R0,[R4, #+104] 3694 total_unread2++; \ 00000204 140196E5 LDR R0,[R6, #+276] \ 00000208 010080E2 ADD R0,R0,#+1 \ 0000020C 140186E5 STR R0,[R6, #+276] 3695 NEW_MSG=0; \ 00000210 0000A0E3 MOV R0,#+0 \ 00000214 E40186E5 STR R0,[R6, #+484] 3696 } 3697 t->isunread=1; \ ??AddStringToLog_10: \ 00000218 0100A0E3 MOV R0,#+1 \ 0000021C 640084E5 STR R0,[R4, #+100] 3698 // if(saver_on) reftes(); 3699 L_NOINC: 3700 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000220 0400A0E1 MOV R0,R4 \ 00000224 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3701 } \ ??AddStringToLog_3: \ 00000228 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 0000022C F087BDE8 POP {R4-R10,PC} ;; return \ ??AddStringToLog_1: \ 00000230 ........ DC32 NOT_LOG_SAME_XTXT \ 00000234 ........ DC32 `?` \ 00000238 ........ DC32 LOG_XTXT 3702 3703 void ParseAnswer(WSHDR *ws, const char *s); 3704 3705 int time_to_stop_t9; 3706 \ In segment CODE, align 4, keep-with-next 3707 void ParseXStatusText(WSHDR *ws, const char *s, int color) 3708 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 3709 int c; 3710 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 3711 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 3712 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} 3713 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 3714 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 3715 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 3716 while((c=*s++)) 3717 { 3718 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 3719 { 3720 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 3721 { 3722 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 3723 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 3724 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 3725 } 3726 } 3727 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 3728 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 3729 } 3730 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 3731 void AddMsgToChat(void *data) 3732 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 40D04DE2 SUB SP,SP,#+64 3733 LOGQ *p; 3734 EDITCONTROL ec; 3735 EDITC_OPTIONS ec_options; 3736 EDCHAT_STRUCT *ed_struct; 3737 int j; 3738 int color, font, type; 3739 int zc; 3740 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C900000A BEQ ??AddMsgToChat_0 3741 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0060B0E1 MOVS R6,R0 3742 if (!ed_struct) return; \ 00000018 C600000A BEQ ??AddMsgToChat_0 3743 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000096E5 LDR R0,[R6, #+0] \ 00000020 641090E5 LDR R1,[R0, #+100] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 C200000A BEQ ??AddMsgToChat_0 3744 3745 3746 p=ed_struct->ed_contact->last_log; \ 0000002C 7C7090E5 LDR R7,[R0, #+124] 3747 if (p) \ 00000030 ........ LDR R8,??DataTable116 ;; S_ICONS \ 00000034 000057E3 CMP R7,#+0 \ 00000038 A800000A BEQ ??AddMsgToChat_1 3748 { 3749 while(p) 3750 { 3751 font = ED_H_FONT_SIZE; 3752 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C ........ LDR R2,??DataTable86 ;; ED_X_FONT_SIZE \ 00000040 ........ LDR R0,??DataTable108 ;; ED_H_FONT_SIZE \ 00000044 002092E5 LDR R2,[R2, #+0] \ 00000048 ........ LDR R1,??DataTable88 ;; X_COLOR \ 0000004C 00A090E5 LDR R10,[R0, #+0] \ 00000050 040097E5 LDR R0,[R7, #+4] \ 00000054 00208DE5 STR R2,[SP, #+0] \ 00000058 004091E5 LDR R4,[R1, #+0] \ 0000005C ........ LDR R1,??DataTable89 ;; O_ED_X_FONT_SIZE \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 009091E5 LDR R9,[R1, #+0] \ 00000068 ........ LDR R1,??DataTable90 ;; O_X_COLOR \ 0000006C 005091E5 LDR R5,[R1, #+0] \ 00000070 ........ LDR R1,??DataTable105 ;; I_COLOR \ 00000074 00B091E5 LDR R11,[R1, #+0] \ 00000078 0300000A BEQ ??AddMsgToChat_3 3753 { 3754 if (zc==1) \ 0000007C 010050E3 CMP R0,#+1 \ 00000080 1E00001A BNE ??AddMsgToChat_4 3755 color=ACK_COLOR; //Зеленый \ 00000084 ........ LDR R0,??DataTable101 ;; ACK_COLOR \ 00000088 1B0000EA B ??AddMsgToChat_5 3756 else 3757 color=I_COLOR; 3758 //#endif 3759 } 3760 else 3761 { 3762 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 0000008C 080097E5 LDR R0,[R7, #+8] \ 00000090 010070E3 CMN R0,#+1 \ 00000094 1700001A BNE ??AddMsgToChat_6 3763 { 3764 type = p->type&0x0F; \ 00000098 0C0097E5 LDR R0,[R7, #+12] \ 0000009C 0F1000E2 AND R1,R0,#0xF 3765 if(p->type&0x10) \ 000000A0 100010E3 TST R0,#0x10 \ 000000A4 0B00000A BEQ ??AddMsgToChat_7 3766 { 3767 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000A8 010051E3 CMP R1,#+1 \ 000000AC ........ LDREQ R0,??DataTable103 ;; O_I_COLOR \ 000000B0 0400000A BEQ ??AddMsgToChat_8 \ 000000B4 030051E3 CMP R1,#+3 \ 000000B8 05B0A001 MOVEQ R11,R5 \ 000000BC 09A0A001 MOVEQ R10,R9 \ 000000C0 0E00000A BEQ ??AddMsgToChat_4 \ 000000C4 ........ LDR R0,??DataTable102 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000C8 00B090E5 LDR R11,[R0, #+0] \ 000000CC ........ LDR R0,??DataTable107 ;; O_ED_H_FONT_SIZE \ 000000D0 00A090E5 LDR R10,[R0, #+0] \ 000000D4 090000EA B ??AddMsgToChat_4 3768 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 3769 } 3770 else 3771 { 3772 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??AddMsgToChat_7: \ 000000D8 010051E3 CMP R1,#+1 \ 000000DC 0700000A BEQ ??AddMsgToChat_4 \ 000000E0 030051E3 CMP R1,#+3 \ 000000E4 04B0A001 MOVEQ R11,R4 \ 000000E8 02A0A001 MOVEQ R10,R2 \ 000000EC 0300000A BEQ ??AddMsgToChat_4 \ 000000F0 ........ LDR R0,??DataTable104 ;; TO_COLOR \ 000000F4 000000EA B ??AddMsgToChat_5 3773 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 3774 } 3775 } 3776 else 3777 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000F8 ........ LDR R0,??DataTable106 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000FC 00B090E5 LDR R11,[R0, #+0] 3778 } 3779 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 00000100 14008DE2 ADD R0,SP,#+20 \ 00000104 640100EF SWI +356 3780 if ((p->type&0x0F)!=3) \ 00000108 0C0097E5 LDR R0,[R7, #+12] \ 0000010C 0F0000E2 AND R0,R0,#0xF \ 00000110 030050E3 CMP R0,#+3 \ 00000114 0800000A BEQ ??AddMsgToChat_9 3781 { 3782 ascii2ws(ews,p->hdr); \ 00000118 280198E5 LDR R0,[R8, #+296] \ 0000011C 101087E2 ADD R1,R7,#+16 \ 00000120 ........ _BLF ascii2ws,??ascii2ws??rA 3783 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000124 283198E5 LDR R3,[R8, #+296] \ 00000128 4020A0E3 MOV R2,#+64 \ 0000012C 000093E5 LDR R0,[R3, #+0] \ 00000130 B000D0E1 LDRH R0,[R0, #+0] \ 00000134 01002DE9 PUSH {R0} \ 00000138 030000EA B ??AddMsgToChat_10 3784 } 3785 else 3786 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_9: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 01002DE9 PUSH {R0} \ 00000144 283198E5 LDR R3,[R8, #+296] \ 00000148 2020A0E3 MOV R2,#+32 \ ??AddMsgToChat_10: \ 0000014C 0110A0E3 MOV R1,#+1 \ 00000150 18008DE2 ADD R0,SP,#+24 \ 00000154 650100EF SWI +357 \ 00000158 04D08DE2 ADD SP,SP,#+4 3787 PrepareEditCOptions(&ec_options); \ 0000015C 04008DE2 ADD R0,SP,#+4 \ 00000160 C80100EF SWI +456 3788 SetPenColorToEditCOptions(&ec_options,color); \ 00000164 0B10A0E1 MOV R1,R11 \ 00000168 04008DE2 ADD R0,SP,#+4 \ 0000016C CC0100EF SWI +460 3789 SetFontToEditCOptions(&ec_options,font); \ 00000170 0A10A0E1 MOV R1,R10 \ 00000174 04008DE2 ADD R0,SP,#+4 \ 00000178 CA0100EF SWI +458 3790 CopyOptionsToEditControl(&ec,&ec_options); \ 0000017C 04108DE2 ADD R1,SP,#+4 \ 00000180 14008DE2 ADD R0,SP,#+20 \ 00000184 CE0100EF SWI +462 3791 //AddEditControlToEditQend(eq,&ec,ma); 3792 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 00000188 080096E5 LDR R0,[R6, #+8] \ 0000018C 14208DE2 ADD R2,SP,#+20 \ 00000190 011040E2 SUB R1,R0,#+1 \ 00000194 40009DE5 LDR R0,[SP, #+64] \ 00000198 D20100EF SWI +466 3793 ed_struct->ed_answer++; \ 0000019C 080096E5 LDR R0,[R6, #+8] \ 000001A0 010080E2 ADD R0,R0,#+1 \ 000001A4 080086E5 STR R0,[R6, #+8] 3794 if ((p->type&0x0F)!=3) \ 000001A8 0C0097E5 LDR R0,[R7, #+12] \ 000001AC 0F1000E2 AND R1,R0,#0xF \ 000001B0 030051E3 CMP R1,#+3 \ 000001B4 0300000A BEQ ??AddMsgToChat_11 3795 { 3796 ParseAnswer(ews,p->text); \ 000001B8 280198E5 LDR R0,[R8, #+296] \ 000001BC 601087E2 ADD R1,R7,#+96 \ 000001C0 ........ BL ParseAnswer \ 000001C4 050000EA B ??AddMsgToChat_12 3797 } 3798 else 3799 { 3800 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_11: \ 000001C8 100010E3 TST R0,#0x10 \ 000001CC 280198E5 LDR R0,[R8, #+296] \ 000001D0 0520A011 MOVNE R2,R5 \ 000001D4 0420A001 MOVEQ R2,R4 \ 000001D8 601087E2 ADD R1,R7,#+96 \ 000001DC ........ BL ParseXStatusText 3801 } 3802 PrepareEditControl(&ec); \ ??AddMsgToChat_12: \ 000001E0 14008DE2 ADD R0,SP,#+20 \ 000001E4 640100EF SWI +356 3803 ConstructEditControl(&ec, 3804 ECT_NORMAL_TEXT, 3805 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 3806 ews,ews->wsbody[0]); \ 000001E8 283198E5 LDR R3,[R8, #+296] \ 000001EC 000093E5 LDR R0,[R3, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000051E3 CMP R1,#+0 \ 000001F8 0100A0E1 MOV R0,R1 \ 000001FC 01002DE9 PUSH {R0} \ 00000200 812DA013 MOVNE R2,#+8256 \ 00000204 2020A003 MOVEQ R2,#+32 \ 00000208 0310A0E3 MOV R1,#+3 \ 0000020C 18008DE2 ADD R0,SP,#+24 \ 00000210 650100EF SWI +357 3807 PrepareEditCOptions(&ec_options); \ 00000214 08008DE2 ADD R0,SP,#+8 \ 00000218 C80100EF SWI +456 3808 //#ifdef M75 3809 if ((p->type&0x0F)!=3) \ 0000021C 0C0097E5 LDR R0,[R7, #+12] \ 00000220 04D08DE2 ADD SP,SP,#+4 \ 00000224 0F1000E2 AND R1,R0,#0xF \ 00000228 030051E3 CMP R1,#+3 \ 0000022C 0400000A BEQ ??AddMsgToChat_13 3810 { 3811 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable98 ;; O_ED_FONT_SIZE \ 00000238 ........ LDREQ R0,??DataTable99 ;; ED_FONT_SIZE \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 080000EA B ??AddMsgToChat_14 3812 } 3813 else 3814 { 3815 SetPenColorToEditCOptions(&ec_options,(p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_13: \ 00000244 100010E3 TST R0,#0x10 \ 00000248 0510A011 MOVNE R1,R5 \ 0000024C 0410A001 MOVEQ R1,R4 \ 00000250 04008DE2 ADD R0,SP,#+4 \ 00000254 CC0100EF SWI +460 3816 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000258 0C0097E5 LDR R0,[R7, #+12] \ 0000025C 100010E3 TST R0,#0x10 \ 00000260 00109D05 LDREQ R1,[SP, #+0] \ 00000264 0910A011 MOVNE R1,R9 \ ??AddMsgToChat_14: \ 00000268 04008DE2 ADD R0,SP,#+4 \ 0000026C CA0100EF SWI +458 3817 } 3818 //#else 3819 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 3820 //#endif 3821 CopyOptionsToEditControl(&ec,&ec_options); \ 00000270 04108DE2 ADD R1,SP,#+4 \ 00000274 14008DE2 ADD R0,SP,#+20 \ 00000278 CE0100EF SWI +462 3822 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 0000027C 080096E5 LDR R0,[R6, #+8] \ 00000280 14208DE2 ADD R2,SP,#+20 \ 00000284 011040E2 SUB R1,R0,#+1 \ 00000288 40009DE5 LDR R0,[SP, #+64] \ 0000028C D20100EF SWI +466 3823 ed_struct->ed_answer++; \ 00000290 080096E5 LDR R0,[R6, #+8] \ 00000294 010080E2 ADD R0,R0,#+1 \ 00000298 080086E5 STR R0,[R6, #+8] 3824 p=p->next; \ 0000029C 007097E5 LDR R7,[R7, #+0] 3825 } \ 000002A0 000057E3 CMP R7,#+0 \ 000002A4 64FFFF1A BNE ??AddMsgToChat_2 3826 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 000002A8 001096E5 LDR R1,[R6, #+0] \ 000002AC 841091E5 LDR R1,[R1, #+132] \ 000002B0 011081E2 ADD R1,R1,#+1 \ 000002B4 8140A0E1 LSL R4,R1,#+1 \ 000002B8 000054E1 CMP R4,R0 \ 000002BC 070000AA BGE ??AddMsgToChat_1 3827 while(jed_answer) 3828 { 3829 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_15: \ 000002C0 040096E5 LDR R0,[R6, #+4] \ 000002C4 0110A0E3 MOV R1,#+1 \ 000002C8 D10100EF SWI +465 3830 ed_struct->ed_answer--; \ 000002CC 080096E5 LDR R0,[R6, #+8] \ 000002D0 010040E2 SUB R0,R0,#+1 \ 000002D4 080086E5 STR R0,[R6, #+8] 3831 } \ 000002D8 000054E1 CMP R4,R0 \ 000002DC F7FFFFBA BLT ??AddMsgToChat_15 3832 } 3833 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002E0 000096E5 LDR R0,[R6, #+0] \ 000002E4 0040A0E3 MOV R4,#+0 \ 000002E8 7C4080E5 STR R4,[R0, #+124] 3834 if (IsGuiOnTop(edchat_id)) \ 000002EC C00198E5 LDR R0,[R8, #+448] \ 000002F0 350100EF SWI +309 \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 0300000A BEQ ??AddMsgToChat_16 3835 { 3836 total_unread--; \ 000002FC B00198E5 LDR R0,[R8, #+432] \ 00000300 010040E2 SUB R0,R0,#+1 \ 00000304 B00188E5 STR R0,[R8, #+432] \ 00000308 020000EA B ??AddMsgToChat_17 3837 } 3838 else 3839 ed_struct->requested_decrement_total_unread++; \ ??AddMsgToChat_16: \ 0000030C 0C0096E5 LDR R0,[R6, #+12] \ 00000310 010080E2 ADD R0,R0,#+1 \ 00000314 0C0086E5 STR R0,[R6, #+12] 3840 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_17: \ 00000318 000096E5 LDR R0,[R6, #+0] \ 0000031C 644080E5 STR R4,[R0, #+100] 3841 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 00000320 141198E5 LDR R1,[R8, #+276] \ 00000324 682090E5 LDR R2,[R0, #+104] \ 00000328 021041E0 SUB R1,R1,R2 \ 0000032C 141188E5 STR R1,[R8, #+276] 3842 ed_struct->ed_contact->unread_msg=0; \ 00000330 684080E5 STR R4,[R0, #+104] 3843 ChangeContactPos(ed_struct->ed_contact); \ 00000334 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3844 // EDIT_SetFocus(data,ed_struct->ed_answer); 3845 } \ ??AddMsgToChat_0: \ 00000338 44D08DE2 ADD SP,SP,#+68 ;; stack cleaning \ 0000033C F08FBDE8 POP {R4-R11,PC} ;; return 3846 3847 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 3848 void DrawAck(void *data) 3849 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 3850 LOGQ *p; 3851 EDITCONTROL ec; 3852 EDITC_OPTIONS ec_options; 3853 EDCHAT_STRUCT *ed_struct; 3854 int j; 3855 int color; 3856 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 3857 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 3858 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 3859 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 3860 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 3861 j=ed_struct->ed_answer; 3862 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 745091E5 LDR R5,[R1, #+116] \ 0000002C 841091E5 LDR R1,[R1, #+132] \ 00000030 000055E3 CMP R5,#+0 \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 3A00000A BEQ ??DrawAck_1 3863 while(p) 3864 { 3865 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 3866 { 3867 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 3868 { 3869 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 3870 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 3871 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 3872 { 3873 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable105 ;; I_COLOR 3874 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable101 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 3875 else 3876 color=I_COLOR; 3877 } 3878 else 3879 { 3880 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 3881 color=(p->type&0x10)?(((p->type&0x0F)==1)?O_I_COLOR:O_TO_COLOR):(((p->type&0x0F)==1)?I_COLOR:TO_COLOR); \ 00000094 0C0095E5 LDR R0,[R5, #+12] \ 00000098 100010E3 TST R0,#0x10 \ 0000009C 0F0000E2 AND R0,R0,#0xF \ 000000A0 0300000A BEQ ??DrawAck_7 \ 000000A4 010050E3 CMP R0,#+1 \ 000000A8 ........ LDRNE R0,??DataTable102 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable103 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable104 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable105 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 3882 else 3883 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable106 ;; UNACK_COLOR 3884 } 3885 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 3886 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 3887 CopyOptionsToEditControl(&ec,&ec_options); 3888 StoreEditControl(data,j,&ec); 3889 p->acked|=4; //Обработали 3890 dorefresh=1; \ ??DrawAck_5: \ 000000C8 0160A0E3 MOV R6,#+1 \ 000000CC 001090E5 LDR R1,[R0, #+0] \ 000000D0 0D00A0E1 MOV R0,SP \ 000000D4 CC0100EF SWI +460 \ 000000D8 0C0095E5 LDR R0,[R5, #+12] \ 000000DC 100010E3 TST R0,#0x10 \ 000000E0 ........ LDRNE R0,??DataTable107 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable108 ;; ED_H_FONT_SIZE \ 000000E8 001090E5 LDR R1,[R0, #+0] \ 000000EC 0D00A0E1 MOV R0,SP \ 000000F0 CA0100EF SWI +458 \ 000000F4 0D10A0E1 MOV R1,SP \ 000000F8 10008DE2 ADD R0,SP,#+16 \ 000000FC CE0100EF SWI +462 \ 00000100 10208DE2 ADD R2,SP,#+16 \ 00000104 0710A0E1 MOV R1,R7 \ 00000108 0400A0E1 MOV R0,R4 \ 0000010C 6A0100EF SWI +362 \ 00000110 040095E5 LDR R0,[R5, #+4] \ 00000114 040080E3 ORR R0,R0,#0x4 \ 00000118 040085E5 STR R0,[R5, #+4] 3891 } 3892 } 3893 j+=2; 3894 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 3895 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 3896 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; S_ICONS + 448 \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 350100EF SWI +309 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 00005613 CMPNE R6,#+0 \ 00000140 0000000A BEQ ??DrawAck_0 \ 00000144 960100EF SWI +406 \ ??DrawAck_0: \ 00000148 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 0000014C F080BDE8 POP {R4-R7,PC} ;; return \ ??DrawAck_8: \ 00000150 ........ DC32 S_ICONS + 448 3897 } 3898 \ In segment CODE, align 4, keep-with-next 3899 void ask_my_info(void) 3900 { 3901 /* TPKT *p; 3902 CLIST *t; 3903 p=malloc(sizeof(PKT)); 3904 p->pkt.uin=UIN; 3905 p->pkt.type=T_REQINFOSHORT; 3906 p->pkt.data_len=0; 3907 // AddStringToLog(t,0x01,"Request info...",I_str); 3908 SUBPROC((void *)SendAnswer,0,p);*/ 3909 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 3910 \ In segment CODE, align 4, keep-with-next 3911 void set_my_status(void) 3912 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 3913 TPKT *p; 3914 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 3915 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 3916 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3917 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3918 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 372 3919 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,??DataTable119 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 3920 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 372 3921 3922 extern int Send0; 3923 \ In segment CODE, align 4, keep-with-next 3924 void set_my_xstatus(void) 3925 { \ set_my_xstatus: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3926 #ifdef NEWSGOLD 3927 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R4,??DataTable119 ;; SendAnswer \ 00000008 ........ LDR R10,??DataTable116 ;; S_ICONS \ 0000000C ........ LDR R8,??DataTable112 ;; CurrentXStatus \ 00000010 0CD04DE2 SUB SP,SP,#+12 \ 00000014 24019AE5 LDR R0,[R10, #+292] \ 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 3928 { 3929 if(CurrentXStatus!=11) \ 00000030 000098E5 LDR R0,[R8, #+0] \ 00000034 0B0050E3 CMP R0,#+11 \ 00000038 7200000A BEQ ??set_my_xstatus_1 3930 { 3931 #endif 3932 TPKT *p; 3933 char *s1; 3934 char *s2; 3935 int l1; 3936 int l2; 3937 p=malloc(sizeof(PKT)+1); \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 140000EF SWI +20 \ 00000044 00A0A0E1 MOV R10,R0 3938 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000048 00908AE5 STR R9,[R10, #+0] 3939 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 0000004C B470CAE1 STRH R7,[R10, #+4] 3940 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000050 B660CAE1 STRH R6,[R10, #+6] 3941 p->data[0]=CurrentXStatus; \ 00000054 000098E5 LDR R0,[R8, #+0] 3942 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 3943 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 3944 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 3945 if ((!s1)||(!s2)) return; \ 0000009C 000056E3 CMP R6,#+0 \ 000000A0 00005713 CMPNE R7,#+0 \ 000000A4 F78FBD08 POPEQ {R0-R2,R4-R11,PC} 3946 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 3947 p->pkt.uin=0; \ 000000C0 00908AE5 STR R9,[R10, #+0] 3948 p->pkt.type=T_XTEXT_SET; \ 000000C4 B450CAE1 STRH R5,[R10, #+4] 3949 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] 3950 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 3951 p->data[l1]=0; \ 000000EC 00009DE5 LDR R0,[SP, #+0] 3952 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 3953 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} 3954 #ifdef NEWSGOLD 3955 } 3956 else 3957 { 3958 tracktimer=0; 3959 GetTags(); 3960 } 3961 } 3962 else 3963 { 3964 TPKT *p; 3965 char *s1; 3966 char *s2; 3967 int l1; 3968 int l2; 3969 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000124 0900A0E3 MOV R0,#+9 \ 00000128 140000EF SWI +20 \ 0000012C 00B0A0E1 MOV R11,R0 3970 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000130 00908BE5 STR R9,[R11, #+0] 3971 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000134 B470CBE1 STRH R7,[R11, #+4] 3972 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000138 B660CBE1 STRH R6,[R11, #+6] 3973 p->data[0]=CurrentXStatus; \ 0000013C 000098E5 LDR R0,[R8, #+0] 3974 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 3975 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 3976 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 3977 if ((!s1)||(!s2)) return; \ 00000184 000056E3 CMP R6,#+0 \ 00000188 00005713 CMPNE R7,#+0 \ 0000018C F78FBD08 POPEQ {R0-R2,R4-R11,PC} 3978 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 3979 p->pkt.uin=0; \ 000001A8 00908BE5 STR R9,[R11, #+0] 3980 p->pkt.type=T_XTEXT_SET; \ 000001AC B450CBE1 STRH R5,[R11, #+4] 3981 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] 3982 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 3983 p->data[l1]=0; \ 000001D4 00009DE5 LDR R0,[SP, #+0] 3984 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 3985 SUBPROC((void *)SendAnswer,0,p); \ 000001F8 0B20A0E1 MOV R2,R11 \ 000001FC 0010A0E3 MOV R1,#+0 \ 00000200 0400A0E1 MOV R0,R4 \ 00000204 710100EF SWI +369 3986 tracktimer=0; \ ??set_my_xstatus_1: \ 00000208 54918AE5 STR R9,[R10, #+340] 3987 GetTags(); \ 0000020C ........ _BLF GetTags,??GetTags??rA \ 00000210 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return 3988 } 3989 #endif 3990 } 3991 #ifdef NEWSGOLD 3992 3993 \ In segment CODE, align 4, keep-with-next 3994 void set_my_xstatus2(void) 3995 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3996 TPKT *p; 3997 // char *s1; 3998 // char *s2; 3999 int l1; 4000 int l2; 4001 p=malloc(sizeof(PKT)+1); 4002 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 4003 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 4004 p->pkt.data_len=1; // Длина пакета: 1 байт 4005 p->data[0]=11; 4006 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable119 ;; SendAnswer 4007 // char *s1; 4008 char *sk2=malloc(256); 4009 // strcpy(s1, playing); 4010 // s1="Now playing:"; 4011 strcpy(sk2,teast2); 4012 l1=strlen(playing); \ 00000008 DC809FE5 LDR R8,??set_my_xstatus2_0 ;; playing \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 00000010 0900A0E3 MOV R0,#+9 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 0050A0E3 MOV R5,#+0 \ 00000020 005084E5 STR R5,[R4, #+0] \ 00000024 1600A0E3 MOV R0,#+22 \ 00000028 B400C4E1 STRH R0,[R4, #+4] \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 B600C4E1 STRH R0,[R4, #+6] \ 00000034 0B00A0E3 MOV R0,#+11 \ 00000038 0800C4E5 STRB R0,[R4, #+8] \ 0000003C 0420A0E1 MOV R2,R4 \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 710100EF SWI +369 \ 0000004C 400FA0E3 MOV R0,#+256 \ 00000050 140000EF SWI +20 \ 00000054 94109FE5 LDR R1,??set_my_xstatus2_0+0x4 ;; teast2 \ 00000058 0070A0E1 MOV R7,R0 \ 0000005C 1A0000EF SWI +26 \ 00000060 0800A0E1 MOV R0,R8 \ 00000064 1B0000EF SWI +27 \ 00000068 0090A0E1 MOV R9,R0 4013 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 4014 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 4015 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000080 09008AE0 ADD R0,R10,R9 \ 00000084 090080E2 ADD R0,R0,#+9 \ 00000088 140000EF SWI +20 \ 0000008C 0040A0E1 MOV R4,R0 4016 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 4017 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 4018 p->pkt.data_len=l1+l2+1; \ 0000009C 09008AE0 ADD R0,R10,R9 \ 000000A0 010080E2 ADD R0,R0,#+1 \ 000000A4 B600C4E1 STRH R0,[R4, #+6] 4019 strncpy(p->data+0,playing,l1); \ 000000A8 0920A0E1 MOV R2,R9 \ 000000AC 0810A0E1 MOV R1,R8 \ 000000B0 080084E2 ADD R0,R4,#+8 \ 000000B4 160100EF SWI +278 4020 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 4021 strncpy(p->data+l1+1,sk2,l2); \ 000000C0 0A20A0E1 MOV R2,R10 \ 000000C4 0710A0E1 MOV R1,R7 \ 000000C8 090080E2 ADD R0,R0,#+9 \ 000000CC 160100EF SWI +278 4022 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 4023 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 4024 // mfree(s1); 4025 // mfree(s2); 4026 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 4027 #endif \ In segment CODE, align 4, keep-with-next 4028 void to_develop(void) 4029 { 4030 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable116 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 5C1190E5 LDR R1,[R0, #+348] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 4031 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable118 ;; `?ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 4048 { 4049 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 4050 { 4051 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 6C0084E5 STR R0,[R4, #+108] 4052 #ifdef EVILFOX 4053 time_to_stop_t9=2; 4054 #else 4055 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C E80185E5 STR R0,[R5, #+488] \ 00000060 7080BDE8 POP {R4-R6,PC} 4056 #endif 4057 } 4058 else 4059 { 4060 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 4061 DirectRedrawGUI_ID(edchat_id); \ 0000006C C00195E5 LDR R0,[R5, #+448] \ 00000070 400100EF SWI +320 4062 } 4063 } 4064 } 4065 } 4066 } 4067 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 4068 4069 GBSTMR develop; 4070 \ In segment CODE, align 4, keep-with-next 4071 void begin_to_develop() 4072 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 4073 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 4074 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 4075 else 4076 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 + 6912 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 4077 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 S_ICONS + 6912 4078 ////=================================comand lists 4079 int comanda; 4080 4081 char requests1[]="Sending online time..."; 4082 char requests2[]="Sending msg info..."; 4083 char requests3[]="Sending battery info..."; 4084 char requests4[]="Sending mod info..."; 4085 char requests6[]="Sending offline info..."; 4086 4087 4088 4089 4090 4091 char mod_info[264]; 4092 4093 const char ipc_game_name[]="Combats"; 4094 IPC_REQ game_gipc; 4095 #define IPC_GAME_DATA 24 4096 4097 #ifdef kluchnik \ In segment DATA_Z, align 4, align-sorted 4098 int autobot; \ autobot: \ 00000000 DS8 4 \ In segment CODE, align 4, keep-with-next 4099 void AutobotInit() 4100 { 4101 if(autobot==1) \ AutobotInit: \ 00000000 3C009FE5 LDR R0,??AutobotInit_0 ;; autobot \ 00000004 3C109FE5 LDR R1,??AutobotInit_0+0x4 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 010052E3 CMP R2,#+1 \ 00000014 0400001A BNE ??AutobotInit_1 4102 { 4103 autobot=0; \ 00000018 0020A0E3 MOV R2,#+0 \ 0000001C 002080E5 STR R2,[R0, #+0] 4104 ShowMSG(1,(int)"Autobot Off"); \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 480100EF SWI +328 \ 00000028 0080BDE8 POP {PC} 4105 } 4106 else 4107 { 4108 autobot=1; \ ??AutobotInit_1: \ 0000002C 0120A0E3 MOV R2,#+1 \ 00000030 002080E5 STR R2,[R0, #+0] 4109 ShowMSG(1,(int)"Autobot On"); \ 00000034 0C1081E2 ADD R1,R1,#+12 \ 00000038 0100A0E3 MOV R0,#+1 \ 0000003C 480100EF SWI +328 4110 } 4111 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??AutobotInit_0: \ 00000044 ........ DC32 autobot \ 00000048 ........ DC32 `?` 4112 #endif 4113 4114 \ In segment CODE, align 4, keep-with-next 4115 void CheckComand(char *txt, CLIST *t, char *ddd) 4116 { \ CheckComand: \ 00000000 F44F2DE9 PUSH {R2,R4-R11,LR} 4117 comanda=1; \ 00000004 ........ LDR R6,??DataTable125 ;; S_ICONS 4118 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 ........ LDR R7,??DataTable118 ;; `?pkt.uin=t->uin; \ 00000100 0C0095E5 LDR R0,[R5, #+12] \ 00000104 000084E5 STR R0,[R4, #+0] 4139 p->pkt.type=T_SENDMSG; \ 00000108 B4A0C4E1 STRH R10,[R4, #+4] 4140 p->pkt.data_len=strlen(online); \ 0000010C 20008DE2 ADD R0,SP,#+32 \ 00000110 1B0000EF SWI +27 \ 00000114 B600C4E1 STRH R0,[R4, #+6] 4141 strcpy(p->data,online); \ 00000118 20108DE2 ADD R1,SP,#+32 \ 0000011C 080084E2 ADD R0,R4,#+8 \ 00000120 1A0000EF SWI +26 4142 #ifdef EVILFOX 4143 SENDMSGCOUNT++; 4144 #else 4145 if(show_send_info) \ 00000124 44059FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000128 000090E5 LDR R0,[R0, #+0] \ 0000012C 08D08DE2 ADD SP,SP,#+8 \ 00000130 000050E3 CMP R0,#+0 \ 00000134 200196E5 LDR R0,[R6, #+288] \ 00000138 010080E2 ADD R0,R0,#+1 \ 0000013C 200186E5 STR R0,[R6, #+288] \ 00000140 0A00000A BEQ ??CheckComand_4 4146 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000144 0110A0E3 MOV R1,#+1 \ 00000148 02002DE9 PUSH {R1} \ 0000014C 000009E0 AND R0,R9,R0 \ 00000150 01002DE9 PUSH {R0} \ 00000154 1F3087E2 ADD R3,R7,#+31 \ 00000158 1000A0E3 MOV R0,#+16 \ 0000015C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000160 062080E0 ADD R2,R0,R6 \ 00000164 0500A0E1 MOV R0,R5 \ 00000168 ........ BL AddStringToLog \ 0000016C 08D08DE2 ADD SP,SP,#+8 4147 else 4148 SENDMSGCOUNT++; 4149 #endif 4150 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_4: \ 00000170 0420A0E1 MOV R2,R4 \ 00000174 0010A0E3 MOV R1,#+0 \ 00000178 0800A0E1 MOV R0,R8 \ 0000017C 710100EF SWI +369 4151 return; \ ??CheckComand_1: \ 00000180 47DF8DE2 ADD SP,SP,#+284 \ 00000184 F08FBDE8 POP {R4-R11,PC} 4152 } 4153 4154 if(!strcmp(txt, "GET_MSG_INFO")) \ ??CheckComand_2: \ 00000188 8E1F87E2 ADD R1,R7,#+568 \ 0000018C 0400A0E1 MOV R0,R4 \ 00000190 190000EF SWI +25 \ 00000194 000050E3 CMP R0,#+0 \ 00000198 2800001A BNE ??CheckComand_5 4155 { 4156 comanda=0; \ 0000019C EC0186E5 STR R0,[R6, #+492] 4157 TPKT *p; 4158 char *send_txt=malloc(64); \ 000001A0 4000A0E3 MOV R0,#+64 \ 000001A4 140000EF SWI +20 \ 000001A8 0040A0E1 MOV R4,R0 4159 sprintf(send_txt, "Отправлено сообщений: %d \n" 4160 "Принято сообщений: %d" 4161 , main2_count, main_count); \ 000001AC ........ LDR R0,??DataTable120 ;; main_count \ 000001B0 821F87E2 ADD R1,R7,#+520 \ 000001B4 003090E5 LDR R3,[R0, #+0] \ 000001B8 ........ LDR R0,??DataTable121 ;; main2_count \ 000001BC 002090E5 LDR R2,[R0, #+0] \ 000001C0 0400A0E1 MOV R0,R4 \ 000001C4 160000EF SWI +22 4162 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000001C8 0400A0E1 MOV R0,R4 \ 000001CC 1B0000EF SWI +27 \ 000001D0 090080E2 ADD R0,R0,#+9 \ 000001D4 140000EF SWI +20 \ 000001D8 00B0A0E1 MOV R11,R0 4163 p->pkt.uin=t->uin; \ 000001DC 0C0095E5 LDR R0,[R5, #+12] \ 000001E0 00008BE5 STR R0,[R11, #+0] 4164 p->pkt.type=T_SENDMSG; \ 000001E4 B4A0CBE1 STRH R10,[R11, #+4] 4165 p->pkt.data_len=strlen(send_txt); \ 000001E8 0400A0E1 MOV R0,R4 \ 000001EC 1B0000EF SWI +27 \ 000001F0 B600CBE1 STRH R0,[R11, #+6] 4166 strcpy(p->data,send_txt); \ 000001F4 0410A0E1 MOV R1,R4 \ 000001F8 08008BE2 ADD R0,R11,#+8 \ 000001FC 1A0000EF SWI +26 4167 #ifdef EVILFOX 4168 SENDMSGCOUNT++; 4169 #else 4170 if(show_send_info) \ 00000200 68049FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000204 000090E5 LDR R0,[R0, #+0] \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 200196E5 LDR R0,[R6, #+288] \ 00000210 010080E2 ADD R0,R0,#+1 \ 00000214 200186E5 STR R0,[R6, #+288] \ 00000218 0C01000A BEQ ??CheckComand_6 4171 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000021C 0110A0E3 MOV R1,#+1 \ 00000220 02002DE9 PUSH {R1} \ 00000224 000009E0 AND R0,R9,R0 \ 00000228 01002DE9 PUSH {R0} \ 0000022C 1F3087E2 ADD R3,R7,#+31 \ 00000230 2800A0E3 MOV R0,#+40 \ 00000234 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000238 062080E0 ADD R2,R0,R6 \ 0000023C 000100EA B ??CheckComand_7 4172 else 4173 SENDMSGCOUNT++; 4174 #endif 4175 SUBPROC((void *)SendAnswer,0,p); 4176 mfree(send_txt); 4177 return; 4178 } 4179 4180 //==========================windes commands begin ===================== 4181 4182 if(!strcmp(txt, "GET_PROVIDER")) \ ??CheckComand_5: \ 00000240 9D1F87E2 ADD R1,R7,#+628 \ 00000244 0400A0E1 MOV R0,R4 \ 00000248 190000EF SWI +25 \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 2D00001A BNE ??CheckComand_8 4183 { 4184 comanda=0; \ 00000254 EC0186E5 STR R0,[R6, #+492] 4185 TPKT *p; 4186 4187 WSHDR *ws=AllocWS(32); \ 00000258 2000A0E3 MOV R0,#+32 \ 0000025C 250100EF SWI +293 \ 00000260 00B0A0E1 MOV R11,R0 4188 GetProvider(ws,0); \ 00000264 0010A0E3 MOV R1,#+0 \ 00000268 410000EF SWI +65 4189 char prov[16]; 4190 ws_2str(ws,prov,wstrlen(ws)); \ 0000026C 0B00A0E1 MOV R0,R11 \ 00000270 230100EF SWI +291 \ 00000274 0020A0E1 MOV R2,R0 \ 00000278 08108DE2 ADD R1,SP,#+8 \ 0000027C 0B00A0E1 MOV R0,R11 \ 00000280 A30000EF SWI +163 4191 char *send_txt=malloc(32); \ 00000284 2000A0E3 MOV R0,#+32 \ 00000288 140000EF SWI +20 \ 0000028C 0040A0E1 MOV R4,R0 4192 sprintf(send_txt, "Оператор: %s", prov); \ 00000290 08208DE2 ADD R2,SP,#+8 \ 00000294 921F87E2 ADD R1,R7,#+584 \ 00000298 160000EF SWI +22 4193 FreeWS(ws); \ 0000029C 0B00A0E1 MOV R0,R11 \ 000002A0 290100EF SWI +297 4194 4195 p=malloc(sizeof(PKT)+28+1); \ 000002A4 2500A0E3 MOV R0,#+37 \ 000002A8 140000EF SWI +20 \ 000002AC 00B0A0E1 MOV R11,R0 4196 p->pkt.uin=t->uin; \ 000002B0 0C0095E5 LDR R0,[R5, #+12] \ 000002B4 00008BE5 STR R0,[R11, #+0] 4197 p->pkt.type=T_SENDMSG; \ 000002B8 B4A0CBE1 STRH R10,[R11, #+4] 4198 p->pkt.data_len=strlen(send_txt); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 1B0000EF SWI +27 \ 000002C4 B600CBE1 STRH R0,[R11, #+6] 4199 strcpy(p->data,send_txt); \ 000002C8 0410A0E1 MOV R1,R4 \ 000002CC 08008BE2 ADD R0,R11,#+8 \ 000002D0 1A0000EF SWI +26 4200 if(show_send_info) \ 000002D4 94039FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000002D8 000090E5 LDR R0,[R0, #+0] \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 200196E5 LDR R0,[R6, #+288] \ 000002E4 010080E2 ADD R0,R0,#+1 \ 000002E8 200186E5 STR R0,[R6, #+288] \ 000002EC D700000A BEQ ??CheckComand_6 4201 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000002F0 0110A0E3 MOV R1,#+1 \ 000002F4 02002DE9 PUSH {R1} \ 000002F8 000009E0 AND R0,R9,R0 \ 000002FC 01002DE9 PUSH {R0} \ 00000300 1F3087E2 ADD R3,R7,#+31 \ 00000304 962F87E2 ADD R2,R7,#+600 \ 00000308 CD0000EA B ??CheckComand_7 4202 else 4203 SENDMSGCOUNT++; 4204 SUBPROC((void *)SendAnswer,0,p); 4205 mfree(send_txt); 4206 return; 4207 } 4208 4209 //----------------------------------------------------------------------- 4210 4211 if(!strcmp(txt, "GET_MOD_INFO")) \ ??CheckComand_8: \ 0000030C A61F87E2 ADD R1,R7,#+664 \ 00000310 0400A0E1 MOV R0,R4 \ 00000314 190000EF SWI +25 \ 00000318 000050E3 CMP R0,#+0 \ 0000031C 3300001A BNE ??CheckComand_9 4212 { 4213 comanda=0; \ 00000320 EC0186E5 STR R0,[R6, #+492] 4214 TPKT *p; 4215 char *send_txt=malloc(256); \ 00000324 400FA0E3 MOV R0,#+256 \ 00000328 140000EF SWI +20 \ 0000032C 0040A0E1 MOV R4,R0 4216 // sprintf(I_UIN, "uin%d", t->uin); 4217 strcpy(I_UIN, t->name); \ 00000330 0410A0E3 MOV R1,#+4 \ 00000334 681D81E3 ORR R1,R1,#0x1A00 \ 00000338 061081E0 ADD R1,R1,R6 \ 0000033C 00108DE5 STR R1,[SP, #+0] \ 00000340 00009DE5 LDR R0,[SP, #+0] \ 00000344 141085E2 ADD R1,R5,#+20 \ 00000348 1A0000EF SWI +26 4218 if(strstr(ignor_list,I_UIN)==0) \ 0000034C 00109DE5 LDR R1,[SP, #+0] \ 00000350 ........ LDR R0,??DataTable122 ;; ignor_list \ 00000354 180100EF SWI +280 \ 00000358 000050E3 CMP R0,#+0 4219 { 4220 strcpy(send_txt, mod_info); \ 0000035C 0B10A001 MOVEQ R1,R11 4221 } 4222 else 4223 strcpy(send_txt, "***Access denied***"); \ 00000360 A11F8712 ADDNE R1,R7,#+644 \ 00000364 0400A0E1 MOV R0,R4 \ 00000368 1A0000EF SWI +26 4224 4225 strcpy(send_txt, mod_info); \ 0000036C 0B10A0E1 MOV R1,R11 \ 00000370 0400A0E1 MOV R0,R4 \ 00000374 1A0000EF SWI +26 4226 4227 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 00000378 0400A0E1 MOV R0,R4 \ 0000037C 1B0000EF SWI +27 \ 00000380 090080E2 ADD R0,R0,#+9 \ 00000384 140000EF SWI +20 \ 00000388 00B0A0E1 MOV R11,R0 4228 p->pkt.uin=t->uin; \ 0000038C 0C0095E5 LDR R0,[R5, #+12] \ 00000390 00008BE5 STR R0,[R11, #+0] 4229 p->pkt.type=T_SENDMSG; \ 00000394 B4A0CBE1 STRH R10,[R11, #+4] 4230 p->pkt.data_len=strlen(send_txt); \ 00000398 0400A0E1 MOV R0,R4 \ 0000039C 1B0000EF SWI +27 \ 000003A0 B600CBE1 STRH R0,[R11, #+6] 4231 strcpy(p->data,send_txt); \ 000003A4 0410A0E1 MOV R1,R4 \ 000003A8 08008BE2 ADD R0,R11,#+8 \ 000003AC 1A0000EF SWI +26 4232 #ifdef EVILFOX 4233 SENDMSGCOUNT++; 4234 #else 4235 if(show_send_info) \ 000003B0 B8029FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000003B4 000090E5 LDR R0,[R0, #+0] \ 000003B8 000050E3 CMP R0,#+0 \ 000003BC 200196E5 LDR R0,[R6, #+288] \ 000003C0 010080E2 ADD R0,R0,#+1 \ 000003C4 200186E5 STR R0,[R6, #+288] \ 000003C8 A000000A BEQ ??CheckComand_6 4236 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000003CC 0110A0E3 MOV R1,#+1 \ 000003D0 02002DE9 PUSH {R1} \ 000003D4 000009E0 AND R0,R9,R0 \ 000003D8 01002DE9 PUSH {R0} \ 000003DC 1F3087E2 ADD R3,R7,#+31 \ 000003E0 5400A0E3 MOV R0,#+84 \ 000003E4 6C0D80E3 ORR R0,R0,#0x1B00 \ 000003E8 062080E0 ADD R2,R0,R6 \ 000003EC 940000EA B ??CheckComand_7 4237 else 4238 SENDMSGCOUNT++; 4239 #endif 4240 SUBPROC((void *)SendAnswer,0,p); 4241 mfree(send_txt); 4242 return; 4243 } 4244 4245 if(!strcmp(txt, "GET_BAT_INFO")) \ ??CheckComand_9: \ 000003F0 BC00A0E3 MOV R0,#+188 \ 000003F4 600E80E3 ORR R0,R0,#0x600 \ 000003F8 071080E0 ADD R1,R0,R7 \ 000003FC 0400A0E1 MOV R0,R4 \ 00000400 190000EF SWI +25 \ 00000404 000050E3 CMP R0,#+0 \ 00000408 2400001A BNE ??CheckComand_10 4246 { 4247 comanda=0; \ 0000040C EC0186E5 STR R0,[R6, #+492] 4248 TPKT *p; 4249 int bat; 4250 bat=*RamCap(); \ 00000410 C88000EF SWI +32968 \ 00000414 B0B0D0E1 LDRH R11,[R0, #+0] 4251 char *send_txt=malloc(64); \ 00000418 4000A0E3 MOV R0,#+64 \ 0000041C 140000EF SWI +20 \ 00000420 0040A0E1 MOV R4,R0 4252 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 00000424 0B20A0E1 MOV R2,R11 \ 00000428 AA1F87E2 ADD R1,R7,#+680 \ 0000042C 160000EF SWI +22 4253 p=malloc(sizeof(PKT)+28+1); \ 00000430 2500A0E3 MOV R0,#+37 \ 00000434 140000EF SWI +20 \ 00000438 00B0A0E1 MOV R11,R0 4254 p->pkt.uin=t->uin; \ 0000043C 0C0095E5 LDR R0,[R5, #+12] \ 00000440 00008BE5 STR R0,[R11, #+0] 4255 p->pkt.type=T_SENDMSG; \ 00000444 B4A0CBE1 STRH R10,[R11, #+4] 4256 p->pkt.data_len=strlen(send_txt); \ 00000448 0400A0E1 MOV R0,R4 \ 0000044C 1B0000EF SWI +27 \ 00000450 B600CBE1 STRH R0,[R11, #+6] 4257 strcpy(p->data,send_txt); \ 00000454 0410A0E1 MOV R1,R4 \ 00000458 08008BE2 ADD R0,R11,#+8 \ 0000045C 1A0000EF SWI +26 4258 #ifdef EVILFOX 4259 SENDMSGCOUNT++; 4260 #else 4261 if(show_send_info) \ 00000460 08029FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000464 000090E5 LDR R0,[R0, #+0] \ 00000468 000050E3 CMP R0,#+0 \ 0000046C 200196E5 LDR R0,[R6, #+288] \ 00000470 010080E2 ADD R0,R0,#+1 \ 00000474 200186E5 STR R0,[R6, #+288] \ 00000478 7400000A BEQ ??CheckComand_6 4262 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000047C 0110A0E3 MOV R1,#+1 \ 00000480 02002DE9 PUSH {R1} \ 00000484 000009E0 AND R0,R9,R0 \ 00000488 01002DE9 PUSH {R0} \ 0000048C 1F3087E2 ADD R3,R7,#+31 \ 00000490 3C00A0E3 MOV R0,#+60 \ 00000494 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000498 062080E0 ADD R2,R0,R6 \ 0000049C 680000EA B ??CheckComand_7 4263 else 4264 SENDMSGCOUNT++; 4265 #endif 4266 SUBPROC((void *)SendAnswer,0,p); 4267 mfree(send_txt); 4268 return; 4269 } 4270 4271 if(away_m==1) \ ??CheckComand_10: \ 000004A0 340196E5 LDR R0,[R6, #+308] \ 000004A4 010050E3 CMP R0,#+1 \ 000004A8 3700001A BNE ??CheckComand_11 4272 { 4273 comanda=1; \ 000004AC EC0186E5 STR R0,[R6, #+492] 4274 TPKT *p; 4275 // sprintf(hah,"online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); 4276 4277 if(inp_away_msg2)//Если ввели текст то выводим его,иначе из конфига \ 000004B0 300196E5 LDR R0,[R6, #+304] \ 000004B4 FC20A0E3 MOV R2,#+252 \ 000004B8 502D82E3 ORR R2,R2,#0x1400 \ 000004BC 062082E0 ADD R2,R2,R6 \ 000004C0 00208DE5 STR R2,[SP, #+0] \ 000004C4 0410A0E3 MOV R1,#+4 \ 000004C8 581D81E3 ORR R1,R1,#0x1600 \ 000004CC 063081E0 ADD R3,R1,R6 \ 000004D0 000050E3 CMP R0,#+0 4278 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, ddd, inp_away_msg2, away_msg_time); 4279 else 4280 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, ddd, awayMsg, away_msg_time); \ 000004D4 ........ LDREQ R0,??DataTable123 ;; awayMsg \ 000004D8 94219FE5 LDR R2,??CheckComand_3+0x4 ;; awayHelloMsg \ 000004DC 08002DE9 PUSH {R3} \ 000004E0 01002DE9 PUSH {R0} \ 000004E4 20319DE5 LDR R3,[SP, #+288] \ 000004E8 08009DE5 LDR R0,[SP, #+8] \ 000004EC B11FA0E3 MOV R1,#+708 \ 000004F0 071081E0 ADD R1,R1,R7 \ 000004F4 160000EF SWI +22 \ 000004F8 08D08DE2 ADD SP,SP,#+8 4281 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 000004FC 00009DE5 LDR R0,[SP, #+0] \ 00000500 1B0000EF SWI +27 \ 00000504 090080E2 ADD R0,R0,#+9 \ 00000508 140000EF SWI +20 \ 0000050C 00B0A0E1 MOV R11,R0 4282 p->pkt.uin=t->uin; \ 00000510 0C0095E5 LDR R0,[R5, #+12] \ 00000514 00008BE5 STR R0,[R11, #+0] 4283 p->pkt.type=T_SENDMSG; \ 00000518 B4A0CBE1 STRH R10,[R11, #+4] 4284 p->pkt.data_len=strlen(away_msg); \ 0000051C 00009DE5 LDR R0,[SP, #+0] \ 00000520 1B0000EF SWI +27 \ 00000524 B600CBE1 STRH R0,[R11, #+6] 4285 strcpy(p->data,away_msg); \ 00000528 00109DE5 LDR R1,[SP, #+0] \ 0000052C 08008BE2 ADD R0,R11,#+8 \ 00000530 1A0000EF SWI +26 4286 #ifdef EVILFOX 4287 SENDMSGCOUNT++; 4288 #else 4289 if(show_send_info) \ 00000534 34019FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000538 000090E5 LDR R0,[R0, #+0] \ 0000053C 000050E3 CMP R0,#+0 \ 00000540 200196E5 LDR R0,[R6, #+288] \ 00000544 010080E2 ADD R0,R0,#+1 \ 00000548 200186E5 STR R0,[R6, #+288] \ 0000054C 0A00000A BEQ ??CheckComand_12 4290 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000550 0110A0E3 MOV R1,#+1 \ 00000554 02002DE9 PUSH {R1} \ 00000558 000009E0 AND R0,R9,R0 \ 0000055C 01002DE9 PUSH {R0} \ 00000560 1F3087E2 ADD R3,R7,#+31 \ 00000564 6800A0E3 MOV R0,#+104 \ 00000568 6C0D80E3 ORR R0,R0,#0x1B00 \ 0000056C 062080E0 ADD R2,R0,R6 \ 00000570 0500A0E1 MOV R0,R5 \ 00000574 ........ BL AddStringToLog \ 00000578 08D08DE2 ADD SP,SP,#+8 4291 else 4292 SENDMSGCOUNT++; 4293 #endif 4294 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_12: \ 0000057C 0B20A0E1 MOV R2,R11 \ 00000580 0010A0E3 MOV R1,#+0 \ 00000584 0800A0E1 MOV R0,R8 \ 00000588 710100EF SWI +369 4295 } 4296 #ifdef klcuhnik 4297 if((t->uin==AUTOBOT_UIN)&&(autobot)) 4298 { 4299 TPKT *p; 4300 if(t->bot_msg==0) sprintf(away_msg, "Привет"); 4301 if(t->bot_msg==1) sprintf(away_msg, "думаешь?!"); 4302 if(t->bot_msg==2) sprintf(away_msg, "да что ты говоришь"); 4303 if(t->bot_msg==3) sprintf(away_msg, "странно"); 4304 if(t->bot_msg==4) sprintf(away_msg, "ты так думаешь?"); 4305 if(t->bot_msg==5) sprintf(away_msg, "может быть"); 4306 if(t->bot_msg==6) sprintf(away_msg, "да нахрен"); 4307 if(t->bot_msg==7) sprintf(away_msg, "конечна"); 4308 if(t->bot_msg==8) sprintf(away_msg, "почему нет"); 4309 t->bot_msg++; 4310 if(t->bot_msg==9) 4311 t->bot_msg=1; 4312 // strcpy(away_msg, c); 4313 p=malloc(sizeof(PKT)+strlen(away_msg)+1); 4314 p->pkt.uin=t->uin; 4315 p->pkt.type=T_SENDMSG; 4316 p->pkt.data_len=strlen(away_msg); 4317 strcpy(p->data,away_msg); 4318 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); 4319 SUBPROC((void *)SendAnswer,0,p); 4320 4321 if((t->uin==334492880)&&(autobot_kel)) 4322 { 4323 TPKT *p; 4324 //if(t->bot_msg==0) sprintf(away_msg, "Привет"); 4325 if(t->bot_msg==0) sprintf(away_msg, "думаешь?!"); 4326 if(t->bot_msg==1) sprintf(away_msg, "да что ты говоришь"); 4327 if(t->bot_msg==2) sprintf(away_msg, "странно"); 4328 if(t->bot_msg==3) sprintf(away_msg, "угу"); 4329 if(t->bot_msg==4) sprintf(away_msg, "Не еби мне мозг!"); 4330 if(t->bot_msg==5) sprintf(away_msg, "иди на хуй!!"); 4331 if(t->bot_msg==6) sprintf(away_msg, "сука"); 4332 if(t->bot_msg==7) sprintf(away_msg, "заебал"); 4333 if(t->bot_msg==8) sprintf(away_msg, "отъебись cука!!!*FUCK_YOU*"); 4334 t->bot_msg++; 4335 if(t->bot_msg==9) 4336 t->bot_msg=1; 4337 // strcpy(away_msg, c); 4338 p=malloc(sizeof(PKT)+strlen(away_msg)+1); 4339 p->pkt.uin=t->uin; 4340 p->pkt.type=T_SENDMSG; 4341 p->pkt.data_len=strlen(away_msg); 4342 strcpy(p->data,away_msg); 4343 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); 4344 SUBPROC((void *)SendAnswer,0,p); 4345 } 4346 } 4347 #endif 4348 //----------------------// 4349 4350 if(!strcmp(txt, "GET_URL_INFO"))// kluchnik 26.03.08 \ ??CheckComand_11: \ 0000058C A800A0E3 MOV R0,#+168 \ 00000590 400E80E3 ORR R0,R0,#0x400 \ 00000594 071080E0 ADD R1,R0,R7 \ 00000598 0400A0E1 MOV R0,R4 \ 0000059C 190000EF SWI +25 \ 000005A0 000050E3 CMP R0,#+0 \ 000005A4 2F00001A BNE ??CheckComand_13 4351 { 4352 comanda=0; \ 000005A8 EC0186E5 STR R0,[R6, #+492] 4353 TPKT *p; 4354 4355 char *send_txt=malloc(786); \ 000005AC C40F8AE3 ORR R0,R10,#0x310 \ 000005B0 140000EF SWI +20 \ 000005B4 0040A0E1 MOV R4,R0 4356 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 4357 "http://windes.narod.ru/files/naticq_mod2058s.zip (sgold) (40kb)\n" 4358 "http://windes.narod.ru/files/naticq_mod2058n.zip (NewSGold) (40kb)\n" 4359 "http://windes.narod.ru/files/naticq_mod2058e.zip (elka) (40kb)\n" 4360 "files: http://windes.narod.ru/files/naticqmod_allfiles_w.zip (432kb)\n" 4361 "Status on iconbar http://windes.narod.ru/files/img16x16.zip (74kb)\n" 4362 "Так же все будет тут http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 000005B8 6E0F87E2 ADD R0,R7,#+440 \ 000005BC 01002DE9 PUSH {R0} \ 000005C0 6B3F87E2 ADD R3,R7,#+428 \ 000005C4 C12F87E2 ADD R2,R7,#+772 \ 000005C8 B81F87E2 ADD R1,R7,#+736 \ 000005CC 0400A0E1 MOV R0,R4 \ 000005D0 160000EF SWI +22 4363 4364 p=malloc(sizeof(PKT)+786); \ 000005D4 C60F8AE3 ORR R0,R10,#0x318 \ 000005D8 140000EF SWI +20 \ 000005DC 00B0A0E1 MOV R11,R0 4365 p->pkt.uin=t->uin; \ 000005E0 0C0095E5 LDR R0,[R5, #+12] \ 000005E4 00008BE5 STR R0,[R11, #+0] 4366 p->pkt.type=T_SENDMSG; \ 000005E8 B4A0CBE1 STRH R10,[R11, #+4] 4367 p->pkt.data_len=strlen(send_txt); \ 000005EC 0400A0E1 MOV R0,R4 \ 000005F0 1B0000EF SWI +27 \ 000005F4 B600CBE1 STRH R0,[R11, #+6] 4368 strcpy(p->data,send_txt); \ 000005F8 0410A0E1 MOV R1,R4 \ 000005FC 08008BE2 ADD R0,R11,#+8 \ 00000600 1A0000EF SWI +26 4369 if(show_send_info) \ 00000604 64009FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000608 000090E5 LDR R0,[R0, #+0] \ 0000060C 04D08DE2 ADD SP,SP,#+4 \ 00000610 000050E3 CMP R0,#+0 \ 00000614 200196E5 LDR R0,[R6, #+288] \ 00000618 010080E2 ADD R0,R0,#+1 \ 0000061C 200186E5 STR R0,[R6, #+288] \ 00000620 0A00000A BEQ ??CheckComand_6 4370 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000624 0110A0E3 MOV R1,#+1 \ 00000628 02002DE9 PUSH {R1} \ 0000062C 000009E0 AND R0,R9,R0 \ 00000630 01002DE9 PUSH {R0} \ 00000634 1F3087E2 ADD R3,R7,#+31 \ 00000638 9400A0E3 MOV R0,#+148 \ 0000063C 400E80E3 ORR R0,R0,#0x400 \ 00000640 072080E0 ADD R2,R0,R7 \ ??CheckComand_7: \ 00000644 0500A0E1 MOV R0,R5 \ 00000648 ........ BL AddStringToLog \ 0000064C 08D08DE2 ADD SP,SP,#+8 4371 else 4372 SENDMSGCOUNT++; 4373 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_6: \ 00000650 0B20A0E1 MOV R2,R11 \ 00000654 0010A0E3 MOV R1,#+0 \ 00000658 0800A0E1 MOV R0,R8 \ 0000065C 710100EF SWI +369 4374 mfree(send_txt); \ 00000660 0400A0E1 MOV R0,R4 \ 00000664 150000EF SWI +21 4375 return; \ ??CheckComand_13: \ 00000668 47DF8DE2 ADD SP,SP,#+284 ;; stack cleaning \ 0000066C F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_3: \ 00000670 ........ DC32 show_send_info \ 00000674 ........ DC32 awayHelloMsg 4376 } 4377 } 4378 //===========================komand list end 4379 \ In segment DATA_Z, align 4, align-sorted 4380 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 4381 char show_nick[32]; 4382 int INC_show; 4383 #ifdef ELKA 4384 int font =9; 4385 #else 4386 int font= 4; 4387 #endif 4388 const char color[4]={255,255,255,100}; 4389 \ In segment CODE, align 4, keep-with-next 4390 void show_pp_sender() 4391 { \ show_pp_sender: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 4392 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable125 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C F00194E5 LDR R0,[R4, #+496] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F383BDB8 POPLT {R0,R1,R4-R9,PC} 4393 { 4394 WSHDR *ws=AllocWS(256); 4395 ascii2ws(ws,show_nick); 4396 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 4397 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 8800A0E3 MOV R0,#+136 \ 0000002C 700D80E3 ORR R0,R0,#0x1C00 \ 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] 4398 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 4399 { 4400 extern void DrawScreenShot(); 4401 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 4402 } 4403 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 F40194E5 LDR R0,[R4, #+500] \ 00000090 C50100EF SWI +453 \ 00000094 F41194E5 LDR R1,[R4, #+500] \ 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 4404 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 F40194E5 LDR R0,[R4, #+500] \ 000000D4 C50100EF SWI +453 \ 000000D8 F41194E5 LDR R1,[R4, #+500] \ 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 F41194E5 LDR R1,[R4, #+500] \ 0000010C 02002DE9 PUSH {R1} \ 00000110 011087E2 ADD R1,R7,#+1 \ 00000114 02002DE9 PUSH {R1} \ 00000118 0210A0E1 MOV R1,R2 \ 0000011C 4C0100EF SWI +332 4405 4406 FreeWS(ws); \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 290100EF SWI +297 4407 INC_show--; \ 00000128 F00194E5 LDR R0,[R4, #+496] 4408 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 F00184E5 STR R0,[R4, #+496] \ 00000138 0A10A0E3 MOV R1,#+10 \ 0000013C 6C0D84E2 ADD R0,R4,#+6912 \ 00000140 4D0000EF SWI +77 \ 00000144 20D08DE2 ADD SP,SP,#+32 4409 } 4410 } \ 00000148 F383BDE8 POP {R0,R1,R4-R9,PC} ;; return \ ??show_pp_sender_0: \ 0000014C ........ DC32 `?` \ 00000150 ........ DC32 show_pp_sender 4411 4412 4413 \ In segment CODE, align 4, keep-with-next 4414 void Get_Online_total() 4415 { 4416 CLIST *t; 4417 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable125 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 CC1180E5 STR R1,[R0, #+460] 4418 kopa_kontaktu=0; \ 0000000C D01180E5 STR R1,[R0, #+464] 4419 t=(CLIST *)(&cltop); \ 00000010 6D1F80E2 ADD R1,R0,#+436 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 4420 while(t=(CLIST *)(t->next)) 4421 { 4422 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 4423 { 4424 kopa_online++; \ 0000002C CC2190E5 LDR R2,[R0, #+460] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 CC2180E5 STR R2,[R0, #+460] 4425 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 D0219015 LDRNE R2,[R0, #+464] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 D0218015 STRNE R2,[R0, #+464] 4426 } 4427 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 4428 } \ 00000058 1EFF2FE1 BX LR ;; return 4429 \ In segment CODE, align 4, keep-with-next 4430 ProcessPacket(TPKT *p) 4431 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 50DF4DE2 SUB SP,SP,#+320 4432 4433 CLIST *t; 4434 LOGQ *q; 4435 char s[256]; 4436 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable138 ;; `?pkt.uin) \ ??ProcessPacket_3: \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 1800000A BEQ ??ProcessPacket_4 4444 { 4445 if ((t=FindContactByUin(p->pkt.uin))) \ 00000090 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000094 0090B0E1 MOVS R9,R0 \ 00000098 0E00000A BEQ ??ProcessPacket_5 4446 { 4447 // t->state=0xFFFF; 4448 if (!t->local) strncpy(t->name,p->data,63); \ 0000009C 940099E5 LDR R0,[R9, #+148] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300001A BNE ??ProcessPacket_6 \ 000000A8 3F20A0E3 MOV R2,#+63 \ 000000AC 081084E2 ADD R1,R4,#+8 \ 000000B0 140089E2 ADD R0,R9,#+20 \ 000000B4 160100EF SWI +278 4449 t->group=GROUP_CACHE; \ ??ProcessPacket_6: \ 000000B8 B80197E5 LDR R0,[R7, #+440] \ 000000BC 100089E5 STR R0,[R9, #+16] 4450 ChangeContactPos(t); \ ??ProcessPacket_7: \ 000000C0 0900A0E1 MOV R0,R9 \ 000000C4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4451 RecountMenu(t,1); \ 000000C8 0110A0E3 MOV R1,#+1 \ 000000CC 0900A0E1 MOV R0,R9 \ ??ProcessPacket_8: \ 000000D0 ........ BL RecountMenu \ 000000D4 270200EA B ??ProcessPacket_1 4452 } 4453 else 4454 { 4455 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_5: \ 000000D8 B82197E5 LDR R2,[R7, #+440] \ 000000DC 000094E5 LDR R0,[R4, #+0] \ 000000E0 0030A0E3 MOV R3,#+0 \ 000000E4 081084E2 ADD R1,R4,#+8 \ 000000E8 ........ _BLF AddContact,??AddContact??rA \ 000000EC 0610A0E1 MOV R1,R6 \ 000000F0 F6FFFFEA B ??ProcessPacket_8 4456 } 4457 } 4458 else 4459 { 4460 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000F4 ........ LDR R0,??DataTable128 ;; VIBR_ON_CONNECT \ 000000F8 000090E5 LDR R0,[R0, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0100000A BEQ ??ProcessPacket_9 4461 { 4462 vibra_count=1; \ 00000104 7C6187E5 STR R6,[R7, #+380] 4463 start_vibra(); \ 00000108 ........ BL start_vibra 4464 } 4465 GROUP_CACHE=0; \ ??ProcessPacket_9: \ 0000010C B88187E5 STR R8,[R7, #+440] 4466 ask_my_info(); 4467 if (contactlist_menu_id) \ 00000110 BC0197E5 LDR R0,[R7, #+444] \ 00000114 000050E3 CMP R0,#+0 \ 00000118 0200000A BEQ ??ProcessPacket_10 4468 { 4469 RecountMenu(NULL,1); \ 0000011C 0110A0E3 MOV R1,#+1 \ 00000120 0800A0E1 MOV R0,R8 \ ??ProcessPacket_11: \ 00000124 E9FFFFEA B ??ProcessPacket_8 4470 } 4471 else 4472 { 4473 create_contactlist_menu(); \ ??ProcessPacket_10: \ 00000128 ........ BL create_contactlist_menu \ 0000012C 110200EA B ??ProcessPacket_1 4474 // if(!dontLogOnConnect && isLogOnline) dontLogOnConnect=1; 4475 } 4476 } 4477 break; 4478 case T_GROUPID: 4479 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_12: \ 00000130 B80187E5 STR R0,[R7, #+440] \ 00000134 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000138 0090B0E1 MOVS R9,R0 \ 0000013C 0400000A BEQ ??ProcessPacket_13 4480 { 4481 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 4482 ChangeContactPos(t); \ 00000150 DAFFFFEA B ??ProcessPacket_7 4483 RecountMenu(t,1); 4484 } 4485 else 4486 { 4487 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_13: \ 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_8 4488 } 4489 break; 4490 case T_GROUPFOLLOW: 4491 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_14: \ 00000168 B80187E5 STR R0,[R7, #+440] \ 0000016C 010200EA B ??ProcessPacket_1 4492 break; 4493 case T_STATUSCHANGE: 4494 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_15: \ 00000170 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000174 0090B0E1 MOVS R9,R0 4495 if (t) \ 00000178 A300000A BEQ ??ProcessPacket_16 4496 { 4497 int i=t->state; \ 0000017C B415D9E1 LDRH R1,[R9, #+84] 4498 CLIST *oldt=NULL; \ 00000180 00A0A0E3 MOV R10,#+0 \ 00000184 10108DE5 STR R1,[SP, #+16] \ 00000188 0A00D4E5 LDRB R0,[R4, #+10] \ 0000018C B615D9E1 LDRH R1,[R9, #+86] \ 00000190 000051E1 CMP R1,R0 \ 00000194 1D00000A BEQ ??ProcessPacket_17 4499 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 4500 { 4501 t->xstate=p->data[2]; \ 00000198 B605C9E1 STRH R0,[R9, #+86] 4502 FreeXText(t); \ 0000019C 0900A0E1 MOV R0,R9 \ 000001A0 ........ _BLF FreeXText,??FreeXText??rA 4503 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001A4 B605D9E1 LDRH R0,[R9, #+86] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 1600000A BEQ ??ProcessPacket_18 \ 000001B0 D4079FE5 LDR R0,??ProcessPacket_19+0x4 ;; ENA_AUTO_XTXT \ 000001B4 000090E5 LDR R0,[R0, #+0] \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 1200000A BEQ ??ProcessPacket_18 4504 { 4505 t->req_xtext=1; \ 000001C0 906089E5 STR R6,[R9, #+144] 4506 if (edchat_id) // Если открыт чат \ 000001C4 C00197E5 LDR R0,[R7, #+448] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 0F00000A BEQ ??ProcessPacket_17 4507 { 4508 void *data=FindGUIbyId(edchat_id,NULL); \ 000001D0 C00197E5 LDR R0,[R7, #+448] \ 000001D4 0010A0E3 MOV R1,#+0 \ 000001D8 090200EF SWI +521 4509 if (data) \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 0A00000A BEQ ??ProcessPacket_17 4510 { 4511 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001E4 DF0100EF SWI +479 4512 if (ed_struct) \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0700000A BEQ ??ProcessPacket_17 4513 { 4514 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001F0 000090E5 LDR R0,[R0, #+0] \ 000001F4 090050E1 CMP R0,R9 \ 000001F8 0400001A BNE ??ProcessPacket_17 4515 { 4516 t->req_xtext=0; \ 000001FC 908089E5 STR R8,[R9, #+144] 4517 RequestXText(t->uin); \ 00000200 0C0099E5 LDR R0,[R9, #+12] \ 00000204 ........ BL RequestXText \ 00000208 000000EA B ??ProcessPacket_17 4518 } 4519 } 4520 } 4521 } 4522 } 4523 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 4524 { 4525 t->req_xtext=0; \ ??ProcessPacket_18: \ 0000020C 908089E5 STR R8,[R9, #+144] 4526 } 4527 } 4528 if (contactlist_menu_id) \ ??ProcessPacket_17: \ 00000210 BC0197E5 LDR R0,[R7, #+444] \ 00000214 000050E3 CMP R0,#+0 \ 00000218 0500000A BEQ ??ProcessPacket_20 4529 { 4530 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000021C BC0197E5 LDR R0,[R7, #+444] \ 00000220 0010A0E3 MOV R1,#+0 \ 00000224 090200EF SWI +521 \ 00000228 8F0100EF SWI +399 \ 0000022C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000230 00A0A0E1 MOV R10,R0 4531 } 4532 if(t->state==65535) t->change=1; \ ??ProcessPacket_20: \ 00000234 B405D9E1 LDRH R0,[R9, #+84] \ 00000238 FFB0A0E3 MOV R11,#+255 \ 0000023C FFBC8BE3 ORR R11,R11,#0xFF00 \ 00000240 0B0050E1 CMP R0,R11 \ 00000244 60608905 STREQ R6,[R9, #+96] 4533 t->state=*((unsigned short *)(p->data)); \ 00000248 B800D4E1 LDRH R0,[R4, #+8] \ 0000024C B405C9E1 STRH R0,[R9, #+84] 4534 if((t->state!=65535)&&(t->change==1)) \ 00000250 0B0050E1 CMP R0,R11 \ 00000254 0400000A BEQ ??ProcessPacket_21 \ 00000258 600099E5 LDR R0,[R9, #+96] \ 0000025C 010050E3 CMP R0,#+1 4535 { 4536 t->just_now=2; \ 00000260 0200A003 MOVEQ R0,#+2 \ 00000264 5C008905 STREQ R0,[R9, #+92] 4537 t->change=0; \ 00000268 60808905 STREQ R8,[R9, #+96] 4538 } 4539 LogStatusChange(t); \ ??ProcessPacket_21: \ 0000026C 0900A0E1 MOV R0,R9 \ 00000270 ........ _BLF LogStatusChange,??LogStatusChange??rA 4540 ChangeContactPos(t); \ 00000274 0900A0E1 MOV R0,R9 \ 00000278 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4541 RecountMenu(oldt,1); \ 0000027C 0110A0E3 MOV R1,#+1 \ 00000280 0A00A0E1 MOV R0,R10 \ 00000284 ........ BL RecountMenu 4542 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ 00000288 B405D9E1 LDRH R0,[R9, #+84] \ 0000028C B860A0E3 MOV R6,#+184 \ 00000290 406E86E3 ORR R6,R6,#0x400 \ 00000294 0B0050E1 CMP R0,R11 \ 00000298 1D00000A BEQ ??ProcessPacket_22 \ 0000029C 10109DE5 LDR R1,[SP, #+16] \ 000002A0 0B0051E1 CMP R1,R11 \ 000002A4 1A00001A BNE ??ProcessPacket_22 4543 { 4544 #ifdef EVILFOX 4545 if(!extended_sounds) 4546 { 4547 Play(sndGlobal); 4548 4549 } 4550 else 4551 { 4552 uins=t->uin; 4553 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); 4554 Play(talk_sound); 4555 4556 } 4557 #else 4558 /* 4559 #ifdef kluchnik 4560 void SetIconBarHandler(); 4561 if(t->uin==438532198) 4562 { 4563 solnce=1; 4564 SetIconBarHandler(); 4565 } 4566 #endif*/ 4567 if(!extended_sounds) \ 000002A8 ........ LDR R0,??DataTable129 ;; extended_sounds \ 000002AC DCA69FE5 LDR R10,??ProcessPacket_19+0x8 ;; sndGlobal \ 000002B0 000090E5 LDR R0,[R0, #+0] \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0300001A BNE ??ProcessPacket_23 4568 { 4569 Play(sndGlobal); \ 000002BC 0A00A0E1 MOV R0,R10 \ ??ProcessPacket_24: \ 000002C0 ........ BL Play 4570 if(isLogOnline) //by kluchnik 26.03.08 \ 000002C4 C8069FE5 LDR R0,??ProcessPacket_19+0xC ;; isLogOnline \ 000002C8 1C0000EA B ??ProcessPacket_25 4571 { 4572 FreeXText2(t); 4573 TTime time; 4574 TDate date; 4575 GetDateTime(&date,&time); 4576 char *txt=malloc(64); 4577 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); 4578 4579 t->xtext2=malloc(64); 4580 snprintf(t->xtext2,64,txt); 4581 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); 4582 ReqAddMsgToChat(t); 4583 // RecountMenu(t, 1); 4584 RecountMenu(NULL, 0); 4585 mfree(txt); 4586 } 4587 } 4588 else 4589 { 4590 FSTATS stat; 4591 int fsize; 4592 unsigned int ul = 0; 4593 uins=t->uin; 4594 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ ??ProcessPacket_23: \ 000002CC C4269FE5 LDR R2,??ProcessPacket_19+0x10 ;; sndGlobal2 \ 000002D0 14808DE5 STR R8,[SP, #+20] \ 000002D4 0C0099E5 LDR R0,[R9, #+12] \ 000002D8 D78FA0E3 MOV R8,#+860 \ 000002DC F40087E5 STR R0,[R7, #+244] \ 000002E0 0030A0E1 MOV R3,R0 \ 000002E4 4D1F85E2 ADD R1,R5,#+308 \ 000002E8 070088E0 ADD R0,R8,R7 \ 000002EC 160000EF SWI +22 4595 GetFileStats(talk_sound,&stat,&ul); \ 000002F0 14208DE2 ADD R2,SP,#+20 \ 000002F4 461F8DE2 ADD R1,SP,#+280 \ 000002F8 070088E0 ADD R0,R8,R7 \ 000002FC 840000EF SWI +132 4596 fsize=stat.size; 4597 if(fsize>0) \ 00000300 1C019DE5 LDR R0,[SP, #+284] \ 00000304 010050E3 CMP R0,#+1 4598 Play(talk_sound); \ 00000308 070088A0 ADDGE R0,R8,R7 4599 else 4600 Play(sndGlobal); \ 0000030C 0A00A0B1 MOVLT R0,R10 \ 00000310 EAFFFFEA B ??ProcessPacket_24 4601 if(isLogOnline ) //by kluchnik 26.03.08 4602 { 4603 FreeXText2(t); 4604 TTime time; 4605 TDate date; 4606 GetDateTime(&date,&time); 4607 char *txt=malloc(64); 4608 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); 4609 4610 t->xtext2=malloc(64); 4611 snprintf(t->xtext2,64,txt); 4612 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); 4613 ReqAddMsgToChat(t); 4614 // RecountMenu(t, 1); 4615 RecountMenu(NULL, 0); 4616 mfree(txt); 4617 } 4618 } 4619 #endif 4620 } 4621 4622 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_22: \ 00000314 10109DE5 LDR R1,[SP, #+16] \ 00000318 0B0051E1 CMP R1,R11 \ 0000031C 3500000A BEQ ??ProcessPacket_26 \ 00000320 0B0050E1 CMP R0,R11 \ 00000324 3300001A BNE ??ProcessPacket_26 4623 { 4624 Play(sndSrvMsg); \ 00000328 6C069FE5 LDR R0,??ProcessPacket_19+0x14 ;; sndSrvMsg \ 0000032C ........ BL Play 4625 4626 //-------------------- Log offline ----------------------// 4627 4628 if(t->isactive && isLogOffline) // by kluchnik 26.03.08 \ 00000330 800099E5 LDR R0,[R9, #+128] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 2E00000A BEQ ??ProcessPacket_26 \ 0000033C 5C069FE5 LDR R0,??ProcessPacket_19+0x18 ;; isLogOffline \ ??ProcessPacket_25: \ 00000340 000090E5 LDR R0,[R0, #+0] \ 00000344 000050E3 CMP R0,#+0 \ 00000348 2A00000A BEQ ??ProcessPacket_26 4629 { 4630 FreeXText2(t); \ 0000034C 0900A0E1 MOV R0,R9 \ 00000350 ........ BL FreeXText2 4631 TTime time; 4632 TDate date; 4633 GetDateTime(&date,&time); \ 00000354 0D10A0E1 MOV R1,SP \ 00000358 08008DE2 ADD R0,SP,#+8 \ 0000035C B40000EF SWI +180 4634 char *txt=malloc(64); \ 00000360 4000A0E3 MOV R0,#+64 \ 00000364 140000EF SWI +20 \ 00000368 0080A0E1 MOV R8,R0 4635 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); \ 0000036C 0D00DDE5 LDRB R0,[SP, #+13] \ 00000370 051086E0 ADD R1,R6,R5 \ 00000374 01002DE9 PUSH {R0} \ 00000378 1000DDE5 LDRB R0,[SP, #+16] \ 0000037C 01002DE9 PUSH {R0} \ 00000380 0A00DDE5 LDRB R0,[SP, #+10] \ 00000384 01002DE9 PUSH {R0} \ 00000388 0C20DDE5 LDRB R2,[SP, #+12] \ 0000038C 0D30DDE5 LDRB R3,[SP, #+13] \ 00000390 0800A0E1 MOV R0,R8 \ 00000394 160000EF SWI +22 4636 4637 t->xtext2=malloc(64); \ 00000398 4000A0E3 MOV R0,#+64 \ 0000039C 140000EF SWI +20 \ 000003A0 8C0089E5 STR R0,[R9, #+140] 4638 snprintf(t->xtext2,64,txt); \ 000003A4 0820A0E1 MOV R2,R8 \ 000003A8 4010A0E3 MOV R1,#+64 \ 000003AC 1B0100EF SWI +283 4639 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); \ 000003B0 0000A0E3 MOV R0,#+0 \ 000003B4 01002DE9 PUSH {R0} \ 000003B8 0820A0E1 MOV R2,R8 \ 000003BC 0310A0E3 MOV R1,#+3 \ 000003C0 0000E0E1 MVN R0,R0 \ 000003C4 01002DE9 PUSH {R0} \ 000003C8 8F0F86E2 ADD R0,R6,#+572 \ 000003CC 053080E0 ADD R3,R0,R5 \ 000003D0 0900A0E1 MOV R0,R9 \ 000003D4 ........ BL AddStringToLog 4640 ReqAddMsgToChat(t); \ 000003D8 0900A0E1 MOV R0,R9 \ 000003DC ........ BL ReqAddMsgToChat 4641 // RecountMenu(t, 1); 4642 RecountMenu(NULL, 0); \ 000003E0 0010A0E3 MOV R1,#+0 \ 000003E4 0000A0E3 MOV R0,#+0 \ 000003E8 ........ BL RecountMenu 4643 mfree(txt); \ 000003EC 0800A0E1 MOV R0,R8 \ 000003F0 150000EF SWI +21 \ 000003F4 14D08DE2 ADD SP,SP,#+20 4644 } 4645 } 4646 4647 //------------------------------------------------------------// 4648 4649 if(TIME_OR_MSG==2) \ ??ProcessPacket_26: \ 000003F8 ........ LDR R0,??DataTable130 ;; TIME_OR_MSG \ 000003FC 000090E5 LDR R0,[R0, #+0] \ 00000400 020050E3 CMP R0,#+2 \ 00000404 0000001A BNE ??ProcessPacket_16 4650 Get_Online_total(); \ 00000408 ........ BL Get_Online_total 4651 } 4652 if (edchat_id) \ ??ProcessPacket_16: \ 0000040C C00197E5 LDR R0,[R7, #+448] \ 00000410 000050E3 CMP R0,#+0 \ 00000414 5701000A BEQ ??ProcessPacket_1 4653 { 4654 void *data=FindGUIbyId(edchat_id,NULL); \ 00000418 C00197E5 LDR R0,[R7, #+448] \ 0000041C 0010A0E3 MOV R1,#+0 \ 00000420 090200EF SWI +521 4655 { 4656 EDCHAT_STRUCT *ed_struct; 4657 ed_struct=EDIT_GetUserPointer(data); \ 00000424 DF0100EF SWI +479 4658 if (ed_struct) \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 5101000A BEQ ??ProcessPacket_1 4659 { 4660 if (ed_struct->ed_contact==t) \ 00000430 000090E5 LDR R0,[R0, #+0] \ 00000434 090050E1 CMP R0,R9 \ 00000438 4E01001A BNE ??ProcessPacket_1 4661 { 4662 DirectRedrawGUI_ID(edchat_id); \ 0000043C C00197E5 LDR R0,[R7, #+448] \ 00000440 400100EF SWI +320 \ 00000444 4B0100EA B ??ProcessPacket_1 4663 } 4664 } 4665 } 4666 } 4667 break; 4668 case T_RECVMSG: 4669 NEW_MSG=1; \ ??ProcessPacket_27: \ 00000448 E46187E5 STR R6,[R7, #+484] 4670 t=FindContactByUin(p->pkt.uin); \ 0000044C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000450 0090B0E1 MOVS R9,R0 4671 if (!t) \ 00000454 0900001A BNE ??ProcessPacket_28 4672 { 4673 sprintf(s,percent_d,p->pkt.uin); \ 00000458 002094E5 LDR R2,[R4, #+0] \ 0000045C 1B1085E2 ADD R1,R5,#+27 \ 00000460 18008DE2 ADD R0,SP,#+24 \ 00000464 160000EF SWI +22 4674 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 00000468 B82197E5 LDR R2,[R7, #+440] \ 0000046C 000094E5 LDR R0,[R4, #+0] \ 00000470 0030A0E3 MOV R3,#+0 \ 00000474 18108DE2 ADD R1,SP,#+24 \ 00000478 ........ _BLF AddContact,??AddContact??rA \ 0000047C 0090A0E1 MOV R9,R0 4675 } 4676 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ 000004B8 5A0FA013 MOVNE R0,#+360 \ 000004BC 80008915 STRNE R0,[R9, #+128] 4679 // ChangeContactPos(t); 4680 if(VIBR_TYPE) \ 000004C0 ........ LDR R0,??DataTable133 ;; VIBR_TYPE \ 000004C4 000090E5 LDR R0,[R0, #+0] \ 000004C8 000050E3 CMP R0,#+0 4681 vibra_count=2; \ 000004CC 0200A013 MOVNE R0,#+2 \ 000004D0 7C018715 STRNE R0,[R7, #+380] 4682 else 4683 vibra_count=1; \ 000004D4 7C618705 STREQ R6,[R7, #+380] 4684 start_vibra(); \ 000004D8 ........ BL start_vibra 4685 #ifdef ELKA 4686 if(SLI_TYPE) 4687 SLI_Timer(); \ 000004DC ........ BL SLI_Timer 4688 #endif 4689 if(Is_Double_Vibra_On) \ 000004E0 100197E5 LDR R0,[R7, #+272] \ 000004E4 000050E3 CMP R0,#+0 \ 000004E8 0000000A BEQ ??ProcessPacket_30 4690 Reminder_timer(); \ 000004EC ........ BL Reminder_timer 4691 if (Is_ILU_On) \ ??ProcessPacket_30: \ 000004F0 0C0197E5 LDR R0,[R7, #+268] \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 0800000A BEQ ??ProcessPacket_31 4692 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000004FC A0049FE5 LDR R0,??ProcessPacket_19+0x1C ;; ILL_RECV_FADE \ 00000500 003090E5 LDR R3,[R0, #+0] \ 00000504 9C049FE5 LDR R0,??ProcessPacket_19+0x20 ;; ILL_RECV_TMR \ 00000508 002090E5 LDR R2,[R0, #+0] \ 0000050C 98049FE5 LDR R0,??ProcessPacket_19+0x24 ;; ILL_KEYS_RECV \ 00000510 001090E5 LDR R1,[R0, #+0] \ 00000514 94049FE5 LDR R0,??ProcessPacket_19+0x28 ;; ILL_DISP_RECV \ 00000518 000090E5 LDR R0,[R0, #+0] \ 0000051C ........ BL IlluminationOn 4693 if (t->name[0]=='#') \ ??ProcessPacket_31: \ 00000520 1400D9E5 LDRB R0,[R9, #+20] \ 00000524 230050E3 CMP R0,#+35 \ 00000528 1700001A BNE ??ProcessPacket_32 4694 { 4695 //Если это конференция, патчим имя 4696 char *s=strchr(p->data,'>'); \ 0000052C 3E10A0E3 MOV R1,#+62 \ 00000530 080084E2 ADD R0,R4,#+8 \ 00000534 180000EF SWI +24 4697 //Если нашли символ > и после него пробел и ник короче 16 символов 4698 if (s) \ 00000538 000050E3 CMP R0,#+0 \ 0000053C 1200000A BEQ ??ProcessPacket_32 4699 { 4700 if ((s[1]==' ')&&((s-p->data)<16)) \ 00000540 0110D0E5 LDRB R1,[R0, #+1] \ 00000544 200051E3 CMP R1,#+32 \ 00000548 0F00001A BNE ??ProcessPacket_32 \ 0000054C 081084E2 ADD R1,R4,#+8 \ 00000550 011040E0 SUB R1,R0,R1 \ 00000554 100051E3 CMP R1,#+16 \ 00000558 0B0000AA BGE ??ProcessPacket_32 4701 { 4702 *s=0; //Режем строку \ 0000055C 0080C0E5 STRB R8,[R0, #+0] 4703 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 00000560 0110A0E3 MOV R1,#+1 \ 00000564 02002DE9 PUSH {R1} \ 00000568 083084E2 ADD R3,R4,#+8 \ 0000056C 022080E2 ADD R2,R0,#+2 \ 00000570 0900A0E1 MOV R0,R9 \ 00000574 001061E2 RSB R1,R1,#+0 \ 00000578 02002DE9 PUSH {R1} \ 0000057C 0210A0E3 MOV R1,#+2 \ 00000580 ........ BL AddStringToLog 4704 goto L1; \ 00000584 08D08DE2 ADD SP,SP,#+8 \ 00000588 2A0000EA B ??ProcessPacket_33 4705 } 4706 } 4707 } 4708 4709 //=================== tas bus jautri ===================// 4710 4711 comanda=1; \ ??ProcessPacket_32: \ 0000058C EC6187E5 STR R6,[R7, #+492] 4712 // if(UIN!=t->uin) 4713 CheckComand(p->data, t, t->name); \ 00000590 142089E2 ADD R2,R9,#+20 \ 00000594 0910A0E1 MOV R1,R9 \ 00000598 080084E2 ADD R0,R4,#+8 \ 0000059C ........ BL CheckComand 4714 if(comanda==1) \ 000005A0 EC0197E5 LDR R0,[R7, #+492] \ 000005A4 010050E3 CMP R0,#+1 \ 000005A8 2200001A BNE ??ProcessPacket_33 4715 { 4716 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 000005AC 01002DE9 PUSH {R0} \ 000005B0 143089E2 ADD R3,R9,#+20 \ 000005B4 082084E2 ADD R2,R4,#+8 \ 000005B8 0210A0E3 MOV R1,#+2 \ 000005BC 000066E2 RSB R0,R6,#+0 \ 000005C0 01002DE9 PUSH {R0} \ 000005C4 0900A0E1 MOV R0,R9 \ 000005C8 ........ BL AddStringToLog 4717 main_count++; \ 000005CC ........ LDR R0,??DataTable134 ;; main_count \ 000005D0 001090E5 LDR R1,[R0, #+0] \ 000005D4 011081E2 ADD R1,R1,#+1 \ 000005D8 001080E5 STR R1,[R0, #+0] 4718 if(Is_INC_On) \ 000005DC 080197E5 LDR R0,[R7, #+264] \ 000005E0 08D08DE2 ADD SP,SP,#+8 \ 000005E4 000050E3 CMP R0,#+0 \ 000005E8 0C00000A BEQ ??ProcessPacket_34 4719 { 4720 strcpy(show_nick, t->name); \ 000005EC 141089E2 ADD R1,R9,#+20 \ 000005F0 8800A0E3 MOV R0,#+136 \ 000005F4 700D80E3 ORR R0,R0,#0x1C00 \ 000005F8 070080E0 ADD R0,R0,R7 \ 000005FC 1A0000EF SWI +26 4721 if(!IsIdleUiOnTop()&&(!saver_on)) \ 00000600 C50000EF SWI +197 \ 00000604 000050E3 CMP R0,#+0 \ 00000608 F8009705 LDREQ R0,[R7, #+248] \ 0000060C 00005003 CMPEQ R0,#+0 \ 00000610 0200001A BNE ??ProcessPacket_34 4722 { 4723 //int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 4724 // char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 4725 // if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) 4726 // { 4727 INC_show=15; \ 00000614 0F00A0E3 MOV R0,#+15 \ 00000618 F00187E5 STR R0,[R7, #+496] 4728 show_pp_sender(); \ 0000061C ........ BL show_pp_sender 4729 //} 4730 } 4731 } 4732 if(Is_SMARTCPU_On) \ ??ProcessPacket_34: \ 00000620 040197E5 LDR R0,[R7, #+260] \ 00000624 000050E3 CMP R0,#+0 \ 00000628 0200000A BEQ ??ProcessPacket_33 4733 AddToMain(t->name,p->data); \ 0000062C 081084E2 ADD R1,R4,#+8 \ 00000630 140089E2 ADD R0,R9,#+20 \ 00000634 ........ BL AddToMain 4734 } 4735 // if((Is_SMARTCPU_On)&&(comanda==1)) 4736 // AddToMain(t->name,p->data); 4737 L1: 4738 //Разворачиваем группу, в которой пришло сообщение 4739 { 4740 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_33: \ 00000638 100099E5 LDR R0,[R9, #+16] \ 0000063C ........ _BLF FindGroupByID,??FindGroupByID??rA 4741 if (g) \ 00000640 000050E3 CMP R0,#+0 4742 { 4743 if (g->state) \ 00000644 B415D011 LDRHNE R1,[R0, #+84] \ 00000648 00005113 CMPNE R1,#+0 4744 { 4745 g->state=0; \ 0000064C B485C011 STRHNE R8,[R0, #+84] 4746 } 4747 } 4748 } 4749 // if(comanda==1) 4750 // { 4751 ReqAddMsgToChat(t); \ 00000650 0900A0E1 MOV R0,R9 \ 00000654 ........ BL ReqAddMsgToChat 4752 RecountMenu(t,1); \ 00000658 0110A0E3 MOV R1,#+1 \ 0000065C 0900A0E1 MOV R0,R9 \ 00000660 ........ BL RecountMenu 4753 4754 switch (DEVELOP_IF) \ 00000664 48039FE5 LDR R0,??ProcessPacket_19+0x2C ;; DEVELOP_IF \ 00000668 000090E5 LDR R0,[R0, #+0] \ 0000066C 000050E3 CMP R0,#+0 \ 00000670 0400000A BEQ ??ProcessPacket_35 \ 00000674 010050E2 SUBS R0,R0,#+1 \ 00000678 0B00000A BEQ ??ProcessPacket_36 \ 0000067C 020050E2 SUBS R0,R0,#+2 \ 00000680 1300000A BEQ ??ProcessPacket_37 \ 00000684 BB0000EA B ??ProcessPacket_1 4755 { 4756 case 0: 4757 #ifdef EVILFOX 4758 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) GBS_StartTimerProc(&develop, 216*2, to_develop); 4759 #else 4760 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_35: \ 00000688 068100EF SWI +33030 \ 0000068C 080090E5 LDR R0,[R0, #+8] \ 00000690 181197E5 LDR R1,[R7, #+280] \ 00000694 0C0090E5 LDR R0,[R0, #+12] \ 00000698 0C0090E5 LDR R0,[R0, #+12] \ 0000069C 010050E1 CMP R0,R1 \ ??ProcessPacket_38: \ 000006A0 B400000A BEQ ??ProcessPacket_1 \ 000006A4 ........ BL to_develop \ 000006A8 B20000EA B ??ProcessPacket_1 4761 #endif 4762 break; 4763 case 1: 4764 #ifdef EVILFOX 4765 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) GBS_StartTimerProc(&develop, 216*2, to_develop); 4766 #else 4767 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_36: \ 000006AC 068100EF SWI +33030 \ 000006B0 080090E5 LDR R0,[R0, #+8] \ 000006B4 181197E5 LDR R1,[R7, #+280] \ 000006B8 0C0090E5 LDR R0,[R0, #+12] \ 000006BC 0C0090E5 LDR R0,[R0, #+12] \ 000006C0 010050E1 CMP R0,R1 \ 000006C4 AB00000A BEQ ??ProcessPacket_1 \ 000006C8 430000EF SWI +67 \ 000006CC 000050E3 CMP R0,#+0 \ 000006D0 F2FFFFEA B ??ProcessPacket_38 4768 #endif 4769 break; 4770 case 2: 4771 break; 4772 case 3: 4773 GBS_DelTimer(&develop); \ ??ProcessPacket_37: \ 000006D4 6C0D87E2 ADD R0,R7,#+6912 \ 000006D8 8C0100EF SWI +396 4774 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 000006DC 068100EF SWI +33030 \ 000006E0 080090E5 LDR R0,[R0, #+8] \ 000006E4 181197E5 LDR R1,[R7, #+280] \ 000006E8 0C0090E5 LDR R0,[R0, #+12] \ 000006EC 0C0090E5 LDR R0,[R0, #+12] \ 000006F0 010050E1 CMP R0,R1 \ 000006F4 9F00000A BEQ ??ProcessPacket_1 \ 000006F8 430000EF SWI +67 \ 000006FC 000050E3 CMP R0,#+0 \ 00000700 9C00001A BNE ??ProcessPacket_1 \ 00000704 ........ BL begin_to_develop \ 00000708 9A0000EA B ??ProcessPacket_1 4775 break; 4776 } 4777 // } 4778 break; 4779 case T_SRV_ACK: 4780 case T_CLIENT_ACK: 4781 q=FindContactLOGQByAck(p); \ ??ProcessPacket_39: \ 0000070C 0400A0E1 MOV R0,R4 \ 00000710 ........ BL FindContactLOGQByAck 4782 /* if (q&&(p->pkt.type==T_SRV_ACK)) 4783 { 4784 if (Is_ILU_On) 4785 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); 4786 }//Illumination by BoBa 19.04.2007 */ 4787 /* if (( 4788 IsGuiOnTop(contactlist_menu_id)|| 4789 IsGuiOnTop(edchat_id) 4790 )&&(q)) 4791 { 4792 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 4793 GetPaletteAdrByColorIndex(0), 4794 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 4795 }*/ 4796 if (q) \ 00000714 000050E3 CMP R0,#+0 \ 00000718 9600000A BEQ ??ProcessPacket_1 4797 { 4798 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 0000071C B410D4E1 LDRH R1,[R4, #+4] \ 00000720 100051E3 CMP R1,#+16 \ 00000724 0110A003 MOVEQ R1,#+1 \ 00000728 0210A013 MOVNE R1,#+2 \ 0000072C 041080E5 STR R1,[R0, #+4] 4799 t=FindContactByUin(p->pkt.uin); \ 00000730 000094E5 LDR R0,[R4, #+0] \ 00000734 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000738 0090A0E1 MOV R9,R0 4800 if (edchat_id) \ 0000073C C00197E5 LDR R0,[R7, #+448] \ 00000740 000050E3 CMP R0,#+0 \ 00000744 8B00000A BEQ ??ProcessPacket_1 4801 { 4802 void *data=FindGUIbyId(edchat_id,NULL); \ 00000748 C00197E5 LDR R0,[R7, #+448] \ 0000074C 0010A0E3 MOV R1,#+0 \ 00000750 090200EF SWI +521 \ 00000754 0050B0E1 MOVS R5,R0 4803 if (data) \ 00000758 8600000A BEQ ??ProcessPacket_1 4804 { 4805 EDCHAT_STRUCT *ed_struct; 4806 ed_struct=EDIT_GetUserPointer(data); \ 0000075C DF0100EF SWI +479 4807 if (ed_struct) \ 00000760 000050E3 CMP R0,#+0 \ 00000764 8300000A BEQ ??ProcessPacket_1 4808 { 4809 if (ed_struct->ed_contact==t) \ 00000768 000090E5 LDR R0,[R0, #+0] \ 0000076C 090050E1 CMP R0,R9 \ 00000770 8000001A BNE ??ProcessPacket_1 4810 { 4811 if (EDIT_IsBusy(data)) \ 00000774 0500A0E1 MOV R0,R5 \ 00000778 1C0200EF SWI +540 \ 0000077C 000050E3 CMP R0,#+0 \ 00000780 0300000A BEQ ??ProcessPacket_40 4812 { 4813 t->req_drawack=1; \ 00000784 706089E5 STR R6,[R9, #+112] 4814 #ifdef EVILFOX 4815 time_to_stop_t9=2; 4816 #else 4817 time_to_stop_t9=3; \ 00000788 0300A0E3 MOV R0,#+3 \ 0000078C E80187E5 STR R0,[R7, #+488] \ 00000790 780000EA B ??ProcessPacket_1 4818 #endif 4819 } 4820 else { 4821 DrawAck(data); \ ??ProcessPacket_40: \ 00000794 0500A0E1 MOV R0,R5 \ 00000798 ........ BL DrawAck 4822 if (p->pkt.type==T_SRV_ACK) \ 0000079C B400D4E1 LDRH R0,[R4, #+4] \ 000007A0 100050E3 CMP R0,#+16 \ 000007A4 7300001A BNE ??ProcessPacket_1 4823 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000007A8 F4019FE5 LDR R0,??ProcessPacket_19+0x1C ;; ILL_RECV_FADE \ 000007AC 003090E5 LDR R3,[R0, #+0] \ 000007B0 00029FE5 LDR R0,??ProcessPacket_19+0x30 ;; ILL_SEND_TMR \ 000007B4 002090E5 LDR R2,[R0, #+0] \ 000007B8 FC019FE5 LDR R0,??ProcessPacket_19+0x34 ;; ILL_KEYS_SEND \ 000007BC 001090E5 LDR R1,[R0, #+0] \ 000007C0 F8019FE5 LDR R0,??ProcessPacket_19+0x38 ;; ILL_DISP_SEND \ 000007C4 000090E5 LDR R0,[R0, #+0] \ 000007C8 ........ BL IlluminationOn \ 000007CC 690000EA B ??ProcessPacket_1 4824 } 4825 } 4826 } 4827 } 4828 } 4829 } 4830 break; 4831 case T_XTEXT_ACK: 4832 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_41: \ 000007D0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000007D4 0090B0E1 MOVS R9,R0 4833 if (t) \ 000007D8 6600000A BEQ ??ProcessPacket_1 4834 { 4835 int i; 4836 int j; 4837 FreeXText(t); \ 000007DC ........ _BLF FreeXText,??FreeXText??rA 4838 i=p->pkt.data_len; \ 000007E0 B660D4E1 LDRH R6,[R4, #+6] 4839 memcpy(t->xtext=malloc(i),p->data,i); \ 000007E4 0600A0E1 MOV R0,R6 \ 000007E8 140000EF SWI +20 \ 000007EC 880089E5 STR R0,[R9, #+136] \ 000007F0 0620A0E1 MOV R2,R6 \ 000007F4 081084E2 ADD R1,R4,#+8 \ 000007F8 1E0100EF SWI +286 4840 zeromem(s,256); \ 000007FC 401FA0E3 MOV R1,#+256 \ 00000800 18008DE2 ADD R0,SP,#+24 \ 00000804 1D0100EF SWI +285 4841 strcpy(s,t->name); \ 00000808 141089E2 ADD R1,R9,#+20 \ 0000080C 18008DE2 ADD R0,SP,#+24 \ 00000810 1A0000EF SWI +26 4842 strcat(s,":\n"); \ 00000814 5B1F8FE2 ADR R1,??ProcessPacket_19 ;; ":\n" \ 00000818 18008DE2 ADD R0,SP,#+24 \ 0000081C 170000EF SWI +23 4843 i=strlen(s); \ 00000820 18008DE2 ADD R0,SP,#+24 \ 00000824 1B0000EF SWI +27 4844 j=p->data[0]; \ 00000828 0860D4E5 LDRB R6,[R4, #+8] \ 0000082C 0070A0E1 MOV R7,R0 4845 if (j>(255-i)) j=255-i; \ 00000830 FF0067E2 RSB R0,R7,#+255 \ 00000834 060050E1 CMP R0,R6 \ 00000838 0060A0B1 MOVLT R6,R0 4846 strncpy(s+i,p->data+1,j); \ 0000083C 0620A0E1 MOV R2,R6 \ 00000840 091084E2 ADD R1,R4,#+9 \ 00000844 18008DE2 ADD R0,SP,#+24 \ 00000848 000087E0 ADD R0,R7,R0 \ 0000084C 160100EF SWI +278 4847 i+=j; \ 00000850 070086E0 ADD R0,R6,R7 4848 if (i<255) \ 00000854 FF0050E3 CMP R0,#+255 \ 00000858 100000AA BGE ??ProcessPacket_42 4849 { 4850 s[i]='\n'; \ 0000085C 18108DE2 ADD R1,SP,#+24 \ 00000860 0A20A0E3 MOV R2,#+10 \ 00000864 0120C0E7 STRB R2,[R0, +R1] 4851 i++; \ 00000868 0810D4E5 LDRB R1,[R4, #+8] \ 0000086C B620D4E1 LDRH R2,[R4, #+6] \ 00000870 010080E2 ADD R0,R0,#+1 4852 j=p->pkt.data_len-p->data[0]-1; 4853 if (j>(255-i)) j=255-i; 4854 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000874 18308DE2 ADD R3,SP,#+24 \ 00000878 012042E0 SUB R2,R2,R1 \ 0000087C 016042E2 SUB R6,R2,#+1 \ 00000880 FF2060E2 RSB R2,R0,#+255 \ 00000884 060052E1 CMP R2,R6 \ 00000888 0260A0B1 MOVLT R6,R2 \ 0000088C 0620A0E1 MOV R2,R6 \ 00000890 041081E0 ADD R1,R1,R4 \ 00000894 091081E2 ADD R1,R1,#+9 \ 00000898 030080E0 ADD R0,R0,R3 \ 0000089C 160100EF SWI +278 4855 } 4856 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 4857 //if (!edchat_id && // Только если редактор не наверху 4858 // strlen(p->data)) // и x-status не пустой 4859 // ShowMSG(0,(int)s); 4860 4861 /* 4862 #ifdef EVILFOX 4863 #else 4864 if (!edchat_id) ShowMSG(0,(int)s); // Только если редактор не наверху 4865 #endif 4866 */ 4867 zeromem(s,256); \ ??ProcessPacket_42: \ 000008A0 401FA0E3 MOV R1,#+256 \ 000008A4 18008DE2 ADD R0,SP,#+24 \ 000008A8 1D0100EF SWI +285 4868 i=0; 4869 j=p->data[0]; \ 000008AC 0860D4E5 LDRB R6,[R4, #+8] 4870 if (j>(255-i)) j=255-i; 4871 strncpy(s,p->data+1,j); \ 000008B0 091084E2 ADD R1,R4,#+9 \ 000008B4 18008DE2 ADD R0,SP,#+24 \ 000008B8 400F56E3 CMP R6,#+256 \ 000008BC FF60A0A3 MOVGE R6,#+255 \ 000008C0 0620A0E1 MOV R2,R6 \ 000008C4 160100EF SWI +278 4872 i+=j; 4873 if (i<255) \ 000008C8 FF0056E3 CMP R6,#+255 \ 000008CC 100000AA BGE ??ProcessPacket_43 4874 { 4875 s[i++]=13; \ 000008D0 18108DE2 ADD R1,SP,#+24 \ 000008D4 0D20A0E3 MOV R2,#+13 \ 000008D8 0120C6E7 STRB R2,[R6, +R1] \ 000008DC 0810D4E5 LDRB R1,[R4, #+8] \ 000008E0 B620D4E1 LDRH R2,[R4, #+6] \ 000008E4 010086E2 ADD R0,R6,#+1 4876 j=p->pkt.data_len-p->data[0]-1; 4877 if (j>(255-i)) j=255-i; 4878 strncpy(s+i,p->data+p->data[0]+1,j); \ 000008E8 18308DE2 ADD R3,SP,#+24 \ 000008EC 012042E0 SUB R2,R2,R1 \ 000008F0 016042E2 SUB R6,R2,#+1 \ 000008F4 FF2060E2 RSB R2,R0,#+255 \ 000008F8 060052E1 CMP R2,R6 \ 000008FC 0260A0B1 MOVLT R6,R2 \ 00000900 0620A0E1 MOV R2,R6 \ 00000904 041081E0 ADD R1,R1,R4 \ 00000908 091081E2 ADD R1,R1,#+9 \ 0000090C 030080E0 ADD R0,R0,R3 \ 00000910 160100EF SWI +278 4879 } 4880 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_43: \ 00000914 0100A0E3 MOV R0,#+1 \ 00000918 01002DE9 PUSH {R0} \ 0000091C 0310A0E3 MOV R1,#+3 \ 00000920 000060E2 RSB R0,R0,#+0 \ 00000924 01002DE9 PUSH {R0} \ 00000928 20208DE2 ADD R2,SP,#+32 \ 0000092C F400A0E3 MOV R0,#+244 \ 00000930 600E80E3 ORR R0,R0,#0x600 \ 00000934 053080E0 ADD R3,R0,R5 \ 00000938 0900A0E1 MOV R0,R9 \ 0000093C ........ BL AddStringToLog 4881 ReqAddMsgToChat(t); \ 00000940 0900A0E1 MOV R0,R9 \ 00000944 ........ BL ReqAddMsgToChat 4882 if (strlen(p->data)) // Если x-status не пустой \ 00000948 080084E2 ADD R0,R4,#+8 \ 0000094C 1B0000EF SWI +27 \ 00000950 000050E3 CMP R0,#+0 \ 00000954 08D08DE2 ADD SP,SP,#+8 4883 RecountMenu(t, 1); \ 00000958 0110A013 MOVNE R1,#+1 \ 0000095C 0900A011 MOVNE R0,R9 \ 00000960 DAFDFF1A BNE ??ProcessPacket_8 4884 else 4885 RecountMenu(NULL, 0); \ 00000964 0010A0E3 MOV R1,#+0 \ 00000968 0100A0E1 MOV R0,R1 \ 0000096C D7FDFFEA B ??ProcessPacket_8 4886 } 4887 break; 4888 case T_LASTPRIVACY: 4889 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_44: \ 00000970 0800D4E5 LDRB R0,[R4, #+8] \ 00000974 780187E5 STR R0,[R7, #+376] 4890 break; 4891 } 4892 mfree(p); \ ??ProcessPacket_1: \ 00000978 0400A0E1 MOV R0,R4 \ 0000097C 150000EF SWI +21 4893 } \ 00000980 50DF8DE2 ADD SP,SP,#+320 \ 00000984 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_19: \ 00000988 3A0A0000 DC8 ":\n",+0 \ 0000098C ........ DC32 ENA_AUTO_XTXT \ 00000990 ........ DC32 sndGlobal \ 00000994 ........ DC32 isLogOnline \ 00000998 ........ DC32 sndGlobal2 \ 0000099C ........ DC32 sndSrvMsg \ 000009A0 ........ DC32 isLogOffline \ 000009A4 ........ DC32 ILL_RECV_FADE \ 000009A8 ........ DC32 ILL_RECV_TMR \ 000009AC ........ DC32 ILL_KEYS_RECV \ 000009B0 ........ DC32 ILL_DISP_RECV \ 000009B4 ........ DC32 DEVELOP_IF \ 000009B8 ........ DC32 ILL_SEND_TMR \ 000009BC ........ DC32 ILL_KEYS_SEND \ 000009C0 ........ DC32 ILL_DISP_SEND 4894 4895 4896 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 4897 void process_active_timer(void) 4898 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 4899 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable141 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 8C0195E5 LDR R0,[R5, #+396] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 4900 { 4901 if (++tenseconds_to_ping>12) \ 00000018 C80195E5 LDR R0,[R5, #+456] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 C80185E5 STR R0,[R5, #+456] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 4902 { 4903 tenseconds_to_ping=0; 4904 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 C84185E5 STR R4,[R5, #+456] \ 00000034 710100EF SWI +369 4905 } 4906 } 4907 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable138 ;; `?ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000008 ........ LDR R7,??DataTable138 ;; `?ws1,"\nLoading images..."); 4944 4945 if(total_smiles) \ 000001BC B8019FE5 LDR R0,??method0_0+0x8 ;; total_smiles \ 000001C0 001090E5 LDR R1,[R0, #+0] \ 000001C4 18D08DE2 ADD SP,SP,#+24 \ 000001C8 000051E3 CMP R1,#+0 \ 000001CC 0500000A BEQ ??method0_2 4946 { 4947 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001D0 002090E5 LDR R2,[R0, #+0] \ 000001D4 1400A0E3 MOV R0,#+20 \ 000001D8 500E80E3 ORR R0,R0,#0x500 \ 000001DC 071080E0 ADD R1,R0,R7 \ 000001E0 340094E5 LDR R0,[R4, #+52] \ 000001E4 160200EF SWI +534 4948 } 4949 if (xstatuses_load) \ ??method0_2: \ 000001E8 90019FE5 LDR R0,??method0_0+0xC ;; xstatuses_load \ 000001EC 000090E5 LDR R0,[R0, #+0] \ 000001F0 000050E3 CMP R0,#+0 \ 000001F4 0600000A BEQ ??method0_1 4950 { 4951 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001F8 ........ LDR R0,??DataTable140 ;; total_xstatuses \ 000001FC 002090E5 LDR R2,[R0, #+0] \ 00000200 2800A0E3 MOV R0,#+40 \ 00000204 500E80E3 ORR R0,R0,#0x500 \ 00000208 071080E0 ADD R1,R0,R7 \ 0000020C 340094E5 LDR R0,[R4, #+52] \ 00000210 160200EF SWI +534 4952 } 4953 } 4954 //#ifdef kluchnik 4955 4956 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4957 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_1: \ 00000214 1700A0E3 MOV R0,#+23 \ 00000218 2E0100EF SWI +302 \ 0000021C 0090A0E1 MOV R9,R0 \ 00000220 0000A0E3 MOV R0,#+0 \ 00000224 2E0100EF SWI +302 \ 00000228 00A0A0E1 MOV R10,R0 \ 0000022C 0500A0E3 MOV R0,#+5 \ 00000230 C50100EF SWI +453 \ 00000234 04109DE5 LDR R1,[SP, #+4] \ 00000238 00022DE9 PUSH {R9} \ 0000023C 048041E2 SUB R8,R1,#+4 \ 00000240 00042DE9 PUSH {R10} \ 00000244 0010A0E3 MOV R1,#+0 \ 00000248 02002DE9 PUSH {R1} \ 0000024C 04B045E2 SUB R11,R5,#+4 \ 00000250 00004BE0 SUB R0,R11,R0 \ 00000254 0830A0E1 MOV R3,R8 \ 00000258 0810A0E3 MOV R1,#+8 \ 0000025C 02002DE9 PUSH {R1} \ 00000260 01002DE9 PUSH {R0} \ 00000264 340094E5 LDR R0,[R4, #+52] \ 00000268 1B20A0E3 MOV R2,#+27 \ 0000026C 0310A0E3 MOV R1,#+3 \ 00000270 4C0100EF SWI +332 4958 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000274 3C00A0E3 MOV R0,#+60 \ 00000278 500E80E3 ORR R0,R0,#0x500 \ 0000027C 072080E0 ADD R2,R0,R7 \ 00000280 380094E5 LDR R0,[R4, #+56] \ 00000284 181087E2 ADD R1,R7,#+24 \ 00000288 240100EF SWI +292 4959 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4960 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 0000028C 1700A0E3 MOV R0,#+23 \ 00000290 2E0100EF SWI +302 \ 00000294 0050A0E1 MOV R5,R0 \ 00000298 0000A0E3 MOV R0,#+0 \ 0000029C 2E0100EF SWI +302 \ 000002A0 0090A0E1 MOV R9,R0 \ 000002A4 0500A0E3 MOV R0,#+5 \ 000002A8 C50100EF SWI +453 \ 000002AC 18109DE5 LDR R1,[SP, #+24] \ 000002B0 20002DE9 PUSH {R5} \ 000002B4 C1A0A0E1 ASR R10,R1,#+1 \ 000002B8 00022DE9 PUSH {R9} \ 000002BC 0410A0E3 MOV R1,#+4 \ 000002C0 02002DE9 PUSH {R1} \ 000002C4 0830A0E1 MOV R3,R8 \ 000002C8 00204BE0 SUB R2,R11,R0 \ 000002CC 0510A0E3 MOV R1,#+5 \ 000002D0 02002DE9 PUSH {R1} \ 000002D4 0B10A0E1 MOV R1,R11 \ 000002D8 02002DE9 PUSH {R1} \ 000002DC 380094E5 LDR R0,[R4, #+56] \ 000002E0 0A10A0E1 MOV R1,R10 \ 000002E4 4C0100EF SWI +332 \ 000002E8 28D08DE2 ADD SP,SP,#+40 4961 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 000002EC B40196E5 LDR R0,[R6, #+436] \ 000002F0 000050E3 CMP R0,#+0 \ 000002F4 0300000A BEQ ??method0_3 \ 000002F8 4400A0E3 MOV R0,#+68 \ 000002FC 500E80E3 ORR R0,R0,#0x500 \ 00000300 072080E0 ADD R2,R0,R7 \ 00000304 000000EA B ??method0_4 \ ??method0_3: \ 00000308 1E2087E2 ADD R2,R7,#+30 \ ??method0_4: \ 0000030C 380094E5 LDR R0,[R4, #+56] \ 00000310 181087E2 ADD R1,R7,#+24 \ 00000314 240100EF SWI +292 4962 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4963 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000318 1700A0E3 MOV R0,#+23 \ 0000031C 2E0100EF SWI +302 \ 00000320 0050A0E1 MOV R5,R0 \ 00000324 0000A0E3 MOV R0,#+0 \ 00000328 2E0100EF SWI +302 \ 0000032C 0060A0E1 MOV R6,R0 \ 00000330 0500A0E3 MOV R0,#+5 \ 00000334 C50100EF SWI +453 \ 00000338 20002DE9 PUSH {R5} \ 0000033C 40002DE9 PUSH {R6} \ 00000340 0110A0E3 MOV R1,#+1 \ 00000344 02002DE9 PUSH {R1} \ 00000348 0A30A0E1 MOV R3,R10 \ 0000034C 00204BE0 SUB R2,R11,R0 \ 00000350 0510A0E3 MOV R1,#+5 \ 00000354 02002DE9 PUSH {R1} \ 00000358 0B10A0E1 MOV R1,R11 \ 0000035C 02002DE9 PUSH {R1} \ 00000360 380094E5 LDR R0,[R4, #+56] \ 00000364 0310A0E3 MOV R1,#+3 \ 00000368 4C0100EF SWI +332 4964 //#else 4965 4966 /* DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4967 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4968 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 4969 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4970 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4971 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 4972 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4973 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4974 // DrawImg(15,200,(int)"4:\\zbin\\naticq\\img\\smiles_logo.png"); 4975 wsprintf(data->ws2,percent_t,"Mod Evilfox(c), kluchnik, windes"); 4976 DrawString(data->ws2,3,scr_h-GetFontYSIZE(FONT_MEDIUM_BOLD)-GetFontYSIZE(FONT_MEDIUM_BOLD)-40, 4977 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23));*/ 4978 //#endif 4979 } \ 0000036C 28D08DE2 ADD SP,SP,#+40 \ 00000370 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_0: \ 00000374 ........ DC32 pictures_max \ 00000378 ........ DC32 pictures_loaded \ 0000037C ........ DC32 total_smiles \ 00000380 ........ DC32 xstatuses_load 4980 \ In segment CODE, align 4, keep-with-next 4981 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 4982 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4983 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 4984 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 4985 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 4986 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 4987 \ In segment CODE, align 4, keep-with-next 4988 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 4989 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4990 FreeWS(data->ws1); \ 00000008 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 4991 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 00000014 290100EF SWI +297 4992 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 4993 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 4994 \ In segment CODE, align 4, keep-with-next 4995 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 4996 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4997 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 4998 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 4999 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 5000 \ In segment CODE, align 4, keep-with-next 5001 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 5002 { 5003 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 5004 return; 5005 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 5006 } \ 00000010 1EFF2FE1 BX LR ;; return 5007 \ In segment CODE, align 4, keep-with-next 5008 int method5(MAIN_GUI *data,GUI_MSG *msg) 5009 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 5010 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 5011 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 9320A0E3 MOV R2,#+147 \ 00000018 041090E5 LDR R1,[R0, #+4] \ 0000001C 402F82E3 ORR R2,R2,#0x100 \ 00000020 020051E1 CMP R1,R2 \ 00000024 2600001A BNE ??method5_0 5012 { 5013 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R5,??DataTable141 ;; S_ICONS \ 0000002C 080090E5 LDR R0,[R0, #+8] \ 00000030 ........ LDR R4,??DataTable156 ;; create_connect \ 00000034 5410A0E3 MOV R1,#+84 \ 00000038 601D81E3 ORR R1,R1,#0x1800 \ 0000003C 056081E0 ADD R6,R1,R5 \ 00000040 0370A0E3 MOV R7,#+3 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 0600000A BEQ ??method5_1 \ 0000004C 030050E2 SUBS R0,R0,#+3 \ 00000050 0A00000A BEQ ??method5_2 \ 00000054 070050E2 SUBS R0,R0,#+7 \ 00000058 0A00000A BEQ ??method5_3 \ 0000005C 250050E2 SUBS R0,R0,#+37 \ 00000060 1000000A BEQ ??method5_4 \ 00000064 030000EA B ??method5_5 5014 { 5015 #ifdef kluchnik 5016 case LEFT_SOFT: 5017 if (cltop) create_contactlist_menu(); \ ??method5_1: \ 00000068 B40195E5 LDR R0,[R5, #+436] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 F280BD08 POPEQ {R1,R4-R7,PC} \ 00000074 ........ BL create_contactlist_menu \ ??method5_5: \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C F280BDE8 POP {R1,R4-R7,PC} 5018 // if (cltop) remake_clmenu(); 5019 break; 5020 case RIGHT_SOFT: 5021 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_2: \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 F280BDE8 POP {R1,R4-R7,PC} 5022 #else 5023 case LEFT_SOFT: 5024 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 5025 case RIGHT_SOFT: 5026 // if (cltop) remake_clmenu(); 5027 if (cltop) create_contactlist_menu(); 5028 break; 5029 #endif 5030 case GREEN_BUTTON: 5031 disautorecconect=0; \ ??method5_3: \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C 600185E5 STR R0,[R5, #+352] 5032 if ((connect_state==0)&&(sock==-1)) \ 00000090 8C0195E5 LDR R0,[R5, #+396] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 90019505 LDREQ R0,[R5, #+400] \ 0000009C 01007003 CMNEQ R0,#+1 \ 000000A0 0700001A BNE ??method5_0 5033 { 5034 GBS_DelTimer(&reconnect_tmr); \ 000000A4 010000EA B ??method5_6 5035 DNR_TRIES=3; 5036 SUBPROC((void *)create_connect); 5037 } 5038 break; 5039 case '0': 5040 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000A8 ........ LDR R0,??DataTable152 ;; end_socket \ 000000AC 710100EF SWI +369 5041 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000B0 0600A0E1 MOV R0,R6 \ 000000B4 8C0100EF SWI +396 5042 DNR_TRIES=3; \ 000000B8 D87185E5 STR R7,[R5, #+472] 5043 SUBPROC((void *)create_connect); \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 710100EF SWI +369 5044 break; 5045 } 5046 } 5047 return(0); \ ??method5_0: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 F280BDE8 POP {R1,R4-R7,PC} ;; return 5048 } 5049 \ In segment CODE, align 4, keep-with-next 5050 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5051 \ In segment CODE, align 4, keep-with-next 5052 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5053 5054 const void * const gui_methods[11]={ 5055 (void *)method0, //Redraw 5056 (void *)method1, //Create 5057 (void *)method2, //Close 5058 (void *)method3, //Focus 5059 (void *)method4, //Unfocus 5060 (void *)method5, //OnKey 5061 0, 5062 (void *)kill_data, //method7, //Destroy 5063 (void *)method8, 5064 (void *)method9, 5065 0 5066 }; 5067 5068 \ In segment CODE, align 4, keep-with-next 5069 int my_keyhook(int key, int m) 5070 { \ my_keyhook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0050A0E1 MOV R5,R0 5071 if (m==KEY_DOWN) \ 00000008 9300A0E3 MOV R0,#+147 \ 0000000C 400F80E3 ORR R0,R0,#0x100 \ 00000010 000051E1 CMP R1,R0 \ 00000014 1F00001A BNE ??my_keyhook_0 5072 { 5073 if(change_back_status==1) \ 00000018 ........ LDR R4,??DataTable157 ;; S_ICONS \ 0000001C 0060A0E3 MOV R6,#+0 \ 00000020 3C0194E5 LDR R0,[R4, #+316] \ 00000024 010050E3 CMP R0,#+1 \ 00000028 0300001A BNE ??my_keyhook_1 5074 { 5075 CurrentStatus=status_rem; \ 0000002C 380194E5 LDR R0,[R4, #+312] \ 00000030 740184E5 STR R0,[R4, #+372] 5076 set_my_status(); \ 00000034 ........ BL set_my_status 5077 // SUBPROC((void*)WriteDefSettings); 5078 change_back_status=0; \ 00000038 3C6184E5 STR R6,[R4, #+316] 5079 } 5080 #ifdef EVILFOX 5081 if ((key==VOL_UP_BUTTON)&&(IsIdleUiOnTop())) 5082 { 5083 if(autobot==1) 5084 { 5085 autobot=0; 5086 ShowMSG(1,(int)"Autobot Off"); 5087 } 5088 else 5089 { 5090 autobot=1; 5091 ShowMSG(1,(int)"Autobot On"); 5092 } 5093 } 5094 #endif 5095 #ifdef ELKA 5096 #ifdef EVILFOX 5097 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) 5098 #else 5099 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) \ ??my_keyhook_1: \ 0000003C 140055E3 CMP R5,#+20 \ 00000040 0E00001A BNE ??my_keyhook_2 \ 00000044 430000EF SWI +67 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0B00001A BNE ??my_keyhook_2 5100 #endif 5101 { 5102 GBS_StopTimer(&away_tmr); \ 00000050 6400A0E3 MOV R0,#+100 \ 00000054 580D80E3 ORR R0,R0,#0x1600 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 440100EF SWI +324 5103 msg_away_timer=AUTO_ENGADE; \ 00000060 ........ LDR R0,??DataTable145 ;; AUTO_ENGADE \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 2C0184E5 STR R0,[R4, #+300] 5104 away_timer(); \ 0000006C ........ BL away_timer 5105 main_d=1; \ 00000070 0100A0E3 MOV R0,#+1 \ 00000074 E40084E5 STR R0,[R4, #+228] \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C 7080BDE8 POP {R4-R6,PC} 5106 } 5107 else 5108 { 5109 #endif 5110 if(Reset_timer) \ ??my_keyhook_2: \ 00000080 18009FE5 LDR R0,??my_keyhook_3 ;; Reset_timer \ 00000084 000090E5 LDR R0,[R0, #+0] \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 7080BD08 POPEQ {R4-R6,PC} 5111 { 5112 msg_away_timer=0; \ 00000090 2C6184E5 STR R6,[R4, #+300] 5113 away_m=0; \ 00000094 346184E5 STR R6,[R4, #+308] 5114 } 5115 #ifdef ELKA 5116 } 5117 #endif 5118 } 5119 return 0; \ ??my_keyhook_0: \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_keyhook_3: \ 000000A0 ........ DC32 Reset_timer 5120 } \ In segment DATA_C, align 4, align-sorted \ `?> %s <<" \ 3C3C00 \ 000000E5 000000 DC8 0, 0, 0 \ 000000E8 2563257400 DC8 "%c%t" \ 000000ED 000000 DC8 0, 0, 0 \ 000000F0 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000000F8 EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 000000FF 00 DC8 0 \ 00000100 426164207061 DC8 "Bad packet" \ 636B657400 \ 0000010B 00 DC8 0 \ 0000010C 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 00000117 00 DC8 0 \ 00000118 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000120 75696E256400 DC8 "uin%d" \ 00000126 0000 DC8 0, 0 \ 00000128 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 00000132 0000 DC8 0, 0 \ 00000134 257325642E77 DC8 "%s%d.wav" \ 617600 \ 0000013D 000000 DC8 0, 0, 0 \ 00000140 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000154 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ 00000160 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 00000168 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 2CH, 6BH \ 2C6B \ 00000170 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 2CH \ 6B2C \ 00000178 77696E646573 DC8 77H, 69H, 6EH, 64H, 65H, 73H, 20H, 62H \ 2062 \ 00000180 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 00000188 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 00000190 20323035382C DC8 20H, 32H, 30H, 35H, 38H, 2CH, 20H, 6DH \ 206D \ 00000198 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 000001A0 202573206174 DC8 20H, 25H, 73H, 20H, 61H, 74H, 20H, 25H \ 2025 \ 000001A8 732000 DC8 73H, 20H, 0 \ 000001AB 00 DC8 0 \ 000001AC 4D6172203331 DC8 "Mar 31 2008" \ 203230303800 \ 000001B8 31313A32383A DC8 "11:28:35" \ 333500 \ 000001C1 000000 DC8 0, 0, 0 \ 000001C4 47414D453A00 DC8 "GAME:" \ 000001CA 0000 DC8 0, 0 \ 000001CC C2F0E5ECFF20 DC8 "\302\360\345\354\377 \342 \356\355\353\340\351\355: %02d:%02d:%02d \012\321\345\360\342\345\360: %s" \ E220EEEDEBE0 \ E9ED3A202530 \ 32643A253032 \ 643A25303264 \ 200AD1E5F0E2 \ E5F03A202573 \ 00 \ 000001F7 00 DC8 0 \ 000001F8 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000208 CEF2EFF0E0E2 DC8 "\316\362\357\360\340\342\353\345\355\356 \361\356\356\341\371\345\355\350\351: %d \012\317\360\350\355\377\362\356 \361\356\356\341\371\345\355\350\351: %d" \ EBE5EDEE20F1 \ EEEEE1F9E5ED \ E8E93A202564 \ 200ACFF0E8ED \ FFF2EE20F1EE \ EEE1F9E5EDE8 \ E93A20256400 \ 00000238 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 00000245 000000 DC8 0, 0, 0 \ 00000248 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 00000255 000000 DC8 0, 0, 0 \ 00000258 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 00000271 000000 DC8 0, 0, 0 \ 00000274 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 00000281 000000 DC8 0, 0, 0 \ 00000284 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 00000298 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 000002A5 000000 DC8 0, 0, 0 \ 000002A8 C7E0F0FFE420 DC8 "\307\340\360\377\344 \341\340\362\340\360\345\350: %d \357\360\356\366\345\355\362\356\342" \ E1E0F2E0F0E5 \ E83A20256420 \ EFF0EEF6E5ED \ F2EEE200 \ 000002C4 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 000002DF 00 DC8 0 \ 000002E0 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 00000303 00 DC8 0 \ 00000304 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 0000030C 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 00000314 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 0000031C 696C65732F6E DC8 69H, 6CH, 65H, 73H, 2FH, 6EH, 61H, 74H \ 6174 \ 00000324 6963715F6D6F DC8 69H, 63H, 71H, 5FH, 6DH, 6FH, 64H, 32H \ 6432 \ 0000032C 303538732E7A DC8 30H, 35H, 38H, 73H, 2EH, 7AH, 69H, 70H \ 6970 \ 00000334 202873676F6C DC8 20H, 28H, 73H, 67H, 6FH, 6CH, 64H, 29H \ 6429 \ 0000033C 202020202834 DC8 20H, 20H, 20H, 20H, 28H, 34H, 30H, 6BH \ 306B \ 00000344 62290A687474 DC8 62H, 29H, 0AH, 68H, 74H, 74H, 70H, 3AH \ 703A \ 0000034C 2F2F77696E64 DC8 2FH, 2FH, 77H, 69H, 6EH, 64H, 65H, 73H \ 6573 \ 00000354 2E6E61726F64 DC8 2EH, 6EH, 61H, 72H, 6FH, 64H, 2EH, 72H \ 2E72 \ 0000035C 752F66696C65 DC8 75H, 2FH, 66H, 69H, 6CH, 65H, 73H, 2FH \ 732F \ 00000364 6E6174696371 DC8 6EH, 61H, 74H, 69H, 63H, 71H, 5FH, 6DH \ 5F6D \ 0000036C 6F6432303538 DC8 6FH, 64H, 32H, 30H, 35H, 38H, 6EH, 2EH \ 6E2E \ 00000374 7A697020284E DC8 7AH, 69H, 70H, 20H, 28H, 4EH, 65H, 77H \ 6577 \ 0000037C 53476F6C6429 DC8 53H, 47H, 6FH, 6CH, 64H, 29H, 20H, 28H \ 2028 \ 00000384 34306B62290A DC8 34H, 30H, 6BH, 62H, 29H, 0AH, 68H, 74H \ 6874 \ 0000038C 74703A2F2F77 DC8 74H, 70H, 3AH, 2FH, 2FH, 77H, 69H, 6EH \ 696E \ 00000394 6465732E6E61 DC8 64H, 65H, 73H, 2EH, 6EH, 61H, 72H, 6FH \ 726F \ 0000039C 642E72752F66 DC8 64H, 2EH, 72H, 75H, 2FH, 66H, 69H, 6CH \ 696C \ 000003A4 65732F6E6174 DC8 65H, 73H, 2FH, 6EH, 61H, 74H, 69H, 63H \ 6963 \ 000003AC 715F6D6F6432 DC8 71H, 5FH, 6DH, 6FH, 64H, 32H, 30H, 35H \ 3035 \ 000003B4 38652E7A6970 DC8 38H, 65H, 2EH, 7AH, 69H, 70H, 20H, 28H \ 2028 \ 000003BC 656C6B612920 DC8 65H, 6CH, 6BH, 61H, 29H, 20H, 20H, 20H \ 2020 \ 000003C4 20202834306B DC8 20H, 20H, 28H, 34H, 30H, 6BH, 62H, 29H \ 6229 \ 000003CC 0A66696C6573 DC8 0AH, 66H, 69H, 6CH, 65H, 73H, 3AH, 20H \ 3A20 \ 000003D4 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 000003DC 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 000003E4 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 000003EC 696C65732F6E DC8 69H, 6CH, 65H, 73H, 2FH, 6EH, 61H, 74H \ 6174 \ 000003F4 6963716D6F64 DC8 69H, 63H, 71H, 6DH, 6FH, 64H, 5FH, 61H \ 5F61 \ 000003FC 6C6C66696C65 DC8 6CH, 6CH, 66H, 69H, 6CH, 65H, 73H, 5FH \ 735F \ 00000404 772E7A697020 DC8 77H, 2EH, 7AH, 69H, 70H, 20H, 28H, 34H \ 2834 \ 0000040C 33326B62290A DC8 33H, 32H, 6BH, 62H, 29H, 0AH, 53H, 74H \ 5374 \ 00000414 61747573206F DC8 61H, 74H, 75H, 73H, 20H, 6FH, 6EH, 20H \ 6E20 \ 0000041C 69636F6E6261 DC8 69H, 63H, 6FH, 6EH, 62H, 61H, 72H, 20H \ 7220 \ 00000424 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 0000042C 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 00000434 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 0000043C 696C65732F69 DC8 69H, 6CH, 65H, 73H, 2FH, 69H, 6DH, 67H \ 6D67 \ 00000444 31367831362E DC8 31H, 36H, 78H, 31H, 36H, 2EH, 7AH, 69H \ 7A69 \ 0000044C 70202837346B DC8 70H, 20H, 28H, 37H, 34H, 6BH, 62H, 29H \ 6229 \ 00000454 0AD2E0EA20E6 DC8 0AH, 0D2H, 0E0H, 0EAH, 20H, 0E6H, 0E5H, 20H \ E520 \ 0000045C E2F1E520E1F3 DC8 0E2H, 0F1H, 0E5H, 20H, 0E1H, 0F3H, 0E4H, 0E5H \ E4E5 \ 00000464 F220F2F3F220 DC8 0F2H, 20H, 0F2H, 0F3H, 0F2H, 20H, 68H, 74H \ 6874 \ 0000046C 74703A2F2F6B DC8 74H, 70H, 3AH, 2FH, 2FH, 6BH, 6CH, 75H \ 6C75 \ 00000474 63686E696B2E DC8 63H, 68H, 6EH, 69H, 6BH, 2EH, 6AH, 69H \ 6A69 \ 0000047C 6E6F2D6E6574 DC8 6EH, 6FH, 2DH, 6EH, 65H, 74H, 2EH, 72H \ 2E72 \ 00000484 752F6E617469 DC8 75H, 2FH, 6EH, 61H, 74H, 69H, 63H, 71H \ 6371 \ 0000048C 6D6F642F00 DC8 6DH, 6FH, 64H, 2FH, 0 \ 00000491 000000 DC8 0, 0, 0 \ 00000494 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 000004A8 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 000004B5 000000 DC8 0, 0, 0 \ 000004B8 204F6E6C696E DC8 " Online: %02d:%02d:%02d %02d-%02d" \ 653A20253032 \ 643A25303264 \ 3A2530326420 \ 253032642D25 \ 30326400 \ 000004DA 0000 DC8 0, 0 \ 000004DC 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 000004E4 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 000004EC 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 000004F4 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 000004FC 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 00000504 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 0000050C 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 00000512 0000 DC8 0, 0 \ 00000514 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 00000526 0000 DC8 0, 0 \ 00000528 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 0000053B 00 DC8 0 \ 0000053C 4578697400 DC8 "Exit" \ 00000541 000000 DC8 0, 0, 0 \ 00000544 434C69737400 DC8 "CList" \ 0000054A 0000 DC8 0, 0 \ 0000054C 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 00000574 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 0000057F 00 DC8 0 \ 00000580 49646C655570 DC8 "IdleUpd" \ 6400 \ 00000588 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 0000059F 00 DC8 0 \ 000005A0 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 000005AB 00 DC8 0 \ 000005AC 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000005C4 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000005D4 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000005E0 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000005E9 000000 DC8 0, 0, 0 \ 000005EC 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 \ 00000614 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 \ 00000636 0000 DC8 0, 0 \ 00000638 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 0000065B 00 DC8 0 \ 0000065C 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 0000067B 00 DC8 0 \ 0000067C 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 00000686 0000 DC8 0, 0 \ 00000688 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ 0000069C 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 000006A9 000000 DC8 0, 0, 0 \ 000006AC 526571756573 DC8 "Request info..." \ 7420696E666F \ 2E2E2E00 \ 000006BC 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 000006C9 000000 DC8 0, 0, 0 \ ipc_my_name: \ 000006CC 4E6174494351 DC8 "NatICQ" \ 00 \ 000006D3 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E3 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000006EC 585461736B00 DC8 "XTask" \ 000006F2 0000 DC8 0, 0 \ x_status_change: \ 000006F4 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ ipc_game_name: \ 00000704 436F6D626174 DC8 "Combats" \ 7300 \ gui_methods: \ 0000070C ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 00000728 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ In segment DATA_C, align 4, align-sorted \ ipc_test_name: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ input_awaymsg_hdr: \ 00000038 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 00000040 00000000.... DC32 0H, `?` \ 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 \ `?`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ color: \ 00000008 FFFFFF64 DC8 255, 255, 255, 100 5123 \ In segment CODE, align 4, keep-with-next 5124 void maincsm_oncreate(CSM_RAM *data) 5125 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 5126 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 4000A0E3 MOV R0,#+64 5127 MAIN_CSM*csm=(MAIN_CSM*)data; 5128 zeromem(main_gui,sizeof(MAIN_GUI)); 5129 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,??DataTable160 ;; `?gui.canvas=(void *)(&Canvas); \ 00000044 100084E2 ADD R0,R4,#+16 \ 00000048 000086E5 STR R0,[R6, #+0] 5131 // main_gui->gui.flag30=2; 5132 main_gui->gui.methods=(void *)gui_methods; \ 0000004C 0C00A0E3 MOV R0,#+12 \ 00000050 700E80E3 ORR R0,R0,#0x700 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 040086E5 STR R0,[R6, #+4] 5133 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000005C 158000EF SWI +32789 \ 00000060 200086E5 STR R0,[R6, #+32] 5134 csm->csm.state=0; \ 00000064 107085E5 STR R7,[R5, #+16] 5135 csm->csm.unk1=0; \ 00000068 147085E5 STR R7,[R5, #+20] 5136 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 0000006C 0600A0E1 MOV R0,R6 \ 00000070 370100EF SWI +311 \ 00000074 280085E5 STR R0,[R5, #+40] \ 00000078 ........ LDR R5,??DataTable157 ;; S_ICONS \ 0000007C 1C0185E5 STR R0,[R5, #+284] 5137 ews=AllocWS(16384); \ 00000080 400CA0E3 MOV R0,#+16384 \ 00000084 250100EF SWI +293 5138 // MutexCreate(&contactlist_mtx); 5139 DNR_TRIES=3; 5140 // SUBPROC((void *)InitSmiles); 5141 // SUBPROC((void *)create_connect); 5142 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000088 ........ LDR R2,??DataTable148 ;; process_active_timer \ 0000008C 280185E5 STR R0,[R5, #+296] \ 00000090 0300A0E3 MOV R0,#+3 \ 00000094 D80185E5 STR R0,[R5, #+472] \ 00000098 871EA0E3 MOV R1,#+2160 \ 0000009C 6400A0E3 MOV R0,#+100 \ 000000A0 600D80E3 ORR R0,R0,#0x1800 \ 000000A4 050080E0 ADD R0,R0,R5 \ 000000A8 4D0000EF SWI +77 5143 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000AC ........ LDR R0,??DataTable182 ;; UIN \ 000000B0 1B1084E2 ADD R1,R4,#+27 \ 000000B4 002090E5 LDR R2,[R0, #+0] \ 000000B8 D200A0E3 MOV R0,#+210 \ 000000BC 600E80E3 ORR R0,R0,#0x600 \ 000000C0 040080E0 ADD R0,R0,R4 \ 000000C4 160000EF SWI +22 5144 gipc.name_to=ipc_my_name; \ 000000C8 CC00A0E3 MOV R0,#+204 \ 000000CC 600E80E3 ORR R0,R0,#0x600 \ 000000D0 041080E0 ADD R1,R0,R4 \ 000000D4 BC1085E5 STR R1,[R5, #+188] 5145 gipc.name_from=ipc_my_name; \ 000000D8 040080E0 ADD R0,R0,R4 \ 000000DC C00085E5 STR R0,[R5, #+192] 5146 gipc.data=(void *)-1; \ 000000E0 0700E0E1 MVN R0,R7 \ 000000E4 C40085E5 STR R0,[R5, #+196] 5147 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000E8 BC3085E2 ADD R3,R5,#+188 \ 000000EC 0120A0E3 MOV R2,#+1 \ 000000F0 B010A0E3 MOV R1,#+176 \ 000000F4 DE1C81E3 ORR R1,R1,#0xDE00 \ 000000F8 0900A0E3 MOV R0,#+9 \ 000000FC 420C80E3 ORR R0,R0,#0x4200 \ 00000100 000100EF SWI +256 5148 /* 5149 InitXStatusesImg(); 5150 //InitSmiles(); Это вызовется из InitXStatusesImg 5151 create_connect(); 5152 silenthide=1; 5153 gipc.name_to=ipc_xtask_name; 5154 gipc.name_from=ipc_my_name; 5155 gipc.data=0; 5156 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 5157 */ 5158 } \ 00000104 F080BDE8 POP {R4-R7,PC} ;; return 5159 \ In segment CODE, align 4, keep-with-next 5160 void maincsm_onclose(CSM_RAM *csm) 5161 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 5162 WriteDefSettings(); 5163 // SaveConfigData(successed_config_filename); 5164 5165 /* 5166 #pragma segment="CONFIG_C" 5167 unsigned int ul; 5168 int f; 5169 extern const CFG_HDR cfghdr0; //first var in CONFIG 5170 void *cfg=(void*)&cfghdr0; 5171 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 5172 5173 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 5174 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 5175 } 5176 fwrite(f,cfg,len,&ul); 5177 fclose(f,&ul); 5178 */ 5179 5180 // GBS_DelTimer(&tmr_dorecv); 5181 RemoveKeybMsgHook((void *)my_keyhook); 5182 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable157 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C ........ LDR R0,??DataTable151 ;; my_keyhook \ 00000010 2D0100EF SWI +301 \ 00000014 6400A0E3 MOV R0,#+100 \ 00000018 600D80E3 ORR R0,R0,#0x1800 \ 0000001C 040080E0 ADD R0,R0,R4 \ 00000020 8C0100EF SWI +396 5183 GBS_DelTimer(&tmr_vibra); \ 00000024 4400A0E3 MOV R0,#+68 \ 00000028 600D80E3 ORR R0,R0,#0x1800 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 8C0100EF SWI +396 5184 GBS_DelTimer(&reconnect_tmr); \ 00000034 5400A0E3 MOV R0,#+84 \ 00000038 600D80E3 ORR R0,R0,#0x1800 \ 0000003C 040080E0 ADD R0,R0,R4 \ 00000040 8C0100EF SWI +396 5185 GBS_DelTimer(&tmr_illumination); \ 00000044 3400A0E3 MOV R0,#+52 \ 00000048 600D80E3 ORR R0,R0,#0x1800 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 8C0100EF SWI +396 5186 GBS_DelTimer(&mytmr); \ 00000054 7400A0E3 MOV R0,#+116 \ 00000058 580D80E3 ORR R0,R0,#0x1600 \ 0000005C 040080E0 ADD R0,R0,R4 \ 00000060 8C0100EF SWI +396 5187 GBS_DelTimer(&mytmr2); \ 00000064 8400A0E3 MOV R0,#+132 \ 00000068 580D80E3 ORR R0,R0,#0x1600 \ 0000006C 040080E0 ADD R0,R0,R4 \ 00000070 8C0100EF SWI +396 5188 GBS_DelTimer(&mytmr3); \ 00000074 EC00A0E3 MOV R0,#+236 \ 00000078 4C0D80E3 ORR R0,R0,#0x1300 \ 0000007C 040080E0 ADD R0,R0,R4 \ 00000080 8C0100EF SWI +396 5189 GBS_DelTimer(&mytmr4); \ 00000084 9400A0E3 MOV R0,#+148 \ 00000088 580D80E3 ORR R0,R0,#0x1600 \ 0000008C 040080E0 ADD R0,R0,R4 \ 00000090 8C0100EF SWI +396 5190 GBS_DelTimer(&statusTmr); \ 00000094 B400A0E3 MOV R0,#+180 \ 00000098 600D80E3 ORR R0,R0,#0x1800 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 8C0100EF SWI +396 5191 #ifdef NEWSGOLD 5192 GBS_DelTimer(&tracktmr); \ 000000A4 A400A0E3 MOV R0,#+164 \ 000000A8 580D80E3 ORR R0,R0,#0x1600 \ 000000AC 040080E0 ADD R0,R0,R4 \ 000000B0 8C0100EF SWI +396 5193 #endif 5194 GBS_DelTimer(&develop); \ 000000B4 6C0D84E2 ADD R0,R4,#+6912 \ 000000B8 8C0100EF SWI +396 5195 GBS_DelTimer(&away_tmr); \ 000000BC 6400A0E3 MOV R0,#+100 \ 000000C0 580D80E3 ORR R0,R0,#0x1600 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 8C0100EF SWI +396 5196 SetVibration(0); \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 7C0000EF SWI +124 5197 FreeTemplates(); \ 000000D4 ........ BL FreeTemplates 5198 FreeCLIST(); \ 000000D8 ........ _BLF FreeCLIST,??FreeCLIST??rA 5199 free_ICONS(); \ 000000DC ........ BL free_ICONS 5200 // FreeSmiles(); 5201 FreeWS(ews); \ 000000E0 280194E5 LDR R0,[R4, #+296] \ 000000E4 290100EF SWI +297 5202 FreeXStatusText(); \ 000000E8 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 5203 // MutexDestroy(&contactlist_mtx); 5204 SUBPROC((void *)FreeSmiles); \ 000000EC 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 000000F0 710100EF SWI +369 5205 SUBPROC((void *)FreeXStatusesImg); \ 000000F4 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 000000F8 710100EF SWI +369 5206 SUBPROC((void *)end_socket); \ 000000FC ........ LDR R0,??DataTable152 ;; end_socket \ 00000100 710100EF SWI +369 5207 SUBPROC((void *)ClearSendQ); \ 00000104 ........ LDR R0,??DataTable185 ;; ClearSendQ \ 00000108 710100EF SWI +369 5208 SUBPROC((void *)ElfKiller); \ 0000010C ........ LDR R0,??DataTable154 ;; ElfKiller \ 00000110 710100EF SWI +369 5209 } \ 00000114 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000118 ........ DC32 FreeSmiles \ 0000011C ........ DC32 FreeXStatusesImg 5210 \ In segment CODE, align 4, keep-with-next 5211 void do_reconnect(void) 5212 { 5213 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable157 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 AC1190E5 LDR R1,[R0, #+428] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 5214 { 5215 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 D81180E5 STR R1,[R0, #+472] 5216 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable156 ;; create_connect \ 00000020 710100EF SWI +369 5217 } 5218 } \ 00000024 0080BDE8 POP {PC} ;; return 5219 \ In segment CODE, align 4, keep-with-next 5220 void CheckDoubleRun(void) 5221 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 5222 int csm_id; 5223 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable157 ;; S_ICONS \ 00000008 C40094E5 LDR R0,[R4, #+196] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1500000A BEQ ??CheckDoubleRun_0 5224 { 5225 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable160 ;; `?msg==MSG_IPC) 5257 { 5258 IPC_REQ *ipc; 5259 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 0C8094E5 LDR R8,[R4, #+12] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 8300000A BEQ ??maincsm_onmessage_2 5260 { 5261 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C CC90A0E3 MOV R9,#+204 \ 00000040 609E89E3 ORR R9,R9,#0x600 \ 00000044 071089E0 ADD R1,R9,R7 \ 00000048 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 7C00001A BNE ??maincsm_onmessage_2 5262 { 5263 switch (msg->submess) \ 00000054 081094E5 LDR R1,[R4, #+8] \ 00000058 040098E5 LDR R0,[R8, #+4] \ 0000005C 011041E2 SUB R1,R1,#+1 \ 00000060 040051E3 CMP R1,#+4 \ 00000064 7700008A BHI ??maincsm_onmessage_2 \ 00000068 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 0000006C 0120D2E7 LDRB R2,[R2, R1] \ 00000070 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000074 010A1116 DC8 +1,+10,+17,+22 \ 00000078 4F000000 DC8 +79,+0,+0,+0 5264 { 5265 case IPC_CHECK_DOUBLERUN: 5266 //Если приняли свое собственное сообщение, значит запускаем чекер 5267 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 0000007C 071089E0 ADD R1,R9,R7 \ 00000080 010050E1 CMP R0,R1 \ 00000084 0200001A BNE ??maincsm_onmessage_4 \ 00000088 A40A9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000008C 710100EF SWI +369 \ 00000090 6C0000EA B ??maincsm_onmessage_2 5268 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 00000094 180195E5 LDR R0,[R5, #+280] \ 00000098 080088E5 STR R0,[R8, #+8] \ 0000009C 690000EA B ??maincsm_onmessage_2 5269 break; 5270 case IPC_SMILE_PROCESSED: 5271 //Только собственные смайлы ;) 5272 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000A0 071089E0 ADD R1,R9,R7 \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 0100001A BNE ??maincsm_onmessage_7 \ 000000AC 840A9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000B0 710100EF SWI +369 5273 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000B4 ........ BL SMART_REDRAW \ 000000B8 620000EA B ??maincsm_onmessage_2 5274 break; 5275 case IPC_XSTATUSIMG_PROCESSED: 5276 //Только собственные иксстатусы ;) 5277 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_9: \ 000000BC 071089E0 ADD R1,R9,R7 \ 000000C0 010050E1 CMP R0,R1 \ 000000C4 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000C8 6C0A9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000CC F7FFFFEA B ??maincsm_onmessage_8 5278 SMART_REDRAW(); 5279 break; 5280 case IPC_GAME: 5281 { 5282 5283 } 5284 break; 5285 case IPC_TENSECONDS: 5286 //Только свое сообщение 5287 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000D0 071089E0 ADD R1,R9,R7 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 5A00001A BNE ??maincsm_onmessage_2 5288 { 5289 CLIST *t=(CLIST *)cltop; \ 000000DC B48195E5 LDR R8,[R5, #+436] 5290 int f=0; \ 000000E0 0090A0E3 MOV R9,#+0 \ 000000E4 000058E3 CMP R8,#+0 \ 000000E8 2500000A BEQ ??maincsm_onmessage_11 5291 while(t) 5292 { 5293 if(t->just_now) \ ??maincsm_onmessage_12: \ 000000EC 5C0098E5 LDR R0,[R8, #+92] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0200000A BEQ ??maincsm_onmessage_13 5294 { 5295 if (!(--(t->just_now))) f=1; \ 000000F8 010050E2 SUBS R0,R0,#+1 \ 000000FC 5C0088E5 STR R0,[R8, #+92] \ 00000100 0190A003 MOVEQ R9,#+1 5296 } 5297 if (t->isactive) \ ??maincsm_onmessage_13: \ 00000104 800098E5 LDR R0,[R8, #+128] \ 00000108 000050E3 CMP R0,#+0 \ 0000010C 0C00000A BEQ ??maincsm_onmessage_14 5298 { 5299 if (!(--(t->isactive))) \ 00000110 010050E2 SUBS R0,R0,#+1 \ 00000114 800088E5 STR R0,[R8, #+128] \ 00000118 0900001A BNE ??maincsm_onmessage_14 5300 { 5301 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 5302 if ((t->log)&&(!t->isunread)) \ 0000011C 740098E5 LDR R0,[R8, #+116] \ 00000120 0190A0E3 MOV R9,#+1 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0500000A BEQ ??maincsm_onmessage_14 \ 0000012C 640098E5 LDR R0,[R8, #+100] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0200001A BNE ??maincsm_onmessage_14 5303 { 5304 FreeLOGQ(&t->log); \ 00000138 740088E2 ADD R0,R8,#+116 \ 0000013C ........ BL FreeLOGQ 5305 t->msg_count=0; \ 00000140 846088E5 STR R6,[R8, #+132] 5306 } 5307 } 5308 } 5309 t=(CLIST *)(t->next); \ ??maincsm_onmessage_14: \ 00000144 008098E5 LDR R8,[R8, #+0] 5310 } \ 00000148 000058E3 CMP R8,#+0 \ 0000014C E6FFFF1A BNE ??maincsm_onmessage_12 5311 if (f) \ 00000150 000059E3 CMP R9,#+0 \ 00000154 0A00000A BEQ ??maincsm_onmessage_11 5312 { 5313 CLIST *oldt=NULL; 5314 if (contactlist_menu_id) \ 00000158 BC1195E5 LDR R1,[R5, #+444] \ 0000015C 0000A0E3 MOV R0,#+0 \ 00000160 000051E3 CMP R1,#+0 \ 00000164 0400000A BEQ ??maincsm_onmessage_15 5315 { 5316 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000168 BC0195E5 LDR R0,[R5, #+444] \ 0000016C 0010A0E3 MOV R1,#+0 \ 00000170 090200EF SWI +521 \ 00000174 8F0100EF SWI +399 \ 00000178 ........ _BLF FindContactByN,??FindContactByN??rA 5317 } 5318 RecountMenu(oldt,1); \ ??maincsm_onmessage_15: \ 0000017C 0110A0E3 MOV R1,#+1 \ 00000180 ........ BL RecountMenu 5319 } 5320 if (time_to_stop_t9) \ ??maincsm_onmessage_11: \ 00000184 E80195E5 LDR R0,[R5, #+488] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 2D00000A BEQ ??maincsm_onmessage_2 5321 { 5322 if (!(--time_to_stop_t9)) \ 00000190 010050E2 SUBS R0,R0,#+1 \ 00000194 E80185E5 STR R0,[R5, #+488] \ 00000198 2A00001A BNE ??maincsm_onmessage_2 5323 { 5324 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 0000019C C00195E5 LDR R0,[R5, #+448] \ 000001A0 350100EF SWI +309 \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 2600000A BEQ ??maincsm_onmessage_2 \ 000001AC 960100EF SWI +406 \ 000001B0 240000EA B ??maincsm_onmessage_2 5325 } 5326 } 5327 } 5328 break; 5329 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 5330 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_16: \ 000001B4 080098E5 LDR R0,[R8, #+8] \ 000001B8 040090E5 LDR R0,[R0, #+4] \ 000001BC 1B0000EF SWI +27 \ 000001C0 0090A0E1 MOV R9,R0 5331 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 000001C4 260089E2 ADD R0,R9,#+38 \ 000001C8 140000EF SWI +20 \ 000001CC 00A0A0E1 MOV R10,R0 5332 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 000001D0 080098E5 LDR R0,[R8, #+8] 5333 msg->pkt.type=T_SENDMSG; 5334 msg->pkt.data_len=l; 5335 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 000001D4 0920A0E1 MOV R2,R9 \ 000001D8 000090E5 LDR R0,[R0, #+0] \ 000001DC 00008AE5 STR R0,[R10, #+0] \ 000001E0 0200A0E3 MOV R0,#+2 \ 000001E4 B400CAE1 STRH R0,[R10, #+4] \ 000001E8 B690CAE1 STRH R9,[R10, #+6] \ 000001EC 080098E5 LDR R0,[R8, #+8] \ 000001F0 041090E5 LDR R1,[R0, #+4] \ 000001F4 08008AE2 ADD R0,R10,#+8 \ 000001F8 1E0100EF SWI +286 5336 //slientsend=1; 5337 if(strstr(msg->data,PASS)==0) \ 000001FC 3C199FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 00000200 08008AE2 ADD R0,R10,#+8 \ 00000204 180100EF SWI +280 \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 0600000A BEQ ??maincsm_onmessage_17 5338 { 5339 SENDMSGCOUNT++; //Номер сообщения 5340 SUBPROC((void *)SendAnswer,0,msg); 5341 } 5342 else 5343 { 5344 msg->pkt.data_len=40; \ 00000210 2800A0E3 MOV R0,#+40 \ 00000214 B600CAE1 STRH R0,[R10, #+6] 5345 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 00000218 4C00A0E3 MOV R0,#+76 \ 0000021C 500E80E3 ORR R0,R0,#0x500 \ 00000220 071080E0 ADD R1,R0,R7 \ 00000224 08008AE2 ADD R0,R10,#+8 \ 00000228 1A0000EF SWI +26 5346 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_17: \ 0000022C 200195E5 LDR R0,[R5, #+288] 5347 SUBPROC((void *)SendAnswer,0,msg); \ 00000230 0A20A0E1 MOV R2,R10 \ 00000234 010080E2 ADD R0,R0,#+1 \ 00000238 200185E5 STR R0,[R5, #+288] \ 0000023C ........ LDR R0,??DataTable183 ;; SendAnswer \ 00000240 0010A0E3 MOV R1,#+0 \ 00000244 710100EF SWI +369 5348 } 5349 break; 5350 } 5351 } 5352 } 5353 } 5354 //Нарисуем иконочку моего статуса 5355 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 5356 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 00000248 068100EF SWI +33030 \ 0000024C 040090E5 LDR R0,[R0, #+4] \ 00000250 080100EF SWI +264 \ 00000254 2C0090E5 LDR R0,[R0, #+44] 5357 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 00000258 350100EF SWI +309 \ 0000025C 000050E3 CMP R0,#+0 \ 00000260 6100000A BEQ ??maincsm_onmessage_18 5358 { 5359 GUI *igui=GetTopGUI(); 5360 if (igui) //И он существует \ 00000264 4D0100EF SWI +333 \ 00000268 000050E3 CMP R0,#+0 \ 0000026C 6000000A BEQ ??maincsm_onmessage_19 5361 { 5362 //#ifdef ELKA 5363 INC_show=0; \ 00000270 F06185E5 STR R6,[R5, #+496] 5364 //#endif 5365 canvasdata=BuildCanvas(); //void * - belyj fon! \ 00000274 F18000EF SWI +33009 \ 00000278 EC0085E5 STR R0,[R5, #+236] 5366 int icn; 5367 // if(ShowStatusIcon==0 || ShowStatusIcon==3) 5368 // { 5369 if(total_unread) \ 0000027C B00195E5 LDR R0,[R5, #+432] \ 00000280 000050E3 CMP R0,#+0 5370 icn=IS_MSG; \ 00000284 0D00A013 MOVNE R0,#+13 \ 00000288 0500001A BNE ??maincsm_onmessage_20 5371 else 5372 { 5373 switch(connect_state) \ 0000028C 8C0195E5 LDR R0,[R5, #+396] \ 00000290 000050E3 CMP R0,#+0 \ 00000294 0200000A BEQ ??maincsm_onmessage_20 \ 00000298 030050E2 SUBS R0,R0,#+3 5374 { 5375 case 0: 5376 icn=IS_OFFLINE; break; 5377 case 3: 5378 icn=CurrentStatus; //IS_ONLINE; \ 0000029C 74019505 LDREQ R0,[R5, #+372] 5379 break; 5380 default: 5381 icn=IS_UNKNOWN; break; \ 000002A0 0E00A013 MOVNE R0,#+14 5382 } 5383 } 5384 //} 5385 //Тут трохи поменял 5386 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 5387 // __root const CFG_CBOX_ITEM cfgcbox9_1[5]={"On main screen","Iconbar","Iconbar except idle","All","Nothing"}; 5388 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_20: \ 000002A4 ........ LDR R1,??DataTable188 ;; ShowStatusIcon \ 000002A8 001091E5 LDR R1,[R1, #+0] \ 000002AC 000051E3 CMP R1,#+0 \ 000002B0 02005113 CMPNE R1,#+2 \ 000002B4 03005113 CMPNE R1,#+3 \ 000002B8 1900001A BNE ??maincsm_onmessage_21 5389 { 5390 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 5391 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ 000002BC 008185E0 ADD R8,R5,R0, LSL #+2 \ 000002C0 000098E5 LDR R0,[R8, #+0] \ 000002C4 210000EF SWI +33 \ 000002C8 0090A0E1 MOV R9,R0 \ 000002CC 000098E5 LDR R0,[R8, #+0] \ 000002D0 220000EF SWI +34 \ 000002D4 68189FE5 LDR R1,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 000002D8 00A091E5 LDR R10,[R1, #+0] \ 000002DC 64189FE5 LDR R1,??maincsm_onmessage_5+0x14 ;; IDLEICON_Y \ 000002E0 0A0080E0 ADD R0,R0,R10 \ 000002E4 00B091E5 LDR R11,[R1, #+0] \ 000002E8 0110A0E3 MOV R1,#+1 \ 000002EC 02002DE9 PUSH {R1} \ 000002F0 013040E2 SUB R3,R0,#+1 \ 000002F4 0B20A0E1 MOV R2,R11 \ 000002F8 0B1089E0 ADD R1,R9,R11 \ 000002FC 011041E2 SUB R1,R1,#+1 \ 00000300 02002DE9 PUSH {R1} \ 00000304 EC0095E5 LDR R0,[R5, #+236] \ 00000308 0A10A0E1 MOV R1,R10 \ 0000030C 250000EF SWI +37 5392 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000310 002098E5 LDR R2,[R8, #+0] \ 00000314 0B10A0E1 MOV R1,R11 \ 00000318 0A00A0E1 MOV R0,R10 \ 0000031C 230000EF SWI +35 \ 00000320 08D08DE2 ADD SP,SP,#+8 5393 } 5394 // __root const CFG_CBOX_ITEM cfgcbox_8z[4]={"Nothing","On main screen","Iconbar","All"}; 5395 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_21: \ 00000324 ........ LDR R0,??DataTable189 ;; show_xstatus \ 00000328 000090E5 LDR R0,[R0, #+0] \ 0000032C 010050E3 CMP R0,#+1 \ 00000330 03005013 CMPNE R0,#+3 \ 00000334 2700001A BNE ??maincsm_onmessage_22 5396 { 5397 PNGTOP_DESC *pltop=PNG_TOP(); 5398 pltop->dyn_pltop=XStatusesImgList; 5399 DisableIDLETMR(); \ 00000338 0C889FE5 LDR R8,??maincsm_onmessage_5+0x18 ;; XStatusesIconArray \ 0000033C B98100EF SWI +33209 \ 00000340 ........ LDR R1,??DataTable164 ;; XStatusesImgList \ 00000344 001091E5 LDR R1,[R1, #+0] \ 00000348 081080E5 STR R1,[R0, #+8] \ 0000034C 7F0100EF SWI +383 \ 00000350 ........ LDR R0,??DataTable190 ;; CurrentXStatus \ 00000354 001098E5 LDR R1,[R8, #+0] \ 00000358 000090E5 LDR R0,[R0, #+0] \ 0000035C 000191E7 LDR R0,[R1, +R0, LSL #+2] 5400 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 5401 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 00000360 210000EF SWI +33 \ 00000364 001098E5 LDR R1,[R8, #+0] \ 00000368 0090A0E1 MOV R9,R0 \ 0000036C ........ LDR R0,??DataTable190 ;; CurrentXStatus \ 00000370 000090E5 LDR R0,[R0, #+0] \ 00000374 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000378 220000EF SWI +34 \ 0000037C CC179FE5 LDR R1,??maincsm_onmessage_5+0x1C ;; IDLEICON_XX \ 00000380 00A091E5 LDR R10,[R1, #+0] \ 00000384 C8179FE5 LDR R1,??maincsm_onmessage_5+0x20 ;; IDLEICON_YX \ 00000388 0A0080E0 ADD R0,R0,R10 \ 0000038C 00B091E5 LDR R11,[R1, #+0] \ 00000390 0110A0E3 MOV R1,#+1 \ 00000394 02002DE9 PUSH {R1} \ 00000398 013040E2 SUB R3,R0,#+1 \ 0000039C 0B20A0E1 MOV R2,R11 \ 000003A0 0B1089E0 ADD R1,R9,R11 \ 000003A4 011041E2 SUB R1,R1,#+1 \ 000003A8 02002DE9 PUSH {R1} \ 000003AC EC0095E5 LDR R0,[R5, #+236] \ 000003B0 0A10A0E1 MOV R1,R10 \ 000003B4 250000EF SWI +37 5402 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 000003B8 ........ LDR R0,??DataTable190 ;; CurrentXStatus \ 000003BC 001098E5 LDR R1,[R8, #+0] \ 000003C0 000090E5 LDR R0,[R0, #+0] \ 000003C4 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 000003C8 0B10A0E1 MOV R1,R11 \ 000003CC 0A00A0E1 MOV R0,R10 \ 000003D0 230000EF SWI +35 \ 000003D4 08D08DE2 ADD SP,SP,#+8 5403 } 5404 #ifdef EVILFOX 5405 DrawImg(IDLEICON_X-1,IDLEICON_Y-8,(int)"4:\\zbin\\naticq\\img\\naticq_ms.png"); 5406 #endif 5407 /* 5408 #ifdef EVILFOX 5409 #else 5410 if(strlen(fontpath)>5) 5411 { 5412 #endif 5413 */ 5414 5415 #ifdef ELKA 5416 if (total_unread) \ ??maincsm_onmessage_22: \ 000003D8 B00195E5 LDR R0,[R5, #+432] \ 000003DC 000050E3 CMP R0,#+0 \ 000003E0 0300000A BEQ ??maincsm_onmessage_19 5417 SLI_On(); \ 000003E4 ........ BL SLI_On \ 000003E8 010000EA B ??maincsm_onmessage_19 5418 #endif 5419 } 5420 } 5421 else 5422 { 5423 main_d=1; \ ??maincsm_onmessage_18: \ 000003EC 0100A0E3 MOV R0,#+1 \ 000003F0 E40085E5 STR R0,[R5, #+228] 5424 } 5425 } 5426 5427 //---------------------------------------------------// 5428 5429 if(msg->msg == MSG_IPC) //kluchnik 26.03.08 \ ??maincsm_onmessage_19: \ 000003F4 040094E5 LDR R0,[R4, #+4] \ 000003F8 B010A0E3 MOV R1,#+176 \ 000003FC DE1C81E3 ORR R1,R1,#0xDE00 \ 00000400 010050E1 CMP R0,R1 \ 00000404 BB00001A BNE ??maincsm_onmessage_23 5430 { 5431 IPC_REQ *ipc; 5432 if ((ipc=(IPC_REQ*)msg->data0)) \ 00000408 0C0094E5 LDR R0,[R4, #+12] \ 0000040C 000050E3 CMP R0,#+0 \ 00000410 1501000A BEQ ??maincsm_onmessage_24 5433 { 5434 if (strcmp_nocase(ipc->name_to,"IdleUpd")==0) \ 00000414 000090E5 LDR R0,[R0, #+0] \ 00000418 581E87E2 ADD R1,R7,#+1408 \ 0000041C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000420 000050E3 CMP R0,#+0 5435 { 5436 switch (msg->submess) \ 00000424 08009405 LDREQ R0,[R4, #+8] \ 00000428 00005003 CMPEQ R0,#+0 \ 0000042C B100001A BNE ??maincsm_onmessage_23 5437 { 5438 case 0: 5439 { 5440 if (main_d==1) \ 00000430 E40095E5 LDR R0,[R5, #+228] \ 00000434 010050E3 CMP R0,#+1 \ 00000438 8200001A BNE ??maincsm_onmessage_25 5441 { 5442 ClearScreen(); \ 0000043C ........ _BLF ClearScreen,??ClearScreen??rA 5443 if(Is_SMARTCPU_On) \ 00000440 040195E5 LDR R0,[R5, #+260] \ 00000444 000050E3 CMP R0,#+0 \ 00000448 7D00000A BEQ ??maincsm_onmessage_26 5444 { 5445 #ifdef EVILFOX 5446 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, 0); 5447 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, 0); 5448 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, 0); 5449 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, 0); 5450 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, 0); 5451 #else 5452 if(fonto==1) \ 0000044C 04179FE5 LDR R1,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 00000450 E83095E5 LDR R3,[R5, #+232] \ 00000454 E00095E5 LDR R0,[R5, #+224] \ 00000458 D020A0E3 MOV R2,#+208 \ 0000045C 682D82E3 ORR R2,R2,#0x1A00 \ 00000460 052082E0 ADD R2,R2,R5 \ 00000464 10208DE5 STR R2,[SP, #+16] \ 00000468 A020A0E3 MOV R2,#+160 \ 0000046C 682D82E3 ORR R2,R2,#0x1A00 \ 00000470 052082E0 ADD R2,R2,R5 \ 00000474 0C208DE5 STR R2,[SP, #+12] \ 00000478 7020A0E3 MOV R2,#+112 \ 0000047C 682D82E3 ORR R2,R2,#0x1A00 \ 00000480 052082E0 ADD R2,R2,R5 \ 00000484 08208DE5 STR R2,[SP, #+8] \ 00000488 009091E5 LDR R9,[R1, #+0] \ 0000048C C8169FE5 LDR R1,??maincsm_onmessage_5+0x28 ;; msg_d_y \ 00000490 698D85E2 ADD R8,R5,#+6720 \ 00000494 00A091E5 LDR R10,[R1, #+0] \ 00000498 1010A0E3 MOV R1,#+16 \ 0000049C 681D81E3 ORR R1,R1,#0x1A00 \ 000004A0 052081E0 ADD R2,R1,R5 \ 000004A4 ........ LDR R1,??DataTable202 ;; fonto \ 000004A8 00B091E5 LDR R11,[R1, #+0] \ 000004AC 01002DE9 PUSH {R0} \ 000004B0 01005BE3 CMP R11,#+1 \ 000004B4 2C00001A BNE ??maincsm_onmessage_27 5453 { 5454 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 000004B8 0100A0E3 MOV R0,#+1 \ 000004BC 01002DE9 PUSH {R0} \ 000004C0 0A10A0E1 MOV R1,R10 \ 000004C4 0900A0E1 MOV R0,R9 \ 000004C8 ........ _BLF PrintField,??PrintField??rA 5455 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 000004CC E00095E5 LDR R0,[R5, #+224] \ 000004D0 0820A0E1 MOV R2,R8 \ 000004D4 01002DE9 PUSH {R0} \ 000004D8 0100A0E3 MOV R0,#+1 \ 000004DC 01002DE9 PUSH {R0} \ 000004E0 E83095E5 LDR R3,[R5, #+232] \ 000004E4 F00095E5 LDR R0,[R5, #+240] \ 000004E8 0A1080E0 ADD R1,R0,R10 \ 000004EC 0900A0E1 MOV R0,R9 \ 000004F0 ........ _BLF PrintField,??PrintField??rA 5456 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 000004F4 E00095E5 LDR R0,[R5, #+224] \ 000004F8 01002DE9 PUSH {R0} \ 000004FC 0100A0E3 MOV R0,#+1 \ 00000500 01002DE9 PUSH {R0} \ 00000504 E83095E5 LDR R3,[R5, #+232] \ 00000508 20209DE5 LDR R2,[SP, #+32] \ 0000050C F00095E5 LDR R0,[R5, #+240] \ 00000510 80108AE0 ADD R1,R10,R0, LSL #+1 \ 00000514 0900A0E1 MOV R0,R9 \ 00000518 ........ _BLF PrintField,??PrintField??rA 5457 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 0000051C E00095E5 LDR R0,[R5, #+224] \ 00000520 01002DE9 PUSH {R0} \ 00000524 0100A0E3 MOV R0,#+1 \ 00000528 01002DE9 PUSH {R0} \ 0000052C E83095E5 LDR R3,[R5, #+232] \ 00000530 2C209DE5 LDR R2,[SP, #+44] \ 00000534 F00095E5 LDR R0,[R5, #+240] \ 00000538 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000053C 0A1080E0 ADD R1,R0,R10 \ 00000540 0900A0E1 MOV R0,R9 \ 00000544 ........ _BLF PrintField,??PrintField??rA 5458 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 00000548 E00095E5 LDR R0,[R5, #+224] \ 0000054C 01002DE9 PUSH {R0} \ 00000550 0100A0E3 MOV R0,#+1 \ 00000554 01002DE9 PUSH {R0} \ 00000558 E83095E5 LDR R3,[R5, #+232] \ 0000055C 38209DE5 LDR R2,[SP, #+56] \ 00000560 F00095E5 LDR R0,[R5, #+240] \ 00000564 00118AE0 ADD R1,R10,R0, LSL #+2 \ 00000568 320000EA B ??maincsm_onmessage_28 5459 } 5460 else 5461 { 5462 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_27: \ 0000056C 0B00A0E1 MOV R0,R11 \ 00000570 01002DE9 PUSH {R0} \ 00000574 0A10A0E1 MOV R1,R10 \ 00000578 0900A0E1 MOV R0,R9 \ 0000057C ........ _BLF PrintField,??PrintField??rA 5463 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000580 F00095E5 LDR R0,[R5, #+240] \ 00000584 C50100EF SWI +453 \ 00000588 E01095E5 LDR R1,[R5, #+224] \ 0000058C 0820A0E1 MOV R2,R8 \ 00000590 02002DE9 PUSH {R1} \ 00000594 0A0080E0 ADD R0,R0,R10 \ 00000598 0B10A0E1 MOV R1,R11 \ 0000059C 02002DE9 PUSH {R1} \ 000005A0 E83095E5 LDR R3,[R5, #+232] \ 000005A4 011080E2 ADD R1,R0,#+1 \ 000005A8 0900A0E1 MOV R0,R9 \ 000005AC ........ _BLF PrintField,??PrintField??rA 5464 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 000005B0 F00095E5 LDR R0,[R5, #+240] \ 000005B4 C50100EF SWI +453 \ 000005B8 E01095E5 LDR R1,[R5, #+224] \ 000005BC 80008AE0 ADD R0,R10,R0, LSL #+1 \ 000005C0 02002DE9 PUSH {R1} \ 000005C4 0B10A0E1 MOV R1,R11 \ 000005C8 02002DE9 PUSH {R1} \ 000005CC E83095E5 LDR R3,[R5, #+232] \ 000005D0 20209DE5 LDR R2,[SP, #+32] \ 000005D4 021080E2 ADD R1,R0,#+2 \ 000005D8 0900A0E1 MOV R0,R9 \ 000005DC ........ _BLF PrintField,??PrintField??rA 5465 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 000005E0 F00095E5 LDR R0,[R5, #+240] \ 000005E4 C50100EF SWI +453 \ 000005E8 E01095E5 LDR R1,[R5, #+224] \ 000005EC 800080E0 ADD R0,R0,R0, LSL #+1 \ 000005F0 02002DE9 PUSH {R1} \ 000005F4 0A0080E0 ADD R0,R0,R10 \ 000005F8 0B10A0E1 MOV R1,R11 \ 000005FC 02002DE9 PUSH {R1} \ 00000600 E83095E5 LDR R3,[R5, #+232] \ 00000604 2C209DE5 LDR R2,[SP, #+44] \ 00000608 031080E2 ADD R1,R0,#+3 \ 0000060C 0900A0E1 MOV R0,R9 \ 00000610 ........ _BLF PrintField,??PrintField??rA 5466 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 00000614 F00095E5 LDR R0,[R5, #+240] \ 00000618 C50100EF SWI +453 \ 0000061C E01095E5 LDR R1,[R5, #+224] \ 00000620 00018AE0 ADD R0,R10,R0, LSL #+2 \ 00000624 02002DE9 PUSH {R1} \ 00000628 00082DE9 PUSH {R11} \ 0000062C E83095E5 LDR R3,[R5, #+232] \ 00000630 38209DE5 LDR R2,[SP, #+56] \ 00000634 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_28: \ 00000638 0900A0E1 MOV R0,R9 \ 0000063C ........ _BLF PrintField,??PrintField??rA \ 00000640 28D08DE2 ADD SP,SP,#+40 5467 } 5468 #endif 5469 } 5470 main_d=0; \ ??maincsm_onmessage_26: \ 00000644 E46085E5 STR R6,[R5, #+228] 5471 } 5472 if(Is_UPTIME_On) \ ??maincsm_onmessage_25: \ 00000648 440195E5 LDR R0,[R5, #+324] \ 0000064C 000050E3 CMP R0,#+0 \ 00000650 0100000A BEQ ??maincsm_onmessage_29 5473 DrawOnlineTime(canvasdata); \ 00000654 EC0095E5 LDR R0,[R5, #+236] \ 00000658 ........ BL DrawOnlineTime 5474 if(Is_PING_On) \ ??maincsm_onmessage_29: \ 0000065C FC0095E5 LDR R0,[R5, #+252] \ 00000660 000050E3 CMP R0,#+0 \ 00000664 0100000A BEQ ??maincsm_onmessage_30 5475 DrawPing(canvasdata); \ 00000668 EC0095E5 LDR R0,[R5, #+236] \ 0000066C ........ BL DrawPing 5476 5477 if(Auto_Status && showAwayIdle) \ ??maincsm_onmessage_30: \ 00000670 ........ LDR R0,??DataTable169 ;; Auto_Status \ 00000674 000090E5 LDR R0,[R0, #+0] \ 00000678 000050E3 CMP R0,#+0 \ 0000067C 0500000A BEQ ??maincsm_onmessage_31 \ 00000680 ........ LDR R0,??DataTable170 ;; showAwayIdle \ 00000684 000090E5 LDR R0,[R0, #+0] \ 00000688 000050E3 CMP R0,#+0 \ 0000068C 0100000A BEQ ??maincsm_onmessage_31 5478 DrawAutoMSG(canvasdata); \ 00000690 EC0095E5 LDR R0,[R5, #+236] \ 00000694 ........ BL DrawAutoMSG 5479 if(Is_Unread_On) \ ??maincsm_onmessage_31: \ 00000698 C0049FE5 LDR R0,??maincsm_onmessage_5+0x2C ;; Is_Unread_On \ 0000069C 000090E5 LDR R0,[R0, #+0] \ 000006A0 000050E3 CMP R0,#+0 \ 000006A4 1300000A BEQ ??maincsm_onmessage_23 5480 { 5481 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 000006A8 142195E5 LDR R2,[R5, #+276] \ 000006AC F78FA0E3 MOV R8,#+988 \ 000006B0 660F88E2 ADD R0,R8,#+408 \ 000006B4 071080E0 ADD R1,R0,R7 \ 000006B8 050088E0 ADD R0,R8,R5 \ 000006BC 160000EF SWI +22 5482 #ifdef EVILFOX 5483 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, space); 5484 #else 5485 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 000006C0 ........ LDR R0,??DataTable171 ;; spaco1 \ 000006C4 052088E0 ADD R2,R8,R5 \ 000006C8 000090E5 LDR R0,[R0, #+0] \ 000006CC 01002DE9 PUSH {R0} \ 000006D0 ........ LDR R0,??DataTable202 ;; fonto \ 000006D4 000090E5 LDR R0,[R0, #+0] \ 000006D8 01002DE9 PUSH {R0} \ 000006DC E83095E5 LDR R3,[R5, #+232] \ 000006E0 7C049FE5 LDR R0,??maincsm_onmessage_5+0x30 ;; unread_Y \ 000006E4 001090E5 LDR R1,[R0, #+0] \ 000006E8 78049FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; unread_X \ 000006EC 000090E5 LDR R0,[R0, #+0] \ 000006F0 ........ _BLF PrintField,??PrintField??rA \ 000006F4 08D08DE2 ADD SP,SP,#+8 5486 #endif 5487 } 5488 } 5489 } 5490 } 5491 } 5492 } 5493 5494 //-----------------------------------------------------------// 5495 5496 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_23: \ 000006F8 040094E5 LDR R0,[R4, #+4] \ 000006FC AF10A0E3 MOV R1,#+175 \ 00000700 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000704 010050E1 CMP R0,R1 \ 00000708 2E00001A BNE ??maincsm_onmessage_32 5497 { 5498 5499 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 0000070C ........ LDR R0,??DataTable196 ;; successed_config_filename \ 00000710 0C1094E5 LDR R1,[R4, #+12] \ 00000714 000090E5 LDR R0,[R0, #+0] \ 00000718 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000071C 000050E3 CMP R0,#+0 \ 00000720 2800001A BNE ??maincsm_onmessage_32 5500 { 5501 ShowMSG(1,(int)"NatICQ config updated!"); 5502 // InitConfig(); 5503 #ifdef NEWSGOLD 5504 initTags(); 5505 #endif 5506 PrintLibInit(1); 5507 FontPathInit((char *)fontpath, 1); \ 00000724 ........ LDR R8,??DataTable198 ;; fontpath \ 00000728 8800A0E3 MOV R0,#+136 \ 0000072C 500E80E3 ORR R0,R0,#0x500 \ 00000730 071080E0 ADD R1,R0,R7 \ 00000734 0100A0E3 MOV R0,#+1 \ 00000738 480100EF SWI +328 \ 0000073C ........ _BLF initTags,??initTags??rA \ 00000740 0100A0E3 MOV R0,#+1 \ 00000744 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000748 0110A0E3 MOV R1,#+1 \ 0000074C 0800A0E1 MOV R0,R8 \ 00000750 ........ _BLF FontPathInit,??FontPathInit??rA 5508 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 00000754 ........ LDR R1,??DataTable199 ;; bgrColor \ 00000758 ........ LDR R0,??DataTable200 ;; fontColor \ 0000075C 0120A0E3 MOV R2,#+1 \ 00000760 ........ _BLF SetFontColor,??SetFontColor??rA 5509 //#ifdef ELKA 5510 if(fonto==1) \ 00000764 ........ LDR R0,??DataTable202 ;; fonto \ 00000768 00B090E5 LDR R11,[R0, #+0] \ 0000076C 01005BE3 CMP R11,#+1 \ 00000770 0B00001A BNE ??maincsm_onmessage_33 5511 { 5512 char *heght=malloc(64); \ 00000774 4000A0E3 MOV R0,#+64 \ 00000778 140000EF SWI +20 \ 0000077C 0090A0E1 MOV R9,R0 5513 sprintf(heght, "%s2240.png", fontpath); \ 00000780 0820A0E1 MOV R2,R8 \ 00000784 5A1E87E2 ADD R1,R7,#+1440 \ 00000788 160000EF SWI +22 5514 paused_height=GetImgHeight((int)heght); \ 0000078C 0900A0E1 MOV R0,R9 \ 00000790 210000EF SWI +33 \ 00000794 F00085E5 STR R0,[R5, #+240] 5515 mfree(heght); \ 00000798 0900A0E1 MOV R0,R9 \ 0000079C 150000EF SWI +21 \ 000007A0 010000EA B ??maincsm_onmessage_34 5516 } 5517 else 5518 paused_height=fonto-100; \ ??maincsm_onmessage_33: \ 000007A4 64004BE2 SUB R0,R11,#+100 \ 000007A8 F00085E5 STR R0,[R5, #+240] 5519 //#endif 5520 free_ICONS(); \ ??maincsm_onmessage_34: \ 000007AC ........ BL free_ICONS 5521 setup_ICONS(); \ 000007B0 ........ BL setup_ICONS 5522 ResortCL(); \ 000007B4 ........ _BLF ResortCL,??ResortCL??rA 5523 RecountMenu(NULL,1); \ 000007B8 0110A0E3 MOV R1,#+1 \ 000007BC 0000A0E3 MOV R0,#+0 \ 000007C0 ........ BL RecountMenu 5524 init_time_zone(); \ 000007C4 ........ BL init_time_zone 5525 // InitSmiles(); 5526 } 5527 } 5528 5529 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_32: \ 000007C8 040094E5 LDR R0,[R4, #+4] \ 000007CC 0E10A0E3 MOV R1,#+14 \ 000007D0 641C81E3 ORR R1,R1,#0x6400 \ 000007D4 010050E1 CMP R0,R1 \ 000007D8 0E00001A BNE ??maincsm_onmessage_35 5530 { 5531 if ((int)msg->data0==csm->gui_id) \ 000007DC 18109DE5 LDR R1,[SP, #+24] \ 000007E0 0C0094E5 LDR R0,[R4, #+12] \ 000007E4 281091E5 LDR R1,[R1, #+40] \ 000007E8 010050E1 CMP R0,R1 5532 { 5533 csm->csm.state=-3; \ 000007EC 18009D05 LDREQ R0,[SP, #+24] \ 000007F0 0210E003 MVNEQ R1,#+2 \ 000007F4 10108005 STREQ R1,[R0, #+16] 5534 } 5535 if ((int)msg->data0==contactlist_menu_id) \ 000007F8 0C0094E5 LDR R0,[R4, #+12] \ 000007FC BC1195E5 LDR R1,[R5, #+444] \ 00000800 010050E1 CMP R0,R1 5536 { 5537 contactlist_menu_id=0; \ 00000804 BC618505 STREQ R6,[R5, #+444] 5538 prev_clmenu_itemcount=0; \ 00000808 C4618505 STREQ R6,[R5, #+452] 5539 } 5540 if ((int)msg->data0==edchat_id) \ 0000080C C01195E5 LDR R1,[R5, #+448] \ 00000810 010050E1 CMP R0,R1 5541 { 5542 edchat_id=0; \ 00000814 C0618505 STREQ R6,[R5, #+448] 5543 } 5544 } 5545 5546 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_35: \ 00000818 040094E5 LDR R0,[R4, #+4] \ 0000081C AE10A0E3 MOV R1,#+174 \ 00000820 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000824 010050E1 CMP R0,R1 \ 00000828 0F00001A BNE ??maincsm_onmessage_24 5547 { 5548 switch((int)msg->data0) \ 0000082C 0C0094E5 LDR R0,[R4, #+12] \ 00000830 101094E5 LDR R1,[R4, #+16] \ 00000834 ........ LDR R9,??DataTable178 ;; do_reconnect \ 00000838 5420A0E3 MOV R2,#+84 \ 0000083C 602D82E3 ORR R2,R2,#0x1800 \ 00000840 054082E0 ADD R4,R2,R5 \ 00000844 482F42E2 SUB R2,R2,#+288 \ 00000848 058082E0 ADD R8,R2,R5 \ 0000084C 802050E2 SUBS R2,R0,#+128 \ 00000850 0800000A BEQ ??maincsm_onmessage_36 \ 00000854 022052E2 SUBS R2,R2,#+2 \ 00000858 0200000A BEQ ??maincsm_onmessage_37 \ 0000085C 122052E2 SUBS R2,R2,#+18 \ 00000860 1600000A BEQ ??maincsm_onmessage_38 \ 00000864 200000EA B ??maincsm_onmessage_39 5549 { 5550 case LMAN_DISCONNECT_IND: 5551 is_gprs_online=0; \ ??maincsm_onmessage_37: \ 00000868 AC6185E5 STR R6,[R5, #+428] 5552 return(1); \ ??maincsm_onmessage_24: \ 0000086C 0100A0E3 MOV R0,#+1 \ 00000870 1CD08DE2 ADD SP,SP,#+28 \ 00000874 F08FBDE8 POP {R4-R11,PC} ;; return 5553 case LMAN_CONNECT_CNF: 5554 vibra_count=1; \ ??maincsm_onmessage_36: \ 00000878 0100A0E3 MOV R0,#+1 \ 0000087C 7C0185E5 STR R0,[R5, #+380] 5555 start_vibra(); \ 00000880 ........ BL start_vibra 5556 is_gprs_online=1; \ 00000884 0100A0E3 MOV R0,#+1 \ 00000888 AC0185E5 STR R0,[R5, #+428] 5557 strcpy(logmsg,LG_GRGPRSUP); \ 0000088C AC00A0E3 MOV R0,#+172 \ 00000890 500E80E3 ORR R0,R0,#0x500 \ 00000894 071080E0 ADD R1,R0,R7 \ 00000898 0800A0E1 MOV R0,R8 \ 0000089C 1A0000EF SWI +26 5558 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000008A0 ........ LDR R0,??DataTable186 ;; RECONNECT_TIME \ 000008A4 0920A0E1 MOV R2,R9 \ 000008A8 000090E5 LDR R0,[R0, #+0] \ 000008AC D830A0E3 MOV R3,#+216 \ 000008B0 930001E0 MUL R1,R3,R0 \ 000008B4 0400A0E1 MOV R0,R4 \ 000008B8 4D0000EF SWI +77 5559 return(1); \ 000008BC 070000EA B ??maincsm_onmessage_40 5560 case ENIP_DNR_HOST_BY_NAME: 5561 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_38: \ 000008C0 D40195E5 LDR R0,[R5, #+468] \ 000008C4 000051E1 CMP R1,R0 \ 000008C8 E7FFFF1A BNE ??maincsm_onmessage_24 5562 { 5563 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 000008CC D80195E5 LDR R0,[R5, #+472] \ 000008D0 000050E3 CMP R0,#+0 \ 000008D4 E4FFFF0A BEQ ??maincsm_onmessage_24 \ 000008D8 ........ LDR R0,??DataTable212 ;; create_connect \ ??maincsm_onmessage_41: \ 000008DC 710100EF SWI +369 5564 } 5565 return(1); \ ??maincsm_onmessage_40: \ 000008E0 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_42: \ 000008E4 1CD08DE2 ADD SP,SP,#+28 \ 000008E8 F08FBDE8 POP {R4-R11,PC} 5566 } 5567 if ((int)msg->data1==sock) \ ??maincsm_onmessage_39: \ 000008EC 902195E5 LDR R2,[R5, #+400] \ 000008F0 020051E1 CMP R1,R2 \ 000008F4 DCFFFF1A BNE ??maincsm_onmessage_24 5568 { 5569 //Если наш сокет 5570 if ((((unsigned int)msg->data0)>>28)==0xA) \ 000008F8 201EA0E1 LSR R1,R0,#+28 \ 000008FC 0A0051E3 CMP R1,#+10 \ 00000900 0200001A BNE ??maincsm_onmessage_43 5571 { 5572 //Принят пакет 5573 ProcessPacket((TPKT *)msg->data0); \ 00000904 ........ BL ProcessPacket 5574 return(0); \ 00000908 0000A0E3 MOV R0,#+0 \ 0000090C F4FFFFEA B ??maincsm_onmessage_42 5575 } 5576 switch((int)msg->data0) \ ??maincsm_onmessage_43: \ 00000910 ........ LDR R2,??DataTable181 ;; VIBR_ON_CONNECT \ 00000914 8C1195E5 LDR R1,[R5, #+396] \ 00000918 00A092E5 LDR R10,[R2, #+0] \ 0000091C 8A0040E2 SUB R0,R0,#+138 \ 00000920 050050E3 CMP R0,#+5 \ 00000924 D0FFFF8A BHI ??maincsm_onmessage_24 \ 00000928 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 0000092C D02092E1 LDRSB R2,[R2, R0] \ 00000930 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000934 49494301 DC8 +73,+73,+67,+1 \ 00000938 524E0000 DC8 +82,+78,+0,+0 5577 { 5578 case ENIP_SOCK_CONNECTED: 5579 if (connect_state==1) \ ??maincsm_onmessage_44: \ 0000093C 010051E3 CMP R1,#+1 \ 00000940 3900001A BNE ??maincsm_onmessage_45 5580 { 5581 if(VIBR_ON_CONNECT) \ 00000944 00005AE3 CMP R10,#+0 5582 vibra_count=2; \ 00000948 0200A013 MOVNE R0,#+2 5583 else 5584 vibra_count=1; \ 0000094C 0100A003 MOVEQ R0,#+1 \ 00000950 7C0185E5 STR R0,[R5, #+380] 5585 start_vibra(); \ 00000954 ........ BL start_vibra 5586 //Соединение установленно, посылаем пакет login 5587 strcpy(logmsg, LG_GRTRYLOGIN); \ 00000958 C400A0E3 MOV R0,#+196 \ 0000095C 500E80E3 ORR R0,R0,#0x500 \ 00000960 071080E0 ADD R1,R0,R7 \ 00000964 0800A0E1 MOV R0,R8 \ 00000968 1A0000EF SWI +26 5588 { 5589 int i=strlen(PASS); \ 0000096C CC019FE5 LDR R0,??maincsm_onmessage_5+0xC ;; PASS \ 00000970 1B0000EF SWI +27 \ 00000974 0080A0E1 MOV R8,R0 5590 TPKT *p=malloc(sizeof(PKT)+i); \ 00000978 080088E2 ADD R0,R8,#+8 \ 0000097C 140000EF SWI +20 5591 p->pkt.uin=UIN; 5592 p->pkt.type=T_REQLOGIN; 5593 p->pkt.data_len=i; 5594 memcpy(p->data,PASS,i); \ 00000980 B8119FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 00000984 0090A0E1 MOV R9,R0 \ 00000988 ........ LDR R0,??DataTable182 ;; UIN \ 0000098C 0820A0E1 MOV R2,R8 \ 00000990 004090E5 LDR R4,[R0, #+0] \ 00000994 0100A0E3 MOV R0,#+1 \ 00000998 004089E5 STR R4,[R9, #+0] \ 0000099C B400C9E1 STRH R0,[R9, #+4] \ 000009A0 B680C9E1 STRH R8,[R9, #+6] \ 000009A4 080089E2 ADD R0,R9,#+8 \ 000009A8 1E0100EF SWI +286 5595 SUBPROC((void *)send_login,0,p); \ 000009AC B8019FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; send_login \ 000009B0 0920A0E1 MOV R2,R9 \ 000009B4 0010A0E3 MOV R1,#+0 \ 000009B8 710100EF SWI +369 5596 } 5597 GROUP_CACHE=0; \ 000009BC B86185E5 STR R6,[R5, #+440] 5598 SENDMSGCOUNT=0; //Начинаем отсчет \ 000009C0 206185E5 STR R6,[R5, #+288] 5599 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 000009C4 0600A0E1 MOV R0,R6 \ 000009C8 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000009CC 000050E3 CMP R0,#+0 \ 000009D0 0400001A BNE ??maincsm_onmessage_46 \ 000009D4 D400A0E3 MOV R0,#+212 \ 000009D8 500E80E3 ORR R0,R0,#0x500 \ 000009DC 071080E0 ADD R1,R0,R7 \ 000009E0 0000A0E3 MOV R0,#+0 \ 000009E4 ........ _BLF AddGroup,??AddGroup??rA 5600 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_46: \ 000009E8 0400A0E1 MOV R0,R4 \ 000009EC ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000009F0 000050E3 CMP R0,#+0 \ 000009F4 0800001A BNE ??maincsm_onmessage_47 \ 000009F8 70019FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; IsShowLoopback \ 000009FC 000090E5 LDR R0,[R0, #+0] \ 00000A00 000050E3 CMP R0,#+0 \ 00000A04 0400000A BEQ ??maincsm_onmessage_47 \ 00000A08 0130A0E3 MOV R3,#+1 \ 00000A0C 0020A0E3 MOV R2,#+0 \ 00000A10 5E1E87E2 ADD R1,R7,#+1504 \ 00000A14 0400A0E1 MOV R0,R4 \ 00000A18 ........ _BLF AddContact,??AddContact??rA 5601 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_47: \ 00000A1C 50019FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; LoadLocalCL \ 00000A20 710100EF SWI +369 5602 SMART_REDRAW(); \ 00000A24 ........ BL SMART_REDRAW \ 00000A28 ACFFFFEA B ??maincsm_onmessage_40 5603 } 5604 else 5605 { 5606 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_45: \ 00000A2C EC00A0E3 MOV R0,#+236 \ 00000A30 500E80E3 ORR R0,R0,#0x500 \ ??maincsm_onmessage_48: \ 00000A34 071080E0 ADD R1,R0,R7 \ 00000A38 0100A0E3 MOV R0,#+1 \ 00000A3C 480100EF SWI +328 \ 00000A40 A6FFFFEA B ??maincsm_onmessage_40 5607 } 5608 break; 5609 case ENIP_SOCK_DATA_READ: 5610 if (connect_state>=2) \ ??maincsm_onmessage_49: \ 00000A44 020051E3 CMP R1,#+2 5611 { 5612 //Если посылали send 5613 SUBPROC((void *)get_answer); \ 00000A48 28019FA5 LDRGE R0,??maincsm_onmessage_5+0x44 ;; get_answer \ 00000A4C A2FFFFAA BGE ??maincsm_onmessage_41 5614 //SMART_REDRAW(); 5615 } 5616 else 5617 { 5618 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000A50 1400A0E3 MOV R0,#+20 \ 00000A54 600E80E3 ORR R0,R0,#0x600 \ 00000A58 F5FFFFEA B ??maincsm_onmessage_48 5619 } 5620 break; 5621 case ENIP_BUFFER_FREE: 5622 case ENIP_BUFFER_FREE1: 5623 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_50: \ 00000A5C ........ LDR R0,??DataTable183 ;; SendAnswer \ 00000A60 0020A0E3 MOV R2,#+0 \ 00000A64 0210A0E1 MOV R1,R2 \ 00000A68 710100EF SWI +369 \ 00000A6C 9BFFFFEA B ??maincsm_onmessage_40 5624 break; 5625 case ENIP_SOCK_REMOTE_CLOSED: 5626 //Закрыт со стороны сервера 5627 if (connect_state) \ ??maincsm_onmessage_51: \ 00000A70 000051E3 CMP R1,#+0 \ 00000A74 7CFFFF0A BEQ ??maincsm_onmessage_24 5628 SUBPROC((void *)end_socket); \ 00000A78 ........ LDR R0,??DataTable210 ;; end_socket \ 00000A7C 96FFFFEA B ??maincsm_onmessage_41 5629 break; 5630 case ENIP_SOCK_CLOSED: 5631 //strcpy(logmsg, "No connection"); 5632 //Dump not received 5633 /* if (RXstate>(-(int)sizeof(PKT))) 5634 { 5635 unsigned int err; 5636 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 5637 if (f!=-1) 5638 { 5639 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 5640 fclose(f,&err); 5641 } 5642 }*/ 5643 FillAllOffline(); \ ??maincsm_onmessage_52: \ 00000A80 ........ _BLF FillAllOffline,??FillAllOffline??rA 5644 RecountMenu(NULL,1); \ 00000A84 0110A0E3 MOV R1,#+1 \ 00000A88 0000A0E3 MOV R0,#+0 \ 00000A8C ........ BL RecountMenu 5645 connect_state=0; \ 00000A90 8C6185E5 STR R6,[R5, #+396] 5646 sock=-1; \ 00000A94 0600E0E1 MVN R0,R6 \ 00000A98 900185E5 STR R0,[R5, #+400] 5647 if(VIBR_ON_CONNECT) \ 00000A9C 00005AE3 CMP R10,#+0 5648 vibra_count=4; \ 00000AA0 0400A013 MOVNE R0,#+4 5649 else 5650 vibra_count=1; \ 00000AA4 0100A003 MOVEQ R0,#+1 \ 00000AA8 7C0185E5 STR R0,[R5, #+380] 5651 5652 start_vibra(); \ 00000AAC ........ BL start_vibra 5653 if (sendq_p) \ 00000AB0 A80195E5 LDR R0,[R5, #+424] \ 00000AB4 000050E3 CMP R0,#+0 \ 00000AB8 0600000A BEQ ??maincsm_onmessage_53 5654 { 5655 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000ABC A43195E5 LDR R3,[R5, #+420] \ 00000AC0 3800A0E3 MOV R0,#+56 \ 00000AC4 600E80E3 ORR R0,R0,#0x600 \ 00000AC8 072080E0 ADD R2,R0,R7 \ 00000ACC FF10A0E3 MOV R1,#+255 \ 00000AD0 0800A0E1 MOV R0,R8 \ 00000AD4 1B0100EF SWI +283 5656 } 5657 SMART_REDRAW(); \ ??maincsm_onmessage_53: \ 00000AD8 ........ BL SMART_REDRAW 5658 SUBPROC((void *)ClearSendQ); \ 00000ADC ........ LDR R0,??DataTable185 ;; ClearSendQ \ 00000AE0 710100EF SWI +369 5659 #ifdef EVILFOX 5660 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 5661 #else 5662 if (!disautorecconect) \ 00000AE4 600195E5 LDR R0,[R5, #+352] \ 00000AE8 000050E3 CMP R0,#+0 \ 00000AEC 5EFFFF1A BNE ??maincsm_onmessage_24 5663 { 5664 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000AF0 ........ LDR R0,??DataTable186 ;; RECONNECT_TIME \ 00000AF4 0920A0E1 MOV R2,R9 \ 00000AF8 005090E5 LDR R5,[R0, #+0] \ 00000AFC D800A0E3 MOV R0,#+216 \ 00000B00 900501E0 MUL R1,R0,R5 \ 00000B04 0400A0E1 MOV R0,R4 \ 00000B08 4D0000EF SWI +77 5665 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000B0C 20002DE9 PUSH {R5} \ 00000B10 0830A0E1 MOV R3,R8 \ 00000B14 5C00A0E3 MOV R0,#+92 \ 00000B18 600E80E3 ORR R0,R0,#0x600 \ 00000B1C 072080E0 ADD R2,R0,R7 \ 00000B20 FF10A0E3 MOV R1,#+255 \ 00000B24 0800A0E1 MOV R0,R8 \ 00000B28 1B0100EF SWI +283 \ 00000B2C 04D08DE2 ADD SP,SP,#+4 \ 00000B30 6AFFFFEA B ??maincsm_onmessage_40 \ ??maincsm_onmessage_5: \ 00000B34 ........ DC32 CheckDoubleRun \ 00000B38 ........ DC32 ProcessNextSmile \ 00000B3C ........ DC32 ProcessNextXStatImg \ 00000B40 ........ DC32 PASS \ 00000B44 ........ DC32 IDLEICON_X \ 00000B48 ........ DC32 IDLEICON_Y \ 00000B4C ........ DC32 XStatusesIconArray \ 00000B50 ........ DC32 IDLEICON_XX \ 00000B54 ........ DC32 IDLEICON_YX \ 00000B58 ........ DC32 msg_d_x \ 00000B5C ........ DC32 msg_d_y \ 00000B60 ........ DC32 Is_Unread_On \ 00000B64 ........ DC32 unread_Y \ 00000B68 ........ DC32 unread_X \ 00000B6C ........ DC32 send_login \ 00000B70 ........ DC32 IsShowLoopback \ 00000B74 ........ DC32 LoadLocalCL \ 00000B78 ........ DC32 get_answer 5666 } 5667 5668 #endif 5669 break; 5670 } 5671 } 5672 } 5673 return(1); 5674 } 5675 5676 5677 //-------------------- ICON IN ICONBAR ------------// 5678 5679 //kluchnik 26.03.08 5680 5681 #pragma swi_number=0x27 5682 __swi __arm void AddIconToIconBar(int pic, short *num); 5683 5684 \ In segment CODE, align 4, keep-with-next 5685 void addIconBar(short* num) 5686 { \ addIconBar: \ 00000000 70402DE9 PUSH {R4-R6,LR} 5687 int icn; 5688 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ 00000004 ........ LDR R6,??DataTable211 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0C019FE5 LDR R0,??addIconBar_0 ;; NumStatusToIconBar \ 00000010 005090E5 LDR R5,[R0, #+0] \ 00000014 ........ LDR R0,??DataTable188 ;; ShowStatusIcon \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 010050E3 CMP R0,#+1 \ 00000020 03005013 CMPNE R0,#+3 \ 00000024 2C00001A BNE ??addIconBar_1 5689 { 5690 if(total_unread) \ 00000028 B00196E5 LDR R0,[R6, #+432] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 2200000A BEQ ??addIconBar_2 5691 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); \ ??addIconBar_3: \ 00000034 0410A0E1 MOV R1,R4 \ 00000038 0D0085E2 ADD R0,R5,#+13 \ ??addIconBar_4: \ 0000003C 270000EF SWI +39 5692 else 5693 { 5694 switch(connect_state) 5695 { 5696 case 0: 5697 icn=IS_OFFLINE; break; 5698 case 3: 5699 icn=CurrentStatus; //IS_ONLINE; 5700 break; 5701 default: 5702 icn=IS_UNKNOWN; break; 5703 } 5704 AddIconToIconBar(NumStatusToIconBar + icn, num); 5705 } 5706 } 5707 else 5708 { 5709 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 5710 { 5711 if(!(IsIdleUiOnTop())) 5712 { 5713 if(total_unread) 5714 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 5715 else 5716 { 5717 switch(connect_state) 5718 { 5719 case 0: 5720 icn=IS_OFFLINE; break; 5721 case 3: 5722 icn=CurrentStatus; //IS_ONLINE; 5723 break; 5724 default: 5725 icn=IS_UNKNOWN; break; 5726 } 5727 AddIconToIconBar(NumStatusToIconBar + icn, num); 5728 } 5729 } 5730 } 5731 } 5732 5733 if(show_xstatus==2 || show_xstatus==3) \ ??addIconBar_5: \ 00000040 ........ LDR R0,??DataTable189 ;; show_xstatus \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 020050E3 CMP R0,#+2 \ 0000004C 03005013 CMPNE R0,#+3 \ 00000050 0800001A BNE ??addIconBar_6 5734 if(CurrentXStatus!=0) \ 00000054 ........ LDR R0,??DataTable190 ;; CurrentXStatus \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 0400000A BEQ ??addIconBar_6 5735 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ 00000064 B8209FE5 LDR R2,??addIconBar_0+0x4 ;; NumXStatusToIconBar \ 00000068 0410A0E1 MOV R1,R4 \ 0000006C 002092E5 LDR R2,[R2, #+0] \ 00000070 020080E0 ADD R0,R0,R2 \ 00000074 270000EF SWI +39 5736 5737 #ifdef kluchnik 5738 // if(solnce) 5739 //{ 5740 CLIST *t; 5741 t=FindContactByUin(438532198); \ ??addIconBar_6: \ 00000078 A8009FE5 LDR R0,??addIconBar_0+0x8 ;; 0x1a237866 \ 0000007C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000080 0060A0E1 MOV R6,R0 5742 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 00000084 B405D6E1 LDRH R0,[R6, #+84] \ 00000088 FF10A0E3 MOV R1,#+255 \ 0000008C FF1C81E3 ORR R1,R1,#0xFF00 \ 00000090 010050E1 CMP R0,R1 \ 00000094 7080BD08 POPEQ {R4-R6,PC} \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C ........ BL GetIconIndex \ 000000A0 0E0050E3 CMP R0,#+14 \ 000000A4 7080BD08 POPEQ {R4-R6,PC} 5743 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC ........ BL GetIconIndex \ 000000B0 0410A0E1 MOV R1,R4 \ 000000B4 050080E0 ADD R0,R0,R5 \ 000000B8 270000EF SWI +39 5744 // } 5745 #endif 5746 } \ 000000BC 7080BDE8 POP {R4-R6,PC} ;; return \ ??addIconBar_2: \ 000000C0 8C0196E5 LDR R0,[R6, #+396] \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 1100000A BEQ ??addIconBar_7 \ 000000CC 030050E2 SUBS R0,R0,#+3 \ 000000D0 0E00001A BNE ??addIconBar_8 \ ??addIconBar_9: \ 000000D4 740196E5 LDR R0,[R6, #+372] \ 000000D8 0D0000EA B ??addIconBar_7 \ ??addIconBar_1: \ 000000DC 020050E3 CMP R0,#+2 \ 000000E0 D6FFFF1A BNE ??addIconBar_5 \ 000000E4 C50000EF SWI +197 \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC D3FFFF1A BNE ??addIconBar_5 \ 000000F0 B00196E5 LDR R0,[R6, #+432] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 CDFFFF1A BNE ??addIconBar_3 \ 000000FC 8C0196E5 LDR R0,[R6, #+396] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0200000A BEQ ??addIconBar_7 \ 00000108 030050E2 SUBS R0,R0,#+3 \ 0000010C F0FFFF0A BEQ ??addIconBar_9 \ ??addIconBar_8: \ 00000110 0E00A0E3 MOV R0,#+14 \ ??addIconBar_7: \ 00000114 0410A0E1 MOV R1,R4 \ 00000118 050080E0 ADD R0,R0,R5 \ 0000011C C6FFFFEA B ??addIconBar_4 \ ??addIconBar_0: \ 00000120 ........ DC32 NumStatusToIconBar \ 00000124 ........ DC32 NumXStatusToIconBar \ 00000128 6678231A DC32 0x1a237866 5747 5748 typedef struct 5749 { 5750 char check_name[8]; 5751 int addr; 5752 }ICONBAR_H; 5753 5754 \ In segment DATA_C, align 4, align-sorted 5755 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 5756 \ In segment DATA_Z, align 4, align-sorted 5757 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 5758 5759 struct 5760 { 5761 CSM_DESC maincsm; 5762 WSHDR maincsm_name; 5763 ICONBAR_H iconbar_handler; 5764 }MAINCSM = 5765 { 5766 { 5767 maincsm_onmessage, 5768 maincsm_oncreate, 5769 #ifdef NEWSGOLD 5770 0, 5771 0, 5772 0, 5773 0, 5774 #endif 5775 maincsm_onclose, 5776 sizeof(MAIN_CSM), 5777 1, 5778 &minus11 5779 }, 5780 { 5781 maincsm_name_body, 5782 NAMECSM_MAGIC1, 5783 NAMECSM_MAGIC2, 5784 0x0, 5785 139 5786 }, 5787 { 5788 "IconBar" 5789 } 5790 }; 5791 \ In segment CODE, align 4, keep-with-next 5792 void UpdateCSMname(void) 5793 { 5794 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable195 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; S_ICONS + 156 \ 00000014 240100EF SWI +292 5795 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 S_ICONS + 156 5796 \ In segment CODE, align 4, keep-with-next 5797 void SetIconBarHandler() 5798 { 5799 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; S_ICONS + 184 \ 00000004 ........ LDR R1,??DataTable201 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 5800 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 S_ICONS + 184 5801 \ In segment CODE, align 4, keep-with-next 5802 int main(char *filename) 5803 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 5804 MAIN_CSM main_csm; 5805 char *s; 5806 int len; 5807 WSHDR *ws; 5808 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable211 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable194 ;; `?wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 5874 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 5875 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 5876 { 5877 for (int i=0; i=0xE100) 5881 { 5882 t=FindSmileByUni(c); 5883 if (t) 5884 { 5885 if (t->lines) 5886 { 5887 len+=strlen(t->lines->text); 5888 } 5889 } 5890 else len++; 5891 } 5892 else len++; 5893 } 5894 5895 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 5896 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 5897 for (int wcur=0; wcur=0xE100) 5902 { 5903 t=FindSmileByUni(c); 5904 if (t) 5905 { 5906 int w; 5907 char *s; 5908 if (t->lines) 5909 { 5910 s=t->lines->text; 5911 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 5938 { 5939 if (t->isactive) return t; \ 0000000C 801090E5 LDR R1,[R0, #+128] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 5940 } 5941 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable206 ;; S_ICONS + 436 \ 00000020 020000EA B ??FindNextActiveContact_2 5942 while(t=(CLIST *)(t->next)) 5943 { 5944 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 801090E5 LDR R1,[R0, #+128] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 5945 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 5946 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 5947 } 5948 \ In segment CODE, align 4, keep-with-next 5949 CLIST *FindPrevActiveContact(CLIST *t) 5950 { 5951 CLIST *cl; 5952 CLIST *cl_active=NULL; 5953 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable206 ;; S_ICONS + 436 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 5954 5955 5956 while(cl=cl->next) 5957 { 5958 if (cl==t) 5959 { 5960 if (cl_active==NULL) break; 5961 else return (cl_active); 5962 } 5963 else 5964 { 5965 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 803092E5 LDR R3,[R2, #+128] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 5966 } \ ??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 5967 } 5968 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 5969 { 5970 if (t->isactive) cl_active=t; \ 00000044 802090E5 LDR R2,[R0, #+128] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 5971 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 5972 } 5973 return cl_active; 5974 } 5975 5976 \ In segment CODE, align 4, keep-with-next 5977 void ed_options_handler(USR_MENU_ITEM *item) 5978 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 5979 EDCHAT_STRUCT *ed_struct=item->user_pointer; 5980 CLIST *t; 5981 int i=item->cur_item; 5982 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable211 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0070A0E1 MOV R7,R0 \ 00000010 0000D7E5 LDRB R0,[R7, #+0] \ 00000014 044097E5 LDR R4,[R7, #+4] \ 00000018 B860D7E1 LDRH R6,[R7, #+8] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0D00001A BNE ??ed_options_handler_0 5983 { 5984 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ws,LG_MNUEDNEXTACT); 5988 break; 5989 case 1: 5990 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 5991 break; 5992 default: 5993 i-=2; 5994 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); \ 00000040 101094E5 LDR R1,[R4, #+16] \ 00000044 026046E2 SUB R6,R6,#+2 \ 00000048 010056E1 CMP R6,R1 \ 0000004C 550000AA BGE ??ed_options_handler_3 \ 00000050 841195E5 LDR R1,[R5, #+388] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 5995 break; 5996 } 5997 } 5998 if (item->type==1) \ ??ed_options_handler_0: \ 0000005C 0000D7E5 LDRB R0,[R7, #+0] \ 00000060 010050E3 CMP R0,#+1 \ 00000064 4F00001A BNE ??ed_options_handler_3 5999 { 6000 switch(i) \ 00000068 007094E5 LDR R7,[R4, #+0] \ 0000006C 0600B0E1 MOVS R0,R6 \ 00000070 0200000A BEQ ??ed_options_handler_4 \ 00000074 010056E2 SUBS R0,R6,#+1 \ 00000078 0C00000A BEQ ??ed_options_handler_5 \ 0000007C 0E0000EA B ??ed_options_handler_6 6001 { 6002 case 0: 6003 t=FindNextActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_4: \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 ........ BL FindNextActiveContact \ ??ed_options_handler_7: \ 00000088 0040B0E1 MOVS R4,R0 6004 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 6005 { 6006 GeneralFunc_flag1(edchat_id,1); \ 00000094 C00195E5 LDR R0,[R5, #+448] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 6007 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 6008 } 6009 break; 6010 case 1: 6011 t=FindPrevActiveContact(ed_struct->ed_contact); \ ??ed_options_handler_5: \ 000000B0 0700A0E1 MOV R0,R7 \ 000000B4 ........ BL FindPrevActiveContact \ 000000B8 F2FFFFEA B ??ed_options_handler_7 6012 if (t && t!=ed_struct->ed_contact) 6013 { 6014 GeneralFunc_flag1(edchat_id,1); 6015 CreateEditChat(t); 6016 } 6017 break; 6018 default: 6019 i-=2; 6020 if (iloaded_templates) \ ??ed_options_handler_6: \ 000000BC 100094E5 LDR R0,[R4, #+16] \ 000000C0 026046E2 SUB R6,R6,#+2 \ 000000C4 000056E1 CMP R6,R0 \ 000000C8 360000AA BGE ??ed_options_handler_3 6021 { 6022 EDITCONTROL ec; 6023 WSHDR *ed_ws; 6024 int c; 6025 char *p=templates_lines[i]; \ 000000CC 840195E5 LDR R0,[R5, #+388] 6026 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); \ 000000D0 081094E5 LDR R1,[R4, #+8] \ 000000D4 065190E7 LDR R5,[R0, +R6, LSL #+2] \ 000000D8 040094E5 LDR R0,[R4, #+4] \ 000000DC 0D20A0E1 MOV R2,SP \ 000000E0 690100EF SWI +361 6027 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); \ 000000E4 0500A0E1 MOV R0,R5 \ 000000E8 1B0000EF SWI +27 \ 000000EC 28109DE5 LDR R1,[SP, #+40] \ 000000F0 001091E5 LDR R1,[R1, #+0] \ 000000F4 B010D1E1 LDRH R1,[R1, #+0] \ 000000F8 010080E0 ADD R0,R0,R1 \ 000000FC 250100EF SWI +293 6028 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 6029 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ 0000010C 040094E5 LDR R0,[R4, #+4] \ 00000110 820100EF SWI +386 \ 00000114 081094E5 LDR R1,[R4, #+8] \ 00000118 010050E1 CMP R0,R1 \ 0000011C 1800001A BNE ??ed_options_handler_8 6030 { 6031 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); \ 00000120 040094E5 LDR R0,[R4, #+4] \ 00000124 D30100EF SWI +467 \ 00000128 0070A0E1 MOV R7,R0 \ 0000012C 050000EA B ??ed_options_handler_9 6032 while(c=*p++) 6033 { 6034 wsInsertChar(ed_ws,char8to16(c),pos++); \ ??ed_options_handler_10: \ 00000130 ........ _BLF char8to16,??char8to16??rA \ 00000134 0010A0E1 MOV R1,R0 \ 00000138 0720A0E1 MOV R2,R7 \ 0000013C 0600A0E1 MOV R0,R6 \ 00000140 1D0000EF SWI +29 \ 00000144 017087E2 ADD R7,R7,#+1 6035 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 6036 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000154 081094E5 LDR R1,[R4, #+8] \ 00000158 040094E5 LDR R0,[R4, #+4] \ 0000015C 0620A0E1 MOV R2,R6 \ 00000160 DE0100EF SWI +478 6037 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); \ 00000164 040094E5 LDR R0,[R4, #+4] \ 00000168 0710A0E1 MOV R1,R7 \ 0000016C D40100EF SWI +468 \ 00000170 0A0000EA B ??ed_options_handler_11 6038 } 6039 else 6040 { 6041 while(c=*p++) 6042 { 6043 wsAppendChar(ed_ws,char8to16(c)); \ ??ed_options_handler_12: \ 00000174 ........ _BLF char8to16,??char8to16??rA \ 00000178 0010A0E1 MOV R1,R0 \ 0000017C 0600A0E1 MOV R0,R6 \ 00000180 1C0000EF SWI +28 6044 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 6045 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); \ 00000190 081094E5 LDR R1,[R4, #+8] \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0620A0E1 MOV R2,R6 \ 0000019C DE0100EF SWI +478 6046 } 6047 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 6048 } 6049 break; 6050 } 6051 } 6052 } \ ??ed_options_handler_3: \ 000001A8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000001AC F080BDE8 POP {R4-R7,PC} ;; return \ ??ed_options_handler_1: \ 000001B0 ........ DC32 `?= len) 6061 { 6062 s = str; 6063 w = ws; 6064 l = len; 6065 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 6066 if(!l) return ws; 6067 ws++; 6068 (*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} 6069 } 6070 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 6071 6072 } 6073 \ In segment CODE, align 4, keep-with-next 6074 int IsUrl(WSHDR *ws, int pos, char *link) 6075 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 6076 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6077 6078 int len = wstrlen(ws); 6079 unsigned short *str = ws->wsbody+1, *tmp, *begin; 6080 tmp = str; 6081 6082 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable209 ;; `?` \ 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 6083 6084 while(str && (begin-tmp <= pos)) 6085 { 6086 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6087 if(str-tmp >= pos-2) 6088 { 6089 for(;begin < str; begin++, link++) 6090 *link = char16to8(*begin); 6091 link[str-begin] = 0; 6092 return 1; 6093 } 6094 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 6095 } 6096 6097 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 6098 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} 6099 while(str && (begin-tmp <= pos)) 6100 { 6101 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6102 if(str-tmp >= pos-2) 6103 { 6104 for(;begin < str; begin++, link++) 6105 *link = char16to8(*begin); 6106 link[str-begin] = 0; 6107 return 1; 6108 } 6109 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 6110 } 6111 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 6112 } 6113 6114 #define UTF16_DIS_UNDERLINE (0xE002) 6115 #define UTF16_ENA_UNDERLINE (0xE001) 6116 \ In segment CODE, align 4, keep-with-next 6117 void ParseAnswer(WSHDR *ws, const char *s) 6118 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 6119 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6120 S_SMILES *t; 6121 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 6122 STXT_SMILES *st; 6123 unsigned int wchar; 6124 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 6125 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 6126 int i; 6127 while(wchar=*s) 6128 { 6129 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 6130 { 6131 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 6132 while(*s && strchr(valid, *s)) 6133 { 6134 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 6135 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 6136 s++; 6137 } \ 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 6138 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 6139 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 6140 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable209 ;; `?` \ 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 6141 } 6142 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 6143 while(t) 6144 { 6145 st=t->lines; 6146 while(st) 6147 { 6148 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 6149 { 6150 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 6151 } 6152 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] 6153 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 6154 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 6155 } 6156 L1: 6157 if (t) 6158 { 6159 wchar=t->uni_smile; 6160 s+=strlen(st->text); 6161 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 6162 } 6163 else 6164 { 6165 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 6166 s++; 6167 ulb>>=8; 6168 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 6169 } \ ??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 6170 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 6171 } 6172 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 6173 while(i>1) 6174 { 6175 if (ws->wsbody[i--]!=13) break; 6176 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 6177 } 6178 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 6179 \ In segment CODE, align 4, keep-with-next 6180 void SaveAnswer(CLIST *cl, WSHDR *ws) 6181 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 6182 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 6183 mfree(cl->answer); \ 00000014 780094E5 LDR R0,[R4, #+120] \ 00000018 150000EF SWI +21 6184 cl->answer=p; \ 0000001C 785084E5 STR R5,[R4, #+120] 6185 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 6186 6187 //links applicator 6188 6189 \ In segment CODE, align 4, keep-with-next 6190 int GetTempName(void) 6191 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 6192 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 6193 unsigned long iday; 6194 TTime tt; 6195 TDate dd; 6196 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 6197 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 6198 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 6199 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] 6200 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 6201 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 6202 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 6203 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 6204 } \ 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 6205 6206 \ In segment CODE, align 4, keep-with-next 6207 void recon() 6208 { 6209 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable210 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 6210 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable211 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 5400A0E3 MOV R0,#+84 \ 00000014 600D80E3 ORR R0,R0,#0x1800 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 6211 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 D80184E5 STR R0,[R4, #+472] 6212 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable212 ;; create_connect \ 0000002C 710100EF SWI +369 6213 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 6214 \ In segment CODE, align 4, keep-with-next 6215 int edchat_onkey(GUI *data, GUI_MSG *msg) 6216 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6217 //-1 - do redraw 6218 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R5,??DataTable220 ;; S_ICONS \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 3400A0E3 MOV R0,#+52 \ 00000018 600D80E3 ORR R0,R0,#0x1800 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 8C0100EF SWI +396 6219 CLIST *t; 6220 TPKT *p; 6221 EDITCONTROL ec; 6222 int len, f;//2026rev 6223 unsigned err;//2026rev 6224 char *s; 6225 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 088090E5 LDR R8,[R0, #+8] 6226 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 6227 char fn[256]; 6228 6229 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 6230 { 6231 void ec_menu(EDCHAT_STRUCT *); 6232 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 6233 return(-1); \ ??edchat_onkey_1: \ 00000054 2D0100EA B ??edchat_onkey_2 6234 } 6235 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 2A0100EA B ??edchat_onkey_4 \ ??edchat_onkey_3: \ 00000068 040097E5 LDR R0,[R7, #+4] \ 0000006C 9510A0E3 MOV R1,#+149 \ 00000070 040090E5 LDR R0,[R0, #+4] \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 6A00001A BNE ??edchat_onkey_5 6236 #ifdef EVILFOX 6237 if (msg->gbsmsg->msg==LONG_PRESS) 6238 { 6239 if (l==VOL_DOWN_BUTTON) 6240 { 6241 WSHDR *ws; 6242 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6243 if(wstrlen(ec.pWS)>0) 6244 { 6245 ws=AllocWS(1); 6246 CutWSTR(ws,0); 6247 6248 EDIT_SetFocus(data,ed_struct->ed_answer); 6249 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6250 6251 FreeWS(ws); 6252 RefreshGUI(); 6253 } 6254 } 6255 if (l==VOL_UP_BUTTON) 6256 { 6257 // WSHDR *ws=AllocWS(strlen(ed_struct->ed_contact->last_msg_buffer)+1); 6258 // ascii2ws(ws,ed_struct->ed_contact->last_msg_buffer); 6259 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 6260 ascii2ws(ws,last_msg_buffer); 6261 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 6262 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6263 FreeWS(ws); 6264 RefreshGUI(); 6265 } 6266 } 6267 #else 6268 6269 void AddSmile(GUI *data); 6270 if (msg->gbsmsg->msg==LONG_PRESS) 6271 { 6272 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 2200001A BNE ??edchat_onkey_6 6273 { 6274 if(LongRightAction==2) \ 00000088 E0049FE5 LDR R0,??edchat_onkey_7 ;; LongRightAction \ 0000008C 000090E5 LDR R0,[R0, #+0] \ 00000090 020050E3 CMP R0,#+2 \ 00000094 0200001A BNE ??edchat_onkey_8 6275 CreateSmileSelectGUI(ed_struct); \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 000000A0 610000EA B ??edchat_onkey_5 6276 else 6277 if(LongRightAction==1) \ ??edchat_onkey_8: \ 000000A4 010050E3 CMP R0,#+1 \ 000000A8 5F00001A BNE ??edchat_onkey_5 6278 { 6279 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 000000AC 0400A0E1 MOV R0,R4 \ 000000B0 820100EF SWI +386 \ 000000B4 081096E5 LDR R1,[R6, #+8] \ 000000B8 010050E1 CMP R0,R1 \ 000000BC 5A00001A BNE ??edchat_onkey_5 6280 { 6281 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C0 04208DE2 ADD R2,SP,#+4 \ 000000C4 0400A0E1 MOV R0,R4 \ 000000C8 690100EF SWI +361 6282 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 000000CC 0400A0E1 MOV R0,R4 \ 000000D0 D30100EF SWI +467 \ 000000D4 2C109DE5 LDR R1,[SP, #+44] \ 000000D8 010040E2 SUB R0,R0,#+1 \ 000000DC 001091E5 LDR R1,[R1, #+0] \ 000000E0 B010D1E1 LDRH R1,[R1, #+0] \ 000000E4 000051E1 CMP R1,R0 \ 000000E8 4F00001A BNE ??edchat_onkey_5 6283 { 6284 t=FindNextActiveContact(ed_struct->ed_contact); \ 000000EC 00A096E5 LDR R10,[R6, #+0] \ 000000F0 0A00A0E1 MOV R0,R10 \ 000000F4 ........ BL FindNextActiveContact \ 000000F8 0090B0E1 MOVS R9,R0 6285 if (t && t!=ed_struct->ed_contact) \ 000000FC 0A005911 CMPNE R9,R10 \ 00000100 4900000A BEQ ??edchat_onkey_5 6286 { 6287 CreateEditChat(t); \ ??edchat_onkey_9: \ 00000104 0900A0E1 MOV R0,R9 \ 00000108 ........ BL CreateEditChat 6288 return(1); \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 FF0000EA B ??edchat_onkey_4 6289 } 6290 } 6291 } 6292 } 6293 } 6294 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_6: \ 00000114 3D0058E3 CMP R8,#+61 \ 00000118 1A00001A BNE ??edchat_onkey_10 \ 0000011C 50049FE5 LDR R0,??edchat_onkey_7+0x4 ;; LongLeftAction \ 00000120 000090E5 LDR R0,[R0, #+0] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 3F00000A BEQ ??edchat_onkey_5 6295 { 6296 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 0000012C 0400A0E1 MOV R0,R4 \ 00000130 820100EF SWI +386 \ 00000134 081096E5 LDR R1,[R6, #+8] \ 00000138 010050E1 CMP R0,R1 \ 0000013C 3A00001A BNE ??edchat_onkey_5 6297 { 6298 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000140 04208DE2 ADD R2,SP,#+4 \ 00000144 0400A0E1 MOV R0,R4 \ 00000148 690100EF SWI +361 6299 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 D30100EF SWI +467 \ 00000154 2C109DE5 LDR R1,[SP, #+44] \ 00000158 010040E2 SUB R0,R0,#+1 \ 0000015C 001091E5 LDR R1,[R1, #+0] \ 00000160 B010D1E1 LDRH R1,[R1, #+0] \ 00000164 000051E1 CMP R1,R0 \ 00000168 2F00001A BNE ??edchat_onkey_5 6300 { 6301 t=FindPrevActiveContact(ed_struct->ed_contact); \ 0000016C 00A096E5 LDR R10,[R6, #+0] \ 00000170 0A00A0E1 MOV R0,R10 \ 00000174 ........ BL FindPrevActiveContact \ 00000178 0090B0E1 MOVS R9,R0 6302 if (t && t!=ed_struct->ed_contact) \ 0000017C 0A005911 CMPNE R9,R10 \ 00000180 2900000A BEQ ??edchat_onkey_5 \ 00000184 DEFFFFEA B ??edchat_onkey_9 6303 { 6304 CreateEditChat(t); 6305 return(1); 6306 } 6307 } 6308 } 6309 } 6310 #ifdef ELKA 6311 if (l==VOL_DOWN_BUTTON) \ ??edchat_onkey_10: \ 00000188 0E0058E3 CMP R8,#+14 \ 0000018C 0F00001A BNE ??edchat_onkey_11 6312 { 6313 WSHDR *ws; 6314 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000190 081096E5 LDR R1,[R6, #+8] \ 00000194 04208DE2 ADD R2,SP,#+4 \ 00000198 0400A0E1 MOV R0,R4 \ 0000019C 690100EF SWI +361 6315 if(wstrlen(ec.pWS)>0) \ 000001A0 2C009DE5 LDR R0,[SP, #+44] \ 000001A4 230100EF SWI +291 \ 000001A8 010050E3 CMP R0,#+1 \ 000001AC 1E0000BA BLT ??edchat_onkey_5 6316 { 6317 ws=AllocWS(1); \ 000001B0 0100A0E3 MOV R0,#+1 \ 000001B4 250100EF SWI +293 \ 000001B8 0090A0E1 MOV R9,R0 6318 CutWSTR(ws,0); \ 000001BC 0010A0E3 MOV R1,#+0 \ 000001C0 260100EF SWI +294 6319 6320 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000001C4 081096E5 LDR R1,[R6, #+8] \ 000001C8 0400A0E1 MOV R0,R4 \ 000001CC 0F0000EA B ??edchat_onkey_12 6321 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6322 6323 FreeWS(ws); 6324 RefreshGUI(); 6325 } 6326 } 6327 if (l==VOL_UP_BUTTON) \ ??edchat_onkey_11: \ 000001D0 0D0058E3 CMP R8,#+13 \ 000001D4 1400001A BNE ??edchat_onkey_5 6328 { 6329 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); \ 000001D8 1C00A0E3 MOV R0,#+28 \ 000001DC 400E80E3 ORR R0,R0,#0x400 \ 000001E0 050080E0 ADD R0,R0,R5 \ 000001E4 1B0000EF SWI +27 \ 000001E8 010080E2 ADD R0,R0,#+1 \ 000001EC 250100EF SWI +293 \ 000001F0 0090A0E1 MOV R9,R0 6330 ascii2ws(ws,last_msg_buffer); \ 000001F4 1C00A0E3 MOV R0,#+28 \ 000001F8 400E80E3 ORR R0,R0,#0x400 \ 000001FC 051080E0 ADD R1,R0,R5 \ 00000200 0900A0E1 MOV R0,R9 \ 00000204 ........ _BLF ascii2ws,??ascii2ws??rA 6331 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000208 081096E5 LDR R1,[R6, #+8] \ 0000020C 040096E5 LDR R0,[R6, #+4] \ ??edchat_onkey_12: \ 00000210 9B0100EF SWI +411 6332 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000214 040096E5 LDR R0,[R6, #+4] \ 00000218 0910A0E1 MOV R1,R9 \ 0000021C 810100EF SWI +385 6333 FreeWS(ws); \ 00000220 0900A0E1 MOV R0,R9 \ 00000224 290100EF SWI +297 6334 RefreshGUI(); \ 00000228 960100EF SWI +406 6335 } 6336 #endif 6337 } 6338 #endif 6339 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_5: \ 0000022C 040097E5 LDR R0,[R7, #+4] \ 00000230 9310A0E3 MOV R1,#+147 \ 00000234 040090E5 LDR R0,[R0, #+4] \ 00000238 401F81E3 ORR R1,R1,#0x100 \ 0000023C 010050E1 CMP R0,R1 \ 00000240 0A00001A BNE ??edchat_onkey_13 6340 { 6341 if ((l>='0')&&(l<='9')) \ 00000244 300058E3 CMP R8,#+48 \ 00000248 0B0000BA BLT ??edchat_onkey_14 \ 0000024C 3A0058E3 CMP R8,#+58 \ 00000250 060000AA BGE ??edchat_onkey_13 6342 { 6343 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000254 0400A0E1 MOV R0,R4 \ 00000258 820100EF SWI +386 \ 0000025C 081096E5 LDR R1,[R6, #+8] \ 00000260 010050E1 CMP R0,R1 \ 00000264 0100000A BEQ ??edchat_onkey_13 6344 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000268 0400A0E1 MOV R0,R4 \ 0000026C 9B0100EF SWI +411 6345 } 6346 if (l==GREEN_BUTTON) 6347 { 6348 if (connect_state==3) 6349 { 6350 if ((t=ed_struct->ed_contact)) 6351 { 6352 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6353 SaveAnswer(t,ec.pWS); 6354 if ((s=t->answer)) 6355 { 6356 if ((len=strlen(s))) 6357 { 6358 msg_away_timer=0; 6359 away_m=0; 6360 if(SHOW_ACTIVE) 6361 t->isactive=ACTIVE_TIME; 6362 p=malloc(sizeof(PKT)+len+1); 6363 p->pkt.uin=t->uin; 6364 p->pkt.type=T_SENDMSG; 6365 p->pkt.data_len=len; 6366 strcpy(p->data,s); 6367 /* 6368 #ifdef EVILFOX 6369 strcpy(t->last_msg_buffer, s); 6370 #else 6371 */ 6372 #ifdef ELKA 6373 strcpy(last_msg_buffer, s); 6374 #endif 6375 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 6376 SUBPROC((void *)SendAnswer,0,p); 6377 main2_count++; 6378 mfree(t->answer); 6379 t->answer=NULL; 6380 // request_remake_edchat=1; 6381 EDIT_SetFocus(data,ed_struct->ed_answer); 6382 CutWSTR(ews,0); 6383 EDIT_SetTextToFocused(data,ews); 6384 AddMsgToChat(data); 6385 RecountMenu(t,1); 6386 return(-1); 6387 } 6388 } 6389 } 6390 } 6391 } 6392 //================2026rev-begin 6393 if (l==ENTER_BUTTON) 6394 { 6395 6396 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 6397 { 6398 int pos, len; 6399 char *link; 6400 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 6401 wstrcpy(ews,ec.pWS); 6402 pos = EDIT_GetCursorPos(data); 6403 len = wstrlen(ews); 6404 link = malloc(len+1); 6405 6406 if(IsUrl(ews, pos, link)) 6407 { 6408 //templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 6409 // templates_lines[i++]=pp; 6410 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 6411 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 6412 { 6413 fwrite(f,link,strlen(link),&err); 6414 fclose(f,&err); 6415 str_2ws(ews,fn,256); 6416 6417 // if(OpenBrowser) 6418 ExecuteFile(ews,0,0); 6419 /* else 6420 { 6421 6422 ExecuteFile(ews,0,(void*)BalleteMiniPath); 6423 }*/ 6424 6425 unlink(fn, &err); 6426 } 6427 // int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 6428 // templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 6429 // templates_lines[i++]="Open Url"; 6430 // EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 6431 // LockSched(); 6432 // ShowMSG(1,(int)link); 6433 // UnlockSched(); 6434 mfree(link); 6435 return (-1); 6436 } 6437 else 6438 { 6439 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 6440 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 6441 mfree(link); 6442 return (-1); 6443 } 6444 6445 } 6446 6447 } 6448 //================ 2026rev-end =================// 6449 6450 if (l==VOL_UP_BUTTON) 6451 { 6452 int pos; 6453 6454 if ((pos=EDIT_GetFocus(data)-2)>=2) 6455 { 6456 EDIT_SetFocus(data, pos); 6457 EDIT_SetCursorPos(data, 1); 6458 } 6459 return (-1); 6460 } 6461 if (l==VOL_DOWN_BUTTON) 6462 { 6463 int pos; 6464 6465 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 6466 { 6467 EDIT_SetFocus(data, pos); 6468 EDIT_SetCursorPos(data, 1); 6469 } 6470 return (-1); 6471 } 6472 } 6473 return(0); //Do standart keys \ ??edchat_onkey_13: \ 00000270 0000A0E3 MOV R0,#+0 \ 00000274 4CDF8DE2 ADD SP,SP,#+304 \ 00000278 F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_14: \ 0000027C 0B0058E3 CMP R8,#+11 \ 00000280 5300001A BNE ??edchat_onkey_15 \ 00000284 8C0195E5 LDR R0,[R5, #+396] \ 00000288 030050E3 CMP R0,#+3 \ 0000028C F7FFFF1A BNE ??edchat_onkey_13 \ 00000290 009096E5 LDR R9,[R6, #+0] \ 00000294 000059E3 CMP R9,#+0 \ 00000298 F4FFFF0A BEQ ??edchat_onkey_13 \ 0000029C 081096E5 LDR R1,[R6, #+8] \ 000002A0 04208DE2 ADD R2,SP,#+4 \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 690100EF SWI +361 \ 000002AC 2C109DE5 LDR R1,[SP, #+44] \ 000002B0 0900A0E1 MOV R0,R9 \ 000002B4 ........ BL SaveAnswer \ 000002B8 78A099E5 LDR R10,[R9, #+120] \ 000002BC 00005AE3 CMP R10,#+0 \ 000002C0 EAFFFF0A BEQ ??edchat_onkey_13 \ 000002C4 0A00A0E1 MOV R0,R10 \ 000002C8 1B0000EF SWI +27 \ 000002CC 00B0B0E1 MOVS R11,R0 \ 000002D0 E6FFFF0A BEQ ??edchat_onkey_13 \ 000002D4 ........ LDR R0,??DataTable214 ;; SHOW_ACTIVE \ 000002D8 0070A0E3 MOV R7,#+0 \ 000002DC 000090E5 LDR R0,[R0, #+0] \ 000002E0 2C7185E5 STR R7,[R5, #+300] \ 000002E4 347185E5 STR R7,[R5, #+308] \ 000002E8 000050E3 CMP R0,#+0 \ 000002EC 5A0FA013 MOVNE R0,#+360 \ 000002F0 80008915 STRNE R0,[R9, #+128] \ 000002F4 09008BE2 ADD R0,R11,#+9 \ 000002F8 140000EF SWI +20 \ 000002FC 0080A0E1 MOV R8,R0 \ 00000300 0C0099E5 LDR R0,[R9, #+12] \ 00000304 0A10A0E1 MOV R1,R10 \ 00000308 000088E5 STR R0,[R8, #+0] \ 0000030C 0200A0E3 MOV R0,#+2 \ 00000310 B400C8E1 STRH R0,[R8, #+4] \ 00000314 B6B0C8E1 STRH R11,[R8, #+6] \ 00000318 080088E2 ADD R0,R8,#+8 \ 0000031C 1A0000EF SWI +26 \ 00000320 0A10A0E1 MOV R1,R10 \ 00000324 1C00A0E3 MOV R0,#+28 \ 00000328 400E80E3 ORR R0,R0,#0x400 \ 0000032C 050080E0 ADD R0,R0,R5 \ 00000330 1A0000EF SWI +26 \ 00000334 200195E5 LDR R0,[R5, #+288] \ 00000338 ........ LDR R3,??DataTable242 ;; `?ed_contact)); 6494 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 6495 DrawImg(ScreenW()-1-width,1,icon); 6496 #else 6497 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] 6498 width=GetImgWidth(icon); \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 220000EF SWI +34 \ 0000004C 0050A0E1 MOV R5,R0 6499 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 6500 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 6501 GetPaletteAdrByColorIndex(0), 6502 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 6503 #endif 6504 } 6505 } 6506 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return 6507 \ In segment CODE, align 4, keep-with-next 6508 void edchat_ghook(GUI *data, int cmd) 6509 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 6510 6511 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 6512 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 6513 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 6514 int j; 6515 EDITCONTROL ec; 6516 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 6517 PNGTOP_DESC *pltop=PNG_TOP(); 6518 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable220 ;; 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 6519 { 6520 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 3400A0E3 MOV R0,#+52 \ 00000034 600D80E3 ORR R0,R0,#0x1800 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 6521 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 6522 } 6523 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 6524 { 6525 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 6526 // edgui_data=data; 6527 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 6528 6529 static void *methods[16]; 6530 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 6531 if (m) 6532 { 6533 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6700000A BEQ ??edchat_ghook_3 6534 { 6535 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 7F6FA0E3 MOV R6,#+508 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 6536 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 F80184E5 STR R0,[R4, #+504] 6537 methods[0]=(void *)my_ed_redraw; \ 00000098 84019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 6538 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} 6539 } 6540 } 6541 } 6542 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 6543 { 6544 // if (edgui_data==data) edgui_data=NULL; 6545 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 6546 { 6547 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 6548 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 6549 } 6550 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 6551 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 6552 } 6553 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0D00001A BNE ??edchat_ghook_7 6554 { 6555 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] 6556 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 6557 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C B00194E5 LDR R0,[R4, #+432] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 B00184E5 STR R0,[R4, #+432] 6558 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] 6559 #ifdef ELKA 6560 if (!total_unread) \ 00000120 B00194E5 LDR R0,[R4, #+432] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 3B00001A BNE ??edchat_ghook_3 6561 { 6562 SLI_Off(); \ 0000012C ........ BL SLI_Off \ 00000130 DCFFFFEA B ??edchat_ghook_1 6563 } 6564 #endif 6565 /* if (request_close_edchat) 6566 { 6567 request_close_edchat=0; 6568 GeneralFunc_flag1(edchat_id,1); 6569 return; 6570 }*/ 6571 } 6572 if (cmd==7) \ ??edchat_ghook_7: \ 00000134 070059E3 CMP R9,#+7 \ 00000138 2800001A BNE ??edchat_ghook_8 6573 { 6574 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 6575 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 6576 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 6577 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 6578 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 6579 { 6580 time_to_stop_t9=0; \ 00000194 E86184E5 STR R6,[R4, #+488] 6581 if (ed_struct->ed_contact->req_add) \ 00000198 000097E5 LDR R0,[R7, #+0] \ 0000019C 6C1090E5 LDR R1,[R0, #+108] \ 000001A0 000051E3 CMP R1,#+0 \ 000001A4 0500000A BEQ ??edchat_ghook_10 6582 { 6583 ed_struct->ed_contact->req_add=0; \ 000001A8 6C6080E5 STR R6,[R0, #+108] 6584 AddMsgToChat(data); \ 000001AC 0500A0E1 MOV R0,R5 \ 000001B0 ........ BL AddMsgToChat 6585 RecountMenu(ed_struct->ed_contact,1); \ 000001B4 000097E5 LDR R0,[R7, #+0] \ 000001B8 0110A0E3 MOV R1,#+1 \ 000001BC ........ BL RecountMenu 6586 } 6587 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001C0 000097E5 LDR R0,[R7, #+0] \ 000001C4 701090E5 LDR R1,[R0, #+112] \ 000001C8 000051E3 CMP R1,#+0 \ 000001CC 1200000A BEQ ??edchat_ghook_3 6588 { 6589 ed_struct->ed_contact->req_drawack=0; \ 000001D0 706080E5 STR R6,[R0, #+112] 6590 DrawAck(data); \ 000001D4 0500A0E1 MOV R0,R5 \ 000001D8 ........ BL DrawAck \ 000001DC B1FFFFEA B ??edchat_ghook_1 6591 } 6592 } 6593 } 6594 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E0 0C0059E3 CMP R9,#+12 \ 000001E4 0C00001A BNE ??edchat_ghook_3 6595 { 6596 j=EDIT_GetFocus(data); \ 000001E8 0500A0E1 MOV R0,R5 \ 000001EC 820100EF SWI +386 \ 000001F0 0040A0E1 MOV R4,R0 6597 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 6598 EDIT_SetCursorPos(data,1); \ 00000210 0110A0E3 MOV R1,#+1 \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 D40100EF SWI +468 6599 } 6600 } \ ??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 6601 6602 6603 6604 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 `?` 6605 { 6606 1, 6607 edchat_onkey, 6608 edchat_ghook, 6609 (void *)edchat_locret, 6610 0, 6611 &menu_skt, 6612 {0,NULL,NULL,NULL}, 6613 FONT_SMALL, 6614 100, 6615 101, 6616 0, 6617 // 0x00000001 - Выровнять по правому краю 6618 // 0x00000002 - Выровнять по центру 6619 // 0x00000004 - Инверсия знакомест 6620 // 0x00000008 - UnderLine 6621 // 0x00000020 - Не переносить слова 6622 // 0x00000200 - bold 6623 0, 6624 // 0x00000002 - ReadOnly 6625 // 0x00000004 - Не двигается курсор 6626 // 0x40000000 - Поменять местами софт-кнопки 6627 0x40000000 6628 }; 6629 \ In segment CODE, align 4, keep-with-next 6630 void CreateEditChat(CLIST *t) 6631 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6632 6633 void *ma=malloc_adr(); 6634 void *eq; 6635 EDITCONTROL ec; 6636 EDITC_OPTIONS ec_options; 6637 int color, font, type; 6638 int zc; 6639 6640 LOGQ *lp; 6641 int edchat_toitem; 6642 // edcontact=t; 6643 6644 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 8C649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 6645 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 6646 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable221 ;; S_ICONS \ 0000000C 4CD04DE2 SUB SP,SP,#+76 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 148000EF SWI +32788 \ 00000018 0050A0E1 MOV R5,R0 \ 0000001C 140084E2 ADD R0,R4,#+20 \ 00000020 440086E5 STR R0,[R6, #+68] \ 00000024 440087E2 ADD R0,R7,#+68 \ 00000028 400086E5 STR R0,[R6, #+64] 6647 6648 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 6649 6650 /* hist = malloc(256); 6651 if(!GetHistory(hist, 256, t->uin)) 6652 { 6653 ascii2ws(ews,hist); 6654 PrepareEditControl(&ec); 6655 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 6656 } 6657 mfree(hist); 6658 6659 AddEditControlToEditQend(eq,&ec,ma); */ 6660 lp=t->log; \ 0000003C 749094E5 LDR R9,[R4, #+116] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 9500000A BEQ ??CreateEditChat_1 6661 6662 while(lp) 6663 { 6664 font = ED_H_FONT_SIZE; 6665 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C ........ LDR R2,??DataTable222 ;; ED_X_FONT_SIZE \ 00000050 ........ LDR R0,??DataTable223 ;; ED_H_FONT_SIZE \ 00000054 002092E5 LDR R2,[R2, #+0] \ 00000058 00A090E5 LDR R10,[R0, #+0] \ 0000005C 040099E5 LDR R0,[R9, #+4] \ 00000060 ........ LDR R1,??DataTable224 ;; I_COLOR \ 00000064 1C208DE5 STR R2,[SP, #+28] \ 00000068 ........ LDR R2,??DataTable225 ;; X_COLOR \ 0000006C 030010E2 ANDS R0,R0,#0x3 \ 00000070 002092E5 LDR R2,[R2, #+0] \ 00000074 14208DE5 STR R2,[SP, #+20] \ 00000078 ........ LDR R2,??DataTable226 ;; O_ED_X_FONT_SIZE \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 18208DE5 STR R2,[SP, #+24] \ 00000084 ........ LDR R2,??DataTable227 ;; O_X_COLOR \ 00000088 002092E5 LDR R2,[R2, #+0] \ 0000008C 10208DE5 STR R2,[SP, #+16] \ 00000090 00B091E5 LDR R11,[R1, #+0] \ 00000094 0300000A BEQ ??CreateEditChat_3 6666 { 6667 if (zc==1) \ 00000098 010050E3 CMP R0,#+1 \ 0000009C 1E00001A BNE ??CreateEditChat_4 6668 color=ACK_COLOR; //Зеленый \ 000000A0 ........ LDR R0,??DataTable228 ;; ACK_COLOR \ 000000A4 1B0000EA B ??CreateEditChat_5 6669 else 6670 color=I_COLOR; 6671 } 6672 else 6673 { 6674 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 000000A8 080099E5 LDR R0,[R9, #+8] \ 000000AC 010070E3 CMN R0,#+1 \ 000000B0 1700001A BNE ??CreateEditChat_6 6675 { 6676 type = lp->type&0x0F; \ 000000B4 0C0099E5 LDR R0,[R9, #+12] \ 000000B8 0F1000E2 AND R1,R0,#0xF 6677 if(lp->type&0x10) \ 000000BC 100010E3 TST R0,#0x10 \ 000000C0 0B00000A BEQ ??CreateEditChat_7 6678 { 6679 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000C4 010051E3 CMP R1,#+1 \ 000000C8 ........ LDREQ R0,??DataTable229 ;; O_I_COLOR \ 000000CC 0400000A BEQ ??CreateEditChat_8 \ 000000D0 030051E3 CMP R1,#+3 \ 000000D4 18A09D05 LDREQ R10,[SP, #+24] \ 000000D8 02B0A001 MOVEQ R11,R2 \ 000000DC 0E00000A BEQ ??CreateEditChat_4 \ 000000E0 ........ LDR R0,??DataTable230 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000E4 00B090E5 LDR R11,[R0, #+0] \ 000000E8 ........ LDR R0,??DataTable231 ;; O_ED_H_FONT_SIZE \ 000000EC 00A090E5 LDR R10,[R0, #+0] \ 000000F0 090000EA B ??CreateEditChat_4 6680 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 6681 } 6682 else 6683 { 6684 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??CreateEditChat_7: \ 000000F4 010051E3 CMP R1,#+1 \ 000000F8 0700000A BEQ ??CreateEditChat_4 \ 000000FC 030051E3 CMP R1,#+3 \ 00000100 14B09D05 LDREQ R11,[SP, #+20] \ 00000104 1CA09D05 LDREQ R10,[SP, #+28] \ 00000108 0300000A BEQ ??CreateEditChat_4 \ 0000010C ........ LDR R0,??DataTable232 ;; TO_COLOR \ 00000110 000000EA B ??CreateEditChat_5 6685 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 6686 } 6687 } 6688 else 6689 color=UNACK_COLOR; //????? \ ??CreateEditChat_6: \ 00000114 ........ LDR R0,??DataTable233 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 00000118 00B090E5 LDR R11,[R0, #+0] 6690 } 6691 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 0000011C 20008DE2 ADD R0,SP,#+32 \ 00000120 640100EF SWI +356 6692 if ((lp->type&0x0F)!=3) \ 00000124 0C0099E5 LDR R0,[R9, #+12] \ 00000128 0F0000E2 AND R0,R0,#0xF \ 0000012C 030050E3 CMP R0,#+3 \ 00000130 0800000A BEQ ??CreateEditChat_9 6693 { 6694 ascii2ws(ews,lp->hdr); \ 00000134 280197E5 LDR R0,[R7, #+296] \ 00000138 101089E2 ADD R1,R9,#+16 \ 0000013C ........ _BLF ascii2ws,??ascii2ws??rA 6695 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000140 283197E5 LDR R3,[R7, #+296] \ 00000144 4020A0E3 MOV R2,#+64 \ 00000148 000093E5 LDR R0,[R3, #+0] \ 0000014C B000D0E1 LDRH R0,[R0, #+0] \ 00000150 01002DE9 PUSH {R0} \ 00000154 030000EA B ??CreateEditChat_10 6696 } 6697 else 6698 { 6699 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_9: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 283197E5 LDR R3,[R7, #+296] \ 00000164 2020A0E3 MOV R2,#+32 \ ??CreateEditChat_10: \ 00000168 0110A0E3 MOV R1,#+1 \ 0000016C 24008DE2 ADD R0,SP,#+36 \ 00000170 650100EF SWI +357 \ 00000174 04D08DE2 ADD SP,SP,#+4 6700 } 6701 PrepareEditCOptions(&ec_options); \ 00000178 0D00A0E1 MOV R0,SP \ 0000017C C80100EF SWI +456 6702 SetPenColorToEditCOptions(&ec_options,color); \ 00000180 0B10A0E1 MOV R1,R11 \ 00000184 0D00A0E1 MOV R0,SP \ 00000188 CC0100EF SWI +460 6703 SetFontToEditCOptions(&ec_options,font); \ 0000018C 0A10A0E1 MOV R1,R10 \ 00000190 0D00A0E1 MOV R0,SP \ 00000194 CA0100EF SWI +458 6704 CopyOptionsToEditControl(&ec,&ec_options); \ 00000198 0D10A0E1 MOV R1,SP \ 0000019C 20008DE2 ADD R0,SP,#+32 \ 000001A0 CE0100EF SWI +462 6705 AddEditControlToEditQend(eq,&ec,ma); \ 000001A4 0520A0E1 MOV R2,R5 \ 000001A8 20108DE2 ADD R1,SP,#+32 \ 000001AC 0800A0E1 MOV R0,R8 \ 000001B0 660100EF SWI +358 6706 if ((lp->type&0x0F)!=3) \ 000001B4 0C0099E5 LDR R0,[R9, #+12] \ 000001B8 0F1000E2 AND R1,R0,#0xF \ 000001BC 030051E3 CMP R1,#+3 \ 000001C0 0300000A BEQ ??CreateEditChat_11 6707 { 6708 ParseAnswer(ews,lp->text); \ 000001C4 280197E5 LDR R0,[R7, #+296] \ 000001C8 601089E2 ADD R1,R9,#+96 \ 000001CC ........ BL ParseAnswer \ 000001D0 050000EA B ??CreateEditChat_12 6709 } 6710 else 6711 { 6712 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_11: \ 000001D4 100010E3 TST R0,#0x10 \ 000001D8 10209D15 LDRNE R2,[SP, #+16] \ 000001DC 280197E5 LDR R0,[R7, #+296] \ 000001E0 14209D05 LDREQ R2,[SP, #+20] \ 000001E4 601089E2 ADD R1,R9,#+96 \ 000001E8 ........ BL ParseXStatusText 6713 } 6714 PrepareEditControl(&ec); \ ??CreateEditChat_12: \ 000001EC 20008DE2 ADD R0,SP,#+32 \ 000001F0 640100EF SWI +356 6715 ConstructEditControl(&ec, 6716 ECT_NORMAL_TEXT, 6717 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 6718 ews,ews->wsbody[0]); \ 000001F4 283197E5 LDR R3,[R7, #+296] \ 000001F8 000093E5 LDR R0,[R3, #+0] \ 000001FC B010D0E1 LDRH R1,[R0, #+0] \ 00000200 000051E3 CMP R1,#+0 \ 00000204 0100A0E1 MOV R0,R1 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 812DA013 MOVNE R2,#+8256 \ 00000210 2020A003 MOVEQ R2,#+32 \ 00000214 0310A0E3 MOV R1,#+3 \ 00000218 24008DE2 ADD R0,SP,#+36 \ 0000021C 650100EF SWI +357 6719 PrepareEditCOptions(&ec_options); \ 00000220 04008DE2 ADD R0,SP,#+4 \ 00000224 C80100EF SWI +456 6720 //#ifdef M75 6721 if ((lp->type&0x0F)!=3) \ 00000228 0C0099E5 LDR R0,[R9, #+12] \ 0000022C 04D08DE2 ADD SP,SP,#+4 \ 00000230 0F1000E2 AND R1,R0,#0xF \ 00000234 030051E3 CMP R1,#+3 \ 00000238 0400000A BEQ ??CreateEditChat_13 6722 { 6723 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 0000023C 100010E3 TST R0,#0x10 \ 00000240 ........ LDRNE R0,??DataTable234 ;; O_ED_FONT_SIZE \ 00000244 ........ LDREQ R0,??DataTable236 ;; ED_FONT_SIZE \ 00000248 001090E5 LDR R1,[R0, #+0] \ 0000024C 080000EA B ??CreateEditChat_14 6724 } 6725 else 6726 { 6727 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_13: \ 00000250 100010E3 TST R0,#0x10 \ 00000254 10109D15 LDRNE R1,[SP, #+16] \ 00000258 0D00A0E1 MOV R0,SP \ 0000025C 14109D05 LDREQ R1,[SP, #+20] \ 00000260 CC0100EF SWI +460 6728 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000264 0C0099E5 LDR R0,[R9, #+12] \ 00000268 100010E3 TST R0,#0x10 \ 0000026C 18109D15 LDRNE R1,[SP, #+24] \ 00000270 1C109D05 LDREQ R1,[SP, #+28] \ ??CreateEditChat_14: \ 00000274 0D00A0E1 MOV R0,SP \ 00000278 CA0100EF SWI +458 6729 } 6730 //#else 6731 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 6732 //#endif 6733 CopyOptionsToEditControl(&ec,&ec_options); \ 0000027C 0D10A0E1 MOV R1,SP \ 00000280 20008DE2 ADD R0,SP,#+32 \ 00000284 CE0100EF SWI +462 6734 AddEditControlToEditQend(eq,&ec,ma); \ 00000288 0520A0E1 MOV R2,R5 \ 0000028C 20108DE2 ADD R1,SP,#+32 \ 00000290 0800A0E1 MOV R0,R8 \ 00000294 660100EF SWI +358 6735 lp=lp->next; \ 00000298 009099E5 LDR R9,[R9, #+0] 6736 } \ 0000029C 000059E3 CMP R9,#+0 \ 000002A0 69FFFF1A BNE ??CreateEditChat_2 6737 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 000002A4 640094E5 LDR R0,[R4, #+100] 6738 total_unread2=total_unread2-t->unread_msg; 6739 t->unread_msg=0; \ 000002A8 0090A0E3 MOV R9,#+0 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 B0019715 LDRNE R0,[R7, #+432] \ 000002B4 01004012 SUBNE R0,R0,#+1 \ 000002B8 B0018715 STRNE R0,[R7, #+432] \ 000002BC 140197E5 LDR R0,[R7, #+276] \ 000002C0 681094E5 LDR R1,[R4, #+104] \ 000002C4 010040E0 SUB R0,R0,R1 \ 000002C8 140187E5 STR R0,[R7, #+276] \ 000002CC 689084E5 STR R9,[R4, #+104] 6740 t->isunread=0; \ 000002D0 649084E5 STR R9,[R4, #+100] 6741 ChangeContactPos(t); \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 6742 wsprintf(ews, "-------"); \ 000002DC 280197E5 LDR R0,[R7, #+296] \ 000002E0 4C1086E2 ADD R1,R6,#+76 \ 000002E4 240100EF SWI +292 6743 PrepareEditControl(&ec); \ 000002E8 20008DE2 ADD R0,SP,#+32 \ 000002EC 640100EF SWI +356 6744 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002F0 283197E5 LDR R3,[R7, #+296] \ 000002F4 4020A0E3 MOV R2,#+64 \ 000002F8 000093E5 LDR R0,[R3, #+0] \ 000002FC 0110A0E3 MOV R1,#+1 \ 00000300 B000D0E1 LDRH R0,[R0, #+0] \ 00000304 01002DE9 PUSH {R0} \ 00000308 24008DE2 ADD R0,SP,#+36 \ 0000030C 650100EF SWI +357 6745 PrepareEditCOptions(&ec_options); \ 00000310 04008DE2 ADD R0,SP,#+4 \ 00000314 C80100EF SWI +456 6746 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000318 ........ LDR R0,??DataTable236 ;; ED_FONT_SIZE \ 0000031C 00A090E5 LDR R10,[R0, #+0] \ 00000320 04008DE2 ADD R0,SP,#+4 \ 00000324 0A10A0E1 MOV R1,R10 \ 00000328 CA0100EF SWI +458 6747 CopyOptionsToEditControl(&ec,&ec_options); \ 0000032C 04108DE2 ADD R1,SP,#+4 \ 00000330 24008DE2 ADD R0,SP,#+36 \ 00000334 CE0100EF SWI +462 6748 AddEditControlToEditQend(eq,&ec,ma); \ 00000338 0520A0E1 MOV R2,R5 \ 0000033C 24108DE2 ADD R1,SP,#+36 \ 00000340 0800A0E1 MOV R0,R8 \ 00000344 660100EF SWI +358 6749 6750 if (t->answer) ParseAnswer(ews,t->answer); \ 00000348 781094E5 LDR R1,[R4, #+120] \ 0000034C 04D08DE2 ADD SP,SP,#+4 \ 00000350 000051E3 CMP R1,#+0 \ 00000354 0200000A BEQ ??CreateEditChat_15 \ 00000358 280197E5 LDR R0,[R7, #+296] \ 0000035C ........ BL ParseAnswer \ 00000360 020000EA B ??CreateEditChat_16 6751 else CutWSTR(ews,0); \ ??CreateEditChat_15: \ 00000364 280197E5 LDR R0,[R7, #+296] \ 00000368 0010A0E3 MOV R1,#+0 \ 0000036C 260100EF SWI +294 6752 PrepareEditControl(&ec); \ ??CreateEditChat_16: \ 00000370 20008DE2 ADD R0,SP,#+32 \ 00000374 640100EF SWI +356 6753 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); \ 00000378 1C019FE5 LDR R0,??CreateEditChat_0+0x4 ;; FIRST_LETTER \ 0000037C 0310A0E3 MOV R1,#+3 \ 00000380 000090E5 LDR R0,[R0, #+0] \ 00000384 000050E3 CMP R0,#+0 \ 00000388 400EA0E3 MOV R0,#+1024 \ 0000038C 01002DE9 PUSH {R0} \ 00000390 283197E5 LDR R3,[R7, #+296] \ 00000394 402DA013 MOVNE R2,#+4096 \ 00000398 0020A003 MOVEQ R2,#+0 \ 0000039C 24008DE2 ADD R0,SP,#+36 \ 000003A0 650100EF SWI +357 6754 6755 PrepareEditCOptions(&ec_options); \ 000003A4 04008DE2 ADD R0,SP,#+4 \ 000003A8 C80100EF SWI +456 6756 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000003AC 0A10A0E1 MOV R1,R10 \ 000003B0 04008DE2 ADD R0,SP,#+4 \ 000003B4 CA0100EF SWI +458 6757 CopyOptionsToEditControl(&ec,&ec_options); \ 000003B8 04108DE2 ADD R1,SP,#+4 \ 000003BC 24008DE2 ADD R0,SP,#+36 \ 000003C0 CE0100EF SWI +462 6758 edchat_toitem=AddEditControlToEditQend(eq,&ec,ma); \ 000003C4 0520A0E1 MOV R2,R5 \ 000003C8 24108DE2 ADD R1,SP,#+36 \ 000003CC 0800A0E1 MOV R0,R8 \ 000003D0 660100EF SWI +358 \ 000003D4 00A0A0E1 MOV R10,R0 6759 6760 if (t->req_xtext) \ 000003D8 900094E5 LDR R0,[R4, #+144] \ 000003DC 04D08DE2 ADD SP,SP,#+4 \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 0400000A BEQ ??CreateEditChat_17 6761 { 6762 FreeXText(t); \ 000003E8 0400A0E1 MOV R0,R4 \ 000003EC ........ _BLF FreeXText,??FreeXText??rA 6763 t->req_xtext=0; \ 000003F0 909084E5 STR R9,[R4, #+144] 6764 RequestXText(t->uin); \ 000003F4 0C0094E5 LDR R0,[R4, #+12] \ 000003F8 ........ BL RequestXText 6765 } 6766 6767 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_17: \ 000003FC 1400A0E3 MOV R0,#+20 \ 00000400 140000EF SWI +20 \ 00000404 0050A0E1 MOV R5,R0 6768 ed_struct->ed_contact=t; \ 00000408 004085E5 STR R4,[R5, #+0] 6769 ed_struct->ed_answer=edchat_toitem; \ 0000040C 08A085E5 STR R10,[R5, #+8] 6770 ed_struct->requested_decrement_total_unread=0; \ 00000410 0C9085E5 STR R9,[R5, #+12] 6771 t->req_add=0; \ 00000414 6C9084E5 STR R9,[R4, #+108] 6772 t->last_log=NULL; \ 00000418 7C9084E5 STR R9,[R4, #+124] 6773 6774 // int scr_w=ScreenW(); 6775 // int scr_h=ScreenH(); 6776 // int head_h=HeaderH(); 6777 6778 patch_header(&edchat_hdr); \ 0000041C B893C6E1 STRH R9,[R6, #+56] \ 00000420 1800A0E3 MOV R0,#+24 \ 00000424 BA03C6E1 STRH R0,[R6, #+58] \ 00000428 888100EF SWI +33160 \ 0000042C 010040E2 SUB R0,R0,#+1 \ 00000430 BC03C6E1 STRH R0,[R6, #+60] \ 00000434 8A8100EF SWI +33162 \ 00000438 170080E2 ADD R0,R0,#+23 \ 0000043C BE03C6E1 STRH R0,[R6, #+62] 6779 patch_input(&edchat_desc); \ 00000440 B891C6E1 STRH R9,[R6, #+24] \ 00000444 8A8100EF SWI +33162 \ 00000448 190080E2 ADD R0,R0,#+25 \ 0000044C BA01C6E1 STRH R0,[R6, #+26] \ 00000450 888100EF SWI +33160 \ 00000454 010040E2 SUB R0,R0,#+1 \ 00000458 BC01C6E1 STRH R0,[R6, #+28] \ 0000045C 898100EF SWI +33161 \ 00000460 0040A0E1 MOV R4,R0 \ 00000464 8B8100EF SWI +33163 \ 00000468 000044E0 SUB R0,R4,R0 \ 0000046C 010040E2 SUB R0,R0,#+1 \ 00000470 BE01C6E1 STRH R0,[R6, #+30] 6780 // edchat_desc.font=ED_FONT_SIZE; 6781 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000474 20002DE9 PUSH {R5} \ 00000478 0130A0E3 MOV R3,#+1 \ 0000047C 0820A0E1 MOV R2,R8 \ 00000480 381086E2 ADD R1,R6,#+56 \ 00000484 0600A0E1 MOV R0,R6 \ 00000488 670100EF SWI +359 \ 0000048C C00187E5 STR R0,[R7, #+448] 6782 } \ 00000490 50D08DE2 ADD SP,SP,#+80 \ 00000494 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000498 ........ DC32 edchat_desc \ 0000049C ........ DC32 FIRST_LETTER 6783 6784 //----------------------------------------------------------------------------- 6785 #define EC_MNU_MAX 8 6786 \ In segment CODE, align 4, keep-with-next 6787 void Quote(GUI *data) 6788 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 6789 int q_n; 6790 EDITCONTROL ec, ec_hdr; 6791 EDITCONTROL ec_ed; 6792 WSHDR *ed_ws; 6793 WSHDR *ws; 6794 6795 EDCHAT_STRUCT *ed_struct; 6796 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 6797 6798 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 6799 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 6800 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 6801 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 6802 6803 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 6804 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 6805 { 6806 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 6807 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 6808 } 6809 else 6810 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 6811 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 6812 { 6813 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 6814 } 6815 else 6816 { 6817 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 6818 } 6819 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 6820 do 6821 { 6822 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 6823 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 6824 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 6825 } 6826 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 6827 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 6828 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 6829 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 6830 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 6831 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 6832 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 6833 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 6834 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 6835 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 6836 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 6837 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 6838 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 6839 6840 \ In segment CODE, align 4, keep-with-next 6841 void GetShortInfo(GUI *data) 6842 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 6843 EDCHAT_STRUCT *ed_struct; 6844 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 6845 6846 TPKT *p; 6847 CLIST *t; 6848 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 2200000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable245 ;; S_ICONS + 396 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1E00001A BNE ??GetShortInfo_0 6849 { 6850 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 6851 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 6852 p->pkt.type=T_REQINFOSHORT; 6853 p->pkt.data_len=0; 6854 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,??DataTable244 ;; `?ed_chatgui); \ 0000007C 040094E5 LDR R0,[R4, #+4] \ 00000080 ........ BL AddMsgToChat 6856 RecountMenu(t,1); \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C ........ BL RecountMenu 6857 SUBPROC((void *)SendAnswer,0,p); \ 00000090 ........ LDR R0,??DataTable246 ;; SendAnswer \ 00000094 0620A0E1 MOV R2,R6 \ 00000098 0010A0E3 MOV R1,#+0 \ 0000009C 710100EF SWI +369 \ 000000A0 08D08DE2 ADD SP,SP,#+8 6858 } 6859 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 000000A4 0100A0E3 MOV R0,#+1 \ 000000A8 3B0100EF SWI +315 6860 } \ 000000AC 7080BDE8 POP {R4-R6,PC} ;; return 6861 6862 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 6863 void AddCurContact(GUI *data) 6864 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 6865 EDCHAT_STRUCT *ed_struct; 6866 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 6867 6868 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,??DataTable245 ;; S_ICONS + 396 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 6869 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 6870 } \ 00000030 0080BDE8 POP {PC} ;; return 6871 \ In segment CODE, align 4, keep-with-next 6872 void SendAuthReq(GUI *data) 6873 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 6874 EDCHAT_STRUCT *ed_struct; 6875 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 6876 6877 TPKT *p; 6878 CLIST *t; 6879 int l; 6880 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,??DataTable245 ;; S_ICONS + 396 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 6882 { 6883 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 6884 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 6885 p->pkt.type=T_AUTHREQ; 6886 p->pkt.data_len=l; 6887 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 6888 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable242 ;; `?ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 6890 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 6891 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable246 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 6892 } 6893 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 6894 } \ 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,??DataTable245 ;; S_ICONS + 396 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_0 6906 { 6907 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 6908 p->pkt.uin=t->uin; \ 00000054 0C0096E5 LDR R0,[R6, #+12] 6909 p->pkt.type=T_AUTHGRANT; 6910 p->pkt.data_len=l; 6911 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 6912 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 1F3085E2 ADD R3,R5,#+31 \ 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 6913 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 6914 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0600A0E1 MOV R0,R6 \ 000000A8 ........ BL RecountMenu 6915 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable246 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 6916 } 6917 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 6918 } \ 000000C8 FF81BDE8 POP {R0-R8,PC} ;; return 6919 \ In segment CODE, align 4, keep-with-next 6920 void OpenLogfile(GUI *data) 6921 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6922 EDCHAT_STRUCT *ed_struct; 6923 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 6924 6925 CLIST *t; 6926 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0050A0E1 MOV R5,R0 6927 if ((t=ed_struct->ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1800000A BEQ ??OpenLogfile_0 6928 { 6929 #ifdef EVILFOX 6930 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 6931 #else 6932 #ifdef UIN_WRITE 6933 if (HISTORY_TYPE) \ 00000024 70409FE5 LDR R4,??OpenLogfile_1 ;; HISTORY_TYPE \ 00000028 0C3090E5 LDR R3,[R0, #+12] \ 0000002C 004094E5 LDR R4,[R4, #+0] \ 00000030 68109FE5 LDR R1,??OpenLogfile_1+0x4 ;; `?` \ 00000034 68209FE5 LDR R2,??OpenLogfile_1+0x8 ;; HIST_PATH \ 00000038 08002DE9 PUSH {R3} \ 0000003C 000054E3 CMP R4,#+0 \ 00000040 0700000A BEQ ??OpenLogfile_2 6934 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); \ 00000044 140080E2 ADD R0,R0,#+20 \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable247 ;; UIN \ 00000050 003090E5 LDR R3,[R0, #+0] \ 00000054 0500A0E1 MOV R0,R5 \ 00000058 240100EF SWI +292 \ 0000005C 08D08DE2 ADD SP,SP,#+8 \ 00000060 040000EA B ??OpenLogfile_3 6935 else 6936 wsprintf(ws,"%s\\%s(%d).txt",HIST_PATH,t->name, t->uin); \ ??OpenLogfile_2: \ 00000064 143080E2 ADD R3,R0,#+20 \ 00000068 141081E2 ADD R1,R1,#+20 \ 0000006C 0500A0E1 MOV R0,R5 \ 00000070 240100EF SWI +292 \ 00000074 04D08DE2 ADD SP,SP,#+4 6937 #else 6938 if (HISTORY_TYPE) 6939 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); 6940 else 6941 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); 6942 #endif 6943 #endif 6944 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 00000078 0020A0E3 MOV R2,#+0 \ 0000007C 0010A0E3 MOV R1,#+0 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 940000EF SWI +148 6945 } 6946 FreeWS(ws); \ ??OpenLogfile_0: \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 290100EF SWI +297 6947 GeneralFuncF1(1); \ 00000090 0100A0E3 MOV R0,#+1 \ 00000094 3B0100EF SWI +315 6948 } \ 00000098 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 0000009C ........ DC32 HISTORY_TYPE \ 000000A0 ........ DC32 `?` \ 000000A4 ........ DC32 HIST_PATH 6949 \ In segment CODE, align 4, keep-with-next 6950 void ClearLog(GUI *data/*,void *dummy*/) 6951 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 6952 EDITCONTROL ec; 6953 EDCHAT_STRUCT *ed_struct; 6954 WSHDR *ws; 6955 CLIST *t; 6956 6957 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 6958 6959 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 6960 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 6961 { 6962 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 6963 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 6964 6965 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 6966 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 6967 6968 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 6969 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 6970 } 6971 else 6972 { 6973 6974 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 6975 { 6976 if (t->log) \ 00000074 740095E5 LDR R0,[R5, #+116] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 6977 { 6978 FreeLOGQ(&t->log); \ 00000084 740085E2 ADD R0,R5,#+116 \ 00000088 ........ BL FreeLOGQ 6979 t->msg_count=0; \ 0000008C 846085E5 STR R6,[R5, #+132] 6980 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 6981 { 6982 while(ed_struct->ed_answer!=2) 6983 { 6984 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 6985 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 6986 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 6987 } 6988 } 6989 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 806085E5 STR R6,[R5, #+128] 6990 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 6991 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 6992 } 6993 } 6994 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 6995 \ In segment CODE, align 4, keep-with-next 6996 void ecmenu_ghook(void *data, int cmd) 6997 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 6998 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 6999 { 7000 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 7001 } 7002 } \ 00000010 0080BDE8 POP {PC} ;; return 7003 \ In segment DATA_C, align 4, align-sorted 7004 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ MAINCSM: \ 00000074 DS8 72 \ 000000BC REQUIRE `?` \ gipc: \ 000000BC DS8 12 \ 000000C8 REQUIRE `?` \ game_gipc: \ 000000C8 DS8 12 \ 000000D4 REQUIRE `?` \ tmr_gipc: \ 000000D4 DS8 12 \ 000000E0 REQUIRE `?` \ spaco2: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ main_d: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ align: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ canvasdata: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ paused_height: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ uins: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ saver_on: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ Is_PING_On: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ Is_SLI_On: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ Is_SMARTCPU_On: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ Is_INC_On: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ Is_ILU_On: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ Is_Double_Vibra_On: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ total_unread2: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ maincsm_id: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ maingui_id: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ SENDMSGCOUNT: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ Is_Id3tag_Enabled: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ ews: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ msg_away_timer: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ inp_away_msg2: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ away_m: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ status_rem: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ change_back_status: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ Show_XTX: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ Is_UPTIME_On: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ xstatus_old: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ minimum_xstatus: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ maximum: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ tracktimer: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ input_awaymsg_id: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ silenthide: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ disautorecconect: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ Is_Show_Offline: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ Is_Show_Groups: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ CurrentStatus: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ CurrentPrivateStatus: \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ vibra_count: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ templates_chars: \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ templates_lines: \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ RXstate: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ connect_state: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ sock: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ TOTALRECEIVED: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ TOTALSENDED: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ ALLTOTALRECEIVED: \ 0000019C DS8 4 \ 000001A0 REQUIRE `?` \ ALLTOTALSENDED: \ 000001A0 DS8 4 \ 000001A4 REQUIRE `?` \ sendq_l: \ 000001A4 DS8 4 \ 000001A8 REQUIRE `?` \ sendq_p: \ 000001A8 DS8 4 \ 000001AC REQUIRE `?` \ is_gprs_online: \ 000001AC DS8 4 \ 000001B0 REQUIRE `?` \ total_unread: \ 000001B0 DS8 4 \ 000001B4 REQUIRE `?` \ cltop: \ 000001B4 DS8 4 \ 000001B8 REQUIRE `?` \ GROUP_CACHE: \ 000001B8 DS8 4 \ 000001BC REQUIRE `?` \ contactlist_menu_id: \ 000001BC DS8 4 \ 000001C0 REQUIRE `?` \ edchat_id: \ 000001C0 DS8 4 \ 000001C4 REQUIRE `?` \ 000001C4 DS8 4 \ 000001C8 REQUIRE `?` \ tenseconds_to_ping: \ 000001C8 DS8 4 \ 000001CC REQUIRE `?` \ kopa_online: \ 000001CC DS8 4 \ 000001D0 REQUIRE `?` \ kopa_kontaktu: \ 000001D0 DS8 4 \ 000001D4 REQUIRE `?` \ DNR_ID: \ 000001D4 DS8 4 \ 000001D8 REQUIRE `?` \ DNR_TRIES: \ 000001D8 DS8 4 \ 000001DC REQUIRE `?` \ host_counter: \ 000001DC DS8 4 \ 000001E0 REQUIRE `?` \ ping_time: \ 000001E0 DS8 4 \ 000001E4 REQUIRE `?` \ NEW_MSG: \ 000001E4 DS8 4 \ 000001E8 REQUIRE `?` \ time_to_stop_t9: \ 000001E8 DS8 4 \ 000001EC REQUIRE `?` \ comanda: \ 000001EC DS8 4 \ 000001F0 REQUIRE `?` \ INC_show: \ 000001F0 DS8 4 \ 000001F4 REQUIRE `?` \ font: \ 000001F4 DS8 4 \ 000001F8 REQUIRE `?` \ old_ed_redraw: \ 000001F8 DS8 4 \ 000001FC REQUIRE `?` \ 000001FC DS8 64 \ 0000023C REQUIRE `?` \ elf_path: \ 0000023C DS8 256 \ 0000033C REQUIRE `?` \ ContactT9Key: \ 0000033C DS8 32 \ 0000035C REQUIRE `?` \ talk_sound: \ 0000035C DS8 128 \ 000003DC REQUIRE `?` \ unread_msg_info: \ 000003DC DS8 64 \ 0000041C REQUIRE `?` \ last_msg_buffer: \ 0000041C DS8 4048 \ 000013EC REQUIRE `?` \ mytmr3: \ 000013EC DS8 16 \ 000013FC REQUIRE `?` \ PINGO: \ 000013FC DS8 256 \ 000014FC REQUIRE `?` \ away_msg: \ 000014FC DS8 264 \ 00001604 REQUIRE `?` \ away_msg_time: \ 00001604 DS8 64 \ 00001644 REQUIRE `?` \ away_msg_time_dace: \ 00001644 DS8 16 \ 00001654 REQUIRE `?` \ tim_zone: \ 00001654 DS8 16 \ 00001664 REQUIRE `?` \ away_tmr: \ 00001664 DS8 16 \ 00001674 REQUIRE `?` \ mytmr: \ 00001674 DS8 16 \ 00001684 REQUIRE `?` \ mytmr2: \ 00001684 DS8 16 \ 00001694 REQUIRE `?` \ mytmr4: \ 00001694 DS8 16 \ 000016A4 REQUIRE `?` \ tracktmr: \ 000016A4 DS8 16 \ 000016B4 REQUIRE `?` \ onlineTime: \ 000016B4 DS8 128 \ 00001734 REQUIRE `?` \ logmsg: \ 00001734 DS8 256 \ 00001834 REQUIRE `?` \ tmr_illumination: \ 00001834 DS8 16 \ 00001844 REQUIRE `?` \ tmr_vibra: \ 00001844 DS8 16 \ 00001854 REQUIRE `?` \ reconnect_tmr: \ 00001854 DS8 16 \ 00001864 REQUIRE `?` \ tmr_active: \ 00001864 DS8 16 \ 00001874 REQUIRE `?` \ clm_hdr_text: \ 00001874 DS8 48 \ 000018A4 REQUIRE `?` \ clmenu_sk_r: \ 000018A4 DS8 16 \ 000018B4 REQUIRE `?` \ statusTmr: \ 000018B4 DS8 16 \ 000018C4 REQUIRE `?` \ status: \ 000018C4 DS8 64 \ 00001904 REQUIRE `?` \ hostbuf2: \ 00001904 DS8 128 \ 00001984 REQUIRE `?` \ hostname: \ 00001984 DS8 128 \ 00001A04 REQUIRE `?` \ I_UIN: \ 00001A04 DS8 12 \ 00001A10 REQUIRE `?` \ a_txt: \ 00001A10 DS8 48 \ 00001A40 REQUIRE `?` \ s_txt: \ 00001A40 DS8 48 \ 00001A70 REQUIRE `?` \ d_txt: \ 00001A70 DS8 48 \ 00001AA0 REQUIRE `?` \ f_txt: \ 00001AA0 DS8 48 \ 00001AD0 REQUIRE `?` \ g_txt: \ 00001AD0 DS8 48 \ 00001B00 REQUIRE `?` \ develop: \ 00001B00 DS8 16 \ 00001B10 REQUIRE `?` \ requests1: \ 00001B10 DS8 24 \ 00001B28 REQUIRE `?` \ requests2: \ 00001B28 DS8 20 \ 00001B3C REQUIRE `?` \ requests3: \ 00001B3C DS8 24 \ 00001B54 REQUIRE `?` \ requests4: \ 00001B54 DS8 20 \ 00001B68 REQUIRE `?` \ requests6: \ 00001B68 DS8 24 \ 00001B80 REQUIRE `?` \ mod_info: \ 00001B80 DS8 264 \ 00001C88 REQUIRE `?` \ show_nick: \ 00001C88 DS8 32 \ 00001CA8 REQUIRE `?` 7018 { 7019 Quote, 7020 AddSmile, 7021 GetShortInfo, 7022 AddCurContact, 7023 SendAuthReq, 7024 SendAuthGrant, 7025 OpenLogfile, 7026 ClearLog, 7027 }; 7028 7029 char ecm_contactname[64]; \ ecm_contactname: \ 00001CA8 DS8 64 \ 00001CE8 REQUIRE `?` \ In segment DATA_I, align 1, align-sorted \ per_s: \ 00000000 DS8 3 \ 00000003 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 `?` 7030 \ In segment DATA_C, align 4, align-sorted 7031 static const HEADER_DESC ecmenu_HDR={0,0,NULL,NULL,NULL,(int)ecm_contactname,LGP_NULL}; \ ecmenu_HDR: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, ecm_contactname, 2147483647 \ ....FFFFFF7F \ 00000014 080000000000 DC32 8, 0H, ecmenu_ghook, 0H, menusoftkeys, menu_skt, 0, 0H \ 0000........ \ 00000000.... \ ............ \ 000000000000 \ 0000 \ 00000034 ............ DC32 ecmenu_ITEMS, ecmenu_HNDLS, 8 \ ....08000000 7032 7033 static const MENU_DESC ecmenu_STRUCT= 7034 { 7035 8,NULL,ecmenu_ghook,NULL, 7036 menusoftkeys, 7037 &menu_skt, 7038 0, 7039 NULL, 7040 ecmenu_ITEMS, 7041 ecmenu_HNDLS, 7042 EC_MNU_MAX 7043 }; 7044 \ In segment CODE, align 4, keep-with-next 7045 void ec_menu(EDCHAT_STRUCT *ed_struct) 7046 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 \ 00000008 0040A0E1 MOV R4,R0 7047 CLIST *t; 7048 int to_remove[EC_MNU_MAX+1]; 7049 int remove=0; 7050 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4500000A BEQ ??ec_menu_0 7051 { 7052 if (t->name) \ 00000018 ........ LDR R5,??DataTable248 ;; S_ICONS \ 0000001C A800A0E3 MOV R0,#+168 \ 00000020 700D80E3 ORR R0,R0,#0x1C00 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 7053 { 7054 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 7055 } 7056 else 7057 { 7058 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 3B1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 7059 } 7060 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 0160A0E3 MOV R6,#+1 \ 00000054 820100EF SWI +386 \ 00000058 082094E5 LDR R2,[R4, #+8] \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 020050E1 CMP R0,R2 7061 { 7062 to_remove[++remove]=0; \ 00000064 04108D05 STREQ R1,[SP, #+4] 7063 } 7064 else 7065 { 7066 to_remove[++remove]=1; \ 00000068 0120A013 MOVNE R2,#+1 \ 0000006C 04208D15 STRNE R2,[SP, #+4] 7067 } 7068 7069 if (ed_struct->ed_answer<=2) to_remove[++remove]=7; \ 00000070 080094E5 LDR R0,[R4, #+8] \ 00000074 030050E3 CMP R0,#+3 \ 00000078 0720A0B3 MOVLT R2,#+7 \ 0000007C 08208DB5 STRLT R2,[SP, #+8] 7070 if (!ed_struct->ed_contact || connect_state!=3) \ 00000080 000094E5 LDR R0,[R4, #+0] \ 00000084 0260A0B3 MOVLT R6,#+2 \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0200000A BEQ ??ec_menu_4 \ 00000090 8C0195E5 LDR R0,[R5, #+396] \ 00000094 030050E3 CMP R0,#+3 \ 00000098 0D00000A BEQ ??ec_menu_5 7071 { 7072 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000009C 010086E2 ADD R0,R6,#+1 \ 000000A0 0D20A0E1 MOV R2,SP \ 000000A4 0230A0E3 MOV R3,#+2 \ 000000A8 003182E7 STR R3,[R2, +R0, LSL #+2] 7073 to_remove[++remove]=3; \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 0330A0E3 MOV R3,#+3 \ 000000B4 003182E7 STR R3,[R2, +R0, LSL #+2] 7074 to_remove[++remove]=4; \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC 0430A0E3 MOV R3,#+4 \ 000000C0 003182E7 STR R3,[R2, +R0, LSL #+2] 7075 to_remove[++remove]=5; \ 000000C4 016080E2 ADD R6,R0,#+1 \ 000000C8 0D00A0E1 MOV R0,SP \ 000000CC 0520A0E3 MOV R2,#+5 \ 000000D0 062180E7 STR R2,[R0, +R6, LSL #+2] 7076 } 7077 7078 patch_header(&ecmenu_HDR); \ ??ec_menu_5: \ 000000D4 60509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 000000D8 1800A0E3 MOV R0,#+24 \ 000000DC B010C5E1 STRH R1,[R5, #+0] \ 000000E0 B200C5E1 STRH R0,[R5, #+2] \ 000000E4 888100EF SWI +33160 \ 000000E8 010040E2 SUB R0,R0,#+1 \ 000000EC B400C5E1 STRH R0,[R5, #+4] \ 000000F0 8A8100EF SWI +33162 \ 000000F4 170080E2 ADD R0,R0,#+23 \ 000000F8 B600C5E1 STRH R0,[R5, #+6] 7079 to_remove[0]=remove; \ 000000FC 00608DE5 STR R6,[SP, #+0] 7080 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 00000100 0D00A0E1 MOV R0,SP \ 00000104 01002DE9 PUSH {R0} \ 00000108 10002DE9 PUSH {R4} \ 0000010C 0530A0E1 MOV R3,R5 \ 00000110 0800A0E3 MOV R0,#+8 \ 00000114 01002DE9 PUSH {R0} \ 00000118 142085E2 ADD R2,R5,#+20 \ 0000011C 0010A0E3 MOV R1,#+0 \ 00000120 0000A0E3 MOV R0,#+0 \ 00000124 01002DE9 PUSH {R0} \ 00000128 520100EF SWI +338 \ 0000012C 10D08DE2 ADD SP,SP,#+16 7081 } 7082 } \ ??ec_menu_0: \ 00000130 24D08DE2 ADD SP,SP,#+36 ;; stack cleaning \ 00000134 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000138 25750000 DC8 "%u",+0 \ 0000013C ........ DC32 ecmenu_HDR 7083 7084 \ In segment CODE, align 4, keep-with-next 7085 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 7086 { 7087 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 7088 } 7089 \ In segment CODE, align 4, keep-with-next 7090 void AddSmile(GUI *data) 7091 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 7092 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7093 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 7094 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 7095 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable2: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable3: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable5: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable14: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable21: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable23: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable32: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable35: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable44: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable52: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable56: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable57: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 S_ICONS + 436 \ In segment CODE, align 4, keep-with-next \ ??DataTable65: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable210: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable211: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable212: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable217: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable218: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable220: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable223: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable224: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable225: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable226: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable227: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable228: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable229: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable231: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable232: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable233: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable234: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable236: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable242: \ 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 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E8 00000000 DC32 0 \ `?`: \ 000000EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000100 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000104 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000108 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000010C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000110 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000114 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000118 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000011C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000120 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000124 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 00000000 DC32 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 F6FFFFFF DC32 -10 \ `?`: \ 0000018C 00000000 DC32 0 \ `?`: \ 00000190 FFFFFFFF DC32 -1 \ `?`: \ 00000194 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000198 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000019C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A4 00000000 DC32 0 \ `?`: \ 000001A8 00000000 DC32 0H \ `?`: \ 000001AC 01000000 DC32 1 \ `?`: \ 000001B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D4 00000000 DC32 0 \ `?`: \ 000001D8 03000000 DC32 3 \ `?`: \ 000001DC 00000000 DC32 0 \ `?`: \ 000001E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F4 09000000 DC32 9 \ `?`: \ 000001F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000020C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000021C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000022C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000023C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000024C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000025C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000026C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000027C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000028C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000029C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000030C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000031C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000032C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000033C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000034C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000035C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000036C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000037C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000038C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000039C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000040C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000041C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000042C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000043C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000044C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000045C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000046C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000047C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000048C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000049C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000050C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000051C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000052C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000053C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000054C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000055C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000056C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000057C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000058C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000059C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000060C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000061C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000062C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000063C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000064C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000065C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000066C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000067C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000068C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000069C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000070C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000071C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000072C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000073C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000074C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000075C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000076C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000077C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000078C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000079C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000080C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000081C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000082C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000083C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000084C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000085C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000086C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000087C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000088C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000089C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000090C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000091C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000092C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000093C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000094C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000095C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000096C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000097C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000098C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000099C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ABC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ACC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ADC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ECC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000100C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000101C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000102C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000103C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000104C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000105C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000106C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000107C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000108C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000109C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000110C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000111C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000112C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000113C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000114C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000115C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000116C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000117C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000118C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000119C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000120C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000121C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000122C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000123C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000124C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000125C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000126C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000127C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000128C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000129C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000130C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000131C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000132C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000133C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000134C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000135C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000136C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000137C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000138C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000139C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000013EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000013FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000140C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000141C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000142C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000143C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000144C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000145C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000146C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000147C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000148C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000149C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000014FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000150C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000151C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000152C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000153C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000154C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000155C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000156C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000157C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000158C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000159C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001604 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001614 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001624 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001634 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001644 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001654 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001664 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001674 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001684 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001694 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000016A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000016B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001704 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001714 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001724 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001734 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001744 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001754 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001764 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001774 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001784 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001794 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001804 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001814 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001824 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001834 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001844 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001854 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001864 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001874 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001884 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001894 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001904 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001914 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001924 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001934 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001944 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001954 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001964 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001974 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001984 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001994 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00001A10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B10 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00001B27 00 DC8 0 \ `?`: \ 00001B28 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001B3C 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00001B54 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001B68 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 00001B80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001C88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001CA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CD8 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 1, align-sorted \ `?`: \ 00000000 257300 DC8 "%s" \ 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_C, align 4, align-sorted \ `?`: \ 00000000 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEEFF6E8E800 DC8 "\316\357\366\350\350" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ" \ 00 \ 00000007 00 DC8 0 \ 00000008 4E4154494351 DC8 "NATICQMod" \ 4D6F6400 \ 00000012 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2532643A2532 DC8 "%2d:%2d" \ 6400 \ 00000008 2820EEF2F1F3 DC8 "( \356\362\361\363\362\361\362\342\363\376 \357\360\350\354\345\360\355\356 \361 %02d:%02d [%s] )" \ F2F1F2E2F3FE \ 20EFF0E8ECE5 \ F0EDEE20F120 \ 253032643A25 \ 303264205B25 \ 735D202900 \ 00000031 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 00000077 00 DC8 0 \ 00000078 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000083 00 DC8 0 \ 00000084 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 0000008F 00 DC8 0 \ 00000090 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 0000009B 00 DC8 0 \ 0000009C 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 000000A6 0000 DC8 0, 0 \ 000000A8 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 000000EF 00 DC8 0 \ 000000F0 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000107 00 DC8 0 \ 00000108 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 00000113 00 DC8 0 \ 00000114 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000011F 00 DC8 0 \ 00000120 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000014F 00 DC8 0 \ 00000150 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 00000017 00 DC8 0 \ 00000018 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 417761792066 DC8 "Away from [%s]" \ 726F6D205B25 \ 735D00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ 00000008 5C302E747874 DC8 "\\0.txt" \ 00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 5B415D00 DC8 "[A]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B495D00 DC8 "[I]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B565D00 DC8 "[V]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B535D00 DC8 "[S]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B525D00 DC8 "[R]" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 00000017 00 DC8 0 \ 00000018 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 00000029 000000 DC8 0, 0, 0 \ 0000002C 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 0000003C 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 00000048 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 00000056 0000 DC8 0, 0 \ 00000058 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 0000006E 0000 DC8 0, 0 \ 00000070 CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \357\356\344\352\353\376\367\350\362\374\361\377!" \ EEE6EDEE20EF \ EEE4EAEBFEF7 \ E8F2FCF1FF21 \ 00 \ 00000089 000000 DC8 0, 0, 0 \ 0000008C CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \361\356\347\344\340\362\374 \361\356\352\345\362, \357\345\360\345\347\340\357\363\361\352 GPRS!" \ EEE6EDEE20F1 \ EEE7E4E0F2FC \ 20F1EEEAE5F2 \ 2C20EFE5F0E5 \ E7E0EFF3F1EA \ 204750525321 \ 00 \ 000000B7 00 DC8 0 \ 000000B8 D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 000000CA 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 0A00 DC8 "\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73656E642072 DC8 "send res %d" \ 657320256400 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 53656E642065 DC8 "Send error!" \ 72726F722100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F2530 DC8 "Sie_%04d" \ 346400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25733A202573 DC8 "%s: %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d %02d-%02d %s:\015\012" \ 303264202530 \ 32642D253032 \ 642025733A0D \ 0A00 \ 0000001A 0000 DC8 0, 0 \ 0000001C 253032643A25 DC8 "%02d:%02d %02d-%02d %s:" \ 303264202530 \ 32642D253032 \ 642025733A00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4175746F626F DC8 "Autobot Off" \ 74204F666600 \ 0000000C 4175746F626F DC8 "Autobot On" \ 74204F6E00 \ 00000017 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C25755C DC8 "%s\\%u\\%s(%d).txt" \ 257328256429 \ 2E74787400 \ 00000011 000000 DC8 0, 0, 0 \ 00000014 25735C257328 DC8 "%s\\%s(%d).txt" \ 2564292E7478 \ 7400 \ 00000022 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F66666C696E DC8 "offline.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 696E76697369 DC8 "invisible.png" \ 626C652E706E \ 6700 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 617761792E70 DC8 "away.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E612E706E67 DC8 "na.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6363757069 DC8 "occupied.png" \ 65642E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646E642E706E DC8 "dnd.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646570726573 DC8 "depression.png" \ 73696F6E2E70 \ 6E6700 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6576696C2E70 DC8 "evil.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CBE5E200 DC8 "\313\345\342" Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 108 AddSmile 4 AddStringToLog 192 AddToMain 44 AskNickAndAddContact 4 AutobotInit 4 BackSpaceContactT9 8 ChangeSound 4 ChangeVibra 4 CheckComand 328 CheckDoubleRun 8 ClearContactT9Key 4 ClearLog 60 ClearSendQ 8 CreateEditChat 116 DrawAck 80 DrawAutoMSG 80 DrawOnlineTime 20 DrawPing 12 DrawStatusBar 48 ElfKiller 4 ExtractAnswer 36 FindContactLOGQByAck 12 FindNextActiveContact 0 FindPrevActiveContact 0 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 88 IsUrl 44 LastLOGQ 0 LoadTemplates 332 NewLOGQ 12 OpenLogfile 20 ParseAnswer 36 ParseXStatusText 20 Pinger2 16 Play 236 ProcessPacket 376 Quote 152 ReadDefSettings 156 RecountMenu 20 Remind_Timer2 8 Reminder_timer 4 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SLI_Off 4 SLI_On 8 SLI_Timer 4 SLI_check 4 SMART_REDRAW 8 SaveAnswer 12 SendAnswer 28 SendAuthGrant 48 SendAuthReq 48 SendMSGACK 8 SetIconBarHandler 0 UpdateCLheader 60 UpdateCSMname 4 UpdateConfig 12 WriteDefSettings 152 addIconBar 16 ask_my_info 0 atoi 4 away_timer 24 begin_to_develop 4 contactlist_menu_ghook 8 contactlist_menu_iconhndl 668 contactlist_menu_onkey 56 create_connect 312 create_contactlist_menu 24 do_ping 4 do_reconnect 4 ec_menu 68 ecmenu_ghook 4 ed_options_handler 64 edchat_ghook 72 edchat_locret 0 edchat_onkey 348 end_socket 8 free_ICONS 16 get_answer 1096 init_time_zone 4 input_awaymsg_ghook 4 input_awaymsg_locret 0 input_awaymsg_onkey 72 main 64 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 104 method0 96 method1 8 method2 8 method3 8 method4 0 method5 24 method8 0 method9 0 my_ed_redraw 12 my_keyhook 16 process_active_timer 12 recon 8 send_login 36 set_my_status 4 set_my_xstatus 48 set_my_xstatus2 36 setup_ICONS 12 show_pp_sender 68 start_vibra 8 start_vibra2 4 stop_vibra 4 stop_vibra2 4 to_develop 4 wstrstr 32 x_zstatus 20 xstatuse 0 Segment part sizes: Function/Label Bytes -------------- ----- UpdateConfig 72 Pinger2 144 SLI_TYPE 4 SMART_REDRAW 48 timeh 4 timemin 4 FreeXText2 36 away_timer 228 init_time_zone 356 DrawPing 80 Remind_Timer2 68 Reminder_timer 32 xstatuse 64 x_zstatus 156 DrawOnlineTime 148 DrawAutoMSG 140 input_awaymsg_onkey 332 input_awaymsg_ghook 68 input_awaymsg_locret 4 InputAwayMsg 480 SLI_On 60 SLI_Off 72 SLI_check 32 SLI_Timer 36 setup_ICONS 72 free_ICONS 44 IlluminationOff 60 IlluminationOn 120 ReadDefSettings 372 WriteDefSettings 372 Play 304 start_vibra 100 stop_vibra 88 start_vibra2 60 stop_vibra2 88 ChangeVibra 56 ChangeSound 56 FreeTemplates 56 LoadTemplates 396 RXbuf 16392 TXbuf 16392 ElfKiller 32 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 DrawStatusBar 196 UpdateCLheader 640 ClearContactT9Key 24 AddContactT9Key 36 BackSpaceContactT9 36 create_contactlist_menu 108 contactlist_menu_ghook 68 RecountMenu 160 contactlist_menu_onkey 1820 GetOnTotalContact 92 contactlist_menu_iconhndl 660 GetHost 192 atoi 84 GetPort 276 GetHostsCount 120 create_connect 744 ClearSendQ 32 end_socket 40 SendAnswer 388 send_login 148 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1448 AddToMain 564 AddStringToLog 572 ParseXStatusText 152 AddMsgToChat 832 DrawAck 340 ask_my_info 4 set_my_status 72 set_my_xstatus 532 set_my_xstatus2 244 to_develop 96 ReqAddMsgToChat 120 begin_to_develop 52 autobot 4 AutobotInit 76 CheckComand 1656 INC_Nick 32 show_pp_sender 340 Get_Online_total 92 ProcessPacket 2500 process_active_timer 148 method0 900 method1 44 method2 36 method3 24 method4 20 method5 204 method8 8 method9 8 my_keyhook 164 ? 12 maincsm_oncreate 264 maincsm_onclose 288 do_reconnect 40 CheckDoubleRun 120 maincsm_onmessage 2940 addIconBar 300 minus11 4 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 main 436 edchat_locret 4 ExtractAnswer 280 ??FindNextActiveContact_0 64 FindPrevActiveContact 88 ed_options_handler 436 wstrstr 124 IsUrl 424 ParseAnswer 548 SaveAnswer 36 GetTempName 172 DMonth 52 recon 52 edchat_onkey 1412 my_ed_redraw 112 edchat_ghook 560 edchat_desc 84 sk 16 CreateEditChat 1184 Quote 416 GetShortInfo 176 AddCurContact 52 SendAuthReq 212 SendAuthGrant 204 OpenLogfile 168 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 224 ecmenu_HNDLS 32 S_ICONS 7400 per_s 3 IsActiveUp 4 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 ecmenu_HDR 64 ec_menu 320 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable3 4 ??DataTable5 4 ??DataTable11 4 ??DataTable14 4 ??DataTable19 4 ??DataTable20 4 ??DataTable21 4 ??DataTable23 4 ??DataTable27 4 ??DataTable32 4 ??DataTable33 4 ??DataTable34 4 ??DataTable35 4 ??DataTable41 4 ??DataTable44 4 ??DataTable48 4 ??DataTable52 4 ??DataTable56 4 ??DataTable57 4 ??DataTable58 4 ??DataTable59 4 ??DataTable62 4 ??DataTable63 4 ??DataTable64 4 ??DataTable65 4 ??DataTable66 4 ??DataTable67 4 ??DataTable69 4 ??DataTable70 4 ??DataTable76 4 ??DataTable77 4 ??DataTable79 4 ??DataTable80 4 ??DataTable81 4 ??DataTable82 4 ??DataTable83 4 ??DataTable86 4 ??DataTable88 4 ??DataTable89 4 ??DataTable90 4 ??DataTable98 4 ??DataTable99 4 ??DataTable101 4 ??DataTable102 4 ??DataTable103 4 ??DataTable104 4 ??DataTable105 4 ??DataTable106 4 ??DataTable107 4 ??DataTable108 4 ??DataTable112 4 ??DataTable116 4 ??DataTable118 4 ??DataTable119 4 ??DataTable120 4 ??DataTable121 4 ??DataTable122 4 ??DataTable123 4 ??DataTable125 4 ??DataTable128 4 ??DataTable129 4 ??DataTable130 4 ??DataTable131 4 ??DataTable132 4 ??DataTable133 4 ??DataTable134 4 ??DataTable138 4 ??DataTable139 4 ??DataTable140 4 ??DataTable141 4 ??DataTable145 4 ??DataTable148 4 ??DataTable151 4 ??DataTable152 4 ??DataTable154 4 ??DataTable156 4 ??DataTable157 4 ??DataTable159 4 ??DataTable160 4 ??DataTable164 4 ??DataTable169 4 ??DataTable170 4 ??DataTable171 4 ??DataTable178 4 ??DataTable181 4 ??DataTable182 4 ??DataTable183 4 ??DataTable185 4 ??DataTable186 4 ??DataTable188 4 ??DataTable189 4 ??DataTable190 4 ??DataTable194 4 ??DataTable195 4 ??DataTable196 4 ??DataTable197 4 ??DataTable198 4 ??DataTable199 4 ??DataTable200 4 ??DataTable201 4 ??DataTable202 4 ??DataTable203 4 ??DataTable204 4 ??DataTable206 4 ??DataTable209 4 ??DataTable210 4 ??DataTable211 4 ??DataTable212 4 ??DataTable214 4 ??DataTable217 4 ??DataTable218 4 ??DataTable220 4 ??DataTable221 4 ??DataTable222 4 ??DataTable223 4 ??DataTable224 4 ??DataTable225 4 ??DataTable226 4 ??DataTable227 4 ??DataTable228 4 ??DataTable229 4 ??DataTable230 4 ??DataTable231 4 ??DataTable232 4 ??DataTable233 4 ??DataTable234 4 ??DataTable236 4 ??DataTable242 4 ??DataTable244 4 ??DataTable245 4 ??DataTable246 4 ??DataTable247 4 ??DataTable248 4 ??DataTable249 4 ? 7400 ? 3 ? 4 ? 8 ? 24 ? 8 ? 8 ? 8 ? 8 ? 8 ? 20 ? 52 ? 396 ? 32 ? 16 ? 3 ? 16 ? 4 ? 4 ? 4 ? 4 ? 4 ? 204 ? 2 ? 40 ? 12 ? 3 ? 8 ? 52 ? 24 ? 3 ? 12 ? 12 ? 164 ? 8 ? 36 ? 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 4 Others 1048 36 168 bytes in segment CODE 4 698 bytes in segment DATA_C 7 447 bytes in segment DATA_I 7 447 bytes in segment DATA_ID 33 108 bytes in segment DATA_Z 24 bytes in segment INITTAB 35 144 bytes of CODE memory (+ 1 048 bytes shared) 12 145 bytes of CONST memory 40 555 bytes of DATA memory Errors: none Warnings: none