############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 07/Apr/2008 17:14:45 # # 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 X75 # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Re # # lease_SGOLD_X75\List\ -lC # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Release_SGOLD_X # # 75\List\ -o D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Rel # # ease_SGOLD_X75\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\Release_SGOLD_X # # 75\List\main.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Release_SGOLD_X # # 75\Obj\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" \ In segment CODE, align 4, keep-with-next \ __??Code32?? __code __interwork __atpcs void patch_header(HEADER_DESC const *) \ patch_header: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C B000C4E1 STRH R0,[R4, #+0] \ 00000010 B200C4E1 STRH R0,[R4, #+2] \ 00000014 888100EF SWI +33160 \ 00000018 010040E2 SUB R0,R0,#+1 \ 0000001C B400C4E1 STRH R0,[R4, #+4] \ 00000020 8A8100EF SWI +33162 \ 00000024 010040E2 SUB R0,R0,#+1 \ 00000028 B600C4E1 STRH R0,[R4, #+6] \ 0000002C 1080BDE8 POP {R4,PC} ;; return 27 28 //Теперь конфиги делаются отдельно!!!!как в экстраинфо! прикладываю два проекта 1stconfig && 2ndconfig 29 //должны находится в папке с исходником натаси в своих папках!чтобы конфиг можно было удоьно редактировать 30 //если изменили какой то из конфигов,то так же нужно изменить структуры в таком же порядке, 31 //как зменили конфиг с темиже данными!и поправить функцию UpdateConfig(),и потом скомпилить отдельно эльфы 1stconfig && 2ndconfig, 32 //чтобы получить разные конфиги...по другому пока не знаю как сделать... 33 // by kluchnik 31.03.08 34 35 //--------------------------------------------------------------------// 36 // READ CONFIGS // 37 //--------------------------------------------------------------------// 38 39 //--------------------------------------------------------------------// 40 //------------------------ ORIGINAL CONFIG -------------------------// 41 //--------------------------------------------------------------------// 42 43 typedef struct 44 { 45 46 CFG_HDR cfghdr0; 47 unsigned int UIN; 48 49 CFG_HDR cfghdr1; 50 char PASS[9]; 51 52 //--------------- NETWORK SETTING -------------------// 53 54 CFG_HDR cfghdr2; 55 CFG_HDR cfghdr2_1; 56 char NATICQ_HOST[128]; 57 58 CFG_HDR cfghdr2_2; 59 unsigned int NATICQ_PORT; 60 61 CFG_HDR cfghdr2_3; 62 unsigned int RECONNECT_TIME; 63 64 CFG_HDR cfghdr2_4; 65 char HIST_PATH[64]; 66 67 CFG_HDR cfghdr2_5; 68 char SMILE_FILE[64]; 69 70 CFG_HDR cfghdr2_6; 71 char SMILE_PATH[64]; 72 73 CFG_HDR cfghdr2_7; 74 char ICON_PATH[64]; 75 76 CFG_HDR cfghdr2_8; 77 char XSTATUSES_PATH[64]; 78 79 CFG_HDR cfghdr2_9; 80 char TEMPLATES_PATH[64]; 81 CFG_HDR cfghdr3;//NETWORK SETTING 82 83 84 //------------------ INTERFACE ------------------// 85 86 CFG_HDR cfghdr4; 87 //Status icon on mainscreen position 88 CFG_HDR cfghdr4_1; 89 unsigned int IDLEICON_X; 90 unsigned int IDLEICON_Y; 91 92 //Popup chat 93 CFG_HDR cfghdr4_2; 94 int DEVELOP_IF; 95 CFG_CBOX_ITEM cfgcbox4_2[4]; 96 97 //Sorting 98 CFG_HDR cfghdr4_3; 99 int SORT_CLIST; 100 CFG_CBOX_ITEM cfgcbox4_3[2]; 101 102 //First letter when typing 103 CFG_HDR cfghdr4_4; 104 int FIRST_LETTER; 105 CFG_CBOX_ITEM cfgcbox4_4[2]; 106 107 108 //------------------ FONT AND COLOR ------------------// 109 110 111 CFG_HDR cfghdr4_5; 112 CFG_HDR cfghdr4_5_1; 113 unsigned int I_COLOR; 114 115 CFG_HDR cfghdr4_5_2; 116 unsigned int TO_COLOR; 117 118 CFG_HDR cfghdr4_5_3; 119 unsigned int X_COLOR; 120 121 CFG_HDR cfghdr4_5_4; 122 unsigned int ED_FONT_SIZE; 123 124 CFG_HDR cfghdr4_5_5; 125 unsigned int ED_H_FONT_SIZE; 126 127 CFG_HDR cfghdr4_5_6; 128 unsigned int ED_X_FONT_SIZE; 129 130 CFG_HDR cfghdr4_5_7; 131 unsigned int O_I_COLOR; 132 133 CFG_HDR cfghdr4_5_8; 134 unsigned int O_TO_COLOR; 135 136 CFG_HDR cfghdr4_5_9; 137 unsigned int O_X_COLOR; 138 139 CFG_HDR cfghdr4_5_10; 140 unsigned int O_ED_FONT_SIZE; 141 142 CFG_HDR cfghdr4_5_11; 143 unsigned int O_ED_H_FONT_SIZE; 144 145 CFG_HDR cfghdr4_5_12; 146 unsigned int O_ED_X_FONT_SIZE; 147 148 CFG_HDR cfghdr4_5_13; 149 unsigned int ACK_COLOR; 150 151 CFG_HDR cfghdr4_5_14; 152 unsigned int UNACK_COLOR; 153 154 //Color for background in select smail 155 CFG_HDR cfghdr19_1; 156 unsigned int color_choose; 157 158 CFG_HDR cfghdr4_6;//FONT & COLOR 159 160 //------------------ ILLUMINATION ------------------// 161 //Illumination by BoBa 19.04.2007 162 163 CFG_HDR cfghdr4_7; 164 CFG_HDR cfghdr4_7_1; 165 unsigned int ILL_DISP_RECV; 166 167 CFG_HDR cfghdr4_7_2; 168 unsigned int ILL_KEYS_RECV; 169 170 CFG_HDR cfghdr4_7_3; 171 unsigned int ILL_RECV_TMR; 172 173 CFG_HDR cfghdr4_7_4; 174 unsigned int ILL_RECV_FADE; 175 176 CFG_HDR cfghdr4_7_5; 177 unsigned int ILL_DISP_SEND; 178 179 CFG_HDR cfghdr4_7_6; 180 unsigned int ILL_KEYS_SEND; 181 182 CFG_HDR cfghdr4_7_7; 183 unsigned int ILL_SEND_TMR; 184 185 CFG_HDR cfghdr4_7_8; 186 unsigned int ILL_SEND_FADE; 187 188 CFG_HDR cfghdr4_7_9; 189 unsigned int ILL_OFF_FADE; 190 CFG_HDR cfghdr4_8; //ILLUMINATION 191 192 CFG_HDR cfghdr5;//INTERFACE 193 194 195 //------------------------------------------------------------------------------// 196 // HISTORY 197 //------------------------------------------------------------------------------// 198 199 //History 200 CFG_HDR cfghdr6; 201 202 CFG_HDR cfghdr6_8; 203 int SHOW_ACTIVE; 204 CFG_CBOX_ITEM cfgcbox6_8[2]; 205 //Enable history logging 206 CFG_HDR cfghdr6_1; 207 int LOG_ALL; 208 CFG_CBOX_ITEM cfgcbox6_1[2]; 209 210 //History type 211 CFG_HDR cfghdr6_2; 212 int HISTORY_TYPE; 213 CFG_CBOX_ITEM cfgcbox6_2[2]; 214 215 //Enable status logging 216 CFG_HDR cfghdr6_3; 217 int LOG_STATCH; 218 CFG_CBOX_ITEM cfgcbox6_3[2]; 219 220 //Enable X-status logging 221 CFG_HDR cfghdr6_4; 222 int LOG_XTXT; 223 CFG_CBOX_ITEM cfgcbox6_4[2]; 224 225 //Auto request X-status if entering to chat 226 CFG_HDR cfghdr6_5; 227 int ENA_AUTO_XTXT; 228 CFG_CBOX_ITEM cfgcbox6_5[2]; 229 230 //Don't log X-status, if it same as prevision 231 CFG_HDR cfghdr6_6; 232 int NOT_LOG_SAME_XTXT; 233 CFG_CBOX_ITEM cfgcbox6_6[2]; 234 235 //Buffer for fill from history 236 CFG_HDR cfghdr6_7; 237 int HISTORY_BUFFER; 238 CFG_CBOX_ITEM cfgcbox6_7[7]; 239 240 CFG_HDR cfghdr7;//HISTORY 241 242 //--------------------------------------------------// 243 // NOTYFY POWER // 244 //--------------------------------------------------// 245 246 CFG_HDR cfghdr8; 247 248 CFG_HDR cfghdr8_1; 249 unsigned int sndVolume; 250 251 CFG_HDR cfghdr8_2; 252 unsigned int vibraPower; 253 254 CFG_HDR cfghdr8_3; 255 int VIBR_TYPE; 256 CFG_CBOX_ITEM cfgcbox8_3[2]; 257 258 CFG_HDR cfghdr8_4; 259 int VIBR_ON_CONNECT; 260 CFG_CBOX_ITEM cfgcbox8_4[2]; 261 262 //------------------ SOUND SETUP ------------------// 263 CFG_HDR cfghdr8_5; 264 265 CFG_HDR cfghdr181; 266 unsigned int extended_sounds; 267 CFG_CBOX_ITEM cfgcbox18_3_2[2]; 268 269 CFG_HDR cfghdr8_5_1; 270 char sndStartup[64]; 271 272 CFG_HDR cfghdr8_5_2; 273 char sndSrvMsg[64]; 274 275 CFG_HDR cfghdr8_5_3; 276 char sndGlobal[64]; 277 278 CFG_HDR cfghdr8_5_4; 279 char sndMsg[64]; 280 281 CFG_HDR cfghdr8_5_5; 282 char sndMsgSent[64]; 283 284 CFG_HDR cfghdr15; 285 char sndGlobal2[64]; 286 287 CFG_HDR cfghdr161; 288 char sndMsg2[64]; 289 290 CFG_HDR cfghdr16r1; 291 char pingsnd[64]; 292 CFG_HDR cfghdr8_6;//SOUND SETUP 293 294 CFG_HDR cfghdr9;//NOTYFY POWER 295 }myConfig; 296 297 //----------------------------------------------------------------// 298 //------------------------ MOD CONFIG --------------------------// 299 //----------------------------------------------------------------// 300 301 typedef struct 302 { 303 CFG_HDR cfghdr0; 304 //----------- НАСТРОЙКА КЛАВИШ -----------// 305 //View settings 306 CFG_HDR cfghdr23_4; 307 /* 308 CFG_HDR cfghdr23_4_1;//={CFG_CBOX,"Показ. сообщ.при дл.нажатии",0,2}; 309 int isShowMsgLongPress;// = 1; 310 CFG_CBOX_ITEM cfgcbox23_4_2[2];//={"Нет","Да"}; 311 */ 312 //Long press right in chat 313 CFG_HDR cfghdr4_67; 314 int LongRightAction; 315 CFG_CBOX_ITEM cfgcbox4_56[3]; 316 317 //Long press right in chat 318 CFG_HDR cfghdr34_64; 319 int LongLeftAction ; 320 CFG_CBOX_ITEM cfgcbox444_56[2]; 321 322 //Action on # button in contact list 323 CFG_HDR cfghdr78_4520; 324 int ActionResh; 325 CFG_CBOX_ITEM cfgcbox_668_z[2]; 326 327 #ifdef ELKA 328 //Press vol up or vol down button in CL 329 CFG_HDR cfghdr34_642; 330 int isVolDownButton; 331 CFG_CBOX_ITEM cfgcbox434_56[2]; 332 333 CFG_HDR cfghdr34_6342; 334 int isVolUpButton; 335 CFG_CBOX_ITEM cfgcbox4134_56[2]; 336 #endif 337 CFG_HDR cfghdr223_5; //НАСТРОКА КЛАВИШ 338 339 340 //----------- STATUS SETTING -----------// 341 342 343 CFG_HDR cfghdr_45; 344 #ifdef ELKA 345 //Status icon on mainscreen position 346 CFG_HDR cfghdr467_1; 347 int ShowStatusIcon; 348 CFG_CBOX_ITEM cfgcbox9_1[5]; 349 #endif 350 #ifdef ELKA 351 //Show x-status on iconbar or mainscreen 352 CFG_HDR cfghdrz_68; 353 int show_xstatus; 354 CFG_CBOX_ITEM cfgcbox_8z[4]; 355 #else 356 CFG_HDR cfghdrz_68; 357 int show_xstatus; 358 CFG_CBOX_ITEM cfgcbox_8z[2]; 359 #endif 360 //Xstatus idle position 361 CFG_HDR cfghdrz_1; 362 unsigned int IDLEICON_XX; 363 unsigned int IDLEICON_YX; 364 365 #ifdef ELKA 366 //Number first pic status in folder img for show in iconbar 367 CFG_HDR cfghdr19_22; 368 unsigned int NumStatusToIconBar; 369 370 //Number first pic x-status in folder img for show in iconbar 371 CFG_HDR cfghdr19_242; 372 unsigned int NumXStatusToIconBar; 373 #endif 374 CFG_HDR cfghdr_4;//STATUS SETTINGS 375 376 377 //----------- PNGFONT SETTING -----------// 378 379 CFG_HDR cfghdr1_45; 380 381 //Nember png-font or system 382 CFG_HDR cfghdr65z; 383 unsigned int fonto; 384 385 //Path to png-font 386 CFG_HDR cfghdr98; 387 char fontpath[64]; 388 389 //Coordinates for message on idle 390 CFG_HDR cfghd83; 391 unsigned int msg_d_x ; 392 unsigned int msg_d_y ; 393 394 CFG_HDR cfghdr60_2; 395 char fontColor[4]; 396 397 CFG_HDR cfghdr60_3; 398 char bgrColor[4]; 399 400 //Max show symbol on idle 401 CFG_HDR cfghdr19a_1; 402 unsigned int main_lenght; 403 404 CFG_HDR cfghdr9z9; 405 int use_cutter; 406 CFG_CBOX_ITEM cfgcbox18a_4[2]; 407 408 CFG_HDR cfghdr65y; 409 unsigned int spaco1; 410 411 //__root const CFG_HDR cfghdr65u={CFG_UINT,"Main msg space",0,999999}; 412 //__root const unsigned int spaco2=0; 413 414 CFG_HDR cfghdrss_45;//PNGFONT SETTING 415 416 417 //-----------------------------------------------------------------------------// 418 // ONLINE TIME 419 //-----------------------------------------------------------------------------// 420 421 CFG_HDR cfghdr_m71; 422 423 CFG_HDR cfghdr699; 424 unsigned int onlineTime_x; 425 unsigned int onlineTime_y; 426 427 CFG_HDR cfghdr698; 428 int Pause_Time; 429 CFG_CBOX_ITEM cfgcbox85[2]; 430 431 CFG_HDR cfghdr_m70; 432 433 434 //-----------------------------------------------------------------------------// 435 // AUTO PING/UNREAD 436 //-----------------------------------------------------------------------------// 437 438 439 CFG_HDR cfghdr_m91; 440 441 CFG_HDR cfghd66; 442 unsigned int Ping_X ; 443 unsigned int Ping_Y ; 444 445 CFG_HDR cfghdr1z9a_1; 446 unsigned int ping_time_config ; 447 448 CFG_HDR cfghdr298; 449 int Is_Unread_On; 450 CFG_CBOX_ITEM cfgcbox86[2]; 451 452 CFG_HDR cfghd67; 453 unsigned int unread_X; 454 unsigned int unread_Y; 455 456 CFG_HDR cfghdr_m90; 457 458 459 //-----------------------------------------------------------------------------// 460 // AUTO STATUS // 461 //-----------------------------------------------------------------------------// 462 463 464 CFG_HDR cfghdr_m61; 465 466 CFG_HDR cfghdr668; 467 int Auto_Status; 468 CFG_CBOX_ITEM cfgcbox89[2]; 469 470 CFG_HDR cfghdr667; 471 unsigned int AUTO_ENGADE; 472 473 CFG_HDR cfghdr_13; 474 int time_zone; 475 CFG_CBOX_ITEM cfgcbox_13[33]; 476 477 CFG_HDR cfghdrzz_8; 478 char awayHelloMsg[24]; 479 480 CFG_HDR cfghdrzz_9; 481 char awayMsg[1024]; 482 483 CFG_HDR cfghdr66_2; 484 int Reset_timer; 485 CFG_CBOX_ITEM cfgcbox90[2]; 486 487 //Show away time on idle 488 CFG_HDR cfghdr663; 489 int showAwayIdle ; 490 CFG_CBOX_ITEM cfgcbox82[2]; 491 492 CFG_HDR cfghd6_7; 493 unsigned int auto_x; 494 unsigned int auto_y; 495 496 CFG_HDR cfghdr_m60; 497 498 //------------------------------------------------------------------------------// 499 // SCREEN SAVER // 500 //------------------------------------------------------------------------------// 501 502 CFG_HDR cfghdr_91;//={CFG_LEVEL,"Заставка",1,0}; 503 504 CFG_HDR cfghdr9_1;// = {CFG_CBOX,"Включить заставку",0,2}; 505 int isScreenSaverEna;// = 0; 506 CFG_CBOX_ITEM cfgcbox9_2[2];//={"No","Yes"}; 507 508 CFG_HDR cfghdr9_3;//={CFG_UINT,"Время до срабатывания(12=1мин)",0,10}; 509 unsigned int screenSaverTime;//=120; 510 CFG_HDR cfghdr_90;//={CFG_LEVEL,"",0,0}; 511 512 //------------------------------------------------------------------------------// 513 // EXTRA CONFIG // 514 //------------------------------------------------------------------------------// 515 516 517 CFG_HDR cfghdr_m51; 518 519 //Show contact header with... 520 CFG_HDR cfghdr467; 521 int TIME_OR_MSG; 522 CFG_CBOX_ITEM cfgcbox91[5]; 523 524 //Vibra count in vibra remaider 525 CFG_HDR cfghdr65; 526 unsigned int Vibra_cc; 527 528 //CSM for player 529 CFG_HDR cfghdr66; 530 char CsmAdr[9]; //el=A087B454 //es=A068E244 531 532 //Text before name track 533 CFG_HDR cfghdr67; 534 char playing[13]; 535 536 //Show command sending 537 CFG_HDR cfghdr780; 538 int show_send_info; 539 CFG_CBOX_ITEM cfgcbox8_z[2]; 540 541 //Show changr status contact 542 CFG_HDR cfghdr7_80; 543 int isLogStatusChange; 544 CFG_CBOX_ITEM cfgcbox8df_z[2]; 545 /* 546 //Show time offline contact 547 CFG_HDR cfghdr7_80; 548 int isLogOffline; 549 CFG_CBOX_ITEM cfgcbox8df_z[2]; 550 551 //Show time onlain contact 552 CFG_HDR cfghdr7_81; 553 int isLogOnline; 554 CFG_CBOX_ITEM cfgcbox9df_z[2]; 555 */ 556 //Show Loopback contact in CL 557 CFG_HDR cfghdr71_30; 558 int IsShowLoopback; 559 CFG_CBOX_ITEM cfgcbox_3z[2]; 560 561 CFG_HDR cfghdr_m50;//level 562 563 CFG_HDR cfghdr11_9;//level 564 char ignor_list[256]; 565 }myConfigMod; 566 567 568 //-----------------------------------------------------------------------------------// 569 // ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ // 570 //-----------------------------------------------------------------------------------// 571 unsigned int color_choose; 572 unsigned int Vibra_cc; 573 unsigned int Ping_X; 574 unsigned int Ping_Y; 575 unsigned int unread_X; 576 unsigned int unread_Y; 577 int show_xstatus; 578 char fontpath[64]; 579 #ifdef ELKA 580 int ShowStatusIcon; 581 #endif 582 //For log change status 583 int isLogStatusChange; 584 //int isLogOffline; 585 //int isLogOnline; 586 587 char CsmAdr[9]; 588 int SORT_CLIST; 589 #ifdef ELKA 590 //If action vol up && vol down button on elka 591 int isVolUpButton; 592 int isVolDownButton; 593 #endif 594 595 //Autoaway message 596 char awayHelloMsg[24];//hello msg 597 char awayMsg[1024];//message 598 599 int IsShowLoopback;//Show Loopback contact in CL 600 //For png font 601 unsigned int fonto; 602 unsigned int spaco1; 603 unsigned int spaco2; 604 //int spaco2=spaco1; 605 char fontColor[];//Цвет для системного шрифта 606 char bgrColor[]; 607 608 unsigned int AUTO_ENGADE; 609 int Is_Unread_On; 610 int Pause_Time; 611 unsigned int auto_x; 612 unsigned int auto_y; 613 int showAwayIdle; 614 615 //Online time on idle 616 unsigned int onlineTime_x; 617 unsigned int onlineTime_y; 618 619 int Auto_Status;//Включен автостатус или нет 620 int time_zone; 621 int TIME_OR_MSG; 622 623 unsigned int ping_time_config; 624 char ignor_list[256]; 625 626 unsigned int msg_d_x; 627 unsigned int msg_d_y; 628 unsigned int main_lenght; 629 int use_cutter; 630 631 char playing[13]; 632 int Reset_timer; 633 #ifdef ELKA 634 unsigned int NumStatusToIconBar; 635 unsigned int NumXStatusToIconBar; 636 #endif 637 int LongRightAction; 638 int LongLeftAction; 639 640 641 //Screen Saver setting 642 unsigned int screenSaverTime; 643 int isScreenSaverEna; 644 645 646 //int isShowMsgLongPress; 647 //------------ ORIGINAL SETTING -------------// 648 649 unsigned int UIN; 650 char PASS[9]; 651 652 int VIBR_ON_CONNECT; 653 int SHOW_ACTIVE; 654 int VIBR_TYPE; 655 int DEVELOP_IF; 656 657 int LOG_ALL; 658 int LOG_STATCH; 659 int FIRST_LETTER; 660 661 int show_send_info; 662 int ActionResh; 663 664 int HISTORY_TYPE; 665 unsigned int vibraPower; 666 667 unsigned int IDLEICON_X; 668 unsigned int IDLEICON_Y; 669 670 unsigned int IDLEICON_XX; 671 unsigned int IDLEICON_YX; 672 673 unsigned int I_COLOR; 674 unsigned int TO_COLOR; 675 unsigned int X_COLOR; 676 unsigned int O_I_COLOR; 677 unsigned int O_TO_COLOR; 678 unsigned int O_X_COLOR; 679 680 unsigned int ED_FONT_SIZE; 681 unsigned int ED_H_FONT_SIZE; 682 unsigned int ED_X_FONT_SIZE; 683 unsigned int O_ED_FONT_SIZE; 684 unsigned int O_ED_H_FONT_SIZE; 685 unsigned int O_ED_X_FONT_SIZE; 686 687 unsigned int ACK_COLOR; 688 unsigned int UNACK_COLOR; 689 690 int ENA_AUTO_XTXT; 691 int NOT_LOG_SAME_XTXT; 692 int LOG_XTXT; 693 int HISTORY_BUFFER; 694 695 //Illumination by BoBa 19.04.2007 696 /////////// 697 unsigned int ILL_DISP_RECV; 698 unsigned int ILL_KEYS_RECV; 699 unsigned int ILL_RECV_TMR; 700 unsigned int ILL_DISP_SEND; 701 unsigned int ILL_KEYS_SEND; 702 unsigned int ILL_SEND_TMR; 703 unsigned int ILL_SEND_FADE; 704 unsigned int ILL_RECV_FADE; 705 unsigned int ILL_OFF_FADE; 706 707 //=============================Проигрывание звука======================= 708 709 #ifdef NEWSGOLD 710 #define DEFAULT_DISK "4" 711 #else 712 #define DEFAULT_DISK "0" 713 #endif 714 715 char sndStartup[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndStartup.wav"; 716 char sndSrvMsg[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndSrvMsg.wav"; 717 char sndGlobal[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndGlobal.wav"; 718 char sndGlobal2[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\Uins_on\\"; 719 char sndMsg[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndMsg.wav"; 720 char sndMsg2[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\Uins_msg\\"; 721 char sndMsgSent[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndMsgSent.wav"; 722 char pingsnd[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndPing.wav"; 723 unsigned int extended_sounds; 724 unsigned int sndVolume; 725 726 //=============================================================== 727 728 //int VIBR_TYPE; 729 //unsigned int vibraPower; 730 731 char SMILE_FILE[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\smiles.cfg"; 732 char TEMPLATES_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\templates"; 733 char ICON_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\img"; 734 char SMILE_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\smiles"; 735 char XSTATUSES_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\ximg"; 736 char HIST_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\history"; 737 char NATICQ_HOST[128];//="cbsie.dyndns.info; freegw.alltime.ru"; 738 unsigned int NATICQ_PORT;//=5050; 739 unsigned int RECONNECT_TIME; //2058 740 741 //-----------------------------------------------------------------------------------// 742 // -------------------------------- INIT CONFIGS -----------------------------------// 743 //-----------------------------------------------------------------------------------// 744 745 extern int janis; 746 char per_s[]="%s"; 747 748 #ifdef NEWSGOLD 749 int disk=4; 750 #else \ In segment DATA_Z, align 4, align-sorted 751 int disk=0; \ disk: \ 00000000 DS8 4 752 #endif 753 754 char suc_config_name[64]; 755 char suc_config_name_mod[64]; 756 \ In segment CODE, align 4, keep-with-next 757 void UpdateConfig() 758 { \ UpdateConfig: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 759 int myConfigSize = sizeof(myConfig); 760 myConfig* myConf = (myConfig*)malloc(myConfigSize); 761 int newCfgFile; 762 int myConfigModSize = sizeof(myConfigMod); 763 myConfigMod* myConfMod = (myConfigMod*)malloc(myConfigModSize); 764 int newCfgModFile;// = InitConfig(myConfMod, myConfigModSize, "NATICQMod",disk); 765 #ifdef kluchnik 766 newCfgFile= InitConfig(myConf, myConfigSize, "NATICQ_344720626",4); 767 newCfgModFile = InitConfig(myConfMod, myConfigModSize, "NATICQMod_344720626",4); 768 769 sprintf(suc_config_name,"4:\\zbin\\etc\\NATICQ_344720626.bcfg"); 770 sprintf(suc_config_name_mod,"4:\\zbin\\etc\\NATICQMod_344720626.bcfg"); 771 #else 772 if((newCfgFile= InitConfig(myConf, myConfigSize, "NATICQ",4))!=-1) \ 00000004 94959FE5 LDR R9,??UpdateConfig_0 ;; `?` \ 00000008 ........ LDR R7,??DataTable18 ;; S_ICONS \ 0000000C D8B0A0E3 MOV R11,#+216 \ 00000010 54BD8BE3 ORR R11,R11,#0x1500 \ 00000014 0B00A0E1 MOV R0,R11 \ 00000018 140000EF SWI +20 \ 0000001C 0050A0E1 MOV R5,R0 \ 00000020 768F8BE2 ADD R8,R11,#+472 \ 00000024 0800A0E1 MOV R0,R8 \ 00000028 140000EF SWI +20 \ 0000002C 0060A0E1 MOV R6,R0 \ 00000030 0430A0E3 MOV R3,#+4 \ 00000034 702089E2 ADD R2,R9,#+112 \ 00000038 0B10A0E1 MOV R1,R11 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 ........ _BLF InitConfig,??InitConfig??rA \ 00000044 0040A0E1 MOV R4,R0 \ 00000048 00A0E0E3 MVN R10,#+0 \ 0000004C 0A0050E1 CMP R0,R10 773 { 774 sprintf(suc_config_name,"4:\\zbin\\etc\\NATICQ.bcfg"); \ 00000050 78108912 ADDNE R1,R9,#+120 \ 00000054 0600001A BNE ??UpdateConfig_1 775 } 776 else 777 { 778 newCfgFile= InitConfig(myConf, myConfigSize, "NATICQ",0); \ 00000058 0030A0E3 MOV R3,#+0 \ 0000005C 702089E2 ADD R2,R9,#+112 \ 00000060 0B10A0E1 MOV R1,R11 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 ........ _BLF InitConfig,??InitConfig??rA \ 0000006C 0040A0E1 MOV R4,R0 779 sprintf(suc_config_name,"0:\\zbin\\etc\\NATICQ.bcfg"); \ 00000070 581089E2 ADD R1,R9,#+88 \ ??UpdateConfig_1: \ 00000074 E60E87E2 ADD R0,R7,#+3680 \ 00000078 160000EF SWI +22 780 } 781 782 if((newCfgModFile = InitConfig(myConfMod, myConfigModSize, "NATICQMod",4))!=-1) \ 0000007C 0430A0E3 MOV R3,#+4 \ 00000080 302089E2 ADD R2,R9,#+48 \ 00000084 0810A0E1 MOV R1,R8 \ 00000088 0600A0E1 MOV R0,R6 \ 0000008C ........ _BLF InitConfig,??InitConfig??rA \ 00000090 00B0A0E1 MOV R11,R0 \ 00000094 0A005BE1 CMP R11,R10 783 { 784 sprintf(suc_config_name_mod,"4:\\zbin\\etc\\NATICQMod.bcfg"); \ 00000098 3C108912 ADDNE R1,R9,#+60 \ 0000009C 0600001A BNE ??UpdateConfig_2 785 } 786 else 787 { 788 newCfgModFile = InitConfig(myConfMod, myConfigModSize, "NATICQMod",0); \ 000000A0 0030A0E3 MOV R3,#+0 \ 000000A4 302089E2 ADD R2,R9,#+48 \ 000000A8 0810A0E1 MOV R1,R8 \ 000000AC 0600A0E1 MOV R0,R6 \ 000000B0 ........ _BLF InitConfig,??InitConfig??rA \ 000000B4 00B0A0E1 MOV R11,R0 789 sprintf(suc_config_name_mod,"0:\\zbin\\etc\\NATICQMod.bcfg"); \ 000000B8 141089E2 ADD R1,R9,#+20 \ ??UpdateConfig_2: \ 000000BC EA0E87E2 ADD R0,R7,#+3744 \ 000000C0 160000EF SWI +22 790 } 791 #endif 792 793 //--------------------------- 794 // MOD CONFIG 795 //--------------------------- 796 if(newCfgFile!=-1 && newCfgModFile!=-1)//Если конфиги есть \ 000000C4 0A0054E1 CMP R4,R10 \ 000000C8 0A005B11 CMPNE R11,R10 \ 000000CC 2B01000A BEQ ??UpdateConfig_3 \ 000000D0 5C00A0E3 MOV R0,#+92 \ 000000D4 440D80E3 ORR R0,R0,#0x1100 \ 000000D8 068080E0 ADD R8,R0,R6 \ 000000DC 640298E5 LDR R0,[R8, #+612] 797 { 798 //setting interface 799 TIME_OR_MSG=myConfMod->TIME_OR_MSG; 800 IsShowLoopback=myConfMod->IsShowLoopback;//Show Loopback contact in CL 801 //isShowMsgLongPress=myConfMod->isShowMsgLongPress; 802 803 804 //For online/offline log 805 // isLogOffline=myConfMod->isLogOffline; 806 // isLogOnline=myConfMod->isLogOnline; 807 isLogStatusChange=myConfMod->isLogStatusChange; 808 809 //setting png font 810 sprintf(fontpath,per_s,myConfMod->fontpath); \ 000000E0 DC40A0E3 MOV R4,#+220 \ 000000E4 FC0087E5 STR R0,[R7, #+252] \ 000000E8 B80498E5 LDR R0,[R8, #+1208] \ 000000EC 804E84E3 ORR R4,R4,#0x800 \ 000000F0 C40087E5 STR R0,[R7, #+196] \ 000000F4 480498E5 LDR R0,[R8, #+1096] \ 000000F8 DE2F86E2 ADD R2,R6,#+888 \ 000000FC BC0087E5 STR R0,[R7, #+188] \ 00000100 071084E0 ADD R1,R4,R7 \ 00000104 8E0E87E2 ADD R0,R7,#+2272 \ 00000108 160000EF SWI +22 811 fonto=myConfMod->fonto; \ 0000010C 849086E2 ADD R9,R6,#+132 \ 00000110 C40299E5 LDR R0,[R9, #+708] \ 00000114 C80087E5 STR R0,[R7, #+200] 812 spaco1=myConfMod->spaco1; \ 00000118 940499E5 LDR R0,[R9, #+1172] \ 0000011C CC0087E5 STR R0,[R7, #+204] 813 spaco2=myConfMod->spaco1;//так нада \ 00000120 940499E5 LDR R0,[R9, #+1172] \ 00000124 D00087E5 STR R0,[R7, #+208] 814 //Цвет для системного шрифта 815 for(int i=0;i<4;i++) \ 00000128 0000A0E3 MOV R0,#+0 816 { 817 fontColor[i]=myConfMod->fontColor[i]; \ ??UpdateConfig_4: \ 0000012C 062080E0 ADD R2,R0,R6 \ 00000130 1824D2E5 LDRB R2,[R2, #+1048] \ 00000134 071080E0 ADD R1,R0,R7 \ 00000138 B823C1E5 STRB R2,[R1, #+952] 818 bgrColor[i]=myConfMod->bgrColor[i]; \ 0000013C 062080E0 ADD R2,R0,R6 \ 00000140 4824D2E5 LDRB R2,[R2, #+1096] 819 } \ 00000144 010080E2 ADD R0,R0,#+1 \ 00000148 040050E3 CMP R0,#+4 \ 0000014C B923C1E5 STRB R2,[R1, #+953] \ 00000150 F5FFFFBA BLT ??UpdateConfig_4 820 821 Is_Unread_On=myConfMod->Is_Unread_On; \ 00000154 7C0699E5 LDR R0,[R9, #+1660] 822 823 //automessage setting 824 AUTO_ENGADE=myConfMod->AUTO_ENGADE;//time to away 825 Auto_Status=myConfMod->Auto_Status;//Включен автостатус или нет 826 time_zone=myConfMod->time_zone; 827 auto_x=myConfMod->auto_x; 828 auto_y=myConfMod->auto_y; 829 showAwayIdle=myConfMod->showAwayIdle; 830 sprintf(awayHelloMsg,per_s,myConfMod->awayHelloMsg);//hello msg \ 00000158 071084E0 ADD R1,R4,R7 \ 0000015C D80087E5 STR R0,[R7, #+216] \ 00000160 E80799E5 LDR R0,[R9, #+2024] \ 00000164 D40087E5 STR R0,[R7, #+212] \ 00000168 780799E5 LDR R0,[R9, #+1912] \ 0000016C F40087E5 STR R0,[R7, #+244] \ 00000170 180899E5 LDR R0,[R9, #+2072] \ 00000174 F80087E5 STR R0,[R7, #+248] \ 00000178 E00098E5 LDR R0,[R8, #+224] \ 0000017C E00087E5 STR R0,[R7, #+224] \ 00000180 E40098E5 LDR R0,[R8, #+228] \ 00000184 E40087E5 STR R0,[R7, #+228] \ 00000188 700098E5 LDR R0,[R8, #+112] \ 0000018C E80087E5 STR R0,[R7, #+232] \ 00000190 410E84E2 ADD R0,R4,#+1040 \ 00000194 062080E0 ADD R2,R0,R6 \ 00000198 F00F40E2 SUB R0,R0,#+960 \ 0000019C 070080E0 ADD R0,R0,R7 \ 000001A0 160000EF SWI +22 831 snprintf(awayMsg,64,per_s,myConfMod->awayMsg);//message \ 000001A4 D33E86E2 ADD R3,R6,#+3376 \ 000001A8 072084E0 ADD R2,R4,R7 \ 000001AC 4010A0E3 MOV R1,#+64 \ 000001B0 EF0F87E2 ADD R0,R7,#+956 \ 000001B4 1B0100EF SWI +283 832 Reset_timer=myConfMod->Reset_timer;//reset away timer on send message or key down \ 000001B8 000098E5 LDR R0,[R8, #+0] 833 834 //Online time on idle 835 onlineTime_x=myConfMod->onlineTime_x; 836 onlineTime_y=myConfMod->onlineTime_y; 837 Pause_Time=myConfMod->Pause_Time; 838 839 //setting ping 840 Ping_X=myConfMod->Ping_X; 841 Ping_Y=myConfMod->Ping_Y; 842 sprintf(pingsnd,per_s,myConf->pingsnd); \ 000001BC 552D85E2 ADD R2,R5,#+5440 \ 000001C0 140187E5 STR R0,[R7, #+276] \ 000001C4 1C0599E5 LDR R0,[R9, #+1308] \ 000001C8 071084E0 ADD R1,R4,R7 \ 000001CC EC0087E5 STR R0,[R7, #+236] \ 000001D0 200599E5 LDR R0,[R9, #+1312] \ 000001D4 F00087E5 STR R0,[R7, #+240] \ 000001D8 500599E5 LDR R0,[R9, #+1360] \ 000001DC DC0087E5 STR R0,[R7, #+220] \ 000001E0 180699E5 LDR R0,[R9, #+1560] \ 000001E4 A80087E5 STR R0,[R7, #+168] \ 000001E8 1C0699E5 LDR R0,[R9, #+1564] \ 000001EC AC0087E5 STR R0,[R7, #+172] \ 000001F0 C20E87E2 ADD R0,R7,#+3104 \ 000001F4 160000EF SWI +22 843 ping_time_config=myConfMod->ping_time_config; \ 000001F8 4C0699E5 LDR R0,[R9, #+1612] 844 845 //setting last 5 message on idle 846 msg_d_x=myConfMod->msg_d_x; 847 msg_d_y=myConfMod->msg_d_y; 848 main_lenght=myConfMod->main_lenght; 849 use_cutter=myConfMod->use_cutter; 850 851 //player setting 852 sprintf(CsmAdr,per_s,myConfMod->CsmAdr);//csm mediaplayer \ 000001FC 532D86E2 ADD R2,R6,#+5312 \ 00000200 000187E5 STR R0,[R7, #+256] \ 00000204 600399E5 LDR R0,[R9, #+864] \ 00000208 071084E0 ADD R1,R4,R7 \ 0000020C 040187E5 STR R0,[R7, #+260] \ 00000210 640399E5 LDR R0,[R9, #+868] \ 00000214 080187E5 STR R0,[R7, #+264] \ 00000218 F40399E5 LDR R0,[R9, #+1012] \ 0000021C 0C0187E5 STR R0,[R7, #+268] \ 00000220 240499E5 LDR R0,[R9, #+1060] \ 00000224 100187E5 STR R0,[R7, #+272] \ 00000228 920E87E2 ADD R0,R7,#+2336 \ 0000022C 160000EF SWI +22 853 sprintf(playing,per_s,myConfMod->playing);//text before name song \ 00000230 F800A0E3 MOV R0,#+248 \ 00000234 500D80E3 ORR R0,R0,#0x1400 \ 00000238 062080E0 ADD R2,R0,R6 \ 0000023C 071084E0 ADD R1,R4,R7 \ 00000240 5A0F84E2 ADD R0,R4,#+360 \ 00000244 070080E0 ADD R0,R0,R7 \ 00000248 160000EF SWI +22 854 855 #ifdef ELKA 856 NumStatusToIconBar=myConfMod->NumStatusToIconBar; 857 NumXStatusToIconBar=myConfMod->NumXStatusToIconBar; 858 ShowStatusIcon=myConfMod->ShowStatusIcon; 859 #endif 860 861 //setting xstatus 862 show_xstatus=myConfMod->show_xstatus; \ 0000024C C80199E5 LDR R0,[R9, #+456] 863 IDLEICON_XX=myConfMod->IDLEICON_XX; 864 IDLEICON_YX=myConfMod->IDLEICON_YX; 865 866 //setting keys 867 LongRightAction=myConfMod->LongRightAction; 868 LongLeftAction=myConfMod->LongLeftAction; 869 ActionResh=myConfMod->ActionResh;//действие на # в контакт листе 870 #ifdef ELKA 871 //If action vol up && vol down button on elka 872 isVolUpButton=myConfMod->isVolUpButton; 873 isVolDownButton=myConfMod->isVolDownButton; 874 #endif 875 876 //other setting 877 sprintf(ignor_list,per_s,myConfMod->ignor_list); \ 00000250 071084E0 ADD R1,R4,R7 \ 00000254 B80087E5 STR R0,[R7, #+184] \ 00000258 380299E5 LDR R0,[R9, #+568] \ 0000025C 600187E5 STR R0,[R7, #+352] \ 00000260 3C0299E5 LDR R0,[R9, #+572] \ 00000264 640187E5 STR R0,[R7, #+356] \ 00000268 000099E5 LDR R0,[R9, #+0] \ 0000026C 180187E5 STR R0,[R7, #+280] \ 00000270 900099E5 LDR R0,[R9, #+144] \ 00000274 1C0187E5 STR R0,[R7, #+284] \ 00000278 000199E5 LDR R0,[R9, #+256] \ 0000027C 4C0187E5 STR R0,[R7, #+332] \ 00000280 B000A0E3 MOV R0,#+176 \ 00000284 580D80E3 ORR R0,R0,#0x1600 \ 00000288 062080E0 ADD R2,R0,R6 \ 0000028C 680084E2 ADD R0,R4,#+104 \ 00000290 070080E0 ADD R0,R0,R7 \ 00000294 160000EF SWI +22 878 show_send_info=myConfMod->show_send_info; \ 00000298 D80398E5 LDR R0,[R8, #+984] 879 880 Vibra_cc=myConfMod->Vibra_cc;//vibra remainder 881 882 unread_X=myConfMod->unread_X; 883 unread_Y=myConfMod->unread_Y; 884 885 //Screen Saver setting 886 screenSaverTime=myConfMod->screenSaverTime; 887 isScreenSaverEna=myConfMod->isScreenSaverEna; 888 889 890 //-------------------------------- 891 // ORIGINAL CONFIG 892 //-------------------------------- 893 UIN=myConf->UIN; 894 sprintf(PASS,per_s,myConf->PASS); \ 0000029C 5C2085E2 ADD R2,R5,#+92 \ 000002A0 480187E5 STR R0,[R7, #+328] \ 000002A4 340398E5 LDR R0,[R8, #+820] \ 000002A8 071084E0 ADD R1,R4,R7 \ 000002AC A40087E5 STR R0,[R7, #+164] \ 000002B0 EC0699E5 LDR R0,[R9, #+1772] \ 000002B4 B00087E5 STR R0,[R7, #+176] \ 000002B8 F00699E5 LDR R0,[R9, #+1776] \ 000002BC B40087E5 STR R0,[R7, #+180] \ 000002C0 DC0198E5 LDR R0,[R8, #+476] \ 000002C4 200187E5 STR R0,[R7, #+288] \ 000002C8 6C0198E5 LDR R0,[R8, #+364] \ 000002CC 2C8085E2 ADD R8,R5,#+44 \ 000002D0 240187E5 STR R0,[R7, #+292] \ 000002D4 000098E5 LDR R0,[R8, #+0] \ 000002D8 280187E5 STR R0,[R7, #+296] \ 000002DC 5E0F84E2 ADD R0,R4,#+376 \ 000002E0 070080E0 ADD R0,R0,R7 \ 000002E4 160000EF SWI +22 895 896 SORT_CLIST=myConf->SORT_CLIST; \ 000002E8 640598E5 LDR R0,[R8, #+1380] 897 LOG_ALL=myConf->LOG_ALL; 898 LOG_STATCH=myConf->LOG_STATCH; 899 SHOW_ACTIVE=myConf->SHOW_ACTIVE; 900 VIBR_TYPE=myConf->VIBR_TYPE; 901 VIBR_ON_CONNECT=myConf->VIBR_ON_CONNECT; 902 DEVELOP_IF=myConf->DEVELOP_IF; 903 FIRST_LETTER=myConf->FIRST_LETTER; 904 905 HISTORY_TYPE=myConf->HISTORY_TYPE; 906 907 908 sprintf(HIST_PATH,per_s,myConf->HIST_PATH); \ 000002EC 732F85E2 ADD R2,R5,#+460 \ 000002F0 C00087E5 STR R0,[R7, #+192] \ 000002F4 3C0C98E5 LDR R0,[R8, #+3132] \ 000002F8 071084E0 ADD R1,R4,R7 \ 000002FC 3C0187E5 STR R0,[R7, #+316] \ 00000300 1C0D98E5 LDR R0,[R8, #+3356] \ 00000304 400187E5 STR R0,[R7, #+320] \ 00000308 CC0B98E5 LDR R0,[R8, #+3020] \ 0000030C 300187E5 STR R0,[R7, #+304] \ 00000310 7000A0E3 MOV R0,#+112 \ 00000314 400D80E3 ORR R0,R0,#0x1000 \ 00000318 059080E0 ADD R9,R0,R5 \ 0000031C 600099E5 LDR R0,[R9, #+96] \ 00000320 340187E5 STR R0,[R7, #+308] \ 00000324 D00099E5 LDR R0,[R9, #+208] \ 00000328 2C0187E5 STR R0,[R7, #+300] \ 0000032C B40498E5 LDR R0,[R8, #+1204] \ 00000330 380187E5 STR R0,[R7, #+312] \ 00000334 D40598E5 LDR R0,[R8, #+1492] \ 00000338 440187E5 STR R0,[R7, #+324] \ 0000033C AC0C98E5 LDR R0,[R8, #+3244] \ 00000340 500187E5 STR R0,[R7, #+336] \ 00000344 DA0E87E2 ADD R0,R7,#+3488 \ 00000348 160000EF SWI +22 909 sprintf(NATICQ_HOST,per_s,myConf->NATICQ_HOST); \ 0000034C C02085E2 ADD R2,R5,#+192 \ 00000350 071084E0 ADD R1,R4,R7 \ 00000354 DE0E87E2 ADD R0,R7,#+3552 \ 00000358 160000EF SWI +22 910 NATICQ_PORT=myConf->NATICQ_PORT; \ 0000035C 400198E5 LDR R0,[R8, #+320] 911 RECONNECT_TIME=myConf->RECONNECT_TIME; //2058 912 913 vibraPower=myConf->vibraPower; 914 915 IDLEICON_X=myConf->IDLEICON_X; 916 IDLEICON_Y=myConf->IDLEICON_Y; 917 918 I_COLOR=myConf->I_COLOR; 919 TO_COLOR=myConf->TO_COLOR; 920 X_COLOR=myConf->X_COLOR; 921 O_I_COLOR=myConf->O_I_COLOR; 922 O_TO_COLOR=myConf->O_TO_COLOR; 923 O_X_COLOR=myConf->O_X_COLOR; 924 925 ED_FONT_SIZE=myConf->ED_FONT_SIZE; 926 ED_H_FONT_SIZE=myConf->ED_H_FONT_SIZE; 927 ED_X_FONT_SIZE=myConf->ED_X_FONT_SIZE; 928 O_ED_FONT_SIZE=myConf->O_ED_FONT_SIZE; 929 O_ED_H_FONT_SIZE=myConf->O_ED_H_FONT_SIZE; 930 O_ED_X_FONT_SIZE=myConf->O_ED_X_FONT_SIZE; 931 932 ACK_COLOR=myConf->ACK_COLOR; 933 UNACK_COLOR=myConf->UNACK_COLOR; 934 935 color_choose=myConf->color_choose; 936 937 ENA_AUTO_XTXT=myConf->ENA_AUTO_XTXT; 938 NOT_LOG_SAME_XTXT=myConf->NOT_LOG_SAME_XTXT; 939 LOG_XTXT=myConf->LOG_XTXT; 940 941 HISTORY_BUFFER=myConf->HISTORY_BUFFER; 942 943 //Illumination by BoBa 19.04.2007 944 /////////// 945 ILL_DISP_RECV=myConf->ILL_DISP_RECV; 946 ILL_KEYS_RECV=myConf->ILL_KEYS_RECV; 947 ILL_DISP_SEND=myConf->ILL_DISP_SEND; 948 ILL_KEYS_SEND=myConf->ILL_KEYS_SEND; 949 ILL_SEND_TMR=myConf->ILL_SEND_TMR; 950 ILL_SEND_FADE=myConf->ILL_SEND_FADE; 951 ILL_RECV_TMR=myConf->ILL_RECV_TMR; 952 ILL_RECV_FADE=myConf->ILL_RECV_FADE; 953 ILL_OFF_FADE=myConf->ILL_OFF_FADE; 954 955 //=============================Проигрывание звука======================= 956 957 sprintf(sndStartup,per_s,myConf->sndStartup); \ 00000360 071084E0 ADD R1,R4,R7 \ 00000364 DC0187E5 STR R0,[R7, #+476] \ 00000368 700198E5 LDR R0,[R8, #+368] \ 0000036C E00187E5 STR R0,[R7, #+480] \ 00000370 300099E5 LDR R0,[R9, #+48] \ 00000374 540187E5 STR R0,[R7, #+340] \ 00000378 800498E5 LDR R0,[R8, #+1152] \ 0000037C 580187E5 STR R0,[R7, #+344] \ 00000380 840498E5 LDR R0,[R8, #+1156] \ 00000384 5C0187E5 STR R0,[R7, #+348] \ 00000388 700698E5 LDR R0,[R8, #+1648] \ 0000038C 680187E5 STR R0,[R7, #+360] \ 00000390 A00698E5 LDR R0,[R8, #+1696] \ 00000394 6C0187E5 STR R0,[R7, #+364] \ 00000398 D00698E5 LDR R0,[R8, #+1744] \ 0000039C 700187E5 STR R0,[R7, #+368] \ 000003A0 900798E5 LDR R0,[R8, #+1936] \ 000003A4 740187E5 STR R0,[R7, #+372] \ 000003A8 C00798E5 LDR R0,[R8, #+1984] \ 000003AC 780187E5 STR R0,[R7, #+376] \ 000003B0 F00798E5 LDR R0,[R8, #+2032] \ 000003B4 7C0187E5 STR R0,[R7, #+380] \ 000003B8 000798E5 LDR R0,[R8, #+1792] \ 000003BC 800187E5 STR R0,[R7, #+384] \ 000003C0 300798E5 LDR R0,[R8, #+1840] \ 000003C4 840187E5 STR R0,[R7, #+388] \ 000003C8 600798E5 LDR R0,[R8, #+1888] \ 000003CC 880187E5 STR R0,[R7, #+392] \ 000003D0 200898E5 LDR R0,[R8, #+2080] \ 000003D4 8C0187E5 STR R0,[R7, #+396] \ 000003D8 500898E5 LDR R0,[R8, #+2128] \ 000003DC 900187E5 STR R0,[R7, #+400] \ 000003E0 800898E5 LDR R0,[R8, #+2176] \ 000003E4 940187E5 STR R0,[R7, #+404] \ 000003E8 B00898E5 LDR R0,[R8, #+2224] \ 000003EC 980187E5 STR R0,[R7, #+408] \ 000003F0 E00898E5 LDR R0,[R8, #+2272] \ 000003F4 9C0187E5 STR R0,[R7, #+412] \ 000003F8 100998E5 LDR R0,[R8, #+2320] \ 000003FC A00087E5 STR R0,[R7, #+160] \ 00000400 FC0D98E5 LDR R0,[R8, #+3580] \ 00000404 A00187E5 STR R0,[R7, #+416] \ 00000408 6C0E98E5 LDR R0,[R8, #+3692] \ 0000040C A40187E5 STR R0,[R7, #+420] \ 00000410 8C0D98E5 LDR R0,[R8, #+3468] \ 00000414 A80187E5 STR R0,[R7, #+424] \ 00000418 DC0E98E5 LDR R0,[R8, #+3804] \ 0000041C AC0187E5 STR R0,[R7, #+428] \ 00000420 980998E5 LDR R0,[R8, #+2456] \ 00000424 B00187E5 STR R0,[R7, #+432] \ 00000428 C80998E5 LDR R0,[R8, #+2504] \ 0000042C B40187E5 STR R0,[R7, #+436] \ 00000430 580A98E5 LDR R0,[R8, #+2648] \ 00000434 BC0187E5 STR R0,[R7, #+444] \ 00000438 880A98E5 LDR R0,[R8, #+2696] \ 0000043C C00187E5 STR R0,[R7, #+448] \ 00000440 B80A98E5 LDR R0,[R8, #+2744] \ 00000444 C40187E5 STR R0,[R7, #+452] \ 00000448 E80A98E5 LDR R0,[R8, #+2792] \ 0000044C C80187E5 STR R0,[R7, #+456] \ 00000450 F80998E5 LDR R0,[R8, #+2552] \ 00000454 B80187E5 STR R0,[R7, #+440] \ 00000458 280A98E5 LDR R0,[R8, #+2600] \ 0000045C CC0187E5 STR R0,[R7, #+460] \ 00000460 180B98E5 LDR R0,[R8, #+2840] \ 00000464 D00187E5 STR R0,[R7, #+464] \ 00000468 970E84E2 ADD R0,R4,#+2416 \ 0000046C 052080E0 ADD R2,R0,R5 \ 00000470 A60E87E2 ADD R0,R7,#+2656 \ 00000474 160000EF SWI +22 958 sprintf(sndSrvMsg,per_s,myConf->sndSrvMsg); \ 00000478 B800A0E3 MOV R0,#+184 \ 0000047C 480D80E3 ORR R0,R0,#0x1200 \ 00000480 052080E0 ADD R2,R0,R5 \ 00000484 071084E0 ADD R1,R4,R7 \ 00000488 AA0E87E2 ADD R0,R7,#+2720 \ 0000048C 160000EF SWI +22 959 sprintf(sndGlobal,per_s,myConf->sndGlobal); \ 00000490 2400A0E3 MOV R0,#+36 \ 00000494 4C0D80E3 ORR R0,R0,#0x1300 \ 00000498 052080E0 ADD R2,R0,R5 \ 0000049C 071084E0 ADD R1,R4,R7 \ 000004A0 AE0E87E2 ADD R0,R7,#+2784 \ 000004A4 160000EF SWI +22 960 sprintf(sndGlobal2,per_s,myConf->sndGlobal2); \ 000004A8 6800A0E3 MOV R0,#+104 \ 000004AC 500D80E3 ORR R0,R0,#0x1400 \ 000004B0 052080E0 ADD R2,R0,R5 \ 000004B4 071084E0 ADD R1,R4,R7 \ 000004B8 B20E87E2 ADD R0,R7,#+2848 \ 000004BC 160000EF SWI +22 961 sprintf(sndMsg,per_s,myConf->sndMsg); \ 000004C0 9000A0E3 MOV R0,#+144 \ 000004C4 4C0D80E3 ORR R0,R0,#0x1300 \ 000004C8 052080E0 ADD R2,R0,R5 \ 000004CC 071084E0 ADD R1,R4,R7 \ 000004D0 B60E87E2 ADD R0,R7,#+2912 \ 000004D4 160000EF SWI +22 962 sprintf(sndMsg2,per_s,myConf->sndMsg2); \ 000004D8 D400A0E3 MOV R0,#+212 \ 000004DC 500D80E3 ORR R0,R0,#0x1400 \ 000004E0 052080E0 ADD R2,R0,R5 \ 000004E4 071084E0 ADD R1,R4,R7 \ 000004E8 BA0E87E2 ADD R0,R7,#+2976 \ 000004EC 160000EF SWI +22 963 extended_sounds=myConf->extended_sounds; \ 000004F0 6C0199E5 LDR R0,[R9, #+364] 964 sprintf(sndMsgSent,per_s,myConf->sndMsgSent); \ 000004F4 071084E0 ADD R1,R4,R7 \ 000004F8 D40187E5 STR R0,[R7, #+468] \ 000004FC B20E84E2 ADD R0,R4,#+2848 \ 00000500 052080E0 ADD R2,R0,R5 \ 00000504 BE0E87E2 ADD R0,R7,#+3040 \ 00000508 160000EF SWI +22 965 sndVolume=myConf->sndVolume; \ 0000050C 000099E5 LDR R0,[R9, #+0] 966 967 //----------------------------------------- 968 969 vibraPower=myConf->vibraPower; 970 971 sprintf(TEMPLATES_PATH,per_s,myConf->TEMPLATES_PATH); \ 00000510 FA2F85E2 ADD R2,R5,#+1000 \ 00000514 D80187E5 STR R0,[R7, #+472] \ 00000518 300099E5 LDR R0,[R9, #+48] \ 0000051C 071084E0 ADD R1,R4,R7 \ 00000520 540187E5 STR R0,[R7, #+340] \ 00000524 CA0E87E2 ADD R0,R7,#+3232 \ 00000528 160000EF SWI +22 972 sprintf(ICON_PATH,per_s,myConf->ICON_PATH); \ 0000052C C42F85E2 ADD R2,R5,#+784 \ 00000530 071084E0 ADD R1,R4,R7 \ 00000534 CE0E87E2 ADD R0,R7,#+3296 \ 00000538 160000EF SWI +22 973 sprintf(SMILE_FILE,per_s,myConf->SMILE_FILE); \ 0000053C 8E2F85E2 ADD R2,R5,#+568 \ 00000540 071084E0 ADD R1,R4,R7 \ 00000544 C60E87E2 ADD R0,R7,#+3168 \ 00000548 160000EF SWI +22 974 sprintf(SMILE_PATH,per_s,myConf->SMILE_PATH); \ 0000054C A92F85E2 ADD R2,R5,#+676 \ 00000550 071084E0 ADD R1,R4,R7 \ 00000554 D20E87E2 ADD R0,R7,#+3360 \ 00000558 160000EF SWI +22 975 sprintf(XSTATUSES_PATH,per_s,myConf->XSTATUSES_PATH); \ 0000055C DF2F85E2 ADD R2,R5,#+892 \ 00000560 071084E0 ADD R1,R4,R7 \ 00000564 D60E87E2 ADD R0,R7,#+3424 \ 00000568 160000EF SWI +22 976 977 978 //----------------------------------------- 979 980 mfree(myConf); \ 0000056C 0500A0E1 MOV R0,R5 \ 00000570 150000EF SWI +21 981 mfree(myConfMod); \ 00000574 0600A0E1 MOV R0,R6 \ 00000578 150000EF SWI +21 \ 0000057C F08FBDE8 POP {R4-R11,PC} 982 } 983 else 984 { 985 LockSched(); \ ??UpdateConfig_3: \ 00000580 460100EF SWI +326 986 ShowMSG(1,(int)"Can't open configs!"); \ 00000584 0910A0E1 MOV R1,R9 \ 00000588 0100A0E3 MOV R0,#+1 \ 0000058C 480100EF SWI +328 987 UnlockSched(); \ 00000590 470100EF SWI +327 988 void ElfKiller(void); 989 SUBPROC((void *)ElfKiller); \ 00000594 ........ LDR R0,??DataTable1 ;; ElfKiller \ 00000598 710100EF SWI +369 990 } 991 } \ 0000059C F08FBDE8 POP {R4-R11,PC} ;; return \ ??UpdateConfig_0: \ 000005A0 ........ DC32 `?` 992 993 //--------------------------------------------------------------------// 994 //--------------------------------------------------------------------// 995 //--------------------------------------------------------------------// 996 \ In segment CODE, align 4, keep-with-next 997 int get_file_size(char* fname) 998 { \ get_file_size: \ 00000000 00402DE9 PUSH {LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 999 unsigned int err; 1000 FSTATS fs; 1001 if ((GetFileStats(fname,&fs,&err))==-1) return 0; \ 00000008 0D20A0E1 MOV R2,SP \ 0000000C 04108DE2 ADD R1,SP,#+4 \ 00000010 840000EF SWI +132 \ 00000014 010070E3 CMN R0,#+1 1002 return (fs.size); \ 00000018 08009D15 LDRNE R0,[SP, #+8] \ 0000001C 2CD08DE2 ADD SP,SP,#+44 \ 00000020 0000A003 MOVEQ R0,#+0 \ 00000024 0080BDE8 POP {PC} ;; return 1003 } 1004 1005 extern int *XStatusesIconArray; 1006 1007 #ifndef NEWSGOLD 1008 #define SEND_TIMER 1009 #endif 1010 1011 #ifdef ELKA 1012 #pragma swi_number=54 1013 __swi __arm void SLI_SetState(unsigned char state); 1014 #endif 1015 1016 #define IN_TICKS(sec) (sec * TMR_SECOND) 1017 1018 int main_d; 1019 int align=0; 1020 //int space=1; 1021 void *canvasdata; 1022 int paused_height; 1023 WSHDR *wsBuffer;//мультибуффер 1024 1025 char talk_sound[128]; 1026 int uins; 1027 //char m_1[]="unofficial! private use only"; 1028 //char m_2[]="mod by (c)Evilfox 315384924"; 1029 char unread_msg_info[64]; 1030 1031 int saver_on; 1032 1033 #ifdef NEWSGOLD 1034 extern char teast2[256]; 1035 #endif 1036 1037 #ifdef ELKA 1038 char last_msg_buffer[4048]; 1039 #endif 1040 1041 1042 ///////////////////////////////////////////////auto ping//////////////////// 1043 GBSTMR mytmr3; 1044 static void PingToServer2(void) 1045 { 1046 TPKT *p; 1047 p=malloc(sizeof(PKT)+sizeof(TTime)); 1048 GetDateTime(NULL,(TTime *)p->data); 1049 p->pkt.uin=0; 1050 p->pkt.type=T_ECHO; 1051 p->pkt.data_len=sizeof(TTime); 1052 SUBPROC((void *)SendAnswer,0,p); 1053 } 1054 1055 int Is_PING_On; 1056 \ In segment CODE, align 4, keep-with-next 1057 void Pinger2() 1058 { \ Pinger2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1059 if(Is_PING_On) \ 00000004 ........ LDR R5,??DataTable2 ;; Pinger2 \ 00000008 ........ LDR R6,??DataTable18 ;; S_ICONS \ 0000000C FA4EA0E3 MOV R4,#+4000 \ 00000010 000296E5 LDR R0,[R6, #+512] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1400000A BEQ ??Pinger2_0 1060 { 1061 PingToServer2(); \ 0000001C 1000A0E3 MOV R0,#+16 \ 00000020 140000EF SWI +20 \ 00000024 0070A0E1 MOV R7,R0 \ 00000028 081087E2 ADD R1,R7,#+8 \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 B40000EF SWI +180 \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 000087E5 STR R0,[R7, #+0] \ 0000003C 1200A0E3 MOV R0,#+18 \ 00000040 B400C7E1 STRH R0,[R7, #+4] \ 00000044 0800A0E3 MOV R0,#+8 \ 00000048 B600C7E1 STRH R0,[R7, #+6] \ 0000004C ........ LDR R0,??DataTable4 ;; SendAnswer \ 00000050 0720A0E1 MOV R2,R7 \ 00000054 0010A0E3 MOV R1,#+0 \ 00000058 710100EF SWI +369 1062 GBS_StartTimerProc(&mytmr3, 12960, Pinger2); \ 0000005C 0520A0E1 MOV R2,R5 \ 00000060 8C1D84E2 ADD R1,R4,#+8960 \ 00000064 060084E0 ADD R0,R4,R6 \ 00000068 4D0000EF SWI +77 \ 0000006C F080BDE8 POP {R4-R7,PC} 1063 } 1064 else 1065 GBS_StartTimerProc(&mytmr3, 2160, Pinger2); \ ??Pinger2_0: \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 871EA0E3 MOV R1,#+2160 \ 00000078 060084E0 ADD R0,R4,R6 \ 0000007C 4D0000EF SWI +77 1066 } \ 00000080 F080BDE8 POP {R4-R7,PC} ;; return 1067 1068 //////////////////////////////////////auto ping///////////////////////////// 1069 1070 extern volatile int total_smiles; 1071 extern volatile int total_xstatuses; 1072 extern volatile int xstatuses_load; 1073 extern volatile int pictures_max; //2026rev 1074 extern volatile int pictures_loaded; //2026rev 1075 1076 #ifdef ELKA 1077 int Is_SLI_On;//мигаем светодиодом 1078 #endif 1079 1080 int Is_SMARTCPU_On;//Вывод сообщений на гэ 1081 int Is_INC_On;//Popup message 1082 int Is_ILU_On;//Режим подсветки 1083 int Is_Double_Vibra_On;//Режим напоминания 1084 int total_unread; 1085 int total_unread2; 1086 1087 #ifdef ELKA 1088 const int SLI_TYPE=1; 1089 #endif 1090 1091 char PINGO[256]; 1092 1093 #ifdef ELKA 1094 extern const unsigned int SLI_time; 1095 extern const unsigned int SLI_time2; 1096 #endif 1097 #define USE_MLMENU 1098 1099 #define TMR_SECOND 216 1100 1101 //IPC 1102 const char ipc_my_name[32]=IPC_NATICQ_NAME; 1103 const char ipc_xtask_name[]=IPC_XTASK_NAME; 1104 const char ipc_test_name[]="test"; 1105 IPC_REQ gipc; 1106 1107 1108 char elf_path[256]; 1109 int maincsm_id; 1110 int maingui_id; 1111 \ In segment CODE, align 4, keep-with-next 1112 void SMART_REDRAW(void) 1113 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 1114 int f; 1115 LockSched(); \ 00000004 460100EF SWI +326 1116 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 540 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 1117 UnlockSched(); \ 00000018 470100EF SWI +327 1118 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 1119 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 540 1120 1121 //По 10 секунд 1122 #define ACTIVE_TIME 360 1123 1124 //Максимальное количество сообщений в логе 1125 #define MAXLOGMSG (20) 1126 1127 // Строковые описания статусов 1128 1129 const char S_OFFLINE[]="Offline"; 1130 const char S_INVISIBLE[]="Invisible"; 1131 const char S_AWAY[]="Away"; 1132 const char S_NA[]="N/A"; 1133 const char S_OCCUPIED[]="Occupied"; 1134 const char S_DND[]="DND"; 1135 const char S_ONLINE[]="Online"; 1136 const char S_FFC[]="FFC"; 1137 1138 volatile int SENDMSGCOUNT; 1139 #ifdef kluchnik 1140 int IsActiveUp=1; 1141 #else 1142 int IsActiveUp=0; 1143 #endif 1144 int Is_Vibra_Enabled; \ In segment DATA_Z, align 4, align-sorted 1145 int Is_Id3tag_Enabled; \ Is_Id3tag_Enabled: \ 00000000 DS8 4 1146 unsigned int Is_Sounds_Enabled; 1147 int Is_Show_Offline; 1148 int Is_Show_Groups; 1149 1150 int S_ICONS[TOTAL_ICONS+1]; 1151 1152 #define EOP -10 1153 int CurrentStatus; 1154 #ifdef NEWSGOLD 1155 extern int CurrentXStatus; 1156 #else 1157 int CurrentXStatus; 1158 #endif 1159 1160 WSHDR *ews; 1161 1162 1163 static const char * const icons_names[TOTAL_ICONS]= 1164 { 1165 "offline.png", 1166 "invisible.png", 1167 "away.png", 1168 "na.png", 1169 "occupied.png", 1170 "dnd.png", 1171 "depression.png", 1172 "evil.png", 1173 "home.png", 1174 "lunch.png", 1175 "work.png", 1176 "online.png", 1177 "ffc.png", 1178 "message.png", 1179 "unknown.png", 1180 "groupon.png", 1181 "groupoff.png", 1182 "null.png", 1183 "addcont.png", 1184 "head.png", 1185 "logo.png", 1186 "ping.png", 1187 "settings.png", 1188 "vis1.png", 1189 "vis2.png", 1190 "vis3.png", 1191 "vis4.png", 1192 "vis5.png" 1193 }; 1194 1195 1196 1197 ////=================================away_msg============== 1198 //0080: 0xA0702CF5 ; 020: DrawScreenSaver 1199 #pragma swi_number=0x020 //by kluchnik 04.04.08 1200 __swi __arm int DrawScreenSaver(); 1201 1202 #ifdef NEWSGOLD 1203 #pragma swi_number=0x0C5 1204 __swi __arm int IsIdleUiOnTop();//На сг нет этой функции 1205 #else \ In segment CODE, align 4, keep-with-next 1206 int IsIdleUiOnTop(void) 1207 { \ IsIdleUiOnTop: \ 00000000 00402DE9 PUSH {LR} 1208 void *icsm=FindCSMbyID(CSM_root()->idle_id); \ 00000004 068100EF SWI +33030 \ 00000008 040090E5 LDR R0,[R0, #+4] \ 0000000C 080100EF SWI +264 1209 if (IsGuiOnTop(((int*)icsm)[DISPLACE_OF_IDLEGUI_ID/4 ])) \ 00000010 280090E5 LDR R0,[R0, #+40] \ 00000014 350100EF SWI +309 \ 00000018 000050E3 CMP R0,#+0 1210 return(1); \ 0000001C 0100A013 MOVNE R0,#+1 1211 else 1212 return(0); \ 00000020 0080BDE8 POP {PC} ;; return 1213 } 1214 #endif 1215 1216 1217 //------------------------ SCREEN SAVER TIMER ---------------------------// 1218 1219 GBSTMR scrsTmr; 1220 int scrsTime; \ In segment CODE, align 4, keep-with-next 1221 void ScreenSaverTimer() 1222 { \ ScreenSaverTimer: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1223 if(scrsTime==screenSaverTime) \ 00000004 ........ LDR R4,??DataTable18 ;; S_ICONS \ 00000008 5C709FE5 LDR R7,??ScreenSaverTimer_0 ;; ScreenSaverTimer \ 0000000C 201194E5 LDR R1,[R4, #+288] \ 00000010 B000A0E3 MOV R0,#+176 \ 00000014 400D80E3 ORR R0,R0,#0x1000 \ 00000018 045080E0 ADD R5,R0,R4 \ 0000001C 340294E5 LDR R0,[R4, #+564] \ 00000020 3860A0E3 MOV R6,#+56 \ 00000024 406E86E3 ORR R6,R6,#0x400 \ 00000028 010050E1 CMP R0,R1 \ 0000002C 0400001A BNE ??ScreenSaverTimer_1 1224 { 1225 DrawScreenSaver(); \ 00000030 200000EF SWI +32 1226 GBS_StartTimerProc(&scrsTmr, 216*5, ScreenSaverTimer); \ 00000034 0720A0E1 MOV R2,R7 \ 00000038 0610A0E1 MOV R1,R6 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 4D0000EF SWI +77 1227 } 1228 1229 if(isScreenSaverEna) \ ??ScreenSaverTimer_1: \ 00000044 240194E5 LDR R0,[R4, #+292] 1230 scrsTime++; 1231 GBS_StartTimerProc(&scrsTmr, 216*5, ScreenSaverTimer); \ 00000048 0720A0E1 MOV R2,R7 \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 34029415 LDRNE R0,[R4, #+564] \ 00000054 0610A0E1 MOV R1,R6 \ 00000058 01008012 ADDNE R0,R0,#+1 \ 0000005C 34028415 STRNE R0,[R4, #+564] \ 00000060 0500A0E1 MOV R0,R5 \ 00000064 4D0000EF SWI +77 1232 } \ 00000068 F080BDE8 POP {R4-R7,PC} ;; return \ ??ScreenSaverTimer_0: \ 0000006C ........ DC32 ScreenSaverTimer 1233 1234 //-----------------------------------------------------------------------// 1235 1236 1237 int msg_away_timer=0;//Счетчик для автостатуса 1238 char away_msg[264];//Само сообщение для ответа 1239 char away_msg_time[64];//Время когда сработал таймер 1240 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 1241 //char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 1242 char tim_zone[16]; \ In segment DATA_Z, align 4, align-sorted 1243 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 1244 int timemin; \ timemin: \ 00000000 DS8 4 1245 int away_m;//состояние автоответчика 1246 int status_rem;//Для сохранения текущего статуса 1247 int change_back_status;//вернуть предыдущий статус или нет 1248 GBSTMR away_tmr; 1249 1250 1251 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 1252 void FreeXText2(CLIST *t) 1253 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1254 if (t->xtext2) {mfree(t->xtext2);t->xtext2=NULL;} \ 00000008 A80094E5 LDR R0,[R4, #+168] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C A80084E5 STR R0,[R4, #+168] 1255 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1256 \ In segment CODE, align 4, keep-with-next 1257 void away_timer()//Таймер автостатуса 1258 { \ away_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1259 if(msg_away_timer==AUTO_ENGADE) \ 00000004 ........ LDR R4,??DataTable18 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 380294E5 LDR R0,[R4, #+568] \ 00000010 D41094E5 LDR R1,[R4, #+212] \ 00000014 010050E1 CMP R0,R1 \ 00000018 2000001A BNE ??away_timer_0 1260 { 1261 TTime tt; 1262 GetDateTime(NULL,&tt); 1263 sprintf(away_msg_time_dace, "%2d:%2d", tt.hour, tt.min); \ 0000001C AC509FE5 LDR R5,??away_timer_1 ;; `?` \ 0000000C 1800A0E3 MOV R0,#+24 \ 00000010 480D80E3 ORR R0,R0,#0x1200 \ 00000014 020080E0 ADD R0,R0,R2 \ 00000018 F82092E5 LDR R2,[R2, #+248] \ 0000001C 200052E3 CMP R2,#+32 \ 00000020 0080BD88 POPHI {PC} \ 00000024 013F8FE2 ADR R3,??init_time_zone_0 \ 00000028 0230D3E7 LDRB R3,[R3, R2] \ 0000002C 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??init_time_zone_0: \ 00000030 080A0D10 DC8 +8,+10,+13,+16 \ 00000034 12141618 DC8 +18,+20,+22,+24 \ 00000038 1A1C1E20 DC8 +26,+28,+30,+32 \ 0000003C 22242628 DC8 +34,+36,+38,+40 \ 00000040 2A2C2E30 DC8 +42,+44,+46,+48 \ 00000044 32343638 DC8 +50,+52,+54,+56 \ 00000048 3A3C3E40 DC8 +58,+60,+62,+64 \ 0000004C 42444648 DC8 +66,+68,+70,+72 \ 00000050 4A000000 DC8 +74,+0,+0,+0 1285 { 1286 case 0: 1287 sprintf(tim_zone, "GMT -12:00"); \ ??init_time_zone_2: \ 00000054 601F81E2 ADD R1,R1,#+384 \ 00000058 030000EA B ??init_time_zone_3 1288 break; 1289 case 1: 1290 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_4: \ 0000005C 5D1F81E2 ADD R1,R1,#+372 \ 00000060 160000EF SWI +22 \ 00000064 0080BDE8 POP {PC} 1291 break; 1292 case 2: 1293 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_5: \ 00000068 5A1F81E2 ADD R1,R1,#+360 \ ??init_time_zone_3: \ 0000006C 160000EF SWI +22 \ 00000070 0080BDE8 POP {PC} 1294 break; 1295 case 3: 1296 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_6: \ 00000074 571F81E2 ADD R1,R1,#+348 \ 00000078 FBFFFFEA B ??init_time_zone_3 1297 break; 1298 case 4: 1299 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_7: \ 0000007C 541F81E2 ADD R1,R1,#+336 \ 00000080 F9FFFFEA B ??init_time_zone_3 1300 break; 1301 case 5: 1302 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_8: \ 00000084 511F81E2 ADD R1,R1,#+324 \ 00000088 F7FFFFEA B ??init_time_zone_3 1303 break; 1304 case 6: 1305 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_9: \ 0000008C D81081E2 ADD R1,R1,#+216 \ 00000090 F5FFFFEA B ??init_time_zone_3 1306 break; 1307 case 7: 1308 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_10: \ 00000094 4E1F81E2 ADD R1,R1,#+312 \ 00000098 F3FFFFEA B ??init_time_zone_3 1309 break; 1310 case 8: 1311 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_11: \ 0000009C 4B1F81E2 ADD R1,R1,#+300 \ 000000A0 F1FFFFEA B ??init_time_zone_3 1312 break; 1313 case 9: 1314 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_12: \ 000000A4 481F81E2 ADD R1,R1,#+288 \ 000000A8 EFFFFFEA B ??init_time_zone_3 1315 break; 1316 case 10: 1317 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_13: \ 000000AC 451F81E2 ADD R1,R1,#+276 \ 000000B0 EDFFFFEA B ??init_time_zone_3 1318 break; 1319 case 11: 1320 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_14: \ 000000B4 421F81E2 ADD R1,R1,#+264 \ 000000B8 EBFFFFEA B ??init_time_zone_3 1321 break; 1322 case 12: 1323 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_15: \ 000000BC FC1081E2 ADD R1,R1,#+252 \ 000000C0 E9FFFFEA B ??init_time_zone_3 1324 break; 1325 case 13: 1326 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_16: \ 000000C4 F01081E2 ADD R1,R1,#+240 \ 000000C8 E7FFFFEA B ??init_time_zone_3 1327 break; 1328 case 14: 1329 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_17: \ 000000CC E41081E2 ADD R1,R1,#+228 \ 000000D0 E5FFFFEA B ??init_time_zone_3 1330 break; 1331 case 15: 1332 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_18: \ 000000D4 CC1081E2 ADD R1,R1,#+204 \ 000000D8 E3FFFFEA B ??init_time_zone_3 1333 break; 1334 case 16: 1335 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_19: \ 000000DC C01081E2 ADD R1,R1,#+192 \ 000000E0 E1FFFFEA B ??init_time_zone_3 1336 break; 1337 case 17: 1338 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_20: \ 000000E4 B41081E2 ADD R1,R1,#+180 \ 000000E8 DFFFFFEA B ??init_time_zone_3 1339 break; 1340 case 18: 1341 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_21: \ 000000EC A81081E2 ADD R1,R1,#+168 \ 000000F0 DDFFFFEA B ??init_time_zone_3 1342 break; 1343 case 19: 1344 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_22: \ 000000F4 9C1081E2 ADD R1,R1,#+156 \ 000000F8 DBFFFFEA B ??init_time_zone_3 1345 break; 1346 case 20: 1347 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_23: \ 000000FC 901081E2 ADD R1,R1,#+144 \ 00000100 D9FFFFEA B ??init_time_zone_3 1348 break; 1349 case 21: 1350 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_24: \ 00000104 841081E2 ADD R1,R1,#+132 \ 00000108 D7FFFFEA B ??init_time_zone_3 1351 break; 1352 case 22: 1353 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_25: \ 0000010C 781081E2 ADD R1,R1,#+120 \ 00000110 D5FFFFEA B ??init_time_zone_3 1354 break; 1355 case 23: 1356 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_26: \ 00000114 6C1081E2 ADD R1,R1,#+108 \ 00000118 D3FFFFEA B ??init_time_zone_3 1357 break; 1358 case 24: 1359 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_27: \ 0000011C 601081E2 ADD R1,R1,#+96 \ 00000120 D1FFFFEA B ??init_time_zone_3 1360 break; 1361 case 25: 1362 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_28: \ 00000124 541081E2 ADD R1,R1,#+84 \ 00000128 CFFFFFEA B ??init_time_zone_3 1363 break; 1364 case 26: 1365 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_29: \ 0000012C 481081E2 ADD R1,R1,#+72 \ 00000130 CDFFFFEA B ??init_time_zone_3 1366 break; 1367 case 27: 1368 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_30: \ 00000134 3C1081E2 ADD R1,R1,#+60 \ 00000138 CBFFFFEA B ??init_time_zone_3 1369 break; 1370 case 28: 1371 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_31: \ 0000013C 301081E2 ADD R1,R1,#+48 \ 00000140 C9FFFFEA B ??init_time_zone_3 1372 break; 1373 case 29: 1374 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_32: \ 00000144 241081E2 ADD R1,R1,#+36 \ 00000148 C7FFFFEA B ??init_time_zone_3 1375 break; 1376 case 30: 1377 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_33: \ 0000014C 181081E2 ADD R1,R1,#+24 \ 00000150 C5FFFFEA B ??init_time_zone_3 1378 break; 1379 case 31: 1380 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_34: \ 00000154 0C1081E2 ADD R1,R1,#+12 \ 00000158 C3FFFFEA B ??init_time_zone_3 1381 break; 1382 case 32: 1383 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_35: \ 0000015C 160000EF SWI +22 1384 break; 1385 } 1386 } \ ??init_time_zone_36: \ 00000160 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000164 ........ DC32 `?` 1387 1388 //=================================away_msg=============== 1389 //////////////////////////////////////////tozhe dlja auto ping/////////////// 1390 \ In segment CODE, align 4, keep-with-next 1391 void DrawPing(void *canv) 1392 { 1393 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R0,??DataTable18 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 CC1090E5 LDR R1,[R0, #+204] \ 0000000C FB2E80E2 ADD R2,R0,#+4016 \ 00000010 02002DE9 PUSH {R1} \ 00000014 C81090E5 LDR R1,[R0, #+200] \ 00000018 02002DE9 PUSH {R1} \ 0000001C E83190E5 LDR R3,[R0, #+488] \ 00000020 AC1090E5 LDR R1,[R0, #+172] \ 00000024 A80090E5 LDR R0,[R0, #+168] \ 00000028 ........ _BLF PrintField,??PrintField??rA 1394 } \ 0000002C 0380BDE8 POP {R0,R1,PC} ;; return 1395 1396 //////////////////////////////////////////tozhe dlja auto ping/////////////// 1397 1398 GBSTMR mytmr; 1399 GBSTMR mytmr2; 1400 volatile int vibra_count; 1401 #ifdef ELKA 1402 void SLI_Off(void); 1403 #endif 1404 void start_vibra2(void); 1405 1406 //////////////////////////reminder timer///////////////////////// 1407 \ In segment CODE, align 4, keep-with-next 1408 void Remind_Timer2() 1409 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 1410 if (total_unread) \ 00000004 ........ LDR R4,??DataTable18 ;; S_ICONS \ 00000008 B80294E5 LDR R0,[R4, #+696] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 1411 { 1412 vibra_count=Vibra_cc; \ 00000014 A40094E5 LDR R0,[R4, #+164] \ 00000018 840284E5 STR R0,[R4, #+644] 1413 start_vibra2(); \ 0000001C ........ BL start_vibra2 1414 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ 00000020 ........ LDR R2,??DataTable11 ;; Remind_Timer2 \ 00000024 5010A0E3 MOV R1,#+80 \ 00000028 641D81E3 ORR R1,R1,#0x1900 \ 0000002C 4800A0E3 MOV R0,#+72 \ 00000030 480D80E3 ORR R0,R0,#0x1200 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 1415 } 1416 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return 1417 \ In segment CODE, align 4, keep-with-next 1418 void Reminder_timer() 1419 { 1420 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable11 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 4680 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 1421 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 S_ICONS + 4680 1422 //////////////////////////reminder timer///////////////////////// 1423 1424 //////////////////////////uptime////////////////////////// 1425 int Is_UPTIME_On; 1426 //int xstatus_old; 1427 int uptimeHour; 1428 //int minimum_xstatus; 1429 int uptimeMin; 1430 //int maximum; 1431 int uptimeSec; 1432 \ In segment CODE, align 4, keep-with-next 1433 void UptimeMinHour() 1434 { 1435 uptimeSec++; \ UptimeMinHour: \ 00000000 ........ LDR R0,??DataTable18 ;; S_ICONS \ 00000004 581290E5 LDR R1,[R0, #+600] 1436 if(uptimeSec==60) \ 00000008 542290E5 LDR R2,[R0, #+596] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 1437 { 1438 // if(saver_on) reftes(); 1439 uptimeSec=0; \ 00000014 0010A003 MOVEQ R1,#+0 1440 uptimeMin++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C 581280E5 STR R1,[R0, #+600] 1441 } 1442 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 1443 { 1444 uptimeMin=0; 1445 uptimeHour++; \ 00000028 501290E5 LDR R1,[R0, #+592] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 501280E5 STR R1,[R0, #+592] \ ??UptimeMinHour_0: \ 00000038 542280E5 STR R2,[R0, #+596] 1446 } 1447 } \ 0000003C 1EFF2FE1 BX LR ;; return 1448 1449 GBSTMR mytmr4; 1450 #ifdef NEWSGOLD 1451 GBSTMR tracktmr; 1452 int tracktimer; 1453 #endif 1454 \ In segment CODE, align 4, keep-with-next 1455 void upTime() 1456 { 1457 if(connect_state==3) \ upTime: \ 00000000 ........ LDR R0,??DataTable18 ;; S_ICONS \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 44509FE5 LDR R5,??upTime_0 ;; upTime \ 0000000C 5810A0E3 MOV R1,#+88 \ 00000010 481D81E3 ORR R1,R1,#0x1200 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 941290E5 LDR R1,[R0, #+660] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0100001A BNE ??upTime_1 1458 { 1459 UptimeMinHour(); \ 00000024 ........ BL UptimeMinHour 1460 #ifdef NEWSGOLD 1461 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ 1462 { 1463 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); 1464 tracktimer=0; 1465 } 1466 tracktimer++; 1467 #endif 1468 GBS_StartTimerProc(&mytmr4, 216, upTime); \ 00000028 040000EA B ??upTime_2 1469 } 1470 else 1471 { 1472 if(!Pause_Time) \ ??upTime_1: \ 0000002C DC1090E5 LDR R1,[R0, #+220] \ 00000030 000051E3 CMP R1,#+0 1473 { 1474 uptimeHour=0; \ 00000034 50128005 STREQ R1,[R0, #+592] 1475 uptimeMin=0; \ 00000038 54128005 STREQ R1,[R0, #+596] 1476 uptimeSec=0; \ 0000003C 58128005 STREQ R1,[R0, #+600] 1477 } 1478 GBS_StartTimerProc(&mytmr4, 216, upTime); \ ??upTime_2: \ 00000040 0520A0E1 MOV R2,R5 \ 00000044 D810A0E3 MOV R1,#+216 \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 4D0000EF SWI +77 1479 } 1480 } \ 00000050 3080BDE8 POP {R4,R5,PC} ;; return \ ??upTime_0: \ 00000054 ........ DC32 upTime 1481 1482 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 1483 void DrawOnlineTime(void *canv) 1484 { \ DrawOnlineTime: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1485 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable18 ;; S_ICONS \ 00000008 6800A0E3 MOV R0,#+104 \ 0000000C 941294E5 LDR R1,[R4, #+660] \ 00000010 480D80E3 ORR R0,R0,#0x1200 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 ........ LDR R0,??DataTable15 ;; `?0) \ 00000004 ........ LDR R4,??DataTable18 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 5C0294E5 LDR R0,[R4, #+604] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 500000BA BLT ??show_on_contact_0 1509 { 1510 WSHDR *ws=AllocWS(64); \ 00000018 4000A0E3 MOV R0,#+64 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 1511 /* wsprintf(ws, onContact); 1512 DrawString(ws,2,2,2+Get_WS_width(ws,font)+2,2+GetFontYSIZE(font),font,0,GetPaletteAdrByColorIndex(4),GetPaletteAdrByColorIndex(1)); 1513 FreeWS(ws); 1514 INC_show2--; 1515 GBS_StartTimerProc(&incs2, 5, show_on_contact);*/ 1516 ascii2ws(ws,onContact); \ 00000024 E800A0E3 MOV R0,#+232 \ 00000028 480D80E3 ORR R0,R0,#0x1200 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 1517 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 00000038 068100EF SWI +33030 \ 0000003C 080090E5 LDR R0,[R0, #+8] 1518 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 1C219FE5 LDR R2,??show_on_contact_1 ;; `?_1` \ 00000044 0C0090E5 LDR R0,[R0, #+12] \ 00000048 480092E8 LDM R2,{R3,R6} \ 0000004C 080090E5 LDR R0,[R0, #+8] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 040090E5 LDR R0,[R0, #+4] \ 00000058 480081E8 STM R1,{R3,R6} \ 0000005C 010040E2 SUB R0,R0,#+1 1519 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000060 0820A0E3 MOV R2,#+8 \ 00000064 1C0100EF SWI +284 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0000001A BNE ??show_on_contact_2 1520 { 1521 extern void DrawScreenShot(); 1522 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 1523 } 1524 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ ??show_on_contact_2: \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 2E0100EF SWI +302 \ 0000007C 0060A0E1 MOV R6,R0 \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 2E0100EF SWI +302 \ 00000088 0070A0E1 MOV R7,R0 \ 0000008C 600294E5 LDR R0,[R4, #+608] \ 00000090 C50100EF SWI +453 \ 00000094 601294E5 LDR R1,[R4, #+608] \ 00000098 0080A0E1 MOV R8,R0 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 080200EF SWI +520 \ 000000A4 40002DE9 PUSH {R6} \ 000000A8 80002DE9 PUSH {R7} \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 02002DE9 PUSH {R1} \ 000000B4 023088E2 ADD R3,R8,#+2 \ 000000B8 022080E2 ADD R2,R0,#+2 \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 B40100EF SWI +436 1525 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,GetPaletteAdrByColorIndex(4),GetPaletteAdrByColorIndex(23)); \ 000000C4 1700A0E3 MOV R0,#+23 \ 000000C8 2E0100EF SWI +302 \ 000000CC 0060A0E1 MOV R6,R0 \ 000000D0 0400A0E3 MOV R0,#+4 \ 000000D4 2E0100EF SWI +302 \ 000000D8 0070A0E1 MOV R7,R0 \ 000000DC 600294E5 LDR R0,[R4, #+608] \ 000000E0 C50100EF SWI +453 \ 000000E4 601294E5 LDR R1,[R4, #+608] \ 000000E8 0080A0E1 MOV R8,R0 \ 000000EC 0500A0E1 MOV R0,R5 \ 000000F0 080200EF SWI +520 \ 000000F4 40002DE9 PUSH {R6} \ 000000F8 80002DE9 PUSH {R7} \ 000000FC 0010A0E3 MOV R1,#+0 \ 00000100 02002DE9 PUSH {R1} \ 00000104 601294E5 LDR R1,[R4, #+608] \ 00000108 033080E2 ADD R3,R0,#+3 \ 0000010C 02002DE9 PUSH {R1} \ 00000110 0120A0E3 MOV R2,#+1 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 011088E2 ADD R1,R8,#+1 \ 0000011C 02002DE9 PUSH {R1} \ 00000120 0210A0E1 MOV R1,R2 \ 00000124 4C0100EF SWI +332 1526 FreeWS(ws); \ 00000128 0500A0E1 MOV R0,R5 \ 0000012C 290100EF SWI +297 1527 INC_show2--; \ 00000130 5C0294E5 LDR R0,[R4, #+604] 1528 GBS_StartTimerProc(&incs2, 15, show_on_contact); \ 00000134 2C209FE5 LDR R2,??show_on_contact_1+0x4 ;; show_on_contact \ 00000138 010040E2 SUB R0,R0,#+1 \ 0000013C 5C0284E5 STR R0,[R4, #+604] \ 00000140 0F10A0E3 MOV R1,#+15 \ 00000144 2800A0E3 MOV R0,#+40 \ 00000148 4C0D80E3 ORR R0,R0,#0x1300 \ 0000014C 040080E0 ADD R0,R0,R4 \ 00000150 4D0000EF SWI +77 \ 00000154 20D08DE2 ADD SP,SP,#+32 \ 00000158 F381BDE8 POP {R0,R1,R4-R8,PC} 1529 } 1530 else 1531 RefreshGUI(); \ ??show_on_contact_0: \ 0000015C 960100EF SWI +406 1532 } \ 00000160 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return \ ??show_on_contact_1: \ 00000164 ........ DC32 `?_1` \ 00000168 ........ DC32 show_on_contact 1533 1534 1535 //---------------------- Вывод времени на идле ---------------------// 1536 1537 \ In segment CODE, align 4, keep-with-next 1538 void DrawAutoMSG(void *canv) 1539 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 1540 char awayTime[64]; 1541 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable18 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 3C0294E5 LDR R0,[R4, #+572] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 E8009415 LDRNE R0,[R4, #+232] \ 00000018 00005013 CMPNE R0,#+0 \ 0000001C 0F00000A BEQ ??DrawAutoMSG_0 1542 { 1543 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000020 40109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 00000024 0800A0E3 MOV R0,#+8 \ 00000028 480D80E3 ORR R0,R0,#0x1200 \ 0000002C 042080E0 ADD R2,R0,R4 \ 00000030 0D00A0E1 MOV R0,SP \ 00000034 160000EF SWI +22 1544 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000038 CC0094E5 LDR R0,[R4, #+204] \ 0000003C 01002DE9 PUSH {R0} \ 00000040 C80094E5 LDR R0,[R4, #+200] \ 00000044 01002DE9 PUSH {R0} \ 00000048 E83194E5 LDR R3,[R4, #+488] \ 0000004C E41094E5 LDR R1,[R4, #+228] \ 00000050 E00094E5 LDR R0,[R4, #+224] \ 00000054 08208DE2 ADD R2,SP,#+8 \ 00000058 ........ _BLF PrintField,??PrintField??rA \ 0000005C 08D08DE2 ADD SP,SP,#+8 1545 } 1546 } \ ??DrawAutoMSG_0: \ 00000060 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000064 1080BDE8 POP {R4,PC} ;; return \ ??DrawAutoMSG_1: \ 00000068 ........ DC32 `?` 1547 1548 1549 //---------------------------- Input away msg ---------------------------// 1550 1551 //Вводим сообщение какое хотим,а не то что прописали в конфиге 1552 int input_awaymsg_id; 1553 1554 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 1555 void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 1556 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 1557 { \ input_awaymsg_onkey: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 1558 WSHDR *ws; 1559 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 00000008 ........ LDR R4,??DataTable18 ;; S_ICONS \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 F210D5E1 LDRSH R1,[R5, #+2] \ 00000014 FF20A0E3 MOV R2,#+255 \ 00000018 F02E82E3 ORR R2,R2,#0xF00 \ 0000001C 020051E1 CMP R1,R2 \ 00000020 15005113 CMPNE R1,#+21 \ 00000024 1A00001A BNE ??input_awaymsg_onkey_0 1560 { 1561 EDITCONTROL ec; 1562 ExtractEditControl(data,2,&ec); \ 00000028 0D20A0E1 MOV R2,SP \ 0000002C 0210A0E3 MOV R1,#+2 \ 00000030 690100EF SWI +361 1563 ws=ec.pWS; \ 00000034 28709DE5 LDR R7,[SP, #+40] 1564 int i=0; 1565 for(i=0;iwsbody[0];i++) \ 00000038 0060A0E3 MOV R6,#+0 \ 0000003C 000097E5 LDR R0,[R7, #+0] \ 00000040 B000D0E1 LDRH R0,[R0, #+0] \ 00000044 000050E3 CMP R0,#+0 \ 00000048 0600001A BNE ??input_awaymsg_onkey_1 \ 0000004C 090000EA B ??input_awaymsg_onkey_2 1566 awayMsg[i]=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_3: \ 00000050 860080E0 ADD R0,R0,R6, LSL #+1 \ 00000054 B200D0E1 LDRH R0,[R0, #+2] \ 00000058 ........ _BLF char16to8,??char16to8??rA \ 0000005C 041086E0 ADD R1,R6,R4 \ 00000060 BC03C1E5 STRB R0,[R1, #+956] \ 00000064 016086E2 ADD R6,R6,#+1 \ ??input_awaymsg_onkey_1: \ 00000068 000097E5 LDR R0,[R7, #+0] \ 0000006C B010D0E1 LDRH R1,[R0, #+0] \ 00000070 010056E1 CMP R6,R1 \ 00000074 F5FFFFBA BLT ??input_awaymsg_onkey_3 1567 awayMsg[i++]='0'; \ ??input_awaymsg_onkey_2: \ 00000078 040086E0 ADD R0,R6,R4 \ 0000007C 3010A0E3 MOV R1,#+48 \ 00000080 BC13C0E5 STRB R1,[R0, #+956] 1568 1569 #ifdef kluchnik 1570 char *s; 1571 ExtractEditControl(data,4,&ec); 1572 ws=ec.pWS; 1573 s=malloc(ec.maxlen); 1574 for(i=0;iwsbody[0];i++) 1575 *(s+i)=char16to8(ws->wsbody[i+1]); 1576 *(s+i++)=0; 1577 strcat(awayMsg,s); 1578 #endif 1579 1580 UpdateCLheader(); \ 00000084 ........ BL UpdateCLheader 1581 GeneralFunc_flag1(input_awaymsg_id,1); \ 00000088 640294E5 LDR R0,[R4, #+612] \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 3D0100EF SWI +317 1582 // GeneralFuncF1(1); 1583 } 1584 1585 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 00000094 F200D5E1 LDRSH R0,[R5, #+2] \ 00000098 010050E3 CMP R0,#+1 \ 0000009C 0C005013 CMPNE R0,#+12 \ 000000A0 0300001A BNE ??input_awaymsg_onkey_4 1586 { 1587 msg_away_timer=0; \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 380284E5 STR R0,[R4, #+568] 1588 away_m=0; \ 000000AC 3C0284E5 STR R0,[R4, #+572] 1589 UpdateCLheader(); \ 000000B0 ........ BL UpdateCLheader 1590 } 1591 return(0); \ ??input_awaymsg_onkey_4: \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 2CD08DE2 ADD SP,SP,#+44 \ 000000BC F080BDE8 POP {R4-R7,PC} ;; return 1592 } 1593 \ In segment CODE, align 4, keep-with-next 1594 void input_awaymsg_ghook(GUI *gui, int cmd) 1595 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 1596 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 1597 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 1598 { 1599 SetSoftKey(gui,&sk,SET_SOFT_KEY_N); \ 0000000C 2C109FE5 LDR R1,??input_awaymsg_ghook_1 ;; ??sk \ 00000010 0120A0E3 MOV R2,#+1 \ 00000014 680100EF SWI +360 \ 00000018 0080BDE8 POP {PC} 1600 } 1601 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 1602 { 1603 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 1604 } 1605 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 1606 { 1607 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 1608 } 1609 if(cmd==0x03){} 1610 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 1611 \ In segment CODE, align 4, keep-with-next 1612 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 1613 1614 SOFTKEY_DESC input_awaymsg_sk[]= 1615 { 1616 {0x0018,0x0000,(int)"Лев"}, 1617 {0x0001,0x0000,(int)"Прав"}, 1618 {0x003D,0x0000,(int)LGP_DOIT_PIC} 1619 }; 1620 1621 SOFTKEYSTAB input_awaymsg_skt= 1622 { 1623 input_awaymsg_sk,0 1624 }; 1625 1626 const INPUTDIA_DESC input_awaymsg_desc= 1627 { 1628 1, 1629 input_awaymsg_onkey, 1630 input_awaymsg_ghook, 1631 (void *)input_awaymsg_locret, 1632 0, 1633 &input_awaymsg_skt, 1634 {0,NULL,NULL,NULL}, 1635 FONT_SMALL, 1636 100, 1637 101, 1638 0, 1639 0x00000000, 1640 0x40000000 1641 }; 1642 \ In segment CODE, align 4, keep-with-next 1643 void InputAwayMsg() 1644 { \ InputAwayMsg: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 1645 WSHDR *wss=AllocWS(256); 1646 void *ma=malloc_adr(); 1647 void *eq=AllocEQueue(ma, mfree_adr()); 1648 EDITCONTROL ec; 1649 PrepareEditControl(&ec); 1650 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 28519FE5 LDR R5,??InputAwayMsg_0+0x4 ;; input_awaymsg_desc \ 00000008 2CD04DE2 SUB SP,SP,#+44 1651 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 1652 AddEditControlToEditQend(eq,&ec,ma); 1653 1654 PrepareEditControl(&ec); 1655 CutWSTR(wss,0); 1656 ascii2ws(wss,awayMsg); \ 0000000C ........ LDR R6,??DataTable36 ;; S_ICONS \ 00000010 400FA0E3 MOV R0,#+256 \ 00000014 250100EF SWI +293 \ 00000018 0070A0E1 MOV R7,R0 \ 0000001C 148000EF SWI +32788 \ 00000020 0080A0E1 MOV R8,R0 \ 00000024 158000EF SWI +32789 \ 00000028 0010A0E1 MOV R1,R0 \ 0000002C 0800A0E1 MOV R0,R8 \ 00000030 630100EF SWI +355 \ 00000034 0040A0E1 MOV R4,R0 \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 640100EF SWI +356 \ 00000040 382085E2 ADD R2,R5,#+56 \ 00000044 391F8FE2 ADR R1,??InputAwayMsg_0 ;; "%t" \ 00000048 0700A0E1 MOV R0,R7 \ 0000004C 240100EF SWI +292 \ 00000050 2000A0E3 MOV R0,#+32 \ 00000054 01002DE9 PUSH {R0} \ 00000058 0730A0E1 MOV R3,R7 \ 0000005C 0020A0E3 MOV R2,#+0 \ 00000060 0110A0E3 MOV R1,#+1 \ 00000064 04008DE2 ADD R0,SP,#+4 \ 00000068 650100EF SWI +357 \ 0000006C 0820A0E1 MOV R2,R8 \ 00000070 04108DE2 ADD R1,SP,#+4 \ 00000074 0400A0E1 MOV R0,R4 \ 00000078 660100EF SWI +358 \ 0000007C 04008DE2 ADD R0,SP,#+4 \ 00000080 640100EF SWI +356 \ 00000084 0010A0E3 MOV R1,#+0 \ 00000088 0700A0E1 MOV R0,R7 \ 0000008C 260100EF SWI +294 \ 00000090 EF1F86E2 ADD R1,R6,#+956 \ 00000094 0700A0E1 MOV R0,R7 \ 00000098 ........ _BLF ascii2ws,??ascii2ws??rA 1657 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 0000009C FF00A0E3 MOV R0,#+255 \ 000000A0 01002DE9 PUSH {R0} \ 000000A4 0730A0E1 MOV R3,R7 \ 000000A8 4020A0E3 MOV R2,#+64 \ 000000AC 0310A0E3 MOV R1,#+3 \ 000000B0 08008DE2 ADD R0,SP,#+8 \ 000000B4 650100EF SWI +357 1658 AddEditControlToEditQend(eq,&ec,ma); \ 000000B8 0820A0E1 MOV R2,R8 \ 000000BC 08108DE2 ADD R1,SP,#+8 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 660100EF SWI +358 1659 #ifdef kluchnik 1660 PrepareEditControl(&ec); 1661 wsprintf(wss,"%t","Сообщение 2:\n"); 1662 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 1663 AddEditControlToEditQend(eq,&ec,ma); 1664 1665 ascii2ws(wss,"когда смогу отвечу:)"); 1666 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 1667 AddEditControlToEditQend(eq,&ec,ma); 1668 #endif 1669 patch_header(&input_awaymsg_hdr); \ 000000C8 440085E2 ADD R0,R5,#+68 \ 000000CC ........ _BLF patch_header,??patch_header??rA 1670 patch_input(&input_awaymsg_desc); \ 000000D0 0000A0E3 MOV R0,#+0 \ 000000D4 B801C5E1 STRH R0,[R5, #+24] \ 000000D8 8A8100EF SWI +33162 \ 000000DC 010080E2 ADD R0,R0,#+1 \ 000000E0 BA01C5E1 STRH R0,[R5, #+26] \ 000000E4 888100EF SWI +33160 \ 000000E8 010040E2 SUB R0,R0,#+1 \ 000000EC BC01C5E1 STRH R0,[R5, #+28] \ 000000F0 898100EF SWI +33161 \ 000000F4 0070A0E1 MOV R7,R0 \ 000000F8 8B8100EF SWI +33163 \ 000000FC 000047E0 SUB R0,R7,R0 \ 00000100 010040E2 SUB R0,R0,#+1 \ 00000104 BE01C5E1 STRH R0,[R5, #+30] 1671 1672 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 00000108 0000A0E3 MOV R0,#+0 \ 0000010C 01002DE9 PUSH {R0} \ 00000110 0130A0E3 MOV R3,#+1 \ 00000114 0420A0E1 MOV R2,R4 \ 00000118 441085E2 ADD R1,R5,#+68 \ 0000011C 0500A0E1 MOV R0,R5 \ 00000120 670100EF SWI +359 \ 00000124 640286E5 STR R0,[R6, #+612] 1673 } \ 00000128 38D08DE2 ADD SP,SP,#+56 \ 0000012C F081BDE8 POP {R4-R8,PC} ;; return \ ??InputAwayMsg_0: \ 00000130 25740000 DC8 "%t",+0 \ 00000134 ........ DC32 input_awaymsg_desc 1674 1675 1676 //////////////////////////uptime////////////////////////// 1677 #ifdef ELKA 1678 void SLI_On() 1679 { 1680 if(Is_SLI_On) 1681 SLI_SetState(1); 1682 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_Off); 1683 } 1684 1685 void SLI_Off() 1686 { 1687 SLI_SetState(2); 1688 if(total_unread) 1689 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 1690 else 1691 SLI_SetState(0); 1692 } 1693 1694 void SLI_check() 1695 { 1696 if (total_unread) 1697 SLI_On(); 1698 } 1699 1700 void SLI_Timer() 1701 { 1702 GBS_StartTimerProc(&mytmr, 262, SLI_check); //262*SLI_time 1703 } 1704 #endif 1705 \ In segment CODE, align 4, keep-with-next 1706 void setup_ICONS(void) 1707 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1708 int i=0; \ 00000004 ........ LDR R5,??DataTable21 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 1709 do 1710 { 1711 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 CE0E85E2 ADD R0,R5,#+3296 \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 040185E7 STR R0,[R5, +R4, LSL #+2] 1712 i++; \ ??setup_ICONS_1: \ 00000030 014084E2 ADD R4,R4,#+1 1713 } 1714 while(i>2,stop_vibra); \ 00000044 3610A0E3 MOV R1,#+54 \ 00000048 000000EA B ??start_vibra_2 1930 else 1931 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 0000004C 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000050 4D0000EF SWI +77 1932 } 1933 } \ 00000054 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000058 ........ DC32 stop_vibra 1934 \ In segment CODE, align 4, keep-with-next 1935 void stop_vibra(void) 1936 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1937 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1938 if (--vibra_count) \ 0000000C ........ LDR R1,??DataTable36 ;; S_ICONS \ 00000010 840291E5 LDR R0,[R1, #+644] \ 00000014 010050E2 SUBS R0,R0,#+1 \ 00000018 840281E5 STR R0,[R1, #+644] \ 0000001C 0080BD08 POPEQ {PC} 1939 { 1940 if(VIBR_TYPE) \ 00000020 28209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 4800A0E3 MOV R0,#+72 \ 00000028 500D80E3 ORR R0,R0,#0x1400 \ 0000002C 010080E0 ADD R0,R0,R1 \ 00000030 341191E5 LDR R1,[R1, #+308] \ 00000034 000051E3 CMP R1,#+0 \ 00000038 0100000A BEQ ??stop_vibra_1 1941 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 0000003C 0610A0E3 MOV R1,#+6 \ 00000040 000000EA B ??stop_vibra_2 1942 else 1943 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000044 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 00000048 4D0000EF SWI +77 1944 } 1945 } \ 0000004C 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000050 ........ DC32 start_vibra 1946 \ In segment CODE, align 4, keep-with-next 1947 void start_vibra2(void) 1948 { \ start_vibra2: \ 00000000 10402DE9 PUSH {R4,LR} 1949 void stop_vibra2(void); 1950 1951 SetVibration(vibraPower); \ 00000004 ........ LDR R4,??DataTable36 ;; S_ICONS \ 00000008 540194E5 LDR R0,[R4, #+340] \ 0000000C 7C0000EF SWI +124 1952 if(VIBR_TYPE) \ 00000010 341194E5 LDR R1,[R4, #+308] \ 00000014 1C209FE5 LDR R2,??start_vibra2_0 ;; stop_vibra2 \ 00000018 4800A0E3 MOV R0,#+72 \ 0000001C 500D80E3 ORR R0,R0,#0x1400 \ 00000020 040080E0 ADD R0,R0,R4 \ 00000024 000051E3 CMP R1,#+0 1953 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000028 3610A013 MOVNE R1,#+54 1954 else 1955 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 0000002C 6C10A003 MOVEQ R1,#+108 \ 00000030 4D0000EF SWI +77 1956 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra2_0: \ 00000038 ........ DC32 stop_vibra2 1957 \ In segment CODE, align 4, keep-with-next 1958 void stop_vibra2(void) 1959 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1960 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1961 if (--vibra_count) \ 0000000C ........ LDR R1,??DataTable36 ;; S_ICONS \ 00000010 840291E5 LDR R0,[R1, #+644] \ 00000014 010050E2 SUBS R0,R0,#+1 \ 00000018 840281E5 STR R0,[R1, #+644] \ 0000001C 0080BD08 POPEQ {PC} 1962 { 1963 if(VIBR_TYPE) \ 00000020 28209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 4800A0E3 MOV R0,#+72 \ 00000028 500D80E3 ORR R0,R0,#0x1400 \ 0000002C 010080E0 ADD R0,R0,R1 \ 00000030 341191E5 LDR R1,[R1, #+308] \ 00000034 000051E3 CMP R1,#+0 \ 00000038 0100000A BEQ ??stop_vibra2_1 1964 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 0000003C 0610A0E3 MOV R1,#+6 \ 00000040 000000EA B ??stop_vibra2_2 1965 else 1966 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000044 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 00000048 4D0000EF SWI +77 1967 } 1968 } \ 0000004C 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000050 ........ DC32 start_vibra2 1969 \ In segment CODE, align 4, keep-with-next 1970 void ChangeVibra(void) 1971 { 1972 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable36 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 281290E5 LDR R1,[R0, #+552] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000038 0520A0E1 MOV R2,R5 \ 0000003C 081087E2 ADD R1,R7,#+8 \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 160000EF SWI +22 2014 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; \ 00000048 0050E0E3 MVN R5,#+0 \ 0000004C 0D20A0E1 MOV R2,SP \ 00000050 04108DE2 ADD R1,SP,#+4 \ 00000054 2C008DE2 ADD R0,SP,#+44 \ 00000058 840000EF SWI +132 \ 0000005C 050050E1 CMP R0,R5 \ 00000060 0A00000A BEQ ??LoadTemplates_1 2015 if ((fsize=stat.size)<=0) goto L1; \ 00000064 08809DE5 LDR R8,[SP, #+8] \ 00000068 010058E3 CMP R8,#+1 \ 0000006C 070000BA BLT ??LoadTemplates_1 2016 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) \ 00000070 0D30A0E1 MOV R3,SP \ 00000074 8020A0E3 MOV R2,#+128 \ 00000078 801CA0E3 MOV R1,#+32768 \ 0000007C 2C008DE2 ADD R0,SP,#+44 \ 00000080 0A0000EF SWI +10 \ 00000084 0090A0E1 MOV R9,R0 \ 00000088 050059E1 CMP R9,R5 \ 0000008C 1400001A BNE ??LoadTemplates_2 2017 { 2018 L1: 2019 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 00000090 0710A0E1 MOV R1,R7 \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 1A0000EF SWI +26 2020 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 0000009C 0D20A0E1 MOV R2,SP \ 000000A0 04108DE2 ADD R1,SP,#+4 \ 000000A4 2C008DE2 ADD R0,SP,#+44 \ 000000A8 840000EF SWI +132 \ 000000AC 050050E1 CMP R0,R5 \ 000000B0 0200001A BNE ??LoadTemplates_3 \ ??LoadTemplates_4: \ 000000B4 0000A0E3 MOV R0,#+0 \ ??LoadTemplates_5: \ 000000B8 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000BC F087BDE8 POP {R4-R10,PC} ;; return 2021 if ((fsize=stat.size)<=0) return 0; \ ??LoadTemplates_3: \ 000000C0 08809DE5 LDR R8,[SP, #+8] \ 000000C4 010058E3 CMP R8,#+1 \ 000000C8 F9FFFFBA BLT ??LoadTemplates_4 2022 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 000000CC 0D30A0E1 MOV R3,SP \ 000000D0 8020A0E3 MOV R2,#+128 \ 000000D4 801CA0E3 MOV R1,#+32768 \ 000000D8 2C008DE2 ADD R0,SP,#+44 \ 000000DC 0A0000EF SWI +10 \ 000000E0 0090A0E1 MOV R9,R0 2023 } 2024 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E4 050059E1 CMP R9,R5 \ 000000E8 F1FFFF0A BEQ ??LoadTemplates_4 2025 p=templates_chars=malloc(fsize+1); \ 000000EC 010088E2 ADD R0,R8,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 880284E5 STR R0,[R4, #+648] \ 000000F8 0060A0E1 MOV R6,R0 2026 p[fread(f,p,fsize,&ul)]=0; \ 000000FC 0050A0E3 MOV R5,#+0 \ 00000100 0D30A0E1 MOV R3,SP \ 00000104 0820A0E1 MOV R2,R8 \ 00000108 0610A0E1 MOV R1,R6 \ 0000010C 0900A0E1 MOV R0,R9 \ 00000110 0B0000EF SWI +11 \ 00000114 0650C0E7 STRB R5,[R0, +R6] 2027 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0900A0E1 MOV R0,R9 \ 00000120 0D0000EF SWI +13 2028 i=0; \ 00000124 0070A0E3 MOV R7,#+0 2029 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 2030 for(;;) 2031 { 2032 c=*p; 2033 if (c<32) 2034 { 2035 if (pp&&(pp!=p)) 2036 { 2037 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 2038 templates_lines[i++]=pp; 2039 } 2040 pp=NULL; 2041 if (!c) break; 2042 *p=0; 2043 } 2044 else 2045 { 2046 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 2047 } 2048 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 8C0294E5 LDR R0,[R4, #+652] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 8C0284E5 STR R0,[R4, #+652] \ 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 2049 } 2050 return i; \ 00000178 0700A001 MOVEQ R0,R7 \ 0000017C CDFFFF0A BEQ ??LoadTemplates_5 \ 00000180 0050C6E5 STRB R5,[R6, #+0] \ 00000184 EBFFFFEA B ??LoadTemplates_8 \ ??LoadTemplates_0: \ 00000188 ........ DC32 `?` 2051 } 2052 2053 2054 2055 //---------------------- AUTOBOT MESSAGE -------------------------// 2056 2057 2058 #ifdef kluchnik 2059 char *bot_chars; //Собственно файл 2060 char **bot_lines; //Массив указателей на строки 2061 2062 void FreeBotMessage(void) 2063 { 2064 if (bot_lines) mfree(bot_lines); 2065 if (bot_chars) mfree(bot_chars); 2066 bot_lines=NULL; 2067 bot_chars=NULL; 2068 } 2069 2070 int LoadBotMessage(unsigned int uin) 2071 { 2072 FSTATS stat; 2073 char fn[256]; 2074 int f; 2075 unsigned int ul; 2076 int i; 2077 int fsize; 2078 char *p; 2079 char *pp; 2080 int c; 2081 FreeBotMessage(); 2082 strcpy(fn,TEMPLATES_PATH); 2083 i=strlen(fn); 2084 sprintf(fn+i,"\\bot_%d.txt",uin); 2085 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; 2086 if ((fsize=stat.size)<=0) goto L1; 2087 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) 2088 { 2089 L1: 2090 strcpy(fn+i,"\\bot.txt"); 2091 if (GetFileStats(fn,&stat,&ul)==-1) return 0; 2092 if ((fsize=stat.size)<=0) return 0; 2093 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); 2094 } 2095 if (f==-1) return 0; 2096 p=bot_chars=malloc(fsize+1); 2097 p[fread(f,p,fsize,&ul)]=0; 2098 fclose(f,&ul); 2099 i=0; 2100 pp=p; 2101 for(;;) 2102 { 2103 c=*p; 2104 if (c<32) 2105 { 2106 if (pp&&(pp!=p)) 2107 { 2108 bot_lines=realloc(bot_lines,(i+1)*sizeof(char *)); 2109 bot_lines[i++]=pp; 2110 } 2111 pp=NULL; 2112 if (!c) break; 2113 *p=0; 2114 } 2115 else 2116 { 2117 if (pp==NULL) pp=p; 2118 } 2119 p++; 2120 } 2121 return i; 2122 } 2123 #endif 2124 2125 //=================================================================== 2126 2127 typedef struct 2128 { 2129 CSM_RAM csm; 2130 int gui_id; 2131 }MAIN_CSM; 2132 2133 typedef struct 2134 { 2135 GUI gui; 2136 WSHDR *ws1; 2137 WSHDR *ws2; 2138 int i1; 2139 }MAIN_GUI; 2140 2141 2142 2143 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 2144 \ In segment DATA_Z, align 4, align-sorted 2145 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 2146 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 2147 2148 int connect_state=0; 2149 2150 int sock=-1; 2151 2152 volatile unsigned long TOTALRECEIVED; 2153 volatile unsigned long TOTALSENDED; 2154 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 2155 volatile unsigned long ALLTOTALSENDED; 2156 2157 volatile int sendq_l=0; //Длинна очереди для send 2158 volatile void *sendq_p=NULL; //указатель очереди 2159 2160 volatile int is_gprs_online=1; 2161 2162 GBSTMR reconnect_tmr; 2163 2164 extern void kill_data(void *p,void (*func_p)(void *)); 2165 \ In segment CODE, align 4, keep-with-next 2166 void ElfKiller(void) 2167 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 2168 PrintLibFree(); \ 00000004 ........ _BLF PrintLibFree,??PrintLibFree??rA 2169 extern void *ELF_BEGIN; 2170 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 2171 } 2172 2173 int total_unread; //2058 - tam tak /windes 2174 2175 volatile CLIST *cltop; 2176 2177 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 2178 2179 volatile int contactlist_menu_id; 2180 2181 GBSTMR tmr_active; 2182 2183 volatile int edchat_id; 2184 2185 //Применяется для добавления сообщений 2186 //CLIST *edcontact; 2187 //void *edgui_data; 2188 2189 static int prev_clmenu_itemcount; 2190 2191 char clm_hdr_text[64]; 2192 static const char def_clm_hdr_text[] = LG_CLTITLE; 2193 static const char key_clm_hdr_text[] = LG_CLT9INP; 2194 #ifdef kluchnik 2195 int ICON_HD; 2196 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+IS_NULLICON, (int)clm_hdr_text, LGP_NULL}; 2197 #else 2198 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 2199 #endif 2200 2201 static const int menusoftkeys[] = {0,1,2}; 2202 static const SOFTKEY_DESC menu_sk[] = 2203 { 2204 {0x0018, 0x0000, (int)LG_SELECT}, 2205 {0x0001, 0x0000, (int)LG_CLOSE}, 2206 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2207 }; 2208 2209 char clmenu_sk_r[16]; 2210 static const char def_clmenu_sk_r[] = LG_CLOSE; 2211 static const char key_clmenu_sk_r[] = LG_CLEAR; 2212 2213 static const SOFTKEY_DESC clmenu_sk[]= 2214 { 2215 {0x0018, 0x0000, (int)LG_OPTIONS}, 2216 {0x0001, 0x0000, (int)clmenu_sk_r}, 2217 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2218 }; 2219 2220 const SOFTKEYSTAB menu_skt = 2221 { 2222 menu_sk, 0 2223 }; 2224 2225 static const SOFTKEYSTAB clmenu_skt = 2226 { 2227 clmenu_sk, 0 2228 }; 2229 2230 void contactlist_menu_ghook(void *data, int cmd); 2231 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 2232 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 2233 2234 #ifdef USE_MLMENU 2235 static const ML_MENU_DESC contactlist_menu= 2236 { 2237 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 2238 menusoftkeys, 2239 &clmenu_skt, 2240 0x11, //+0x400 2241 contactlist_menu_iconhndl, 2242 NULL, //Items 2243 NULL, //Procs 2244 0, //n 2245 1 //Добавочных строк 2246 }; 2247 #else 2248 static const MENU_DESC contactlist_menu= 2249 { 2250 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 2251 menusoftkeys, 2252 &clmenu_skt, 2253 0x11, //+0x400 2254 contactlist_menu_iconhndl, 2255 NULL, //Items 2256 NULL, //Procs 2257 0 //n 2258 }; 2259 #endif 2260 2261 //GBSTMR tmr_ping; 2262 int tenseconds_to_ping; 2263 \ In segment CODE, align 4, keep-with-next 2264 LOGQ *NewLOGQ(const char *s) 2265 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2266 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 2267 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 2268 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 2269 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 2270 } 2271 \ In segment CODE, align 4, keep-with-next 2272 LOGQ *LastLOGQ(LOGQ **pp) 2273 { 2274 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 2275 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 2276 { 2277 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 2278 } 2279 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 2280 } 2281 2282 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 2283 void FreeLOGQ(LOGQ **pp) 2284 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 2285 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 2286 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 2287 while(p) 2288 { 2289 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 2290 mfree(p); \ 00000020 150000EF SWI +21 2291 p=np; \ 00000024 0400B0E1 MOVS R0,R4 2292 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 2293 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 2294 2295 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 2296 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 2297 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 2298 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 2299 LOGQ *qp; 2300 while(qp=q->next) 2301 { 2302 if (qp==p) 2303 { 2304 q->next=p->next; 2305 break; 2306 } 2307 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] 2308 } 2309 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 2310 } \ 00000030 0080BDE8 POP {PC} ;; return 2311 2312 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 2313 int AddLOGQ(LOGQ **queue, LOGQ *p) 2314 { 2315 LOGQ *q=(LOGQ *)queue; 2316 LOGQ *qp; 2317 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 2318 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 2319 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 2320 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 2321 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 2322 } 2323 \ In segment CODE, align 4, keep-with-next 2324 char *GetLastXTextLOGQ(CLIST *t) 2325 { 2326 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 901090E5 LDR R1,[R0, #+144] 2327 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 2328 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 2329 while(p->next) 2330 { 2331 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 2332 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 2333 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 2334 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 2335 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 2336 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 2337 return s; \ 00000044 1EFF2FE1 BX LR ;; return 2338 } 2339 \ In segment CODE, align 4, keep-with-next 2340 int GetIconIndex(CLIST *t) 2341 { 2342 unsigned short s; 2343 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 2344 { 2345 s=t->state; 2346 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 2347 if (t->isunread) \ 0000001C 800090E5 LDR R0,[R0, #+128] \ 00000020 000050E3 CMP R0,#+0 2348 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 2349 else 2350 { 2351 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 2352 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 2353 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 2354 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 2355 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 2356 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 2357 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 2358 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 2359 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 2360 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 2361 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 2362 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 2363 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 2364 } 2365 } 2366 else 2367 { 2368 return(IS_UNKNOWN); 2369 } 2370 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 2371 } 2372 \ In segment CODE, align 4, keep-with-next 2373 LOGQ *FindContactLOGQByAck(TPKT *p) 2374 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2375 CLIST *t; 2376 LockSched(); \ 00000008 460100EF SWI +326 2377 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 2378 UnlockSched(); \ 00000018 470100EF SWI +327 2379 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 2380 LOGQ *q; 2381 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 2382 LockSched(); \ 0000002C 460100EF SWI +326 2383 q=t->log; \ 00000030 905095E5 LDR R5,[R5, #+144] \ 00000034 000000EA B ??FindContactLOGQByAck_0 2384 while(q) 2385 { 2386 if (q->ID==id) break; 2387 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 2388 } 2389 UnlockSched(); \ 0000004C 470100EF SWI +327 2390 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 2391 } 2392 2393 GBSTMR statusTmr; 2394 2395 char ContactT9Key[32]; 2396 int kopa_online; 2397 int kopa_kontaktu; 2398 char status[64]; 2399 /* 2400 void DrawStatusBar() 2401 { 2402 // PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 2403 // if(TIME_OR_MSG==4) 2404 if(contactlist_menu_id) 2405 { 2406 PrintText(33,YDISP+2,status,0,1,1,2,0,0,ScreenW()-20); 2407 } 2408 GBS_StartTimerProc(&statusTmr,120,DrawStatusBar); 2409 } 2410 */ 2411 #define nmeth 24 2412 2413 void * gui_methods2[nmeth]; 2414 void * old_redraw; 2415 2416 typedef void (*tredraw)(void *data); 2417 \ In segment CODE, align 4, keep-with-next 2418 void new_redraw(void *data) 2419 { \ new_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 2420 ((tredraw)old_redraw)(data); \ 00000004 ........ LDR R4,??DataTable36 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 3C1394E5 LDR R1,[R4, #+828] \ 00000010 31FF2FE1 BLX R1 2421 char s[64]; 2422 sprintf(s,"%s\\HEAD.png",ICON_PATH); \ 00000014 64109FE5 LDR R1,??new_redraw_0 ;; `?` \ 00000018 CE2E84E2 ADD R2,R4,#+3296 \ 0000001C 0D00A0E1 MOV R0,SP \ 00000020 160000EF SWI +22 2423 int x=GetImgWidth((int)s); \ 00000024 0D00A0E1 MOV R0,SP \ 00000028 220000EF SWI +34 \ 0000002C 0050A0E1 MOV R5,R0 2424 PrintText(x+7,YDISP+2,status,0,1,1,2,0,0,ScreenW()-20); \ 00000030 888100EF SWI +33160 \ 00000034 140040E2 SUB R0,R0,#+20 \ 00000038 01002DE9 PUSH {R0} \ 0000003C 0030A0E3 MOV R3,#+0 \ 00000040 0210A0E3 MOV R1,#+2 \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 01002DE9 PUSH {R0} \ 0000004C 01002DE9 PUSH {R0} \ 00000050 0200A0E3 MOV R0,#+2 \ 00000054 01002DE9 PUSH {R0} \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 01002DE9 PUSH {R0} \ 00000064 D800A0E3 MOV R0,#+216 \ 00000068 500D80E3 ORR R0,R0,#0x1400 \ 0000006C 042080E0 ADD R2,R0,R4 \ 00000070 070085E2 ADD R0,R5,#+7 \ 00000074 ........ _BLF PrintText,??PrintText??rA 2425 #ifdef kluchnik 2426 switch(CurrentPrivateStatus) 2427 { 2428 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 2429 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 2430 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 2431 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 2432 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 2433 default :ICON_HD=ICON_HEAD;break; 2434 } 2435 int icon; 2436 icon=*(S_ICONS+ICON_HD); 2437 //((HEADER_DESC *)&contactlist_menuhdr)->rc.x2=1+(GetImgWidth(icon)); 2438 DrawImg(3,YDISP+3,icon); 2439 #endif 2440 } \ 00000078 58D08DE2 ADD SP,SP,#+88 \ 0000007C 3080BDE8 POP {R4,R5,PC} ;; return \ ??new_redraw_0: \ 00000080 ........ DC32 `?` 2441 \ In segment CODE, align 4, keep-with-next 2442 void UpdateCLheader(void) 2443 { \ UpdateCLheader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2444 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R4,??DataTable51 ;; S_ICONS \ 00000008 B8729FE5 LDR R7,??UpdateCLheader_1+0x14 ;; key_clmenu_sk_r \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 B810A0E3 MOV R1,#+184 \ 00000014 501D81E3 ORR R1,R1,#0x1400 \ 00000018 041081E0 ADD R1,R1,R4 \ 0000001C 08108DE5 STR R1,[SP, #+8] \ 00000020 7800A0E3 MOV R0,#+120 \ 00000024 500D80E3 ORR R0,R0,#0x1400 \ 00000028 045080E0 ADD R5,R0,R4 \ 0000002C 600080E2 ADD R0,R0,#+96 \ 00000030 046080E0 ADD R6,R0,R4 \ 00000034 BC80A0E3 MOV R8,#+188 \ 00000038 808E88E3 ORR R8,R8,#0x800 \ 0000003C 040088E0 ADD R0,R8,R4 \ 00000040 1B0000EF SWI +27 \ 00000044 000050E3 CMP R0,#+0 \ 00000048 0C00000A BEQ ??UpdateCLheader_2 2445 { 2446 zeromem(status,64); \ 0000004C 4010A0E3 MOV R1,#+64 \ 00000050 0600A0E1 MOV R0,R6 \ 00000054 1D0100EF SWI +285 2447 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000058 701087E2 ADD R1,R7,#+112 \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 1A0000EF SWI +26 2448 strcat(clm_hdr_text,ContactT9Key); \ 00000064 041088E0 ADD R1,R8,R4 \ 00000068 0500A0E1 MOV R0,R5 \ 0000006C 170000EF SWI +23 2449 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000070 08009DE5 LDR R0,[SP, #+8] \ 00000074 0710A0E1 MOV R1,R7 \ 00000078 1A0000EF SWI +26 \ 0000007C F78FBDE8 POP {R0-R2,R4-R11,PC} 2450 } \ ??UpdateCLheader_2: \ 00000080 FC0094E5 LDR R0,[R4, #+252] \ 00000084 8A8F8FE2 ADR R8,??UpdateCLheader_1 ;; "[S]" \ 00000088 8A9F8FE2 ADR R9,??UpdateCLheader_1+0x4 ;; "[V]" \ 0000008C 8AAF8FE2 ADR R10,??UpdateCLheader_1+0x8 ;; "[I]" \ 00000090 8ABF8FE2 ADR R11,??UpdateCLheader_1+0xC ;; "[A]" \ 00000094 040050E3 CMP R0,#+4 \ 00000098 8100008A BHI ??UpdateCLheader_3 \ 0000009C 011F8FE2 ADR R1,??UpdateCLheader_0 \ 000000A0 0010D1E7 LDRB R1,[R1, R0] \ 000000A4 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??UpdateCLheader_0: \ 000000A8 010D1319 DC8 +1,+13,+19,+25 \ 000000AC 43000000 DC8 +67,+0,+0,+0 2451 else 2452 { 2453 switch(TIME_OR_MSG) 2454 { 2455 case 0: 2456 { 2457 TTime the; 2458 GetDateTime(NULL,&the); \ ??UpdateCLheader_4: \ 000000B0 0D10A0E1 MOV R1,SP \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 B40000EF SWI +180 2459 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ 000000BC 0100DDE5 LDRB R0,[SP, #+1] \ 000000C0 642087E2 ADD R2,R7,#+100 \ 000000C4 541087E2 ADD R1,R7,#+84 \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 0430DDE5 LDRB R3,[SP, #+4] \ ??UpdateCLheader_5: \ 000000D0 0500A0E1 MOV R0,R5 \ 000000D4 160000EF SWI +22 \ 000000D8 04D08DE2 ADD SP,SP,#+4 \ 000000DC 700000EA B ??UpdateCLheader_3 2460 } 2461 break; 2462 case 1: 2463 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_6: \ 000000E0 140294E5 LDR R0,[R4, #+532] \ 000000E4 642087E2 ADD R2,R7,#+100 \ 000000E8 01002DE9 PUSH {R0} \ 000000EC B83294E5 LDR R3,[R4, #+696] \ 000000F0 481087E2 ADD R1,R7,#+72 \ 000000F4 F5FFFFEA B ??UpdateCLheader_5 2464 break; 2465 case 2: 2466 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); \ ??UpdateCLheader_7: \ 000000F8 D40294E5 LDR R0,[R4, #+724] \ 000000FC 642087E2 ADD R2,R7,#+100 \ 00000100 01002DE9 PUSH {R0} \ 00000104 D83294E5 LDR R3,[R4, #+728] \ 00000108 481087E2 ADD R1,R7,#+72 \ 0000010C EFFFFFEA B ??UpdateCLheader_5 2467 break; 2468 case 3: 2469 { 2470 void Get_Online_total(); 2471 Get_Online_total(); \ ??UpdateCLheader_8: \ 00000110 ........ BL Get_Online_total 2472 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] ",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000114 140294E5 LDR R0,[R4, #+532] \ 00000118 341087E2 ADD R1,R7,#+52 \ 0000011C 01002DE9 PUSH {R0} \ 00000120 B80294E5 LDR R0,[R4, #+696] \ 00000124 01002DE9 PUSH {R0} \ 00000128 D43294E5 LDR R3,[R4, #+724] \ 0000012C D82294E5 LDR R2,[R4, #+728] \ 00000130 0500A0E1 MOV R0,R5 \ 00000134 160000EF SWI +22 2473 if(away_m) strcat(clm_hdr_text,"[A]"); \ 00000138 3C0294E5 LDR R0,[R4, #+572] \ 0000013C 08D08DE2 ADD SP,SP,#+8 \ 00000140 000050E3 CMP R0,#+0 \ 00000144 0200000A BEQ ??UpdateCLheader_9 \ 00000148 0B10A0E1 MOV R1,R11 \ 0000014C 0500A0E1 MOV R0,R5 \ 00000150 170000EF SWI +23 2474 if(CurrentPrivateStatus==1) strcat(clm_hdr_text,"[I]"); \ ??UpdateCLheader_9: \ 00000154 800294E5 LDR R0,[R4, #+640] \ 00000158 010050E3 CMP R0,#+1 \ 0000015C 0200001A BNE ??UpdateCLheader_10 \ 00000160 0A10A0E1 MOV R1,R10 \ 00000164 0500A0E1 MOV R0,R5 \ 00000168 170000EF SWI +23 2475 if(Is_Vibra_Enabled) strcat(clm_hdr_text,"[V]"); \ ??UpdateCLheader_10: \ 0000016C 280294E5 LDR R0,[R4, #+552] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0200000A BEQ ??UpdateCLheader_11 \ 00000178 0910A0E1 MOV R1,R9 \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 170000EF SWI +23 2476 if(Is_Sounds_Enabled) strcat(clm_hdr_text,"[S]"); \ ??UpdateCLheader_11: \ 00000184 700294E5 LDR R0,[R4, #+624] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0200000A BEQ ??UpdateCLheader_12 \ 00000190 0810A0E1 MOV R1,R8 \ 00000194 0500A0E1 MOV R0,R5 \ 00000198 170000EF SWI +23 2477 if(Is_Double_Vibra_On) strcat(clm_hdr_text,"[R]"); \ ??UpdateCLheader_12: \ 0000019C 100294E5 LDR R0,[R4, #+528] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 3E00000A BEQ ??UpdateCLheader_3 \ 000001A8 451F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 000001AC 0500A0E1 MOV R0,R5 \ 000001B0 170000EF SWI +23 \ 000001B4 3A0000EA B ??UpdateCLheader_3 2478 } 2479 break; 2480 case 4: 2481 { 2482 void Get_Online_total(); 2483 Get_Online_total(); \ ??UpdateCLheader_13: \ 000001B8 ........ BL Get_Online_total 2484 TTime the; 2485 GetDateTime(NULL,&the); \ 000001BC 0D10A0E1 MOV R1,SP \ 000001C0 0000A0E3 MOV R0,#+0 \ 000001C4 B40000EF SWI +180 2486 #ifdef kluchnik 2487 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 2488 sprintf(status, "[Rx:%db/Tx:%db/Queue:%db]\n[%02d:%02d] [%d/%d] [%d/%d] ",RX,TX,sendq_l, 2489 the.hour, the.min, 2490 kopa_kontaktu, kopa_online, 2491 total_unread,total_unread2); 2492 #else 2493 sprintf(status, "%s\n[%02d:%02d] [%d/%d] [%d/%d] ",def_clm_hdr_text, 2494 the.hour, the.min, 2495 kopa_kontaktu, kopa_online, 2496 total_unread,total_unread2); \ 000001C8 140294E5 LDR R0,[R4, #+532] \ 000001CC 642087E2 ADD R2,R7,#+100 \ 000001D0 01002DE9 PUSH {R0} \ 000001D4 B80294E5 LDR R0,[R4, #+696] \ 000001D8 141087E2 ADD R1,R7,#+20 \ 000001DC 01002DE9 PUSH {R0} \ 000001E0 D40294E5 LDR R0,[R4, #+724] \ 000001E4 01002DE9 PUSH {R0} \ 000001E8 D80294E5 LDR R0,[R4, #+728] \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 1100DDE5 LDRB R0,[SP, #+17] \ 000001F4 01002DE9 PUSH {R0} \ 000001F8 1430DDE5 LDRB R3,[SP, #+20] \ 000001FC 0600A0E1 MOV R0,R6 \ 00000200 160000EF SWI +22 2497 #endif 2498 if(away_m) strcat(status,"[A]"); \ 00000204 3C0294E5 LDR R0,[R4, #+572] \ 00000208 14D08DE2 ADD SP,SP,#+20 \ 0000020C 000050E3 CMP R0,#+0 \ 00000210 0200000A BEQ ??UpdateCLheader_14 \ 00000214 0B10A0E1 MOV R1,R11 \ 00000218 0600A0E1 MOV R0,R6 \ 0000021C 170000EF SWI +23 2499 if(CurrentPrivateStatus==1) strcat(status,"[I]"); \ ??UpdateCLheader_14: \ 00000220 800294E5 LDR R0,[R4, #+640] \ 00000224 010050E3 CMP R0,#+1 \ 00000228 0200001A BNE ??UpdateCLheader_15 \ 0000022C 0A10A0E1 MOV R1,R10 \ 00000230 0600A0E1 MOV R0,R6 \ 00000234 170000EF SWI +23 2500 if(Is_Vibra_Enabled) strcat(status,"[V]"); \ ??UpdateCLheader_15: \ 00000238 280294E5 LDR R0,[R4, #+552] \ 0000023C 000050E3 CMP R0,#+0 \ 00000240 0200000A BEQ ??UpdateCLheader_16 \ 00000244 0910A0E1 MOV R1,R9 \ 00000248 0600A0E1 MOV R0,R6 \ 0000024C 170000EF SWI +23 2501 if(Is_Sounds_Enabled) strcat(status,"[S]"); \ ??UpdateCLheader_16: \ 00000250 700294E5 LDR R0,[R4, #+624] \ 00000254 000050E3 CMP R0,#+0 \ 00000258 0200000A BEQ ??UpdateCLheader_17 \ 0000025C 0810A0E1 MOV R1,R8 \ 00000260 0600A0E1 MOV R0,R6 \ 00000264 170000EF SWI +23 2502 if(Is_Double_Vibra_On) strcat(status,"[R]"); \ ??UpdateCLheader_17: \ 00000268 100294E5 LDR R0,[R4, #+528] \ 0000026C 000050E3 CMP R0,#+0 \ 00000270 0200000A BEQ ??UpdateCLheader_18 \ 00000274 121F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 00000278 0600A0E1 MOV R0,R6 \ 0000027C 170000EF SWI +23 2503 if(Show_XTX) strcat(status,"[Xs]"); \ ??UpdateCLheader_18: \ 00000280 480294E5 LDR R0,[R4, #+584] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 0C108712 ADDNE R1,R7,#+12 2504 else strcat(status,"[Tm]"); \ 0000028C 04108702 ADDEQ R1,R7,#+4 \ 00000290 0600A0E1 MOV R0,R6 \ 00000294 170000EF SWI +23 2505 zeromem(clm_hdr_text,64); \ 00000298 4010A0E3 MOV R1,#+64 \ 0000029C 0500A0E1 MOV R0,R5 \ 000002A0 1D0100EF SWI +285 2506 //DrawStatusBar(); 2507 } 2508 break; 2509 } 2510 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_3: \ 000002A4 08009DE5 LDR R0,[SP, #+8] \ 000002A8 7C1087E2 ADD R1,R7,#+124 \ 000002AC 1A0000EF SWI +26 2511 } 2512 } \ 000002B0 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??UpdateCLheader_1: \ 000002B4 5B535D00 DC8 "[S]" \ 000002B8 5B565D00 DC8 "[V]" \ 000002BC 5B495D00 DC8 "[I]" \ 000002C0 5B415D00 DC8 "[A]" \ 000002C4 5B525D00 DC8 "[R]" \ 000002C8 ........ DC32 key_clmenu_sk_r 2513 \ In segment CODE, align 4, keep-with-next 2514 void ClearContactT9Key(void) 2515 { 2516 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 2236 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 2517 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 2236 2518 \ In segment CODE, align 4, keep-with-next 2519 void AddContactT9Key(int chr) 2520 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 2521 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable51 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C BC00A0E3 MOV R0,#+188 \ 00000010 800E80E3 ORR R0,R0,#0x800 \ 00000014 050080E0 ADD R0,R0,R5 \ 00000018 1B0000EF SWI +27 2522 if (l<(sizeof(ContactT9Key)-1)) \ 0000001C 1F0050E3 CMP R0,#+31 2523 { 2524 ContactT9Key[l]=chr; \ 00000020 05008030 ADDCC R0,R0,R5 \ 00000024 BC48C035 STRBCC R4,[R0, #+2236] 2525 } 2526 } \ 00000028 3080BDE8 POP {R4,R5,PC} ;; return 2527 \ In segment CODE, align 4, keep-with-next 2528 void BackSpaceContactT9(void) 2529 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 2530 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable51 ;; S_ICONS \ 00000008 BC00A0E3 MOV R0,#+188 \ 0000000C 800E80E3 ORR R0,R0,#0x800 \ 00000010 040080E0 ADD R0,R0,R4 \ 00000014 1B0000EF SWI +27 2531 if (l) \ 00000018 000050E3 CMP R0,#+0 2532 { 2533 l--; 2534 ContactT9Key[l]=0; \ 0000001C 04008010 ADDNE R0,R0,R4 \ 00000020 0010A013 MOVNE R1,#+0 \ 00000024 BB18C015 STRBNE R1,[R0, #+2235] 2535 } 2536 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 2537 \ In segment CODE, align 4, keep-with-next 2538 void create_contactlist_menu(void) 2539 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2540 2541 int i; 2542 i=CountContacts(); 2543 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable51 ;; S_ICONS 2544 UpdateCLheader(); 2545 patch_header(&contactlist_menuhdr); \ 00000008 38609FE5 LDR R6,??create_contactlist_menu_0 ;; contactlist_menuhdr \ 0000000C ........ _BLF CountContacts,??CountContacts??rA \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 CC4285E5 STR R4,[R5, #+716] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0600A0E1 MOV R0,R6 \ 00000020 ........ _BLF patch_header,??patch_header??rA 2546 #ifdef USE_MLMENU 2547 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); \ 00000024 10002DE9 PUSH {R4} \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 01002DE9 PUSH {R0} \ 00000030 0630A0E1 MOV R3,R6 \ 00000034 142086E2 ADD R2,R6,#+20 \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 170200EF SWI +535 \ 00000040 C40285E5 STR R0,[R5, #+708] 2548 #else 2549 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 2550 #endif 2551 } \ 00000044 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000048 ........ DC32 contactlist_menuhdr 2552 2553 2554 static int unhooked2=1; 2555 \ In segment CODE, align 4, keep-with-next 2556 void contactlist_menu_ghook(void *data, int cmd) 2557 { \ contactlist_menu_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2558 PNGTOP_DESC *pltop=PNG_TOP(); 2559 if (cmd==9) 2560 { 2561 pltop->dyn_pltop=NULL; 2562 } 2563 static int unhooked=1; 2564 if((((unhooked) || (unhooked2)) && (TIME_OR_MSG==4))) \ 00000004 ........ LDR R8,??DataTable51 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 B98100EF SWI +33209 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 0070A0E3 MOV R7,#+0 \ 0000001C 090055E3 CMP R5,#+9 \ 00000020 08708605 STREQ R7,[R6, #+8] \ 00000024 440398E5 LDR R0,[R8, #+836] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 40039805 LDREQ R0,[R8, #+832] \ 00000030 00005003 CMPEQ R0,#+0 \ 00000034 1500000A BEQ ??contactlist_menu_ghook_0 \ 00000038 FC0098E5 LDR R0,[R8, #+252] \ 0000003C 040050E3 CMP R0,#+4 \ 00000040 1200001A BNE ??contactlist_menu_ghook_0 2565 { 2566 if(!(strlen(ContactT9Key))) \ 00000044 BC00A0E3 MOV R0,#+188 \ 00000048 800E80E3 ORR R0,R0,#0x800 \ 0000004C 080080E0 ADD R0,R0,R8 \ 00000050 1B0000EF SWI +27 \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0A00001A BNE ??contactlist_menu_ghook_1 2567 { 2568 GUI * gui=(GUI*)data; 2569 memcpy(&gui_methods2,gui->methods,nmeth*4); \ 0000005C 041094E5 LDR R1,[R4, #+4] \ 00000060 B79FA0E3 MOV R9,#+732 \ 00000064 6020A0E3 MOV R2,#+96 \ 00000068 080089E0 ADD R0,R9,R8 \ 0000006C 1E0100EF SWI +286 2570 gui->methods=&gui_methods2; \ 00000070 080089E0 ADD R0,R9,R8 \ 00000074 040084E5 STR R0,[R4, #+4] 2571 old_redraw=gui_methods2[0]; \ 00000078 080099E7 LDR R0,[R9, +R8] \ 0000007C 3C0388E5 STR R0,[R8, #+828] 2572 gui_methods2[0]=(void*)&new_redraw; \ 00000080 28009FE5 LDR R0,??contactlist_menu_ghook_2 ;; new_redraw \ 00000084 080089E7 STR R0,[R9, +R8] 2573 } 2574 unhooked=0; \ ??contactlist_menu_ghook_1: \ 00000088 447388E5 STR R7,[R8, #+836] 2575 unhooked2=0; \ 0000008C 407388E5 STR R7,[R8, #+832] 2576 } 2577 2578 if (cmd==0x0A) \ ??contactlist_menu_ghook_0: \ 00000090 0A0055E3 CMP R5,#+10 \ 00000094 F083BD18 POPNE {R4-R9,PC} 2579 { 2580 silenthide=0; 2581 pltop->dyn_pltop=XStatusesImgList; \ 00000098 ........ LDR R0,??DataTable42 ;; XStatusesImgList \ 0000009C 687288E5 STR R7,[R8, #+616] \ 000000A0 000090E5 LDR R0,[R0, #+0] \ 000000A4 080086E5 STR R0,[R6, #+8] 2582 DisableIDLETMR(); \ 000000A8 7F0100EF SWI +383 2583 } 2584 2585 2586 } \ 000000AC F083BDE8 POP {R4-R9,PC} ;; return \ ??contactlist_menu_ghook_2: \ 000000B0 ........ DC32 new_redraw 2587 \ In segment CODE, align 4, keep-with-next 2588 void RecountMenu(CLIST *req, int needfocus) 2589 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 2590 int i; 2591 int j; 2592 void *data; 2593 UpdateCLheader(); 2594 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable51 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 C40296E5 LDR R0,[R6, #+708] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 2595 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 C40296E5 LDR R0,[R6, #+708] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 2596 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 2597 { 2598 j=0; 2599 } 2600 else 2601 { 2602 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 2603 } 2604 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 2605 if (j>=i) j=i-1; 2606 if (j<0) j=0; 2607 if (i!=prev_clmenu_itemcount) \ 00000048 CC1296E5 LDR R1,[R6, #+716] \ 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 2608 { 2609 prev_clmenu_itemcount=i; \ 00000064 CC0286E5 STR R0,[R6, #+716] 2610 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 2611 } 2612 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 2613 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 C40296E5 LDR R0,[R6, #+708] \ 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 2614 } 2615 2616 2617 //-------------------- MANAGE CONTACT MENU --------------------------// 2618 2619 2620 #ifdef kluchnik 2621 #define _MAX 5 2622 #else 2623 #define _MAX 4 2624 #endif 2625 2626 static int uinContact; 2627 \ In segment CODE, align 4, keep-with-next 2628 static void ChangeVibraContact(GUI *data) 2629 { 2630 CLIST *t; 2631 t=FindContactByUin(uinContact); \ ChangeVibraContact: \ 00000000 ........ LDR R0,??DataTable47 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2632 t->isvibra=!(t->isvibra); \ 00000010 581090E5 LDR R1,[R0, #+88] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 581080E5 STR R1,[R0, #+88] 2633 RefreshGUI(); \ 00000024 960100EF SWI +406 2634 } \ 00000028 0080BDE8 POP {PC} ;; return 2635 \ In segment CODE, align 4, keep-with-next 2636 static void ChangeSoundContact(GUI *data) 2637 { 2638 CLIST *t; 2639 t=FindContactByUin(uinContact); \ ChangeSoundContact: \ 00000000 ........ LDR R0,??DataTable47 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2640 t->issound=!(t->issound); \ 00000010 5C1090E5 LDR R1,[R0, #+92] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 5C1080E5 STR R1,[R0, #+92] 2641 RefreshGUI(); \ 00000024 960100EF SWI +406 2642 } \ 00000028 0080BDE8 POP {PC} ;; return 2643 \ In segment CODE, align 4, keep-with-next 2644 static void ChangeAutoMsg(GUI *data) 2645 { 2646 CLIST *t; 2647 t=FindContactByUin(uinContact); \ ChangeAutoMsg: \ 00000000 ........ LDR R0,??DataTable47 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2648 t->isautomsg=!(t->isautomsg); \ 00000010 601090E5 LDR R1,[R0, #+96] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 601080E5 STR R1,[R0, #+96] 2649 RefreshGUI(); \ 00000024 960100EF SWI +406 2650 } \ 00000028 0080BDE8 POP {PC} ;; return 2651 \ In segment CODE, align 4, keep-with-next 2652 static void ChangeShowXstatus(GUI *data) 2653 { 2654 CLIST *t; 2655 t=FindContactByUin(uinContact); \ ChangeShowXstatus: \ 00000000 ........ LDR R0,??DataTable47 ;; icon_array + 8 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2656 t->isShowXst=!(t->isShowXst); \ 00000010 6C1090E5 LDR R1,[R0, #+108] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 6C1080E5 STR R1,[R0, #+108] 2657 RefreshGUI(); \ 00000024 960100EF SWI +406 2658 } \ 00000028 0080BDE8 POP {PC} ;; return 2659 2660 #ifdef kluchnik 2661 static void ChangeAutobot(GUI *data) 2662 { 2663 CLIST *t; 2664 t=FindContactByUin(uinContact); 2665 t->isautobot=!(t->isautobot); 2666 RefreshGUI(); 2667 } 2668 #endif 2669 /* 2670 static void RqtXText(GUI *data) 2671 { 2672 void RequestXText(unsigned int uin); 2673 RequestXText(uinContact); 2674 GeneralFuncF1(1); 2675 } 2676 */ \ In segment CODE, align 4, keep-with-next 2677 static void contact_list_ghook(void *data, int cmd) 2678 { \ contact_list_ghook: \ 00000000 00402DE9 PUSH {LR} 2679 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 2680 { 2681 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 2682 } 2683 } \ 00000010 0080BDE8 POP {PC} ;; return 2684 static int icon_array[2]; 2685 2686 static const void *menuproc[_MAX]= 2687 { 2688 (void *)ChangeVibraContact, 2689 (void *)ChangeSoundContact, 2690 (void *)ChangeAutoMsg, 2691 (void *)ChangeShowXstatus, 2692 #ifdef kluchnik 2693 (void *)ChangeAutobot 2694 #endif 2695 }; 2696 2697 static const char * const menutext[_MAX]= 2698 { 2699 "Вибра", 2700 "Звук", 2701 "Автоответчик", 2702 "Показ.хстатус", 2703 #ifdef kluchnik 2704 "Aвтобот" 2705 #endif 2706 }; 2707 \ In segment CODE, align 4, keep-with-next 2708 static int contact_keyhook(void *data, GUI_MSG *msg) 2709 { \ contact_keyhook: \ 00000000 00402DE9 PUSH {LR} 2710 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000004 F210D1E1 LDRSH R1,[R1, #+2] \ 00000008 180051E3 CMP R1,#+24 \ 0000000C 3D005113 CMPNE R1,#+61 \ 00000010 0300001A BNE ??contact_keyhook_0 2711 { 2712 ((void (*)(void))(menuproc[GetCurMenuItem(data)]))(); \ 00000014 8F0100EF SWI +399 \ 00000018 0C109FE5 LDR R1,??contact_keyhook_1 ;; menuproc \ 0000001C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000020 30FF2FE1 BLX R0 2713 } 2714 //if(msg->keys==LEFT_BUTTON) GeneralFuncF1(1); 2715 return(0); \ ??contact_keyhook_0: \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 0080BDE8 POP {PC} ;; return \ ??contact_keyhook_1: \ 0000002C ........ DC32 menuproc 2716 } 2717 \ In segment CODE, align 4, keep-with-next 2718 static void contacthandler(void *data, int curitem, void *unk) 2719 { \ contacthandler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2720 WSHDR *ws; 2721 void *item=AllocMenuItem(data); 2722 extern const char percent_t[]; 2723 ws=AllocMenuWS(data,strlen(menutext[curitem])); \ 00000004 ........ LDR R8,??DataTable54 ;; `?isvibra?0:1)); \ ??contacthandler_0: \ 00000074 580090E5 LDR R0,[R0, #+88] \ 00000078 040000EA B ??contacthandler_5 2731 break; 2732 case 1: 2733 SetMenuItemIconArray(data,item,icon_array+(t->issound?0:1)); \ ??contacthandler_1: \ 0000007C 5C0090E5 LDR R0,[R0, #+92] \ 00000080 020000EA B ??contacthandler_5 2734 break; 2735 case 2: 2736 SetMenuItemIconArray(data,item,icon_array+(t->isautomsg?0:1)); \ ??contacthandler_2: \ 00000084 600090E5 LDR R0,[R0, #+96] \ 00000088 000000EA B ??contacthandler_5 2737 break; 2738 case 3: 2739 SetMenuItemIconArray(data,item,icon_array+(t->isShowXst?0:1)); \ ??contacthandler_3: \ 0000008C 6C0090E5 LDR R0,[R0, #+108] \ ??contacthandler_5: \ 00000090 0610A0E1 MOV R1,R6 \ 00000094 000050E3 CMP R0,#+0 \ 00000098 0000A013 MOVNE R0,#+0 \ 0000009C 0100A003 MOVEQ R0,#+1 \ 000000A0 002188E0 ADD R2,R8,R0, LSL #+2 \ 000000A4 0400A0E1 MOV R0,R4 \ 000000A8 990100EF SWI +409 2740 break; 2741 #ifdef kluchnik 2742 case 4: 2743 SetMenuItemIconArray(data,item,icon_array+(t->isautobot?0:1)); 2744 break; 2745 #endif 2746 } 2747 SetMenuItemText(data, item, ws, curitem); \ ??contacthandler_4: \ 000000AC 0530A0E1 MOV R3,R5 \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0610A0E1 MOV R1,R6 \ 000000B8 0400A0E1 MOV R0,R4 \ 000000BC 9A0100EF SWI +410 2748 } \ 000000C0 F083BDE8 POP {R4-R9,PC} ;; return \ In segment DATA_Z, align 4, align-sorted \ icon_array: \ 00000000 DS8 8 \ 00000008 DS8 4 2749 2750 char cont_hdr[64]; \ cont_hdr: \ 0000000C DS8 64 2751 static const HEADER_DESC contact_list_HDR={0,0,NULL,NULL,NULL,(int)cont_hdr,LGP_NULL}; 2752 static const int _softkeys[] = {0,1,2}; 2753 2754 static const SOFTKEY_DESC _sk[] = 2755 { 2756 {0x0018, 0x0000, (int)"Выбрать"}, 2757 {0x0001, 0x0000, (int)LG_CLOSE}, 2758 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2759 }; 2760 2761 const SOFTKEYSTAB _skt = 2762 { 2763 _sk, 0 2764 }; 2765 static const MENU_DESC contact_list_MNU= 2766 { 2767 8,contact_keyhook,contact_list_ghook,NULL, 2768 _softkeys, 2769 &_skt, 2770 0x11, 2771 contacthandler, 2772 NULL, 2773 NULL, 2774 _MAX 2775 }; 2776 2777 \ In segment CODE, align 4, keep-with-next 2778 int CreateContactMenu(CLIST *t) 2779 { \ CreateContactMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2780 uinContact=t->uin; \ 00000004 ........ LDR R5,??DataTable50 ;; icon_array 2781 icon_array[0]=GetPicNByUnicodeSymbol(CBOX_CHECKED); 2782 icon_array[1]=GetPicNByUnicodeSymbol(CBOX_UNCHECKED); 2783 sprintf(cont_hdr,"Меню кoнт. %s",t->name); \ 00000008 74609FE5 LDR R6,??CreateContactMenu_0 ;; `?keys==0x18) \ 00000020 04009DE5 LDR R0,[SP, #+4] \ 00000024 F200D0E1 LDRSH R0,[R0, #+2] \ 00000028 180050E3 CMP R0,#+24 \ 0000002C 0100001A BNE ??contactlist_menu_onkey_1 2801 { 2802 ShowMainMenu(); \ 00000030 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 2803 return(-1); \ 00000034 C30000EA B ??contactlist_menu_onkey_2 2804 } 2805 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_1: \ 00000038 BC60A0E3 MOV R6,#+188 \ 0000003C 806E86E3 ORR R6,R6,#0x800 \ 00000040 3D0050E3 CMP R0,#+61 \ 00000044 2100001A BNE ??contactlist_menu_onkey_3 2806 { 2807 if (t) \ 00000048 000058E3 CMP R8,#+0 \ 0000004C 7D01000A BEQ ??contactlist_menu_onkey_4 2808 { 2809 if (t->isgroup) \ 00000050 080098E5 LDR R0,[R8, #+8] \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0500000A BEQ ??contactlist_menu_onkey_5 2810 { 2811 t->state^=0xFFFF; \ 0000005C B405D8E1 LDRH R0,[R8, #+84] \ 00000060 FF10A0E3 MOV R1,#+255 \ 00000064 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000068 000021E0 EOR R0,R1,R0 \ 0000006C B405C8E1 STRH R0,[R8, #+84] 2812 RecountMenu(t,1); \ 00000070 710100EA B ??contactlist_menu_onkey_6 2813 return(-1); 2814 } 2815 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_5: \ 00000074 050086E0 ADD R0,R6,R5 \ 00000078 1B0000EF SWI +27 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 0500000A BEQ ??contactlist_menu_onkey_7 2816 { 2817 ClearContactT9Key(); \ 00000084 2010A0E3 MOV R1,#+32 \ 00000088 050086E0 ADD R0,R6,R5 \ 0000008C 1D0100EF SWI +285 2818 RecountMenu(NULL,1); \ 00000090 0110A0E3 MOV R1,#+1 \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 ........ BL RecountMenu 2819 } 2820 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_3: \ 000000D0 010050E3 CMP R0,#+1 \ 000000D4 0700001A BNE ??contactlist_menu_onkey_9 2826 { 2827 if (strlen(ContactT9Key)) \ 000000D8 050086E0 ADD R0,R6,R5 \ 000000DC 1B0000EF SWI +27 \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 0300000A BEQ ??contactlist_menu_onkey_9 2828 { 2829 BackSpaceContactT9(); \ 000000E8 ........ BL BackSpaceContactT9 2830 RecountMenu(NULL,1); \ 000000EC 0110A0E3 MOV R1,#+1 \ ??contactlist_menu_onkey_10: \ 000000F0 0000A0E3 MOV R0,#+0 \ 000000F4 520100EA B ??contactlist_menu_onkey_11 2831 return(-1); 2832 } 2833 } 2834 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_9: \ 000000F8 04009DE5 LDR R0,[SP, #+4] \ 000000FC 0140A0E3 MOV R4,#+1 \ 00000100 041090E5 LDR R1,[R0, #+4] \ 00000104 9320A0E3 MOV R2,#+147 \ 00000108 F200D1E1 LDRSH R0,[R1, #+2] \ 0000010C 402F82E3 ORR R2,R2,#0x100 \ 00000110 020050E1 CMP R0,R2 \ 00000114 8D00001A BNE ??contactlist_menu_onkey_12 2835 { 2836 int key=msg->gbsmsg->submess; \ 00000118 040091E5 LDR R0,[R1, #+4] 2837 if ((key>='0')&&(key<='9')) \ 0000011C 300050E3 CMP R0,#+48 \ 00000120 060000BA BLT ??contactlist_menu_onkey_13 \ 00000124 3A0050E3 CMP R0,#+58 \ 00000128 0C0000AA BGE ??contactlist_menu_onkey_14 2838 { 2839 AddContactT9Key(key); \ 0000012C ........ BL AddContactT9Key 2840 RecountMenu(NULL,1); \ 00000130 0110A0E3 MOV R1,#+1 \ 00000134 0700A0E1 MOV R0,R7 \ 00000138 ........ BL RecountMenu \ 0000013C 160000EA B ??contactlist_menu_onkey_15 2841 return(-1); 2842 } 2843 #ifdef ELKA 2844 if (key==VOL_UP_BUTTON && isVolUpButton) 2845 { 2846 char *small_info=malloc(256); 2847 sprintf(small_info, "Время в онлайн:\n" 2848 "%02d:%02d:%02d\n" 2849 "Сервер:\n%s" 2850 ,uptimeHour, uptimeMin, uptimeSec, hostbuf2); 2851 ShowMSG(1,(int)small_info); 2852 mfree(small_info); 2853 } 2854 2855 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) 2856 { 2857 if(!away_m) 2858 { 2859 away_m=!away_m; 2860 GBS_StopTimer(&away_tmr); 2861 msg_away_timer=AUTO_ENGADE; 2862 away_timer(); 2863 main_d=1; 2864 InputAwayMsg(); 2865 } 2866 else 2867 { 2868 msg_away_timer=0; 2869 away_m=!away_m; 2870 } 2871 UpdateCLheader(); 2872 RefreshGUI(); 2873 } 2874 #endif 2875 if (key==GREEN_BUTTON) \ ??contactlist_menu_onkey_13: \ 00000140 0B0050E3 CMP R0,#+11 \ 00000144 2E00001A BNE ??contactlist_menu_onkey_16 2876 { 2877 #ifdef kluchnik 2878 Show_XTX=!(Show_XTX); 2879 if(Show_XTX) 2880 ShowMSG(1,(int)"Show x-status"); 2881 else 2882 ShowMSG(1,(int)"Show time"); 2883 UpdateCLheader(); 2884 #else 2885 IsActiveUp=!IsActiveUp; \ 00000148 240295E5 LDR R0,[R5, #+548] 2886 RecountMenu(NULL,1); \ 0000014C 0110A0E3 MOV R1,#+1 \ 00000150 000050E3 CMP R0,#+0 \ 00000154 0040A013 MOVNE R4,#+0 \ 00000158 244285E5 STR R4,[R5, #+548] \ 0000015C E3FFFFEA B ??contactlist_menu_onkey_10 2887 #endif 2888 return(-1); 2889 } 2890 if (key==LEFT_BUTTON) \ ??contactlist_menu_onkey_14: \ 00000160 3D0050E3 CMP R0,#+61 \ 00000164 1100000A BEQ ??contactlist_menu_onkey_17 2891 { 2892 while(t=(CLIST *)(t->next)) 2893 { 2894 if (t->isunread) goto doit; 2895 } 2896 t=(CLIST *)(&cltop); 2897 while(t=(CLIST *)(t->next)) 2898 { 2899 if (t->isunread) goto doit; 2900 } 2901 if (t && Is_Show_Groups) {//???? ??????? ? ?????????? ??????? 2902 if (!t->isgroup) 2903 t=FindGroupByID(t->group); 2904 if (t && !t->state) {//?????? ??????? ? ??? ???????? 2905 t->state^=0xFFFF; 2906 goto does; 2907 } 2908 } 2909 doit: 2910 { 2911 CLIST *g=FindGroupByID(t->group); 2912 if (g) 2913 { 2914 if (g->state) 2915 { 2916 g->state=0; 2917 } 2918 } 2919 } 2920 does: 2921 RecountMenu(t,1); 2922 return(-1); 2923 } 2924 if (key=='*') 2925 { 2926 while(t=(CLIST *)(t->next)) 2927 { 2928 if (t->just_now) goto doit3; 2929 } 2930 t=(CLIST *)(&cltop); 2931 while(t=(CLIST *)(t->next)) 2932 { 2933 if (t->just_now) goto doit3; 2934 } 2935 return(-1); 2936 doit3: 2937 { 2938 CLIST *g=FindGroupByID(t->group); 2939 if (g) 2940 { 2941 if (g->state) 2942 { 2943 g->state=0; 2944 } 2945 } 2946 } 2947 RecountMenu(t,1); 2948 return(-1); 2949 } 2950 2951 if (key=='#') 2952 { 2953 if(ActionResh) 2954 { 2955 while(t=(CLIST *)(t->next)) 2956 { 2957 if (t->isactive) goto doit4; 2958 } 2959 t=(CLIST *)(&cltop); 2960 while(t=(CLIST *)(t->next)) 2961 { 2962 if (t->isactive) goto doit4; 2963 } 2964 return(-1); 2965 doit4: 2966 { 2967 CLIST *g=FindGroupByID(t->group); 2968 if (g) 2969 { 2970 if (g->state) 2971 { 2972 g->state=0; 2973 } 2974 } 2975 } 2976 RecountMenu(t,1); 2977 } 2978 else 2979 { 2980 if(t->log && !(t->just_now)) 2981 { 2982 FreeLOGQ(&t->log); 2983 t->msg_count=0; 2984 t->isactive=0; 2985 } 2986 2987 if(t->just_now) 2988 { 2989 CLIST *tt; 2990 tt=FindContactByUin(t->uin); 2991 tt->just_now=0; 2992 } 2993 2994 if(t->uin==UIN) 2995 { 2996 CLIST *tt; 2997 tt=(CLIST *)(&cltop); 2998 while(tt=(CLIST *)(tt->next)) 2999 { 3000 if(tt->just_now) tt->just_now=0; 3001 } 3002 } 3003 3004 if(strlen(ContactT9Key)) 3005 ClearContactT9Key(); 3006 RecountMenu(NULL,0); 3007 } 3008 return(-1); 3009 } 3010 if (key==RIGHT_BUTTON) \ 00000168 3E0050E3 CMP R0,#+62 \ 0000016C 7700001A BNE ??contactlist_menu_onkey_12 3011 { 3012 //Послать запрос текста XStatus 3013 if (t) \ 00000170 000058E3 CMP R8,#+0 \ 00000174 7500000A BEQ ??contactlist_menu_onkey_12 3014 { 3015 if (!t->isgroup) \ 00000178 080098E5 LDR R0,[R8, #+8] \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 7200001A BNE ??contactlist_menu_onkey_12 3016 { 3017 FreeXText(t); \ 00000184 0800A0E1 MOV R0,R8 \ 00000188 ........ _BLF FreeXText,??FreeXText??rA 3018 t->req_xtext=0; \ 0000018C AC7088E5 STR R7,[R8, #+172] 3019 RequestXText(t->uin); \ 00000190 0C0098E5 LDR R0,[R8, #+12] \ 00000194 ........ BL RequestXText 3020 RefreshGUI(); \ 00000198 960100EF SWI +406 3021 return(-1); \ ??contactlist_menu_onkey_15: \ 0000019C 000064E2 RSB R0,R4,#+0 \ 000001A0 F68FBDE8 POP {R1,R2,R4-R11,PC} 3022 } 3023 } 3024 } \ ??contactlist_menu_onkey_18: \ 000001A4 800098E5 LDR R0,[R8, #+128] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 0900001A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_17: \ 000001B0 008098E5 LDR R8,[R8, #+0] \ 000001B4 000058E3 CMP R8,#+0 \ 000001B8 F9FFFF1A BNE ??contactlist_menu_onkey_18 \ 000001BC AF8F85E2 ADD R8,R5,#+700 \ ??contactlist_menu_onkey_20: \ 000001C0 008098E5 LDR R8,[R8, #+0] \ 000001C4 000058E3 CMP R8,#+0 \ 000001C8 0200000A BEQ ??contactlist_menu_onkey_19 \ 000001CC 800098E5 LDR R0,[R8, #+128] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 F9FFFF0A BEQ ??contactlist_menu_onkey_20 \ ??contactlist_menu_onkey_19: \ 000001D8 100098E5 LDR R0,[R8, #+16] \ 000001DC ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 B415D011 LDRHNE R1,[R0, #+84] \ 000001E8 00005113 CMPNE R1,#+0 \ 000001EC B475C011 STRHNE R7,[R0, #+84] \ 000001F0 0110A0E3 MOV R1,#+1 \ 000001F4 0800A0E1 MOV R0,R8 \ 000001F8 ........ BL RecountMenu \ 000001FC 000064E2 RSB R0,R4,#+0 \ 00000200 F68FBDE8 POP {R1,R2,R4-R11,PC} \ ??contactlist_menu_onkey_16: \ 00000204 2A0050E3 CMP R0,#+42 \ 00000208 1D00000A BEQ ??contactlist_menu_onkey_21 \ 0000020C 230050E3 CMP R0,#+35 \ 00000210 4E00001A BNE ??contactlist_menu_onkey_12 \ 00000214 4C0195E5 LDR R0,[R5, #+332] \ 00000218 000050E3 CMP R0,#+0 \ 0000021C 2600001A BNE ??contactlist_menu_onkey_22 \ 00000220 900098E5 LDR R0,[R8, #+144] \ 00000224 000050E3 CMP R0,#+0 \ 00000228 0600000A BEQ ??contactlist_menu_onkey_23 \ 0000022C 680098E5 LDR R0,[R8, #+104] \ 00000230 000050E3 CMP R0,#+0 \ 00000234 0300001A BNE ??contactlist_menu_onkey_23 \ 00000238 900088E2 ADD R0,R8,#+144 \ 0000023C ........ BL FreeLOGQ \ 00000240 A07088E5 STR R7,[R8, #+160] \ 00000244 9C7088E5 STR R7,[R8, #+156] \ ??contactlist_menu_onkey_23: \ 00000248 680098E5 LDR R0,[R8, #+104] \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 0200000A BEQ ??contactlist_menu_onkey_24 \ 00000254 0C0098E5 LDR R0,[R8, #+12] \ 00000258 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000025C 687080E5 STR R7,[R0, #+104] \ ??contactlist_menu_onkey_24: \ 00000260 0C0098E5 LDR R0,[R8, #+12] \ 00000264 281195E5 LDR R1,[R5, #+296] \ 00000268 010050E1 CMP R0,R1 \ 0000026C 2B00001A BNE ??contactlist_menu_onkey_25 \ 00000270 AF0F85E2 ADD R0,R5,#+700 \ 00000274 260000EA B ??contactlist_menu_onkey_26 \ ??contactlist_menu_onkey_27: \ 00000278 680098E5 LDR R0,[R8, #+104] \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 D4FFFF1A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_21: \ 00000284 008098E5 LDR R8,[R8, #+0] \ 00000288 000058E3 CMP R8,#+0 \ 0000028C F9FFFF1A BNE ??contactlist_menu_onkey_27 \ 00000290 AF8F85E2 ADD R8,R5,#+700 \ ??contactlist_menu_onkey_28: \ 00000294 008098E5 LDR R8,[R8, #+0] \ 00000298 000058E3 CMP R8,#+0 \ 0000029C E900000A BEQ ??contactlist_menu_onkey_4 \ 000002A0 680098E5 LDR R0,[R8, #+104] \ 000002A4 000050E3 CMP R0,#+0 \ 000002A8 F9FFFF0A BEQ ??contactlist_menu_onkey_28 \ 000002AC C9FFFFEA B ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_29: \ 000002B0 9C0098E5 LDR R0,[R8, #+156] \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0900001A BNE ??contactlist_menu_onkey_30 \ ??contactlist_menu_onkey_22: \ 000002BC 008098E5 LDR R8,[R8, #+0] \ 000002C0 000058E3 CMP R8,#+0 \ 000002C4 F9FFFF1A BNE ??contactlist_menu_onkey_29 \ 000002C8 AF8F85E2 ADD R8,R5,#+700 \ ??contactlist_menu_onkey_31: \ 000002CC 008098E5 LDR R8,[R8, #+0] \ 000002D0 000058E3 CMP R8,#+0 \ 000002D4 DB00000A BEQ ??contactlist_menu_onkey_4 \ 000002D8 9C0098E5 LDR R0,[R8, #+156] \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 F9FFFF0A BEQ ??contactlist_menu_onkey_31 \ ??contactlist_menu_onkey_30: \ 000002E4 100098E5 LDR R0,[R8, #+16] \ 000002E8 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000002EC 000050E3 CMP R0,#+0 \ 000002F0 B415D011 LDRHNE R1,[R0, #+84] \ 000002F4 00005113 CMPNE R1,#+0 \ 000002F8 B475C011 STRHNE R7,[R0, #+84] \ 000002FC 0110A0E3 MOV R1,#+1 \ 00000300 0800A0E1 MOV R0,R8 \ 00000304 0E0000EA B ??contactlist_menu_onkey_32 \ ??contactlist_menu_onkey_33: \ 00000308 681090E5 LDR R1,[R0, #+104] \ 0000030C 000051E3 CMP R1,#+0 \ 00000310 68708015 STRNE R7,[R0, #+104] \ ??contactlist_menu_onkey_26: \ 00000314 000090E5 LDR R0,[R0, #+0] \ 00000318 000050E3 CMP R0,#+0 \ 0000031C F9FFFF1A BNE ??contactlist_menu_onkey_33 \ ??contactlist_menu_onkey_25: \ 00000320 050086E0 ADD R0,R6,R5 \ 00000324 1B0000EF SWI +27 \ 00000328 000050E3 CMP R0,#+0 \ 0000032C 0200000A BEQ ??contactlist_menu_onkey_34 \ 00000330 2010A0E3 MOV R1,#+32 \ 00000334 050086E0 ADD R0,R6,R5 \ 00000338 1D0100EF SWI +285 \ ??contactlist_menu_onkey_34: \ 0000033C 0010A0E3 MOV R1,#+0 \ 00000340 0100A0E1 MOV R0,R1 \ ??contactlist_menu_onkey_32: \ 00000344 ........ BL RecountMenu \ ??contactlist_menu_onkey_2: \ 00000348 0700E0E1 MVN R0,R7 \ 0000034C F68FBDE8 POP {R1,R2,R4-R11,PC} 3025 /* 3026 if (key==0x19) 3027 { 3028 CreateScreenSelectGUI(); 3029 // GeneralFuncF1(1); 3030 return(-1); 3031 }*/ 3032 } 3033 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_12: \ 00000350 F200D1E1 LDRSH R0,[R1, #+2] \ 00000354 022082E2 ADD R2,R2,#+2 \ 00000358 020050E1 CMP R0,R2 \ 0000035C DB00001A BNE ??contactlist_menu_onkey_35 3034 { 3035 if (msg->gbsmsg->submess=='#') \ 00000360 040091E5 LDR R0,[R1, #+4] \ 00000364 ........ LDR R9,??DataTable54 ;; `?gbsmsg->submess=='*') \ ??contactlist_menu_onkey_36: \ 000003DC 2A0050E3 CMP R0,#+42 \ 000003E0 1200001A BNE ??contactlist_menu_onkey_37 3055 { 3056 ClearContactT9Key(); \ 000003E4 2010A0E3 MOV R1,#+32 \ 000003E8 050086E0 ADD R0,R6,R5 \ 000003EC 1D0100EF SWI +285 3057 RecountMenu(NULL,1); \ 000003F0 0110A0E3 MOV R1,#+1 \ 000003F4 0700A0E1 MOV R0,R7 \ 000003F8 ........ BL RecountMenu 3058 silenthide=1; \ 000003FC 684285E5 STR R4,[R5, #+616] 3059 gipc.name_to=ipc_xtask_name; \ 00000400 780F86E2 ADD R0,R6,#+480 \ 00000404 090080E0 ADD R0,R0,R9 \ 00000408 880085E5 STR R0,[R5, #+136] 3060 gipc.name_from=ipc_my_name; \ 0000040C 700F86E2 ADD R0,R6,#+448 \ 00000410 090080E0 ADD R0,R0,R9 \ 00000414 8C0085E5 STR R0,[R5, #+140] 3061 gipc.data=0; \ 00000418 907085E5 STR R7,[R5, #+144] 3062 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 0000041C 883085E2 ADD R3,R5,#+136 \ 00000420 0420A0E1 MOV R2,R4 \ 00000424 0B10A0E1 MOV R1,R11 \ 00000428 0A00A0E1 MOV R0,R10 \ 0000042C 000100EF SWI +256 3063 // DrawScreenSaver(); 3064 } 3065 3066 if (msg->gbsmsg->submess==RIGHT_BUTTON) \ ??contactlist_menu_onkey_37: \ 00000430 04009DE5 LDR R0,[SP, #+4] \ 00000434 040090E5 LDR R0,[R0, #+4] \ 00000438 040090E5 LDR R0,[R0, #+4] \ 0000043C 3E0050E3 CMP R0,#+62 \ 00000440 0100001A BNE ??contactlist_menu_onkey_38 3067 { 3068 CreateContactMenu(t); \ 00000444 0800A0E1 MOV R0,R8 \ 00000448 ........ BL CreateContactMenu 3069 } 3070 3071 //-------------------- LONG PRESS ACTION ON CL --------------------// 3072 3073 switch(msg->gbsmsg->submess) \ ??contactlist_menu_onkey_38: \ 0000044C 04009DE5 LDR R0,[SP, #+4] \ 00000450 80A29FE5 LDR R10,??contactlist_menu_onkey_39 ;; WriteDefSettings \ 00000454 040090E5 LDR R0,[R0, #+4] \ 00000458 040090E5 LDR R0,[R0, #+4] \ 0000045C 310040E2 SUB R0,R0,#+49 \ 00000460 080050E3 CMP R0,#+8 \ 00000464 8B00008A BHI ??contactlist_menu_onkey_40 \ 00000468 011F8FE2 ADR R1,??contactlist_menu_onkey_0 \ 0000046C 0010D1E7 LDRB R1,[R1, R0] \ 00000470 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??contactlist_menu_onkey_0: \ 00000474 02101F2C DC8 +2,+16,+31,+44 \ 00000478 3C526376 DC8 +60,+82,+99,+118 \ 0000047C 7C000000 DC8 +124,+0,+0,+0 3074 { 3075 case '1': 3076 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??contactlist_menu_onkey_41: \ 00000480 700295E5 LDR R0,[R5, #+624] \ 00000484 000050E3 CMP R0,#+0 \ 00000488 0040A013 MOVNE R4,#+0 \ 0000048C 704285E5 STR R4,[R5, #+624] 3077 // if(isShowMsgLongPress) 3078 // { 3079 if(Is_Sounds_Enabled) \ 00000490 000054E3 CMP R4,#+0 3080 ShowMSG(1,(int)"Sound 0n"); \ 00000494 5C0F8612 ADDNE R0,R6,#+368 \ 00000498 09108010 ADDNE R1,R0,R9 3081 else 3082 ShowMSG(1,(int)"Sound Off"); \ 0000049C A21E8902 ADDEQ R1,R9,#+2592 \ 000004A0 0100A0E3 MOV R0,#+1 \ 000004A4 480100EF SWI +328 3083 // } 3084 SUBPROC((void*)WriteDefSettings); \ 000004A8 0A00A0E1 MOV R0,R10 \ 000004AC 710100EF SWI +369 3085 RefreshGUI(); \ 000004B0 960100EF SWI +406 \ 000004B4 770000EA B ??contactlist_menu_onkey_40 3086 break; 3087 case '2': 3088 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??contactlist_menu_onkey_42: \ 000004B8 280295E5 LDR R0,[R5, #+552] \ 000004BC 000050E3 CMP R0,#+0 \ 000004C0 0040A013 MOVNE R4,#+0 \ 000004C4 284285E5 STR R4,[R5, #+552] 3089 SUBPROC((void*)WriteDefSettings); \ 000004C8 0A00A0E1 MOV R0,R10 \ 000004CC 710100EF SWI +369 3090 RefreshGUI(); \ 000004D0 960100EF SWI +406 3091 // if(isShowMsgLongPress) 3092 // { 3093 if(Is_Vibra_Enabled) \ 000004D4 280295E5 LDR R0,[R5, #+552] \ 000004D8 000050E3 CMP R0,#+0 \ 000004DC 530F8602 ADDEQ R0,R6,#+332 3094 ShowMSG(1,(int)"Vibra On"); \ 000004E0 560F8612 ADDNE R0,R6,#+344 \ ??contactlist_menu_onkey_43: \ 000004E4 091080E0 ADD R1,R0,R9 \ 000004E8 0100A0E3 MOV R0,#+1 \ ??contactlist_menu_onkey_44: \ 000004EC 480100EF SWI +328 \ 000004F0 680000EA B ??contactlist_menu_onkey_40 3095 else 3096 ShowMSG(1,(int)"Vibra Off"); 3097 // } 3098 break; 3099 case '3': 3100 if(CurrentPrivateStatus!=1) \ ??contactlist_menu_onkey_45: \ 000004F4 800295E5 LDR R0,[R5, #+640] \ 000004F8 010050E3 CMP R0,#+1 \ 000004FC 0500000A BEQ ??contactlist_menu_onkey_46 3101 { 3102 SetPrivateStatus(1);//Инвиз \ 00000500 0100A0E3 MOV R0,#+1 \ 00000504 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 3103 // if(isShowMsgLongPress) 3104 ShowMSG(1,(int)"Инвиз включен"); \ 00000508 4F0F86E2 ADD R0,R6,#+316 \ 0000050C 091080E0 ADD R1,R0,R9 \ 00000510 0400A0E1 MOV R0,R4 \ ??contactlist_menu_onkey_47: \ 00000514 F4FFFFEA B ??contactlist_menu_onkey_44 3105 } 3106 else 3107 { 3108 SetPrivateStatus(3);//не инвиз:) \ ??contactlist_menu_onkey_46: \ 00000518 0300A0E3 MOV R0,#+3 \ 0000051C ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 3109 // if(isShowMsgLongPress) 3110 ShowMSG(1,(int)"Инвиз выключен"); \ 00000520 4B0F86E2 ADD R0,R6,#+300 \ 00000524 EEFFFFEA B ??contactlist_menu_onkey_43 3111 } 3112 break; 3113 case '4': 3114 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??contactlist_menu_onkey_48: \ 00000528 100295E5 LDR R0,[R5, #+528] \ 0000052C 000050E3 CMP R0,#+0 \ 00000530 0040A013 MOVNE R4,#+0 \ 00000534 104285E5 STR R4,[R5, #+528] 3115 SUBPROC((void*)WriteDefSettings); \ 00000538 0A00A0E1 MOV R0,R10 \ 0000053C 710100EF SWI +369 3116 RefreshGUI(); \ 00000540 960100EF SWI +406 3117 // if(isShowMsgLongPress) 3118 // { 3119 if(Is_Double_Vibra_On) \ 00000544 100295E5 LDR R0,[R5, #+528] \ 00000548 000050E3 CMP R0,#+0 \ 0000054C 0300000A BEQ ??contactlist_menu_onkey_49 3120 ShowMSG(1,(int)"Vibra rem On"); \ 00000550 470F86E2 ADD R0,R6,#+284 \ 00000554 091080E0 ADD R1,R0,R9 \ 00000558 0100A0E3 MOV R0,#+1 \ 0000055C E2FFFFEA B ??contactlist_menu_onkey_44 3121 else 3122 ShowMSG(1,(int)"Vibra rem Off"); \ ??contactlist_menu_onkey_49: \ 00000560 430F86E2 ADD R0,R6,#+268 \ 00000564 DEFFFFEA B ??contactlist_menu_onkey_43 3123 // } 3124 break; 3125 case '5': 3126 { 3127 CLIST *cl; 3128 cl=(CLIST *)(&cltop); \ ??contactlist_menu_onkey_50: \ 00000568 AF4F85E2 ADD R4,R5,#+700 \ 0000056C 060000EA B ??contactlist_menu_onkey_51 3129 while(cl=(CLIST *)(cl->next)) 3130 { 3131 if(cl->log) \ ??contactlist_menu_onkey_52: \ 00000570 900094E5 LDR R0,[R4, #+144] \ 00000574 000050E3 CMP R0,#+0 \ 00000578 0300000A BEQ ??contactlist_menu_onkey_51 3132 { 3133 FreeLOGQ(&cl->log); \ 0000057C 900084E2 ADD R0,R4,#+144 \ 00000580 ........ BL FreeLOGQ 3134 cl->msg_count=0; \ 00000584 A07084E5 STR R7,[R4, #+160] 3135 cl->isactive=0; \ 00000588 9C7084E5 STR R7,[R4, #+156] 3136 } 3137 } \ ??contactlist_menu_onkey_51: \ 0000058C 004094E5 LDR R4,[R4, #+0] \ 00000590 000054E3 CMP R4,#+0 \ 00000594 F5FFFF1A BNE ??contactlist_menu_onkey_52 3138 3139 if(strlen(ContactT9Key)) \ 00000598 050086E0 ADD R0,R6,R5 \ 0000059C 1B0000EF SWI +27 \ 000005A0 000050E3 CMP R0,#+0 \ 000005A4 0200000A BEQ ??contactlist_menu_onkey_53 3140 ClearContactT9Key(); \ 000005A8 2010A0E3 MOV R1,#+32 \ 000005AC 050086E0 ADD R0,R6,R5 \ 000005B0 1D0100EF SWI +285 3141 // t->isactive=0; 3142 RecountMenu(NULL,1); \ ??contactlist_menu_onkey_53: \ 000005B4 0110A0E3 MOV R1,#+1 \ 000005B8 0000A0E3 MOV R0,#+0 \ 000005BC 200000EA B ??contactlist_menu_onkey_11 3143 return (-1); 3144 } 3145 case '6': 3146 if(!away_m) \ ??contactlist_menu_onkey_54: \ 000005C0 3C0295E5 LDR R0,[R5, #+572] \ 000005C4 000050E3 CMP R0,#+0 \ 000005C8 0900001A BNE ??contactlist_menu_onkey_55 3147 { 3148 away_m=!away_m; \ 000005CC 3C4285E5 STR R4,[R5, #+572] 3149 GBS_StopTimer(&away_tmr); \ 000005D0 2800A0E3 MOV R0,#+40 \ 000005D4 480D80E3 ORR R0,R0,#0x1200 \ 000005D8 050080E0 ADD R0,R0,R5 \ 000005DC 440100EF SWI +324 3150 msg_away_timer=AUTO_ENGADE; \ 000005E0 D40095E5 LDR R0,[R5, #+212] \ 000005E4 380285E5 STR R0,[R5, #+568] 3151 away_timer(); \ 000005E8 ........ BL away_timer 3152 // ShowMSG(1,(int)"Автоответчик включен!"); 3153 InputAwayMsg(); \ 000005EC ........ BL InputAwayMsg \ 000005F0 010000EA B ??contactlist_menu_onkey_56 3154 } 3155 else 3156 { 3157 msg_away_timer=0; \ ??contactlist_menu_onkey_55: \ 000005F4 387285E5 STR R7,[R5, #+568] 3158 away_m=!away_m; \ 000005F8 3C7285E5 STR R7,[R5, #+572] 3159 // ShowMSG(1,(int)"Автоответчик выключен!"); 3160 } 3161 UpdateCLheader(); \ ??contactlist_menu_onkey_56: \ 000005FC ........ BL UpdateCLheader \ 00000600 240000EA B ??contactlist_menu_onkey_40 3162 break; 3163 case '7': 3164 { 3165 Show_XTX=!(Show_XTX); \ ??contactlist_menu_onkey_57: \ 00000604 480295E5 LDR R0,[R5, #+584] \ 00000608 000050E3 CMP R0,#+0 \ 0000060C 0040A013 MOVNE R4,#+0 \ 00000610 484285E5 STR R4,[R5, #+584] 3166 // if(isShowMsgLongPress) 3167 // { 3168 if(Show_XTX) \ 00000614 000054E3 CMP R4,#+0 3169 ShowMSG(1,(int)"Show x-status"); \ 00000618 FC008612 ADDNE R0,R6,#+252 3170 else 3171 ShowMSG(1,(int)"Show time"); \ 0000061C F0008602 ADDEQ R0,R6,#+240 \ 00000620 091080E0 ADD R1,R0,R9 \ 00000624 0100A0E3 MOV R0,#+1 \ 00000628 480100EF SWI +328 3172 //} 3173 } 3174 ClearContactT9Key(); \ 0000062C 2010A0E3 MOV R1,#+32 \ 00000630 050086E0 ADD R0,R6,R5 \ 00000634 1D0100EF SWI +285 3175 UpdateCLheader(); \ 00000638 ........ BL UpdateCLheader 3176 RecountMenu(t,1); \ ??contactlist_menu_onkey_6: \ 0000063C 0110A0E3 MOV R1,#+1 \ 00000640 0800A0E1 MOV R0,R8 \ ??contactlist_menu_onkey_11: \ 00000644 ........ BL RecountMenu 3177 return -1; \ ??contactlist_menu_onkey_4: \ 00000648 0700E0E1 MVN R0,R7 \ 0000064C F68FBDE8 POP {R1,R2,R4-R11,PC} 3178 case '8': 3179 { 3180 WSHDR *ws; 3181 ws=AllocWS(150); \ ??contactlist_menu_onkey_58: \ 00000650 9600A0E3 MOV R0,#+150 \ 00000654 250100EF SWI +293 \ 00000658 0040A0E1 MOV R4,R0 3182 str_2ws(ws,suc_config_name,128); \ 0000065C 8020A0E3 MOV R2,#+128 \ 00000660 E61E85E2 ADD R1,R5,#+3680 \ 00000664 040000EA B ??contactlist_menu_onkey_59 3183 ExecuteFile(ws,0,0); 3184 FreeWS(ws); 3185 } 3186 break; 3187 case '9': 3188 { 3189 3190 WSHDR *ws; 3191 ws=AllocWS(150); \ ??contactlist_menu_onkey_60: \ 00000668 9600A0E3 MOV R0,#+150 \ 0000066C 250100EF SWI +293 \ 00000670 0040A0E1 MOV R4,R0 3192 str_2ws(ws,suc_config_name_mod,128); \ 00000674 8020A0E3 MOV R2,#+128 \ 00000678 EA1E85E2 ADD R1,R5,#+3744 \ ??contactlist_menu_onkey_59: \ 0000067C 6C0100EF SWI +364 3193 ExecuteFile(ws,0,0); \ 00000680 0020A0E3 MOV R2,#+0 \ 00000684 0210A0E1 MOV R1,R2 \ 00000688 0400A0E1 MOV R0,R4 \ 0000068C 940000EF SWI +148 3194 FreeWS(ws); \ 00000690 0400A0E1 MOV R0,R4 \ 00000694 290100EF SWI +297 3195 } 3196 break; 3197 } 3198 3199 int key=msg->gbsmsg->submess; \ ??contactlist_menu_onkey_40: \ 00000698 04009DE5 LDR R0,[SP, #+4] \ 0000069C 040090E5 LDR R0,[R0, #+4] \ 000006A0 040090E5 LDR R0,[R0, #+4] 3200 if ((key>='0')&&(key<='9')) \ 000006A4 300050E3 CMP R0,#+48 \ 000006A8 080000BA BLT ??contactlist_menu_onkey_35 \ 000006AC 3A0050E3 CMP R0,#+58 \ 000006B0 060000AA BGE ??contactlist_menu_onkey_35 3201 { 3202 ClearContactT9Key(); \ 000006B4 2010A0E3 MOV R1,#+32 \ 000006B8 050086E0 ADD R0,R6,R5 \ 000006BC 1D0100EF SWI +285 3203 UpdateCLheader(); \ 000006C0 ........ BL UpdateCLheader 3204 RecountMenu(NULL,1); \ 000006C4 0110A0E3 MOV R1,#+1 \ 000006C8 0000A0E3 MOV R0,#+0 \ 000006CC ........ BL RecountMenu 3205 } 3206 } 3207 return(0); \ ??contactlist_menu_onkey_35: \ 000006D0 0000A0E3 MOV R0,#+0 \ 000006D4 F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return \ ??contactlist_menu_onkey_39: \ 000006D8 ........ DC32 WriteDefSettings 3208 } 3209 \ In segment CODE, align 4, keep-with-next 3210 void GetOnTotalContact(int group_id,int *_onlinetotal) 3211 { 3212 CLIST *t; 3213 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable53 ;; S_ICONS + 700 \ 00000004 30002DE9 PUSH {R4,R5} 3214 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 3215 while((t=t->next)) 3216 { 3217 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 3218 { 3219 total++; 3220 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 3221 } 3222 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 3223 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 3224 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 3225 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 3226 3227 \ In segment CODE, align 4, keep-with-next 3228 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 3229 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 3230 CLIST *t; 3231 #ifdef USE_MLMENU 3232 void *item=AllocMLMenuItem(data); 3233 #else 3234 void *item=AllocMenuItem(data); 3235 #endif 3236 int icon; 3237 3238 WSHDR *ws2; 3239 #ifdef USE_MLMENU 3240 WSHDR *ws4; 3241 #endif 3242 WSHDR ws1loc, *ws1; 3243 unsigned short num[128]; 3244 ws1=CreateLocalWS(&ws1loc,num,128); 3245 #ifdef USE_MLMENU 3246 WSHDR ws3loc, *ws3; 3247 unsigned short num3[128]; 3248 ws3=CreateLocalWS(&ws3loc,num3,128); 3249 char s[64]; 3250 #endif 3251 t=FindContactByN(curitem); 3252 if (t) \ 00000008 ........ LDR R10,??DataTable54 ;; `?just_now) \ 00000060 680098E5 LDR R0,[R8, #+104] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0C00000A BEQ ??contactlist_menu_iconhndl_2 3258 { 3259 char *test=malloc(64); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 00B0A0E1 MOV R11,R0 3260 sprintf(test, ">> %s <<", t->name); \ 00000078 142088E2 ADD R2,R8,#+20 \ 0000007C 9A1E8AE2 ADD R1,R10,#+2464 \ 00000080 160000EF SWI +22 3261 wsprintf(ws1,percent_t,test); \ 00000084 0B20A0E1 MOV R2,R11 \ 00000088 28108AE2 ADD R1,R10,#+40 \ 0000008C 0600A0E1 MOV R0,R6 \ 00000090 240100EF SWI +292 3262 mfree(test); \ 00000094 0B00A0E1 MOV R0,R11 \ 00000098 150000EF SWI +21 \ 0000009C 030000EA B ??contactlist_menu_iconhndl_3 3263 } 3264 else 3265 wsprintf(ws1,percent_t,t->name); \ ??contactlist_menu_iconhndl_2: \ 000000A0 142088E2 ADD R2,R8,#+20 \ 000000A4 28108AE2 ADD R1,R10,#+40 \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC 240100EF SWI +292 3266 if (t->just_now) \ ??contactlist_menu_iconhndl_3: \ 000000B0 680098E5 LDR R0,[R8, #+104] \ 000000B4 08B0A0E3 MOV R11,#+8 \ 000000B8 E0BC8BE3 ORR R11,R11,#0xE000 \ 000000BC 000050E3 CMP R0,#+0 3267 { 3268 wsInsertChar(ws1,0x0004,1); \ 000000C0 0120A013 MOVNE R2,#+1 \ 000000C4 0410A013 MOVNE R1,#+4 \ 000000C8 0400001A BNE ??contactlist_menu_iconhndl_4 3269 wsInsertChar(ws1,0xE008,1); 3270 } 3271 else 3272 if (t->isactive) \ 000000CC 9C0098E5 LDR R0,[R8, #+156] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 0700000A BEQ ??contactlist_menu_iconhndl_5 3273 { 3274 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 3275 wsInsertChar(ws1,0xE008,1); \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC 0B10A0E1 MOV R1,R11 \ 000000F0 0600A0E1 MOV R0,R6 \ 000000F4 1D0000EF SWI +29 3276 } 3277 #ifdef USE_MLMENU 3278 if ((t->xtext && t->xtext[0]!=0) && /* (Show_XTX) || */(t->isShowXst) && (t->state!=0xFFFF))//Если контакт онлайн и показывать хстатус \ ??contactlist_menu_iconhndl_5: \ 000000F8 A40098E5 LDR R0,[R8, #+164] \ 000000FC 0AB08BE2 ADD R11,R11,#+10 \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0000D015 LDRBNE R0,[R0, #+0] \ 00000108 00005013 CMPNE R0,#+0 \ 0000010C 6C009815 LDRNE R0,[R8, #+108] \ 00000110 00005013 CMPNE R0,#+0 \ 00000114 1600000A BEQ ??contactlist_menu_iconhndl_6 \ 00000118 B405D8E1 LDRH R0,[R8, #+84] \ 0000011C FF10A0E3 MOV R1,#+255 \ 00000120 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000124 010050E1 CMP R0,R1 \ 00000128 1100000A BEQ ??contactlist_menu_iconhndl_6 3279 { 3280 int i; 3281 zeromem(s,64); \ 0000012C 4010A0E3 MOV R1,#+64 \ 00000130 820F8DE2 ADD R0,SP,#+520 \ 00000134 1D0100EF SWI +285 3282 i=t->xtext[0]; \ 00000138 A40098E5 LDR R0,[R8, #+164] \ ??contactlist_menu_iconhndl_7: \ 0000013C 0020D0E5 LDRB R2,[R0, #+0] 3283 if (i>63) i=63; 3284 strncpy(s,t->xtext+1,i); \ 00000140 011080E2 ADD R1,R0,#+1 \ 00000144 820F8DE2 ADD R0,SP,#+520 \ 00000148 400052E3 CMP R2,#+64 \ 0000014C 3F20A0A3 MOVGE R2,#+63 \ 00000150 160100EF SWI +278 3285 wsprintf(ws3,"%c%t",0xE012,s); \ 00000154 823F8DE2 ADD R3,SP,#+520 \ 00000158 0B20A0E1 MOV R2,R11 \ 0000015C 9800A0E3 MOV R0,#+152 \ 00000160 900E80E3 ORR R0,R0,#0x900 \ 00000164 0A1080E0 ADD R1,R0,R10 \ 00000168 0700A0E1 MOV R0,R7 \ 0000016C 240100EF SWI +292 \ 00000170 0D0000EA B ??contactlist_menu_iconhndl_8 3286 } 3287 else 3288 if(t->xtext2 && t->xtext2[0]!=0) \ ??contactlist_menu_iconhndl_6: \ 00000174 A80098E5 LDR R0,[R8, #+168] \ 00000178 000050E3 CMP R0,#+0 \ 0000017C 0000D015 LDRBNE R0,[R0, #+0] \ 00000180 00005013 CMPNE R0,#+0 \ 00000184 0400000A BEQ ??contactlist_menu_iconhndl_9 3289 { 3290 int i; 3291 zeromem(s,64); \ 00000188 4010A0E3 MOV R1,#+64 \ 0000018C 820F8DE2 ADD R0,SP,#+520 \ 00000190 1D0100EF SWI +285 3292 i=t->xtext2[0]; \ 00000194 A80098E5 LDR R0,[R8, #+168] \ 00000198 E7FFFFEA B ??contactlist_menu_iconhndl_7 3293 if (i>63) i=63; 3294 strncpy(s,t->xtext2+1,i); 3295 wsprintf(ws3,"%c%t",0xE012,s); 3296 } 3297 else 3298 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_9: \ 0000019C 0C2098E5 LDR R2,[R8, #+12] \ 000001A0 2E108AE2 ADD R1,R10,#+46 \ 000001A4 0700A0E1 MOV R0,R7 \ 000001A8 240100EF SWI +292 3299 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_8: \ 000001AC B605D8E1 LDRH R0,[R8, #+86] \ 000001B0 ........ LDR R2,??DataTable55 ;; total_xstatuses \ 000001B4 0010A0E1 MOV R1,R0 \ 000001B8 002092E5 LDR R2,[R2, #+0] \ 000001BC 020051E1 CMP R1,R2 \ 000001C0 1E0000AA BGE ??contactlist_menu_iconhndl_10 \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 1C00000A BEQ ??contactlist_menu_iconhndl_10 3300 { 3301 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 000001CC 0120A0E3 MOV R2,#+1 \ 000001D0 3700A0E3 MOV R0,#+55 \ 000001D4 E10C80E3 ORR R0,R0,#0xE100 \ 000001D8 011080E0 ADD R1,R0,R1 \ 000001DC 0700A0E1 MOV R0,R7 \ 000001E0 1D0000EF SWI +29 \ 000001E4 150000EA B ??contactlist_menu_iconhndl_10 3302 } 3303 #endif 3304 } 3305 else 3306 { 3307 int onlinetotal[2]; 3308 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 000001E8 100098E5 LDR R0,[R8, #+16] \ 000001EC 0D10A0E1 MOV R1,SP \ 000001F0 ........ BL GetOnTotalContact 3309 #ifdef USE_MLMENU 3310 wsprintf(ws1,percent_t,t->name); \ 000001F4 142088E2 ADD R2,R8,#+20 \ 000001F8 28108AE2 ADD R1,R10,#+40 \ 000001FC 0600A0E1 MOV R0,R6 \ 00000200 240100EF SWI +292 3311 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 00000204 04309DE5 LDR R3,[SP, #+4] \ 00000208 00209DE5 LDR R2,[SP, #+0] \ 0000020C 991E8AE2 ADD R1,R10,#+2448 \ 00000210 0700A0E1 MOV R0,R7 \ 00000214 240100EF SWI +292 3312 #else 3313 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 3314 #endif 3315 if (t->state) icon++; //Модификация иконки группы \ 00000218 B405D8E1 LDRH R0,[R8, #+84] \ 0000021C 000050E3 CMP R0,#+0 \ 00000220 0600000A BEQ ??contactlist_menu_iconhndl_10 \ 00000224 019089E2 ADD R9,R9,#+1 \ 00000228 040000EA B ??contactlist_menu_iconhndl_10 3316 } 3317 } 3318 else 3319 { 3320 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 0000022C 8800A0E3 MOV R0,#+136 \ 00000230 900E80E3 ORR R0,R0,#0x900 \ 00000234 0A1080E0 ADD R1,R0,R10 \ 00000238 0600A0E1 MOV R0,R6 \ 0000023C 240100EF SWI +292 3321 } 3322 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ ??contactlist_menu_iconhndl_10: \ 00000240 000096E5 LDR R0,[R6, #+0] \ 00000244 B010D0E1 LDRH R1,[R0, #+0] \ 00000248 0400A0E1 MOV R0,R4 \ 0000024C 980100EF SWI +408 \ 00000250 0080A0E1 MOV R8,R0 3323 wstrcpy(ws2,ws1); \ 00000254 0610A0E1 MOV R1,R6 \ 00000258 1F0100EF SWI +287 3324 3325 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 0000025C ........ LDR R0,??DataTable56 ;; S_ICONS \ 00000260 0510A0E1 MOV R1,R5 \ 00000264 092180E0 ADD R2,R0,R9, LSL #+2 \ 00000268 0400A0E1 MOV R0,R4 \ 0000026C 990100EF SWI +409 3326 #ifdef USE_MLMENU 3327 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 00000270 000097E5 LDR R0,[R7, #+0] \ 00000274 B010D0E1 LDRH R1,[R0, #+0] \ 00000278 0400A0E1 MOV R0,R4 \ 0000027C 980100EF SWI +408 \ 00000280 0060A0E1 MOV R6,R0 3328 wstrcpy(ws4,ws3); \ 00000284 0710A0E1 MOV R1,R7 \ 00000288 1F0100EF SWI +287 3329 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 0000028C 70029DE5 LDR R0,[SP, #+624] \ 00000290 0630A0E1 MOV R3,R6 \ 00000294 01002DE9 PUSH {R0} \ 00000298 0820A0E1 MOV R2,R8 \ 0000029C 0510A0E1 MOV R1,R5 \ 000002A0 0400A0E1 MOV R0,R4 \ 000002A4 180200EF SWI +536 3330 #else 3331 SetMenuItemText(data, item, ws2, curitem); 3332 #endif 3333 } \ 000002A8 9EDF8DE2 ADD SP,SP,#+632 \ 000002AC F08FBDE8 POP {R4-R11,PC} ;; return 3334 3335 //=============================================================================================== 3336 3337 int DNR_ID=0; 3338 int DNR_TRIES=3; 3339 3340 char hostname[128]; //2058 che toka 128? :) 3341 3342 int host_counter = 0; 3343 3344 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3345 const char *GetHost(int cnt, const char *str, char *buf) 3346 { 3347 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 3348 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 3349 { 3350 for(;cnt;cnt--) 3351 { 3352 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 3353 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 3354 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 3355 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 3356 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 3357 } 3358 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 3359 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 3360 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 3361 end = str; 3362 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 3374 } 3375 } 3376 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3377 int GetPort(int cnt, const char *str) 3378 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 3379 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 3380 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 3381 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 3382 { 3383 for(;cnt;cnt--) 3384 { 3385 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 3386 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 3387 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 3388 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 3389 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 3390 } 3391 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 3392 if(*str!=':') return NATICQ_PORT; \ 000000A8 ........ LDRB R0,[R1], #+1 \ 000000AC 3A0050E3 CMP R0,#+58 \ 000000B0 58009F15 LDRNE R0,??GetPort_6 ;; S_ICONS + 476 \ 000000B4 00009015 LDRNE R0,[R0, #+0] \ 000000B8 1680BD18 POPNE {R1,R2,R4,PC} 3393 str++; 3394 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 3395 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 3396 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 3397 return atoi(numbuf); \ 00000104 0D00A0E1 MOV R0,SP \ 00000108 ........ BL atoi \ 0000010C 1680BDE8 POP {R1,R2,R4,PC} ;; return \ ??GetPort_6: \ 00000110 ........ DC32 S_ICONS + 476 3398 3399 } 3400 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3401 int GetHostsCount(const char *str) 3402 { 3403 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 3404 for(;cnt;cnt++) 3405 { 3406 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 3407 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 3408 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 3409 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 3410 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 3411 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 3412 } 3413 //--------------------------------------------------------------------------- 3414 \ In segment CODE, align 4, keep-with-next 3415 void create_connect(void) 3416 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3417 // static int host_counter = 0; 3418 char hostbuf[128], buf[128]; 3419 int hostport; 3420 int ***p_res=NULL; 3421 void do_reconnect(void); 3422 SOCK_ADDR sa; 3423 //Устанавливаем соединение 3424 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable67 ;; S_ICONS 3425 int err; 3426 unsigned int ip; 3427 GBS_DelTimer(&reconnect_tmr); 3428 if (!IsGPRSEnabled()) \ 00000008 CC829FE5 LDR R8,??create_connect_0+0x4 ;; `? GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 3438 GetHost(host_counter, NATICQ_HOST, hostbuf); 3439 hostport = GetPort(host_counter, NATICQ_HOST); 3440 host_counter++; 3441 3442 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf 3443 strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 3444 strcpy(logmsg,buf); 3445 SMART_REDRAW(); 3446 3447 ip=str2ip(hostbuf); 3448 if (ip!=0xFFFFFFFF) \ 00000068 ........ LDR R10,??DataTable58 ;; do_reconnect \ 0000006C DE9EA0E3 MOV R9,#+3552 \ 00000070 050089E0 ADD R0,R9,R5 \ 00000074 ........ BL GetHostsCount \ 00000078 501395E5 LDR R1,[R5, #+848] \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 010050E1 CMP R0,R1 \ 00000084 504385B5 STRLT R4,[R5, #+848] \ 00000088 500395E5 LDR R0,[R5, #+848] \ 0000008C 14208DE2 ADD R2,SP,#+20 \ 00000090 051089E0 ADD R1,R9,R5 \ 00000094 ........ BL GetHost \ 00000098 500395E5 LDR R0,[R5, #+848] \ 0000009C 051089E0 ADD R1,R9,R5 \ 000000A0 ........ BL GetPort \ 000000A4 0090A0E1 MOV R9,R0 \ 000000A8 500395E5 LDR R0,[R5, #+848] \ 000000AC 0930A0E1 MOV R3,R9 \ 000000B0 010080E2 ADD R0,R0,#+1 \ 000000B4 500385E5 STR R0,[R5, #+848] \ 000000B8 14208DE2 ADD R2,SP,#+20 \ 000000BC A01088E2 ADD R1,R8,#+160 \ 000000C0 9800A0E3 MOV R0,#+152 \ 000000C4 540D80E3 ORR R0,R0,#0x1500 \ 000000C8 050080E0 ADD R0,R0,R5 \ 000000CC 160000EF SWI +22 \ 000000D0 14108DE2 ADD R1,SP,#+20 \ 000000D4 1800A0E3 MOV R0,#+24 \ 000000D8 540D80E3 ORR R0,R0,#0x1500 \ 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 3449 { 3450 sa.ip=ip; \ 00000108 08008DE5 STR R0,[SP, #+8] 3451 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 0000010C 901088E2 ADD R1,R8,#+144 \ 00000110 0700A0E1 MOV R0,R7 \ 00000114 1A0000EF SWI +26 3452 SMART_REDRAW(); \ 00000118 ........ BL SMART_REDRAW 3453 goto L_CONNECT; \ 0000011C 380000EA B ??create_connect_4 3454 } \ ??create_connect_3: \ 00000120 6C1F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 00000124 0700A0E1 MOV R0,R7 3455 strcat(logmsg,"\n"); \ 00000128 170000EF SWI +23 3456 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 0000012C 841088E2 ADD R1,R8,#+132 \ 00000130 0700A0E1 MOV R0,R7 \ 00000134 1A0000EF SWI +26 3457 SMART_REDRAW(); \ 00000138 ........ BL SMART_REDRAW 3458 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 0000013C D22F85E2 ADD R2,R5,#+840 \ 00000140 0D10A0E1 MOV R1,SP \ 00000144 14008DE2 ADD R0,SP,#+20 \ 00000148 B60100EF SWI +438 \ 0000014C 0030B0E1 MOVS R3,R0 3459 if (err) \ 00000150 1500000A BEQ ??create_connect_5 3460 { 3461 if ((err==0xC9)||(err==0xD6)) \ 00000154 C90053E3 CMP R3,#+201 \ 00000158 D6005313 CMPNE R3,#+214 \ 0000015C 0600001A BNE ??create_connect_6 3462 { 3463 if (DNR_ID) \ 00000160 480395E5 LDR R0,[R5, #+840] \ 00000164 000050E3 CMP R0,#+0 \ 00000168 0F00000A BEQ ??create_connect_5 3464 { 3465 host_counter--; \ 0000016C 500395E5 LDR R0,[R5, #+848] \ 00000170 010040E2 SUB R0,R0,#+1 \ 00000174 500385E5 STR R0,[R5, #+848] 3466 return; //Ждем готовности DNR \ 00000178 380000EA B ??create_connect_7 3467 } 3468 } 3469 else 3470 { 3471 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 0000017C 742088E2 ADD R2,R8,#+116 \ 00000180 FF10A0E3 MOV R1,#+255 \ 00000184 0700A0E1 MOV R0,R7 \ 00000188 1B0100EF SWI +283 3472 SMART_REDRAW(); \ 0000018C ........ BL SMART_REDRAW 3473 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 00000190 E00195E5 LDR R0,[R5, #+480] \ 00000194 0A20A0E1 MOV R2,R10 \ 00000198 D830A0E3 MOV R3,#+216 \ 0000019C 930001E0 MUL R1,R3,R0 \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 4D0000EF SWI +77 3474 return; \ 000001A8 2C0000EA B ??create_connect_7 3475 } 3476 } 3477 if (p_res) \ ??create_connect_5: \ 000001AC 00009DE5 LDR R0,[SP, #+0] \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 3D00000A BEQ ??create_connect_9 3478 { 3479 if (p_res[3]) \ 000001B8 0C0090E5 LDR R0,[R0, #+12] \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 4200000A BEQ ??create_connect_10 3480 { 3481 strcpy(logmsg,buf); \ 000001C4 94108DE2 ADD R1,SP,#+148 \ 000001C8 0700A0E1 MOV R0,R7 \ 000001CC 1A0000EF SWI +26 3482 strcat(logmsg,"\n"); \ 000001D0 401F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 000001D4 0700A0E1 MOV R0,R7 \ 000001D8 170000EF SWI +23 3483 strcpy(logmsg,LG_GRDNROK); \ 000001DC 5C1088E2 ADD R1,R8,#+92 \ 000001E0 0700A0E1 MOV R0,R7 \ 000001E4 1A0000EF SWI +26 3484 SMART_REDRAW(); \ 000001E8 ........ BL SMART_REDRAW 3485 DNR_TRIES=0; \ 000001EC 4C4385E5 STR R4,[R5, #+844] 3486 sa.ip=p_res[3][0][0]; \ 000001F0 00109DE5 LDR R1,[SP, #+0] \ 000001F4 0C1091E5 LDR R1,[R1, #+12] \ 000001F8 001091E5 LDR R1,[R1, #+0] \ 000001FC 001091E5 LDR R1,[R1, #+0] \ 00000200 08108DE5 STR R1,[SP, #+8] 3487 L_CONNECT: 3488 sock=socket(1,1,0); \ ??create_connect_4: \ 00000204 0020A0E3 MOV R2,#+0 \ 00000208 0110A0E3 MOV R1,#+1 \ 0000020C 0100A0E1 MOV R0,R1 \ 00000210 730100EF SWI +371 \ 00000214 980285E5 STR R0,[R5, #+664] 3489 if (sock!=-1) \ 00000218 0B0050E1 CMP R0,R11 \ 0000021C 1A00000A BEQ ??create_connect_11 3490 { 3491 sa.family=1; \ 00000220 0170A0E3 MOV R7,#+1 \ 00000224 B470CDE1 STRH R7,[SP, #+4] 3492 sa.port=htons(hostport); \ 00000228 0908A0E1 MOV R0,R9, LSL #+16 \ 0000022C 2008A0E1 MOV R0,R0, LSR #+16 \ 00000230 7A0100EF SWI +378 \ 00000234 B600CDE1 STRH R0,[SP, #+6] 3493 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 3494 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000238 980295E5 LDR R0,[R5, #+664] \ 0000023C 1020A0E3 MOV R2,#+16 \ 00000240 04108DE2 ADD R1,SP,#+4 \ 00000244 740100EF SWI +372 \ 00000248 0B0050E1 CMP R0,R11 \ 0000024C 0500000A BEQ ??create_connect_12 3495 { 3496 connect_state=1; \ 00000250 947285E5 STR R7,[R5, #+660] 3497 TOTALRECEIVED=0; \ 00000254 9C4285E5 STR R4,[R5, #+668] 3498 TOTALSENDED=0; \ 00000258 A04285E5 STR R4,[R5, #+672] 3499 SMART_REDRAW(); \ ??create_connect_2: \ 0000025C ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000260 45DF8DE2 ADD SP,SP,#+276 \ 00000264 F08FBDE8 POP {R4-R11,PC} 3500 } 3501 else 3502 { 3503 closesocket(sock); \ ??create_connect_12: \ 00000268 980295E5 LDR R0,[R5, #+664] \ 0000026C 760100EF SWI +374 3504 sock=-1; \ 00000270 98B285E5 STR R11,[R5, #+664] 3505 LockSched(); \ 00000274 460100EF SWI +326 3506 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000278 401088E2 ADD R1,R8,#+64 \ 0000027C 0100A0E3 MOV R0,#+1 \ 00000280 480100EF SWI +328 3507 UnlockSched(); \ 00000284 470100EF SWI +327 3508 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000288 C0FFFFEA B ??create_connect_8 3509 3510 } 3511 } 3512 else 3513 { 3514 LockSched(); \ ??create_connect_11: \ 0000028C 460100EF SWI +326 3515 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 00000290 141088E2 ADD R1,R8,#+20 \ 00000294 0100A0E3 MOV R0,#+1 \ 00000298 480100EF SWI +328 3516 UnlockSched(); \ 0000029C 470100EF SWI +327 3517 //Не осилили создания сокета, закрываем GPRS-сессию 3518 GPRS_OnOff(0,1); \ 000002A0 0110A0E3 MOV R1,#+1 \ 000002A4 0000A0E3 MOV R0,#+0 \ 000002A8 8E0100EF SWI +398 \ 000002AC EBFFFFEA B ??create_connect_7 3519 } 3520 } 3521 } 3522 else 3523 { 3524 DNR_TRIES--; \ ??create_connect_9: \ 000002B0 4C0395E5 LDR R0,[R5, #+844] \ 000002B4 010040E2 SUB R0,R0,#+1 \ 000002B8 4C0385E5 STR R0,[R5, #+844] 3525 LockSched(); \ 000002BC 460100EF SWI +326 3526 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002C0 0810A0E1 MOV R1,R8 \ 000002C4 0100A0E3 MOV R0,#+1 \ 000002C8 480100EF SWI +328 3527 UnlockSched(); \ 000002CC 470100EF SWI +327 \ ??create_connect_10: \ 000002D0 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002D4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 000002D8 0A000000 DC8 "\n",+0,+0 \ 000002DC ........ DC32 `?=0) \ 00000004 ........ LDR R4,??DataTable67 ;; S_ICONS \ 00000008 980294E5 LDR R0,[R4, #+664] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0300004A BMI ??end_socket_0 3548 { 3549 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 3550 closesocket(sock); \ 0000001C 980294E5 LDR R0,[R4, #+664] \ 00000020 760100EF SWI +374 3551 } 3552 #ifdef SEND_TIMER 3553 GBS_DelTimer(&send_tmr); \ ??end_socket_0: \ 00000024 1800A0E3 MOV R0,#+24 \ 00000028 580D80E3 ORR R0,R0,#0x1600 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 8C0100EF SWI +396 3554 #endif 3555 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 3556 3557 #ifdef SEND_TIMER \ In segment CODE, align 4, keep-with-next 3558 static void resend(void) 3559 { 3560 void SendAnswer(int dummy, TPKT *p); 3561 SUBPROC((void*)SendAnswer,0,0); \ resend: \ 00000000 ........ LDR R0,??DataTable64 ;; SendAnswer \ 00000004 00402DE9 PUSH {LR} \ 00000008 0020A0E3 MOV R2,#+0 \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 710100EF SWI +369 3562 } \ 00000014 0080BDE8 POP {PC} ;; return 3563 #endif 3564 \ In segment CODE, align 4, keep-with-next 3565 void SendAnswer(int dummy, TPKT *p) 3566 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 3567 int i; 3568 int j; 3569 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable67 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 940294E5 LDR R0,[R4, #+660] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 3570 { 3571 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 3572 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 3573 } 3574 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 1E00000A BEQ ??SendAnswer_1 3575 { 3576 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 3577 TOTALSENDED+=j; \ 00000034 A00294E5 LDR R0,[R4, #+672] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C A00284E5 STR R0,[R4, #+672] 3578 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 A80294E5 LDR R0,[R4, #+680] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 A80284E5 STR R0,[R4, #+680] 3579 //Проверяем, не надо ли добавить в очередь 3580 if (sendq_p) \ 0000004C B00294E5 LDR R0,[R4, #+688] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 3581 { 3582 //Есть очередь, добавляем в нее 3583 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 AC1294E5 LDR R1,[R4, #+684] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 B00284E5 STR R0,[R4, #+688] 3584 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 AC0294E5 LDR R0,[R4, #+684] \ 0000006C B03294E5 LDR R3,[R4, #+688] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 3585 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 3586 sendq_l+=j; \ 00000088 AC0294E5 LDR R0,[R4, #+684] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 AC0284E5 STR R0,[R4, #+684] 3587 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 3588 } 3589 sendq_p=p; \ ??SendAnswer_2: \ 00000098 B06284E5 STR R6,[R4, #+688] 3590 sendq_l=j; \ 0000009C AC5284E5 STR R5,[R4, #+684] \ 000000A0 000000EA B ??SendAnswer_1 3591 } 3592 //Отправляем уже существующее в очереди 3593 while((i=sendq_l)!=0) 3594 { 3595 if (i>0x400) i=0x400; 3596 j=send(sock,(void *)sendq_p,i,0); 3597 snprintf(logmsg,255,"send res %d",j); 3598 SMART_REDRAW(); 3599 if (j<0) 3600 { 3601 j=*socklasterr(); 3602 if ((j==0xC9)||(j==0xD6)) 3603 { 3604 //Передали что хотели 3605 strcpy(logmsg,"Send delayed..."); 3606 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 3607 } 3608 else 3609 { 3610 //Ошибка 3611 LockSched(); 3612 ShowMSG(1,(int)"Send error!"); 3613 UnlockSched(); 3614 end_socket(); 3615 return; 3616 } 3617 } 3618 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное 3619 if (j` \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 400E80E3 ORR R0,R0,#0x400 \ 000000C8 000057E1 CMP R7,R0 \ 000000CC 980294E5 LDR R0,[R4, #+664] \ 000000D0 407EA0A3 MOVGE R7,#+1024 \ 000000D4 0030A0E3 MOV R3,#+0 \ 000000D8 0720A0E1 MOV R2,R7 \ 000000DC 790100EF SWI +377 \ 000000E0 0050A0E1 MOV R5,R0 \ 000000E4 3800A0E3 MOV R0,#+56 \ 000000E8 4C0D80E3 ORR R0,R0,#0x1300 \ 000000EC 048080E0 ADD R8,R0,R4 \ 000000F0 0530A0E1 MOV R3,R5 \ 000000F4 1C2089E2 ADD R2,R9,#+28 \ 000000F8 FF10A0E3 MOV R1,#+255 \ 000000FC 0800A0E1 MOV R0,R8 \ 00000100 1B0100EF SWI +283 \ 00000104 ........ BL SMART_REDRAW \ 00000108 000055E3 CMP R5,#+0 \ 0000010C 0F00005A BPL ??SendAnswer_6 \ 00000110 7C8100EF SWI +33148 \ 00000114 005090E5 LDR R5,[R0, #+0] \ 00000118 C90055E3 CMP R5,#+201 \ 0000011C D6005513 CMPNE R5,#+214 \ 00000120 0300001A BNE ??SendAnswer_7 \ 00000124 0C1089E2 ADD R1,R9,#+12 \ 00000128 0800A0E1 MOV R0,R8 \ 0000012C 1A0000EF SWI +26 \ 00000130 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_7: \ 00000134 460100EF SWI +326 \ 00000138 0910A0E1 MOV R1,R9 \ 0000013C 0100A0E3 MOV R0,#+1 \ 00000140 480100EF SWI +328 \ 00000144 470100EF SWI +327 \ 00000148 ........ BL end_socket \ 0000014C F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 00000150 AC0294E5 LDR R0,[R4, #+684] \ 00000154 052040E0 SUB R2,R0,R5 \ 00000158 AC2284E5 STR R2,[R4, #+684] \ 0000015C B00294E5 LDR R0,[R4, #+688] \ 00000160 001085E0 ADD R1,R5,R0 \ 00000164 1E0100EF SWI +286 \ 00000168 070055E1 CMP R5,R7 \ 0000016C CCFFFFAA BGE ??SendAnswer_3 \ 00000170 2C209FE5 LDR R2,??SendAnswer_5+0x4 ;; resend \ 00000174 3810A0E3 MOV R1,#+56 \ 00000178 401E81E3 ORR R1,R1,#0x400 \ 0000017C 1800A0E3 MOV R0,#+24 \ 00000180 580D80E3 ORR R0,R0,#0x1600 \ 00000184 040080E0 ADD R0,R0,R4 \ 00000188 4D0000EF SWI +77 \ 0000018C F083BDE8 POP {R4-R9,PC} 3628 } 3629 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000190 0100A0E1 MOV R0,R1 \ 00000194 150000EF SWI +21 3630 sendq_p=NULL; \ 00000198 B06284E5 STR R6,[R4, #+688] 3631 } \ 0000019C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 000001A0 ........ DC32 `?` \ 000001A4 ........ DC32 resend 3632 3633 \ In segment CODE, align 4, keep-with-next 3634 void send_login(int dummy, TPKT *p) 3635 { 3636 connect_state=2; 3637 char rev[16]; 3638 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 3639 //А Вова будет банить на форуме! 3640 snprintf(rev,9,"Sie_%04d",__SVN_REVISION__); \ send_login: \ 00000000 84209FE5 LDR R2,??send_login_0 ;; `?` \ 00000004 F0402DE9 PUSH {R4-R7,LR} \ 00000008 ........ LDR R4,??DataTable67 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0050A0E1 MOV R5,R0 \ 00000014 0160A0E1 MOV R6,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 940284E5 STR R0,[R4, #+660] \ 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 3641 3642 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 3643 p2->pkt.uin=UIN; \ 00000040 280194E5 LDR R0,[R4, #+296] 3644 p2->pkt.type=T_SETCLIENT_ID; 3645 p2->pkt.data_len=8; 3646 memcpy(p2->data,rev,8); \ 00000044 0820A0E3 MOV R2,#+8 \ 00000048 000087E5 STR R0,[R7, #+0] \ 0000004C 2000A0E3 MOV R0,#+32 \ 00000050 B400C7E1 STRH R0,[R7, #+4] \ 00000054 0800A0E3 MOV R0,#+8 \ 00000058 B600C7E1 STRH R0,[R7, #+6] \ 0000005C 0D10A0E1 MOV R1,SP \ 00000060 080087E2 ADD R0,R7,#+8 \ 00000064 1E0100EF SWI +286 3647 SendAnswer(0,p2); \ 00000068 0710A0E1 MOV R1,R7 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 ........ BL SendAnswer 3648 SendAnswer(dummy,p); \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C ........ BL SendAnswer 3649 RXstate=-(int)sizeof(PKT); \ 00000080 0700E0E3 MVN R0,#+7 \ 00000084 900284E5 STR R0,[R4, #+656] 3650 } \ 00000088 FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 0000008C ........ DC32 `?` 3651 \ In segment CODE, align 4, keep-with-next 3652 void do_ping(void) 3653 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 3654 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 3655 pingp->pkt.uin=UIN; \ 0000000C 20109FE5 LDR R1,??do_ping_0 ;; S_ICONS + 296 \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 3656 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 3657 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3658 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall \ ??do_ping_0: \ 00000034 ........ DC32 S_ICONS + 296 3659 } 3660 \ In segment CODE, align 4, keep-with-next 3661 void SendMSGACK(int i) 3662 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3663 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3664 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 3665 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3666 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3667 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3668 } 3669 \ In segment CODE, align 4, keep-with-next 3670 void RequestXText(unsigned int uin) 3671 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3672 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3673 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 3674 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3675 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3676 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable64 ;; SendAnswer \ 0000002C 710100EF SWI +369 3677 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 3678 3679 extern int main2_count; 3680 3681 int ping_time; 3682 //#ifdef EVILFOX 3683 //#else 3684 3685 //#endif 3686 char I_UIN[9]; 3687 \ In segment CODE, align 4, keep-with-next 3688 void get_answer(void) 3689 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3690 void *p; 3691 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable67 ;; S_ICONS \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 3692 int j; 3693 int n; 3694 char rb[1024]; 3695 char *rp=rb; 3696 if (connect_state<2) return; \ 00000010 940295E5 LDR R0,[R5, #+660] \ 00000014 908295E5 LDR R8,[R5, #+656] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 590100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 5701000A BEQ ??get_answer_1 3697 if (i==EOP) return; 3698 j=recv(sock,rb,sizeof(rb),0); \ 00000030 980295E5 LDR R0,[R5, #+664] \ 00000034 ........ LDR R10,??DataTable66 ;; `?0) 3700 { 3701 if (i<0) 3702 { 3703 //Принимаем заголовок 3704 n=-i; //Требуемое количество байт 3705 if (j=0) 3712 { 3713 //Принимаем тельце ;) 3714 n=RXbuf.pkt.data_len; //Всего в тельце 3715 if (n>16383) 3716 { 3717 //Слишком много 3718 strcpy(logmsg,LG_GRBADPACKET); 3719 end_socket(); 3720 RXstate=EOP; 3721 return; 3722 } 3723 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 3724 if (n>0) 3725 { 3726 if (jissound && t->signals) 3806 Play(sndMsg); 3807 } 3808 else 3809 { 3810 uins=RXbuf.pkt.uin; 3811 volatile int hFile_ex; 3812 unsigned int io_error_ex = 0; 3813 sprintf(talk_sound, "%s%d.wav", sndMsg2, uins); 3814 hFile_ex = fopen(talk_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 3815 if(hFile_ex!=-1) 3816 { 3817 fclose(hFile_ex, &io_error_ex); 3818 Play(talk_sound); 3819 } 3820 else 3821 Play(sndMsg); 3822 } 3823 } 3824 break; 3825 case T_SSLRESP: 3826 LockSched(); 3827 ShowMSG(1,(int)RXbuf.data); 3828 UnlockSched(); 3829 break; 3830 case T_SRV_ACK: 3831 if (FindContactLOGQByAck(&RXbuf)) Play(sndMsgSent); 3832 case T_CLIENT_ACK: 3833 p=malloc(sizeof(PKT)+2); 3834 memcpy(p,&RXbuf,sizeof(PKT)+2); 3835 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 3836 break; 3837 case T_ECHORET: 3838 { 3839 TDate d; 3840 TTime t; 3841 TTime *pt=(TTime *)(RXbuf.data); 3842 int s1; 3843 int s2; 3844 GetDateTime(&d,&t); 3845 s1=t.hour*3600+t.min*60+t.sec; 3846 s2=pt->hour*3600+pt->min*60+pt->sec; 3847 s1-=s2; 3848 if (s1<0) s1+=86400; 3849 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 3850 sprintf(PINGO, "Ping: %dsec",s1); 3851 LockSched(); 3852 if(janis==1) 3853 { 3854 ShowMSG(1,(int)logmsg); 3855 Play(pingsnd); 3856 janis=0; 3857 } 3858 else 3859 { 3860 if(ping_time==0) 3861 { 3862 ping_time=ping_time_config; 3863 Play(pingsnd); 3864 } 3865 else 3866 ping_time--; 3867 } 3868 UnlockSched(); 3869 } 3870 break; 3871 case T_LASTPRIVACY: 3872 n=i+sizeof(PKT); \ ??get_answer_3: \ 0000004C 0040A0E1 MOV R4,R0 3873 p=malloc(n); \ ??get_answer_4: \ 00000050 140000EF SWI +20 \ 00000054 00B0A0E1 MOV R11,R0 3874 memcpy(p,&RXbuf,n); \ 00000058 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 0000005C 0710A0E1 MOV R1,R7 \ 00000060 1E0100EF SWI +286 3875 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000064 980295E5 LDR R0,[R5, #+664] \ 00000068 0B30A0E1 MOV R3,R11 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 0020A0E3 MOV R2,#+0 \ 00000074 FC1FA0E3 MOV R1,#+1008 \ 00000078 0800A0E1 MOV R0,R8 \ 0000007C 000100EF SWI +256 \ ??get_answer_6: \ 00000080 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 3876 break; 3877 } 3878 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000084 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 00000088 010056E3 CMP R6,#+1 \ 0000008C 3E0100BA BLT ??get_answer_8 \ 00000090 08759FE5 LDR R7,??get_answer_9+0x4 ;; RXbuf \ 00000094 000058E3 CMP R8,#+0 \ 00000098 0C00005A BPL ??get_answer_10 \ 0000009C 00109DE5 LDR R1,[SP, #+0] \ 000000A0 004068E2 RSB R4,R8,#+0 \ 000000A4 040056E1 CMP R6,R4 \ 000000A8 0640A0B1 MOVLT R4,R6 \ 000000AC 0420A0E1 MOV R2,R4 \ 000000B0 070088E0 ADD R0,R8,R7 \ 000000B4 080080E2 ADD R0,R0,#+8 \ 000000B8 1E0100EF SWI +286 \ 000000BC 00109DE5 LDR R1,[SP, #+0] \ 000000C0 088084E0 ADD R8,R4,R8 \ 000000C4 046046E0 SUB R6,R6,R4 \ 000000C8 011084E0 ADD R1,R4,R1 \ 000000CC 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D0 000058E3 CMP R8,#+0 \ 000000D4 EBFFFF4A BMI ??get_answer_2 \ 000000D8 B640D7E1 LDRH R4,[R7, #+6] \ 000000DC 3800A0E3 MOV R0,#+56 \ 000000E0 4C0D80E3 ORR R0,R0,#0x1300 \ 000000E4 059080E0 ADD R9,R0,R5 \ 000000E8 400C54E3 CMP R4,#+16384 \ 000000EC 0A0000BA BLT ??get_answer_11 \ 000000F0 7C00A0E3 MOV R0,#+124 \ 000000F4 900E80E3 ORR R0,R0,#0x900 \ 000000F8 0A1080E0 ADD R1,R0,R10 \ 000000FC 0900A0E1 MOV R0,R9 \ 00000100 1A0000EF SWI +26 \ 00000104 ........ BL end_socket \ 00000108 0900E0E3 MVN R0,#+9 \ 0000010C 900285E5 STR R0,[R5, #+656] \ 00000110 1CD08DE2 ADD SP,SP,#+28 \ 00000114 40DE8DE2 ADD SP,SP,#+1024 \ 00000118 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 0000011C 084044E0 SUB R4,R4,R8 \ 00000120 010054E3 CMP R4,#+1 \ 00000124 0B0000BA BLT ??get_answer_12 \ 00000128 00109DE5 LDR R1,[SP, #+0] \ 0000012C 040056E1 CMP R6,R4 \ 00000130 0640A0B1 MOVLT R4,R6 \ 00000134 0420A0E1 MOV R2,R4 \ 00000138 070088E0 ADD R0,R8,R7 \ 0000013C 080080E2 ADD R0,R0,#+8 \ 00000140 1E0100EF SWI +286 \ 00000144 00109DE5 LDR R1,[SP, #+0] \ 00000148 088084E0 ADD R8,R4,R8 \ 0000014C 046046E0 SUB R6,R6,R4 \ 00000150 011084E0 ADD R1,R4,R1 \ 00000154 00108DE5 STR R1,[SP, #+0] \ ??get_answer_12: \ 00000158 B600D7E1 LDRH R0,[R7, #+6] \ 0000015C 080050E1 CMP R0,R8 \ 00000160 C8FFFF1A BNE ??get_answer_2 \ 00000164 9C1295E5 LDR R1,[R5, #+668] \ 00000168 080088E2 ADD R0,R8,#+8 \ 0000016C 011080E0 ADD R1,R0,R1 \ 00000170 9C1285E5 STR R1,[R5, #+668] \ 00000174 A41295E5 LDR R1,[R5, #+676] \ 00000178 0020A0E3 MOV R2,#+0 \ 0000017C 011080E0 ADD R1,R0,R1 \ 00000180 A41285E5 STR R1,[R5, #+676] \ 00000184 071088E0 ADD R1,R8,R7 \ 00000188 0820C1E5 STRB R2,[R1, #+8] \ 0000018C B410D7E1 LDRH R1,[R7, #+4] \ 00000190 094088E2 ADD R4,R8,#+9 \ 00000194 0980A0E3 MOV R8,#+9 \ 00000198 428C88E3 ORR R8,R8,#0x4200 \ 0000019C 031041E2 SUB R1,R1,#+3 \ 000001A0 1C0051E3 CMP R1,#+28 \ 000001A4 B6FFFF8A BHI ??get_answer_7 \ 000001A8 022F8FE2 ADR R2,??get_answer_0 \ 000001AC 8110A0E1 MOV R1,R1, LSL #+1 \ 000001B0 F12092E1 LDRSH R2,[R2, R1] \ 000001B4 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001B8 4A000E00B2FF DC16 +74,+14,+65458,+65 \ 4100 \ 000001C0 2900B2FF2B00 DC16 +41,+65458,+43,+65458 \ B2FF \ 000001C8 B2FFB2FFA300 DC16 +65458,+65458,+163,+65458 \ B2FF \ 000001D0 B2FFA900AF00 DC16 +65458,+169,+175,+65458 \ B2FF \ 000001D8 B40029002900 DC16 +180,+41,+41,+65458 \ B2FF \ 000001E0 B2FFB2FF2900 DC16 +65458,+65458,+41,+65458 \ B2FF \ 000001E8 B2FFB2FFB2FF DC16 +65458,+65458,+65458,+65458 \ B2FF \ 000001F0 A4FF0000 DC16 +65444,+0 \ ??get_answer_13: \ 000001F4 0400A0E1 MOV R0,R4 \ 000001F8 140000EF SWI +20 \ 000001FC 00B0A0E1 MOV R11,R0 \ 00000200 0420A0E1 MOV R2,R4 \ 00000204 0710A0E1 MOV R1,R7 \ 00000208 1E0100EF SWI +286 \ 0000020C 980295E5 LDR R0,[R5, #+664] \ 00000210 0B30A0E1 MOV R3,R11 \ 00000214 01002DE9 PUSH {R0} \ 00000218 0020A0E3 MOV R2,#+0 \ 0000021C FC1FA0E3 MOV R1,#+1008 \ 00000220 0800A0E1 MOV R0,R8 \ 00000224 000100EF SWI +256 \ 00000228 A60E85E2 ADD R0,R5,#+2656 \ 0000022C ........ BL Play \ 00000230 083087E2 ADD R3,R7,#+8 \ 00000234 D82F8FE2 ADR R2,??get_answer_9 ;; "%s" \ 00000238 FF10A0E3 MOV R1,#+255 \ 0000023C 0900A0E1 MOV R0,R9 \ 00000240 1B0100EF SWI +283 \ 00000244 0300A0E3 MOV R0,#+3 \ 00000248 940285E5 STR R0,[R5, #+660] \ 0000024C 500395E5 LDR R0,[R5, #+848] \ 00000250 010040E2 SUB R0,R0,#+1 \ 00000254 500385E5 STR R0,[R5, #+848] \ 00000258 ........ BL SMART_REDRAW \ 0000025C 87FFFFEA B ??get_answer_6 \ ??get_answer_14: \ 00000260 0400A0E1 MOV R0,R4 \ 00000264 79FFFFEA B ??get_answer_4 \ ??get_answer_15: \ 00000268 0040A0E1 MOV R4,R0 \ 0000026C 140000EF SWI +20 \ 00000270 00B0A0E1 MOV R11,R0 \ 00000274 0420A0E1 MOV R2,R4 \ 00000278 0710A0E1 MOV R1,R7 \ 0000027C 1E0100EF SWI +286 \ 00000280 B800D7E1 LDRH R0,[R7, #+8] \ 00000284 972E8AE2 ADD R2,R10,#+2416 \ 00000288 FF10A0E3 MOV R1,#+255 \ 0000028C 01002DE9 PUSH {R0} \ 00000290 003097E5 LDR R3,[R7, #+0] \ 00000294 0900A0E1 MOV R0,R9 \ 00000298 1B0100EF SWI +283 \ 0000029C 980295E5 LDR R0,[R5, #+664] \ 000002A0 0B30A0E1 MOV R3,R11 \ 000002A4 01002DE9 PUSH {R0} \ 000002A8 0020A0E3 MOV R2,#+0 \ 000002AC FC1FA0E3 MOV R1,#+1008 \ 000002B0 0800A0E1 MOV R0,R8 \ 000002B4 000100EF SWI +256 \ 000002B8 08D08DE2 ADD SP,SP,#+8 \ 000002BC 70FFFFEA B ??get_answer_7 \ ??get_answer_16: \ 000002C0 083087E2 ADD R3,R7,#+8 \ 000002C4 6800A0E3 MOV R0,#+104 \ 000002C8 900E80E3 ORR R0,R0,#0x900 \ 000002CC 0A2080E0 ADD R2,R0,R10 \ 000002D0 FF10A0E3 MOV R1,#+255 \ 000002D4 0900A0E1 MOV R0,R9 \ 000002D8 1B0100EF SWI +283 \ 000002DC ........ BL SMART_REDRAW \ 000002E0 67FFFFEA B ??get_answer_7 \ ??get_answer_17: \ 000002E4 0400A0E1 MOV R0,R4 \ 000002E8 140000EF SWI +20 \ 000002EC 00B0A0E1 MOV R11,R0 \ 000002F0 0420A0E1 MOV R2,R4 \ 000002F4 0710A0E1 MOV R1,R7 \ 000002F8 1E0100EF SWI +286 \ 000002FC 08008BE2 ADD R0,R11,#+8 \ 00000300 030000EA B ??get_answer_18 \ ??get_answer_19: \ 00000304 030051E3 CMP R1,#+3 \ 00000308 2010A0B3 MOVLT R1,#+32 \ 0000030C 0010C0B5 STRBLT R1,[R0, #+0] \ 00000310 010080E2 ADD R0,R0,#+1 \ ??get_answer_18: \ 00000314 0010D0E5 LDRB R1,[R0, #+0] \ 00000318 000051E3 CMP R1,#+0 \ 0000031C F8FFFF1A BNE ??get_answer_19 \ 00000320 002097E5 LDR R2,[R7, #+0] \ 00000324 2800A0E3 MOV R0,#+40 \ 00000328 580D80E3 ORR R0,R0,#0x1600 \ 0000032C 054080E0 ADD R4,R0,R5 \ 00000330 961E8AE2 ADD R1,R10,#+2400 \ 00000334 0400A0E1 MOV R0,R4 \ 00000338 160000EF SWI +22 \ 0000033C 0410A0E1 MOV R1,R4 \ 00000340 4400A0E3 MOV R0,#+68 \ 00000344 900E80E3 ORR R0,R0,#0x900 \ 00000348 050080E0 ADD R0,R0,R5 \ 0000034C 180100EF SWI +280 \ 00000350 000050E3 CMP R0,#+0 \ 00000354 4AFFFF1A BNE ??get_answer_7 \ 00000358 080087E2 ADD R0,R7,#+8 \ 0000035C 01002DE9 PUSH {R0} \ 00000360 003097E5 LDR R3,[R7, #+0] \ 00000364 FF10A0E3 MOV R1,#+255 \ 00000368 B64EA0E3 MOV R4,#+2912 \ 0000036C 5400A0E3 MOV R0,#+84 \ 00000370 900E80E3 ORR R0,R0,#0x900 \ 00000374 0A2080E0 ADD R2,R0,R10 \ 00000378 0900A0E1 MOV R0,R9 \ 0000037C 1B0100EF SWI +283 \ 00000380 9C0295E5 LDR R0,[R5, #+668] \ 00000384 ........ BL SendMSGACK \ 00000388 980295E5 LDR R0,[R5, #+664] \ 0000038C 0B30A0E1 MOV R3,R11 \ 00000390 01002DE9 PUSH {R0} \ 00000394 0020A0E3 MOV R2,#+0 \ 00000398 FC1FA0E3 MOV R1,#+1008 \ 0000039C 0800A0E1 MOV R0,R8 \ 000003A0 000100EF SWI +256 \ 000003A4 ........ BL SMART_REDRAW \ 000003A8 D40195E5 LDR R0,[R5, #+468] \ 000003AC 08D08DE2 ADD SP,SP,#+8 \ 000003B0 000050E3 CMP R0,#+0 \ 000003B4 000097E5 LDR R0,[R7, #+0] \ 000003B8 0800001A BNE ??get_answer_20 \ 000003BC ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003C0 5C1090E5 LDR R1,[R0, #+92] \ 000003C4 000051E3 CMP R1,#+0 \ 000003C8 78009015 LDRNE R0,[R0, #+120] \ 000003CC 00005013 CMPNE R0,#+0 \ 000003D0 2BFFFF0A BEQ ??get_answer_7 \ 000003D4 050084E0 ADD R0,R4,R5 \ ??get_answer_21: \ 000003D8 ........ BL Play \ 000003DC 28FFFFEA B ??get_answer_7 \ ??get_answer_20: \ 000003E0 F80185E5 STR R0,[R5, #+504] \ 000003E4 0010A0E3 MOV R1,#+0 \ 000003E8 08108DE5 STR R1,[SP, #+8] \ 000003EC F83195E5 LDR R3,[R5, #+504] \ 000003F0 EE7EA0E3 MOV R7,#+3808 \ 000003F4 BA2E85E2 ADD R2,R5,#+2976 \ 000003F8 860F44E2 SUB R0,R4,#+536 \ 000003FC 0A1080E0 ADD R1,R0,R10 \ 00000400 050087E0 ADD R0,R7,R5 \ 00000404 160000EF SWI +22 \ 00000408 08308DE2 ADD R3,SP,#+8 \ 0000040C 8020A0E3 MOV R2,#+128 \ 00000410 801CA0E3 MOV R1,#+32768 \ 00000414 050087E0 ADD R0,R7,R5 \ 00000418 0A0000EF SWI +10 \ 0000041C 04008DE5 STR R0,[SP, #+4] \ 00000420 04009DE5 LDR R0,[SP, #+4] \ 00000424 010070E3 CMN R0,#+1 \ 00000428 0400000A BEQ ??get_answer_22 \ 0000042C 04009DE5 LDR R0,[SP, #+4] \ 00000430 08108DE2 ADD R1,SP,#+8 \ 00000434 0D0000EF SWI +13 \ 00000438 050087E0 ADD R0,R7,R5 \ 0000043C E5FFFFEA B ??get_answer_21 \ ??get_answer_22: \ 00000440 050084E0 ADD R0,R4,R5 \ 00000444 E3FFFFEA B ??get_answer_21 \ ??get_answer_23: \ 00000448 460100EF SWI +326 \ 0000044C 081087E2 ADD R1,R7,#+8 \ 00000450 0100A0E3 MOV R0,#+1 \ 00000454 480100EF SWI +328 \ ??get_answer_24: \ 00000458 470100EF SWI +327 \ 0000045C 08FFFFEA B ??get_answer_7 \ ??get_answer_25: \ 00000460 0700A0E1 MOV R0,R7 \ 00000464 ........ BL FindContactLOGQByAck \ 00000468 000050E3 CMP R0,#+0 \ 0000046C 0100000A BEQ ??get_answer_26 \ 00000470 BE0E85E2 ADD R0,R5,#+3040 \ 00000474 ........ BL Play \ ??get_answer_26: \ 00000478 0A00A0E3 MOV R0,#+10 \ 0000047C 140000EF SWI +20 \ 00000480 00B0A0E1 MOV R11,R0 \ 00000484 0A20A0E3 MOV R2,#+10 \ 00000488 F3FEFFEA B ??get_answer_5 \ ??get_answer_27: \ 0000048C 0C108DE2 ADD R1,SP,#+12 \ 00000490 14008DE2 ADD R0,SP,#+20 \ 00000494 B40000EF SWI +180 \ 00000498 0C00DDE5 LDRB R0,[SP, #+12] \ 0000049C 0D20DDE5 LDRB R2,[SP, #+13] \ 000004A0 E11EA0E3 MOV R1,#+3600 \ 000004A4 3C30A0E3 MOV R3,#+60 \ 000004A8 930202E0 MUL R2,R3,R2 \ 000004AC 912020E0 MLA R0,R1,R0,R2 \ 000004B0 0E10DDE5 LDRB R1,[SP, #+14] \ 000004B4 E12EA0E3 MOV R2,#+3600 \ 000004B8 000081E0 ADD R0,R1,R0 \ 000004BC 0810D7E5 LDRB R1,[R7, #+8] \ 000004C0 920101E0 MUL R1,R2,R1 \ 000004C4 010040E0 SUB R0,R0,R1 \ 000004C8 0910D7E5 LDRB R1,[R7, #+9] \ 000004CC 930101E0 MUL R1,R3,R1 \ 000004D0 010040E0 SUB R0,R0,R1 \ 000004D4 0A10D7E5 LDRB R1,[R7, #+10] \ 000004D8 C4709FE5 LDR R7,??get_answer_9+0x8 ;; janis \ 000004DC 014050E0 SUBS R4,R0,R1 \ 000004E0 500BA043 MOVMI R0,#+81920 \ 000004E4 460D8043 ORRMI R0,R0,#0x1180 \ 000004E8 04408040 ADDMI R4,R0,R4 \ 000004EC 010084E2 ADD R0,R4,#+1 \ 000004F0 01002DE9 PUSH {R0} \ 000004F4 0430A0E1 MOV R3,R4 \ 000004F8 FF10A0E3 MOV R1,#+255 \ 000004FC 3400A0E3 MOV R0,#+52 \ 00000500 900E80E3 ORR R0,R0,#0x900 \ 00000504 0A2080E0 ADD R2,R0,R10 \ 00000508 0900A0E1 MOV R0,R9 \ 0000050C 1B0100EF SWI +283 \ 00000510 0420A0E1 MOV R2,R4 \ 00000514 2800A0E3 MOV R0,#+40 \ 00000518 900E80E3 ORR R0,R0,#0x900 \ 0000051C 0A1080E0 ADD R1,R0,R10 \ 00000520 FB0E85E2 ADD R0,R5,#+4016 \ 00000524 160000EF SWI +22 \ 00000528 460100EF SWI +326 \ 0000052C 000097E5 LDR R0,[R7, #+0] \ 00000530 C24EA0E3 MOV R4,#+3104 \ 00000534 010050E3 CMP R0,#+1 \ 00000538 04D08DE2 ADD SP,SP,#+4 \ 0000053C 0700001A BNE ??get_answer_28 \ 00000540 0910A0E1 MOV R1,R9 \ 00000544 0100A0E3 MOV R0,#+1 \ 00000548 480100EF SWI +328 \ 0000054C 050084E0 ADD R0,R4,R5 \ 00000550 ........ BL Play \ 00000554 0000A0E3 MOV R0,#+0 \ 00000558 000087E5 STR R0,[R7, #+0] \ 0000055C BDFFFFEA B ??get_answer_24 \ ??get_answer_28: \ 00000560 540395E5 LDR R0,[R5, #+852] \ 00000564 000050E3 CMP R0,#+0 \ 00000568 0400001A BNE ??get_answer_29 \ 0000056C 000195E5 LDR R0,[R5, #+256] \ 00000570 540385E5 STR R0,[R5, #+852] \ 00000574 050084E0 ADD R0,R4,R5 \ 00000578 ........ BL Play \ 0000057C B5FFFFEA B ??get_answer_24 \ ??get_answer_29: \ 00000580 010040E2 SUB R0,R0,#+1 \ 00000584 540385E5 STR R0,[R5, #+852] \ 00000588 B2FFFFEA B ??get_answer_24 3879 } 3880 } 3881 } 3882 RXstate=i; \ ??get_answer_8: \ 0000058C 908285E5 STR R8,[R5, #+656] 3883 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 3884 // SMART_REDRAW(); 3885 } \ ??get_answer_1: \ 00000590 1CD08DE2 ADD SP,SP,#+28 \ 00000594 40DE8DE2 ADD SP,SP,#+1024 \ 00000598 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 0000059C 25730000 DC8 "%s",+0 \ 000005A0 ........ DC32 RXbuf \ 000005A4 ........ DC32 janis 3886 3887 3888 extern int main_count; 3889 3890 //=====================add to main info==================== 3891 3892 //Сюда я не лез...kluchnik 3893 3894 char a_txt[45]; 3895 char s_txt[45]; 3896 char d_txt[45]; 3897 char f_txt[45]; 3898 char g_txt[45]; 3899 //char de[64]; 3900 //char du[38]; 3901 3902 \ In segment CODE, align 4, keep-with-next 3903 void AddToMain(const char *nameu,char *si) 3904 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3905 char *de=malloc(64); 3906 int text_l; 3907 int iz; 3908 int name_l; 3909 name_l=0; 3910 text_l=0; 3911 name_l=strlen(nameu); 3912 // char *du=malloc(64);a_txt 3913 iz=0; 3914 #ifdef ELKA 3915 text_l=main_lenght-name_l; 3916 #else 3917 text_l=main_lenght-name_l; \ 00000004 ........ LDR R6,??DataTable67 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0190A0E1 MOV R9,R1 \ 00000014 4000A0E3 MOV R0,#+64 \ 00000018 140000EF SWI +20 \ 0000001C 0050A0E1 MOV R5,R0 \ 00000020 0400A0E1 MOV R0,R4 \ 00000024 1B0000EF SWI +27 \ 00000028 0C1196E5 LDR R1,[R6, #+268] \ 0000002C 0080A0E3 MOV R8,#+0 \ 00000030 00A041E0 SUB R10,R1,R0 3918 #endif 3919 3920 if(strlen(si)>text_l) \ 00000034 0070A0E3 MOV R7,#+0 \ 00000038 0900A0E1 MOV R0,R9 \ 0000003C 1B0000EF SWI +27 \ 00000040 00005AE1 CMP R10,R0 \ 00000044 0800003A BCC ??AddToMain_0 3921 { 3922 /* 3923 char *du=malloc(text_l); 3924 strncpy(du,si,text_l); 3925 sprintf(de,"%s%s",du,"..."); 3926 mfree(du); 3927 } 3928 */ 3929 while(text_l!=0) 3930 { 3931 de[iz]=si[iz]; 3932 iz++; 3933 text_l--; 3934 } 3935 if(use_cutter) 3936 { 3937 de[iz]='.'; 3938 iz++; 3939 de[iz]='.'; 3940 iz++; 3941 de[iz]='.'; 3942 iz++; 3943 } 3944 de[iz]='\0'; 3945 } 3946 else 3947 strcpy(de, si); \ 00000048 0910A0E1 MOV R1,R9 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 3948 iz=0; \ ??AddToMain_1: \ 00000054 0080A0E3 MOV R8,#+0 \ 00000058 190000EA B ??AddToMain_2 \ ??AddToMain_3: \ 0000005C 0910D8E7 LDRB R1,[R8, +R9] \ 00000060 01A04AE2 SUB R10,R10,#+1 \ 00000064 0510C8E7 STRB R1,[R8, +R5] \ 00000068 0080A0E1 MOV R8,R0 \ ??AddToMain_0: \ 0000006C 010088E2 ADD R0,R8,#+1 \ 00000070 00005AE3 CMP R10,#+0 \ 00000074 F8FFFF1A BNE ??AddToMain_3 \ 00000078 101196E5 LDR R1,[R6, #+272] \ 0000007C 000051E3 CMP R1,#+0 \ 00000080 0500000A BEQ ??AddToMain_4 \ 00000084 2E10A0E3 MOV R1,#+46 \ 00000088 0510C8E7 STRB R1,[R8, +R5] \ 0000008C 0510C0E7 STRB R1,[R0, +R5] \ 00000090 010080E2 ADD R0,R0,#+1 \ 00000094 0510C0E7 STRB R1,[R0, +R5] \ 00000098 018080E2 ADD R8,R0,#+1 \ ??AddToMain_4: \ 0000009C 0570C8E7 STRB R7,[R8, +R5] \ 000000A0 EBFFFFEA B ??AddToMain_1 3949 while(strlen(de)!=iz) 3950 { 3951 // if(d[i]==0x2A) d[i]=0x20; 3952 // if(d[i]==0x27) d[i]=0x20; 3953 // if(d[i]==0x22) d[i]=0x20; 3954 // if(d[i]==0x26) d[i]=0x20; 3955 // if(d[i]==0x3D) d[i]=0x20; 3956 // if(d[i]==0x3C) d[i]=0x20; 3957 // if(d[i]==0x3E) d[i]=0x20; 3958 // if(d[i]==0x7B) d[i]=0x20; 3959 // if(d[i]==0x7D) d[i]=0x20; 3960 // if(d[i]==0x5B) d[i]=0x20; 3961 // if(d[i]==0x5D) d[i]=0x20; 3962 // if(d[i]==0x23) d[i]=0x20; 3963 // if(d[i]==0x2F) d[i]=0x20; 3964 // if(d[i]==0x5C) d[i]=0x20; 3965 // if(d[i]==0x7E) d[i]=0x20; 3966 // if(d[i]==0x5E) d[i]=0x20; 3967 // if(d[i]==0xAC) d[i]=0x20; 3968 // if(d[i]==0xA3) d[i]=0x20; 3969 // if(d[i]==0x24) d[i]=0x20; 3970 // if(d[i]==0xA5) d[i]=0x20; 3971 if(de[iz]==0x0D) de[iz]=0x20; \ ??AddToMain_5: \ 000000A4 0510D8E7 LDRB R1,[R8, +R5] \ 000000A8 2000A0E3 MOV R0,#+32 \ 000000AC 0D0051E3 CMP R1,#+13 \ 000000B0 0500C807 STRBEQ R0,[R8, +R5] 3972 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B4 0510D8E7 LDRB R1,[R8, +R5] \ 000000B8 0A0051E3 CMP R1,#+10 \ 000000BC 0500C807 STRBEQ R0,[R8, +R5] 3973 iz++; \ 000000C0 018088E2 ADD R8,R8,#+1 3974 } \ ??AddToMain_2: \ 000000C4 0500A0E1 MOV R0,R5 \ 000000C8 1B0000EF SWI +27 \ 000000CC 080050E1 CMP R0,R8 \ 000000D0 F3FFFF1A BNE ??AddToMain_5 3975 de[iz]='\0'; \ 000000D4 0570C8E7 STRB R7,[R8, +R5] 3976 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable68 ;; main_count \ 000000DC 44719FE5 LDR R7,??AddToMain_6 ;; `?` \ 000000E0 3410A0E3 MOV R1,#+52 \ 000000E4 581D81E3 ORR R1,R1,#0x1600 \ 000000E8 061081E0 ADD R1,R1,R6 \ 000000EC 04108DE5 STR R1,[SP, #+4] \ 000000F0 000098E5 LDR R0,[R8, #+0] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 0400001A BNE ??AddToMain_7 \ 000000FC 04009DE5 LDR R0,[SP, #+4] \ 00000100 0530A0E1 MOV R3,R5 \ 00000104 0420A0E1 MOV R2,R4 \ 00000108 0710A0E1 MOV R1,R7 \ 0000010C 160000EF SWI +22 3977 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000110 6410A0E3 MOV R1,#+100 \ 00000114 581D81E3 ORR R1,R1,#0x1600 \ 00000118 061081E0 ADD R1,R1,R6 \ 0000011C 00108DE5 STR R1,[SP, #+0] \ 00000120 000098E5 LDR R0,[R8, #+0] \ 00000124 010050E3 CMP R0,#+1 \ 00000128 0400001A BNE ??AddToMain_8 \ 0000012C 00009DE5 LDR R0,[SP, #+0] \ 00000130 0530A0E1 MOV R3,R5 \ 00000134 0420A0E1 MOV R2,R4 \ 00000138 0710A0E1 MOV R1,R7 \ 0000013C 160000EF SWI +22 3978 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000140 9400A0E3 MOV R0,#+148 \ 00000144 580D80E3 ORR R0,R0,#0x1600 \ 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 3979 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 0000016C C400A0E3 MOV R0,#+196 \ 00000170 580D80E3 ORR R0,R0,#0x1600 \ 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 3980 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000198 F400A0E3 MOV R0,#+244 \ 0000019C 580D80E3 ORR R0,R0,#0x1600 \ 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 3981 if(main_count>4) \ ??AddToMain_11: \ 000001C4 000098E5 LDR R0,[R8, #+0] \ 000001C8 050050E3 CMP R0,#+5 \ 000001CC 100000BA BLT ??AddToMain_12 3982 { 3983 strcpy(a_txt, s_txt); \ 000001D0 00109DE5 LDR R1,[SP, #+0] \ 000001D4 04009DE5 LDR R0,[SP, #+4] \ 000001D8 1A0000EF SWI +26 3984 strcpy(s_txt, d_txt); \ 000001DC 00009DE5 LDR R0,[SP, #+0] \ 000001E0 0910A0E1 MOV R1,R9 \ 000001E4 1A0000EF SWI +26 3985 strcpy(d_txt, f_txt); \ 000001E8 0A10A0E1 MOV R1,R10 \ 000001EC 0900A0E1 MOV R0,R9 \ 000001F0 1A0000EF SWI +26 3986 strcpy(f_txt, g_txt); \ 000001F4 0B10A0E1 MOV R1,R11 \ 000001F8 0A00A0E1 MOV R0,R10 \ 000001FC 1A0000EF SWI +26 3987 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 3988 } 3989 mfree(de); \ ??AddToMain_12: \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 150000EF SWI +21 3990 main_d=1; \ 0000021C 0100A0E3 MOV R0,#+1 \ 00000220 E40186E5 STR R0,[R6, #+484] 3991 } \ 00000224 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_6: \ 00000228 ........ DC32 `?` 3992 3993 //======================add to main info================ 3994 3995 int NEW_MSG; 3996 //int LOG_TIME_CONN=0;//not log online/offline time 3997 \ In segment CODE, align 4, keep-with-next 3998 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 3999 { \ AddStringToLog: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4000 char hs[128], *lastX; 4001 TTime tt; 4002 TDate d; 4003 GetDateTime(&d,&tt); 4004 int i; 4005 4006 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 4007 if ( code==3 && NOT_LOG_SAME_XTXT ) \ 00000004 ........ LDR R5,??DataTable81 ;; S_ICONS \ 00000008 90D04DE2 SUB SP,SP,#+144 \ 0000000C B4809DE5 LDR R8,[SP, #+180] \ 00000010 B8B09DE5 LDR R11,[SP, #+184] \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 0160A0E1 MOV R6,R1 \ 0000001C 02A0A0E1 MOV R10,R2 \ 00000020 0370A0E1 MOV R7,R3 \ 00000024 0D10A0E1 MOV R1,SP \ 00000028 08008DE2 ADD R0,SP,#+8 \ 0000002C B40000EF SWI +180 \ 00000030 030056E3 CMP R6,#+3 \ 00000034 1400001A BNE ??AddStringToLog_0 \ 00000038 A40195E5 LDR R0,[R5, #+420] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 1100000A BEQ ??AddStringToLog_0 4008 { 4009 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000090 0700A0E1 MOV R0,R7 \ 00000094 01002DE9 PUSH {R0} \ 00000098 1000DDE5 LDRB R0,[SP, #+16] \ 0000009C 202089E2 ADD R2,R9,#+32 \ 000000A0 7F10A0E3 MOV R1,#+127 \ 000000A4 01002DE9 PUSH {R0} \ 000000A8 1500DDE5 LDRB R0,[SP, #+21] \ 000000AC 01002DE9 PUSH {R0} \ 000000B0 0E00DDE5 LDRB R0,[SP, #+14] \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 1100DDE5 LDRB R0,[SP, #+17] \ 000000BC 01002DE9 PUSH {R0} \ 000000C0 1430DDE5 LDRB R3,[SP, #+20] \ 000000C4 24008DE2 ADD R0,SP,#+36 \ 000000C8 1B0100EF SWI +283 4017 if(code != 3 || ((LOG_XTXT) && (flag)))//Нужно сохранять иксстатус \ 000000CC 030056E3 CMP R6,#+3 \ 000000D0 14D08DE2 ADD SP,SP,#+20 \ 000000D4 0300001A BNE ??AddStringToLog_4 \ 000000D8 A80195E5 LDR R0,[R5, #+424] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 00005B13 CMPNE R11,#+0 \ 000000E4 0400000A BEQ ??AddStringToLog_5 4018 Add2History(t, hs, s, code); \ ??AddStringToLog_4: \ 000000E8 0630A0E1 MOV R3,R6 \ 000000EC 0A20A0E1 MOV R2,R10 \ 000000F0 10108DE2 ADD R1,SP,#+16 \ 000000F4 0400A0E1 MOV R0,R4 \ 000000F8 ........ _BLF Add2History,??Add2History??rA 4019 4020 // ShowMSG(1,(int)t); 4021 // ShowMSG(1,(int)s); // Запись хистори 4022 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000FC 0A00A0E1 MOV R0,R10 \ 00000100 ........ BL NewLOGQ \ 00000104 00A0A0E1 MOV R10,R0 4023 // snprintf(p->hdr,79,"%02d:%02d %02d-%02d %s:",tt.hour,tt.min,d.day,d.month,name); 4024 snprintf(p->hdr,79,"%02d:%02d:%02d %02d.%02d %s:",tt.hour,tt.min,tt.sec,d.day,d.month,name); \ 00000108 80002DE9 PUSH {R7} \ 0000010C 1000DDE5 LDRB R0,[SP, #+16] \ 00000110 0920A0E1 MOV R2,R9 \ 00000114 4F10A0E3 MOV R1,#+79 \ 00000118 01002DE9 PUSH {R0} \ 0000011C 1500DDE5 LDRB R0,[SP, #+21] \ 00000120 01002DE9 PUSH {R0} \ 00000124 0E00DDE5 LDRB R0,[SP, #+14] \ 00000128 01002DE9 PUSH {R0} \ 0000012C 1100DDE5 LDRB R0,[SP, #+17] \ 00000130 01002DE9 PUSH {R0} \ 00000134 1430DDE5 LDRB R3,[SP, #+20] \ 00000138 10008AE2 ADD R0,R10,#+16 \ 0000013C 1B0100EF SWI +283 4025 p->type=code; \ 00000140 0C608AE5 STR R6,[R10, #+12] 4026 p->ID=IDforACK; //0-32767 \ 00000144 08808AE5 STR R8,[R10, #+8] 4027 i=AddLOGQ(&t->log,p); \ 00000148 0A10A0E1 MOV R1,R10 \ 0000014C 900084E2 ADD R0,R4,#+144 \ 00000150 ........ BL AddLOGQ \ 00000154 0070A0E1 MOV R7,R0 \ 00000158 150057E3 CMP R7,#+21 \ 0000015C 14D08DE2 ADD SP,SP,#+20 \ 00000160 090000BA BLT ??AddStringToLog_6 4028 while(i>MAXLOGMSG) 4029 { 4030 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000164 980094E5 LDR R0,[R4, #+152] \ 00000168 901094E5 LDR R1,[R4, #+144] 4031 RemoveLOGQ(&t->log,t->log); 4032 i--; \ 0000016C 017047E2 SUB R7,R7,#+1 \ 00000170 000051E1 CMP R1,R0 \ 00000174 00009005 LDREQ R0,[R0, #+0] \ 00000178 98008405 STREQ R0,[R4, #+152] \ 0000017C 900084E2 ADD R0,R4,#+144 \ 00000180 ........ BL RemoveLOGQ 4033 } \ 00000184 150057E3 CMP R7,#+21 \ 00000188 F5FFFFAA BGE ??AddStringToLog_7 4034 t->msg_count=i; \ ??AddStringToLog_6: \ 0000018C A07084E5 STR R7,[R4, #+160] 4035 if (!t->last_log) t->last_log=p; \ 00000190 980094E5 LDR R0,[R4, #+152] \ 00000194 000050E3 CMP R0,#+0 \ 00000198 98A08405 STREQ R10,[R4, #+152] 4036 if (code==3) \ 0000019C 030056E3 CMP R6,#+3 \ 000001A0 0D00001A BNE ??AddStringToLog_8 4037 { 4038 if (edchat_id) \ 000001A4 C80295E5 LDR R0,[R5, #+712] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 1C00000A BEQ ??AddStringToLog_9 4039 { 4040 void *data=FindGUIbyId(edchat_id,NULL); \ 000001B0 C80295E5 LDR R0,[R5, #+712] \ 000001B4 0010A0E3 MOV R1,#+0 \ 000001B8 090200EF SWI +521 4041 if (data) \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 1700000A BEQ ??AddStringToLog_9 4042 { 4043 EDCHAT_STRUCT *ed_struct; 4044 ed_struct=EDIT_GetUserPointer(data); \ 000001C4 DF0100EF SWI +479 4045 if (ed_struct) \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 1400000A BEQ ??AddStringToLog_9 4046 { 4047 if (ed_struct->ed_contact==t) \ 000001D0 000090E5 LDR R0,[R0, #+0] \ 000001D4 040050E1 CMP R0,R4 \ 000001D8 1100001A BNE ??AddStringToLog_9 4048 { 4049 goto L_INC; 4050 } 4051 } 4052 } 4053 } 4054 goto L_NOINC; 4055 } 4056 L_INC: 4057 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001DC 800094E5 LDR R0,[R4, #+128] \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 B8029505 LDREQ R0,[R5, #+696] \ 000001E8 01008002 ADDEQ R0,R0,#+1 \ 000001EC B8028505 STREQ R0,[R5, #+696] 4058 if(NEW_MSG==1) \ 000001F0 580395E5 LDR R0,[R5, #+856] \ 000001F4 010050E3 CMP R0,#+1 \ 000001F8 0700001A BNE ??AddStringToLog_10 4059 { 4060 t->unread_msg++; \ 000001FC 840094E5 LDR R0,[R4, #+132] \ 00000200 010080E2 ADD R0,R0,#+1 \ 00000204 840084E5 STR R0,[R4, #+132] 4061 total_unread2++; \ 00000208 140295E5 LDR R0,[R5, #+532] \ 0000020C 010080E2 ADD R0,R0,#+1 \ 00000210 140285E5 STR R0,[R5, #+532] 4062 NEW_MSG=0; \ 00000214 0000A0E3 MOV R0,#+0 \ 00000218 580385E5 STR R0,[R5, #+856] 4063 } 4064 t->isunread=1; \ ??AddStringToLog_10: \ 0000021C 0100A0E3 MOV R0,#+1 \ 00000220 800084E5 STR R0,[R4, #+128] 4065 // if(saver_on) reftes(); 4066 L_NOINC: 4067 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000224 0400A0E1 MOV R0,R4 \ 00000228 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4068 } \ ??AddStringToLog_2: \ 0000022C 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 00000230 F08FBDE8 POP {R4-R11,PC} ;; return \ ??AddStringToLog_3: \ 00000234 ........ DC32 `?` 4069 4070 void ParseAnswer(WSHDR *ws, const char *s); 4071 4072 int time_to_stop_t9; 4073 \ In segment CODE, align 4, keep-with-next 4074 void ParseXStatusText(WSHDR *ws, const char *s, int color) 4075 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 4076 int c; 4077 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 4078 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 4079 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} 4080 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 4081 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 4082 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 4083 while((c=*s++)) 4084 { 4085 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 4086 { 4087 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 4088 { 4089 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 4090 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 4091 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 4092 } 4093 } 4094 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 4095 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 4096 } 4097 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 4098 void AddMsgToChat(void *data) 4099 { \ AddMsgToChat: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 4100 LOGQ *p; 4101 EDITCONTROL ec; 4102 EDITC_OPTIONS ec_options; 4103 EDCHAT_STRUCT *ed_struct; 4104 int j; 4105 int color, font, type; 4106 int zc; 4107 if (!data) return; \ 0000000C B900000A BEQ ??AddMsgToChat_0 4108 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0050B0E1 MOVS R5,R0 4109 if (!ed_struct) return; \ 00000018 B600000A BEQ ??AddMsgToChat_0 4110 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000095E5 LDR R0,[R5, #+0] \ 00000020 801090E5 LDR R1,[R0, #+128] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 B200000A BEQ ??AddMsgToChat_0 4111 4112 4113 p=ed_struct->ed_contact->last_log; \ 0000002C 986090E5 LDR R6,[R0, #+152] 4114 if (p) \ 00000030 ........ LDR R7,??DataTable81 ;; S_ICONS \ 00000034 000056E3 CMP R6,#+0 \ 00000038 9800000A BEQ ??AddMsgToChat_1 4115 { 4116 while(p) 4117 { 4118 font = ED_H_FONT_SIZE; 4119 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C 040096E5 LDR R0,[R6, #+4] \ 00000040 848197E5 LDR R8,[R7, #+388] \ 00000044 689197E5 LDR R9,[R7, #+360] \ 00000048 030010E2 ANDS R0,R0,#0x3 \ 0000004C 0300000A BEQ ??AddMsgToChat_3 4120 { 4121 if (zc==1) \ 00000050 010050E3 CMP R0,#+1 \ 00000054 1A00001A BNE ??AddMsgToChat_4 4122 color=ACK_COLOR; //Зеленый \ 00000058 989197E5 LDR R9,[R7, #+408] \ 0000005C 180000EA B ??AddMsgToChat_4 4123 else 4124 color=I_COLOR; 4125 //#endif 4126 } 4127 else 4128 { 4129 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000060 080096E5 LDR R0,[R6, #+8] \ 00000064 010070E3 CMN R0,#+1 \ 00000068 1400001A BNE ??AddMsgToChat_5 4130 { 4131 type = p->type&0x0F; \ 0000006C 0C0096E5 LDR R0,[R6, #+12] \ 00000070 0F1000E2 AND R1,R0,#0xF 4132 if(p->type&0x10) \ 00000074 100010E3 TST R0,#0x10 \ 00000078 0900000A BEQ ??AddMsgToChat_6 4133 { 4134 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 0000007C 010051E3 CMP R1,#+1 \ 00000080 74919705 LDREQ R9,[R7, #+372] \ 00000084 0400000A BEQ ??AddMsgToChat_7 \ 00000088 030051E3 CMP R1,#+3 \ 0000008C 7C919705 LDREQ R9,[R7, #+380] \ 00000090 94819705 LDREQ R8,[R7, #+404] \ 00000094 0A00000A BEQ ??AddMsgToChat_4 \ 00000098 789197E5 LDR R9,[R7, #+376] \ ??AddMsgToChat_7: \ 0000009C 908197E5 LDR R8,[R7, #+400] \ 000000A0 070000EA B ??AddMsgToChat_4 4135 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 4136 } 4137 else 4138 { 4139 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??AddMsgToChat_6: \ 000000A4 010051E3 CMP R1,#+1 \ 000000A8 0500000A BEQ ??AddMsgToChat_4 \ 000000AC 030051E3 CMP R1,#+3 \ 000000B0 6C919715 LDRNE R9,[R7, #+364] \ 000000B4 88819705 LDREQ R8,[R7, #+392] \ 000000B8 70919705 LDREQ R9,[R7, #+368] \ 000000BC 000000EA B ??AddMsgToChat_4 4140 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 4141 } 4142 } 4143 else 4144 color=UNACK_COLOR; //????? \ ??AddMsgToChat_5: \ 000000C0 9C9197E5 LDR R9,[R7, #+412] 4145 } 4146 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000C4 10008DE2 ADD R0,SP,#+16 \ 000000C8 640100EF SWI +356 4147 if ((p->type&0x0F)!=3) \ 000000CC 0C0096E5 LDR R0,[R6, #+12] \ 000000D0 0F0000E2 AND R0,R0,#0xF \ 000000D4 030050E3 CMP R0,#+3 \ 000000D8 0800000A BEQ ??AddMsgToChat_8 4148 { 4149 ascii2ws(ews,p->hdr); \ 000000DC 300297E5 LDR R0,[R7, #+560] \ 000000E0 101086E2 ADD R1,R6,#+16 \ 000000E4 ........ _BLF ascii2ws,??ascii2ws??rA 4150 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000000E8 303297E5 LDR R3,[R7, #+560] \ 000000EC 4020A0E3 MOV R2,#+64 \ 000000F0 000093E5 LDR R0,[R3, #+0] \ 000000F4 B000D0E1 LDRH R0,[R0, #+0] \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 030000EA B ??AddMsgToChat_9 4151 } 4152 else 4153 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_8: \ 00000100 0000A0E3 MOV R0,#+0 \ 00000104 01002DE9 PUSH {R0} \ 00000108 303297E5 LDR R3,[R7, #+560] \ 0000010C 2020A0E3 MOV R2,#+32 \ ??AddMsgToChat_9: \ 00000110 0110A0E3 MOV R1,#+1 \ 00000114 14008DE2 ADD R0,SP,#+20 \ 00000118 650100EF SWI +357 \ 0000011C 04D08DE2 ADD SP,SP,#+4 4154 PrepareEditCOptions(&ec_options); \ 00000120 0D00A0E1 MOV R0,SP \ 00000124 C80100EF SWI +456 4155 SetPenColorToEditCOptions(&ec_options,color); \ 00000128 0910A0E1 MOV R1,R9 \ 0000012C 0D00A0E1 MOV R0,SP \ 00000130 CC0100EF SWI +460 4156 SetFontToEditCOptions(&ec_options,font); \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0D00A0E1 MOV R0,SP \ 0000013C CA0100EF SWI +458 4157 CopyOptionsToEditControl(&ec,&ec_options); \ 00000140 0D10A0E1 MOV R1,SP \ 00000144 10008DE2 ADD R0,SP,#+16 \ 00000148 CE0100EF SWI +462 4158 //AddEditControlToEditQend(eq,&ec,ma); 4159 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 0000014C 080095E5 LDR R0,[R5, #+8] \ 00000150 10208DE2 ADD R2,SP,#+16 \ 00000154 011040E2 SUB R1,R0,#+1 \ 00000158 0400A0E1 MOV R0,R4 \ 0000015C D20100EF SWI +466 4160 ed_struct->ed_answer++; \ 00000160 080095E5 LDR R0,[R5, #+8] \ 00000164 010080E2 ADD R0,R0,#+1 \ 00000168 080085E5 STR R0,[R5, #+8] 4161 if ((p->type&0x0F)!=3) \ 0000016C 0C0096E5 LDR R0,[R6, #+12] \ 00000170 0F1000E2 AND R1,R0,#0xF \ 00000174 030051E3 CMP R1,#+3 \ 00000178 0300000A BEQ ??AddMsgToChat_10 4162 { 4163 ParseAnswer(ews,p->text); \ 0000017C 300297E5 LDR R0,[R7, #+560] \ 00000180 601086E2 ADD R1,R6,#+96 \ 00000184 ........ BL ParseAnswer \ 00000188 050000EA B ??AddMsgToChat_11 4164 } 4165 else 4166 { 4167 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_10: \ 0000018C 100010E3 TST R0,#0x10 \ 00000190 7C219715 LDRNE R2,[R7, #+380] \ 00000194 300297E5 LDR R0,[R7, #+560] \ 00000198 70219705 LDREQ R2,[R7, #+368] \ 0000019C 601086E2 ADD R1,R6,#+96 \ 000001A0 ........ BL ParseXStatusText 4168 } 4169 PrepareEditControl(&ec); \ ??AddMsgToChat_11: \ 000001A4 10008DE2 ADD R0,SP,#+16 \ 000001A8 640100EF SWI +356 4170 ConstructEditControl(&ec, 4171 ECT_NORMAL_TEXT, 4172 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 4173 ews,ews->wsbody[0]); \ 000001AC 303297E5 LDR R3,[R7, #+560] \ 000001B0 000093E5 LDR R0,[R3, #+0] \ 000001B4 B010D0E1 LDRH R1,[R0, #+0] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 0100A0E1 MOV R0,R1 \ 000001C0 01002DE9 PUSH {R0} \ 000001C4 812DA013 MOVNE R2,#+8256 \ 000001C8 2020A003 MOVEQ R2,#+32 \ 000001CC 0310A0E3 MOV R1,#+3 \ 000001D0 14008DE2 ADD R0,SP,#+20 \ 000001D4 650100EF SWI +357 4174 PrepareEditCOptions(&ec_options); \ 000001D8 04008DE2 ADD R0,SP,#+4 \ 000001DC C80100EF SWI +456 4175 //#ifdef M75 4176 if ((p->type&0x0F)!=3) \ 000001E0 0C0096E5 LDR R0,[R6, #+12] \ 000001E4 04D08DE2 ADD SP,SP,#+4 \ 000001E8 0F1000E2 AND R1,R0,#0xF \ 000001EC 030051E3 CMP R1,#+3 \ 000001F0 0300000A BEQ ??AddMsgToChat_12 4177 { 4178 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 000001F4 100010E3 TST R0,#0x10 \ 000001F8 80119705 LDREQ R1,[R7, #+384] \ 000001FC 8C119715 LDRNE R1,[R7, #+396] \ 00000200 080000EA B ??AddMsgToChat_13 4179 } 4180 else 4181 { 4182 SetPenColorToEditCOptions(&ec_options,(p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_12: \ 00000204 100010E3 TST R0,#0x10 \ 00000208 7C119715 LDRNE R1,[R7, #+380] \ 0000020C 0D00A0E1 MOV R0,SP \ 00000210 70119705 LDREQ R1,[R7, #+368] \ 00000214 CC0100EF SWI +460 4183 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000218 0C0096E5 LDR R0,[R6, #+12] \ 0000021C 100010E3 TST R0,#0x10 \ 00000220 94119715 LDRNE R1,[R7, #+404] \ 00000224 88119705 LDREQ R1,[R7, #+392] \ ??AddMsgToChat_13: \ 00000228 0D00A0E1 MOV R0,SP \ 0000022C CA0100EF SWI +458 4184 } 4185 //#else 4186 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 4187 //#endif 4188 CopyOptionsToEditControl(&ec,&ec_options); \ 00000230 0D10A0E1 MOV R1,SP \ 00000234 10008DE2 ADD R0,SP,#+16 \ 00000238 CE0100EF SWI +462 4189 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 0000023C 080095E5 LDR R0,[R5, #+8] \ 00000240 10208DE2 ADD R2,SP,#+16 \ 00000244 011040E2 SUB R1,R0,#+1 \ 00000248 0400A0E1 MOV R0,R4 \ 0000024C D20100EF SWI +466 4190 ed_struct->ed_answer++; \ 00000250 080095E5 LDR R0,[R5, #+8] \ 00000254 010080E2 ADD R0,R0,#+1 \ 00000258 080085E5 STR R0,[R5, #+8] 4191 p=p->next; \ 0000025C 006096E5 LDR R6,[R6, #+0] 4192 } \ 00000260 000056E3 CMP R6,#+0 \ 00000264 74FFFF1A BNE ??AddMsgToChat_2 4193 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 00000268 001095E5 LDR R1,[R5, #+0] \ 0000026C A01091E5 LDR R1,[R1, #+160] \ 00000270 011081E2 ADD R1,R1,#+1 \ 00000274 8140A0E1 LSL R4,R1,#+1 \ 00000278 000054E1 CMP R4,R0 \ 0000027C 070000AA BGE ??AddMsgToChat_1 4194 while(jed_answer) 4195 { 4196 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_14: \ 00000280 040095E5 LDR R0,[R5, #+4] \ 00000284 0110A0E3 MOV R1,#+1 \ 00000288 D10100EF SWI +465 4197 ed_struct->ed_answer--; \ 0000028C 080095E5 LDR R0,[R5, #+8] \ 00000290 010040E2 SUB R0,R0,#+1 \ 00000294 080085E5 STR R0,[R5, #+8] 4198 } \ 00000298 000054E1 CMP R4,R0 \ 0000029C F7FFFFBA BLT ??AddMsgToChat_14 4199 } 4200 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002A0 000095E5 LDR R0,[R5, #+0] \ 000002A4 0040A0E3 MOV R4,#+0 \ 000002A8 984080E5 STR R4,[R0, #+152] 4201 if (IsGuiOnTop(edchat_id)) \ 000002AC C80297E5 LDR R0,[R7, #+712] \ 000002B0 350100EF SWI +309 \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0300000A BEQ ??AddMsgToChat_15 4202 { 4203 total_unread--; \ 000002BC B80297E5 LDR R0,[R7, #+696] \ 000002C0 010040E2 SUB R0,R0,#+1 \ 000002C4 B80287E5 STR R0,[R7, #+696] \ 000002C8 020000EA B ??AddMsgToChat_16 4204 } 4205 else 4206 ed_struct->requested_decrement_total_unread++; \ ??AddMsgToChat_15: \ 000002CC 0C0095E5 LDR R0,[R5, #+12] \ 000002D0 010080E2 ADD R0,R0,#+1 \ 000002D4 0C0085E5 STR R0,[R5, #+12] 4207 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_16: \ 000002D8 000095E5 LDR R0,[R5, #+0] \ 000002DC 804080E5 STR R4,[R0, #+128] 4208 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 000002E0 141297E5 LDR R1,[R7, #+532] \ 000002E4 842090E5 LDR R2,[R0, #+132] \ 000002E8 021041E0 SUB R1,R1,R2 \ 000002EC 141287E5 STR R1,[R7, #+532] 4209 ed_struct->ed_contact->unread_msg=0; \ 000002F0 844080E5 STR R4,[R0, #+132] 4210 ChangeContactPos(ed_struct->ed_contact); \ 000002F4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4211 // EDIT_SetFocus(data,ed_struct->ed_answer); 4212 } \ ??AddMsgToChat_0: \ 000002F8 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 000002FC F083BDE8 POP {R4-R9,PC} ;; return 4213 4214 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 4215 void DrawAck(void *data) 4216 { \ DrawAck: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 4217 LOGQ *p; 4218 EDITCONTROL ec; 4219 EDITC_OPTIONS ec_options; 4220 EDCHAT_STRUCT *ed_struct; 4221 int j; 4222 int color; 4223 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 4224 if (!data) return; \ 00000010 4B00000A BEQ ??DrawAck_0 4225 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 4226 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4800000A BEQ ??DrawAck_0 4227 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 4228 j=ed_struct->ed_answer; 4229 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 905091E5 LDR R5,[R1, #+144] \ 0000002C A01091E5 LDR R1,[R1, #+160] \ 00000030 ........ LDR R8,??DataTable81 ;; S_ICONS \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 000055E3 CMP R5,#+0 \ 00000040 3900000A BEQ ??DrawAck_1 4230 while(p) 4231 { 4232 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000044 010057E3 CMP R7,#+1 \ 00000048 330000BA BLT ??DrawAck_3 4233 { 4234 if (!(p->acked&4)) \ 0000004C 040095E5 LDR R0,[R5, #+4] \ 00000050 040010E3 TST R0,#0x4 \ 00000054 3000001A BNE ??DrawAck_3 4235 { 4236 ExtractEditControl(data,j,&ec); \ 00000058 10208DE2 ADD R2,SP,#+16 \ 0000005C 0710A0E1 MOV R1,R7 \ 00000060 0400A0E1 MOV R0,R4 \ 00000064 690100EF SWI +361 4237 PrepareEditCOptions(&ec_options); \ 00000068 0D00A0E1 MOV R0,SP \ 0000006C C80100EF SWI +456 4238 if (p->acked) \ 00000070 040095E5 LDR R0,[R5, #+4] \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0400000A BEQ ??DrawAck_4 4239 { 4240 if (p->acked==1) \ 0000007C 010050E3 CMP R0,#+1 4241 color=ACK_COLOR; //Зеленый \ 00000080 98119805 LDREQ R1,[R8, #+408] \ 00000084 1100000A BEQ ??DrawAck_5 4242 else 4243 color=I_COLOR; \ ??DrawAck_6: \ 00000088 681198E5 LDR R1,[R8, #+360] \ 0000008C 0F0000EA B ??DrawAck_5 4244 } 4245 else 4246 { 4247 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000090 080095E5 LDR R0,[R5, #+8] \ 00000094 010070E3 CMN R0,#+1 \ 00000098 0B00001A BNE ??DrawAck_7 4248 color=(p->type&0x10)?(((p->type&0x0F)==1)?O_I_COLOR:O_TO_COLOR):(((p->type&0x0F)==1)?I_COLOR:TO_COLOR); \ 0000009C 0C0095E5 LDR R0,[R5, #+12] \ 000000A0 100010E3 TST R0,#0x10 \ 000000A4 0F0000E2 AND R0,R0,#0xF \ 000000A8 0300000A BEQ ??DrawAck_8 \ 000000AC 010050E3 CMP R0,#+1 \ 000000B0 78119815 LDRNE R1,[R8, #+376] \ 000000B4 74119805 LDREQ R1,[R8, #+372] \ 000000B8 040000EA B ??DrawAck_5 \ ??DrawAck_8: \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 F0FFFF0A BEQ ??DrawAck_6 \ 000000C4 6C1198E5 LDR R1,[R8, #+364] \ 000000C8 000000EA B ??DrawAck_5 4249 else 4250 color=UNACK_COLOR; //Серый \ ??DrawAck_7: \ 000000CC 9C1198E5 LDR R1,[R8, #+412] 4251 } 4252 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); \ ??DrawAck_5: \ 000000D0 0D00A0E1 MOV R0,SP \ 000000D4 CC0100EF SWI +460 4253 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); \ 000000D8 0C0095E5 LDR R0,[R5, #+12] 4254 CopyOptionsToEditControl(&ec,&ec_options); 4255 StoreEditControl(data,j,&ec); 4256 p->acked|=4; //Обработали 4257 dorefresh=1; \ 000000DC 0160A0E3 MOV R6,#+1 \ 000000E0 100010E3 TST R0,#0x10 \ 000000E4 90119815 LDRNE R1,[R8, #+400] \ 000000E8 0D00A0E1 MOV R0,SP \ 000000EC 84119805 LDREQ R1,[R8, #+388] \ 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] 4258 } 4259 } 4260 j+=2; 4261 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 4262 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C5FFFF1A BNE ??DrawAck_2 4263 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C C80298E5 LDR R0,[R8, #+712] \ 00000130 350100EF SWI +309 \ 00000134 000050E3 CMP R0,#+0 \ 00000138 00005613 CMPNE R6,#+0 \ 0000013C 0000000A BEQ ??DrawAck_0 \ 00000140 960100EF SWI +406 \ ??DrawAck_0: \ 00000144 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 00000148 F081BDE8 POP {R4-R8,PC} ;; return 4264 } 4265 \ In segment CODE, align 4, keep-with-next 4266 void ask_my_info(void) 4267 { 4268 /* TPKT *p; 4269 CLIST *t; 4270 p=malloc(sizeof(PKT)); 4271 p->pkt.uin=UIN; 4272 p->pkt.type=T_REQINFOSHORT; 4273 p->pkt.data_len=0; 4274 // AddStringToLog(t,0x01,"Request info...",I_str); 4275 SUBPROC((void *)SendAnswer,0,p);*/ 4276 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 4277 \ In segment CODE, align 4, keep-with-next 4278 void set_my_status(void) 4279 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 4280 TPKT *p; 4281 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 4282 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 4283 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 4284 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 4285 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 636 4286 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,??DataTable74 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 4287 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 636 4288 4289 extern int Send0; 4290 \ In segment CODE, align 4, keep-with-next 4291 void set_my_xstatus(void) 4292 { \ set_my_xstatus: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 4293 #ifdef NEWSGOLD 4294 if(Is_Id3tag_Enabled) 4295 { 4296 if(CurrentXStatus!=11) 4297 { 4298 #endif 4299 TPKT *p; 4300 char *s1; 4301 char *s2; 4302 int l1; 4303 int l2; 4304 p=malloc(sizeof(PKT)+1); 4305 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 4306 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 4307 p->pkt.data_len=1; // Длина пакета: 1 байт 4308 p->data[0]=CurrentXStatus; \ 00000004 ........ LDR R8,??DataTable81 ;; S_ICONS 4309 SUBPROC((void *)SendAnswer,0,p); \ 00000008 ........ LDR R6,??DataTable74 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 0900A0E3 MOV R0,#+9 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 0050A0E3 MOV R5,#+0 \ 00000020 005084E5 STR R5,[R4, #+0] \ 00000024 1600A0E3 MOV R0,#+22 \ 00000028 B400C4E1 STRH R0,[R4, #+4] \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 B600C4E1 STRH R0,[R4, #+6] \ 00000034 2C0298E5 LDR R0,[R8, #+556] \ 00000038 0420A0E1 MOV R2,R4 \ 0000003C 0800C4E5 STRB R0,[R4, #+8] \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 710100EF SWI +369 4310 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 0000004C 2C0298E5 LDR R0,[R8, #+556] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000058 010080E2 ADD R0,R0,#+1 \ 0000005C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000060 0070A0E1 MOV R7,R0 4311 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000064 2C0298E5 LDR R0,[R8, #+556] \ 00000068 04108DE2 ADD R1,SP,#+4 \ 0000006C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000070 020080E2 ADD R0,R0,#+2 \ 00000074 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000078 0080A0E1 MOV R8,R0 4312 if ((!s1)||(!s2)) return; \ 0000007C 000057E3 CMP R7,#+0 \ 00000080 00005813 CMPNE R8,#+0 \ 00000084 F781BD08 POPEQ {R0-R2,R4-R8,PC} 4313 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000088 00009DE5 LDR R0,[SP, #+0] \ 0000008C 04109DE5 LDR R1,[SP, #+4] \ 00000090 000081E0 ADD R0,R1,R0 \ 00000094 090080E2 ADD R0,R0,#+9 \ 00000098 140000EF SWI +20 \ 0000009C 0040A0E1 MOV R4,R0 4314 p->pkt.uin=0; \ 000000A0 005084E5 STR R5,[R4, #+0] 4315 p->pkt.type=T_XTEXT_SET; \ 000000A4 1A00A0E3 MOV R0,#+26 \ 000000A8 B400C4E1 STRH R0,[R4, #+4] 4316 p->pkt.data_len=l1+l2+1; \ 000000AC 00009DE5 LDR R0,[SP, #+0] \ 000000B0 04109DE5 LDR R1,[SP, #+4] \ 000000B4 000081E0 ADD R0,R1,R0 \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC B600C4E1 STRH R0,[R4, #+6] 4317 strncpy(p->data+0,s1,l1); \ 000000C0 00209DE5 LDR R2,[SP, #+0] \ 000000C4 0710A0E1 MOV R1,R7 \ 000000C8 080084E2 ADD R0,R4,#+8 \ 000000CC 160100EF SWI +278 4318 p->data[l1]=0; \ 000000D0 00009DE5 LDR R0,[SP, #+0] 4319 strncpy(p->data+l1+1,s2,l2); \ 000000D4 0810A0E1 MOV R1,R8 \ 000000D8 040080E0 ADD R0,R0,R4 \ 000000DC 0850C0E5 STRB R5,[R0, #+8] \ 000000E0 00009DE5 LDR R0,[SP, #+0] \ 000000E4 04209DE5 LDR R2,[SP, #+4] \ 000000E8 040080E0 ADD R0,R0,R4 \ 000000EC 090080E2 ADD R0,R0,#+9 \ 000000F0 160100EF SWI +278 4320 SUBPROC((void *)SendAnswer,0,p); \ 000000F4 0420A0E1 MOV R2,R4 \ 000000F8 0010A0E3 MOV R1,#+0 \ 000000FC 0600A0E1 MOV R0,R6 \ 00000100 710100EF SWI +369 4321 #ifdef NEWSGOLD 4322 } 4323 else 4324 { 4325 tracktimer=0; 4326 GetTags(); 4327 } 4328 } 4329 else 4330 { 4331 TPKT *p; 4332 char *s1; 4333 char *s2; 4334 int l1; 4335 int l2; 4336 p=malloc(sizeof(PKT)+1); 4337 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 4338 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 4339 p->pkt.data_len=1; // Длина пакета: 1 байт 4340 p->data[0]=CurrentXStatus; 4341 SUBPROC((void *)SendAnswer,0,p); 4342 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); 4343 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); 4344 if ((!s1)||(!s2)) return; 4345 p=malloc(sizeof(PKT)+l1+l2+1); 4346 p->pkt.uin=0; 4347 p->pkt.type=T_XTEXT_SET; 4348 p->pkt.data_len=l1+l2+1; 4349 strncpy(p->data+0,s1,l1); 4350 p->data[l1]=0; 4351 strncpy(p->data+l1+1,s2,l2); 4352 SUBPROC((void *)SendAnswer,0,p); 4353 tracktimer=0; 4354 GetTags(); 4355 } 4356 #endif 4357 } \ 00000104 F781BDE8 POP {R0-R2,R4-R8,PC} ;; return 4358 #ifdef NEWSGOLD 4359 4360 4361 void set_my_xstatus2(void) 4362 { 4363 TPKT *p; 4364 // char *s1; 4365 // char *s2; 4366 int l1; 4367 int l2; 4368 p=malloc(sizeof(PKT)+1); 4369 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 4370 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 4371 p->pkt.data_len=1; // Длина пакета: 1 байт 4372 p->data[0]=11; 4373 SUBPROC((void *)SendAnswer,0,p); 4374 // char *s1; 4375 char *sk2=malloc(256); 4376 // strcpy(s1, playing); 4377 // s1="Now playing:"; 4378 strcpy(sk2,teast2); 4379 l1=strlen(playing); 4380 l2=strlen(sk2); 4381 if ((!playing)||(!sk2)) return; 4382 p=malloc(sizeof(PKT)+l1+l2+1); 4383 p->pkt.uin=0; 4384 p->pkt.type=T_XTEXT_SET; 4385 p->pkt.data_len=l1+l2+1; 4386 strncpy(p->data+0,playing,l1); 4387 p->data[l1]=0; 4388 strncpy(p->data+l1+1,sk2,l2); 4389 mfree(sk2); 4390 SUBPROC((void *)SendAnswer,0,p); 4391 // mfree(s1); 4392 // mfree(s2); 4393 } 4394 #endif \ In segment CODE, align 4, keep-with-next 4395 void to_develop(void) 4396 { 4397 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable81 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 681290E5 LDR R1,[R0, #+616] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 4398 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable76 ;; `?ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 4415 { 4416 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 4417 { 4418 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 880084E5 STR R0,[R4, #+136] 4419 #ifdef EVILFOX 4420 time_to_stop_t9=2; 4421 #else 4422 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 5C0385E5 STR R0,[R5, #+860] \ 00000060 7080BDE8 POP {R4-R6,PC} 4423 #endif 4424 } 4425 else 4426 { 4427 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 4428 DirectRedrawGUI_ID(edchat_id); \ 0000006C C80295E5 LDR R0,[R5, #+712] \ 00000070 400100EF SWI +320 4429 } 4430 } 4431 } 4432 } 4433 } 4434 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 4435 4436 GBSTMR develop; 4437 \ In segment CODE, align 4, keep-with-next 4438 void begin_to_develop() 4439 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 4440 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 4441 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 4442 else 4443 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 + 5924 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 4444 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 S_ICONS + 5924 4445 4446 4447 4448 4449 4450 //----------------------------- LOAD COMMANDS -----------------------------// 4451 ///=================================================================== 4452 //Templates 4453 char *cmd_chars; //Собственно файл 4454 char **cmd_lines; //Массив указателей на строки 4455 \ In segment CODE, align 4, keep-with-next 4456 void cmdFree(void) 4457 { \ cmdFree: \ 00000000 10402DE9 PUSH {R4,LR} 4458 if (cmd_lines) mfree(cmd_lines); \ 00000004 ........ LDR R4,??DataTable81 ;; S_ICONS \ 00000008 640394E5 LDR R0,[R4, #+868] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0000000A BEQ ??cmdFree_0 \ 00000014 150000EF SWI +21 4459 if (cmd_chars) mfree(cmd_chars); \ ??cmdFree_0: \ 00000018 600394E5 LDR R0,[R4, #+864] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 0100000A BEQ ??cmdFree_1 \ 00000024 150000EF SWI +21 4460 cmd_lines=NULL; \ 00000028 0000A0E3 MOV R0,#+0 \ ??cmdFree_1: \ 0000002C 640384E5 STR R0,[R4, #+868] 4461 cmd_chars=NULL; \ 00000030 600384E5 STR R0,[R4, #+864] 4462 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 4463 \ In segment CODE, align 4, keep-with-next 4464 int LoadCmd() 4465 { \ LoadCmd: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 4466 FSTATS stat; 4467 char fn[256]; 4468 int f; 4469 unsigned int ul; 4470 int i; 4471 int fsize; 4472 char *p; 4473 char *pp; 4474 int c; 4475 cmdFree(); 4476 strcpy(fn,TEMPLATES_PATH); \ 00000004 ........ LDR R4,??DataTable81 ;; S_ICONS \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C ........ BL cmdFree \ 00000010 CA1E84E2 ADD R1,R4,#+3232 \ 00000014 04008DE2 ADD R0,SP,#+4 \ 00000018 1A0000EF SWI +26 4477 i=strlen(fn); \ 0000001C 04008DE2 ADD R0,SP,#+4 \ 00000020 1B0000EF SWI +27 4478 sprintf(fn+i,"\\cmd.txt"); \ 00000024 E8109FE5 LDR R1,??LoadCmd_0 ;; `?` \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 04008DE2 ADD R0,SP,#+4 \ 00000030 000087E0 ADD R0,R7,R0 \ 00000034 160000EF SWI +22 4479 GetFileStats(fn,&stat,&ul); \ 00000038 0D20A0E1 MOV R2,SP \ 0000003C 411F8DE2 ADD R1,SP,#+260 \ 00000040 04008DE2 ADD R0,SP,#+4 \ 00000044 840000EF SWI +132 4480 fsize=stat.size; \ 00000048 08719DE5 LDR R7,[SP, #+264] 4481 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 0000004C 0D30A0E1 MOV R3,SP \ 00000050 8020A0E3 MOV R2,#+128 \ 00000054 801CA0E3 MOV R1,#+32768 \ 00000058 04008DE2 ADD R0,SP,#+4 \ 0000005C 0A0000EF SWI +10 \ 00000060 0080A0E1 MOV R8,R0 4482 if (f==-1) return 0; \ 00000064 010078E3 CMN R8,#+1 \ 00000068 0200001A BNE ??LoadCmd_1 \ 0000006C 0000A0E3 MOV R0,#+0 \ ??LoadCmd_2: \ 00000070 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 00000074 F087BDE8 POP {R4-R10,PC} ;; return 4483 p=cmd_chars=malloc(fsize+1); \ ??LoadCmd_1: \ 00000078 010087E2 ADD R0,R7,#+1 \ 0000007C 140000EF SWI +20 \ 00000080 600384E5 STR R0,[R4, #+864] \ 00000084 0060A0E1 MOV R6,R0 4484 p[fread(f,p,fsize,&ul)]=0; \ 00000088 0050A0E3 MOV R5,#+0 \ 0000008C 0D30A0E1 MOV R3,SP \ 00000090 0720A0E1 MOV R2,R7 \ 00000094 0610A0E1 MOV R1,R6 \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 0B0000EF SWI +11 \ 000000A0 0650C0E7 STRB R5,[R0, +R6] 4485 fclose(f,&ul); \ 000000A4 0D10A0E1 MOV R1,SP \ 000000A8 0800A0E1 MOV R0,R8 \ 000000AC 0D0000EF SWI +13 4486 i=0; \ 000000B0 0070A0E3 MOV R7,#+0 4487 pp=p; \ 000000B4 0680A0E1 MOV R8,R6 \ 000000B8 020000EA B ??LoadCmd_3 4488 for(;;) 4489 { 4490 c=*p; 4491 if (c<32) 4492 { 4493 if (pp&&(pp!=p)) 4494 { 4495 cmd_lines=realloc(cmd_lines,(i+1)*sizeof(char *)); 4496 cmd_lines[i++]=pp; 4497 } 4498 pp=NULL; 4499 if (!c) break; 4500 *p=0; 4501 } 4502 else 4503 { 4504 if (pp==NULL) pp=p; \ ??LoadCmd_4: \ 000000BC 000058E3 CMP R8,#+0 \ 000000C0 0680A001 MOVEQ R8,R6 4505 } 4506 p++; \ ??LoadCmd_5: \ 000000C4 016086E2 ADD R6,R6,#+1 \ ??LoadCmd_3: \ 000000C8 0090D6E5 LDRB R9,[R6, #+0] \ 000000CC 200059E3 CMP R9,#+32 \ 000000D0 F9FFFFAA BGE ??LoadCmd_4 \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 06005811 CMPNE R8,R6 \ 000000DC 0600000A BEQ ??LoadCmd_6 \ 000000E0 640394E5 LDR R0,[R4, #+868] \ 000000E4 01A087E2 ADD R10,R7,#+1 \ 000000E8 0A11A0E1 LSL R1,R10,#+2 \ 000000EC BA0000EF SWI +186 \ 000000F0 640384E5 STR R0,[R4, #+868] \ 000000F4 078180E7 STR R8,[R0, +R7, LSL #+2] \ 000000F8 0A70A0E1 MOV R7,R10 \ ??LoadCmd_6: \ 000000FC 0080A0E3 MOV R8,#+0 \ 00000100 000059E3 CMP R9,#+0 4507 } 4508 return i; \ 00000104 0700A001 MOVEQ R0,R7 \ 00000108 D8FFFF0A BEQ ??LoadCmd_2 \ 0000010C 0050C6E5 STRB R5,[R6, #+0] \ 00000110 EBFFFFEA B ??LoadCmd_5 \ ??LoadCmd_0: \ 00000114 ........ DC32 `?` 4509 } 4510 4511 int NumOfItems=0; 4512 HEADER_DESC CmdMenuHeader={NULL,NULL,NULL,NULL,NULL,NULL,LGP_NULL}; 4513 \ In segment CODE, align 4, keep-with-next 4514 void CmdMenuItemHandler(void *data, int curitem, void *unk) 4515 { \ CmdMenuItemHandler: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 4516 void *item=AllocMenuItem(data); \ 0000000C 970100EF SWI +407 \ 00000010 0060A0E1 MOV R6,R0 4517 char *p=cmd_lines[curitem]; \ 00000014 3C009FE5 LDR R0,??CmdMenuItemHandler_0 ;; S_ICONS + 868 \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 057190E7 LDR R7,[R0, +R5, LSL #+2] 4518 WSHDR *ws=AllocMenuWS(data,strlen(p)); \ 00000020 0700A0E1 MOV R0,R7 \ 00000024 1B0000EF SWI +27 \ 00000028 0010A0E1 MOV R1,R0 \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 980100EF SWI +408 \ 00000034 0080A0E1 MOV R8,R0 4519 ascii2ws(ws,p); \ 00000038 0710A0E1 MOV R1,R7 \ 0000003C ........ _BLF ascii2ws,??ascii2ws??rA 4520 SetMenuItemText(data, item, ws, curitem); \ 00000040 0530A0E1 MOV R3,R5 \ 00000044 0820A0E1 MOV R2,R8 \ 00000048 0610A0E1 MOV R1,R6 \ 0000004C 0400A0E1 MOV R0,R4 \ 00000050 9A0100EF SWI +410 4521 } \ 00000054 F081BDE8 POP {R4-R8,PC} ;; return \ ??CmdMenuItemHandler_0: \ 00000058 ........ DC32 S_ICONS + 868 4522 \ In segment CODE, align 4, keep-with-next 4523 void CmdMenuGHook(void *data, int cmd) 4524 { \ CmdMenuGHook: \ 00000000 00402DE9 PUSH {LR} 4525 if (cmd==TI_CMD_FOCUS) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0100001A BNE ??CmdMenuGHook_0 4526 { 4527 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 \ 00000010 0080BDE8 POP {PC} 4528 } 4529 if (cmd==TI_CMD_DESTROY) \ ??CmdMenuGHook_0: \ 00000014 030051E3 CMP R1,#+3 \ 00000018 0080BD18 POPNE {PC} 4530 { 4531 cmdFree(); \ 0000001C 0040BDE8 POP {LR} ;; Pop \ 00000020 ........ B cmdFree ;; tailcall 4532 } 4533 } 4534 \ In segment CODE, align 4, keep-with-next 4535 static int CmdMenuKeyHook(void *data, GUI_MSG *msg) 4536 { \ CmdMenuKeyHook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 4537 int Selected=GetCurMenuItem(data); \ 0000000C 8F0100EF SWI +399 \ 00000010 0060A0E1 MOV R6,R0 4538 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000014 0400A0E1 MOV R0,R4 \ 00000018 E00100EF SWI +480 \ 0000001C 0040A0E1 MOV R4,R0 4539 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000020 F200D5E1 LDRSH R0,[R5, #+2] \ 00000024 180050E3 CMP R0,#+24 \ 00000028 3D005013 CMPNE R0,#+61 \ 0000002C 1700001A BNE ??CmdMenuKeyHook_0 4540 { 4541 if (NumOfItems) \ 00000030 ........ LDR R0,??DataTable81 ;; S_ICONS \ 00000034 681390E5 LDR R1,[R0, #+872] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 1300000A BEQ ??CmdMenuKeyHook_0 4542 { 4543 const char *p=cmd_lines[Selected]; \ 00000040 640390E5 LDR R0,[R0, #+868] \ 00000044 065190E7 LDR R5,[R0, +R6, LSL #+2] 4544 WSHDR *ws; 4545 ws=AllocWS(256); \ 00000048 400FA0E3 MOV R0,#+256 \ 0000004C 250100EF SWI +293 \ 00000050 0060A0E1 MOV R6,R0 4546 wsprintf(ws,p); \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 240100EF SWI +292 4547 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); \ 0000005C 040094E5 LDR R0,[R4, #+4] \ 00000060 081094E5 LDR R1,[R4, #+8] \ 00000064 0620A0E1 MOV R2,R6 \ 00000068 DE0100EF SWI +478 4548 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)+1); \ 0000006C 0600A0E1 MOV R0,R6 \ 00000070 230100EF SWI +291 \ 00000074 011080E2 ADD R1,R0,#+1 \ 00000078 040094E5 LDR R0,[R4, #+4] \ 0000007C D40100EF SWI +468 4549 4550 FreeWS(ws); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 290100EF SWI +297 4551 return(1); \ 00000088 0100A0E3 MOV R0,#+1 \ 0000008C 7080BDE8 POP {R4-R6,PC} 4552 } 4553 } 4554 return(0); \ ??CmdMenuKeyHook_0: \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 7080BDE8 POP {R4-R6,PC} ;; return 4555 } 4556 4557 const int CmdSoftkeys[]={0,1,2}; 4558 4559 const SOFTKEY_DESC cmd_sk[]= 4560 { 4561 {0x0004,0x0000,(int)""}, 4562 {0x0001,0x0000,(int)LG_CLOSE}, 4563 {0x003D,0x0000,(int)LGP_DOIT_PIC} 4564 }; 4565 const SOFTKEYSTAB cmd_Back_skt= 4566 { 4567 cmd_sk,0 4568 }; 4569 static const MENU_DESC CmdMenuStruct= 4570 { 4571 8,CmdMenuKeyHook,CmdMenuGHook,NULL, 4572 CmdSoftkeys, 4573 &cmd_Back_skt, 4574 0x10, 4575 CmdMenuItemHandler, 4576 NULL, //menuitems, 4577 NULL, //menuprocs, 4578 NULL 4579 }; 4580 \ In segment CODE, align 4, keep-with-next 4581 int DispCmdMenu(void *ed_gui) 4582 { \ DispCmdMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4583 NumOfItems=LoadCmd(); \ 00000004 ........ LDR R5,??DataTable81 ;; S_ICONS 4584 if(NumOfItems) \ 00000008 68609FE5 LDR R6,??DispCmdMenu_0 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL LoadCmd \ 00000014 680385E5 STR R0,[R5, #+872] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 1000000A BEQ ??DispCmdMenu_1 4585 { 4586 *((int *)(&CmdMenuHeader.lgp_id))=(int)"Select command"; \ 00000020 100086E2 ADD R0,R6,#+16 \ 00000024 800085E5 STR R0,[R5, #+128] 4587 patch_header(&CmdMenuHeader); \ 00000028 740085E2 ADD R0,R5,#+116 \ 0000002C ........ _BLF patch_header,??patch_header??rA 4588 return CreateMenu(0,0,&CmdMenuStruct,&CmdMenuHeader,0,NumOfItems,ed_gui,0); \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 01002DE9 PUSH {R0} \ 00000038 10002DE9 PUSH {R4} \ 0000003C 680395E5 LDR R0,[R5, #+872] \ 00000040 743085E2 ADD R3,R5,#+116 \ 00000044 01002DE9 PUSH {R0} \ 00000048 202086E2 ADD R2,R6,#+32 \ 0000004C 0010A0E3 MOV R1,#+0 \ 00000050 0000A0E3 MOV R0,#+0 \ 00000054 01002DE9 PUSH {R0} \ 00000058 520100EF SWI +338 \ 0000005C 10D08DE2 ADD SP,SP,#+16 \ 00000060 7080BDE8 POP {R4-R6,PC} 4589 } 4590 MsgBoxError(1, (int)"FILE NOT FOUND!"); \ ??DispCmdMenu_1: \ 00000064 0610A0E1 MOV R1,R6 \ 00000068 0100A0E3 MOV R0,#+1 \ 0000006C 4E0000EF SWI +78 4591 return(0); \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return \ ??DispCmdMenu_0: \ 00000078 ........ DC32 `?` 4592 } 4593 4594 4595 //----------------------------- CHECK COMMANDS -----------------------------// 4596 4597 4598 int comanda; 4599 4600 char requests1[]="Sending online time..."; 4601 char requests2[]="Sending msg info..."; 4602 char requests3[]="Sending battery info..."; 4603 char requests4[]="Sending mod info..."; 4604 char requests6[]="Sending offline info..."; 4605 char mod_info[264]; 4606 #ifdef NEWSGOLD 4607 #ifdef ELKA 4608 #define PLATFORM "Platform: ELKA" 4609 #else 4610 #define PLATFORM "Platform: NEWSGOLD" 4611 #endif 4612 #else 4613 #define PLATFORM "Platform: SGOLD" 4614 #endif 4615 \ In segment CODE, align 4, keep-with-next 4616 void CheckComand(char *txt, CLIST *t) 4617 { \ CheckComand: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4618 comanda=1; \ 00000004 60599FE5 LDR R5,??CheckComand_1+0x10 ;; S_ICONS 4619 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 60699FE5 LDR R6,??CheckComand_1+0x14 ;; `?signals=1; 4621 4622 //---------------------- REMOTE ACCESS -------------------// 4623 4624 4625 #define kluchnikk 35174 4626 #define kazax 97432 4627 #define ilya 45991 4628 #define evilfox 38453 4629 4630 if(!strncmp(txt,"#s",2) && !t->remoteAccess) \ 00000034 38799FE5 LDR R7,??CheckComand_1+0x18 ;; SendAnswer \ 00000038 C400A0E3 MOV R0,#+196 \ 0000003C 800E80E3 ORR R0,R0,#0x800 \ 00000040 063080E0 ADD R3,R0,R6 \ 00000044 180080E3 ORR R0,R0,#0x18 \ 00000048 061080E0 ADD R1,R0,R6 \ 0000004C 10009DE5 LDR R0,[SP, #+16] \ 00000050 8D2E86E2 ADD R2,R6,#+2256 \ 00000054 160000EF SWI +22 \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C 780084E5 STR R0,[R4, #+120] \ 00000060 0220A0E3 MOV R2,#+2 \ 00000064 F01F8FE2 ADR R1,??CheckComand_2 ;; "#s" \ 00000068 0900A0E1 MOV R0,R9 \ 0000006C 150100EF SWI +277 \ 00000070 000050E3 CMP R0,#+0 \ 00000074 70009405 LDREQ R0,[R4, #+112] \ 00000078 00A0A0E3 MOV R10,#+0 \ 0000007C 0280A0E3 MOV R8,#+2 \ 00000080 00005003 CMPEQ R0,#+0 \ 00000084 4100001A BNE ??CheckComand_3 4631 { 4632 comanda=0; \ 00000088 6CA385E5 STR R10,[R5, #+876] 4633 t->remoteAccess=1; \ 0000008C 0100A0E3 MOV R0,#+1 \ 00000090 700084E5 STR R0,[R4, #+112] 4634 t->signals=0; \ 00000094 78A084E5 STR R10,[R4, #+120] 4635 4636 if((strtoul(txt+3,0,10)==kluchnikk) || strtoul(txt+3,0,10)==kazax) t->AccessLevel=0; \ 00000098 0A20A0E3 MOV R2,#+10 \ 0000009C 0010A0E3 MOV R1,#+0 \ 000000A0 030089E2 ADD R0,R9,#+3 \ 000000A4 ........ _BLF strtoul,??strtoul??rA \ 000000A8 6610A0E3 MOV R1,#+102 \ 000000AC 891C81E3 ORR R1,R1,#0x8900 \ 000000B0 010050E1 CMP R0,R1 \ 000000B4 0700000A BEQ ??CheckComand_4 \ 000000B8 0A20A0E3 MOV R2,#+10 \ 000000BC 0010A0E3 MOV R1,#+0 \ 000000C0 030089E2 ADD R0,R9,#+3 \ 000000C4 ........ _BLF strtoul,??strtoul??rA \ 000000C8 9810A0E3 MOV R1,#+152 \ 000000CC 5F1B81E3 ORR R1,R1,#0x17C00 \ 000000D0 010050E1 CMP R0,R1 \ 000000D4 0100001A BNE ??CheckComand_5 \ ??CheckComand_4: \ 000000D8 0030A0E3 MOV R3,#+0 \ 000000DC 120000EA B ??CheckComand_6 4637 else 4638 if((strtoul(txt+3,0,10)==ilya) || strtoul(txt+3,0,10)==evilfox) t->AccessLevel=1; \ ??CheckComand_5: \ 000000E0 0A20A0E3 MOV R2,#+10 \ 000000E4 0010A0E3 MOV R1,#+0 \ 000000E8 030089E2 ADD R0,R9,#+3 \ 000000EC ........ _BLF strtoul,??strtoul??rA \ 000000F0 A710A0E3 MOV R1,#+167 \ 000000F4 B31C81E3 ORR R1,R1,#0xB300 \ 000000F8 010050E1 CMP R0,R1 \ 000000FC 0700000A BEQ ??CheckComand_7 \ 00000100 0A20A0E3 MOV R2,#+10 \ 00000104 0010A0E3 MOV R1,#+0 \ 00000108 030089E2 ADD R0,R9,#+3 \ 0000010C ........ _BLF strtoul,??strtoul??rA \ 00000110 3510A0E3 MOV R1,#+53 \ 00000114 961C81E3 ORR R1,R1,#0x9600 \ 00000118 010050E1 CMP R0,R1 \ 0000011C 0100001A BNE ??CheckComand_8 \ ??CheckComand_7: \ 00000120 0130A0E3 MOV R3,#+1 \ 00000124 000000EA B ??CheckComand_6 4639 else 4640 t->AccessLevel=2; \ ??CheckComand_8: \ 00000128 0230A0E3 MOV R3,#+2 \ ??CheckComand_6: \ 0000012C 743084E5 STR R3,[R4, #+116] 4641 4642 TPKT *p; 4643 char msg[256]; 4644 sprintf(msg,"Session start, remote access = %d level access = %d",t->remoteAccess,t->AccessLevel); \ 00000130 702094E5 LDR R2,[R4, #+112] \ 00000134 891E86E2 ADD R1,R6,#+2192 \ 00000138 970F8DE2 ADD R0,SP,#+604 \ 0000013C 160000EF SWI +22 4645 SENDMSGCOUNT++; \ ??CheckComand_9: \ 00000140 200295E5 LDR R0,[R5, #+544] \ 00000144 010080E2 ADD R0,R0,#+1 \ 00000148 200285E5 STR R0,[R5, #+544] 4646 p=malloc(sizeof(PKT)+strlen(msg)+1); \ 0000014C 970F8DE2 ADD R0,SP,#+604 \ 00000150 1B0000EF SWI +27 \ 00000154 090080E2 ADD R0,R0,#+9 \ 00000158 140000EF SWI +20 \ 0000015C 0050A0E1 MOV R5,R0 4647 p->pkt.uin=t->uin; \ 00000160 0C0094E5 LDR R0,[R4, #+12] \ 00000164 000085E5 STR R0,[R5, #+0] 4648 p->pkt.type=T_SENDMSG; \ 00000168 B480C5E1 STRH R8,[R5, #+4] 4649 p->pkt.data_len=strlen(msg); \ 0000016C 970F8DE2 ADD R0,SP,#+604 \ 00000170 1B0000EF SWI +27 \ 00000174 B600C5E1 STRH R0,[R5, #+6] 4650 strcpy(p->data,msg); \ 00000178 971F8DE2 ADD R1,SP,#+604 \ ??CheckComand_10: \ 0000017C 080085E2 ADD R0,R5,#+8 \ 00000180 1A0000EF SWI +26 4651 SUBPROC((void *)SendAnswer,0,p); \ 00000184 0520A0E1 MOV R2,R5 \ ??CheckComand_11: \ 00000188 0010A0E3 MOV R1,#+0 \ 0000018C A10000EA B ??CheckComand_12 4652 return; 4653 } 4654 4655 /* 4656 0: ты, я // полный + 4657 1: евил, илья //все кроме пароля и gеtfilе 4658 2: общий //отрезать удаление и работу с процессами 4659 */ 4660 4661 if(/*txt[0]=='#' && */t->remoteAccess!=4) \ ??CheckComand_3: \ 00000190 1810A0E3 MOV R1,#+24 \ 00000194 541D81E3 ORR R1,R1,#0x1500 \ 00000198 051081E0 ADD R1,R1,R5 \ 0000019C 14108DE5 STR R1,[SP, #+20] \ 000001A0 700094E5 LDR R0,[R4, #+112] \ 000001A4 040050E3 CMP R0,#+4 \ 000001A8 F502000A BEQ ??CheckComand_13 \ 000001AC 74B0A0E3 MOV R11,#+116 \ 000001B0 80BE8BE3 ORR R11,R11,#0x800 \ 000001B4 06108BE0 ADD R1,R11,R6 \ 000001B8 0900A0E1 MOV R0,R9 4662 { 4663 if(strstr(txt,"#echochat")) \ 000001BC 180100EF SWI +280 \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 5800000A BEQ ??CheckComand_14 4664 { 4665 comanda=0; \ 000001C8 6CA385E5 STR R10,[R5, #+876] 4666 t->signals=1; \ 000001CC 0100A0E3 MOV R0,#+1 \ 000001D0 780084E5 STR R0,[R4, #+120] 4667 TPKT *p; 4668 char msg[256]; 4669 sprintf(msg,"Mess send: %s",txt); \ 000001D4 0920A0E1 MOV R2,R9 \ 000001D8 881E86E2 ADD R1,R6,#+2176 \ 000001DC 970F8DE2 ADD R0,SP,#+604 \ 000001E0 160000EF SWI +22 4670 char *k=txt+(strlen("#echochat")+1); \ 000001E4 06008BE0 ADD R0,R11,R6 \ 000001E8 1B0000EF SWI +27 \ 000001EC 090080E0 ADD R0,R0,R9 \ 000001F0 01B080E2 ADD R11,R0,#+1 \ 000001F4 8D1F8FE2 ADR R1,??CheckComand_2+0x4 ;; " " \ 000001F8 0900A0E1 MOV R0,R9 4671 char name[20]; 4672 char *tmp; 4673 if(tmp=strstr(txt," ")+1) \ 000001FC 180100EF SWI +280 \ 00000200 010080E2 ADD R0,R0,#+1 \ 00000204 08008DE5 STR R0,[SP, #+8] \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 1700000A BEQ ??CheckComand_15 4674 { 4675 if(strstr(tmp," ")) \ 00000210 861F8FE2 ADR R1,??CheckComand_2+0x4 ;; " " \ 00000214 180100EF SWI +280 \ 00000218 000050E3 CMP R0,#+0 \ 0000021C 1200000A BEQ ??CheckComand_16 4676 { 4677 int ii=0; 4678 for(ii=0;iipkt.uin=t->uin; \ 000002A0 0C0094E5 LDR R0,[R4, #+12] \ 000002A4 00008AE5 STR R0,[R10, #+0] 4689 p->pkt.type=T_SENDMSG; \ 000002A8 B480CAE1 STRH R8,[R10, #+4] 4690 p->pkt.data_len=strlen(msg2); \ 000002AC 0900A0E1 MOV R0,R9 \ 000002B0 1B0000EF SWI +27 \ 000002B4 B600CAE1 STRH R0,[R10, #+6] 4691 strcpy(p->data,msg2); \ 000002B8 0910A0E1 MOV R1,R9 \ 000002BC 08008AE2 ADD R0,R10,#+8 \ 000002C0 1A0000EF SWI +26 4692 SUBPROC((void *)SendAnswer,0,p); \ 000002C4 0A20A0E1 MOV R2,R10 \ 000002C8 0010A0E3 MOV R1,#+0 \ 000002CC 0700A0E1 MOV R0,R7 \ 000002D0 710100EF SWI +369 4693 if(tmp!=0) \ 000002D4 08009DE5 LDR R0,[SP, #+8] \ 000002D8 0010A0E3 MOV R1,#+0 \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 200295E5 LDR R0,[R5, #+544] \ 000002E4 010080E2 ADD R0,R0,#+1 \ 000002E8 200285E5 STR R0,[R5, #+544] \ 000002EC 02002DE9 PUSH {R1} \ 000002F0 8008A0E1 LSL R0,R0,#+17 \ 000002F4 A008A0E1 LSR R0,R0,#+17 \ 000002F8 01002DE9 PUSH {R0} \ 000002FC 0600000A BEQ ??CheckComand_20 4694 AddStringToLog(t,0x01,msg2,name,(++SENDMSGCOUNT)&0x7FFF,0); \ 00000300 98308DE2 ADD R3,SP,#+152 \ ??CheckComand_21: \ 00000304 0920A0E1 MOV R2,R9 \ 00000308 0110A0E3 MOV R1,#+1 \ 0000030C 0400A0E1 MOV R0,R4 \ 00000310 ........ BL AddStringToLog \ 00000314 08D08DE2 ADD SP,SP,#+8 \ 00000318 400000EA B ??CheckComand_22 4695 else 4696 AddStringToLog(t,0x01,msg2,"Hacker",(++SENDMSGCOUNT)&0x7FFF,0); \ ??CheckComand_20: \ 0000031C 6C00A0E3 MOV R0,#+108 \ 00000320 800E80E3 ORR R0,R0,#0x800 \ 00000324 063080E0 ADD R3,R0,R6 \ 00000328 F5FFFFEA B ??CheckComand_21 4697 return; 4698 } 4699 4700 if(strstr(txt,"#echo")) \ ??CheckComand_14: \ 0000032C 1000CBE3 BIC R0,R11,#0x10 \ 00000330 061080E0 ADD R1,R0,R6 \ 00000334 0900A0E1 MOV R0,R9 \ 00000338 180100EF SWI +280 \ 0000033C 000050E3 CMP R0,#+0 \ 00000340 0900000A BEQ ??CheckComand_23 4701 { 4702 comanda=0; \ 00000344 6CA385E5 STR R10,[R5, #+876] 4703 ShowMSG(1,(int)txt+5); \ 00000348 051089E2 ADD R1,R9,#+5 \ 0000034C 0100A0E3 MOV R0,#+1 \ 00000350 480100EF SWI +328 4704 4705 t->signals=0; \ 00000354 78A084E5 STR R10,[R4, #+120] 4706 TPKT *p; 4707 char msg[256]; 4708 sprintf(msg,"Mess send: %s",txt); \ 00000358 0920A0E1 MOV R2,R9 \ 0000035C 881E86E2 ADD R1,R6,#+2176 \ 00000360 970F8DE2 ADD R0,SP,#+604 \ 00000364 160000EF SWI +22 4709 SENDMSGCOUNT++; \ 00000368 74FFFFEA B ??CheckComand_9 4710 p=malloc(sizeof(PKT)+strlen(msg)+1); 4711 p->pkt.uin=t->uin; 4712 p->pkt.type=T_SENDMSG; 4713 p->pkt.data_len=strlen(msg); 4714 strcpy(p->data,msg); 4715 SUBPROC((void *)SendAnswer,0,p); 4716 return; 4717 } 4718 4719 4720 if(strstr(txt,"#vibra")) \ ??CheckComand_23: \ 0000036C 851E86E2 ADD R1,R6,#+2128 \ 00000370 0900A0E1 MOV R0,R9 \ 00000374 180100EF SWI +280 \ 00000378 000050E3 CMP R0,#+0 \ 0000037C 2C00000A BEQ ??CheckComand_24 4721 { 4722 comanda=0; \ 00000380 6CA385E5 STR R10,[R5, #+876] 4723 vibra_count=strtoul(txt+7,0,10); \ 00000384 0A20A0E3 MOV R2,#+10 \ 00000388 0010A0E3 MOV R1,#+0 \ 0000038C 070089E2 ADD R0,R9,#+7 \ 00000390 ........ _BLF strtoul,??strtoul??rA \ 00000394 840285E5 STR R0,[R5, #+644] 4724 if(vibra_count==0 && VIBR_TYPE) vibra_count=2; \ 00000398 840295E5 LDR R0,[R5, #+644] \ 0000039C 000050E3 CMP R0,#+0 \ 000003A0 0300001A BNE ??CheckComand_25 \ 000003A4 340195E5 LDR R0,[R5, #+308] \ 000003A8 000050E3 CMP R0,#+0 \ 000003AC 84828515 STRNE R8,[R5, #+644] \ 000003B0 0300001A BNE ??CheckComand_26 4725 else if(vibra_count==0) vibra_count=1; \ ??CheckComand_25: \ 000003B4 840295E5 LDR R0,[R5, #+644] \ 000003B8 000050E3 CMP R0,#+0 \ 000003BC 0100A003 MOVEQ R0,#+1 \ 000003C0 84028505 STREQ R0,[R5, #+644] 4726 start_vibra(); \ ??CheckComand_26: \ 000003C4 ........ BL start_vibra 4727 4728 TPKT *p; 4729 p=malloc(sizeof(PKT)+strlen("vibra start")+1); \ 000003C8 1C904BE2 SUB R9,R11,#+28 \ 000003CC 060089E0 ADD R0,R9,R6 \ 000003D0 1B0000EF SWI +27 \ 000003D4 090080E2 ADD R0,R0,#+9 \ 000003D8 140000EF SWI +20 \ 000003DC 00A0A0E1 MOV R10,R0 4730 SENDMSGCOUNT++; \ 000003E0 200295E5 LDR R0,[R5, #+544] \ 000003E4 010080E2 ADD R0,R0,#+1 \ 000003E8 200285E5 STR R0,[R5, #+544] 4731 p->pkt.uin=t->uin; \ 000003EC 0C0094E5 LDR R0,[R4, #+12] \ 000003F0 00008AE5 STR R0,[R10, #+0] 4732 p->pkt.type=T_SENDMSG; \ 000003F4 B480CAE1 STRH R8,[R10, #+4] 4733 p->pkt.data_len=strlen("vibra start"); \ 000003F8 060089E0 ADD R0,R9,R6 \ 000003FC 1B0000EF SWI +27 \ 00000400 B600CAE1 STRH R0,[R10, #+6] 4734 strcpy(p->data,"vibra start"); \ 00000404 061089E0 ADD R1,R9,R6 \ 00000408 08008AE2 ADD R0,R10,#+8 \ 0000040C 1A0000EF SWI +26 4735 SUBPROC((void *)SendAnswer,0,p); \ 00000410 0A20A0E1 MOV R2,R10 \ ??CheckComand_27: \ 00000414 0010A0E3 MOV R1,#+0 \ ??CheckComand_12: \ 00000418 0700A0E1 MOV R0,R7 \ 0000041C 710100EF SWI +369 4736 return; \ ??CheckComand_22: \ 00000420 DCD08DE2 ADD SP,SP,#+220 \ 00000424 40DE8DE2 ADD SP,SP,#+1024 \ 00000428 F08FBDE8 POP {R4-R11,PC} \ ??CheckComand_2: \ 0000042C 23730000 DC8 "#s",+0 \ 00000430 20000000 DC8 " ",+0,+0 4737 } 4738 4739 if(strstr(txt,"#showpwd") && t->AccessLevel==0) \ ??CheckComand_24: \ 00000434 7CB04BE2 SUB R11,R11,#+124 \ 00000438 06108BE0 ADD R1,R11,R6 \ 0000043C 0900A0E1 MOV R0,R9 \ 00000440 180100EF SWI +280 \ 00000444 000050E3 CMP R0,#+0 \ 00000448 2300000A BEQ ??CheckComand_28 \ 0000044C 740094E5 LDR R0,[R4, #+116] \ 00000450 000050E3 CMP R0,#+0 \ 00000454 2000001A BNE ??CheckComand_28 4740 { 4741 comanda=0; \ 00000458 6CA385E5 STR R10,[R5, #+876] 4742 char s[64]; 4743 TPKT *p; 4744 t->signals=0; \ 0000045C 78A084E5 STR R10,[R4, #+120] 4745 sprintf(s,"Не забывайте ваш пасс: %s!!!!",PASS); \ 00000460 970F8BE2 ADD R0,R11,#+604 \ 00000464 052080E0 ADD R2,R0,R5 \ 00000468 831E86E2 ADD R1,R6,#+2096 \ 0000046C 50008DE2 ADD R0,SP,#+80 \ 00000470 160000EF SWI +22 4746 SENDMSGCOUNT++; \ 00000474 200295E5 LDR R0,[R5, #+544] \ 00000478 010080E2 ADD R0,R0,#+1 \ 0000047C 200285E5 STR R0,[R5, #+544] 4747 p=malloc(sizeof(PKT)+strlen("pass show")+1); \ 00000480 2C508BE2 ADD R5,R11,#+44 \ 00000484 060085E0 ADD R0,R5,R6 \ 00000488 1B0000EF SWI +27 \ 0000048C 090080E2 ADD R0,R0,#+9 \ 00000490 140000EF SWI +20 \ 00000494 0090A0E1 MOV R9,R0 4748 p->pkt.uin=t->uin; \ 00000498 0C0094E5 LDR R0,[R4, #+12] \ 0000049C 000089E5 STR R0,[R9, #+0] 4749 p->pkt.type=T_SENDMSG; \ 000004A0 B480C9E1 STRH R8,[R9, #+4] 4750 p->pkt.data_len=strlen("pass show"); \ 000004A4 060085E0 ADD R0,R5,R6 \ 000004A8 1B0000EF SWI +27 \ 000004AC B600C9E1 STRH R0,[R9, #+6] 4751 strcpy(p->data,"pass show"); \ 000004B0 061085E0 ADD R1,R5,R6 \ 000004B4 080089E2 ADD R0,R9,#+8 \ 000004B8 1A0000EF SWI +26 4752 SUBPROC((void *)SendAnswer,0,p); \ 000004BC 0920A0E1 MOV R2,R9 \ 000004C0 0010A0E3 MOV R1,#+0 \ 000004C4 0700A0E1 MOV R0,R7 \ 000004C8 710100EF SWI +369 4753 ShowMSG(1,(int)s); \ 000004CC 50108DE2 ADD R1,SP,#+80 \ 000004D0 0100A0E3 MOV R0,#+1 \ 000004D4 480100EF SWI +328 4754 return; \ 000004D8 D0FFFFEA B ??CheckComand_22 4755 } 4756 else 4757 { 4758 if(strstr(txt,"#showpwd") && t->AccessLevel!=0) \ ??CheckComand_28: \ 000004DC 06108BE0 ADD R1,R11,R6 \ 000004E0 0900A0E1 MOV R0,R9 \ 000004E4 180100EF SWI +280 \ 000004E8 000050E3 CMP R0,#+0 \ 000004EC 74009415 LDRNE R0,[R4, #+116] \ 000004F0 00005013 CMPNE R0,#+0 \ 000004F4 1500000A BEQ ??CheckComand_29 4759 { 4760 comanda=0; \ 000004F8 6CA385E5 STR R10,[R5, #+876] 4761 TPKT *p; 4762 t->signals=0; \ 000004FC 78A084E5 STR R10,[R4, #+120] 4763 SENDMSGCOUNT++; \ 00000500 200295E5 LDR R0,[R5, #+544] \ 00000504 010080E2 ADD R0,R0,#+1 \ 00000508 200285E5 STR R0,[R5, #+544] 4764 p=malloc(sizeof(PKT)+strlen("Your accsess level has been = 0")+1); \ 0000050C 0C508BE2 ADD R5,R11,#+12 \ 00000510 060085E0 ADD R0,R5,R6 \ 00000514 1B0000EF SWI +27 \ 00000518 090080E2 ADD R0,R0,#+9 \ 0000051C 140000EF SWI +20 \ 00000520 0090A0E1 MOV R9,R0 4765 p->pkt.uin=t->uin; \ 00000524 0C0094E5 LDR R0,[R4, #+12] \ 00000528 000089E5 STR R0,[R9, #+0] 4766 p->pkt.type=T_SENDMSG; \ 0000052C B480C9E1 STRH R8,[R9, #+4] 4767 p->pkt.data_len=strlen("Your accsess level has been = 0"); \ 00000530 060085E0 ADD R0,R5,R6 \ 00000534 1B0000EF SWI +27 \ 00000538 B600C9E1 STRH R0,[R9, #+6] 4768 strcpy(p->data,"Your accsess level has been = 0"); \ 0000053C 061085E0 ADD R1,R5,R6 \ 00000540 080089E2 ADD R0,R9,#+8 \ 00000544 1A0000EF SWI +26 4769 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_30: \ 00000548 0920A0E1 MOV R2,R9 \ 0000054C 0DFFFFEA B ??CheckComand_11 4770 return; 4771 } 4772 } 4773 4774 4775 if(strstr(txt,"#pikoff")) \ ??CheckComand_29: \ 00000550 7E1E86E2 ADD R1,R6,#+2016 \ 00000554 0900A0E1 MOV R0,R9 \ 00000558 180100EF SWI +280 \ 0000055C 000050E3 CMP R0,#+0 \ 00000560 0400000A BEQ ??CheckComand_31 4776 { 4777 char *s=malloc(1); \ 00000564 0100A0E3 MOV R0,#+1 \ 00000568 140000EF SWI +20 4778 strcpy(s,"FDGDFGDFGDFGD"); \ 0000056C 1010CBE3 BIC R1,R11,#0x10 \ 00000570 061081E0 ADD R1,R1,R6 \ 00000574 1A0000EF SWI +26 4779 } 4780 4781 if(strstr(txt,"#idlescr")) \ ??CheckComand_31: \ 00000578 54004BE2 SUB R0,R11,#+84 \ 0000057C 061080E0 ADD R1,R0,R6 \ 00000580 0900A0E1 MOV R0,R9 \ 00000584 180100EF SWI +280 \ 00000588 000050E3 CMP R0,#+0 \ 0000058C 2B00000A BEQ ??CheckComand_32 4782 { 4783 comanda=0; \ 00000590 6CA385E5 STR R10,[R5, #+876] 4784 TPKT *p; 4785 t->signals=0; \ 00000594 78A084E5 STR R10,[R4, #+120] 4786 SENDMSGCOUNT++; \ 00000598 200295E5 LDR R0,[R5, #+544] \ 0000059C 010080E2 ADD R0,R0,#+1 \ 000005A0 200285E5 STR R0,[R5, #+544] 4787 p=malloc(sizeof(PKT)+strlen("send command islescr")+1); \ 000005A4 3000CBE3 BIC R0,R11,#0x30 \ 000005A8 060080E0 ADD R0,R0,R6 \ 000005AC 1B0000EF SWI +27 \ 000005B0 090080E2 ADD R0,R0,#+9 \ 000005B4 140000EF SWI +20 \ 000005B8 0090A0E1 MOV R9,R0 4788 p->pkt.uin=t->uin; \ 000005BC 0C0094E5 LDR R0,[R4, #+12] 4789 p->pkt.type=T_SENDMSG; 4790 p->pkt.data_len=strlen("send command idlescr"); \ 000005C0 7B4EA0E3 MOV R4,#+1968 \ 000005C4 000089E5 STR R0,[R9, #+0] \ 000005C8 B480C9E1 STRH R8,[R9, #+4] \ 000005CC 060084E0 ADD R0,R4,R6 \ 000005D0 1B0000EF SWI +27 \ 000005D4 B600C9E1 STRH R0,[R9, #+6] 4791 strcpy(p->data,"send command idlescr"); \ 000005D8 061084E0 ADD R1,R4,R6 \ 000005DC 080089E2 ADD R0,R9,#+8 \ 000005E0 1A0000EF SWI +26 4792 SUBPROC((void *)SendAnswer,0,p); \ 000005E4 0920A0E1 MOV R2,R9 \ 000005E8 0010A0E3 MOV R1,#+0 \ 000005EC 0700A0E1 MOV R0,R7 \ 000005F0 710100EF SWI +369 4793 4794 RecountMenu(NULL,1); \ 000005F4 0110A0E3 MOV R1,#+1 \ 000005F8 0A00A0E1 MOV R0,R10 \ 000005FC ........ BL RecountMenu 4795 silenthide=1; \ 00000600 0100A0E3 MOV R0,#+1 \ 00000604 680285E5 STR R0,[R5, #+616] 4796 gipc.name_to=ipc_xtask_name; \ 00000608 BB0F84E2 ADD R0,R4,#+748 \ 0000060C 060080E0 ADD R0,R0,R6 \ 00000610 880085E5 STR R0,[R5, #+136] 4797 gipc.name_from=ipc_my_name; \ 00000614 B30F84E2 ADD R0,R4,#+716 \ 00000618 060080E0 ADD R0,R0,R6 \ 0000061C 8C0085E5 STR R0,[R5, #+140] 4798 gipc.data=0; \ 00000620 90A085E5 STR R10,[R5, #+144] 4799 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000624 883085E2 ADD R3,R5,#+136 \ 00000628 0120A0E3 MOV R2,#+1 \ 0000062C FC1F88E3 ORR R1,R8,#0x3F0 \ 00000630 0900A0E3 MOV R0,#+9 \ 00000634 420C80E3 ORR R0,R0,#0x4200 \ 00000638 000100EF SWI +256 4800 return; \ 0000063C 77FFFFEA B ??CheckComand_22 4801 } 4802 4803 if(strstr(txt,"#disconnect")) \ ??CheckComand_32: \ 00000640 6000CBE3 BIC R0,R11,#0x60 \ 00000644 061080E0 ADD R1,R0,R6 \ 00000648 0900A0E1 MOV R0,R9 \ 0000064C 180100EF SWI +280 \ 00000650 000050E3 CMP R0,#+0 \ 00000654 0600000A BEQ ??CheckComand_33 4804 { 4805 comanda=0; \ 00000658 6CA385E5 STR R10,[R5, #+876] 4806 disautorecconect=1; \ 0000065C 0100A0E3 MOV R0,#+1 \ 00000660 6C0285E5 STR R0,[R5, #+620] 4807 t->signals=0; 4808 void end_socket(void); 4809 SUBPROC((void*)end_socket); \ 00000664 ........ LDR R0,??DataTable82 ;; end_socket \ 00000668 78A084E5 STR R10,[R4, #+120] \ 0000066C 710100EF SWI +369 4810 return; \ 00000670 6AFFFFEA B ??CheckComand_22 4811 } 4812 4813 if(strstr(txt,"#getclist")) \ ??CheckComand_33: \ 00000674 D4004BE2 SUB R0,R11,#+212 \ 00000678 061080E0 ADD R1,R0,R6 \ 0000067C 0900A0E1 MOV R0,R9 \ 00000680 180100EF SWI +280 \ 00000684 000050E3 CMP R0,#+0 \ 00000688 5A00000A BEQ ??CheckComand_34 4814 { 4815 comanda=0; \ 0000068C 6CA385E5 STR R10,[R5, #+876] 4816 t->signals=0; \ 00000690 78A084E5 STR R10,[R4, #+120] 4817 CLIST *tt; 4818 tt=(CLIST *)(&cltop); \ 00000694 AFAF85E2 ADD R10,R5,#+700 4819 char *s=malloc(16384); \ 00000698 400CA0E3 MOV R0,#+16384 \ 0000069C 140000EF SWI +20 \ 000006A0 0090A0E1 MOV R9,R0 \ 000006A4 0F0000EA B ??CheckComand_35 4820 char ss[64]; 4821 char stat[32]; 4822 int icon; 4823 while(tt=(CLIST *)(tt->next)) 4824 { 4825 if(tt->state!=0xFFFF && !tt->isgroup) 4826 { 4827 icon=GetIconIndex(tt); 4828 switch(icon) 4829 { 4830 case IS_OFFLINE : sprintf(stat,"Offline"); break; 4831 case IS_INVISIBLE : sprintf(stat,"Invisable"); break; 4832 case IS_AWAY : sprintf(stat,"Away"); break; 4833 case IS_NA : sprintf(stat,"N/A"); break; 4834 case IS_OCCUPIED: sprintf(stat,"Occupied"); break; 4835 case IS_DND : sprintf(stat,"DND"); break; 4836 case IS_DEPRESSION : sprintf(stat,"Depression"); break; 4837 case IS_EVIL : sprintf(stat,"Evil"); break; 4838 case IS_HOME : sprintf(stat,"Home"); break; 4839 case IS_LUNCH : sprintf(stat,"Lunch"); break; 4840 case IS_WORK : sprintf(stat,"Work"); break; 4841 case IS_ONLINE : sprintf(stat,"Online"); break; 4842 case IS_FFC : sprintf(stat,"FFC"); break; \ ??CheckComand_36: \ 000006A8 AB1F8FE2 ADR R1,??CheckComand_1 ;; "FFC" \ ??CheckComand_37: \ 000006AC 20008DE2 ADD R0,SP,#+32 \ 000006B0 160000EF SWI +22 4843 } 4844 snprintf(ss,64,"%s ( %d ) [%s]\r\n",tt->name,tt->uin,stat); \ ??CheckComand_38: \ 000006B4 20008DE2 ADD R0,SP,#+32 \ 000006B8 01002DE9 PUSH {R0} \ 000006BC 0C009AE5 LDR R0,[R10, #+12] \ 000006C0 14308AE2 ADD R3,R10,#+20 \ 000006C4 01002DE9 PUSH {R0} \ 000006C8 732E86E2 ADD R2,R6,#+1840 \ 000006CC 4010A0E3 MOV R1,#+64 \ 000006D0 58008DE2 ADD R0,SP,#+88 \ 000006D4 1B0100EF SWI +283 4845 strcat(s,ss); \ 000006D8 58108DE2 ADD R1,SP,#+88 \ 000006DC 0900A0E1 MOV R0,R9 \ 000006E0 170000EF SWI +23 \ 000006E4 08D08DE2 ADD SP,SP,#+8 \ ??CheckComand_35: \ 000006E8 00A09AE5 LDR R10,[R10, #+0] \ 000006EC 00005AE3 CMP R10,#+0 \ 000006F0 2D00000A BEQ ??CheckComand_39 \ 000006F4 B405DAE1 LDRH R0,[R10, #+84] \ 000006F8 FF10A0E3 MOV R1,#+255 \ 000006FC FF1C81E3 ORR R1,R1,#0xFF00 \ 00000700 010050E1 CMP R0,R1 \ 00000704 F7FFFF0A BEQ ??CheckComand_35 \ 00000708 08009AE5 LDR R0,[R10, #+8] \ 0000070C 000050E3 CMP R0,#+0 \ 00000710 F4FFFF1A BNE ??CheckComand_35 \ 00000714 0A00A0E1 MOV R0,R10 \ 00000718 ........ BL GetIconIndex \ 0000071C 0C0050E3 CMP R0,#+12 \ 00000720 E3FFFF8A BHI ??CheckComand_38 \ 00000724 011F8FE2 ADR R1,??CheckComand_0 \ 00000728 D01091E1 LDRSB R1,[R1, R0] \ 0000072C 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??CheckComand_0: \ 00000730 0306080B DC8 +3,+6,+8,+11 \ 00000734 0D0F1113 DC8 +13,+15,+17,+19 \ 00000738 15171A1C DC8 +21,+23,+26,+28 \ 0000073C DD000000 DC8 +221,+0,+0,+0 \ ??CheckComand_40: \ 00000740 990F8BE2 ADD R0,R11,#+612 \ ??CheckComand_41: \ 00000744 061080E0 ADD R1,R0,R6 \ 00000748 D7FFFFEA B ??CheckComand_37 \ ??CheckComand_42: \ 0000074C 6C004BE2 SUB R0,R11,#+108 \ 00000750 FBFFFFEA B ??CheckComand_41 \ ??CheckComand_43: \ 00000754 74004BE2 SUB R0,R11,#+116 \ ??CheckComand_44: \ 00000758 061080E0 ADD R1,R0,R6 \ 0000075C D2FFFFEA B ??CheckComand_37 \ ??CheckComand_45: \ 00000760 7E1F8FE2 ADR R1,??CheckComand_1+0x4 ;; "N/A" \ 00000764 D0FFFFEA B ??CheckComand_37 \ ??CheckComand_46: \ 00000768 8000CBE3 BIC R0,R11,#0x80 \ 0000076C F4FFFFEA B ??CheckComand_41 \ ??CheckComand_47: \ 00000770 7B1F8FE2 ADR R1,??CheckComand_1+0x8 ;; "DND" \ 00000774 CCFFFFEA B ??CheckComand_37 \ ??CheckComand_48: \ 00000778 8C004BE2 SUB R0,R11,#+140 \ 0000077C F0FFFFEA B ??CheckComand_41 \ ??CheckComand_49: \ 00000780 94004BE2 SUB R0,R11,#+148 \ 00000784 F3FFFFEA B ??CheckComand_44 \ ??CheckComand_50: \ 00000788 9C004BE2 SUB R0,R11,#+156 \ 0000078C ECFFFFEA B ??CheckComand_41 \ ??CheckComand_51: \ 00000790 A4004BE2 SUB R0,R11,#+164 \ 00000794 061080E0 ADD R1,R0,R6 \ 00000798 C3FFFFEA B ??CheckComand_37 \ ??CheckComand_52: \ 0000079C AC004BE2 SUB R0,R11,#+172 \ 000007A0 E7FFFFEA B ??CheckComand_41 \ ??CheckComand_53: \ 000007A4 B4004BE2 SUB R0,R11,#+180 \ 000007A8 EAFFFFEA B ??CheckComand_44 4846 } 4847 } 4848 TPKT *p; 4849 SENDMSGCOUNT++; \ ??CheckComand_39: \ 000007AC 200295E5 LDR R0,[R5, #+544] \ 000007B0 010080E2 ADD R0,R0,#+1 \ 000007B4 200285E5 STR R0,[R5, #+544] 4850 p=malloc(sizeof(PKT)+strlen(s)+1); \ 000007B8 0900A0E1 MOV R0,R9 \ 000007BC 1B0000EF SWI +27 \ 000007C0 090080E2 ADD R0,R0,#+9 \ 000007C4 140000EF SWI +20 \ 000007C8 0050A0E1 MOV R5,R0 4851 p->pkt.uin=t->uin; \ 000007CC 0C0094E5 LDR R0,[R4, #+12] \ 000007D0 000085E5 STR R0,[R5, #+0] 4852 p->pkt.type=T_SENDMSG; \ 000007D4 B480C5E1 STRH R8,[R5, #+4] 4853 p->pkt.data_len=strlen(s); \ 000007D8 0900A0E1 MOV R0,R9 \ 000007DC 1B0000EF SWI +27 \ 000007E0 B600C5E1 STRH R0,[R5, #+6] 4854 strcpy(p->data,s); \ 000007E4 0910A0E1 MOV R1,R9 \ 000007E8 080085E2 ADD R0,R5,#+8 \ 000007EC 1A0000EF SWI +26 4855 SUBPROC((void *)SendAnswer,0,p); \ 000007F0 0520A0E1 MOV R2,R5 \ 000007F4 340300EA B ??CheckComand_54 4856 mfree(s); 4857 return; 4858 } 4859 4860 if(strstr(txt,"#write")) \ ??CheckComand_34: \ 000007F8 DCB04BE2 SUB R11,R11,#+220 \ 000007FC 06108BE0 ADD R1,R11,R6 \ 00000800 0900A0E1 MOV R0,R9 \ 00000804 180100EF SWI +280 \ 00000808 000050E3 CMP R0,#+0 \ 0000080C 1E00000A BEQ ??CheckComand_55 4861 { 4862 comanda=0; \ 00000810 6CA385E5 STR R10,[R5, #+876] 4863 t->signals=0; \ 00000814 78A084E5 STR R10,[R4, #+120] 4864 TPKT *p; 4865 SENDMSGCOUNT++; \ 00000818 200295E5 LDR R0,[R5, #+544] \ 0000081C 010080E2 ADD R0,R0,#+1 \ 00000820 200285E5 STR R0,[R5, #+544] 4866 p=malloc(sizeof(PKT)+strlen(txt)+1); \ 00000824 0900A0E1 MOV R0,R9 \ 00000828 1B0000EF SWI +27 \ 0000082C 090080E2 ADD R0,R0,#+9 \ 00000830 140000EF SWI +20 \ 00000834 0040A0E1 MOV R4,R0 4867 p->pkt.uin=strtoul(txt+strlen("#write")+1,0,10); \ 00000838 06008BE0 ADD R0,R11,R6 \ 0000083C 1B0000EF SWI +27 \ 00000840 0A20A0E3 MOV R2,#+10 \ 00000844 0010A0E3 MOV R1,#+0 \ 00000848 090080E0 ADD R0,R0,R9 \ 0000084C 010080E2 ADD R0,R0,#+1 \ 00000850 ........ _BLF strtoul,??strtoul??rA \ 00000854 000084E5 STR R0,[R4, #+0] 4868 p->pkt.type=T_SENDMSG; \ 00000858 B480C4E1 STRH R8,[R4, #+4] 4869 char *s=strrchr(txt,' ')+1; \ 0000085C 2010A0E3 MOV R1,#+32 \ 00000860 0900A0E1 MOV R0,R9 \ 00000864 170100EF SWI +279 \ 00000868 015080E2 ADD R5,R0,#+1 4870 p->pkt.data_len=strlen(s); \ 0000086C 0500A0E1 MOV R0,R5 \ 00000870 1B0000EF SWI +27 \ 00000874 B600C4E1 STRH R0,[R4, #+6] 4871 strcpy(p->data,s); \ 00000878 0510A0E1 MOV R1,R5 \ 0000087C 080084E2 ADD R0,R4,#+8 \ 00000880 1A0000EF SWI +26 4872 SUBPROC((void *)SendAnswer,0,p); \ 00000884 0420A0E1 MOV R2,R4 \ 00000888 3EFEFFEA B ??CheckComand_11 4873 return; 4874 } 4875 4876 if(strstr(txt,"#exit")) \ ??CheckComand_55: \ 0000088C 0800CBE3 BIC R0,R11,#0x8 \ 00000890 061080E0 ADD R1,R0,R6 \ 00000894 0900A0E1 MOV R0,R9 \ 00000898 180100EF SWI +280 \ 0000089C 000050E3 CMP R0,#+0 \ 000008A0 0200000A BEQ ??CheckComand_56 4877 { 4878 t->signals=0; 4879 SUBPROC((void *)ElfKiller); \ 000008A4 ........ LDR R0,??DataTable83 ;; ElfKiller \ 000008A8 78A084E5 STR R10,[R4, #+120] \ 000008AC 710100EF SWI +369 4880 } 4881 4882 if(strstr(txt,"#turnoff")) \ ??CheckComand_56: \ 000008B0 1400CBE3 BIC R0,R11,#0x14 \ 000008B4 061080E0 ADD R1,R0,R6 \ 000008B8 0900A0E1 MOV R0,R9 \ 000008BC 180100EF SWI +280 \ 000008C0 000050E3 CMP R0,#+0 \ 000008C4 0100000A BEQ ??CheckComand_57 4883 { 4884 t->signals=0; \ 000008C8 78A084E5 STR R10,[R4, #+120] 4885 SwitchPhoneOff(); \ 000008CC 090000EF SWI +9 4886 } 4887 4888 /* 4889 > #dir показ содержимого тек. папки (в асю мне) 4890 > #cd path (перейти к папке) 4891 > #del file (удалить файл) 4892 > #mv file path (перем.файл в папку) 4893 > #ren file name (переименовать) 4894 */ 4895 4896 char dir[128]; 4897 if(strstr(txt,"#cd")) \ ??CheckComand_57: \ 000008D0 241F8FE2 ADR R1,??CheckComand_1+0xC ;; "#cd" \ 000008D4 0900A0E1 MOV R0,R9 \ 000008D8 180100EF SWI +280 \ 000008DC 000050E3 CMP R0,#+0 \ 000008E0 2400000A BEQ ??CheckComand_58 4898 { 4899 t->signals=0; \ 000008E4 78A084E5 STR R10,[R4, #+120] 4900 zeromem(dir,128); \ 000008E8 8010A0E3 MOV R1,#+128 \ 000008EC 5C008DE2 ADD R0,SP,#+92 \ 000008F0 400E80E2 ADD R0,R0,#+1024 \ 000008F4 1D0100EF SWI +285 4901 snprintf(dir,128,txt+4); \ 000008F8 042089E2 ADD R2,R9,#+4 \ 000008FC 8010A0E3 MOV R1,#+128 \ 00000900 5C008DE2 ADD R0,SP,#+92 \ 00000904 400E80E2 ADD R0,R0,#+1024 \ 00000908 1B0100EF SWI +283 4902 comanda=0; \ 0000090C 6CA385E5 STR R10,[R5, #+876] 4903 TPKT *p; 4904 SENDMSGCOUNT++; \ 00000910 200295E5 LDR R0,[R5, #+544] \ 00000914 010080E2 ADD R0,R0,#+1 \ 00000918 200285E5 STR R0,[R5, #+544] 4905 p=malloc(sizeof(PKT)+strlen(txt)+1); \ 0000091C 0900A0E1 MOV R0,R9 \ 00000920 1B0000EF SWI +27 \ 00000924 090080E2 ADD R0,R0,#+9 \ 00000928 140000EF SWI +20 \ 0000092C 0050A0E1 MOV R5,R0 4906 p->pkt.uin=t->uin; \ 00000930 0C0094E5 LDR R0,[R4, #+12] \ 00000934 000085E5 STR R0,[R5, #+0] 4907 p->pkt.type=T_SENDMSG; \ 00000938 B480C5E1 STRH R8,[R5, #+4] 4908 p->pkt.data_len=strlen(txt); \ 0000093C 0900A0E1 MOV R0,R9 \ 00000940 1B0000EF SWI +27 \ 00000944 B600C5E1 STRH R0,[R5, #+6] 4909 strcpy(p->data,txt); \ 00000948 0910A0E1 MOV R1,R9 \ 0000094C 080085E2 ADD R0,R5,#+8 \ 00000950 1A0000EF SWI +26 4910 SUBPROC((void *)SendAnswer,0,p); \ 00000954 0520A0E1 MOV R2,R5 \ 00000958 ADFEFFEA B ??CheckComand_27 \ ??CheckComand_1: \ 0000095C 46464300 DC8 "FFC" \ 00000960 4E2F4100 DC8 "N/A" \ 00000964 444E4400 DC8 "DND" \ 00000968 23636400 DC8 "#cd" \ 0000096C ........ DC32 S_ICONS \ 00000970 ........ DC32 `?signals=0; \ 00000A58 78A084E5 STR R10,[R4, #+120] 4942 TPKT *pp; 4943 SENDMSGCOUNT++; \ 00000A5C 200295E5 LDR R0,[R5, #+544] \ 00000A60 010080E2 ADD R0,R0,#+1 \ 00000A64 200285E5 STR R0,[R5, #+544] 4944 pp=malloc(sizeof(PKT)+strlen(s)+1); \ 00000A68 0900A0E1 MOV R0,R9 \ 00000A6C 1B0000EF SWI +27 \ 00000A70 090080E2 ADD R0,R0,#+9 \ 00000A74 140000EF SWI +20 \ 00000A78 0050A0E1 MOV R5,R0 4945 pp->pkt.uin=t->uin; \ 00000A7C 0C0094E5 LDR R0,[R4, #+12] \ 00000A80 000085E5 STR R0,[R5, #+0] 4946 pp->pkt.type=T_SENDMSG; \ 00000A84 B480C5E1 STRH R8,[R5, #+4] 4947 pp->pkt.data_len=strlen(s); \ 00000A88 0900A0E1 MOV R0,R9 \ 00000A8C 1B0000EF SWI +27 \ 00000A90 B600C5E1 STRH R0,[R5, #+6] 4948 strcpy(pp->data,s); \ 00000A94 0910A0E1 MOV R1,R9 \ 00000A98 080085E2 ADD R0,R5,#+8 \ 00000A9C 1A0000EF SWI +26 4949 SUBPROC((void *)SendAnswer,0,pp); \ 00000AA0 0520A0E1 MOV R2,R5 \ 00000AA4 880200EA B ??CheckComand_54 4950 mfree(s); 4951 return; 4952 } 4953 4954 4955 //--------------------------------------------// 4956 4957 4958 if(strstr(txt,"#textinfo")) \ ??CheckComand_59: \ 00000AA8 400FCBE3 BIC R0,R11,#0x100 \ 00000AAC 061080E0 ADD R1,R0,R6 \ 00000AB0 0900A0E1 MOV R0,R9 \ 00000AB4 180100EF SWI +280 \ 00000AB8 000050E3 CMP R0,#+0 \ 00000ABC 8A00000A BEQ ??CheckComand_62 4959 { 4960 char *s=malloc(16384); \ 00000AC0 400CA0E3 MOV R0,#+16384 \ 00000AC4 140000EF SWI +20 \ 00000AC8 00B0A0E1 MOV R11,R0 4961 char pl[256]; 4962 snprintf(pl,256,"%s model: %s\r\n",PLATFORM,Get_Phone_Info(PI_MODEL)); \ 00000ACC 0900A0E3 MOV R0,#+9 \ 00000AD0 D50100EF SWI +469 \ 00000AD4 01002DE9 PUSH {R0} \ 00000AD8 401FA0E3 MOV R1,#+256 \ 00000ADC D800A0E3 MOV R0,#+216 \ 00000AE0 600E80E3 ORR R0,R0,#0x600 \ 00000AE4 063080E0 ADD R3,R0,R6 \ 00000AE8 100080E2 ADD R0,R0,#+16 \ 00000AEC 062080E0 ADD R2,R0,R6 \ 00000AF0 980F8DE2 ADD R0,SP,#+608 \ 00000AF4 1B0100EF SWI +283 4963 strcat(s,pl); \ 00000AF8 981F8DE2 ADD R1,SP,#+608 \ 00000AFC 0B00A0E1 MOV R0,R11 \ 00000B00 170000EF SWI +23 4964 char online[256]; 4965 sprintf(online,"Время в онлайн: %02d:%02d:%02d \r\n" 4966 "Сервер: %s \r\n", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 00000B04 18009DE5 LDR R0,[SP, #+24] \ 00000B08 01002DE9 PUSH {R0} \ 00000B0C 580295E5 LDR R0,[R5, #+600] \ 00000B10 01002DE9 PUSH {R0} \ 00000B14 543295E5 LDR R3,[R5, #+596] \ 00000B18 502295E5 LDR R2,[R5, #+592] \ 00000B1C A800A0E3 MOV R0,#+168 \ 00000B20 600E80E3 ORR R0,R0,#0x600 \ 00000B24 061080E0 ADD R1,R0,R6 \ 00000B28 DA0F8DE2 ADD R0,SP,#+872 \ 00000B2C 160000EF SWI +22 4967 strcat(s,online); \ 00000B30 DA1F8DE2 ADD R1,SP,#+872 \ 00000B34 0B00A0E1 MOV R0,R11 \ 00000B38 170000EF SWI +23 4968 char *send_txt=malloc(64); \ 00000B3C 4000A0E3 MOV R0,#+64 \ 00000B40 140000EF SWI +20 \ 00000B44 14008DE5 STR R0,[SP, #+20] 4969 sprintf(send_txt, "Отправлено сообщений: %d \r\n" 4970 "Принято сообщений: %d \r\n" 4971 , main2_count, main_count); \ 00000B48 ........ LDR R0,??DataTable86 ;; main_count \ 00000B4C 341086E2 ADD R1,R6,#+52 \ 00000B50 003090E5 LDR R3,[R0, #+0] \ 00000B54 ........ LDR R0,??DataTable87 ;; main2_count \ 00000B58 002090E5 LDR R2,[R0, #+0] \ 00000B5C 14009DE5 LDR R0,[SP, #+20] \ 00000B60 160000EF SWI +22 4972 strcat(s,send_txt); \ 00000B64 14109DE5 LDR R1,[SP, #+20] \ 00000B68 0B00A0E1 MOV R0,R11 \ 00000B6C 170000EF SWI +23 4973 4974 WSHDR *ws=AllocWS(64); \ 00000B70 4000A0E3 MOV R0,#+64 \ 00000B74 250100EF SWI +293 \ 00000B78 10008DE5 STR R0,[SP, #+16] 4975 GetProvider(ws,0); \ 00000B7C 0010A0E3 MOV R1,#+0 \ 00000B80 410000EF SWI +65 4976 char prov[16]; 4977 ws_2str(ws,prov,wstrlen(ws)); \ 00000B84 10009DE5 LDR R0,[SP, #+16] \ 00000B88 230100EF SWI +291 \ 00000B8C 0020A0E1 MOV R2,R0 \ 00000B90 10009DE5 LDR R0,[SP, #+16] \ 00000B94 4C108DE2 ADD R1,SP,#+76 \ 00000B98 A30000EF SWI +163 4978 sprintf(send_txt, "Оператор: %s \r\n", prov); \ 00000B9C 4C208DE2 ADD R2,SP,#+76 \ 00000BA0 9800A0E3 MOV R0,#+152 \ 00000BA4 600E80E3 ORR R0,R0,#0x600 \ 00000BA8 061080E0 ADD R1,R0,R6 \ 00000BAC 14009DE5 LDR R0,[SP, #+20] \ 00000BB0 160000EF SWI +22 4979 FreeWS(ws); \ 00000BB4 10009DE5 LDR R0,[SP, #+16] \ 00000BB8 290100EF SWI +297 4980 strcat(s,send_txt); \ 00000BBC 14109DE5 LDR R1,[SP, #+20] \ 00000BC0 0B00A0E1 MOV R0,R11 \ 00000BC4 170000EF SWI +23 4981 4982 int bat; 4983 bat=*RamCap(); \ 00000BC8 C88000EF SWI +32968 \ 00000BCC B020D0E1 LDRH R2,[R0, #+0] 4984 sprintf(send_txt, "Заряд батареи: %d процентов \r\n", bat); \ 00000BD0 3800A0E3 MOV R0,#+56 \ 00000BD4 500E80E3 ORR R0,R0,#0x500 \ 00000BD8 061080E0 ADD R1,R0,R6 \ 00000BDC 14009DE5 LDR R0,[SP, #+20] \ 00000BE0 160000EF SWI +22 4985 strcat(s,send_txt); \ 00000BE4 14109DE5 LDR R1,[SP, #+20] \ 00000BE8 0B00A0E1 MOV R0,R11 \ 00000BEC 170000EF SWI +23 4986 4987 char *status=malloc(256); \ 00000BF0 400FA0E3 MOV R0,#+256 \ 00000BF4 140000EF SWI +20 \ 00000BF8 10008DE5 STR R0,[SP, #+16] 4988 TTime the; 4989 GetDateTime(NULL,&the); \ 00000BFC 24108DE2 ADD R1,SP,#+36 \ 00000C00 0A00A0E1 MOV R0,R10 \ 00000C04 B40000EF SWI +180 4990 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l \ 00000C08 A42295E5 LDR R2,[R5, #+676] \ 00000C0C A83295E5 LDR R3,[R5, #+680] 4991 sprintf(status, "Traffic: Rx :%db Tx :%db Queue :%db \r\nTime: %02d:%02d\r\n" 4992 "Online contact: %d [total: %d] \r\nUnread message: %d/%d ", 4993 RX,TX,sendq_l, 4994 the.hour, the.min, 4995 kopa_kontaktu, kopa_online, 4996 total_unread,total_unread2); \ 00000C10 140295E5 LDR R0,[R5, #+532] \ 00000C14 01002DE9 PUSH {R0} \ 00000C18 B80295E5 LDR R0,[R5, #+696] \ 00000C1C 01002DE9 PUSH {R0} \ 00000C20 D40295E5 LDR R0,[R5, #+724] \ 00000C24 01002DE9 PUSH {R0} \ 00000C28 D80295E5 LDR R0,[R5, #+728] \ 00000C2C 01002DE9 PUSH {R0} \ 00000C30 3500DDE5 LDRB R0,[SP, #+53] \ 00000C34 01002DE9 PUSH {R0} \ 00000C38 3800DDE5 LDRB R0,[SP, #+56] \ 00000C3C 01002DE9 PUSH {R0} \ 00000C40 AC0295E5 LDR R0,[R5, #+684] \ 00000C44 01002DE9 PUSH {R0} \ 00000C48 2800A0E3 MOV R0,#+40 \ 00000C4C 600E80E3 ORR R0,R0,#0x600 \ 00000C50 061080E0 ADD R1,R0,R6 \ 00000C54 2C009DE5 LDR R0,[SP, #+44] \ 00000C58 160000EF SWI +22 \ 00000C5C 28D08DE2 ADD SP,SP,#+40 4997 strcat(s,status); \ 00000C60 04109DE5 LDR R1,[SP, #+4] \ 00000C64 0B00A0E1 MOV R0,R11 \ 00000C68 170000EF SWI +23 4998 4999 comanda=0; \ 00000C6C 6CA385E5 STR R10,[R5, #+876] 5000 t->signals=0; \ 00000C70 78A084E5 STR R10,[R4, #+120] 5001 5002 TPKT *pp; 5003 SENDMSGCOUNT++; \ 00000C74 200295E5 LDR R0,[R5, #+544] \ 00000C78 010080E2 ADD R0,R0,#+1 \ 00000C7C 200285E5 STR R0,[R5, #+544] 5004 pp=malloc(sizeof(PKT)+strlen(s)+1); \ 00000C80 0B00A0E1 MOV R0,R11 \ 00000C84 1B0000EF SWI +27 \ 00000C88 090080E2 ADD R0,R0,#+9 \ 00000C8C 140000EF SWI +20 \ 00000C90 0C008DE5 STR R0,[SP, #+12] 5005 pp->pkt.uin=t->uin; \ 00000C94 0C1094E5 LDR R1,[R4, #+12] \ 00000C98 001080E5 STR R1,[R0, #+0] 5006 pp->pkt.type=T_SENDMSG; \ 00000C9C 0C009DE5 LDR R0,[SP, #+12] \ 00000CA0 B480C0E1 STRH R8,[R0, #+4] 5007 pp->pkt.data_len=strlen(s); \ 00000CA4 0B00A0E1 MOV R0,R11 \ 00000CA8 1B0000EF SWI +27 \ 00000CAC 0C109DE5 LDR R1,[SP, #+12] \ 00000CB0 B600C1E1 STRH R0,[R1, #+6] 5008 strcpy(pp->data,s); \ 00000CB4 0C009DE5 LDR R0,[SP, #+12] \ 00000CB8 0B10A0E1 MOV R1,R11 \ 00000CBC 080080E2 ADD R0,R0,#+8 \ 00000CC0 1A0000EF SWI +26 5009 SUBPROC((void *)SendAnswer,0,pp); \ 00000CC4 0C209DE5 LDR R2,[SP, #+12] \ 00000CC8 0A10A0E1 MOV R1,R10 \ 00000CCC 0700A0E1 MOV R0,R7 \ 00000CD0 710100EF SWI +369 5010 mfree(s); \ 00000CD4 0B00A0E1 MOV R0,R11 \ 00000CD8 150000EF SWI +21 5011 mfree(send_txt); \ 00000CDC 08009DE5 LDR R0,[SP, #+8] \ 00000CE0 150000EF SWI +21 5012 mfree(status); \ 00000CE4 04009DE5 LDR R0,[SP, #+4] \ 00000CE8 150000EF SWI +21 5013 } 5014 5015 5016 if(!strncmp(txt,"#c",2) && t->remoteAccess) \ ??CheckComand_62: \ 00000CEC 0220A0E3 MOV R2,#+2 \ 00000CF0 CF1F8FE2 ADR R1,??CheckComand_63 ;; "#c" \ 00000CF4 0900A0E1 MOV R0,R9 \ 00000CF8 150100EF SWI +277 \ 00000CFC 000050E3 CMP R0,#+0 \ 00000D00 1F00001A BNE ??CheckComand_13 \ 00000D04 700094E5 LDR R0,[R4, #+112] \ 00000D08 000050E3 CMP R0,#+0 \ 00000D0C 1C00000A BEQ ??CheckComand_13 5017 { 5018 comanda=0; \ 00000D10 6CA385E5 STR R10,[R5, #+876] 5019 t->remoteAccess=0; \ 00000D14 70A084E5 STR R10,[R4, #+112] 5020 t->AccessLevel=4; \ 00000D18 0400A0E3 MOV R0,#+4 \ 00000D1C 740084E5 STR R0,[R4, #+116] 5021 t->signals=1; \ 00000D20 0100A0E3 MOV R0,#+1 \ 00000D24 780084E5 STR R0,[R4, #+120] 5022 TPKT *p; 5023 char msg[256]; 5024 SENDMSGCOUNT++; \ 00000D28 200295E5 LDR R0,[R5, #+544] \ 00000D2C 010080E2 ADD R0,R0,#+1 \ 00000D30 200285E5 STR R0,[R5, #+544] 5025 sprintf(msg,"Session close, remote access = %d, level = %d",t->remoteAccess,t->AccessLevel); \ 00000D34 743094E5 LDR R3,[R4, #+116] \ 00000D38 702094E5 LDR R2,[R4, #+112] \ 00000D3C EC00A0E3 MOV R0,#+236 \ 00000D40 500E80E3 ORR R0,R0,#0x500 \ 00000D44 061080E0 ADD R1,R0,R6 \ 00000D48 D70F8DE2 ADD R0,SP,#+860 \ 00000D4C 160000EF SWI +22 5026 p=malloc(sizeof(PKT)+strlen(msg)+1); \ 00000D50 D70F8DE2 ADD R0,SP,#+860 \ 00000D54 1B0000EF SWI +27 \ 00000D58 090080E2 ADD R0,R0,#+9 \ 00000D5C 140000EF SWI +20 \ 00000D60 0050A0E1 MOV R5,R0 5027 p->pkt.uin=t->uin; \ 00000D64 0C0094E5 LDR R0,[R4, #+12] \ 00000D68 000085E5 STR R0,[R5, #+0] 5028 p->pkt.type=T_SENDMSG; \ 00000D6C B480C5E1 STRH R8,[R5, #+4] 5029 p->pkt.data_len=strlen(msg); \ 00000D70 D70F8DE2 ADD R0,SP,#+860 \ 00000D74 1B0000EF SWI +27 \ 00000D78 B600C5E1 STRH R0,[R5, #+6] 5030 strcpy(p->data,msg); \ 00000D7C D71F8DE2 ADD R1,SP,#+860 \ 00000D80 FDFCFFEA B ??CheckComand_10 5031 SUBPROC((void *)SendAnswer,0,p); 5032 return; 5033 } 5034 } 5035 5036 5037 //---------------------------------------------------------------// 5038 5039 5040 if(!strcmp(txt, "GET_PLATFORM_INFO") || !strcmp(txt, "__PLATFORM")) \ ??CheckComand_13: \ 00000D84 AC00A0E3 MOV R0,#+172 \ 00000D88 500E80E3 ORR R0,R0,#0x500 \ 00000D8C 061080E0 ADD R1,R0,R6 \ 00000D90 0900A0E1 MOV R0,R9 \ 00000D94 190000EF SWI +25 \ 00000D98 000050E3 CMP R0,#+0 \ 00000D9C 0400000A BEQ ??CheckComand_64 \ 00000DA0 5A1E86E2 ADD R1,R6,#+1440 \ 00000DA4 0900A0E1 MOV R0,R9 \ 00000DA8 190000EF SWI +25 \ 00000DAC 000050E3 CMP R0,#+0 \ 00000DB0 2C00001A BNE ??CheckComand_65 5041 { 5042 comanda=0; \ ??CheckComand_64: \ 00000DB4 6CA385E5 STR R10,[R5, #+876] 5043 TPKT *p; 5044 char pl[256]; 5045 snprintf(pl,256,"%s model: %s",PLATFORM,Get_Phone_Info(PI_MODEL)); \ 00000DB8 0900A0E3 MOV R0,#+9 \ 00000DBC D50100EF SWI +469 \ 00000DC0 01002DE9 PUSH {R0} \ 00000DC4 401FA0E3 MOV R1,#+256 \ 00000DC8 D800A0E3 MOV R0,#+216 \ 00000DCC 600E80E3 ORR R0,R0,#0x600 \ 00000DD0 063080E0 ADD R3,R0,R6 \ 00000DD4 FC0040E2 SUB R0,R0,#+252 \ 00000DD8 062080E0 ADD R2,R0,R6 \ 00000DDC D80F8DE2 ADD R0,SP,#+864 \ 00000DE0 1B0100EF SWI +283 5046 p=malloc(sizeof(PKT)+strlen(pl)+1); \ 00000DE4 D80F8DE2 ADD R0,SP,#+864 \ 00000DE8 1B0000EF SWI +27 \ 00000DEC 090080E2 ADD R0,R0,#+9 \ 00000DF0 140000EF SWI +20 \ 00000DF4 0090A0E1 MOV R9,R0 5047 p->pkt.uin=t->uin; \ 00000DF8 0C0094E5 LDR R0,[R4, #+12] \ 00000DFC 000089E5 STR R0,[R9, #+0] 5048 p->pkt.type=T_SENDMSG; \ 00000E00 B480C9E1 STRH R8,[R9, #+4] 5049 p->pkt.data_len=strlen(pl); \ 00000E04 D80F8DE2 ADD R0,SP,#+864 \ 00000E08 1B0000EF SWI +27 \ 00000E0C B600C9E1 STRH R0,[R9, #+6] 5050 strcpy(p->data,pl); \ 00000E10 D81F8DE2 ADD R1,SP,#+864 \ 00000E14 080089E2 ADD R0,R9,#+8 \ 00000E18 1A0000EF SWI +26 5051 if(show_send_info) \ 00000E1C 480195E5 LDR R0,[R5, #+328] \ 00000E20 04D08DE2 ADD SP,SP,#+4 \ 00000E24 000050E3 CMP R0,#+0 \ 00000E28 200295E5 LDR R0,[R5, #+544] \ 00000E2C 010080E2 ADD R0,R0,#+1 \ 00000E30 200285E5 STR R0,[R5, #+544] \ 00000E34 0900000A BEQ ??CheckComand_66 5052 AddStringToLog(t,0x01,"Sending platform info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000E38 0110A0E3 MOV R1,#+1 \ 00000E3C 02002DE9 PUSH {R1} \ 00000E40 8008A0E1 LSL R0,R0,#+17 \ 00000E44 A008A0E1 LSR R0,R0,#+17 \ 00000E48 01002DE9 PUSH {R0} \ 00000E4C 323086E2 ADD R3,R6,#+50 \ 00000E50 5C2E86E2 ADD R2,R6,#+1472 \ 00000E54 0400A0E1 MOV R0,R4 \ 00000E58 ........ BL AddStringToLog \ 00000E5C 08D08DE2 ADD SP,SP,#+8 5053 else 5054 SENDMSGCOUNT++; 5055 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_66: \ 00000E60 0920A0E1 MOV R2,R9 \ 00000E64 6AFDFFEA B ??CheckComand_27 5056 return; 5057 } 5058 5059 if(!strcmp(txt, "GET_ONLINE_TIME") || !strcmp(txt, "__ONLINE")) \ ??CheckComand_65: \ 00000E68 6400A0E3 MOV R0,#+100 \ 00000E6C 500E80E3 ORR R0,R0,#0x500 \ 00000E70 061080E0 ADD R1,R0,R6 \ 00000E74 0900A0E1 MOV R0,R9 \ 00000E78 190000EF SWI +25 \ 00000E7C 000050E3 CMP R0,#+0 \ 00000E80 0600000A BEQ ??CheckComand_67 \ 00000E84 5800A0E3 MOV R0,#+88 \ 00000E88 500E80E3 ORR R0,R0,#0x500 \ 00000E8C 061080E0 ADD R1,R0,R6 \ 00000E90 0900A0E1 MOV R0,R9 \ 00000E94 190000EF SWI +25 \ 00000E98 000050E3 CMP R0,#+0 \ 00000E9C 2D00001A BNE ??CheckComand_68 5060 { 5061 comanda=0; \ ??CheckComand_67: \ 00000EA0 6CA385E5 STR R10,[R5, #+876] 5062 TPKT *p; 5063 char online[256]; 5064 sprintf(online,"Время в онлайн: %02d:%02d:%02d \n" 5065 "Сервер: %s", uptimeHour, uptimeMin, uptimeSec, hostbuf2); \ 00000EA4 14009DE5 LDR R0,[SP, #+20] \ 00000EA8 01002DE9 PUSH {R0} \ 00000EAC 580295E5 LDR R0,[R5, #+600] \ 00000EB0 01002DE9 PUSH {R0} \ 00000EB4 543295E5 LDR R3,[R5, #+596] \ 00000EB8 502295E5 LDR R2,[R5, #+592] \ 00000EBC 7400A0E3 MOV R0,#+116 \ 00000EC0 500E80E3 ORR R0,R0,#0x500 \ 00000EC4 061080E0 ADD R1,R0,R6 \ 00000EC8 D90F8DE2 ADD R0,SP,#+868 \ 00000ECC 160000EF SWI +22 5066 p=malloc(sizeof(PKT)+strlen(online)+1); \ 00000ED0 D90F8DE2 ADD R0,SP,#+868 \ 00000ED4 1B0000EF SWI +27 \ 00000ED8 090080E2 ADD R0,R0,#+9 \ 00000EDC 140000EF SWI +20 \ 00000EE0 0090A0E1 MOV R9,R0 5067 p->pkt.uin=t->uin; \ 00000EE4 0C0094E5 LDR R0,[R4, #+12] \ 00000EE8 000089E5 STR R0,[R9, #+0] 5068 p->pkt.type=T_SENDMSG; \ 00000EEC B480C9E1 STRH R8,[R9, #+4] 5069 p->pkt.data_len=strlen(online); \ 00000EF0 D90F8DE2 ADD R0,SP,#+868 \ 00000EF4 1B0000EF SWI +27 \ 00000EF8 B600C9E1 STRH R0,[R9, #+6] 5070 strcpy(p->data,online); \ 00000EFC D91F8DE2 ADD R1,SP,#+868 \ 00000F00 080089E2 ADD R0,R9,#+8 \ 00000F04 1A0000EF SWI +26 5071 if(show_send_info) \ 00000F08 480195E5 LDR R0,[R5, #+328] \ 00000F0C 08D08DE2 ADD SP,SP,#+8 \ 00000F10 000050E3 CMP R0,#+0 \ 00000F14 200295E5 LDR R0,[R5, #+544] \ 00000F18 010080E2 ADD R0,R0,#+1 \ 00000F1C 200285E5 STR R0,[R5, #+544] \ 00000F20 88FDFF0A BEQ ??CheckComand_30 5072 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000F24 0110A0E3 MOV R1,#+1 \ 00000F28 02002DE9 PUSH {R1} \ 00000F2C 8008A0E1 LSL R0,R0,#+17 \ 00000F30 A008A0E1 LSR R0,R0,#+17 \ 00000F34 01002DE9 PUSH {R0} \ 00000F38 323086E2 ADD R3,R6,#+50 \ 00000F3C 3400A0E3 MOV R0,#+52 \ 00000F40 5C0D80E3 ORR R0,R0,#0x1700 \ 00000F44 052080E0 ADD R2,R0,R5 \ 00000F48 0400A0E1 MOV R0,R4 \ 00000F4C ........ BL AddStringToLog \ 00000F50 08D08DE2 ADD SP,SP,#+8 5073 else 5074 SENDMSGCOUNT++; 5075 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_69: \ 00000F54 7BFDFFEA B ??CheckComand_30 5076 return; 5077 } 5078 5079 if(!strcmp(txt, "GET_MSG_INFO") || !strcmp(txt, "__MSG")) \ ??CheckComand_68: \ 00000F58 981086E2 ADD R1,R6,#+152 \ 00000F5C 0900A0E1 MOV R0,R9 \ 00000F60 190000EF SWI +25 \ 00000F64 000050E3 CMP R0,#+0 \ 00000F68 0400000A BEQ ??CheckComand_70 \ 00000F6C A81086E2 ADD R1,R6,#+168 \ 00000F70 0900A0E1 MOV R0,R9 \ 00000F74 190000EF SWI +25 \ 00000F78 000050E3 CMP R0,#+0 \ 00000F7C 2D00001A BNE ??CheckComand_71 5080 { 5081 comanda=0; \ ??CheckComand_70: \ 00000F80 6CA385E5 STR R10,[R5, #+876] 5082 TPKT *p; 5083 char *send_txt=malloc(64); \ 00000F84 4000A0E3 MOV R0,#+64 \ 00000F88 140000EF SWI +20 \ 00000F8C 0090A0E1 MOV R9,R0 5084 sprintf(send_txt, "Отправлено сообщений: %d \n" 5085 "Принято сообщений: %d" 5086 , main2_count, main_count); \ 00000F90 ........ LDR R0,??DataTable86 ;; main_count \ 00000F94 681086E2 ADD R1,R6,#+104 \ 00000F98 003090E5 LDR R3,[R0, #+0] \ 00000F9C ........ LDR R0,??DataTable87 ;; main2_count \ 00000FA0 002090E5 LDR R2,[R0, #+0] \ 00000FA4 0900A0E1 MOV R0,R9 \ 00000FA8 160000EF SWI +22 5087 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 00000FAC 0900A0E1 MOV R0,R9 \ 00000FB0 1B0000EF SWI +27 \ 00000FB4 090080E2 ADD R0,R0,#+9 \ 00000FB8 140000EF SWI +20 \ 00000FBC 00A0A0E1 MOV R10,R0 5088 p->pkt.uin=t->uin; \ 00000FC0 0C0094E5 LDR R0,[R4, #+12] \ 00000FC4 00008AE5 STR R0,[R10, #+0] 5089 p->pkt.type=T_SENDMSG; \ 00000FC8 B480CAE1 STRH R8,[R10, #+4] 5090 p->pkt.data_len=strlen(send_txt); \ 00000FCC 0900A0E1 MOV R0,R9 \ 00000FD0 1B0000EF SWI +27 \ 00000FD4 B600CAE1 STRH R0,[R10, #+6] 5091 strcpy(p->data,send_txt); \ 00000FD8 0910A0E1 MOV R1,R9 \ 00000FDC 08008AE2 ADD R0,R10,#+8 \ 00000FE0 1A0000EF SWI +26 5092 if(show_send_info) \ 00000FE4 480195E5 LDR R0,[R5, #+328] \ 00000FE8 000050E3 CMP R0,#+0 \ 00000FEC 200295E5 LDR R0,[R5, #+544] \ 00000FF0 010080E2 ADD R0,R0,#+1 \ 00000FF4 200285E5 STR R0,[R5, #+544] \ 00000FF8 0B00000A BEQ ??CheckComand_72 5093 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000FFC 0110A0E3 MOV R1,#+1 \ 00001000 02002DE9 PUSH {R1} \ 00001004 8008A0E1 LSL R0,R0,#+17 \ 00001008 A008A0E1 LSR R0,R0,#+17 \ 0000100C 01002DE9 PUSH {R0} \ 00001010 323086E2 ADD R3,R6,#+50 \ 00001014 4C00A0E3 MOV R0,#+76 \ 00001018 5C0D80E3 ORR R0,R0,#0x1700 \ 0000101C 052080E0 ADD R2,R0,R5 \ 00001020 0400A0E1 MOV R0,R4 \ 00001024 ........ BL AddStringToLog \ 00001028 08D08DE2 ADD SP,SP,#+8 5094 else 5095 SENDMSGCOUNT++; 5096 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_72: \ 0000102C 0A20A0E1 MOV R2,R10 \ 00001030 250100EA B ??CheckComand_54 \ ??CheckComand_63: \ 00001034 23630000 DC8 "#c",+0 5097 mfree(send_txt); 5098 return; 5099 } 5100 5101 //==========================windes commands begin ===================== 5102 5103 if(!strcmp(txt, "GET_PROVIDER") || !strcmp(txt, "__PROVIDER")) \ ??CheckComand_71: \ 00001038 DC1086E2 ADD R1,R6,#+220 \ 0000103C 0900A0E1 MOV R0,R9 \ 00001040 190000EF SWI +25 \ 00001044 000050E3 CMP R0,#+0 \ 00001048 0400000A BEQ ??CheckComand_73 \ 0000104C EC1086E2 ADD R1,R6,#+236 \ 00001050 0900A0E1 MOV R0,R9 \ 00001054 190000EF SWI +25 \ 00001058 000050E3 CMP R0,#+0 \ 0000105C 3100001A BNE ??CheckComand_74 5104 { 5105 comanda=0; \ ??CheckComand_73: \ 00001060 6CA385E5 STR R10,[R5, #+876] 5106 TPKT *p; 5107 5108 WSHDR *ws=AllocWS(32); \ 00001064 2000A0E3 MOV R0,#+32 \ 00001068 250100EF SWI +293 \ 0000106C 00A0A0E1 MOV R10,R0 5109 GetProvider(ws,0); \ 00001070 0010A0E3 MOV R1,#+0 \ 00001074 410000EF SWI +65 5110 char prov[16]; 5111 ws_2str(ws,prov,wstrlen(ws)); \ 00001078 0A00A0E1 MOV R0,R10 \ 0000107C 230100EF SWI +291 \ 00001080 0020A0E1 MOV R2,R0 \ 00001084 40108DE2 ADD R1,SP,#+64 \ 00001088 0A00A0E1 MOV R0,R10 \ 0000108C A30000EF SWI +163 5112 char *send_txt=malloc(32); \ 00001090 2000A0E3 MOV R0,#+32 \ 00001094 140000EF SWI +20 \ 00001098 0090A0E1 MOV R9,R0 5113 sprintf(send_txt, "Оператор: %s", prov); \ 0000109C 40208DE2 ADD R2,SP,#+64 \ 000010A0 B01086E2 ADD R1,R6,#+176 \ 000010A4 160000EF SWI +22 5114 FreeWS(ws); \ 000010A8 0A00A0E1 MOV R0,R10 \ 000010AC 290100EF SWI +297 5115 5116 p=malloc(sizeof(PKT)+28+1); \ 000010B0 2500A0E3 MOV R0,#+37 \ 000010B4 140000EF SWI +20 \ 000010B8 00A0A0E1 MOV R10,R0 5117 p->pkt.uin=t->uin; \ 000010BC 0C0094E5 LDR R0,[R4, #+12] \ 000010C0 00008AE5 STR R0,[R10, #+0] 5118 p->pkt.type=T_SENDMSG; \ 000010C4 B480CAE1 STRH R8,[R10, #+4] 5119 p->pkt.data_len=strlen(send_txt); \ 000010C8 0900A0E1 MOV R0,R9 \ 000010CC 1B0000EF SWI +27 \ 000010D0 B600CAE1 STRH R0,[R10, #+6] 5120 strcpy(p->data,send_txt); \ 000010D4 0910A0E1 MOV R1,R9 \ 000010D8 08008AE2 ADD R0,R10,#+8 \ 000010DC 1A0000EF SWI +26 5121 if(show_send_info) \ 000010E0 480195E5 LDR R0,[R5, #+328] \ 000010E4 000050E3 CMP R0,#+0 \ 000010E8 200295E5 LDR R0,[R5, #+544] \ 000010EC 010080E2 ADD R0,R0,#+1 \ 000010F0 200285E5 STR R0,[R5, #+544] \ 000010F4 0900000A BEQ ??CheckComand_75 5122 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000010F8 0110A0E3 MOV R1,#+1 \ 000010FC 02002DE9 PUSH {R1} \ 00001100 8008A0E1 LSL R0,R0,#+17 \ 00001104 A008A0E1 LSR R0,R0,#+17 \ 00001108 01002DE9 PUSH {R0} \ 0000110C 323086E2 ADD R3,R6,#+50 \ 00001110 C02086E2 ADD R2,R6,#+192 \ 00001114 0400A0E1 MOV R0,R4 \ 00001118 ........ BL AddStringToLog \ 0000111C 08D08DE2 ADD SP,SP,#+8 5123 else 5124 SENDMSGCOUNT++; 5125 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_75: \ 00001120 0A20A0E1 MOV R2,R10 \ 00001124 E80000EA B ??CheckComand_54 5126 mfree(send_txt); 5127 return; 5128 } 5129 5130 //----------------------------------------------------------------------- 5131 5132 if(!strcmp(txt, "GET_MOD_INFO") || !strcmp(txt, "__MOD")) \ ??CheckComand_74: \ 00001128 431F86E2 ADD R1,R6,#+268 \ 0000112C 0900A0E1 MOV R0,R9 \ 00001130 190000EF SWI +25 \ 00001134 000050E3 CMP R0,#+0 \ 00001138 0400000A BEQ ??CheckComand_76 \ 0000113C 471F86E2 ADD R1,R6,#+284 \ 00001140 0900A0E1 MOV R0,R9 \ 00001144 190000EF SWI +25 \ 00001148 000050E3 CMP R0,#+0 \ 0000114C 3800001A BNE ??CheckComand_77 5133 { 5134 comanda=0; \ ??CheckComand_76: \ 00001150 6CA385E5 STR R10,[R5, #+876] 5135 TPKT *p; 5136 char *send_txt=malloc(256); \ 00001154 400FA0E3 MOV R0,#+256 \ 00001158 140000EF SWI +20 \ 0000115C 0090A0E1 MOV R9,R0 5137 // sprintf(I_UIN, "uin%d", t->uin); 5138 strcpy(I_UIN, t->name); \ 00001160 2800A0E3 MOV R0,#+40 \ 00001164 580D80E3 ORR R0,R0,#0x1600 \ 00001168 05A080E0 ADD R10,R0,R5 \ 0000116C 141084E2 ADD R1,R4,#+20 \ 00001170 0A00A0E1 MOV R0,R10 \ 00001174 1A0000EF SWI +26 5139 if(strstr(ignor_list,I_UIN)==0) \ 00001178 0A10A0E1 MOV R1,R10 \ 0000117C 4400A0E3 MOV R0,#+68 \ 00001180 900E80E3 ORR R0,R0,#0x900 \ 00001184 050080E0 ADD R0,R0,R5 \ 00001188 180100EF SWI +280 \ 0000118C 000050E3 CMP R0,#+0 5140 { 5141 strcpy(send_txt, mod_info); \ 00001190 10109D05 LDREQ R1,[SP, #+16] 5142 } 5143 else 5144 strcpy(send_txt, "***Access denied***"); \ 00001194 0900A0E1 MOV R0,R9 \ 00001198 F8108612 ADDNE R1,R6,#+248 \ 0000119C 1A0000EF SWI +26 5145 5146 strcpy(send_txt, mod_info); \ 000011A0 10109DE5 LDR R1,[SP, #+16] \ 000011A4 0900A0E1 MOV R0,R9 \ 000011A8 1A0000EF SWI +26 5147 5148 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000011AC 0900A0E1 MOV R0,R9 \ 000011B0 1B0000EF SWI +27 \ 000011B4 090080E2 ADD R0,R0,#+9 \ 000011B8 140000EF SWI +20 \ 000011BC 00A0A0E1 MOV R10,R0 5149 p->pkt.uin=t->uin; \ 000011C0 0C0094E5 LDR R0,[R4, #+12] \ 000011C4 00008AE5 STR R0,[R10, #+0] 5150 p->pkt.type=T_SENDMSG; \ 000011C8 B480CAE1 STRH R8,[R10, #+4] 5151 p->pkt.data_len=strlen(send_txt); \ 000011CC 0900A0E1 MOV R0,R9 \ 000011D0 1B0000EF SWI +27 \ 000011D4 B600CAE1 STRH R0,[R10, #+6] 5152 strcpy(p->data,send_txt); \ 000011D8 0910A0E1 MOV R1,R9 \ 000011DC 08008AE2 ADD R0,R10,#+8 \ 000011E0 1A0000EF SWI +26 5153 #ifdef EVILFOX 5154 SENDMSGCOUNT++; 5155 #else 5156 if(show_send_info) \ 000011E4 480195E5 LDR R0,[R5, #+328] \ 000011E8 000050E3 CMP R0,#+0 \ 000011EC 200295E5 LDR R0,[R5, #+544] \ 000011F0 010080E2 ADD R0,R0,#+1 \ 000011F4 200285E5 STR R0,[R5, #+544] \ 000011F8 0B00000A BEQ ??CheckComand_78 5157 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000011FC 0110A0E3 MOV R1,#+1 \ 00001200 02002DE9 PUSH {R1} \ 00001204 8008A0E1 LSL R0,R0,#+17 \ 00001208 A008A0E1 LSR R0,R0,#+17 \ 0000120C 01002DE9 PUSH {R0} \ 00001210 323086E2 ADD R3,R6,#+50 \ 00001214 7800A0E3 MOV R0,#+120 \ 00001218 5C0D80E3 ORR R0,R0,#0x1700 \ 0000121C 052080E0 ADD R2,R0,R5 \ 00001220 0400A0E1 MOV R0,R4 \ 00001224 ........ BL AddStringToLog \ 00001228 08D08DE2 ADD SP,SP,#+8 5158 else 5159 SENDMSGCOUNT++; 5160 #endif 5161 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_78: \ 0000122C 0A20A0E1 MOV R2,R10 \ 00001230 A50000EA B ??CheckComand_54 5162 mfree(send_txt); 5163 return; 5164 } 5165 5166 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_77: \ 00001234 501F86E2 ADD R1,R6,#+320 \ 00001238 0900A0E1 MOV R0,R9 \ 0000123C 190000EF SWI +25 \ 00001240 000050E3 CMP R0,#+0 \ 00001244 0400000A BEQ ??CheckComand_79 \ 00001248 541F86E2 ADD R1,R6,#+336 \ 0000124C 0900A0E1 MOV R0,R9 \ 00001250 190000EF SWI +25 \ 00001254 000050E3 CMP R0,#+0 \ 00001258 2800001A BNE ??CheckComand_80 5167 { 5168 comanda=0; \ ??CheckComand_79: \ 0000125C 6CA385E5 STR R10,[R5, #+876] 5169 TPKT *p; 5170 int bat; 5171 bat=*RamCap(); \ 00001260 C88000EF SWI +32968 \ 00001264 B0A0D0E1 LDRH R10,[R0, #+0] 5172 char *send_txt=malloc(64); \ 00001268 4000A0E3 MOV R0,#+64 \ 0000126C 140000EF SWI +20 \ 00001270 0090A0E1 MOV R9,R0 5173 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 00001274 0A20A0E1 MOV R2,R10 \ 00001278 491F86E2 ADD R1,R6,#+292 \ 0000127C 160000EF SWI +22 5174 p=malloc(sizeof(PKT)+28+1); \ 00001280 2500A0E3 MOV R0,#+37 \ 00001284 140000EF SWI +20 \ 00001288 00A0A0E1 MOV R10,R0 5175 p->pkt.uin=t->uin; \ 0000128C 0C0094E5 LDR R0,[R4, #+12] \ 00001290 00008AE5 STR R0,[R10, #+0] 5176 p->pkt.type=T_SENDMSG; \ 00001294 B480CAE1 STRH R8,[R10, #+4] 5177 p->pkt.data_len=strlen(send_txt); \ 00001298 0900A0E1 MOV R0,R9 \ 0000129C 1B0000EF SWI +27 \ 000012A0 B600CAE1 STRH R0,[R10, #+6] 5178 strcpy(p->data,send_txt); \ 000012A4 0910A0E1 MOV R1,R9 \ 000012A8 08008AE2 ADD R0,R10,#+8 \ 000012AC 1A0000EF SWI +26 5179 #ifdef EVILFOX 5180 SENDMSGCOUNT++; 5181 #else 5182 if(show_send_info) \ 000012B0 480195E5 LDR R0,[R5, #+328] \ 000012B4 000050E3 CMP R0,#+0 \ 000012B8 200295E5 LDR R0,[R5, #+544] \ 000012BC 010080E2 ADD R0,R0,#+1 \ 000012C0 200285E5 STR R0,[R5, #+544] \ 000012C4 0B00000A BEQ ??CheckComand_81 5183 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000012C8 0110A0E3 MOV R1,#+1 \ 000012CC 02002DE9 PUSH {R1} \ 000012D0 8008A0E1 LSL R0,R0,#+17 \ 000012D4 A008A0E1 LSR R0,R0,#+17 \ 000012D8 01002DE9 PUSH {R0} \ 000012DC 323086E2 ADD R3,R6,#+50 \ 000012E0 6000A0E3 MOV R0,#+96 \ 000012E4 5C0D80E3 ORR R0,R0,#0x1700 \ 000012E8 052080E0 ADD R2,R0,R5 \ 000012EC 0400A0E1 MOV R0,R4 \ 000012F0 ........ BL AddStringToLog \ 000012F4 08D08DE2 ADD SP,SP,#+8 5184 else 5185 SENDMSGCOUNT++; 5186 #endif 5187 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_81: \ 000012F8 0A20A0E1 MOV R2,R10 \ 000012FC 720000EA B ??CheckComand_54 5188 mfree(send_txt); 5189 return; 5190 } 5191 5192 if(away_m==1 || t->isautomsg) \ ??CheckComand_80: \ 00001300 3C0295E5 LDR R0,[R5, #+572] \ 00001304 010050E3 CMP R0,#+1 \ 00001308 0300000A BEQ ??CheckComand_82 \ 0000130C 600094E5 LDR R0,[R4, #+96] \ 00001310 000050E3 CMP R0,#+0 \ 00001314 3500000A BEQ ??CheckComand_83 5193 { 5194 comanda=1; \ 00001318 0100A0E3 MOV R0,#+1 \ ??CheckComand_82: \ 0000131C 6C0385E5 STR R0,[R5, #+876] 5195 TPKT *p; 5196 // sprintf(hah,"online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 5197 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, t->name, awayMsg, away_msg_time); \ 00001320 431D85E2 ADD R1,R5,#+4288 \ 00001324 04108DE5 STR R1,[SP, #+4] \ 00001328 C800A0E3 MOV R0,#+200 \ 0000132C 440D80E3 ORR R0,R0,#0x1100 \ 00001330 050080E0 ADD R0,R0,R5 \ 00001334 01002DE9 PUSH {R0} \ 00001338 143084E2 ADD R3,R4,#+20 \ 0000133C 561F86E2 ADD R1,R6,#+344 \ 00001340 EF0F85E2 ADD R0,R5,#+956 \ 00001344 01002DE9 PUSH {R0} \ 00001348 2C00A0E3 MOV R0,#+44 \ 0000134C 900E80E3 ORR R0,R0,#0x900 \ 00001350 052080E0 ADD R2,R0,R5 \ 00001354 0C009DE5 LDR R0,[SP, #+12] \ 00001358 160000EF SWI +22 5198 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 0000135C 0C009DE5 LDR R0,[SP, #+12] \ 00001360 1B0000EF SWI +27 \ 00001364 090080E2 ADD R0,R0,#+9 \ 00001368 140000EF SWI +20 \ 0000136C 00B0A0E1 MOV R11,R0 5199 p->pkt.uin=t->uin; \ 00001370 0C0094E5 LDR R0,[R4, #+12] \ 00001374 00008BE5 STR R0,[R11, #+0] 5200 p->pkt.type=T_SENDMSG; \ 00001378 B480CBE1 STRH R8,[R11, #+4] 5201 p->pkt.data_len=strlen(away_msg); \ 0000137C 0C009DE5 LDR R0,[SP, #+12] \ 00001380 1B0000EF SWI +27 \ 00001384 B600CBE1 STRH R0,[R11, #+6] 5202 strcpy(p->data,away_msg); \ 00001388 0C109DE5 LDR R1,[SP, #+12] \ 0000138C 08008BE2 ADD R0,R11,#+8 \ 00001390 1A0000EF SWI +26 5203 if(show_send_info) \ 00001394 480195E5 LDR R0,[R5, #+328] \ 00001398 08D08DE2 ADD SP,SP,#+8 \ 0000139C 000050E3 CMP R0,#+0 \ 000013A0 200295E5 LDR R0,[R5, #+544] \ 000013A4 010080E2 ADD R0,R0,#+1 \ 000013A8 200285E5 STR R0,[R5, #+544] \ 000013AC 0B00000A BEQ ??CheckComand_84 5204 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000013B0 0110A0E3 MOV R1,#+1 \ 000013B4 02002DE9 PUSH {R1} \ 000013B8 8008A0E1 LSL R0,R0,#+17 \ 000013BC A008A0E1 LSR R0,R0,#+17 \ 000013C0 01002DE9 PUSH {R0} \ 000013C4 323086E2 ADD R3,R6,#+50 \ 000013C8 8C00A0E3 MOV R0,#+140 \ 000013CC 5C0D80E3 ORR R0,R0,#0x1700 \ 000013D0 052080E0 ADD R2,R0,R5 \ 000013D4 0400A0E1 MOV R0,R4 \ 000013D8 ........ BL AddStringToLog \ 000013DC 08D08DE2 ADD SP,SP,#+8 5205 else 5206 SENDMSGCOUNT++; 5207 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_84: \ 000013E0 0B20A0E1 MOV R2,R11 \ 000013E4 0010A0E3 MOV R1,#+0 \ 000013E8 0700A0E1 MOV R0,R7 \ 000013EC 710100EF SWI +369 5208 } 5209 5210 5211 //---------------------------------------------------------------------------// 5212 5213 5214 if(!strcmp(txt, "GET_URL_INFO") || !strcmp(txt, "__URL"))// by kluchnik 26.03.08 \ ??CheckComand_83: \ 000013F0 C61F86E2 ADD R1,R6,#+792 \ 000013F4 0900A0E1 MOV R0,R9 \ 000013F8 190000EF SWI +25 \ 000013FC 000050E3 CMP R0,#+0 \ 00001400 0400000A BEQ ??CheckComand_85 \ 00001404 CA1F86E2 ADD R1,R6,#+808 \ 00001408 0900A0E1 MOV R0,R9 \ 0000140C 190000EF SWI +25 \ 00001410 000050E3 CMP R0,#+0 \ 00001414 3100001A BNE ??CheckComand_86 5215 { 5216 comanda=0; \ ??CheckComand_85: \ 00001418 6CA385E5 STR R10,[R5, #+876] 5217 TPKT *p; 5218 5219 char *send_txt=malloc(786); \ 0000141C C40F88E3 ORR R0,R8,#0x310 \ 00001420 140000EF SWI +20 \ 00001424 0090A0E1 MOV R9,R0 5220 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 5221 "http://windes.narod.ru/files/naticq_mod2058s.zip (sgold) (40kb)\n" 5222 "http://windes.narod.ru/files/naticq_mod2058n.zip (NewSGold) (40kb)\n" 5223 "http://windes.narod.ru/files/naticq_mod2058e.zip (elka) (40kb)\n" 5224 "files: http://windes.narod.ru/files/naticqmod_allfiles_w.zip (432kb)\n" 5225 "Status on iconbar http://windes.narod.ru/files/img16x16.zip (74kb)\n" 5226 "Так же все будет тут http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00001428 C400A0E3 MOV R0,#+196 \ 0000142C 800E80E3 ORR R0,R0,#0x800 \ 00001430 060080E0 ADD R0,R0,R6 \ 00001434 01002DE9 PUSH {R0} \ 00001438 8D3E86E2 ADD R3,R6,#+2256 \ 0000143C 5D2F86E2 ADD R2,R6,#+372 \ 00001440 3800A0E3 MOV R0,#+56 \ 00001444 A00E80E3 ORR R0,R0,#0xA00 \ 00001448 061080E0 ADD R1,R0,R6 \ 0000144C 0900A0E1 MOV R0,R9 \ 00001450 160000EF SWI +22 5227 5228 p=malloc(sizeof(PKT)+786); \ 00001454 C60F88E3 ORR R0,R8,#0x318 \ 00001458 140000EF SWI +20 \ 0000145C 00A0A0E1 MOV R10,R0 5229 p->pkt.uin=t->uin; \ 00001460 0C0094E5 LDR R0,[R4, #+12] \ 00001464 00008AE5 STR R0,[R10, #+0] 5230 p->pkt.type=T_SENDMSG; \ 00001468 B480CAE1 STRH R8,[R10, #+4] 5231 p->pkt.data_len=strlen(send_txt); \ 0000146C 0900A0E1 MOV R0,R9 \ 00001470 1B0000EF SWI +27 \ 00001474 B600CAE1 STRH R0,[R10, #+6] 5232 strcpy(p->data,send_txt); \ 00001478 0910A0E1 MOV R1,R9 \ 0000147C 08008AE2 ADD R0,R10,#+8 \ 00001480 1A0000EF SWI +26 5233 if(show_send_info) \ 00001484 480195E5 LDR R0,[R5, #+328] \ 00001488 04D08DE2 ADD SP,SP,#+4 \ 0000148C 000050E3 CMP R0,#+0 \ 00001490 200295E5 LDR R0,[R5, #+544] \ 00001494 010080E2 ADD R0,R0,#+1 \ 00001498 200285E5 STR R0,[R5, #+544] \ 0000149C 0900000A BEQ ??CheckComand_87 5234 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000014A0 0110A0E3 MOV R1,#+1 \ 000014A4 02002DE9 PUSH {R1} \ 000014A8 8008A0E1 LSL R0,R0,#+17 \ 000014AC A008A0E1 LSR R0,R0,#+17 \ 000014B0 01002DE9 PUSH {R0} \ 000014B4 323086E2 ADD R3,R6,#+50 \ 000014B8 C12F86E2 ADD R2,R6,#+772 \ 000014BC 0400A0E1 MOV R0,R4 \ 000014C0 ........ BL AddStringToLog \ 000014C4 08D08DE2 ADD SP,SP,#+8 5235 else 5236 SENDMSGCOUNT++; 5237 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_87: \ 000014C8 0A20A0E1 MOV R2,R10 \ ??CheckComand_54: \ 000014CC 0010A0E3 MOV R1,#+0 \ 000014D0 0700A0E1 MOV R0,R7 \ 000014D4 710100EF SWI +369 5238 mfree(send_txt); \ 000014D8 0900A0E1 MOV R0,R9 \ 000014DC 150000EF SWI +21 5239 return; \ ??CheckComand_86: \ 000014E0 DCD08DE2 ADD SP,SP,#+220 \ 000014E4 40DE8DE2 ADD SP,SP,#+1024 \ 000014E8 F08FBDE8 POP {R4-R11,PC} ;; return 5240 } 5241 5242 // if((t->uin==AUTOBOT_UIN)&&(autobot)) 5243 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 5244 if(t->isautobot) 5245 { 5246 TPKT *p; 5247 int i=LoadBotMessage(t->uin); 5248 if(i==0) return;//если нет никаких файлов то просто возвращаемся 5249 char *pp=bot_lines[t->bot_msg]; 5250 t->bot_msg++; 5251 if(t->bot_msg==i) 5252 t->bot_msg=0; 5253 p=malloc(sizeof(PKT)+strlen(pp)+1); 5254 p->pkt.uin=t->uin; 5255 p->pkt.type=T_SENDMSG; 5256 p->pkt.data_len=strlen(pp); 5257 strcpy(p->data,pp); 5258 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); 5259 SUBPROC((void *)SendAnswer,0,p); 5260 } 5261 #endif 5262 5263 } 5264 //===========================komand list end 5265 \ In segment DATA_Z, align 4, align-sorted 5266 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 5267 char show_nick[32]; 5268 int INC_show; 5269 5270 const char color[4]={255,255,255,100}; 5271 \ In segment CODE, align 4, keep-with-next 5272 void show_pp_sender() 5273 { \ show_pp_sender: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 5274 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable88 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 700394E5 LDR R0,[R4, #+880] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F383BDB8 POPLT {R0,R1,R4-R9,PC} 5275 { 5276 WSHDR *ws=AllocWS(256); 5277 ascii2ws(ws,show_nick); 5278 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 5279 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000018 44619FE5 LDR R6,??show_pp_sender_0 ;; `?` \ 0000001C 400FA0E3 MOV R0,#+256 \ 00000020 250100EF SWI +293 \ 00000024 0050A0E1 MOV R5,R0 \ 00000028 AC00A0E3 MOV R0,#+172 \ 0000002C 600D80E3 ORR R0,R0,#0x1800 \ 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] 5280 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 5281 { 5282 extern void DrawScreenShot(); 5283 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 5284 } 5285 5286 DrawRectangle(0,0,Get_WS_width(ws,FONT_SMALL)+34,GetFontYSIZE(FONT_SMALL)+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 0700A0E3 MOV R0,#+7 \ 00000090 C50100EF SWI +453 \ 00000094 0090A0E1 MOV R9,R0 \ 00000098 0710A0E3 MOV R1,#+7 \ 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 222080E2 ADD R2,R0,#+34 \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 B40100EF SWI +436 5287 DrawImg(2,2,(int)S_ICONS[IS_MSG]);//GetImgWidth((int)S_ICONS[icn] \ 000000C4 342094E5 LDR R2,[R4, #+52] \ 000000C8 0210A0E3 MOV R1,#+2 \ 000000CC 0100A0E1 MOV R0,R1 \ 000000D0 230000EF SWI +35 5288 DrawString(ws,34,1,35+Get_WS_width(ws,FONT_SMALL)+2,1+GetFontYSIZE(FONT_SMALL),FONT_SMALL,0,( char*) color,GetPaletteAdrByColorIndex(23)); \ 000000D4 1700A0E3 MOV R0,#+23 \ 000000D8 2E0100EF SWI +302 \ 000000DC 0080A0E1 MOV R8,R0 \ 000000E0 0700A0E3 MOV R0,#+7 \ 000000E4 C50100EF SWI +453 \ 000000E8 0070A0E1 MOV R7,R0 \ 000000EC 0710A0E3 MOV R1,#+7 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 080200EF SWI +520 \ 000000F8 00012DE9 PUSH {R8} \ 000000FC 081086E2 ADD R1,R6,#+8 \ 00000100 02002DE9 PUSH {R1} \ 00000104 253080E2 ADD R3,R0,#+37 \ 00000108 0120A0E3 MOV R2,#+1 \ 0000010C 0500A0E1 MOV R0,R5 \ 00000110 0010A0E3 MOV R1,#+0 \ 00000114 02002DE9 PUSH {R1} \ 00000118 0710A0E3 MOV R1,#+7 \ 0000011C 02002DE9 PUSH {R1} \ 00000120 011087E2 ADD R1,R7,#+1 \ 00000124 02002DE9 PUSH {R1} \ 00000128 2210A0E3 MOV R1,#+34 \ 0000012C 4C0100EF SWI +332 5289 5290 FreeWS(ws); \ 00000130 0500A0E1 MOV R0,R5 \ 00000134 290100EF SWI +297 5291 INC_show--; \ 00000138 700394E5 LDR R0,[R4, #+880] 5292 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 0000013C 24209FE5 LDR R2,??show_pp_sender_0+0x4 ;; show_pp_sender \ 00000140 010040E2 SUB R0,R0,#+1 \ 00000144 700384E5 STR R0,[R4, #+880] \ 00000148 0A10A0E3 MOV R1,#+10 \ 0000014C 2400A0E3 MOV R0,#+36 \ 00000150 5C0D80E3 ORR R0,R0,#0x1700 \ 00000154 040080E0 ADD R0,R0,R4 \ 00000158 4D0000EF SWI +77 \ 0000015C 20D08DE2 ADD SP,SP,#+32 5293 } 5294 } \ 00000160 F383BDE8 POP {R0,R1,R4-R9,PC} ;; return \ ??show_pp_sender_0: \ 00000164 ........ DC32 `?` \ 00000168 ........ DC32 show_pp_sender 5295 5296 5297 \ In segment CODE, align 4, keep-with-next 5298 void Get_Online_total() 5299 { 5300 CLIST *t; 5301 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable94 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 D41280E5 STR R1,[R0, #+724] 5302 kopa_kontaktu=0; \ 0000000C D81280E5 STR R1,[R0, #+728] 5303 t=(CLIST *)(&cltop); \ 00000010 AF1F80E2 ADD R1,R0,#+700 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 5304 while(t=(CLIST *)(t->next)) 5305 { 5306 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 5307 { 5308 kopa_online++; \ 0000002C D42290E5 LDR R2,[R0, #+724] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 D42280E5 STR R2,[R0, #+724] 5309 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 D8229015 LDRNE R2,[R0, #+728] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 D8228015 STRNE R2,[R0, #+728] 5310 } 5311 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 5312 } \ 00000058 1EFF2FE1 BX LR ;; return 5313 5314 5315 //-------------------------------------------------------------------------------------------// 5316 5317 \ In segment CODE, align 4, keep-with-next 5318 void SetIndividStatus()//set to all contact to default vibra, sound and show xstatus by kluchnik 04.04.08 5319 { 5320 CLIST *t; 5321 t=(CLIST *)(&cltop); \ SetIndividStatus: \ 00000000 ........ LDR R0,??DataTable90 ;; S_ICONS + 700 \ 00000004 0A0000EA B ??SetIndividStatus_0 5322 while(t=(CLIST *)(t->next)) 5323 { 5324 if (!t->isgroup) \ ??SetIndividStatus_1: \ 00000008 081090E5 LDR R1,[R0, #+8] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0700001A BNE ??SetIndividStatus_0 5325 { 5326 t->isvibra=1; \ 00000014 0110A0E3 MOV R1,#+1 \ 00000018 581080E5 STR R1,[R0, #+88] 5327 t->issound=1; \ 0000001C 5C1080E5 STR R1,[R0, #+92] 5328 t->isShowXst=0; \ 00000020 0020A0E3 MOV R2,#+0 \ 00000024 6C2080E5 STR R2,[R0, #+108] 5329 t->AccessLevel=4; \ 00000028 0420A0E3 MOV R2,#+4 \ 0000002C 742080E5 STR R2,[R0, #+116] 5330 t->signals=1; \ 00000030 781080E5 STR R1,[R0, #+120] 5331 } 5332 } \ ??SetIndividStatus_0: \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C F1FFFF1A BNE ??SetIndividStatus_1 5333 } \ 00000040 1EFF2FE1 BX LR ;; return 5334 5335 //-------------------------------------------------------------------------------------------// 5336 5337 \ In segment CODE, align 4, keep-with-next 5338 ProcessPacket(TPKT *p) 5339 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 58DF4DE2 SUB SP,SP,#+352 5340 CLIST *t; 5341 LOGQ *q; 5342 char s[256]; 5343 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable97 ;; `?pkt.uin) \ ??ProcessPacket_4: \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 1800000A BEQ ??ProcessPacket_5 5351 { 5352 if ((t=FindContactByUin(p->pkt.uin))) \ 00000090 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000094 0090B0E1 MOVS R9,R0 \ 00000098 0E00000A BEQ ??ProcessPacket_6 5353 { 5354 // t->state=0xFFFF; 5355 if (!t->local) strncpy(t->name,p->data,63); \ 0000009C B00099E5 LDR R0,[R9, #+176] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300001A BNE ??ProcessPacket_7 \ 000000A8 3F20A0E3 MOV R2,#+63 \ 000000AC 081084E2 ADD R1,R4,#+8 \ 000000B0 140089E2 ADD R0,R9,#+20 \ 000000B4 160100EF SWI +278 5356 t->group=GROUP_CACHE; \ ??ProcessPacket_7: \ 000000B8 C00297E5 LDR R0,[R7, #+704] \ 000000BC 100089E5 STR R0,[R9, #+16] 5357 ChangeContactPos(t); \ ??ProcessPacket_8: \ 000000C0 0900A0E1 MOV R0,R9 \ 000000C4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 5358 RecountMenu(t,1); \ 000000C8 0110A0E3 MOV R1,#+1 \ 000000CC 0900A0E1 MOV R0,R9 \ ??ProcessPacket_9: \ 000000D0 ........ BL RecountMenu \ 000000D4 630200EA B ??ProcessPacket_2 5359 } 5360 else 5361 { 5362 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_6: \ 000000D8 C02297E5 LDR R2,[R7, #+704] \ 000000DC 000094E5 LDR R0,[R4, #+0] \ 000000E0 0030A0E3 MOV R3,#+0 \ 000000E4 081084E2 ADD R1,R4,#+8 \ 000000E8 ........ _BLF AddContact,??AddContact??rA \ 000000EC 0610A0E1 MOV R1,R6 \ 000000F0 F6FFFFEA B ??ProcessPacket_9 5363 } 5364 } 5365 else 5366 { 5367 if(VIBR_ON_CONNECT) \ ??ProcessPacket_5: \ 000000F4 2C0197E5 LDR R0,[R7, #+300] \ 000000F8 000050E3 CMP R0,#+0 \ 000000FC 0100000A BEQ ??ProcessPacket_10 5368 { 5369 vibra_count=1; \ 00000100 846287E5 STR R6,[R7, #+644] 5370 start_vibra(); \ 00000104 ........ BL start_vibra 5371 } 5372 GROUP_CACHE=0; \ ??ProcessPacket_10: \ 00000108 C08287E5 STR R8,[R7, #+704] 5373 ask_my_info(); 5374 if (contactlist_menu_id) \ 0000010C C40297E5 LDR R0,[R7, #+708] \ 00000110 000050E3 CMP R0,#+0 \ 00000114 0200000A BEQ ??ProcessPacket_11 5375 { 5376 RecountMenu(NULL,1); \ 00000118 0110A0E3 MOV R1,#+1 \ 0000011C 0800A0E1 MOV R0,R8 \ ??ProcessPacket_12: \ 00000120 EAFFFFEA B ??ProcessPacket_9 5377 } 5378 else 5379 { 5380 create_contactlist_menu(); \ ??ProcessPacket_11: \ 00000124 ........ BL create_contactlist_menu 5381 SetIndividStatus(); \ 00000128 ........ BL SetIndividStatus \ 0000012C 4D0200EA B ??ProcessPacket_2 5382 // if(!dontLogOnConnect && isLogOnline) dontLogOnConnect=1; 5383 } 5384 } 5385 break; 5386 case T_GROUPID: 5387 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_13: \ 00000130 C00287E5 STR R0,[R7, #+704] \ 00000134 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000138 0090B0E1 MOVS R9,R0 \ 0000013C 0400000A BEQ ??ProcessPacket_14 5388 { 5389 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 5390 ChangeContactPos(t); \ 00000150 DAFFFFEA B ??ProcessPacket_8 5391 RecountMenu(t,1); 5392 } 5393 else 5394 { 5395 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_14: \ 00000154 000094E5 LDR R0,[R4, #+0] \ 00000158 081084E2 ADD R1,R4,#+8 \ 0000015C ........ _BLF AddGroup,??AddGroup??rA \ 00000160 0110A0E3 MOV R1,#+1 \ 00000164 D9FFFFEA B ??ProcessPacket_9 5396 } 5397 break; 5398 case T_GROUPFOLLOW: 5399 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_15: \ 00000168 C00287E5 STR R0,[R7, #+704] \ 0000016C 3D0200EA B ??ProcessPacket_2 5400 break; 5401 case T_STATUSCHANGE: 5402 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_16: \ 00000170 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000174 0090B0E1 MOVS R9,R0 5403 if (t) \ 00000178 D900000A BEQ ??ProcessPacket_17 5404 { 5405 int i=t->state; \ 0000017C B415D9E1 LDRH R1,[R9, #+84] 5406 CLIST *oldt=NULL; \ 00000180 00A0A0E3 MOV R10,#+0 \ 00000184 00108DE5 STR R1,[SP, #+0] \ 00000188 0A00D4E5 LDRB R0,[R4, #+10] \ 0000018C B615D9E1 LDRH R1,[R9, #+86] \ 00000190 000051E1 CMP R1,R0 \ 00000194 1B00000A BEQ ??ProcessPacket_18 5407 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 5408 { 5409 t->xstate=p->data[2]; \ 00000198 B605C9E1 STRH R0,[R9, #+86] 5410 FreeXText(t); \ 0000019C 0900A0E1 MOV R0,R9 \ 000001A0 ........ _BLF FreeXText,??FreeXText??rA 5411 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001A4 B605D9E1 LDRH R0,[R9, #+86] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC A0019715 LDRNE R0,[R7, #+416] \ 000001B0 00005013 CMPNE R0,#+0 \ 000001B4 1200000A BEQ ??ProcessPacket_19 5412 { 5413 t->req_xtext=1; \ 000001B8 AC6089E5 STR R6,[R9, #+172] 5414 if (edchat_id) // Если открыт чат \ 000001BC C80297E5 LDR R0,[R7, #+712] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 0F00000A BEQ ??ProcessPacket_18 5415 { 5416 void *data=FindGUIbyId(edchat_id,NULL); \ 000001C8 C80297E5 LDR R0,[R7, #+712] \ 000001CC 0010A0E3 MOV R1,#+0 \ 000001D0 090200EF SWI +521 5417 if (data) \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0A00000A BEQ ??ProcessPacket_18 5418 { 5419 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001DC DF0100EF SWI +479 5420 if (ed_struct) \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 0700000A BEQ ??ProcessPacket_18 5421 { 5422 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001E8 000090E5 LDR R0,[R0, #+0] \ 000001EC 090050E1 CMP R0,R9 \ 000001F0 0400001A BNE ??ProcessPacket_18 5423 { 5424 t->req_xtext=0; \ 000001F4 AC8089E5 STR R8,[R9, #+172] 5425 RequestXText(t->uin); \ 000001F8 0C0099E5 LDR R0,[R9, #+12] \ 000001FC ........ BL RequestXText \ 00000200 000000EA B ??ProcessPacket_18 5426 } 5427 } 5428 } 5429 } 5430 } 5431 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 5432 { 5433 t->req_xtext=0; \ ??ProcessPacket_19: \ 00000204 AC8089E5 STR R8,[R9, #+172] 5434 } 5435 } 5436 if (contactlist_menu_id) \ ??ProcessPacket_18: \ 00000208 C40297E5 LDR R0,[R7, #+708] \ 0000020C 000050E3 CMP R0,#+0 \ 00000210 0500000A BEQ ??ProcessPacket_20 5437 { 5438 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000214 C40297E5 LDR R0,[R7, #+708] \ 00000218 0010A0E3 MOV R1,#+0 \ 0000021C 090200EF SWI +521 \ 00000220 8F0100EF SWI +399 \ 00000224 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000228 00A0A0E1 MOV R10,R0 5439 } 5440 if(t->state==65535) t->change=1; \ ??ProcessPacket_20: \ 0000022C B405D9E1 LDRH R0,[R9, #+84] \ 00000230 FFB0A0E3 MOV R11,#+255 \ 00000234 FFBC8BE3 ORR R11,R11,#0xFF00 \ 00000238 0B0050E1 CMP R0,R11 \ 0000023C 7C608905 STREQ R6,[R9, #+124] 5441 t->state=*((unsigned short *)(p->data)); \ 00000240 B800D4E1 LDRH R0,[R4, #+8] \ 00000244 B405C9E1 STRH R0,[R9, #+84] 5442 if((t->state!=65535)&&(t->change==1)) \ 00000248 0B0050E1 CMP R0,R11 \ 0000024C 0400000A BEQ ??ProcessPacket_21 \ 00000250 7C0099E5 LDR R0,[R9, #+124] \ 00000254 010050E3 CMP R0,#+1 5443 { 5444 t->just_now=2; \ 00000258 0200A003 MOVEQ R0,#+2 \ 0000025C 68008905 STREQ R0,[R9, #+104] 5445 t->change=0; \ 00000260 7C808905 STREQ R8,[R9, #+124] 5446 } 5447 LogStatusChange(t); \ ??ProcessPacket_21: \ 00000264 0900A0E1 MOV R0,R9 \ 00000268 ........ _BLF LogStatusChange,??LogStatusChange??rA 5448 ChangeContactPos(t); \ 0000026C 0900A0E1 MOV R0,R9 \ 00000270 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 5449 RecountMenu(oldt,1); \ 00000274 0110A0E3 MOV R1,#+1 \ 00000278 0A00A0E1 MOV R0,R10 \ 0000027C ........ BL RecountMenu 5450 5451 if(isLogStatusChange)//isLogStatusChange // by kluchnik 05.04.08 \ 00000280 BC0097E5 LDR R0,[R7, #+188] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 5C00000A BEQ ??ProcessPacket_22 5452 { 5453 int icon=GetIconIndex(t); 5454 char stat[32]; 5455 switch(icon) \ 0000028C 0900A0E1 MOV R0,R9 \ 00000290 ........ BL GetIconIndex \ 00000294 0C0050E3 CMP R0,#+12 \ 00000298 2C00008A BHI ??ProcessPacket_23 \ 0000029C 011F8FE2 ADR R1,??ProcessPacket_1 \ 000002A0 0010D1E7 LDRB R1,[R1, R0] \ 000002A4 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??ProcessPacket_1: \ 000002A8 03070A0E DC8 +3,+7,+10,+14 \ 000002AC 10131518 DC8 +16,+19,+21,+24 \ 000002B0 1A1D2124 DC8 +26,+29,+33,+36 \ 000002B4 26000000 DC8 +38,+0,+0,+0 5456 { 5457 case IS_OFFLINE : sprintf(stat,"Offline"); break; \ ??ProcessPacket_24: \ 000002B8 5C00A0E3 MOV R0,#+92 \ 000002BC A00E80E3 ORR R0,R0,#0xA00 \ ??ProcessPacket_25: \ 000002C0 051080E0 ADD R1,R0,R5 \ 000002C4 1F0000EA B ??ProcessPacket_26 5458 case IS_INVISIBLE : sprintf(stat,"Invisable"); break; \ ??ProcessPacket_27: \ 000002C8 8C00A0E3 MOV R0,#+140 \ 000002CC 700E80E3 ORR R0,R0,#0x700 \ 000002D0 FAFFFFEA B ??ProcessPacket_25 5459 case IS_AWAY : sprintf(stat,"Away"); break; \ ??ProcessPacket_28: \ 000002D4 8400A0E3 MOV R0,#+132 \ ??ProcessPacket_29: \ 000002D8 700E80E3 ORR R0,R0,#0x700 \ 000002DC 051080E0 ADD R1,R0,R5 \ 000002E0 180000EA B ??ProcessPacket_26 5460 case IS_NA : sprintf(stat,"N/A"); break; \ ??ProcessPacket_30: \ 000002E4 C51F8FE2 ADR R1,??ProcessPacket_31 ;; "N/A" \ 000002E8 160000EA B ??ProcessPacket_26 5461 case IS_OCCUPIED: sprintf(stat,"Occupied"); break; \ ??ProcessPacket_32: \ 000002EC 7800A0E3 MOV R0,#+120 \ 000002F0 700E80E3 ORR R0,R0,#0x700 \ 000002F4 F1FFFFEA B ??ProcessPacket_25 5462 case IS_DND : sprintf(stat,"DND"); break; \ ??ProcessPacket_33: \ 000002F8 C11F8FE2 ADR R1,??ProcessPacket_31+0x4 ;; "DND" \ 000002FC 110000EA B ??ProcessPacket_26 5463 case IS_DEPRESSION : sprintf(stat,"Depression"); break; \ ??ProcessPacket_34: \ 00000300 6C00A0E3 MOV R0,#+108 \ 00000304 700E80E3 ORR R0,R0,#0x700 \ 00000308 ECFFFFEA B ??ProcessPacket_25 5464 case IS_EVIL : sprintf(stat,"Evil"); break; \ ??ProcessPacket_35: \ 0000030C 6400A0E3 MOV R0,#+100 \ 00000310 F0FFFFEA B ??ProcessPacket_29 5465 case IS_HOME : sprintf(stat,"Home"); break; \ ??ProcessPacket_36: \ 00000314 5C00A0E3 MOV R0,#+92 \ 00000318 700E80E3 ORR R0,R0,#0x700 \ 0000031C E7FFFFEA B ??ProcessPacket_25 5466 case IS_LUNCH : sprintf(stat,"Lunch"); break; \ ??ProcessPacket_37: \ 00000320 5400A0E3 MOV R0,#+84 \ 00000324 700E80E3 ORR R0,R0,#0x700 \ 00000328 051080E0 ADD R1,R0,R5 \ 0000032C 050000EA B ??ProcessPacket_26 5467 case IS_WORK : sprintf(stat,"Work"); break; \ ??ProcessPacket_38: \ 00000330 4C00A0E3 MOV R0,#+76 \ 00000334 700E80E3 ORR R0,R0,#0x700 \ 00000338 E0FFFFEA B ??ProcessPacket_25 5468 case IS_ONLINE : sprintf(stat,"Online"); break; \ ??ProcessPacket_39: \ 0000033C 4400A0E3 MOV R0,#+68 \ 00000340 E4FFFFEA B ??ProcessPacket_29 5469 case IS_FFC : sprintf(stat,"FFC"); break; \ ??ProcessPacket_40: \ 00000344 AF1F8FE2 ADR R1,??ProcessPacket_31+0x8 ;; "FFC" \ ??ProcessPacket_26: \ 00000348 18008DE2 ADD R0,SP,#+24 \ 0000034C 160000EF SWI +22 5470 } 5471 5472 FreeXText2(t); \ ??ProcessPacket_23: \ 00000350 0900A0E1 MOV R0,R9 \ 00000354 ........ BL FreeXText2 5473 TTime time; 5474 TDate date; 5475 GetDateTime(&date,&time); \ 00000358 04108DE2 ADD R1,SP,#+4 \ 0000035C 0C008DE2 ADD R0,SP,#+12 \ 00000360 B40000EF SWI +180 5476 char *txt=malloc(64); \ 00000364 4000A0E3 MOV R0,#+64 \ 00000368 140000EF SWI +20 \ 0000036C 00A0A0E1 MOV R10,R0 5477 sprintf(txt," %s: %02d:%02d:%02d %02d.%02d",stat,time.hour,time.min,time.sec,date.month,date.day); \ 00000370 1100DDE5 LDRB R0,[SP, #+17] \ 00000374 CC1F85E2 ADD R1,R5,#+816 \ 00000378 01002DE9 PUSH {R0} \ 0000037C 1400DDE5 LDRB R0,[SP, #+20] \ 00000380 01002DE9 PUSH {R0} \ 00000384 0E00DDE5 LDRB R0,[SP, #+14] \ 00000388 01002DE9 PUSH {R0} \ 0000038C 1100DDE5 LDRB R0,[SP, #+17] \ 00000390 01002DE9 PUSH {R0} \ 00000394 1430DDE5 LDRB R3,[SP, #+20] \ 00000398 28208DE2 ADD R2,SP,#+40 \ 0000039C 0A00A0E1 MOV R0,R10 \ 000003A0 160000EF SWI +22 5478 5479 t->xtext2=malloc(64); \ 000003A4 4000A0E3 MOV R0,#+64 \ 000003A8 140000EF SWI +20 \ 000003AC A80089E5 STR R0,[R9, #+168] 5480 snprintf(t->xtext2,64,txt); \ 000003B0 0A20A0E1 MOV R2,R10 \ 000003B4 4010A0E3 MOV R1,#+64 \ 000003B8 1B0100EF SWI +283 5481 AddStringToLog(t,0x03,txt,"",0xFFFFFFFF, 0); \ 000003BC 0000A0E3 MOV R0,#+0 \ 000003C0 01002DE9 PUSH {R0} \ 000003C4 903F8FE2 ADR R3,??ProcessPacket_31+0xC ;; "" \ 000003C8 0A20A0E1 MOV R2,R10 \ 000003CC 0310A0E3 MOV R1,#+3 \ 000003D0 0000E0E1 MVN R0,R0 \ 000003D4 01002DE9 PUSH {R0} \ 000003D8 0900A0E1 MOV R0,R9 \ 000003DC ........ BL AddStringToLog 5482 ReqAddMsgToChat(t); \ 000003E0 0900A0E1 MOV R0,R9 \ 000003E4 ........ BL ReqAddMsgToChat 5483 RecountMenu(NULL, 0); \ 000003E8 0810A0E1 MOV R1,R8 \ 000003EC 0100A0E1 MOV R0,R1 \ 000003F0 ........ BL RecountMenu 5484 mfree(txt); \ 000003F4 0A00A0E1 MOV R0,R10 \ 000003F8 150000EF SWI +21 \ 000003FC 18D08DE2 ADD SP,SP,#+24 5485 } 5486 5487 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ ??ProcessPacket_22: \ 00000400 B405D9E1 LDRH R0,[R9, #+84] \ 00000404 0B0050E1 CMP R0,R11 \ 00000408 2A00000A BEQ ??ProcessPacket_41 \ 0000040C 00109DE5 LDR R1,[SP, #+0] \ 00000410 0B0051E1 CMP R1,R11 \ 00000414 2700001A BNE ??ProcessPacket_41 5488 { 5489 //#ifdef kluchnik 5490 if(Is_INC_On) \ 00000418 080297E5 LDR R0,[R7, #+520] \ 0000041C 000050E3 CMP R0,#+0 \ 00000420 0800000A BEQ ??ProcessPacket_42 5491 { 5492 INC_show2=20; \ 00000424 1400A0E3 MOV R0,#+20 \ 00000428 5C0287E5 STR R0,[R7, #+604] 5493 sprintf(onContact,">%s<",t->name); \ 0000042C 142089E2 ADD R2,R9,#+20 \ 00000430 D41F85E2 ADD R1,R5,#+848 \ 00000434 E800A0E3 MOV R0,#+232 \ 00000438 480D80E3 ORR R0,R0,#0x1200 \ 0000043C 070080E0 ADD R0,R0,R7 \ 00000440 160000EF SWI +22 5494 show_on_contact(); \ 00000444 ........ BL show_on_contact 5495 } 5496 if(!t->isactive)//на всякий случай \ ??ProcessPacket_42: \ 00000448 9C0099E5 LDR R0,[R9, #+156] \ 0000044C 000050E3 CMP R0,#+0 5497 { 5498 t->isvibra=1; \ 00000450 58608905 STREQ R6,[R9, #+88] 5499 t->issound=1; \ 00000454 5C608905 STREQ R6,[R9, #+92] 5500 } 5501 //#endif 5502 /* if(isLogOnline) //by kluchnik 26.03.08 5503 { 5504 FreeXText2(t); 5505 TTime time; 5506 TDate date; 5507 GetDateTime(&date,&time); 5508 char *txt=malloc(64); 5509 sprintf(txt," Online: %02d:%02d:%02d %02d.%02d",time.hour,time.min,time.sec,date.month,date.day); 5510 5511 t->xtext2=malloc(64); 5512 snprintf(t->xtext2,64,txt); 5513 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); 5514 ReqAddMsgToChat(t); 5515 RecountMenu(NULL, 0); 5516 mfree(txt); 5517 }*/ 5518 if(!extended_sounds) \ 00000458 D40197E5 LDR R0,[R7, #+468] \ 0000045C AE6EA0E3 MOV R6,#+2784 \ 00000460 000050E3 CMP R0,#+0 5519 { 5520 Play(sndGlobal); \ 00000464 07008600 ADDEQ R0,R6,R7 \ 00000468 1800000A BEQ ??ProcessPacket_43 5521 } 5522 else 5523 { 5524 FSTATS stat; 5525 int fsize; 5526 unsigned int ul = 0; \ 0000046C 14808DE5 STR R8,[SP, #+20] 5527 uins=t->uin; \ 00000470 0C0099E5 LDR R0,[R9, #+12] 5528 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ 00000474 EE8EA0E3 MOV R8,#+3808 \ 00000478 F80187E5 STR R0,[R7, #+504] \ 0000047C 0030A0E1 MOV R3,R0 \ 00000480 B22E87E2 ADD R2,R7,#+2848 \ 00000484 660F46E2 SUB R0,R6,#+408 \ 00000488 051080E0 ADD R1,R0,R5 \ 0000048C 070088E0 ADD R0,R8,R7 \ 00000490 160000EF SWI +22 5529 GetFileStats(talk_sound,&stat,&ul); \ 00000494 14208DE2 ADD R2,SP,#+20 \ 00000498 4E1F8DE2 ADD R1,SP,#+312 \ 0000049C 070088E0 ADD R0,R8,R7 \ 000004A0 840000EF SWI +132 5530 fsize=stat.size; 5531 if(fsize>0) \ 000004A4 3C019DE5 LDR R0,[SP, #+316] \ 000004A8 010050E3 CMP R0,#+1 \ 000004AC 070086B0 ADDLT R0,R6,R7 5532 Play(talk_sound); \ 000004B0 070088A0 ADDGE R0,R8,R7 \ 000004B4 050000EA B ??ProcessPacket_43 5533 else 5534 Play(sndGlobal); 5535 } 5536 } 5537 5538 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_41: \ 000004B8 00109DE5 LDR R1,[SP, #+0] \ 000004BC 0B0051E1 CMP R1,R11 \ 000004C0 0300000A BEQ ??ProcessPacket_44 \ 000004C4 0B0050E1 CMP R0,R11 \ 000004C8 0100001A BNE ??ProcessPacket_44 5539 { 5540 Play(sndSrvMsg); \ 000004CC AA0E87E2 ADD R0,R7,#+2720 \ ??ProcessPacket_43: \ 000004D0 ........ BL Play 5541 5542 //-------------------- Log offline ----------------------// 5543 5544 /* if(isLogOffline) // by kluchnik 26.03.08 5545 { 5546 FreeXText2(t); 5547 TTime time; 5548 TDate date; 5549 GetDateTime(&date,&time); 5550 char *txt=malloc(64); 5551 sprintf(txt," Offline: %02d:%02d:%02d %02d.%02d",time.hour,time.min,time.sec,date.month,date.day); 5552 5553 t->xtext2=malloc(64); 5554 snprintf(t->xtext2,64,txt); 5555 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); 5556 ReqAddMsgToChat(t); 5557 // RecountMenu(t, 1); 5558 RecountMenu(NULL, 0); 5559 mfree(txt); 5560 }*/ 5561 } 5562 5563 //------------------------------------------------------------// 5564 5565 if(TIME_OR_MSG==2) \ ??ProcessPacket_44: \ 000004D4 FC0097E5 LDR R0,[R7, #+252] \ 000004D8 020050E3 CMP R0,#+2 \ 000004DC 0000001A BNE ??ProcessPacket_17 5566 Get_Online_total(); \ 000004E0 ........ BL Get_Online_total 5567 } 5568 if (edchat_id) \ ??ProcessPacket_17: \ 000004E4 C80297E5 LDR R0,[R7, #+712] \ 000004E8 000050E3 CMP R0,#+0 \ 000004EC 5D01000A BEQ ??ProcessPacket_2 5569 { 5570 void *data=FindGUIbyId(edchat_id,NULL); \ 000004F0 C80297E5 LDR R0,[R7, #+712] \ 000004F4 0010A0E3 MOV R1,#+0 \ 000004F8 090200EF SWI +521 5571 { 5572 EDCHAT_STRUCT *ed_struct; 5573 ed_struct=EDIT_GetUserPointer(data); \ 000004FC DF0100EF SWI +479 5574 if (ed_struct) \ 00000500 000050E3 CMP R0,#+0 \ 00000504 5701000A BEQ ??ProcessPacket_2 5575 { 5576 if (ed_struct->ed_contact==t) \ 00000508 000090E5 LDR R0,[R0, #+0] \ 0000050C 090050E1 CMP R0,R9 \ 00000510 5401001A BNE ??ProcessPacket_2 5577 { 5578 DirectRedrawGUI_ID(edchat_id); \ 00000514 C80297E5 LDR R0,[R7, #+712] \ 00000518 400100EF SWI +320 \ 0000051C 510100EA B ??ProcessPacket_2 5579 } 5580 } 5581 } 5582 } 5583 break; 5584 case T_RECVMSG: 5585 NEW_MSG=1; \ ??ProcessPacket_45: \ 00000520 586387E5 STR R6,[R7, #+856] 5586 t=FindContactByUin(p->pkt.uin); \ 00000524 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000528 0090B0E1 MOVS R9,R0 5587 if (!t) \ 0000052C 0900001A BNE ??ProcessPacket_46 5588 { 5589 sprintf(s,percent_d,p->pkt.uin); \ 00000530 002094E5 LDR R2,[R4, #+0] \ 00000534 2E1085E2 ADD R1,R5,#+46 \ 00000538 38008DE2 ADD R0,SP,#+56 \ 0000053C 160000EF SWI +22 5590 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 00000540 C02297E5 LDR R2,[R7, #+704] \ 00000544 000094E5 LDR R0,[R4, #+0] \ 00000548 0030A0E3 MOV R3,#+0 \ 0000054C 38108DE2 ADD R1,SP,#+56 \ 00000550 ........ _BLF AddContact,??AddContact??rA \ 00000554 0090A0E1 MOV R9,R0 5591 } 5592 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive)//на всякий случай \ ??ProcessPacket_47: \ 00000580 9C0099E5 LDR R0,[R9, #+156] \ 00000584 000050E3 CMP R0,#+0 \ 00000588 0100001A BNE ??ProcessPacket_49 5594 { 5595 t->isvibra=1; \ ??ProcessPacket_48: \ 0000058C 586089E5 STR R6,[R9, #+88] 5596 t->issound=1; \ 00000590 5C6089E5 STR R6,[R9, #+92] 5597 } 5598 /* if(SHOW_ACTIVE) 5599 t->isactive=ACTIVE_TIME; 5600 // ChangeContactPos(t); 5601 if(t->isvibra) 5602 { 5603 if(VIBR_TYPE) 5604 vibra_count=2; 5605 else 5606 vibra_count=1; 5607 start_vibra(); 5608 } 5609 #ifdef ELKA 5610 if(SLI_TYPE) 5611 SLI_Timer(); 5612 #endif 5613 if(Is_Double_Vibra_On) 5614 Reminder_timer(); 5615 if (Is_ILU_On) 5616 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007*/ 5617 if (t->name[0]=='#') \ ??ProcessPacket_49: \ 00000594 1400D9E5 LDRB R0,[R9, #+20] \ 00000598 230050E3 CMP R0,#+35 \ 0000059C 1B00001A BNE ??ProcessPacket_50 5618 { 5619 //Если это конференция, патчим имя 5620 char *s=strchr(p->data,'>'); \ 000005A0 3E10A0E3 MOV R1,#+62 \ 000005A4 080084E2 ADD R0,R4,#+8 \ 000005A8 180000EF SWI +24 5621 //Если нашли символ > и после него пробел и ник короче 16 символов 5622 if (s) \ 000005AC 000050E3 CMP R0,#+0 \ 000005B0 1600000A BEQ ??ProcessPacket_50 5623 { 5624 if ((s[1]==' ')&&((s-p->data)<16)) \ 000005B4 0110D0E5 LDRB R1,[R0, #+1] \ 000005B8 200051E3 CMP R1,#+32 \ 000005BC 1300001A BNE ??ProcessPacket_50 \ 000005C0 081084E2 ADD R1,R4,#+8 \ 000005C4 011040E0 SUB R1,R0,R1 \ 000005C8 100051E3 CMP R1,#+16 \ 000005CC 0F0000AA BGE ??ProcessPacket_50 5625 { 5626 *s=0; //Режем строку \ 000005D0 0080C0E5 STRB R8,[R0, #+0] 5627 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 000005D4 0110A0E3 MOV R1,#+1 \ 000005D8 02002DE9 PUSH {R1} \ 000005DC 083084E2 ADD R3,R4,#+8 \ 000005E0 022080E2 ADD R2,R0,#+2 \ 000005E4 0900A0E1 MOV R0,R9 \ 000005E8 001061E2 RSB R1,R1,#+0 \ 000005EC 02002DE9 PUSH {R1} \ 000005F0 0210A0E3 MOV R1,#+2 \ 000005F4 ........ BL AddStringToLog 5628 goto L1; \ 000005F8 08D08DE2 ADD SP,SP,#+8 \ 000005FC 490000EA B ??ProcessPacket_51 \ ??ProcessPacket_31: \ 00000600 4E2F4100 DC8 "N/A" \ 00000604 444E4400 DC8 "DND" \ 00000608 46464300 DC8 "FFC" \ 0000060C 00000000 DC8 "",+0,+0,+0 5629 } 5630 } 5631 } 5632 5633 //=================== tas bus jautri ===================// 5634 5635 comanda=1; \ ??ProcessPacket_50: \ 00000610 6C6387E5 STR R6,[R7, #+876] 5636 CheckComand(p->data, t); \ 00000614 0910A0E1 MOV R1,R9 \ 00000618 080084E2 ADD R0,R4,#+8 \ 0000061C ........ BL CheckComand 5637 if(t->signals) \ 00000620 780099E5 LDR R0,[R9, #+120] \ 00000624 000050E3 CMP R0,#+0 \ 00000628 1800000A BEQ ??ProcessPacket_52 5638 { 5639 if(SHOW_ACTIVE) \ 0000062C 300197E5 LDR R0,[R7, #+304] \ 00000630 000050E3 CMP R0,#+0 5640 t->isactive=ACTIVE_TIME; \ 00000634 5A0FA013 MOVNE R0,#+360 \ 00000638 9C008915 STRNE R0,[R9, #+156] 5641 // ChangeContactPos(t); 5642 if(t->isvibra) \ 0000063C 580099E5 LDR R0,[R9, #+88] \ 00000640 000050E3 CMP R0,#+0 \ 00000644 0500000A BEQ ??ProcessPacket_53 5643 { 5644 if(VIBR_TYPE) \ 00000648 340197E5 LDR R0,[R7, #+308] \ 0000064C 000050E3 CMP R0,#+0 5645 vibra_count=2; \ 00000650 0200A013 MOVNE R0,#+2 \ 00000654 84028715 STRNE R0,[R7, #+644] 5646 else 5647 vibra_count=1; \ 00000658 84628705 STREQ R6,[R7, #+644] 5648 start_vibra(); \ 0000065C ........ BL start_vibra 5649 } 5650 #ifdef ELKA 5651 if(SLI_TYPE) 5652 SLI_Timer(); 5653 #endif 5654 if(Is_Double_Vibra_On) \ ??ProcessPacket_53: \ 00000660 100297E5 LDR R0,[R7, #+528] \ 00000664 000050E3 CMP R0,#+0 \ 00000668 0000000A BEQ ??ProcessPacket_54 5655 Reminder_timer(); \ 0000066C ........ BL Reminder_timer 5656 5657 if (Is_ILU_On) \ ??ProcessPacket_54: \ 00000670 0C0297E5 LDR R0,[R7, #+524] \ 00000674 000050E3 CMP R0,#+0 \ 00000678 0400000A BEQ ??ProcessPacket_52 5658 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 0000067C CC3197E5 LDR R3,[R7, #+460] \ 00000680 B82197E5 LDR R2,[R7, #+440] \ 00000684 B41197E5 LDR R1,[R7, #+436] \ 00000688 B00197E5 LDR R0,[R7, #+432] \ 0000068C ........ BL IlluminationOn 5659 } 5660 5661 if(comanda==1) \ ??ProcessPacket_52: \ 00000690 6C0397E5 LDR R0,[R7, #+876] \ 00000694 010050E3 CMP R0,#+1 \ 00000698 2200001A BNE ??ProcessPacket_51 5662 { 5663 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 0000069C 01002DE9 PUSH {R0} \ 000006A0 143089E2 ADD R3,R9,#+20 \ 000006A4 082084E2 ADD R2,R4,#+8 \ 000006A8 0210A0E3 MOV R1,#+2 \ 000006AC 000066E2 RSB R0,R6,#+0 \ 000006B0 01002DE9 PUSH {R0} \ 000006B4 0900A0E1 MOV R0,R9 \ 000006B8 ........ BL AddStringToLog 5664 main_count++; \ 000006BC ........ LDR R0,??DataTable93 ;; main_count \ 000006C0 001090E5 LDR R1,[R0, #+0] \ 000006C4 011081E2 ADD R1,R1,#+1 \ 000006C8 001080E5 STR R1,[R0, #+0] 5665 if(Is_INC_On) \ 000006CC 080297E5 LDR R0,[R7, #+520] \ 000006D0 08D08DE2 ADD SP,SP,#+8 \ 000006D4 000050E3 CMP R0,#+0 \ 000006D8 0C00000A BEQ ??ProcessPacket_55 5666 { 5667 strcpy(show_nick, t->name); \ 000006DC 141089E2 ADD R1,R9,#+20 \ 000006E0 AC00A0E3 MOV R0,#+172 \ 000006E4 600D80E3 ORR R0,R0,#0x1800 \ 000006E8 070080E0 ADD R0,R0,R7 \ 000006EC 1A0000EF SWI +26 5668 if(!IsIdleUiOnTop()&&(!saver_on)) \ 000006F0 ........ BL IsIdleUiOnTop \ 000006F4 000050E3 CMP R0,#+0 \ 000006F8 FC019705 LDREQ R0,[R7, #+508] \ 000006FC 00005003 CMPEQ R0,#+0 \ 00000700 0200001A BNE ??ProcessPacket_55 5669 { 5670 INC_show=15; \ 00000704 0F00A0E3 MOV R0,#+15 \ 00000708 700387E5 STR R0,[R7, #+880] 5671 show_pp_sender(); \ 0000070C ........ BL show_pp_sender 5672 } 5673 } 5674 if(Is_SMARTCPU_On) \ ??ProcessPacket_55: \ 00000710 040297E5 LDR R0,[R7, #+516] \ 00000714 000050E3 CMP R0,#+0 \ 00000718 0200000A BEQ ??ProcessPacket_51 5675 AddToMain(t->name,p->data); \ 0000071C 081084E2 ADD R1,R4,#+8 \ 00000720 140089E2 ADD R0,R9,#+20 \ 00000724 ........ BL AddToMain 5676 } 5677 L1: 5678 //Разворачиваем группу, в которой пришло сообщение 5679 { 5680 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_51: \ 00000728 100099E5 LDR R0,[R9, #+16] \ 0000072C ........ _BLF FindGroupByID,??FindGroupByID??rA 5681 if (g) \ 00000730 000050E3 CMP R0,#+0 5682 { 5683 if (g->state) \ 00000734 B415D011 LDRHNE R1,[R0, #+84] \ 00000738 00005113 CMPNE R1,#+0 5684 { 5685 g->state=0; \ 0000073C B485C011 STRHNE R8,[R0, #+84] 5686 } 5687 } 5688 } 5689 // if(comanda==1) 5690 // { 5691 ReqAddMsgToChat(t); \ 00000740 0900A0E1 MOV R0,R9 \ 00000744 ........ BL ReqAddMsgToChat 5692 if(t->signals) \ 00000748 780099E5 LDR R0,[R9, #+120] \ 0000074C 000050E3 CMP R0,#+0 \ 00000750 0200000A BEQ ??ProcessPacket_56 5693 RecountMenu(t,1); \ 00000754 0110A0E3 MOV R1,#+1 \ 00000758 0900A0E1 MOV R0,R9 \ 0000075C ........ BL RecountMenu 5694 5695 switch (DEVELOP_IF) \ ??ProcessPacket_56: \ 00000760 380197E5 LDR R0,[R7, #+312] \ 00000764 000050E3 CMP R0,#+0 \ 00000768 0400000A BEQ ??ProcessPacket_57 \ 0000076C 010050E2 SUBS R0,R0,#+1 \ 00000770 0B00000A BEQ ??ProcessPacket_58 \ 00000774 020050E2 SUBS R0,R0,#+2 \ 00000778 1300000A BEQ ??ProcessPacket_59 \ 0000077C B90000EA B ??ProcessPacket_2 5696 { 5697 case 0: 5698 #ifdef EVILFOX 5699 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) GBS_StartTimerProc(&develop, 216*2, to_develop); 5700 #else 5701 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_57: \ 00000780 068100EF SWI +33030 \ 00000784 080090E5 LDR R0,[R0, #+8] \ 00000788 181297E5 LDR R1,[R7, #+536] \ 0000078C 0C0090E5 LDR R0,[R0, #+12] \ 00000790 0C0090E5 LDR R0,[R0, #+12] \ 00000794 010050E1 CMP R0,R1 \ ??ProcessPacket_60: \ 00000798 B200000A BEQ ??ProcessPacket_2 \ 0000079C ........ BL to_develop \ 000007A0 B00000EA B ??ProcessPacket_2 5702 #endif 5703 break; 5704 case 1: 5705 #ifdef EVILFOX 5706 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) GBS_StartTimerProc(&develop, 216*2, to_develop); 5707 #else 5708 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_58: \ 000007A4 068100EF SWI +33030 \ 000007A8 080090E5 LDR R0,[R0, #+8] \ 000007AC 181297E5 LDR R1,[R7, #+536] \ 000007B0 0C0090E5 LDR R0,[R0, #+12] \ 000007B4 0C0090E5 LDR R0,[R0, #+12] \ 000007B8 010050E1 CMP R0,R1 \ 000007BC A900000A BEQ ??ProcessPacket_2 \ 000007C0 430000EF SWI +67 \ 000007C4 000050E3 CMP R0,#+0 \ 000007C8 F2FFFFEA B ??ProcessPacket_60 5709 #endif 5710 break; 5711 case 2: 5712 break; 5713 case 3: 5714 GBS_DelTimer(&develop); \ ??ProcessPacket_59: \ 000007CC 2400A0E3 MOV R0,#+36 \ 000007D0 5C0D80E3 ORR R0,R0,#0x1700 \ 000007D4 070080E0 ADD R0,R0,R7 \ 000007D8 8C0100EF SWI +396 5715 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 000007DC 068100EF SWI +33030 \ 000007E0 080090E5 LDR R0,[R0, #+8] \ 000007E4 181297E5 LDR R1,[R7, #+536] \ 000007E8 0C0090E5 LDR R0,[R0, #+12] \ 000007EC 0C0090E5 LDR R0,[R0, #+12] \ 000007F0 010050E1 CMP R0,R1 \ 000007F4 9B00000A BEQ ??ProcessPacket_2 \ 000007F8 430000EF SWI +67 \ 000007FC 000050E3 CMP R0,#+0 \ 00000800 9800001A BNE ??ProcessPacket_2 \ 00000804 ........ BL begin_to_develop \ 00000808 960000EA B ??ProcessPacket_2 5716 break; 5717 } 5718 // } 5719 break; 5720 case T_SRV_ACK: 5721 case T_CLIENT_ACK: 5722 q=FindContactLOGQByAck(p); \ ??ProcessPacket_61: \ 0000080C 0400A0E1 MOV R0,R4 \ 00000810 ........ BL FindContactLOGQByAck 5723 /* if (q&&(p->pkt.type==T_SRV_ACK)) 5724 { 5725 if (Is_ILU_On) 5726 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); 5727 }//Illumination by BoBa 19.04.2007 */ 5728 /* if (( 5729 IsGuiOnTop(contactlist_menu_id)|| 5730 IsGuiOnTop(edchat_id) 5731 )&&(q)) 5732 { 5733 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 5734 GetPaletteAdrByColorIndex(0), 5735 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 5736 }*/ 5737 if (q) \ 00000814 000050E3 CMP R0,#+0 \ 00000818 9200000A BEQ ??ProcessPacket_2 5738 { 5739 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 0000081C B410D4E1 LDRH R1,[R4, #+4] \ 00000820 100051E3 CMP R1,#+16 \ 00000824 0110A003 MOVEQ R1,#+1 \ 00000828 0210A013 MOVNE R1,#+2 \ 0000082C 041080E5 STR R1,[R0, #+4] 5740 t=FindContactByUin(p->pkt.uin); \ 00000830 000094E5 LDR R0,[R4, #+0] \ 00000834 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000838 0090A0E1 MOV R9,R0 5741 if (edchat_id) \ 0000083C C80297E5 LDR R0,[R7, #+712] \ 00000840 000050E3 CMP R0,#+0 \ 00000844 8700000A BEQ ??ProcessPacket_2 5742 { 5743 void *data=FindGUIbyId(edchat_id,NULL); \ 00000848 C80297E5 LDR R0,[R7, #+712] \ 0000084C 0010A0E3 MOV R1,#+0 \ 00000850 090200EF SWI +521 \ 00000854 0050B0E1 MOVS R5,R0 5744 if (data) \ 00000858 8200000A BEQ ??ProcessPacket_2 5745 { 5746 EDCHAT_STRUCT *ed_struct; 5747 ed_struct=EDIT_GetUserPointer(data); \ 0000085C DF0100EF SWI +479 5748 if (ed_struct) \ 00000860 000050E3 CMP R0,#+0 \ 00000864 7F00000A BEQ ??ProcessPacket_2 5749 { 5750 if (ed_struct->ed_contact==t) \ 00000868 000090E5 LDR R0,[R0, #+0] \ 0000086C 090050E1 CMP R0,R9 \ 00000870 7C00001A BNE ??ProcessPacket_2 5751 { 5752 if (EDIT_IsBusy(data)) \ 00000874 0500A0E1 MOV R0,R5 \ 00000878 1C0200EF SWI +540 \ 0000087C 000050E3 CMP R0,#+0 \ 00000880 0300000A BEQ ??ProcessPacket_62 5753 { 5754 t->req_drawack=1; \ 00000884 8C6089E5 STR R6,[R9, #+140] 5755 #ifdef EVILFOX 5756 time_to_stop_t9=2; 5757 #else 5758 time_to_stop_t9=3; \ 00000888 0300A0E3 MOV R0,#+3 \ 0000088C 5C0387E5 STR R0,[R7, #+860] \ 00000890 740000EA B ??ProcessPacket_2 5759 #endif 5760 } 5761 else { 5762 DrawAck(data); \ ??ProcessPacket_62: \ 00000894 0500A0E1 MOV R0,R5 \ 00000898 ........ BL DrawAck 5763 if (p->pkt.type==T_SRV_ACK) \ 0000089C B400D4E1 LDRH R0,[R4, #+4] \ 000008A0 100050E3 CMP R0,#+16 \ 000008A4 6F00001A BNE ??ProcessPacket_2 5764 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000008A8 CC3197E5 LDR R3,[R7, #+460] \ 000008AC C42197E5 LDR R2,[R7, #+452] \ 000008B0 C01197E5 LDR R1,[R7, #+448] \ 000008B4 BC0197E5 LDR R0,[R7, #+444] \ 000008B8 ........ BL IlluminationOn \ 000008BC 690000EA B ??ProcessPacket_2 5765 } 5766 } 5767 } 5768 } 5769 } 5770 } 5771 break; 5772 case T_XTEXT_ACK: 5773 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_63: \ 000008C0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000008C4 0090B0E1 MOVS R9,R0 5774 if (t) \ 000008C8 6600000A BEQ ??ProcessPacket_2 5775 { 5776 int i; 5777 int j; 5778 FreeXText(t); \ 000008CC ........ _BLF FreeXText,??FreeXText??rA 5779 i=p->pkt.data_len; \ 000008D0 B660D4E1 LDRH R6,[R4, #+6] 5780 memcpy(t->xtext=malloc(i),p->data,i); \ 000008D4 0600A0E1 MOV R0,R6 \ 000008D8 140000EF SWI +20 \ 000008DC A40089E5 STR R0,[R9, #+164] \ 000008E0 0620A0E1 MOV R2,R6 \ 000008E4 081084E2 ADD R1,R4,#+8 \ 000008E8 1E0100EF SWI +286 5781 zeromem(s,256); \ 000008EC 401FA0E3 MOV R1,#+256 \ 000008F0 38008DE2 ADD R0,SP,#+56 \ 000008F4 1D0100EF SWI +285 5782 strcpy(s,t->name); \ 000008F8 141089E2 ADD R1,R9,#+20 \ 000008FC 38008DE2 ADD R0,SP,#+56 \ 00000900 1A0000EF SWI +26 5783 strcat(s,":\n"); \ 00000904 5B1F8FE2 ADR R1,??ProcessPacket_64 ;; ":\n" \ 00000908 38008DE2 ADD R0,SP,#+56 \ 0000090C 170000EF SWI +23 5784 i=strlen(s); \ 00000910 38008DE2 ADD R0,SP,#+56 \ 00000914 1B0000EF SWI +27 5785 j=p->data[0]; \ 00000918 0860D4E5 LDRB R6,[R4, #+8] \ 0000091C 0070A0E1 MOV R7,R0 5786 if (j>(255-i)) j=255-i; \ 00000920 FF0067E2 RSB R0,R7,#+255 \ 00000924 060050E1 CMP R0,R6 \ 00000928 0060A0B1 MOVLT R6,R0 5787 strncpy(s+i,p->data+1,j); \ 0000092C 0620A0E1 MOV R2,R6 \ 00000930 091084E2 ADD R1,R4,#+9 \ 00000934 38008DE2 ADD R0,SP,#+56 \ 00000938 000087E0 ADD R0,R7,R0 \ 0000093C 160100EF SWI +278 5788 i+=j; \ 00000940 070086E0 ADD R0,R6,R7 5789 if (i<255) \ 00000944 FF0050E3 CMP R0,#+255 \ 00000948 100000AA BGE ??ProcessPacket_65 5790 { 5791 s[i]='\n'; \ 0000094C 38108DE2 ADD R1,SP,#+56 \ 00000950 0A20A0E3 MOV R2,#+10 \ 00000954 0120C0E7 STRB R2,[R0, +R1] 5792 i++; \ 00000958 0810D4E5 LDRB R1,[R4, #+8] \ 0000095C B620D4E1 LDRH R2,[R4, #+6] \ 00000960 010080E2 ADD R0,R0,#+1 5793 j=p->pkt.data_len-p->data[0]-1; 5794 if (j>(255-i)) j=255-i; 5795 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000964 38308DE2 ADD R3,SP,#+56 \ 00000968 012042E0 SUB R2,R2,R1 \ 0000096C 016042E2 SUB R6,R2,#+1 \ 00000970 FF2060E2 RSB R2,R0,#+255 \ 00000974 060052E1 CMP R2,R6 \ 00000978 0260A0B1 MOVLT R6,R2 \ 0000097C 0620A0E1 MOV R2,R6 \ 00000980 041081E0 ADD R1,R1,R4 \ 00000984 091081E2 ADD R1,R1,#+9 \ 00000988 030080E0 ADD R0,R0,R3 \ 0000098C 160100EF SWI +278 5796 } 5797 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 5798 //if (!edchat_id && // Только если редактор не наверху 5799 // strlen(p->data)) // и x-status не пустой 5800 // ShowMSG(0,(int)s); 5801 5802 /* 5803 #ifdef EVILFOX 5804 #else 5805 if (!edchat_id) ShowMSG(0,(int)s); // Только если редактор не наверху 5806 #endif 5807 */ 5808 zeromem(s,256); \ ??ProcessPacket_65: \ 00000990 401FA0E3 MOV R1,#+256 \ 00000994 38008DE2 ADD R0,SP,#+56 \ 00000998 1D0100EF SWI +285 5809 i=0; 5810 j=p->data[0]; \ 0000099C 0860D4E5 LDRB R6,[R4, #+8] 5811 if (j>(255-i)) j=255-i; 5812 strncpy(s,p->data+1,j); \ 000009A0 091084E2 ADD R1,R4,#+9 \ 000009A4 38008DE2 ADD R0,SP,#+56 \ 000009A8 400F56E3 CMP R6,#+256 \ 000009AC FF60A0A3 MOVGE R6,#+255 \ 000009B0 0620A0E1 MOV R2,R6 \ 000009B4 160100EF SWI +278 5813 i+=j; 5814 if (i<255) \ 000009B8 FF0056E3 CMP R6,#+255 \ 000009BC 100000AA BGE ??ProcessPacket_66 5815 { 5816 s[i++]=13; \ 000009C0 38108DE2 ADD R1,SP,#+56 \ 000009C4 0D20A0E3 MOV R2,#+13 \ 000009C8 0120C6E7 STRB R2,[R6, +R1] \ 000009CC 0810D4E5 LDRB R1,[R4, #+8] \ 000009D0 B620D4E1 LDRH R2,[R4, #+6] \ 000009D4 010086E2 ADD R0,R6,#+1 5817 j=p->pkt.data_len-p->data[0]-1; 5818 if (j>(255-i)) j=255-i; 5819 strncpy(s+i,p->data+p->data[0]+1,j); \ 000009D8 38308DE2 ADD R3,SP,#+56 \ 000009DC 012042E0 SUB R2,R2,R1 \ 000009E0 016042E2 SUB R6,R2,#+1 \ 000009E4 FF2060E2 RSB R2,R0,#+255 \ 000009E8 060052E1 CMP R2,R6 \ 000009EC 0260A0B1 MOVLT R6,R2 \ 000009F0 0620A0E1 MOV R2,R6 \ 000009F4 041081E0 ADD R1,R1,R4 \ 000009F8 091081E2 ADD R1,R1,#+9 \ 000009FC 030080E0 ADD R0,R0,R3 \ 00000A00 160100EF SWI +278 5820 } 5821 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_66: \ 00000A04 0100A0E3 MOV R0,#+1 \ 00000A08 01002DE9 PUSH {R0} \ 00000A0C 0310A0E3 MOV R1,#+3 \ 00000A10 000060E2 RSB R0,R0,#+0 \ 00000A14 01002DE9 PUSH {R0} \ 00000A18 40208DE2 ADD R2,SP,#+64 \ 00000A1C A400A0E3 MOV R0,#+164 \ 00000A20 A00E80E3 ORR R0,R0,#0xA00 \ 00000A24 053080E0 ADD R3,R0,R5 \ 00000A28 0900A0E1 MOV R0,R9 \ 00000A2C ........ BL AddStringToLog 5822 ReqAddMsgToChat(t); \ 00000A30 0900A0E1 MOV R0,R9 \ 00000A34 ........ BL ReqAddMsgToChat 5823 if (strlen(p->data)) // Если x-status не пустой \ 00000A38 080084E2 ADD R0,R4,#+8 \ 00000A3C 1B0000EF SWI +27 \ 00000A40 000050E3 CMP R0,#+0 \ 00000A44 08D08DE2 ADD SP,SP,#+8 5824 RecountMenu(t, 1); \ 00000A48 0110A013 MOVNE R1,#+1 \ 00000A4C 0900A011 MOVNE R0,R9 \ 00000A50 9EFDFF1A BNE ??ProcessPacket_9 5825 else 5826 RecountMenu(NULL, 0); \ 00000A54 0010A0E3 MOV R1,#+0 \ 00000A58 0100A0E1 MOV R0,R1 \ 00000A5C 9BFDFFEA B ??ProcessPacket_9 5827 } 5828 break; 5829 case T_LASTPRIVACY: 5830 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_67: \ 00000A60 0800D4E5 LDRB R0,[R4, #+8] \ 00000A64 800287E5 STR R0,[R7, #+640] 5831 break; 5832 } 5833 mfree(p); \ ??ProcessPacket_2: \ 00000A68 0400A0E1 MOV R0,R4 \ 00000A6C 150000EF SWI +21 5834 } \ 00000A70 58DF8DE2 ADD SP,SP,#+352 \ 00000A74 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_64: \ 00000A78 3A0A0000 DC8 ":\n",+0 5835 5836 5837 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 5838 void process_active_timer(void) 5839 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5840 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable94 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 940295E5 LDR R0,[R5, #+660] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 5841 { 5842 if (++tenseconds_to_ping>12) \ 00000018 D00295E5 LDR R0,[R5, #+720] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 D00285E5 STR R0,[R5, #+720] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 5843 { 5844 tenseconds_to_ping=0; 5845 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 D04285E5 STR R4,[R5, #+720] \ 00000034 710100EF SWI +369 5846 } 5847 } 5848 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable97 ;; `?ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000008 ........ LDR R7,??DataTable97 ;; `?ws1,"\nLoading images..."); 5885 5886 if(total_smiles) \ 000001B4 94019FE5 LDR R0,??method0_0+0x8 ;; total_smiles \ 000001B8 001090E5 LDR R1,[R0, #+0] \ 000001BC 18D08DE2 ADD SP,SP,#+24 \ 000001C0 000051E3 CMP R1,#+0 \ 000001C4 0300000A BEQ ??method0_2 5887 { 5888 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001C8 002090E5 LDR R2,[R0, #+0] \ 000001CC 300094E5 LDR R0,[R4, #+48] \ 000001D0 E41F87E2 ADD R1,R7,#+912 \ 000001D4 160200EF SWI +534 5889 } 5890 if (xstatuses_load) \ ??method0_2: \ 000001D8 74019FE5 LDR R0,??method0_0+0xC ;; xstatuses_load \ 000001DC 000090E5 LDR R0,[R0, #+0] \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 0400000A BEQ ??method0_1 5891 { 5892 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001E8 ........ LDR R0,??DataTable99 ;; total_xstatuses \ 000001EC E91F87E2 ADD R1,R7,#+932 \ 000001F0 002090E5 LDR R2,[R0, #+0] \ 000001F4 300094E5 LDR R0,[R4, #+48] \ 000001F8 160200EF SWI +534 5893 } 5894 } 5895 #ifdef kluchnik 5896 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5897 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5898 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 5899 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5900 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5901 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 5902 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5903 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5904 int y=140; 5905 char A[]="[A] %s"; 5906 char I[]="[I]"; 5907 char V[]="[V]"; 5908 char S[]="[S]"; 5909 // char Vr[]="[Vr]; 5910 if(CurrentPrivateStatus==1) 5911 { 5912 wsprintf(data->ws2,I); 5913 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5914 y+=GetFontYSIZE(11)+5; 5915 } 5916 5917 if(Is_Vibra_Enabled) 5918 { 5919 wsprintf(data->ws2,V); 5920 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5921 y+=GetFontYSIZE(11)+5; 5922 } 5923 5924 if(Is_Sounds_Enabled) 5925 { 5926 wsprintf(data->ws2,S); 5927 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5928 y+=GetFontYSIZE(11)+5; 5929 } 5930 5931 if(Is_Double_Vibra_On) 5932 { 5933 wsprintf(data->ws2,"[Vr]"); 5934 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5935 } 5936 5937 if(away_m) 5938 { 5939 wsprintf(data->ws2,A,away_msg_time_dace); 5940 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5941 y+=GetFontYSIZE(11)+5; 5942 } 5943 5944 //wsprintf(data->ws2,percent_s,onlineTime); 5945 // onlineTime 5946 if(connect_state==3) 5947 { 5948 wsprintf(data->ws2,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 5949 } 5950 else 5951 wsprintf(data->ws2,"Offline"); 5952 DrawString(data->ws2,1,scr_h-4-3*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 5953 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5954 5955 #else 5956 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5957 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_1: \ 000001FC 1700A0E3 MOV R0,#+23 \ 00000200 2E0100EF SWI +302 \ 00000204 0080A0E1 MOV R8,R0 \ 00000208 0000A0E3 MOV R0,#+0 \ 0000020C 2E0100EF SWI +302 \ 00000210 0090A0E1 MOV R9,R0 \ 00000214 0300A0E3 MOV R0,#+3 \ 00000218 C50100EF SWI +453 \ 0000021C 04109DE5 LDR R1,[SP, #+4] \ 00000220 00012DE9 PUSH {R8} \ 00000224 04A041E2 SUB R10,R1,#+4 \ 00000228 00022DE9 PUSH {R9} \ 0000022C 0010A0E3 MOV R1,#+0 \ 00000230 02002DE9 PUSH {R1} \ 00000234 04B045E2 SUB R11,R5,#+4 \ 00000238 00004BE0 SUB R0,R11,R0 \ 0000023C 0A30A0E1 MOV R3,R10 \ 00000240 0710A0E3 MOV R1,#+7 \ 00000244 02002DE9 PUSH {R1} \ 00000248 01002DE9 PUSH {R0} \ 0000024C 300094E5 LDR R0,[R4, #+48] \ 00000250 0320A0E3 MOV R2,#+3 \ 00000254 0310A0E3 MOV R1,#+3 \ 00000258 4C0100EF SWI +332 5958 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 0000025C BC0296E5 LDR R0,[R6, #+700] \ 00000260 14D08DE2 ADD SP,SP,#+20 \ 00000264 000050E3 CMP R0,#+0 \ 00000268 340094E5 LDR R0,[R4, #+52] \ 0000026C EE2F8712 ADDNE R2,R7,#+952 \ 00000270 31208702 ADDEQ R2,R7,#+49 \ 00000274 281087E2 ADD R1,R7,#+40 \ 00000278 240100EF SWI +292 5959 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5960 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 0000027C 1700A0E3 MOV R0,#+23 \ 00000280 2E0100EF SWI +302 \ 00000284 0060A0E1 MOV R6,R0 \ 00000288 0000A0E3 MOV R0,#+0 \ 0000028C 2E0100EF SWI +302 \ 00000290 0080A0E1 MOV R8,R0 \ 00000294 0300A0E3 MOV R0,#+3 \ 00000298 C50100EF SWI +453 \ 0000029C 04109DE5 LDR R1,[SP, #+4] \ 000002A0 40002DE9 PUSH {R6} \ 000002A4 C150A0E1 ASR R5,R1,#+1 \ 000002A8 00012DE9 PUSH {R8} \ 000002AC 0410A0E3 MOV R1,#+4 \ 000002B0 02002DE9 PUSH {R1} \ 000002B4 0A30A0E1 MOV R3,R10 \ 000002B8 00204BE0 SUB R2,R11,R0 \ 000002BC 0310A0E3 MOV R1,#+3 \ 000002C0 02002DE9 PUSH {R1} \ 000002C4 0B10A0E1 MOV R1,R11 \ 000002C8 02002DE9 PUSH {R1} \ 000002CC 340094E5 LDR R0,[R4, #+52] \ 000002D0 0510A0E1 MOV R1,R5 \ 000002D4 4C0100EF SWI +332 5961 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 000002D8 340094E5 LDR R0,[R4, #+52] \ 000002DC F02F87E2 ADD R2,R7,#+960 \ 000002E0 281087E2 ADD R1,R7,#+40 \ 000002E4 240100EF SWI +292 5962 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5963 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 000002E8 1700A0E3 MOV R0,#+23 \ 000002EC 2E0100EF SWI +302 \ 000002F0 0060A0E1 MOV R6,R0 \ 000002F4 0000A0E3 MOV R0,#+0 \ 000002F8 2E0100EF SWI +302 \ 000002FC 0070A0E1 MOV R7,R0 \ 00000300 0300A0E3 MOV R0,#+3 \ 00000304 C50100EF SWI +453 \ 00000308 40002DE9 PUSH {R6} \ 0000030C 80002DE9 PUSH {R7} \ 00000310 0110A0E3 MOV R1,#+1 \ 00000314 02002DE9 PUSH {R1} \ 00000318 0530A0E1 MOV R3,R5 \ 0000031C 00204BE0 SUB R2,R11,R0 \ 00000320 0310A0E3 MOV R1,#+3 \ 00000324 02002DE9 PUSH {R1} \ 00000328 0B10A0E1 MOV R1,R11 \ 0000032C 02002DE9 PUSH {R1} \ 00000330 340094E5 LDR R0,[R4, #+52] \ 00000334 0310A0E3 MOV R1,#+3 \ 00000338 4C0100EF SWI +332 \ 0000033C 28D08DE2 ADD SP,SP,#+40 5964 #endif 5965 } \ 00000340 14D08DE2 ADD SP,SP,#+20 \ 00000344 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_0: \ 00000348 ........ DC32 pictures_max \ 0000034C ........ DC32 pictures_loaded \ 00000350 ........ DC32 total_smiles \ 00000354 ........ DC32 xstatuses_load 5966 \ In segment CODE, align 4, keep-with-next 5967 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 5968 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5969 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 300084E5 STR R0,[R4, #+48] 5970 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 340084E5 STR R0,[R4, #+52] 5971 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 5972 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 5973 \ In segment CODE, align 4, keep-with-next 5974 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 5975 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5976 FreeWS(data->ws1); \ 00000008 300094E5 LDR R0,[R4, #+48] \ 0000000C 290100EF SWI +297 5977 FreeWS(data->ws2); \ 00000010 340094E5 LDR R0,[R4, #+52] \ 00000014 290100EF SWI +297 5978 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 5979 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 5980 \ In segment CODE, align 4, keep-with-next 5981 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 5982 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5983 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 5984 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 5985 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 5986 \ In segment CODE, align 4, keep-with-next 5987 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 5988 { 5989 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 5990 return; 5991 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 5992 } \ 00000010 1EFF2FE1 BX LR ;; return 5993 \ In segment CODE, align 4, keep-with-next 5994 int method5(MAIN_GUI *data,GUI_MSG *msg) 5995 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 5996 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 5997 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 9320A0E3 MOV R2,#+147 \ 00000018 F210D0E1 LDRSH R1,[R0, #+2] \ 0000001C 402F82E3 ORR R2,R2,#0x100 \ 00000020 020051E1 CMP R1,R2 \ 00000024 2800001A BNE ??method5_0 5998 { 5999 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R4,??DataTable114 ;; S_ICONS \ 0000002C 040090E5 LDR R0,[R0, #+4] \ 00000030 ........ LDR R5,??DataTable121 ;; create_connect \ 00000034 5810A0E3 MOV R1,#+88 \ 00000038 501D81E3 ORR R1,R1,#0x1400 \ 0000003C 046081E0 ADD R6,R1,R4 \ 00000040 0370A0E3 MOV R7,#+3 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 0600000A BEQ ??method5_1 \ 0000004C 030050E2 SUBS R0,R0,#+3 \ 00000050 0600000A BEQ ??method5_2 \ 00000054 070050E2 SUBS R0,R0,#+7 \ 00000058 0C00000A BEQ ??method5_3 \ 0000005C 250050E2 SUBS R0,R0,#+37 \ 00000060 1200000A BEQ ??method5_4 \ 00000064 070000EA B ??method5_5 6000 { 6001 #ifdef kluchnik 6002 case LEFT_SOFT: 6003 if (cltop) create_contactlist_menu(); 6004 unhooked2=1; 6005 // if (cltop) remake_clmenu(); 6006 break; 6007 case RIGHT_SOFT: 6008 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 6009 #else 6010 case LEFT_SOFT: 6011 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_1: \ 00000068 0100A0E3 MOV R0,#+1 \ 0000006C F280BDE8 POP {R1,R4-R7,PC} 6012 case RIGHT_SOFT: 6013 // if (cltop) remake_clmenu(); 6014 unhooked2=1; \ ??method5_2: \ 00000070 0100A0E3 MOV R0,#+1 \ 00000074 400384E5 STR R0,[R4, #+832] 6015 if (cltop) create_contactlist_menu(); \ 00000078 BC0294E5 LDR R0,[R4, #+700] \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 F280BD08 POPEQ {R1,R4-R7,PC} \ 00000084 ........ BL create_contactlist_menu \ ??method5_5: \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C F280BDE8 POP {R1,R4-R7,PC} 6016 break; 6017 #endif 6018 case GREEN_BUTTON: 6019 disautorecconect=0; \ ??method5_3: \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 6C0284E5 STR R0,[R4, #+620] 6020 if ((connect_state==0)&&(sock==-1)) \ 00000098 940294E5 LDR R0,[R4, #+660] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 98029405 LDREQ R0,[R4, #+664] \ 000000A4 01007003 CMNEQ R0,#+1 \ 000000A8 0700001A BNE ??method5_0 6021 { 6022 GBS_DelTimer(&reconnect_tmr); \ 000000AC 010000EA B ??method5_6 6023 DNR_TRIES=3; 6024 SUBPROC((void *)create_connect); 6025 } 6026 break; 6027 case '0': 6028 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000B0 ........ LDR R0,??DataTable123 ;; end_socket \ 000000B4 710100EF SWI +369 6029 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000B8 0600A0E1 MOV R0,R6 \ 000000BC 8C0100EF SWI +396 6030 DNR_TRIES=3; \ 000000C0 4C7384E5 STR R7,[R4, #+844] 6031 SUBPROC((void *)create_connect); \ 000000C4 0500A0E1 MOV R0,R5 \ 000000C8 710100EF SWI +369 6032 break; 6033 } 6034 } 6035 return(0); \ ??method5_0: \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 F280BDE8 POP {R1,R4-R7,PC} ;; return 6036 } 6037 \ In segment CODE, align 4, keep-with-next 6038 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 6039 \ In segment CODE, align 4, keep-with-next 6040 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 6041 6042 const void * const gui_methods[11]={ 6043 (void *)method0, //Redraw 6044 (void *)method1, //Create 6045 (void *)method2, //Close 6046 (void *)method3, //Focus 6047 (void *)method4, //Unfocus 6048 (void *)method5, //OnKey 6049 0, 6050 (void *)kill_data, //method7, //Destroy 6051 (void *)method8, 6052 (void *)method9, 6053 0 6054 }; 6055 6056 \ In segment CODE, align 4, keep-with-next 6057 int my_keyhook(int key, int m) 6058 { \ my_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6059 if (m==KEY_DOWN) \ 00000004 9300A0E3 MOV R0,#+147 \ 00000008 400F80E3 ORR R0,R0,#0x100 \ 0000000C 000051E1 CMP R1,R0 \ 00000010 0D00001A BNE ??my_keyhook_0 6060 { 6061 if(change_back_status==1) \ 00000014 ........ LDR R5,??DataTable114 ;; S_ICONS \ 00000018 0040A0E3 MOV R4,#+0 \ 0000001C 440295E5 LDR R0,[R5, #+580] \ 00000020 010050E3 CMP R0,#+1 \ 00000024 0300001A BNE ??my_keyhook_1 6062 { 6063 CurrentStatus=status_rem; \ 00000028 400295E5 LDR R0,[R5, #+576] \ 0000002C 7C0285E5 STR R0,[R5, #+636] 6064 set_my_status(); \ 00000030 ........ BL set_my_status 6065 // SUBPROC((void*)WriteDefSettings); 6066 change_back_status=0; \ 00000034 444285E5 STR R4,[R5, #+580] 6067 } 6068 #ifdef EVILFOX 6069 if ((key==VOL_UP_BUTTON)&&(IsIdleUiOnTop())) 6070 { 6071 if(autobot==1) 6072 { 6073 autobot=0; 6074 ShowMSG(1,(int)"Autobot Off"); 6075 } 6076 else 6077 { 6078 autobot=1; 6079 ShowMSG(1,(int)"Autobot On"); 6080 } 6081 } 6082 #endif 6083 #ifdef ELKA 6084 #ifdef EVILFOX 6085 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) 6086 #else 6087 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) 6088 #endif 6089 { 6090 GBS_StopTimer(&away_tmr); 6091 msg_away_timer=AUTO_ENGADE; 6092 away_timer(); 6093 main_d=1; 6094 } 6095 else 6096 { 6097 #endif 6098 if(Reset_timer) \ ??my_keyhook_1: \ 00000038 140195E5 LDR R0,[R5, #+276] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 3080BD08 POPEQ {R4,R5,PC} 6099 { 6100 msg_away_timer=0; \ 00000044 384285E5 STR R4,[R5, #+568] 6101 away_m=0; \ 00000048 3C4285E5 STR R4,[R5, #+572] 6102 } 6103 #ifdef ELKA 6104 } 6105 #endif 6106 } 6107 return 0; \ ??my_keyhook_0: \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 3080BDE8 POP {R4,R5,PC} ;; return 6108 } \ In segment DATA_C, align 4, align-sorted \ `?` \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 `?%s<" \ 00000355 000000 DC8 0, 0, 0 \ 00000358 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 00000360 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 00000368 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 00000370 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 00000378 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 00000380 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 00000388 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 0000038E 0000 DC8 0, 0 \ 00000390 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 000003A2 0000 DC8 0, 0 \ 000003A4 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 000003B7 00 DC8 0 \ 000003B8 434C69737400 DC8 "CList" \ 000003BE 0000 DC8 0, 0 \ 000003C0 4578697400 DC8 "Exit" \ 000003C5 000000 DC8 0, 0, 0 \ 000003C8 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 000003F0 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 000003FB 00 DC8 0 \ 000003FC 49646C655570 DC8 "IdleUpd" \ 6400 \ 00000404 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 0000041B 00 DC8 0 \ 0000041C 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 00000427 00 DC8 0 \ 00000428 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 00000440 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 00000450 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 0000045C 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 00000465 000000 DC8 0, 0, 0 \ 00000468 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 \ 00000490 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 \ 000004B2 0000 DC8 0, 0 \ 000004B4 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 000004D7 00 DC8 0 \ 000004D8 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 000004F7 00 DC8 0 \ 000004F8 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 00000502 0000 DC8 0, 0 \ 00000504 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ 00000518 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 00000525 000000 DC8 0, 0, 0 \ 00000528 526571756573 DC8 "Request info..." \ 7420696E666F \ 2E2E2E00 \ 00000538 C7E0F0FFE420 DC8 "\307\340\360\377\344 \341\340\362\340\360\345\350: %d \357\360\356\366\345\355\362\356\342 \015\012" \ E1E0F2E0F0E5 \ E83A20256420 \ EFF0EEF6E5ED \ F2EEE2200D0A \ 00 \ 00000557 00 DC8 0 \ 00000558 5F5F4F4E4C49 DC8 "__ONLINE" \ 4E4500 \ 00000561 000000 DC8 0, 0, 0 \ 00000564 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000574 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 \ 0000059F 00 DC8 0 \ 000005A0 5F5F504C4154 DC8 "__PLATFORM" \ 464F524D00 \ 000005AB 00 DC8 0 \ 000005AC 4745545F504C DC8 "GET_PLATFORM_INFO" \ 4154464F524D \ 5F494E464F00 \ 000005BE 0000 DC8 0, 0 \ 000005C0 53656E64696E DC8 "Sending platform info..." \ 6720706C6174 \ 666F726D2069 \ 6E666F2E2E2E \ 00 \ 000005D9 000000 DC8 0, 0, 0 \ 000005DC 2573206D6F64 DC8 "%s model: %s" \ 656C3A202573 \ 00 \ 000005E9 000000 DC8 0, 0, 0 \ 000005EC 53657373696F DC8 "Session close, remote access = %d, level = %d" \ 6E20636C6F73 \ 652C2072656D \ 6F7465206163 \ 63657373203D \ 2025642C206C \ 6576656C203D \ 20256400 \ 0000061A 0000 DC8 0, 0 \ 0000061C 237465787469 DC8 "#textinfo" \ 6E666F00 \ 00000626 0000 DC8 0, 0 \ 00000628 547261666669 DC8 54H, 72H, 61H, 66H, 66H, 69H, 63H, 3AH \ 633A \ 00000630 205278203A25 DC8 20H, 52H, 78H, 20H, 3AH, 25H, 64H, 62H \ 6462 \ 00000638 205478203A25 DC8 20H, 54H, 78H, 20H, 3AH, 25H, 64H, 62H \ 6462 \ 00000640 205175657565 DC8 20H, 51H, 75H, 65H, 75H, 65H, 20H, 3AH \ 203A \ 00000648 256462200D0A DC8 25H, 64H, 62H, 20H, 0DH, 0AH, 54H, 69H \ 5469 \ 00000650 6D653A202530 DC8 6DH, 65H, 3AH, 20H, 25H, 30H, 32H, 64H \ 3264 \ 00000658 3A253032640D DC8 3AH, 25H, 30H, 32H, 64H, 0DH, 0AH, 4FH \ 0A4F \ 00000660 6E6C696E6520 DC8 6EH, 6CH, 69H, 6EH, 65H, 20H, 63H, 6FH \ 636F \ 00000668 6E746163743A DC8 6EH, 74H, 61H, 63H, 74H, 3AH, 20H, 25H \ 2025 \ 00000670 64205B746F74 DC8 64H, 20H, 5BH, 74H, 6FH, 74H, 61H, 6CH \ 616C \ 00000678 3A2025645D20 DC8 3AH, 20H, 25H, 64H, 5DH, 20H, 0DH, 0AH \ 0D0A \ 00000680 556E72656164 DC8 55H, 6EH, 72H, 65H, 61H, 64H, 20H, 6DH \ 206D \ 00000688 657373616765 DC8 65H, 73H, 73H, 61H, 67H, 65H, 3AH, 20H \ 3A20 \ 00000690 25642F256420 DC8 25H, 64H, 2FH, 25H, 64H, 20H, 0 \ 00 \ 00000697 00 DC8 0 \ 00000698 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s \015\012" \ EEF03A202573 \ 200D0A00 \ 000006A8 C2F0E5ECFF20 DC8 "\302\360\345\354\377 \342 \356\355\353\340\351\355: %02d:%02d:%02d \015\012\321\345\360\342\345\360: %s \015\012" \ E220EEEDEBE0 \ E9ED3A202530 \ 32643A253032 \ 643A25303264 \ 200D0AD1E5F0 \ E2E5F03A2025 \ 73200D0A00 \ 000006D7 00 DC8 0 \ 000006D8 506C6174666F DC8 "Platform: SGOLD" \ 726D3A205347 \ 4F4C4400 \ 000006E8 2573206D6F64 DC8 "%s model: %s\015\012" \ 656C3A202573 \ 0D0A00 \ 000006F7 00 DC8 0 \ 000006F8 2364697200 DC8 "#dir" \ 000006FD 000000 DC8 0, 0, 0 \ 00000700 5C2A2E2A00 DC8 "\\*.*" \ 00000705 000000 DC8 0, 0, 0 \ 00000708 237475726E6F DC8 "#turnoff" \ 666600 \ 00000711 000000 DC8 0, 0, 0 \ 00000714 236578697400 DC8 "#exit" \ 0000071A 0000 DC8 0, 0 \ 0000071C 237772697465 DC8 "#write" \ 00 \ 00000723 00 DC8 0 \ 00000724 23676574636C DC8 "#getclist" \ 69737400 \ 0000072E 0000 DC8 0, 0 \ 00000730 257320282025 DC8 "%s ( %d ) [%s]\015\012" \ 642029205B25 \ 735D0D0A00 \ 00000741 000000 DC8 0, 0, 0 \ 00000744 4F6E6C696E65 DC8 "Online" \ 00 \ 0000074B 00 DC8 0 \ 0000074C 576F726B00 DC8 "Work" \ 00000751 000000 DC8 0, 0, 0 \ 00000754 4C756E636800 DC8 "Lunch" \ 0000075A 0000 DC8 0, 0 \ 0000075C 486F6D6500 DC8 "Home" \ 00000761 000000 DC8 0, 0, 0 \ 00000764 4576696C00 DC8 "Evil" \ 00000769 000000 DC8 0, 0, 0 \ 0000076C 446570726573 DC8 "Depression" \ 73696F6E00 \ 00000777 00 DC8 0 \ 00000778 4F6363757069 DC8 "Occupied" \ 656400 \ 00000781 000000 DC8 0, 0, 0 \ 00000784 4177617900 DC8 "Away" \ 00000789 000000 DC8 0, 0, 0 \ 0000078C 496E76697361 DC8 "Invisable" \ 626C6500 \ 00000796 0000 DC8 0, 0 \ 00000798 23646973636F DC8 "#disconnect" \ 6E6E65637400 \ 000007A4 2369646C6573 DC8 "#idlescr" \ 637200 \ 000007AD 000000 DC8 0, 0, 0 \ 000007B0 73656E642063 DC8 "send command idlescr" \ 6F6D6D616E64 \ 2069646C6573 \ 637200 \ 000007C5 000000 DC8 0, 0, 0 \ 000007C8 73656E642063 DC8 "send command islescr" \ 6F6D6D616E64 \ 2069736C6573 \ 637200 \ 000007DD 000000 DC8 0, 0, 0 \ 000007E0 2370696B6F66 DC8 "#pikoff" \ 6600 \ 000007E8 464447444647 DC8 "FDGDFGDFGDFGD" \ 444647444647 \ 4400 \ 000007F6 0000 DC8 0, 0 \ 000007F8 2373686F7770 DC8 "#showpwd" \ 776400 \ 00000801 000000 DC8 0, 0, 0 \ 00000804 596F75722061 DC8 "Your accsess level has been = 0" \ 636373657373 \ 206C6576656C \ 206861732062 \ 65656E203D20 \ 3000 \ 00000824 706173732073 DC8 "pass show" \ 686F7700 \ 0000082E 0000 DC8 0, 0 \ 00000830 CDE520E7E0E1 DC8 "\315\345 \347\340\341\373\342\340\351\362\345 \342\340\370 \357\340\361\361: %s!!!!" \ FBE2E0E9F2E5 \ 20E2E0F820EF \ E0F1F13A2025 \ 732121212100 \ 0000084E 0000 DC8 0, 0 \ 00000850 237669627261 DC8 "#vibra" \ 00 \ 00000857 00 DC8 0 \ 00000858 766962726120 DC8 "vibra start" \ 737461727400 \ 00000864 236563686F00 DC8 "#echo" \ 0000086A 0000 DC8 0, 0 \ 0000086C 4861636B6572 DC8 "Hacker" \ 00 \ 00000873 00 DC8 0 \ 00000874 236563686F63 DC8 "#echochat" \ 68617400 \ 0000087E 0000 DC8 0, 0 \ 00000880 4D6573732073 DC8 "Mess send: %s" \ 656E643A2025 \ 7300 \ 0000088E 0000 DC8 0, 0 \ 00000890 53657373696F DC8 53H, 65H, 73H, 73H, 69H, 6FH, 6EH, 20H \ 6E20 \ 00000898 73746172742C DC8 73H, 74H, 61H, 72H, 74H, 2CH, 20H, 72H \ 2072 \ 000008A0 656D6F746520 DC8 65H, 6DH, 6FH, 74H, 65H, 20H, 61H, 63H \ 6163 \ 000008A8 63657373203D DC8 63H, 65H, 73H, 73H, 20H, 3DH, 20H, 25H \ 2025 \ 000008B0 64206C657665 DC8 64H, 20H, 6CH, 65H, 76H, 65H, 6CH, 20H \ 6C20 \ 000008B8 616363657373 DC8 61H, 63H, 63H, 65H, 73H, 73H, 20H, 3DH \ 203D \ 000008C0 20256400 DC8 20H, 25H, 64H, 0 \ 000008C4 31373A31333A DC8 "17:13:52" \ 353200 \ 000008CD 000000 DC8 0, 0, 0 \ 000008D0 417072202037 DC8 "Apr 7 2008" \ 203230303800 \ 000008DC 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 000008E4 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 2CH, 6BH \ 2C6B \ 000008EC 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 2CH \ 6B2C \ 000008F4 77696E646573 DC8 77H, 69H, 6EH, 64H, 65H, 73H, 20H, 62H \ 2062 \ 000008FC 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 00000904 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 0000090C 20323035382C DC8 20H, 32H, 30H, 35H, 38H, 2CH, 20H, 6DH \ 206D \ 00000914 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 0000091C 202573206174 DC8 20H, 25H, 73H, 20H, 61H, 74H, 20H, 25H \ 2025 \ 00000924 732000 DC8 73H, 20H, 0 \ 00000927 00 DC8 0 \ 00000928 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ 00000934 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000948 257325642E77 DC8 "%s%d.wav" \ 617600 \ 00000951 000000 DC8 0, 0, 0 \ 00000954 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 0000095E 0000 DC8 0, 0 \ 00000960 75696E256400 DC8 "uin%d" \ 00000966 0000 DC8 0, 0 \ 00000968 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000970 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 0000097B 00 DC8 0 \ 0000097C 426164207061 DC8 "Bad packet" \ 636B657400 \ 00000987 00 DC8 0 \ 00000988 EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 0000098F 00 DC8 0 \ 00000990 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 00000998 2563257400 DC8 "%c%t" \ 0000099D 000000 DC8 0, 0, 0 \ 000009A0 3E3E20257320 DC8 ">> %s <<" \ 3C3C00 \ 000009A9 000000 DC8 0, 0, 0 \ 000009AC 53686F772074 DC8 "Show time" \ 696D6500 \ 000009B6 0000 DC8 0, 0 \ 000009B8 53686F772078 DC8 "Show x-status" \ 2D7374617475 \ 7300 \ 000009C6 0000 DC8 0, 0 \ 000009C8 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 000009D6 0000 DC8 0, 0 \ 000009D8 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 000009E5 000000 DC8 0, 0, 0 \ 000009E8 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 000009F7 00 DC8 0 \ 000009F8 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 00000A06 0000 DC8 0, 0 \ 00000A08 566962726120 DC8 "Vibra Off" \ 4F666600 \ 00000A12 0000 DC8 0, 0 \ 00000A14 566962726120 DC8 "Vibra On" \ 4F6E00 \ 00000A1D 000000 DC8 0, 0, 0 \ 00000A20 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 00000A2A 0000 DC8 0, 0 \ 00000A2C 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 00000A35 000000 DC8 0, 0, 0 \ 00000A38 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 00000A5B 00 DC8 0 \ 00000A5C 4F66666C696E DC8 "Offline" \ 6500 \ 00000A64 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 00000A7B 00 DC8 0 \ ipc_my_name: \ 00000A7C 4E6174494351 DC8 "NatICQ" \ 00 \ 00000A83 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A93 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 00000A9C 585461736B00 DC8 "XTask" \ 00000AA2 0000 DC8 0, 0 \ x_status_change: \ 00000AA4 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ gui_methods: \ 00000AB4 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 00000AD0 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ In segment DATA_C, align 4, align-sorted \ ipc_test_name: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 070000006400 DC32 7, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345:\012" \ EDE8E53A0A00 \ input_awaymsg_hdr: \ 00000044 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 0000004C 00000000.... DC32 0H, `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ clmenu_sk: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 clmenu_sk_r \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ clmenu_skt: \ 00000000 ........0000 DC32 clmenu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ _skt: \ 00000000 ........0000 DC32 _sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ CmdSoftkeys: \ 00000000 000000000100 DC32 0, 1, 2 \ 000002000000 \ In segment DATA_C, align 4, align-sorted \ cmd_sk: \ 00000000 04000000 DC16 4, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ cmd_Back_skt: \ 00000000 ........0000 DC32 cmd_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 46494C45204E DC8 "FILE NOT FOUND!" \ 4F5420464F55 \ 4E442100 \ 00000010 53656C656374 DC8 "Select command" \ 20636F6D6D61 \ 6E6400 \ 0000001F 00 DC8 0 \ 00000020 08000000.... DC32 8, CmdMenuKeyHook, CmdMenuGHook, 0H, CmdSoftkeys, cmd_Back_skt, 16 \ ............ \ 00000000.... \ ............ \ 10000000 \ 0000003C ........0000 DC32 CmdMenuItemHandler, 0H, 0H, 0 \ 000000000000 \ 00000000 \ 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 6111 \ In segment CODE, align 4, keep-with-next 6112 void maincsm_oncreate(CSM_RAM *data) 6113 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 6114 // UpdateConfig(); 6115 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 3C00A0E3 MOV R0,#+60 6116 MAIN_CSM*csm=(MAIN_CSM*)data; 6117 zeromem(main_gui,sizeof(MAIN_GUI)); 6118 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 0000000C 0070A0E3 MOV R7,#+0 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 3C10A0E3 MOV R1,#+60 \ 0000001C 1D0100EF SWI +285 \ 00000020 898100EF SWI +33161 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 011044E2 SUB R1,R4,#+1 \ 00000030 ........ LDR R4,??DataTable117 ;; `?gui.canvas=(void *)(&Canvas); \ 00000044 100084E2 ADD R0,R4,#+16 \ 00000048 000086E5 STR R0,[R6, #+0] 6120 // main_gui->gui.flag30=2; 6121 main_gui->gui.methods=(void *)gui_methods; \ 0000004C B400A0E3 MOV R0,#+180 \ 00000050 A00E80E3 ORR R0,R0,#0xA00 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 040086E5 STR R0,[R6, #+4] 6122 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000005C 158000EF SWI +32789 \ 00000060 1C0086E5 STR R0,[R6, #+28] 6123 csm->csm.state=0; \ 00000064 107085E5 STR R7,[R5, #+16] 6124 csm->csm.unk1=0; \ 00000068 147085E5 STR R7,[R5, #+20] 6125 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,??DataTable114 ;; S_ICONS \ 0000007C 1C0285E5 STR R0,[R5, #+540] 6126 ews=AllocWS(16384); \ 00000080 400CA0E3 MOV R0,#+16384 \ 00000084 250100EF SWI +293 \ 00000088 300285E5 STR R0,[R5, #+560] 6127 // MutexCreate(&contactlist_mtx); 6128 DNR_TRIES=3; \ 0000008C 0300A0E3 MOV R0,#+3 \ 00000090 4C0385E5 STR R0,[R5, #+844] 6129 // SUBPROC((void *)InitSmiles); 6130 // SUBPROC((void *)create_connect); 6131 wsBuffer=AllocWS(10240); \ 00000094 A00DA0E3 MOV R0,#+10240 \ 00000098 250100EF SWI +293 6132 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 0000009C ........ LDR R2,??DataTable106 ;; process_active_timer \ 000000A0 F40185E5 STR R0,[R5, #+500] \ 000000A4 871EA0E3 MOV R1,#+2160 \ 000000A8 6800A0E3 MOV R0,#+104 \ 000000AC 500D80E3 ORR R0,R0,#0x1400 \ 000000B0 050080E0 ADD R0,R0,R5 \ 000000B4 4D0000EF SWI +77 6133 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000B8 282195E5 LDR R2,[R5, #+296] \ 000000BC 2E1084E2 ADD R1,R4,#+46 \ 000000C0 8200A0E3 MOV R0,#+130 \ 000000C4 A00E80E3 ORR R0,R0,#0xA00 \ 000000C8 040080E0 ADD R0,R0,R4 \ 000000CC 160000EF SWI +22 6134 gipc.name_to=ipc_my_name; \ 000000D0 7C00A0E3 MOV R0,#+124 \ 000000D4 A00E80E3 ORR R0,R0,#0xA00 \ 000000D8 041080E0 ADD R1,R0,R4 \ 000000DC 881085E5 STR R1,[R5, #+136] 6135 gipc.name_from=ipc_my_name; \ 000000E0 040080E0 ADD R0,R0,R4 \ 000000E4 8C0085E5 STR R0,[R5, #+140] 6136 gipc.data=(void *)-1; \ 000000E8 0700E0E1 MVN R0,R7 \ 000000EC 900085E5 STR R0,[R5, #+144] 6137 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000F0 883085E2 ADD R3,R5,#+136 \ 000000F4 0120A0E3 MOV R2,#+1 \ 000000F8 F210A0E3 MOV R1,#+242 \ 000000FC C01F81E3 ORR R1,R1,#0x300 \ 00000100 0900A0E3 MOV R0,#+9 \ 00000104 420C80E3 ORR R0,R0,#0x4200 \ 00000108 000100EF SWI +256 6138 /* 6139 InitXStatusesImg(); 6140 //InitSmiles(); Это вызовется из InitXStatusesImg 6141 create_connect(); 6142 silenthide=1; 6143 gipc.name_to=ipc_xtask_name; 6144 gipc.name_from=ipc_my_name; 6145 gipc.data=0; 6146 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 6147 */ 6148 } \ 0000010C F080BDE8 POP {R4-R7,PC} ;; return 6149 \ In segment CODE, align 4, keep-with-next 6150 void maincsm_onclose(CSM_RAM *csm) 6151 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 6152 WriteDefSettings(); 6153 FreeWS(wsBuffer); \ 00000004 ........ LDR R4,??DataTable114 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C F40194E5 LDR R0,[R4, #+500] \ 00000010 290100EF SWI +297 6154 // SaveConfigData(successed_config_filename); 6155 6156 /* 6157 #pragma segment="CONFIG_C" 6158 unsigned int ul; 6159 int f; 6160 extern const CFG_HDR cfghdr0; //first var in CONFIG 6161 void *cfg=(void*)&cfghdr0; 6162 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 6163 6164 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 6165 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 6166 } 6167 fwrite(f,cfg,len,&ul); 6168 fclose(f,&ul); 6169 */ 6170 6171 // GBS_DelTimer(&tmr_dorecv); 6172 RemoveKeybMsgHook((void *)my_keyhook); \ 00000014 ........ LDR R0,??DataTable130 ;; my_keyhook \ 00000018 2D0100EF SWI +301 6173 GBS_DelTimer(&tmr_active); \ 0000001C 6800A0E3 MOV R0,#+104 \ 00000020 500D80E3 ORR R0,R0,#0x1400 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 6174 GBS_DelTimer(&tmr_vibra); \ 0000002C 4800A0E3 MOV R0,#+72 \ 00000030 500D80E3 ORR R0,R0,#0x1400 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 6175 GBS_DelTimer(&reconnect_tmr); \ 0000003C 5800A0E3 MOV R0,#+88 \ 00000040 500D80E3 ORR R0,R0,#0x1400 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 6176 GBS_DelTimer(&tmr_illumination); \ 0000004C 3800A0E3 MOV R0,#+56 \ 00000050 500D80E3 ORR R0,R0,#0x1400 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 6177 GBS_DelTimer(&mytmr); \ 0000005C 3800A0E3 MOV R0,#+56 \ 00000060 480D80E3 ORR R0,R0,#0x1200 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 6178 GBS_DelTimer(&mytmr2); \ 0000006C 4800A0E3 MOV R0,#+72 \ 00000070 480D80E3 ORR R0,R0,#0x1200 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 8C0100EF SWI +396 6179 GBS_DelTimer(&mytmr3); \ 0000007C FA0E84E2 ADD R0,R4,#+4000 \ 00000080 8C0100EF SWI +396 6180 GBS_DelTimer(&mytmr4); \ 00000084 5800A0E3 MOV R0,#+88 \ 00000088 480D80E3 ORR R0,R0,#0x1200 \ 0000008C 040080E0 ADD R0,R0,R4 \ 00000090 8C0100EF SWI +396 6181 GBS_DelTimer(&statusTmr); \ 00000094 C800A0E3 MOV R0,#+200 \ 00000098 500D80E3 ORR R0,R0,#0x1400 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 8C0100EF SWI +396 6182 #ifdef NEWSGOLD 6183 GBS_DelTimer(&tracktmr); 6184 #endif 6185 GBS_DelTimer(&scrsTmr); \ 000000A4 B000A0E3 MOV R0,#+176 \ 000000A8 400D80E3 ORR R0,R0,#0x1000 \ 000000AC 040080E0 ADD R0,R0,R4 \ 000000B0 8C0100EF SWI +396 6186 GBS_DelTimer(&incs2); \ 000000B4 2800A0E3 MOV R0,#+40 \ 000000B8 4C0D80E3 ORR R0,R0,#0x1300 \ 000000BC 040080E0 ADD R0,R0,R4 \ 000000C0 8C0100EF SWI +396 6187 GBS_DelTimer(&develop); \ 000000C4 2400A0E3 MOV R0,#+36 \ 000000C8 5C0D80E3 ORR R0,R0,#0x1700 \ 000000CC 040080E0 ADD R0,R0,R4 \ 000000D0 8C0100EF SWI +396 6188 GBS_DelTimer(&away_tmr); \ 000000D4 2800A0E3 MOV R0,#+40 \ 000000D8 480D80E3 ORR R0,R0,#0x1200 \ 000000DC 040080E0 ADD R0,R0,R4 \ 000000E0 8C0100EF SWI +396 6189 SetVibration(0); \ 000000E4 0000A0E3 MOV R0,#+0 \ 000000E8 7C0000EF SWI +124 6190 FreeTemplates(); \ 000000EC ........ BL FreeTemplates 6191 #ifdef kluchnik 6192 FreeBotMessage(); 6193 #endif 6194 FreeCLIST(); \ 000000F0 ........ _BLF FreeCLIST,??FreeCLIST??rA 6195 free_ICONS(); \ 000000F4 ........ BL free_ICONS 6196 // FreeSmiles(); 6197 FreeWS(ews); \ 000000F8 300294E5 LDR R0,[R4, #+560] \ 000000FC 290100EF SWI +297 6198 FreeXStatusText(); \ 00000100 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 6199 // MutexDestroy(&contactlist_mtx); 6200 SUBPROC((void *)FreeSmiles); \ 00000104 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 00000108 710100EF SWI +369 6201 SUBPROC((void *)FreeXStatusesImg); \ 0000010C 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 00000110 710100EF SWI +369 6202 SUBPROC((void *)end_socket); \ 00000114 ........ LDR R0,??DataTable123 ;; end_socket \ 00000118 710100EF SWI +369 6203 SUBPROC((void *)ClearSendQ); \ 0000011C ........ LDR R0,??DataTable124 ;; ClearSendQ \ 00000120 710100EF SWI +369 6204 SUBPROC((void *)ElfKiller); \ 00000124 ........ LDR R0,??DataTable128 ;; ElfKiller \ 00000128 710100EF SWI +369 6205 } \ 0000012C 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000130 ........ DC32 FreeSmiles \ 00000134 ........ DC32 FreeXStatusesImg 6206 \ In segment CODE, align 4, keep-with-next 6207 void do_reconnect(void) 6208 { 6209 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable114 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 B41290E5 LDR R1,[R0, #+692] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 6210 { 6211 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 4C1380E5 STR R1,[R0, #+844] 6212 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable121 ;; create_connect \ 00000020 710100EF SWI +369 6213 } 6214 } \ 00000024 0080BDE8 POP {PC} ;; return 6215 \ In segment CODE, align 4, keep-with-next 6216 void CheckDoubleRun(void) 6217 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 6218 int csm_id; 6219 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable114 ;; S_ICONS \ 00000008 900094E5 LDR R0,[R4, #+144] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1400000A BEQ ??CheckDoubleRun_0 6220 { 6221 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable117 ;; `?msg==MSG_IPC) 6285 { 6286 IPC_REQ *ipc; 6287 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 088094E5 LDR R8,[R4, #+8] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 8300000A BEQ ??maincsm_onmessage_2 6288 { 6289 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C 7CA0A0E3 MOV R10,#+124 \ 00000040 A0AE8AE3 ORR R10,R10,#0xA00 \ 00000044 07108AE0 ADD R1,R10,R7 \ 00000048 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 7C00001A BNE ??maincsm_onmessage_2 6290 { 6291 switch (msg->submess) \ 00000054 041094E5 LDR R1,[R4, #+4] \ 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 6292 { 6293 case IPC_CHECK_DOUBLERUN: 6294 //Если приняли свое собственное сообщение, значит запускаем чекер 6295 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 0000007C 07108AE0 ADD R1,R10,R7 \ 00000080 010050E1 CMP R0,R1 \ 00000084 0200001A BNE ??maincsm_onmessage_4 \ 00000088 200A9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000008C 710100EF SWI +369 \ 00000090 6C0000EA B ??maincsm_onmessage_2 6296 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 00000094 180295E5 LDR R0,[R5, #+536] \ 00000098 080088E5 STR R0,[R8, #+8] \ 0000009C 690000EA B ??maincsm_onmessage_2 6297 break; 6298 case IPC_SMILE_PROCESSED: 6299 //Только собственные смайлы ;) 6300 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000A0 07108AE0 ADD R1,R10,R7 \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 0100001A BNE ??maincsm_onmessage_7 \ 000000AC 000A9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000B0 710100EF SWI +369 6301 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000B4 ........ BL SMART_REDRAW \ 000000B8 620000EA B ??maincsm_onmessage_2 6302 break; 6303 case IPC_XSTATUSIMG_PROCESSED: 6304 //Только собственные иксстатусы ;) 6305 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_9: \ 000000BC 07108AE0 ADD R1,R10,R7 \ 000000C0 010050E1 CMP R0,R1 \ 000000C4 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000C8 E8099FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000CC F7FFFFEA B ??maincsm_onmessage_8 6306 SMART_REDRAW(); 6307 break; 6308 case IPC_GAME: 6309 { 6310 6311 } 6312 break; 6313 case IPC_TENSECONDS: 6314 //Только свое сообщение 6315 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000D0 07108AE0 ADD R1,R10,R7 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 5A00001A BNE ??maincsm_onmessage_2 6316 { 6317 CLIST *t=(CLIST *)cltop; \ 000000DC BC8295E5 LDR R8,[R5, #+700] 6318 int f=0; \ 000000E0 00A0A0E3 MOV R10,#+0 \ 000000E4 000058E3 CMP R8,#+0 \ 000000E8 2500000A BEQ ??maincsm_onmessage_11 6319 while(t) 6320 { 6321 if(t->just_now) \ ??maincsm_onmessage_12: \ 000000EC 680098E5 LDR R0,[R8, #+104] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0200000A BEQ ??maincsm_onmessage_13 6322 { 6323 if (!(--(t->just_now))) f=1; \ 000000F8 010050E2 SUBS R0,R0,#+1 \ 000000FC 680088E5 STR R0,[R8, #+104] \ 00000100 01A0A003 MOVEQ R10,#+1 6324 } 6325 if (t->isactive) \ ??maincsm_onmessage_13: \ 00000104 9C0098E5 LDR R0,[R8, #+156] \ 00000108 000050E3 CMP R0,#+0 \ 0000010C 0C00000A BEQ ??maincsm_onmessage_14 6326 { 6327 if (!(--(t->isactive))) \ 00000110 010050E2 SUBS R0,R0,#+1 \ 00000114 9C0088E5 STR R0,[R8, #+156] \ 00000118 0900001A BNE ??maincsm_onmessage_14 6328 { 6329 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 6330 if ((t->log)&&(!t->isunread)) \ 0000011C 900098E5 LDR R0,[R8, #+144] \ 00000120 01A0A0E3 MOV R10,#+1 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0500000A BEQ ??maincsm_onmessage_14 \ 0000012C 800098E5 LDR R0,[R8, #+128] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0200001A BNE ??maincsm_onmessage_14 6331 { 6332 FreeLOGQ(&t->log); \ 00000138 900088E2 ADD R0,R8,#+144 \ 0000013C ........ BL FreeLOGQ 6333 t->msg_count=0; \ 00000140 A06088E5 STR R6,[R8, #+160] 6334 } 6335 } 6336 } 6337 t=(CLIST *)(t->next); \ ??maincsm_onmessage_14: \ 00000144 008098E5 LDR R8,[R8, #+0] 6338 } \ 00000148 000058E3 CMP R8,#+0 \ 0000014C E6FFFF1A BNE ??maincsm_onmessage_12 6339 if (f) \ 00000150 00005AE3 CMP R10,#+0 \ 00000154 0A00000A BEQ ??maincsm_onmessage_11 6340 { 6341 CLIST *oldt=NULL; 6342 if (contactlist_menu_id) \ 00000158 C41295E5 LDR R1,[R5, #+708] \ 0000015C 0000A0E3 MOV R0,#+0 \ 00000160 000051E3 CMP R1,#+0 \ 00000164 0400000A BEQ ??maincsm_onmessage_15 6343 { 6344 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000168 C40295E5 LDR R0,[R5, #+708] \ 0000016C 0010A0E3 MOV R1,#+0 \ 00000170 090200EF SWI +521 \ 00000174 8F0100EF SWI +399 \ 00000178 ........ _BLF FindContactByN,??FindContactByN??rA 6345 } 6346 RecountMenu(oldt,1); \ ??maincsm_onmessage_15: \ 0000017C 0110A0E3 MOV R1,#+1 \ 00000180 ........ BL RecountMenu 6347 } 6348 if (time_to_stop_t9) \ ??maincsm_onmessage_11: \ 00000184 5C0395E5 LDR R0,[R5, #+860] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 2D00000A BEQ ??maincsm_onmessage_2 6349 { 6350 if (!(--time_to_stop_t9)) \ 00000190 010050E2 SUBS R0,R0,#+1 \ 00000194 5C0385E5 STR R0,[R5, #+860] \ 00000198 2A00001A BNE ??maincsm_onmessage_2 6351 { 6352 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 0000019C C80295E5 LDR R0,[R5, #+712] \ 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 6353 } 6354 } 6355 } 6356 break; 6357 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 6358 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 00A0A0E1 MOV R10,R0 6359 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 000001C4 26008AE2 ADD R0,R10,#+38 \ 000001C8 140000EF SWI +20 \ 000001CC 00B0A0E1 MOV R11,R0 6360 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 000001D0 080098E5 LDR R0,[R8, #+8] 6361 msg->pkt.type=T_SENDMSG; 6362 msg->pkt.data_len=l; 6363 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 000001D4 0A20A0E1 MOV R2,R10 \ 000001D8 000090E5 LDR R0,[R0, #+0] \ 000001DC 00008BE5 STR R0,[R11, #+0] \ 000001E0 0200A0E3 MOV R0,#+2 \ 000001E4 B400CBE1 STRH R0,[R11, #+4] \ 000001E8 B6A0CBE1 STRH R10,[R11, #+6] \ 000001EC 080098E5 LDR R0,[R8, #+8] \ 000001F0 041090E5 LDR R1,[R0, #+4] \ 000001F4 08008BE2 ADD R0,R11,#+8 \ 000001F8 1E0100EF SWI +286 6364 //slientsend=1; 6365 if(strstr(msg->data,PASS)==0) \ 000001FC 5400A0E3 MOV R0,#+84 \ 00000200 A00E80E3 ORR R0,R0,#0xA00 \ 00000204 051080E0 ADD R1,R0,R5 \ 00000208 08008BE2 ADD R0,R11,#+8 \ 0000020C 180100EF SWI +280 \ 00000210 000050E3 CMP R0,#+0 \ 00000214 0400000A BEQ ??maincsm_onmessage_17 6366 { 6367 SENDMSGCOUNT++; //Номер сообщения 6368 SUBPROC((void *)SendAnswer,0,msg); 6369 } 6370 else 6371 { 6372 msg->pkt.data_len=40; \ 00000218 2800A0E3 MOV R0,#+40 \ 0000021C B600CBE1 STRH R0,[R11, #+6] 6373 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 00000220 F21F87E2 ADD R1,R7,#+968 \ 00000224 08008BE2 ADD R0,R11,#+8 \ 00000228 1A0000EF SWI +26 6374 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_17: \ 0000022C 200295E5 LDR R0,[R5, #+544] 6375 SUBPROC((void *)SendAnswer,0,msg); \ 00000230 0B20A0E1 MOV R2,R11 \ 00000234 010080E2 ADD R0,R0,#+1 \ 00000238 200285E5 STR R0,[R5, #+544] \ 0000023C ........ LDR R0,??DataTable122 ;; SendAnswer \ 00000240 0010A0E3 MOV R1,#+0 \ 00000244 710100EF SWI +369 6376 } 6377 break; 6378 } 6379 } 6380 } 6381 } 6382 //Нарисуем иконочку моего статуса 6383 //#define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 6384 //CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); 6385 // if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху 6386 // { 6387 void *icsm; 6388 icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 00000248 068100EF SWI +33030 \ 0000024C 040090E5 LDR R0,[R0, #+4] 6389 if (icsm && checkGui(idlegui_id(icsm))) \ 00000250 0180A0E3 MOV R8,#+1 \ 00000254 080100EF SWI +264 \ 00000258 000050E3 CMP R0,#+0 \ 0000025C 0700000A BEQ ??maincsm_onmessage_18 \ 00000260 280090E5 LDR R0,[R0, #+40] \ 00000264 ........ BL checkGui \ 00000268 000050E3 CMP R0,#+0 \ 0000026C 0300000A BEQ ??maincsm_onmessage_18 6390 { 6391 // GUI *igui=GetTopGUI(); 6392 // if (igui) //И он существует 6393 //{ 6394 INC_show=0; \ 00000270 706385E5 STR R6,[R5, #+880] 6395 canvasdata=BuildCanvas(); //void * - belyj fon! \ 00000274 F18000EF SWI +33009 \ 00000278 EC0185E5 STR R0,[R5, #+492] \ 0000027C 000000EA B ??maincsm_onmessage_19 6396 //Тут трохи поменял 6397 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 6398 #ifdef ELKA 6399 if (total_unread) 6400 SLI_On(); 6401 #endif 6402 } 6403 //} 6404 else 6405 { 6406 main_d=1; \ ??maincsm_onmessage_18: \ 00000280 E48185E5 STR R8,[R5, #+484] 6407 } 6408 } 6409 6410 //---------------------------------------------------// 6411 6412 if(msg->msg == MSG_IPC) //kluchnik 26.03.08 \ ??maincsm_onmessage_19: \ 00000284 F200D4E1 LDRSH R0,[R4, #+2] \ 00000288 090050E1 CMP R0,R9 \ 0000028C FC00001A BNE ??maincsm_onmessage_20 6413 { 6414 IPC_REQ *ipc; 6415 void *icsm; 6416 if ((ipc=(IPC_REQ*)msg->data0)) \ 00000290 080094E5 LDR R0,[R4, #+8] \ 00000294 000050E3 CMP R0,#+0 \ 00000298 5801000A BEQ ??maincsm_onmessage_21 6417 { 6418 if (strcmp_nocase(ipc->name_to,"IdleUpd")==0) \ 0000029C 000090E5 LDR R0,[R0, #+0] \ 000002A0 FF1F87E2 ADD R1,R7,#+1020 \ 000002A4 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000002A8 000050E3 CMP R0,#+0 6419 { 6420 switch (msg->submess) \ 000002AC 04009405 LDREQ R0,[R4, #+4] \ 000002B0 00005003 CMPEQ R0,#+0 \ 000002B4 F200001A BNE ??maincsm_onmessage_20 6421 { 6422 case 0: 6423 { 6424 icsm=FindCSMbyID(CSM_root()->idle_id); \ 000002B8 068100EF SWI +33030 \ 000002BC 040090E5 LDR R0,[R0, #+4] \ 000002C0 080100EF SWI +264 6425 if (icsm && checkGui(idlegui_id(icsm))) \ 000002C4 000050E3 CMP R0,#+0 \ 000002C8 ED00000A BEQ ??maincsm_onmessage_20 \ 000002CC 280090E5 LDR R0,[R0, #+40] \ 000002D0 ........ BL checkGui \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 E900000A BEQ ??maincsm_onmessage_20 6426 { 6427 int icn; 6428 if(total_unread) \ 000002DC B80295E5 LDR R0,[R5, #+696] \ 000002E0 000050E3 CMP R0,#+0 6429 icn=IS_MSG; \ 000002E4 0D00A013 MOVNE R0,#+13 \ 000002E8 0500001A BNE ??maincsm_onmessage_22 6430 else 6431 { 6432 switch(connect_state) \ 000002EC 940295E5 LDR R0,[R5, #+660] \ 000002F0 000050E3 CMP R0,#+0 \ 000002F4 0200000A BEQ ??maincsm_onmessage_22 \ 000002F8 030050E2 SUBS R0,R0,#+3 6433 { 6434 case 0: 6435 icn=IS_OFFLINE; break; 6436 case 3: 6437 icn=CurrentStatus; //IS_ONLINE; \ 000002FC 7C029505 LDREQ R0,[R5, #+636] 6438 break; 6439 default: 6440 icn=IS_UNKNOWN; break; \ 00000300 0E00A013 MOVNE R0,#+14 6441 } 6442 } 6443 6444 6445 #ifdef ELKA 6446 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 6447 { 6448 #endif 6449 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 6450 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_22: \ 00000304 009185E0 ADD R9,R5,R0, LSL #+2 \ 00000308 000099E5 LDR R0,[R9, #+0] \ 0000030C 210000EF SWI +33 \ 00000310 00A0A0E1 MOV R10,R0 \ 00000314 000099E5 LDR R0,[R9, #+0] \ 00000318 220000EF SWI +34 \ 0000031C 581195E5 LDR R1,[R5, #+344] \ 00000320 5C2195E5 LDR R2,[R5, #+348] \ 00000324 0130A0E3 MOV R3,#+1 \ 00000328 08002DE9 PUSH {R3} \ 0000032C 010080E0 ADD R0,R0,R1 \ 00000330 02308AE0 ADD R3,R10,R2 \ 00000334 013043E2 SUB R3,R3,#+1 \ 00000338 08002DE9 PUSH {R3} \ 0000033C 013040E2 SUB R3,R0,#+1 \ 00000340 EC0195E5 LDR R0,[R5, #+492] \ 00000344 250000EF SWI +37 6451 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000348 002099E5 LDR R2,[R9, #+0] \ 0000034C 5C1195E5 LDR R1,[R5, #+348] \ 00000350 580195E5 LDR R0,[R5, #+344] \ 00000354 230000EF SWI +35 6452 #ifdef ELKA 6453 } 6454 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 6455 #else 6456 if(show_xstatus==1) //kluchnik 26.03.08 \ 00000358 B80095E5 LDR R0,[R5, #+184] \ 0000035C 08D08DE2 ADD SP,SP,#+8 \ 00000360 010050E3 CMP R0,#+1 \ 00000364 2000001A BNE ??maincsm_onmessage_23 6457 #endif 6458 { 6459 PNGTOP_DESC *pltop=PNG_TOP(); 6460 pltop->dyn_pltop=XStatusesImgList; 6461 DisableIDLETMR(); 6462 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 6463 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 00000368 4C979FE5 LDR R9,??maincsm_onmessage_5+0xC ;; XStatusesIconArray \ 0000036C B98100EF SWI +33209 \ 00000370 ........ LDR R1,??DataTable119 ;; XStatusesImgList \ 00000374 001091E5 LDR R1,[R1, #+0] \ 00000378 081080E5 STR R1,[R0, #+8] \ 0000037C 7F0100EF SWI +383 \ 00000380 2C0295E5 LDR R0,[R5, #+556] \ 00000384 001099E5 LDR R1,[R9, #+0] \ 00000388 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 0000038C 210000EF SWI +33 \ 00000390 001099E5 LDR R1,[R9, #+0] \ 00000394 00A0A0E1 MOV R10,R0 \ 00000398 2C0295E5 LDR R0,[R5, #+556] \ 0000039C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 000003A0 220000EF SWI +34 \ 000003A4 601195E5 LDR R1,[R5, #+352] \ 000003A8 642195E5 LDR R2,[R5, #+356] \ 000003AC 0130A0E3 MOV R3,#+1 \ 000003B0 08002DE9 PUSH {R3} \ 000003B4 010080E0 ADD R0,R0,R1 \ 000003B8 02308AE0 ADD R3,R10,R2 \ 000003BC 013043E2 SUB R3,R3,#+1 \ 000003C0 08002DE9 PUSH {R3} \ 000003C4 013040E2 SUB R3,R0,#+1 \ 000003C8 EC0195E5 LDR R0,[R5, #+492] \ 000003CC 250000EF SWI +37 6464 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 000003D0 2C0295E5 LDR R0,[R5, #+556] \ 000003D4 001099E5 LDR R1,[R9, #+0] \ 000003D8 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 000003DC 641195E5 LDR R1,[R5, #+356] \ 000003E0 600195E5 LDR R0,[R5, #+352] \ 000003E4 230000EF SWI +35 \ 000003E8 08D08DE2 ADD SP,SP,#+8 6465 } 6466 6467 if (main_d==1) \ ??maincsm_onmessage_23: \ 000003EC E40195E5 LDR R0,[R5, #+484] \ 000003F0 010050E3 CMP R0,#+1 \ 000003F4 7F00001A BNE ??maincsm_onmessage_24 6468 { 6469 if(Is_SMARTCPU_On) \ 000003F8 040295E5 LDR R0,[R5, #+516] \ 000003FC 000050E3 CMP R0,#+0 \ 00000400 7B00000A BEQ ??maincsm_onmessage_25 6470 { 6471 if(fonto==1) \ 00000404 040195E5 LDR R0,[R5, #+260] \ 00000408 081195E5 LDR R1,[R5, #+264] \ 0000040C E83195E5 LDR R3,[R5, #+488] \ 00000410 D0C095E5 LDR R12,[R5, #+208] \ 00000414 C8E095E5 LDR LR,[R5, #+200] \ 00000418 F490A0E3 MOV R9,#+244 \ 0000041C 589D89E3 ORR R9,R9,#0x1600 \ 00000420 059089E0 ADD R9,R9,R5 \ 00000424 08908DE5 STR R9,[SP, #+8] \ 00000428 00102DE9 PUSH {R12} \ 0000042C C420A0E3 MOV R2,#+196 \ 00000430 582D82E3 ORR R2,R2,#0x1600 \ 00000434 059082E0 ADD R9,R2,R5 \ 00000438 302042E2 SUB R2,R2,#+48 \ 0000043C 05A082E0 ADD R10,R2,R5 \ 00000440 302042E2 SUB R2,R2,#+48 \ 00000444 05B082E0 ADD R11,R2,R5 \ 00000448 302042E2 SUB R2,R2,#+48 \ 0000044C 052082E0 ADD R2,R2,R5 \ 00000450 01005EE3 CMP LR,#+1 \ 00000454 2E00001A BNE ??maincsm_onmessage_26 6472 { 6473 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 00000458 01C0A0E3 MOV R12,#+1 \ 0000045C 00102DE9 PUSH {R12} \ 00000460 ........ _BLF PrintField,??PrintField??rA 6474 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000464 D00095E5 LDR R0,[R5, #+208] \ 00000468 0B20A0E1 MOV R2,R11 \ 0000046C 01002DE9 PUSH {R0} \ 00000470 C80095E5 LDR R0,[R5, #+200] \ 00000474 01002DE9 PUSH {R0} \ 00000478 F01195E5 LDR R1,[R5, #+496] \ 0000047C E83195E5 LDR R3,[R5, #+488] \ 00000480 080195E5 LDR R0,[R5, #+264] \ 00000484 001081E0 ADD R1,R1,R0 \ 00000488 040195E5 LDR R0,[R5, #+260] \ 0000048C ........ _BLF PrintField,??PrintField??rA 6475 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 00000490 D00095E5 LDR R0,[R5, #+208] \ 00000494 0A20A0E1 MOV R2,R10 \ 00000498 01002DE9 PUSH {R0} \ 0000049C C80095E5 LDR R0,[R5, #+200] \ 000004A0 01002DE9 PUSH {R0} \ 000004A4 F01195E5 LDR R1,[R5, #+496] \ 000004A8 E83195E5 LDR R3,[R5, #+488] \ 000004AC 080195E5 LDR R0,[R5, #+264] \ 000004B0 811080E0 ADD R1,R0,R1, LSL #+1 \ 000004B4 040195E5 LDR R0,[R5, #+260] \ 000004B8 ........ _BLF PrintField,??PrintField??rA 6476 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000004BC D00095E5 LDR R0,[R5, #+208] \ 000004C0 0920A0E1 MOV R2,R9 \ 000004C4 01002DE9 PUSH {R0} \ 000004C8 C80095E5 LDR R0,[R5, #+200] \ 000004CC 01002DE9 PUSH {R0} \ 000004D0 F01195E5 LDR R1,[R5, #+496] \ 000004D4 E83195E5 LDR R3,[R5, #+488] \ 000004D8 080195E5 LDR R0,[R5, #+264] \ 000004DC 811081E0 ADD R1,R1,R1, LSL #+1 \ 000004E0 001081E0 ADD R1,R1,R0 \ 000004E4 040195E5 LDR R0,[R5, #+260] \ 000004E8 ........ _BLF PrintField,??PrintField??rA 6477 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 000004EC D00095E5 LDR R0,[R5, #+208] \ 000004F0 01002DE9 PUSH {R0} \ 000004F4 C80095E5 LDR R0,[R5, #+200] \ 000004F8 01002DE9 PUSH {R0} \ 000004FC F01195E5 LDR R1,[R5, #+496] \ 00000500 E83195E5 LDR R3,[R5, #+488] \ 00000504 30209DE5 LDR R2,[SP, #+48] \ 00000508 080195E5 LDR R0,[R5, #+264] \ 0000050C 011180E0 ADD R1,R0,R1, LSL #+2 \ 00000510 340000EA B ??maincsm_onmessage_27 6478 } 6479 else 6480 { 6481 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_26: \ 00000514 00402DE9 PUSH {LR} \ 00000518 ........ _BLF PrintField,??PrintField??rA 6482 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 0000051C F00195E5 LDR R0,[R5, #+496] \ 00000520 C50100EF SWI +453 \ 00000524 D01095E5 LDR R1,[R5, #+208] \ 00000528 0B20A0E1 MOV R2,R11 \ 0000052C 02002DE9 PUSH {R1} \ 00000530 C81095E5 LDR R1,[R5, #+200] \ 00000534 02002DE9 PUSH {R1} \ 00000538 E83195E5 LDR R3,[R5, #+488] \ 0000053C 081195E5 LDR R1,[R5, #+264] \ 00000540 010080E0 ADD R0,R0,R1 \ 00000544 011080E2 ADD R1,R0,#+1 \ 00000548 040195E5 LDR R0,[R5, #+260] \ 0000054C ........ _BLF PrintField,??PrintField??rA 6483 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 00000550 F00195E5 LDR R0,[R5, #+496] \ 00000554 C50100EF SWI +453 \ 00000558 D01095E5 LDR R1,[R5, #+208] \ 0000055C 0A20A0E1 MOV R2,R10 \ 00000560 02002DE9 PUSH {R1} \ 00000564 C81095E5 LDR R1,[R5, #+200] \ 00000568 02002DE9 PUSH {R1} \ 0000056C E83195E5 LDR R3,[R5, #+488] \ 00000570 081195E5 LDR R1,[R5, #+264] \ 00000574 800081E0 ADD R0,R1,R0, LSL #+1 \ 00000578 021080E2 ADD R1,R0,#+2 \ 0000057C 040195E5 LDR R0,[R5, #+260] \ 00000580 ........ _BLF PrintField,??PrintField??rA 6484 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 00000584 F00195E5 LDR R0,[R5, #+496] \ 00000588 C50100EF SWI +453 \ 0000058C D01095E5 LDR R1,[R5, #+208] \ 00000590 0920A0E1 MOV R2,R9 \ 00000594 02002DE9 PUSH {R1} \ 00000598 C81095E5 LDR R1,[R5, #+200] \ 0000059C 800080E0 ADD R0,R0,R0, LSL #+1 \ 000005A0 02002DE9 PUSH {R1} \ 000005A4 E83195E5 LDR R3,[R5, #+488] \ 000005A8 081195E5 LDR R1,[R5, #+264] \ 000005AC 010080E0 ADD R0,R0,R1 \ 000005B0 031080E2 ADD R1,R0,#+3 \ 000005B4 040195E5 LDR R0,[R5, #+260] \ 000005B8 ........ _BLF PrintField,??PrintField??rA 6485 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 000005BC F00195E5 LDR R0,[R5, #+496] \ 000005C0 C50100EF SWI +453 \ 000005C4 D01095E5 LDR R1,[R5, #+208] \ 000005C8 02002DE9 PUSH {R1} \ 000005CC C81095E5 LDR R1,[R5, #+200] \ 000005D0 02002DE9 PUSH {R1} \ 000005D4 E83195E5 LDR R3,[R5, #+488] \ 000005D8 30209DE5 LDR R2,[SP, #+48] \ 000005DC 081195E5 LDR R1,[R5, #+264] \ 000005E0 000181E0 ADD R0,R1,R0, LSL #+2 \ 000005E4 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_27: \ 000005E8 040195E5 LDR R0,[R5, #+260] \ 000005EC ........ _BLF PrintField,??PrintField??rA \ 000005F0 28D08DE2 ADD SP,SP,#+40 6486 } 6487 } 6488 main_d=0; \ ??maincsm_onmessage_25: \ 000005F4 E46185E5 STR R6,[R5, #+484] 6489 } 6490 if(Is_UPTIME_On) \ ??maincsm_onmessage_24: \ 000005F8 4C0295E5 LDR R0,[R5, #+588] \ 000005FC 000050E3 CMP R0,#+0 \ 00000600 0100000A BEQ ??maincsm_onmessage_28 6491 DrawOnlineTime(canvasdata); \ 00000604 EC0195E5 LDR R0,[R5, #+492] \ 00000608 ........ BL DrawOnlineTime 6492 if(Is_PING_On) \ ??maincsm_onmessage_28: \ 0000060C 000295E5 LDR R0,[R5, #+512] \ 00000610 000050E3 CMP R0,#+0 \ 00000614 0100000A BEQ ??maincsm_onmessage_29 6493 DrawPing(canvasdata); \ 00000618 EC0195E5 LDR R0,[R5, #+492] \ 0000061C ........ BL DrawPing 6494 6495 if(Auto_Status && showAwayIdle) \ ??maincsm_onmessage_29: \ 00000620 F40095E5 LDR R0,[R5, #+244] \ 00000624 000050E3 CMP R0,#+0 \ 00000628 E8009515 LDRNE R0,[R5, #+232] \ 0000062C 00005013 CMPNE R0,#+0 \ 00000630 0100000A BEQ ??maincsm_onmessage_30 6496 DrawAutoMSG(canvasdata); \ 00000634 EC0195E5 LDR R0,[R5, #+492] \ 00000638 ........ BL DrawAutoMSG 6497 if(Is_Unread_On) \ ??maincsm_onmessage_30: \ 0000063C D80095E5 LDR R0,[R5, #+216] \ 00000640 000050E3 CMP R0,#+0 \ 00000644 0E00000A BEQ ??maincsm_onmessage_20 6498 { 6499 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 00000648 142295E5 LDR R2,[R5, #+532] \ 0000064C F69EA0E3 MOV R9,#+3936 \ 00000650 FC1F87E2 ADD R1,R7,#+1008 \ 00000654 050089E0 ADD R0,R9,R5 \ 00000658 160000EF SWI +22 6500 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 0000065C CC0095E5 LDR R0,[R5, #+204] \ 00000660 052089E0 ADD R2,R9,R5 \ 00000664 01002DE9 PUSH {R0} \ 00000668 C80095E5 LDR R0,[R5, #+200] \ 0000066C 01002DE9 PUSH {R0} \ 00000670 E83195E5 LDR R3,[R5, #+488] \ 00000674 B41095E5 LDR R1,[R5, #+180] \ 00000678 B00095E5 LDR R0,[R5, #+176] \ 0000067C ........ _BLF PrintField,??PrintField??rA \ 00000680 08D08DE2 ADD SP,SP,#+8 6501 } 6502 } 6503 } 6504 } 6505 } 6506 } 6507 } 6508 6509 6510 //-----------------------------------------------------------// 6511 6512 6513 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_20: \ 00000684 F200D4E1 LDRSH R0,[R4, #+2] \ 00000688 FC1F88E3 ORR R1,R8,#0x3F0 \ 0000068C 010050E1 CMP R0,R1 \ 00000690 3500001A BNE ??maincsm_onmessage_31 6514 { 6515 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 6516 if( (strcmp_nocase(suc_config_name,(char *)msg->data0)==0) 6517 || (strcmp_nocase(suc_config_name_mod,(char *)msg->data0)==0)) \ 00000694 081094E5 LDR R1,[R4, #+8] \ 00000698 E60E85E2 ADD R0,R5,#+3680 \ 0000069C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000006A0 000050E3 CMP R0,#+0 \ 000006A4 0400000A BEQ ??maincsm_onmessage_32 \ 000006A8 081094E5 LDR R1,[R4, #+8] \ 000006AC EA0E85E2 ADD R0,R5,#+3744 \ 000006B0 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000006B4 000050E3 CMP R0,#+0 \ 000006B8 2B00001A BNE ??maincsm_onmessage_31 6518 { 6519 ShowMSG(1,(int)"NatICQ config updated!"); \ ??maincsm_onmessage_32: \ 000006BC 0400A0E3 MOV R0,#+4 \ 000006C0 400E80E3 ORR R0,R0,#0x400 \ 000006C4 071080E0 ADD R1,R0,R7 \ 000006C8 0100A0E3 MOV R0,#+1 \ 000006CC 480100EF SWI +328 6520 // InitConfig(); 6521 UpdateConfig(); \ 000006D0 ........ BL UpdateConfig 6522 #ifdef NEWSGOLD 6523 initTags(); 6524 #endif 6525 PrintLibInit(1); \ 000006D4 0800A0E1 MOV R0,R8 \ 000006D8 ........ _BLF PrintLibInit,??PrintLibInit??rA 6526 FontPathInit((char *)fontpath, 1); \ 000006DC 8E9EA0E3 MOV R9,#+2272 \ 000006E0 0810A0E1 MOV R1,R8 \ 000006E4 050089E0 ADD R0,R9,R5 \ 000006E8 ........ _BLF FontPathInit,??FontPathInit??rA 6527 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 000006EC 0820A0E1 MOV R2,R8 \ 000006F0 EE0F82E3 ORR R0,R2,#0x3B8 \ 000006F4 051080E0 ADD R1,R0,R5 \ 000006F8 EE0F85E2 ADD R0,R5,#+952 \ 000006FC ........ _BLF SetFontColor,??SetFontColor??rA 6528 //#ifdef ELKA 6529 if(fonto==1) \ 00000700 C80095E5 LDR R0,[R5, #+200] \ 00000704 010050E3 CMP R0,#+1 \ 00000708 0E00001A BNE ??maincsm_onmessage_33 6530 { 6531 char *heght=malloc(64); \ 0000070C 4000A0E3 MOV R0,#+64 \ 00000710 140000EF SWI +20 \ 00000714 00A0A0E1 MOV R10,R0 6532 sprintf(heght, "%s2240.png", fontpath); \ 00000718 052089E0 ADD R2,R9,R5 \ 0000071C 1C00A0E3 MOV R0,#+28 \ 00000720 400E80E3 ORR R0,R0,#0x400 \ 00000724 071080E0 ADD R1,R0,R7 \ 00000728 0A00A0E1 MOV R0,R10 \ 0000072C 160000EF SWI +22 6533 paused_height=GetImgHeight((int)heght); \ 00000730 0A00A0E1 MOV R0,R10 \ 00000734 210000EF SWI +33 \ 00000738 F00185E5 STR R0,[R5, #+496] 6534 mfree(heght); \ 0000073C 0A00A0E1 MOV R0,R10 \ 00000740 150000EF SWI +21 \ 00000744 010000EA B ??maincsm_onmessage_34 6535 } 6536 else 6537 paused_height=fonto-100; \ ??maincsm_onmessage_33: \ 00000748 640040E2 SUB R0,R0,#+100 \ 0000074C F00185E5 STR R0,[R5, #+496] 6538 //#endif 6539 free_ICONS(); \ ??maincsm_onmessage_34: \ 00000750 ........ BL free_ICONS 6540 setup_ICONS(); \ 00000754 ........ BL setup_ICONS 6541 ResortCL(); \ 00000758 ........ _BLF ResortCL,??ResortCL??rA 6542 RecountMenu(NULL,1); \ 0000075C 0110A0E3 MOV R1,#+1 \ 00000760 0600A0E1 MOV R0,R6 \ 00000764 ........ BL RecountMenu 6543 init_time_zone(); \ 00000768 ........ BL init_time_zone 6544 // InitSmiles(); 6545 } 6546 } 6547 6548 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_31: \ 0000076C F200D4E1 LDRSH R0,[R4, #+2] \ 00000770 980050E3 CMP R0,#+152 \ 00000774 0E00001A BNE ??maincsm_onmessage_35 6549 { 6550 if ((int)msg->data0==csm->gui_id) \ 00000778 10109DE5 LDR R1,[SP, #+16] \ 0000077C 080094E5 LDR R0,[R4, #+8] \ 00000780 281091E5 LDR R1,[R1, #+40] \ 00000784 010050E1 CMP R0,R1 6551 { 6552 csm->csm.state=-3; \ 00000788 10009D05 LDREQ R0,[SP, #+16] \ 0000078C 0210E003 MVNEQ R1,#+2 \ 00000790 10108005 STREQ R1,[R0, #+16] 6553 } 6554 if ((int)msg->data0==contactlist_menu_id) \ 00000794 080094E5 LDR R0,[R4, #+8] \ 00000798 C41295E5 LDR R1,[R5, #+708] \ 0000079C 010050E1 CMP R0,R1 6555 { 6556 contactlist_menu_id=0; \ 000007A0 C4628505 STREQ R6,[R5, #+708] 6557 prev_clmenu_itemcount=0; \ 000007A4 CC628505 STREQ R6,[R5, #+716] 6558 } 6559 if ((int)msg->data0==edchat_id) \ 000007A8 C81295E5 LDR R1,[R5, #+712] \ 000007AC 010050E1 CMP R0,R1 6560 { 6561 edchat_id=0; \ 000007B0 C8628505 STREQ R6,[R5, #+712] 6562 } 6563 } 6564 6565 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_35: \ 000007B4 F200D4E1 LDRSH R0,[R4, #+2] \ 000007B8 FC0F50E3 CMP R0,#+1008 \ 000007BC 0F00001A BNE ??maincsm_onmessage_21 6566 { 6567 switch((int)msg->data0) \ 000007C0 080094E5 LDR R0,[R4, #+8] \ 000007C4 0C1094E5 LDR R1,[R4, #+12] \ 000007C8 ........ LDR R10,??DataTable120 ;; do_reconnect \ 000007CC 5820A0E3 MOV R2,#+88 \ 000007D0 502D82E3 ORR R2,R2,#0x1400 \ 000007D4 054082E0 ADD R4,R2,R5 \ 000007D8 482F42E2 SUB R2,R2,#+288 \ 000007DC 059082E0 ADD R9,R2,R5 \ 000007E0 802050E2 SUBS R2,R0,#+128 \ 000007E4 0800000A BEQ ??maincsm_onmessage_36 \ 000007E8 022052E2 SUBS R2,R2,#+2 \ 000007EC 0200000A BEQ ??maincsm_onmessage_37 \ 000007F0 122052E2 SUBS R2,R2,#+18 \ 000007F4 1300000A BEQ ??maincsm_onmessage_38 \ 000007F8 1D0000EA B ??maincsm_onmessage_39 6568 { 6569 case LMAN_DISCONNECT_IND: 6570 is_gprs_online=0; \ ??maincsm_onmessage_37: \ 000007FC B46285E5 STR R6,[R5, #+692] 6571 return(1); \ ??maincsm_onmessage_21: \ 00000800 0100A0E3 MOV R0,#+1 \ 00000804 14D08DE2 ADD SP,SP,#+20 \ 00000808 F08FBDE8 POP {R4-R11,PC} ;; return 6572 case LMAN_CONNECT_CNF: 6573 vibra_count=1; \ ??maincsm_onmessage_36: \ 0000080C 848285E5 STR R8,[R5, #+644] 6574 start_vibra(); \ 00000810 ........ BL start_vibra 6575 is_gprs_online=1; \ 00000814 B48285E5 STR R8,[R5, #+692] 6576 strcpy(logmsg,LG_GRGPRSUP); \ 00000818 2800A0E3 MOV R0,#+40 \ 0000081C 400E80E3 ORR R0,R0,#0x400 \ 00000820 071080E0 ADD R1,R0,R7 \ 00000824 0900A0E1 MOV R0,R9 \ 00000828 1A0000EF SWI +26 6577 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 0000082C E00195E5 LDR R0,[R5, #+480] \ 00000830 0A20A0E1 MOV R2,R10 \ 00000834 D830A0E3 MOV R3,#+216 \ 00000838 930001E0 MUL R1,R3,R0 \ 0000083C 0400A0E1 MOV R0,R4 \ 00000840 4D0000EF SWI +77 6578 return(1); \ 00000844 070000EA B ??maincsm_onmessage_40 6579 case ENIP_DNR_HOST_BY_NAME: 6580 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_38: \ 00000848 480395E5 LDR R0,[R5, #+840] \ 0000084C 000051E1 CMP R1,R0 \ 00000850 EAFFFF1A BNE ??maincsm_onmessage_21 6581 { 6582 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000854 4C0395E5 LDR R0,[R5, #+844] \ 00000858 000050E3 CMP R0,#+0 \ 0000085C E7FFFF0A BEQ ??maincsm_onmessage_21 \ 00000860 ........ LDR R0,??DataTable121 ;; create_connect \ ??maincsm_onmessage_41: \ 00000864 710100EF SWI +369 6583 } 6584 return(1); \ ??maincsm_onmessage_40: \ 00000868 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_42: \ 0000086C 14D08DE2 ADD SP,SP,#+20 \ 00000870 F08FBDE8 POP {R4-R11,PC} 6585 } 6586 if ((int)msg->data1==sock) \ ??maincsm_onmessage_39: \ 00000874 982295E5 LDR R2,[R5, #+664] \ 00000878 020051E1 CMP R1,R2 \ 0000087C DFFFFF1A BNE ??maincsm_onmessage_21 6587 { 6588 //Если наш сокет 6589 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000880 201EA0E1 LSR R1,R0,#+28 \ 00000884 0A0051E3 CMP R1,#+10 \ 00000888 0200001A BNE ??maincsm_onmessage_43 6590 { 6591 //Принят пакет 6592 ProcessPacket((TPKT *)msg->data0); \ 0000088C ........ BL ProcessPacket 6593 return(0); \ 00000890 0000A0E3 MOV R0,#+0 \ 00000894 F4FFFFEA B ??maincsm_onmessage_42 6594 } 6595 switch((int)msg->data0) \ ??maincsm_onmessage_43: \ 00000898 941295E5 LDR R1,[R5, #+660] \ 0000089C 8A0040E2 SUB R0,R0,#+138 \ 000008A0 050050E3 CMP R0,#+5 \ 000008A4 D5FFFF8A BHI ??maincsm_onmessage_21 \ 000008A8 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 000008AC D02092E1 LDRSB R2,[R2, R0] \ 000008B0 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 000008B4 47474201 DC8 +71,+71,+66,+1 \ 000008B8 504C0000 DC8 +80,+76,+0,+0 6596 { 6597 case ENIP_SOCK_CONNECTED: 6598 if (connect_state==1) \ ??maincsm_onmessage_44: \ 000008BC 010051E3 CMP R1,#+1 \ 000008C0 3800001A BNE ??maincsm_onmessage_45 6599 { 6600 if(VIBR_ON_CONNECT) \ 000008C4 2C0195E5 LDR R0,[R5, #+300] \ 000008C8 000050E3 CMP R0,#+0 6601 vibra_count=2; \ 000008CC 0200A013 MOVNE R0,#+2 \ 000008D0 84028515 STRNE R0,[R5, #+644] 6602 else 6603 vibra_count=1; \ 000008D4 84828505 STREQ R8,[R5, #+644] 6604 start_vibra(); \ 000008D8 ........ BL start_vibra 6605 //Соединение установленно, посылаем пакет login 6606 strcpy(logmsg, LG_GRTRYLOGIN); \ 000008DC 441E87E2 ADD R1,R7,#+1088 \ 000008E0 0900A0E1 MOV R0,R9 \ 000008E4 1A0000EF SWI +26 6607 { 6608 int i=strlen(PASS); \ 000008E8 5400A0E3 MOV R0,#+84 \ 000008EC A00E80E3 ORR R0,R0,#0xA00 \ 000008F0 050080E0 ADD R0,R0,R5 \ 000008F4 1B0000EF SWI +27 \ 000008F8 0040A0E1 MOV R4,R0 6609 TPKT *p=malloc(sizeof(PKT)+i); \ 000008FC 080084E2 ADD R0,R4,#+8 \ 00000900 140000EF SWI +20 \ 00000904 0090A0E1 MOV R9,R0 6610 p->pkt.uin=UIN; \ 00000908 280195E5 LDR R0,[R5, #+296] 6611 p->pkt.type=T_REQLOGIN; 6612 p->pkt.data_len=i; 6613 memcpy(p->data,PASS,i); \ 0000090C 0420A0E1 MOV R2,R4 \ 00000910 000089E5 STR R0,[R9, #+0] \ 00000914 B480C9E1 STRH R8,[R9, #+4] \ 00000918 B640C9E1 STRH R4,[R9, #+6] \ 0000091C 5400A0E3 MOV R0,#+84 \ 00000920 A00E80E3 ORR R0,R0,#0xA00 \ 00000924 051080E0 ADD R1,R0,R5 \ 00000928 080089E2 ADD R0,R9,#+8 \ 0000092C 1E0100EF SWI +286 6614 SUBPROC((void *)send_login,0,p); \ 00000930 88019FE5 LDR R0,??maincsm_onmessage_5+0x10 ;; send_login \ 00000934 0920A0E1 MOV R2,R9 \ 00000938 0010A0E3 MOV R1,#+0 \ 0000093C 710100EF SWI +369 6615 } 6616 GROUP_CACHE=0; \ 00000940 C06285E5 STR R6,[R5, #+704] 6617 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000944 206285E5 STR R6,[R5, #+544] 6618 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000948 0600A0E1 MOV R0,R6 \ 0000094C ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000950 000050E3 CMP R0,#+0 \ 00000954 0100001A BNE ??maincsm_onmessage_46 \ 00000958 451E87E2 ADD R1,R7,#+1104 \ 0000095C ........ _BLF AddGroup,??AddGroup??rA 6619 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_46: \ 00000960 280195E5 LDR R0,[R5, #+296] \ 00000964 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000968 000050E3 CMP R0,#+0 \ 0000096C 0900001A BNE ??maincsm_onmessage_47 \ 00000970 C40095E5 LDR R0,[R5, #+196] \ 00000974 000050E3 CMP R0,#+0 \ 00000978 0600000A BEQ ??maincsm_onmessage_47 \ 0000097C 0130A0E3 MOV R3,#+1 \ 00000980 0620A0E1 MOV R2,R6 \ 00000984 5C00A0E3 MOV R0,#+92 \ 00000988 400E80E3 ORR R0,R0,#0x400 \ 0000098C 071080E0 ADD R1,R0,R7 \ 00000990 280195E5 LDR R0,[R5, #+296] \ 00000994 ........ _BLF AddContact,??AddContact??rA 6620 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_47: \ 00000998 24019FE5 LDR R0,??maincsm_onmessage_5+0x14 ;; LoadLocalCL \ 0000099C 710100EF SWI +369 6621 SMART_REDRAW(); \ 000009A0 ........ BL SMART_REDRAW \ 000009A4 AFFFFFEA B ??maincsm_onmessage_40 6622 } 6623 else 6624 { 6625 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_45: \ 000009A8 6800A0E3 MOV R0,#+104 \ 000009AC 400E80E3 ORR R0,R0,#0x400 \ 000009B0 071080E0 ADD R1,R0,R7 \ ??maincsm_onmessage_48: \ 000009B4 0100A0E3 MOV R0,#+1 \ 000009B8 480100EF SWI +328 \ 000009BC A9FFFFEA B ??maincsm_onmessage_40 6626 } 6627 break; 6628 case ENIP_SOCK_DATA_READ: 6629 if (connect_state>=2) \ ??maincsm_onmessage_49: \ 000009C0 020051E3 CMP R1,#+2 6630 { 6631 //Если посылали send 6632 SUBPROC((void *)get_answer); \ 000009C4 FC009FA5 LDRGE R0,??maincsm_onmessage_5+0x18 ;; get_answer \ 000009C8 A5FFFFAA BGE ??maincsm_onmessage_41 6633 //SMART_REDRAW(); 6634 } 6635 else 6636 { 6637 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 000009CC 491E87E2 ADD R1,R7,#+1168 \ 000009D0 F7FFFFEA B ??maincsm_onmessage_48 6638 } 6639 break; 6640 case ENIP_BUFFER_FREE: 6641 case ENIP_BUFFER_FREE1: 6642 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_50: \ 000009D4 ........ LDR R0,??DataTable122 ;; SendAnswer \ 000009D8 0020A0E3 MOV R2,#+0 \ 000009DC 0210A0E1 MOV R1,R2 \ 000009E0 710100EF SWI +369 \ 000009E4 9FFFFFEA B ??maincsm_onmessage_40 6643 break; 6644 case ENIP_SOCK_REMOTE_CLOSED: 6645 //Закрыт со стороны сервера 6646 if (connect_state) \ ??maincsm_onmessage_51: \ 000009E8 000051E3 CMP R1,#+0 \ 000009EC 83FFFF0A BEQ ??maincsm_onmessage_21 6647 SUBPROC((void *)end_socket); \ 000009F0 ........ LDR R0,??DataTable123 ;; end_socket \ 000009F4 9AFFFFEA B ??maincsm_onmessage_41 6648 break; 6649 case ENIP_SOCK_CLOSED: 6650 //strcpy(logmsg, "No connection"); 6651 //Dump not received 6652 /* if (RXstate>(-(int)sizeof(PKT))) 6653 { 6654 unsigned int err; 6655 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 6656 if (f!=-1) 6657 { 6658 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 6659 fclose(f,&err); 6660 } 6661 }*/ 6662 FillAllOffline(); \ ??maincsm_onmessage_52: \ 000009F8 ........ _BLF FillAllOffline,??FillAllOffline??rA 6663 RecountMenu(NULL,1); \ 000009FC 0110A0E3 MOV R1,#+1 \ 00000A00 0600A0E1 MOV R0,R6 \ 00000A04 ........ BL RecountMenu 6664 connect_state=0; 6665 sock=-1; \ 00000A08 0600E0E1 MVN R0,R6 \ 00000A0C 980285E5 STR R0,[R5, #+664] 6666 if(VIBR_ON_CONNECT) \ 00000A10 2C0195E5 LDR R0,[R5, #+300] \ 00000A14 946285E5 STR R6,[R5, #+660] \ 00000A18 000050E3 CMP R0,#+0 6667 vibra_count=4; \ 00000A1C 0400A013 MOVNE R0,#+4 \ 00000A20 84028515 STRNE R0,[R5, #+644] 6668 else 6669 vibra_count=1; \ 00000A24 84828505 STREQ R8,[R5, #+644] 6670 6671 start_vibra(); \ 00000A28 ........ BL start_vibra 6672 if (sendq_p) \ 00000A2C B00295E5 LDR R0,[R5, #+688] \ 00000A30 000050E3 CMP R0,#+0 \ 00000A34 0600000A BEQ ??maincsm_onmessage_53 6673 { 6674 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000A38 AC3295E5 LDR R3,[R5, #+684] \ 00000A3C B400A0E3 MOV R0,#+180 \ 00000A40 400E80E3 ORR R0,R0,#0x400 \ 00000A44 072080E0 ADD R2,R0,R7 \ 00000A48 FF10A0E3 MOV R1,#+255 \ 00000A4C 0900A0E1 MOV R0,R9 \ 00000A50 1B0100EF SWI +283 6675 } 6676 SMART_REDRAW(); \ ??maincsm_onmessage_53: \ 00000A54 ........ BL SMART_REDRAW 6677 SUBPROC((void *)ClearSendQ); \ 00000A58 ........ LDR R0,??DataTable124 ;; ClearSendQ \ 00000A5C 710100EF SWI +369 6678 #ifdef EVILFOX 6679 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 6680 #else 6681 if (!disautorecconect) \ 00000A60 6C0295E5 LDR R0,[R5, #+620] \ 00000A64 000050E3 CMP R0,#+0 \ 00000A68 64FFFF1A BNE ??maincsm_onmessage_21 6682 { 6683 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000A6C E00195E5 LDR R0,[R5, #+480] \ 00000A70 0A20A0E1 MOV R2,R10 \ 00000A74 D830A0E3 MOV R3,#+216 \ 00000A78 930001E0 MUL R1,R3,R0 \ 00000A7C 0400A0E1 MOV R0,R4 \ 00000A80 4D0000EF SWI +77 6684 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000A84 E00195E5 LDR R0,[R5, #+480] \ 00000A88 0930A0E1 MOV R3,R9 \ 00000A8C 01002DE9 PUSH {R0} \ 00000A90 FF10A0E3 MOV R1,#+255 \ 00000A94 D800A0E3 MOV R0,#+216 \ 00000A98 400E80E3 ORR R0,R0,#0x400 \ 00000A9C 072080E0 ADD R2,R0,R7 \ 00000AA0 0900A0E1 MOV R0,R9 \ 00000AA4 1B0100EF SWI +283 \ 00000AA8 04D08DE2 ADD SP,SP,#+4 \ 00000AAC 6DFFFFEA B ??maincsm_onmessage_40 \ ??maincsm_onmessage_5: \ 00000AB0 ........ DC32 CheckDoubleRun \ 00000AB4 ........ DC32 ProcessNextSmile \ 00000AB8 ........ DC32 ProcessNextXStatImg \ 00000ABC ........ DC32 XStatusesIconArray \ 00000AC0 ........ DC32 send_login \ 00000AC4 ........ DC32 LoadLocalCL \ 00000AC8 ........ DC32 get_answer 6685 } 6686 6687 #endif 6688 break; 6689 } 6690 } 6691 } 6692 return(1); 6693 } 6694 6695 6696 //-------------------- ICON IN ICONBAR ------------// 6697 6698 //kluchnik 26.03.08 6699 #ifdef ELKA 6700 #pragma swi_number=0x27 6701 __swi __arm void AddIconToIconBar(int pic, short *num); 6702 6703 6704 void addIconBar(short* num) 6705 { 6706 int icn; 6707 if(ShowStatusIcon==1 || ShowStatusIcon==3) 6708 { 6709 if(total_unread) 6710 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 6711 else 6712 { 6713 switch(connect_state) 6714 { 6715 case 0: 6716 icn=IS_OFFLINE; break; 6717 case 3: 6718 icn=CurrentStatus; //IS_ONLINE; 6719 break; 6720 default: 6721 icn=IS_UNKNOWN; break; 6722 } 6723 AddIconToIconBar(NumStatusToIconBar + icn, num); 6724 } 6725 } 6726 else 6727 { 6728 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 6729 { 6730 if(!(IsIdleUiOnTop())) 6731 { 6732 if(total_unread) 6733 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 6734 else 6735 { 6736 switch(connect_state) 6737 { 6738 case 0: 6739 icn=IS_OFFLINE; break; 6740 case 3: 6741 icn=CurrentStatus; //IS_ONLINE; 6742 break; 6743 default: 6744 icn=IS_UNKNOWN; break; 6745 } 6746 AddIconToIconBar(NumStatusToIconBar + icn, num); 6747 } 6748 } 6749 } 6750 } 6751 6752 if(show_xstatus==2 || show_xstatus==3) 6753 if(CurrentXStatus!=0) 6754 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); 6755 6756 #ifdef kluchnik 6757 // if(solnce) 6758 //{ 6759 CLIST *t; 6760 t=FindContactByUin(438532198); 6761 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 6762 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 6763 // } 6764 #endif 6765 } 6766 6767 typedef struct 6768 { 6769 char check_name[8]; 6770 int addr; 6771 }ICONBAR_H; 6772 6773 #endif 6774 \ In segment DATA_C, align 4, align-sorted 6775 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 6776 \ In segment DATA_Z, align 4, align-sorted 6777 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 6778 6779 struct 6780 { 6781 CSM_DESC maincsm; 6782 WSHDR maincsm_name; 6783 #ifdef ELKA 6784 ICONBAR_H iconbar_handler; 6785 #endif 6786 }MAINCSM = 6787 { 6788 { 6789 maincsm_onmessage, 6790 maincsm_oncreate, 6791 #ifdef NEWSGOLD 6792 0, 6793 0, 6794 0, 6795 0, 6796 #endif 6797 maincsm_onclose, 6798 sizeof(MAIN_CSM), 6799 1, 6800 &minus11 6801 }, 6802 { 6803 maincsm_name_body, 6804 NAMECSM_MAGIC1, 6805 NAMECSM_MAGIC2, 6806 0x0, 6807 139 6808 } 6809 #ifdef ELKA 6810 , 6811 { 6812 "IconBar" 6813 } 6814 #endif 6815 }; 6816 \ In segment CODE, align 4, keep-with-next 6817 void UpdateCSMname(void) 6818 { 6819 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable139 ;; S_ICONS \ 00000004 18109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 282190E5 LDR R2,[R0, #+296] \ 00000010 E430A0E3 MOV R3,#+228 \ 00000014 603D83E3 ORR R3,R3,#0x1800 \ 00000018 000083E0 ADD R0,R3,R0 \ 0000001C 240100EF SWI +292 6820 } \ 00000020 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 00000024 ........ DC32 `?` 6821 6822 #ifdef ELKA 6823 void SetIconBarHandler() 6824 { 6825 MAINCSM.iconbar_handler.addr = (int)addIconBar; 6826 } 6827 #endif 6828 \ In segment CODE, align 4, keep-with-next 6829 int main(char *filename) 6830 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 6831 MAIN_CSM main_csm; 6832 char *s; 6833 int len; 6834 // WSHDR *ws; 6835 UpdateConfig(); 6836 //InitConfig(); 6837 6838 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable139 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable127 ;; `?wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 6915 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 6916 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 6917 { 6918 for (int i=0; i=0xE100) 6922 { 6923 t=FindSmileByUni(c); 6924 if (t) 6925 { 6926 if (t->lines) 6927 { 6928 len+=strlen(t->lines->text); 6929 } 6930 } 6931 else len++; 6932 } 6933 else len++; 6934 } 6935 6936 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 6937 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 6938 for (int wcur=0; wcur=0xE100) 6943 { 6944 t=FindSmileByUni(c); 6945 if (t) 6946 { 6947 int w; 6948 char *s; 6949 if (t->lines) 6950 { 6951 s=t->lines->text; 6952 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 6979 { 6980 if (t->isactive) return t; \ 0000000C 9C1090E5 LDR R1,[R0, #+156] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 6981 } 6982 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable132 ;; S_ICONS + 700 \ 00000020 020000EA B ??FindNextActiveContact_2 6983 while(t=(CLIST *)(t->next)) 6984 { 6985 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 9C1090E5 LDR R1,[R0, #+156] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 6986 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 6987 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 6988 } 6989 \ In segment CODE, align 4, keep-with-next 6990 CLIST *FindPrevActiveContact(CLIST *t) 6991 { 6992 CLIST *cl; 6993 CLIST *cl_active=NULL; 6994 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable132 ;; S_ICONS + 700 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 6995 6996 6997 while(cl=cl->next) 6998 { 6999 if (cl==t) 7000 { 7001 if (cl_active==NULL) break; 7002 else return (cl_active); 7003 } 7004 else 7005 { 7006 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 9C3092E5 LDR R3,[R2, #+156] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 7007 } \ ??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 7008 } 7009 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 7010 { 7011 if (t->isactive) cl_active=t; \ 00000044 9C2090E5 LDR R2,[R0, #+156] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 7012 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 7013 } 7014 return cl_active; 7015 } 7016 7017 \ In segment CODE, align 4, keep-with-next 7018 void ed_options_handler(USR_MENU_ITEM *item) 7019 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 7020 EDCHAT_STRUCT *ed_struct=item->user_pointer; 7021 #ifdef kluchnik 7022 #else 7023 CLIST *t; 7024 #endif 7025 int i=item->cur_item; 7026 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable139 ;; 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 7027 { 7028 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ed_chatgui)==ed_struct->ed_answer) 7033 ascii2ws(item->ws,"Вставить смайл"); 7034 else 7035 ascii2ws(item->ws,"Копировать в буфер"); 7036 break; 7037 case 1: 7038 ascii2ws(item->ws,"Вставить из буфера"); 7039 break; 7040 case 2: 7041 ascii2ws(item->ws,"Вставить команду"); 7042 break; 7043 case 3: 7044 ascii2ws(item->ws,"Очистить буфер"); 7045 break; 7046 default: 7047 i-=4; 7048 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); 7049 break; 7050 #else 7051 case 0: 7052 ascii2ws(item->ws,LG_MNUEDNEXTACT); 7053 break; 7054 case 1: 7055 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 7056 break; 7057 default: 7058 i-=2; 7059 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 8C1295E5 LDR R1,[R5, #+652] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 7060 break; 7061 #endif 7062 } 7063 } 7064 7065 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 7066 { 7067 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 7068 { 7069 #ifdef kluchnik 7070 case 0: 7071 { 7072 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) 7073 CreateSmileSelectGUI(ed_struct); 7074 else 7075 { 7076 int ed; 7077 EDITCONTROL ec; 7078 EDITCONTROL ec_hdr; 7079 7080 ed=EDIT_GetFocus(ed_struct->ed_chatgui); 7081 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); 7082 ExtractEditControl(ed_struct->ed_chatgui,ed-1,&ec_hdr); 7083 7084 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); 7085 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); 7086 wstrcat(wsBuffer,ec_hdr.pWS); 7087 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); 7088 7089 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); 7090 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); 7091 wstrcat(wsBuffer,ec.pWS); 7092 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); 7093 } 7094 } 7095 break; 7096 case 1: 7097 { 7098 EDITCONTROL ec; 7099 WSHDR *ws; 7100 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); 7101 ws=AllocWS(ec.pWS->wsbody[0]+wsBuffer->wsbody[0]+1); 7102 wstrcpy(ws,ec.pWS); 7103 wstrcat(ws,wsBuffer); 7104 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ws); 7105 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(ws)); 7106 } 7107 break; 7108 case 2: 7109 DispCmdMenu(ed_struct); 7110 break; 7111 case 3: 7112 CutWSTR(wsBuffer,0); 7113 break; 7114 default: 7115 i-=4; 7116 if (iloaded_templates) 7117 { 7118 EDITCONTROL ec; 7119 WSHDR *ed_ws; 7120 int c; 7121 char *p=templates_lines[i]; 7122 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); 7123 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); 7124 wstrcpy(ed_ws,ec.pWS); 7125 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) 7126 { 7127 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); 7128 while(c=*p++) 7129 { 7130 wsInsertChar(ed_ws,char8to16(c),pos++); 7131 } 7132 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); 7133 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 7134 } 7135 else 7136 { 7137 while(c=*p++) 7138 { 7139 wsAppendChar(ed_ws,char8to16(c)); 7140 } 7141 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); 7142 } 7143 FreeWS(ed_ws); 7144 } 7145 break; 7146 #else 7147 case 0: 7148 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 7149 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 7150 { 7151 GeneralFunc_flag1(edchat_id,1); \ 00000094 C80295E5 LDR R0,[R5, #+712] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 7152 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 7153 } 7154 break; 7155 case 1: 7156 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 7157 if (t && t!=ed_struct->ed_contact) 7158 { 7159 GeneralFunc_flag1(edchat_id,1); 7160 CreateEditChat(t); 7161 } 7162 break; 7163 default: 7164 i-=2; 7165 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 7166 { 7167 EDITCONTROL ec; 7168 WSHDR *ed_ws; 7169 int c; 7170 char *p=templates_lines[i]; \ 000000CC 8C0295E5 LDR R0,[R5, #+652] 7171 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 7172 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 7173 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 7174 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 7175 { 7176 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 7177 while(c=*p++) 7178 { 7179 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 7180 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 7181 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 7182 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 7183 } 7184 else 7185 { 7186 while(c=*p++) 7187 { 7188 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 7189 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 7190 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 7191 } 7192 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 7193 } 7194 break; 7195 #endif 7196 } 7197 } 7198 } \ ??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) 7207 { 7208 s = str; 7209 w = ws; 7210 l = len; 7211 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 7212 if(!l) return ws; 7213 ws++; 7214 (*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} 7215 } 7216 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 7217 7218 } 7219 \ In segment CODE, align 4, keep-with-next 7220 int IsUrl(WSHDR *ws, int pos, char *link) 7221 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 7222 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7223 7224 int len = wstrlen(ws); 7225 unsigned short *str = ws->wsbody+1, *tmp, *begin; 7226 tmp = str; 7227 7228 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable135 ;; `?` \ 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 7229 7230 while(str && (begin-tmp <= pos)) 7231 { 7232 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7233 if(str-tmp >= pos-2) 7234 { 7235 for(;begin < str; begin++, link++) 7236 *link = char16to8(*begin); 7237 link[str-begin] = 0; 7238 return 1; 7239 } 7240 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 7241 } 7242 7243 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 7244 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} 7245 while(str && (begin-tmp <= pos)) 7246 { 7247 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 7248 if(str-tmp >= pos-2) 7249 { 7250 for(;begin < str; begin++, link++) 7251 *link = char16to8(*begin); 7252 link[str-begin] = 0; 7253 return 1; 7254 } 7255 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 7256 } 7257 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 7258 } 7259 7260 #define UTF16_DIS_UNDERLINE (0xE002) 7261 #define UTF16_ENA_UNDERLINE (0xE001) 7262 \ In segment CODE, align 4, keep-with-next 7263 void ParseAnswer(WSHDR *ws, const char *s) 7264 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 7265 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 7266 S_SMILES *t; 7267 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 7268 STXT_SMILES *st; 7269 unsigned int wchar; 7270 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 7271 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 7272 int i; 7273 while(wchar=*s) 7274 { 7275 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 7276 { 7277 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 7278 while(*s && strchr(valid, *s)) 7279 { 7280 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 7281 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 7282 s++; 7283 } \ 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 7284 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 7285 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 7286 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable135 ;; `?` \ 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 7287 } 7288 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 7289 while(t) 7290 { 7291 st=t->lines; 7292 while(st) 7293 { 7294 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 7295 { 7296 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 7297 } 7298 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] 7299 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 7300 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 7301 } 7302 L1: 7303 if (t) 7304 { 7305 wchar=t->uni_smile; 7306 s+=strlen(st->text); 7307 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 7308 } 7309 else 7310 { 7311 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 7312 s++; 7313 ulb>>=8; 7314 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 7315 } \ ??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 7316 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 7317 } 7318 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 7319 while(i>1) 7320 { 7321 if (ws->wsbody[i--]!=13) break; 7322 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 7323 } 7324 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 7325 \ In segment CODE, align 4, keep-with-next 7326 void SaveAnswer(CLIST *cl, WSHDR *ws) 7327 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 7328 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 7329 mfree(cl->answer); \ 00000014 940094E5 LDR R0,[R4, #+148] \ 00000018 150000EF SWI +21 7330 cl->answer=p; \ 0000001C 945084E5 STR R5,[R4, #+148] 7331 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 7332 7333 //links applicator 7334 7335 \ In segment CODE, align 4, keep-with-next 7336 int GetTempName(void) 7337 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 7338 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 7339 unsigned long iday; 7340 TTime tt; 7341 TDate dd; 7342 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 7343 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 7344 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 7345 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] 7346 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 7347 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 7348 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 7349 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 7350 } \ 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 7351 7352 \ In segment CODE, align 4, keep-with-next 7353 void recon() 7354 { 7355 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable136 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 7356 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable139 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 5800A0E3 MOV R0,#+88 \ 00000014 500D80E3 ORR R0,R0,#0x1400 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 7357 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 4C0384E5 STR R0,[R4, #+844] 7358 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable138 ;; create_connect \ 0000002C 710100EF SWI +369 7359 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 7360 \ In segment CODE, align 4, keep-with-next 7361 int edchat_onkey(GUI *data, GUI_MSG *msg) 7362 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7363 //-1 - do redraw 7364 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R5,??DataTable139 ;; S_ICONS \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 3800A0E3 MOV R0,#+56 \ 00000018 500D80E3 ORR R0,R0,#0x1400 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 8C0100EF SWI +396 7365 CLIST *t; 7366 TPKT *p; 7367 EDITCONTROL ec; 7368 int len, f;//2026rev 7369 unsigned err;//2026rev 7370 char *s; 7371 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 048090E5 LDR R8,[R0, #+4] 7372 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 7373 char fn[256]; 7374 7375 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 7376 { 7377 void ec_menu(EDCHAT_STRUCT *); 7378 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 7379 return(-1); \ ??edchat_onkey_1: \ 00000054 FB0000EA B ??edchat_onkey_2 7380 } 7381 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 F80000EA B ??edchat_onkey_4 7382 7383 void AddSmile(GUI *data); 7384 if (msg->gbsmsg->msg==LONG_PRESS) \ ??edchat_onkey_3: \ 00000068 040097E5 LDR R0,[R7, #+4] \ 0000006C 9510A0E3 MOV R1,#+149 \ 00000070 F200D0E1 LDRSH R0,[R0, #+2] \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 3E00001A BNE ??edchat_onkey_5 7385 { 7386 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 2100001A BNE ??edchat_onkey_6 7387 { 7388 if(LongRightAction==2) \ 00000088 180195E5 LDR R0,[R5, #+280] \ 0000008C 020050E3 CMP R0,#+2 \ 00000090 0200001A BNE ??edchat_onkey_7 7389 CreateSmileSelectGUI(ed_struct); \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 0000009C 360000EA B ??edchat_onkey_5 7390 else 7391 if(LongRightAction==1) \ ??edchat_onkey_7: \ 000000A0 010050E3 CMP R0,#+1 \ 000000A4 3400001A BNE ??edchat_onkey_5 7392 { 7393 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 000000A8 0400A0E1 MOV R0,R4 \ 000000AC 820100EF SWI +386 \ 000000B0 081096E5 LDR R1,[R6, #+8] \ 000000B4 010050E1 CMP R0,R1 \ 000000B8 2F00001A BNE ??edchat_onkey_5 7394 { 7395 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000BC 04208DE2 ADD R2,SP,#+4 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 690100EF SWI +361 7396 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 000000C8 0400A0E1 MOV R0,R4 \ 000000CC D30100EF SWI +467 \ 000000D0 2C109DE5 LDR R1,[SP, #+44] \ 000000D4 010040E2 SUB R0,R0,#+1 \ 000000D8 001091E5 LDR R1,[R1, #+0] \ 000000DC B010D1E1 LDRH R1,[R1, #+0] \ 000000E0 000051E1 CMP R1,R0 \ 000000E4 2400001A BNE ??edchat_onkey_5 7397 { 7398 t=FindNextActiveContact(ed_struct->ed_contact); \ 000000E8 00A096E5 LDR R10,[R6, #+0] \ 000000EC 0A00A0E1 MOV R0,R10 \ 000000F0 ........ BL FindNextActiveContact \ 000000F4 0090B0E1 MOVS R9,R0 7399 if (t && t!=ed_struct->ed_contact) \ 000000F8 0A005911 CMPNE R9,R10 \ 000000FC 1E00000A BEQ ??edchat_onkey_5 7400 { 7401 CreateEditChat(t); \ ??edchat_onkey_8: \ 00000100 0900A0E1 MOV R0,R9 \ 00000104 ........ BL CreateEditChat 7402 return(1); \ 00000108 0100A0E3 MOV R0,#+1 \ 0000010C CE0000EA B ??edchat_onkey_4 7403 } 7404 } 7405 } 7406 } 7407 } 7408 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_6: \ 00000110 3D0058E3 CMP R8,#+61 \ 00000114 1800001A BNE ??edchat_onkey_5 \ 00000118 1C0195E5 LDR R0,[R5, #+284] \ 0000011C 000050E3 CMP R0,#+0 \ 00000120 1500000A BEQ ??edchat_onkey_5 7409 { 7410 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 00000124 0400A0E1 MOV R0,R4 \ 00000128 820100EF SWI +386 \ 0000012C 081096E5 LDR R1,[R6, #+8] \ 00000130 010050E1 CMP R0,R1 \ 00000134 1000001A BNE ??edchat_onkey_5 7411 { 7412 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000138 04208DE2 ADD R2,SP,#+4 \ 0000013C 0400A0E1 MOV R0,R4 \ 00000140 690100EF SWI +361 7413 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 00000144 0400A0E1 MOV R0,R4 \ 00000148 D30100EF SWI +467 \ 0000014C 2C109DE5 LDR R1,[SP, #+44] \ 00000150 010040E2 SUB R0,R0,#+1 \ 00000154 001091E5 LDR R1,[R1, #+0] \ 00000158 B010D1E1 LDRH R1,[R1, #+0] \ 0000015C 000051E1 CMP R1,R0 \ 00000160 0500001A BNE ??edchat_onkey_5 7414 { 7415 t=FindPrevActiveContact(ed_struct->ed_contact); \ 00000164 00A096E5 LDR R10,[R6, #+0] \ 00000168 0A00A0E1 MOV R0,R10 \ 0000016C ........ BL FindPrevActiveContact \ 00000170 0090B0E1 MOVS R9,R0 7416 if (t && t!=ed_struct->ed_contact) \ 00000174 0A005911 CMPNE R9,R10 \ 00000178 E0FFFF1A BNE ??edchat_onkey_8 7417 { 7418 CreateEditChat(t); 7419 return(1); 7420 } 7421 } 7422 } 7423 } 7424 #ifdef ELKA 7425 if (l==VOL_DOWN_BUTTON) 7426 { 7427 WSHDR *ws; 7428 ExtractEditControl(data,ed_struct->ed_answer,&ec); 7429 if(wstrlen(ec.pWS)>0) 7430 { 7431 ws=AllocWS(1); 7432 CutWSTR(ws,0); 7433 7434 EDIT_SetFocus(data,ed_struct->ed_answer); 7435 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 7436 7437 FreeWS(ws); 7438 RefreshGUI(); 7439 } 7440 } 7441 if (l==VOL_UP_BUTTON) 7442 { 7443 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 7444 ascii2ws(ws,last_msg_buffer); 7445 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 7446 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 7447 FreeWS(ws); 7448 RefreshGUI(); 7449 } 7450 #endif 7451 #ifdef kluchnik 7452 if(l==LEFT_BUTTON && EDIT_GetFocus(ed_struct->ed_chatgui)!=ed_struct->ed_answer && EDIT_GetCursorPos(data)==1) 7453 { 7454 int ed; 7455 EDITCONTROL ec; 7456 ed=EDIT_GetFocus(ed_struct->ed_chatgui); 7457 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); 7458 7459 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); 7460 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); 7461 wstrcat(wsBuffer,ec.pWS); 7462 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); 7463 7464 ShowMSG(1,(int)"Message add to buffer"); 7465 } 7466 #endif 7467 } 7468 7469 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_5: \ 0000017C 040097E5 LDR R0,[R7, #+4] \ 00000180 9310A0E3 MOV R1,#+147 \ 00000184 F200D0E1 LDRSH R0,[R0, #+2] \ 00000188 401F81E3 ORR R1,R1,#0x100 \ 0000018C 010050E1 CMP R0,R1 \ 00000190 0A00001A BNE ??edchat_onkey_9 7470 { 7471 if ((l>='0')&&(l<='9')) \ 00000194 300058E3 CMP R8,#+48 \ 00000198 0B0000BA BLT ??edchat_onkey_10 \ 0000019C 3A0058E3 CMP R8,#+58 \ 000001A0 060000AA BGE ??edchat_onkey_9 7472 { 7473 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 000001A4 0400A0E1 MOV R0,R4 \ 000001A8 820100EF SWI +386 \ 000001AC 081096E5 LDR R1,[R6, #+8] \ 000001B0 010050E1 CMP R0,R1 \ 000001B4 0100000A BEQ ??edchat_onkey_9 7474 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000001B8 0400A0E1 MOV R0,R4 \ 000001BC 9B0100EF SWI +411 7475 } 7476 if (l==GREEN_BUTTON) 7477 { 7478 if (connect_state==3) 7479 { 7480 if ((t=ed_struct->ed_contact)) 7481 { 7482 ExtractEditControl(data,ed_struct->ed_answer,&ec); 7483 SaveAnswer(t,ec.pWS); 7484 if ((s=t->answer)) 7485 { 7486 if ((len=strlen(s))) 7487 { 7488 msg_away_timer=0; 7489 away_m=0; 7490 if(SHOW_ACTIVE) 7491 t->isactive=ACTIVE_TIME; 7492 p=malloc(sizeof(PKT)+len+1); 7493 p->pkt.uin=t->uin; 7494 p->pkt.type=T_SENDMSG; 7495 p->pkt.data_len=len; 7496 strcpy(p->data,s); 7497 #ifdef ELKA 7498 strcpy(last_msg_buffer, s); 7499 #endif 7500 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 7501 SUBPROC((void *)SendAnswer,0,p); 7502 main2_count++; 7503 mfree(t->answer); 7504 t->answer=NULL; 7505 // request_remake_edchat=1; 7506 EDIT_SetFocus(data,ed_struct->ed_answer); 7507 CutWSTR(ews,0); 7508 EDIT_SetTextToFocused(data,ews); 7509 AddMsgToChat(data); 7510 RecountMenu(t,1); 7511 return(-1); 7512 } 7513 } 7514 } 7515 } 7516 } 7517 //================2026rev-begin 7518 if (l==ENTER_BUTTON) 7519 { 7520 7521 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 7522 { 7523 int pos, len; 7524 char *link; 7525 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 7526 wstrcpy(ews,ec.pWS); 7527 pos = EDIT_GetCursorPos(data); 7528 len = wstrlen(ews); 7529 link = malloc(len+1); 7530 7531 if(IsUrl(ews, pos, link)) 7532 { 7533 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 7534 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 7535 { 7536 fwrite(f,link,strlen(link),&err); 7537 fclose(f,&err); 7538 str_2ws(ews,fn,256); 7539 ExecuteFile(ews,0,0); 7540 unlink(fn, &err); 7541 } 7542 mfree(link); 7543 return (-1); 7544 } 7545 else 7546 { 7547 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 7548 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 7549 mfree(link); 7550 return (-1); 7551 } 7552 7553 } 7554 7555 } 7556 //================ 2026rev-end =================// 7557 7558 if (l==VOL_UP_BUTTON) 7559 { 7560 int pos; 7561 7562 if ((pos=EDIT_GetFocus(data)-2)>=2) 7563 { 7564 EDIT_SetFocus(data, pos); 7565 EDIT_SetCursorPos(data, 1); 7566 } 7567 return (-1); 7568 } 7569 if (l==VOL_DOWN_BUTTON) 7570 { 7571 int pos; 7572 7573 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 7574 { 7575 EDIT_SetFocus(data, pos); 7576 EDIT_SetCursorPos(data, 1); 7577 } 7578 return (-1); 7579 } 7580 } 7581 return(0); //Do standart keys \ ??edchat_onkey_9: \ 000001C0 0000A0E3 MOV R0,#+0 \ 000001C4 4CDF8DE2 ADD SP,SP,#+304 \ 000001C8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_10: \ 000001CC 0B0058E3 CMP R8,#+11 \ 000001D0 4D00001A BNE ??edchat_onkey_11 \ 000001D4 940295E5 LDR R0,[R5, #+660] \ 000001D8 030050E3 CMP R0,#+3 \ 000001DC F7FFFF1A BNE ??edchat_onkey_9 \ 000001E0 009096E5 LDR R9,[R6, #+0] \ 000001E4 000059E3 CMP R9,#+0 \ 000001E8 F4FFFF0A BEQ ??edchat_onkey_9 \ 000001EC 081096E5 LDR R1,[R6, #+8] \ 000001F0 04208DE2 ADD R2,SP,#+4 \ 000001F4 0400A0E1 MOV R0,R4 \ 000001F8 690100EF SWI +361 \ 000001FC 2C109DE5 LDR R1,[SP, #+44] \ 00000200 0900A0E1 MOV R0,R9 \ 00000204 ........ BL SaveAnswer \ 00000208 94A099E5 LDR R10,[R9, #+148] \ 0000020C 00005AE3 CMP R10,#+0 \ 00000210 EAFFFF0A BEQ ??edchat_onkey_9 \ 00000214 0A00A0E1 MOV R0,R10 \ 00000218 1B0000EF SWI +27 \ 0000021C 00B0B0E1 MOVS R11,R0 \ 00000220 E6FFFF0A BEQ ??edchat_onkey_9 \ 00000224 300195E5 LDR R0,[R5, #+304] \ 00000228 0070A0E3 MOV R7,#+0 \ 0000022C 387285E5 STR R7,[R5, #+568] \ 00000230 3C7285E5 STR R7,[R5, #+572] \ 00000234 000050E3 CMP R0,#+0 \ 00000238 5A0FA013 MOVNE R0,#+360 \ 0000023C 9C008915 STRNE R0,[R9, #+156] \ 00000240 09008BE2 ADD R0,R11,#+9 \ 00000244 140000EF SWI +20 \ 00000248 0080A0E1 MOV R8,R0 \ 0000024C 0C0099E5 LDR R0,[R9, #+12] \ 00000250 0A10A0E1 MOV R1,R10 \ 00000254 000088E5 STR R0,[R8, #+0] \ 00000258 0200A0E3 MOV R0,#+2 \ 0000025C B400C8E1 STRH R0,[R8, #+4] \ 00000260 B6B0C8E1 STRH R11,[R8, #+6] \ 00000264 080088E2 ADD R0,R8,#+8 \ 00000268 1A0000EF SWI +26 \ 0000026C 200295E5 LDR R0,[R5, #+544] \ 00000270 ........ LDR R3,??DataTable151 ;; `?ed_contact)); \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C ........ BL GetIconIndex \ 00000040 005194E7 LDR R5,[R4, +R0, LSL #+2] 7602 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); \ 00000044 888100EF SWI +33160 \ 00000048 0060A0E1 MOV R6,R0 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 220000EF SWI +34 \ 00000054 28109FE5 LDR R1,??my_ed_redraw_1 ;; edchat_desc + 60 \ 00000058 0040A0E1 MOV R4,R0 \ 0000005C 012046E2 SUB R2,R6,#+1 \ 00000060 000042E0 SUB R0,R2,R0 \ 00000064 B000C1E1 STRH R0,[R1, #+0] 7603 DrawImg(ScreenW()-1-width,1,icon); \ 00000068 888100EF SWI +33160 \ 0000006C 0520A0E1 MOV R2,R5 \ 00000070 0110A0E3 MOV R1,#+1 \ 00000074 010040E2 SUB R0,R0,#+1 \ 00000078 040040E0 SUB R0,R0,R4 \ 0000007C 230000EF SWI +35 7604 #else 7605 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 7606 width=GetImgWidth(icon); 7607 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); 7608 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 7609 GetPaletteAdrByColorIndex(0), 7610 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 7611 #endif 7612 } 7613 } 7614 } \ 00000080 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_ed_redraw_1: \ 00000084 ........ DC32 edchat_desc + 60 7615 \ In segment CODE, align 4, keep-with-next 7616 void edchat_ghook(GUI *data, int cmd) 7617 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 7618 7619 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 7620 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 7621 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 7622 int j; 7623 EDITCONTROL ec; 7624 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 7625 PNGTOP_DESC *pltop=PNG_TOP(); 7626 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable157 ;; 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 7627 { 7628 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 3800A0E3 MOV R0,#+56 \ 00000034 500D80E3 ORR R0,R0,#0x1400 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 7629 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 7630 } 7631 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 7632 { 7633 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 7634 // edgui_data=data; 7635 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 7636 7637 static void *methods[16]; 7638 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 7639 if (m) 7640 { 7641 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6300000A BEQ ??edchat_ghook_3 7642 { 7643 memcpy(methods,m[1],sizeof(methods)); \ 0000007C DE6FA0E3 MOV R6,#+888 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 7644 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 740384E5 STR R0,[R4, #+884] 7645 methods[0]=(void *)my_ed_redraw; \ 00000098 74019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 7646 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} 7647 } 7648 } 7649 } 7650 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 7651 { 7652 // if (edgui_data==data) edgui_data=NULL; 7653 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 7654 { 7655 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 7656 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 7657 } 7658 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 7659 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 7660 } 7661 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0900001A BNE ??edchat_ghook_7 7662 { 7663 pltop->dyn_pltop=SmilesImgList; \ 000000FC 14019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 080088E5 STR R0,[R8, #+8] 7664 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 7665 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C B80294E5 LDR R0,[R4, #+696] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 B80284E5 STR R0,[R4, #+696] 7666 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] \ 00000120 E0FFFFEA B ??edchat_ghook_1 7667 #ifdef ELKA 7668 if (!total_unread) 7669 { 7670 SLI_Off(); 7671 } 7672 #endif 7673 /* if (request_close_edchat) 7674 { 7675 request_close_edchat=0; 7676 GeneralFunc_flag1(edchat_id,1); 7677 return; 7678 }*/ 7679 } 7680 if (cmd==7) \ ??edchat_ghook_7: \ 00000124 070059E3 CMP R9,#+7 \ 00000128 2800001A BNE ??edchat_ghook_8 7681 { 7682 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000012C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000130 0120A0E3 MOV R2,#+1 \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0500A0E1 MOV R0,R5 \ 0000013C 680100EF SWI +360 7683 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000140 081097E5 LDR R1,[R7, #+8] \ 00000144 0D20A0E1 MOV R2,SP \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 690100EF SWI +361 7684 if (ec.pWS->wsbody[0]==0) \ 00000150 28009DE5 LDR R0,[SP, #+40] \ 00000154 000090E5 LDR R0,[R0, #+0] \ 00000158 B000D0E1 LDRH R0,[R0, #+0] \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 0300001A BNE ??edchat_ghook_9 7685 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000164 0020A0E3 MOV R2,#+0 \ 00000168 081088E2 ADD R1,R8,#+8 \ 0000016C 0500A0E1 MOV R0,R5 \ 00000170 680100EF SWI +360 7686 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000174 0500A0E1 MOV R0,R5 \ 00000178 1C0200EF SWI +540 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 2100001A BNE ??edchat_ghook_3 7687 { 7688 time_to_stop_t9=0; \ 00000184 5C6384E5 STR R6,[R4, #+860] 7689 if (ed_struct->ed_contact->req_add) \ 00000188 000097E5 LDR R0,[R7, #+0] \ 0000018C 881090E5 LDR R1,[R0, #+136] \ 00000190 000051E3 CMP R1,#+0 \ 00000194 0500000A BEQ ??edchat_ghook_10 7690 { 7691 ed_struct->ed_contact->req_add=0; \ 00000198 886080E5 STR R6,[R0, #+136] 7692 AddMsgToChat(data); \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 ........ BL AddMsgToChat 7693 RecountMenu(ed_struct->ed_contact,1); \ 000001A4 000097E5 LDR R0,[R7, #+0] \ 000001A8 0110A0E3 MOV R1,#+1 \ 000001AC ........ BL RecountMenu 7694 } 7695 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001B0 000097E5 LDR R0,[R7, #+0] \ 000001B4 8C1090E5 LDR R1,[R0, #+140] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 1200000A BEQ ??edchat_ghook_3 7696 { 7697 ed_struct->ed_contact->req_drawack=0; \ 000001C0 8C6080E5 STR R6,[R0, #+140] 7698 DrawAck(data); \ 000001C4 0500A0E1 MOV R0,R5 \ 000001C8 ........ BL DrawAck \ 000001CC B5FFFFEA B ??edchat_ghook_1 7699 } 7700 } 7701 } 7702 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001D0 0C0059E3 CMP R9,#+12 \ 000001D4 0C00001A BNE ??edchat_ghook_3 7703 { 7704 j=EDIT_GetFocus(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC 820100EF SWI +386 \ 000001E0 0040A0E1 MOV R4,R0 7705 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001E4 0500A0E1 MOV R0,R5 \ 000001E8 830100EF SWI +387 \ 000001EC 040050E1 CMP R0,R4 \ 000001F0 050000AA BGE ??edchat_ghook_3 \ 000001F4 080097E5 LDR R0,[R7, #+8] \ 000001F8 000054E1 CMP R4,R0 \ 000001FC 0200000A BEQ ??edchat_ghook_3 7706 EDIT_SetCursorPos(data,1); \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 D40100EF SWI +468 7707 } 7708 } \ ??edchat_ghook_3: \ 0000020C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000210 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000214 ........ DC32 my_ed_redraw \ 00000218 ........ DC32 SmilesImgList \ 0000021C ........ DC32 ??sk_1 \ In segment DATA_C, align 4, align-sorted 7709 7710 7711 7712 static const INPUTDIA_DESC edchat_desc = \ edchat_desc: \ 00000000 01000000.... DC32 1, edchat_onkey, edchat_ghook, edchat_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 070000006400 DC32 7, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 32767 \ 0000FF7F0000 \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 \ In segment DATA_C, align 4, align-sorted \ ??sk_1: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 7713 { 7714 1, 7715 edchat_onkey, 7716 edchat_ghook, 7717 (void *)edchat_locret, 7718 0, 7719 &menu_skt, 7720 {0,NULL,NULL,NULL}, 7721 FONT_SMALL, 7722 100, 7723 101, 7724 0, 7725 // 0x00000001 - Выровнять по правому краю 7726 // 0x00000002 - Выровнять по центру 7727 // 0x00000004 - Инверсия знакомест 7728 // 0x00000008 - UnderLine 7729 // 0x00000020 - Не переносить слова 7730 // 0x00000200 - bold 7731 0, 7732 // 0x00000002 - ReadOnly 7733 // 0x00000004 - Не двигается курсор 7734 // 0x40000000 - Поменять местами софт-кнопки 7735 0x40000000 7736 }; 7737 \ In segment CODE, align 4, keep-with-next 7738 void CreateEditChat(CLIST *t) 7739 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 7740 7741 void *ma=malloc_adr(); 7742 void *eq; 7743 EDITCONTROL ec; 7744 EDITC_OPTIONS ec_options; 7745 int color, font, type; 7746 int zc; 7747 7748 LOGQ *lp; 7749 int edchat_toitem; 7750 // edcontact=t; 7751 7752 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 18649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 7753 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 7754 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable145 ;; S_ICONS \ 0000000C 3CD04DE2 SUB SP,SP,#+60 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 148000EF SWI +32788 \ 00000018 0050A0E1 MOV R5,R0 \ 0000001C 140084E2 ADD R0,R4,#+20 \ 00000020 440086E5 STR R0,[R6, #+68] \ 00000024 440087E2 ADD R0,R7,#+68 \ 00000028 400086E5 STR R0,[R6, #+64] 7755 7756 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 7757 7758 /* hist = malloc(256); 7759 if(!GetHistory(hist, 256, t->uin)) 7760 { 7761 ascii2ws(ews,hist); 7762 PrepareEditControl(&ec); 7763 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 7764 } 7765 mfree(hist); 7766 7767 AddEditControlToEditQend(eq,&ec,ma); */ 7768 lp=t->log; \ 0000003C 909094E5 LDR R9,[R4, #+144] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8200000A BEQ ??CreateEditChat_1 7769 7770 while(lp) 7771 { 7772 font = ED_H_FONT_SIZE; 7773 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C 040099E5 LDR R0,[R9, #+4] \ 00000050 84A197E5 LDR R10,[R7, #+388] \ 00000054 68B197E5 LDR R11,[R7, #+360] \ 00000058 030010E2 ANDS R0,R0,#0x3 \ 0000005C 0300000A BEQ ??CreateEditChat_3 7774 { 7775 if (zc==1) \ 00000060 010050E3 CMP R0,#+1 \ 00000064 1A00001A BNE ??CreateEditChat_4 7776 color=ACK_COLOR; //Зеленый \ 00000068 98B197E5 LDR R11,[R7, #+408] \ 0000006C 180000EA B ??CreateEditChat_4 7777 else 7778 color=I_COLOR; 7779 } 7780 else 7781 { 7782 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000070 080099E5 LDR R0,[R9, #+8] \ 00000074 010070E3 CMN R0,#+1 \ 00000078 1400001A BNE ??CreateEditChat_5 7783 { 7784 type = lp->type&0x0F; \ 0000007C 0C0099E5 LDR R0,[R9, #+12] \ 00000080 0F1000E2 AND R1,R0,#0xF 7785 if(lp->type&0x10) \ 00000084 100010E3 TST R0,#0x10 \ 00000088 0900000A BEQ ??CreateEditChat_6 7786 { 7787 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 0000008C 010051E3 CMP R1,#+1 \ 00000090 74B19705 LDREQ R11,[R7, #+372] \ 00000094 0400000A BEQ ??CreateEditChat_7 \ 00000098 030051E3 CMP R1,#+3 \ 0000009C 7CB19705 LDREQ R11,[R7, #+380] \ 000000A0 94A19705 LDREQ R10,[R7, #+404] \ 000000A4 0A00000A BEQ ??CreateEditChat_4 \ 000000A8 78B197E5 LDR R11,[R7, #+376] \ ??CreateEditChat_7: \ 000000AC 90A197E5 LDR R10,[R7, #+400] \ 000000B0 070000EA B ??CreateEditChat_4 7788 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 7789 } 7790 else 7791 { 7792 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??CreateEditChat_6: \ 000000B4 010051E3 CMP R1,#+1 \ 000000B8 0500000A BEQ ??CreateEditChat_4 \ 000000BC 030051E3 CMP R1,#+3 \ 000000C0 6CB19715 LDRNE R11,[R7, #+364] \ 000000C4 88A19705 LDREQ R10,[R7, #+392] \ 000000C8 70B19705 LDREQ R11,[R7, #+368] \ 000000CC 000000EA B ??CreateEditChat_4 7793 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 7794 } 7795 } 7796 else 7797 color=UNACK_COLOR; //????? \ ??CreateEditChat_5: \ 000000D0 9CB197E5 LDR R11,[R7, #+412] 7798 } 7799 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000D4 10008DE2 ADD R0,SP,#+16 \ 000000D8 640100EF SWI +356 7800 if ((lp->type&0x0F)!=3) \ 000000DC 0C0099E5 LDR R0,[R9, #+12] \ 000000E0 0F0000E2 AND R0,R0,#0xF \ 000000E4 030050E3 CMP R0,#+3 \ 000000E8 0800000A BEQ ??CreateEditChat_8 7801 { 7802 ascii2ws(ews,lp->hdr); \ 000000EC 300297E5 LDR R0,[R7, #+560] \ 000000F0 101089E2 ADD R1,R9,#+16 \ 000000F4 ........ _BLF ascii2ws,??ascii2ws??rA 7803 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000000F8 303297E5 LDR R3,[R7, #+560] \ 000000FC 4020A0E3 MOV R2,#+64 \ 00000100 000093E5 LDR R0,[R3, #+0] \ 00000104 B000D0E1 LDRH R0,[R0, #+0] \ 00000108 01002DE9 PUSH {R0} \ 0000010C 030000EA B ??CreateEditChat_9 7804 } 7805 else 7806 { 7807 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_8: \ 00000110 0000A0E3 MOV R0,#+0 \ 00000114 01002DE9 PUSH {R0} \ 00000118 303297E5 LDR R3,[R7, #+560] \ 0000011C 2020A0E3 MOV R2,#+32 \ ??CreateEditChat_9: \ 00000120 0110A0E3 MOV R1,#+1 \ 00000124 14008DE2 ADD R0,SP,#+20 \ 00000128 650100EF SWI +357 \ 0000012C 04D08DE2 ADD SP,SP,#+4 7808 } 7809 PrepareEditCOptions(&ec_options); \ 00000130 0D00A0E1 MOV R0,SP \ 00000134 C80100EF SWI +456 7810 SetPenColorToEditCOptions(&ec_options,color); \ 00000138 0B10A0E1 MOV R1,R11 \ 0000013C 0D00A0E1 MOV R0,SP \ 00000140 CC0100EF SWI +460 7811 SetFontToEditCOptions(&ec_options,font); \ 00000144 0A10A0E1 MOV R1,R10 \ 00000148 0D00A0E1 MOV R0,SP \ 0000014C CA0100EF SWI +458 7812 CopyOptionsToEditControl(&ec,&ec_options); \ 00000150 0D10A0E1 MOV R1,SP \ 00000154 10008DE2 ADD R0,SP,#+16 \ 00000158 CE0100EF SWI +462 7813 AddEditControlToEditQend(eq,&ec,ma); \ 0000015C 0520A0E1 MOV R2,R5 \ 00000160 10108DE2 ADD R1,SP,#+16 \ 00000164 0800A0E1 MOV R0,R8 \ 00000168 660100EF SWI +358 7814 if ((lp->type&0x0F)!=3) \ 0000016C 0C0099E5 LDR R0,[R9, #+12] \ 00000170 0F1000E2 AND R1,R0,#0xF \ 00000174 030051E3 CMP R1,#+3 \ 00000178 0300000A BEQ ??CreateEditChat_10 7815 { 7816 ParseAnswer(ews,lp->text); \ 0000017C 300297E5 LDR R0,[R7, #+560] \ 00000180 601089E2 ADD R1,R9,#+96 \ 00000184 ........ BL ParseAnswer \ 00000188 050000EA B ??CreateEditChat_11 7817 } 7818 else 7819 { 7820 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_10: \ 0000018C 100010E3 TST R0,#0x10 \ 00000190 7C219715 LDRNE R2,[R7, #+380] \ 00000194 300297E5 LDR R0,[R7, #+560] \ 00000198 70219705 LDREQ R2,[R7, #+368] \ 0000019C 601089E2 ADD R1,R9,#+96 \ 000001A0 ........ BL ParseXStatusText 7821 } 7822 PrepareEditControl(&ec); \ ??CreateEditChat_11: \ 000001A4 10008DE2 ADD R0,SP,#+16 \ 000001A8 640100EF SWI +356 7823 ConstructEditControl(&ec, 7824 ECT_NORMAL_TEXT, 7825 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 7826 ews,ews->wsbody[0]); \ 000001AC 303297E5 LDR R3,[R7, #+560] \ 000001B0 000093E5 LDR R0,[R3, #+0] \ 000001B4 B010D0E1 LDRH R1,[R0, #+0] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 0100A0E1 MOV R0,R1 \ 000001C0 01002DE9 PUSH {R0} \ 000001C4 812DA013 MOVNE R2,#+8256 \ 000001C8 2020A003 MOVEQ R2,#+32 \ 000001CC 0310A0E3 MOV R1,#+3 \ 000001D0 14008DE2 ADD R0,SP,#+20 \ 000001D4 650100EF SWI +357 7827 PrepareEditCOptions(&ec_options); \ 000001D8 04008DE2 ADD R0,SP,#+4 \ 000001DC C80100EF SWI +456 7828 //#ifdef M75 7829 if ((lp->type&0x0F)!=3) \ 000001E0 0C0099E5 LDR R0,[R9, #+12] \ 000001E4 04D08DE2 ADD SP,SP,#+4 \ 000001E8 0F1000E2 AND R1,R0,#0xF \ 000001EC 030051E3 CMP R1,#+3 \ 000001F0 0300000A BEQ ??CreateEditChat_12 7830 { 7831 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 000001F4 100010E3 TST R0,#0x10 \ 000001F8 80119705 LDREQ R1,[R7, #+384] \ 000001FC 8C119715 LDRNE R1,[R7, #+396] \ 00000200 080000EA B ??CreateEditChat_13 7832 } 7833 else 7834 { 7835 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_12: \ 00000204 100010E3 TST R0,#0x10 \ 00000208 7C119715 LDRNE R1,[R7, #+380] \ 0000020C 0D00A0E1 MOV R0,SP \ 00000210 70119705 LDREQ R1,[R7, #+368] \ 00000214 CC0100EF SWI +460 7836 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000218 0C0099E5 LDR R0,[R9, #+12] \ 0000021C 100010E3 TST R0,#0x10 \ 00000220 94119715 LDRNE R1,[R7, #+404] \ 00000224 88119705 LDREQ R1,[R7, #+392] \ ??CreateEditChat_13: \ 00000228 0D00A0E1 MOV R0,SP \ 0000022C CA0100EF SWI +458 7837 } 7838 //#else 7839 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 7840 //#endif 7841 CopyOptionsToEditControl(&ec,&ec_options); \ 00000230 0D10A0E1 MOV R1,SP \ 00000234 10008DE2 ADD R0,SP,#+16 \ 00000238 CE0100EF SWI +462 7842 AddEditControlToEditQend(eq,&ec,ma); \ 0000023C 0520A0E1 MOV R2,R5 \ 00000240 10108DE2 ADD R1,SP,#+16 \ 00000244 0800A0E1 MOV R0,R8 \ 00000248 660100EF SWI +358 7843 lp=lp->next; \ 0000024C 009099E5 LDR R9,[R9, #+0] 7844 } \ 00000250 000059E3 CMP R9,#+0 \ 00000254 7CFFFF1A BNE ??CreateEditChat_2 7845 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 00000258 800094E5 LDR R0,[R4, #+128] 7846 total_unread2=total_unread2-t->unread_msg; 7847 t->unread_msg=0; \ 0000025C 0090A0E3 MOV R9,#+0 \ 00000260 000050E3 CMP R0,#+0 \ 00000264 B8029715 LDRNE R0,[R7, #+696] \ 00000268 01004012 SUBNE R0,R0,#+1 \ 0000026C B8028715 STRNE R0,[R7, #+696] \ 00000270 140297E5 LDR R0,[R7, #+532] \ 00000274 841094E5 LDR R1,[R4, #+132] \ 00000278 010040E0 SUB R0,R0,R1 \ 0000027C 140287E5 STR R0,[R7, #+532] \ 00000280 849084E5 STR R9,[R4, #+132] 7848 t->isunread=0; \ 00000284 809084E5 STR R9,[R4, #+128] 7849 ChangeContactPos(t); \ 00000288 0400A0E1 MOV R0,R4 \ 0000028C ........ _BLF ChangeContactPos,??ChangeContactPos??rA 7850 wsprintf(ews, "-------"); \ 00000290 300297E5 LDR R0,[R7, #+560] \ 00000294 4C1086E2 ADD R1,R6,#+76 \ 00000298 240100EF SWI +292 7851 PrepareEditControl(&ec); \ 0000029C 10008DE2 ADD R0,SP,#+16 \ 000002A0 640100EF SWI +356 7852 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002A4 303297E5 LDR R3,[R7, #+560] \ 000002A8 4020A0E3 MOV R2,#+64 \ 000002AC 000093E5 LDR R0,[R3, #+0] \ 000002B0 0110A0E3 MOV R1,#+1 \ 000002B4 B000D0E1 LDRH R0,[R0, #+0] \ 000002B8 01002DE9 PUSH {R0} \ 000002BC 14008DE2 ADD R0,SP,#+20 \ 000002C0 650100EF SWI +357 7853 PrepareEditCOptions(&ec_options); \ 000002C4 04008DE2 ADD R0,SP,#+4 \ 000002C8 C80100EF SWI +456 7854 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000002CC 801197E5 LDR R1,[R7, #+384] \ 000002D0 04008DE2 ADD R0,SP,#+4 \ 000002D4 CA0100EF SWI +458 7855 CopyOptionsToEditControl(&ec,&ec_options); \ 000002D8 04108DE2 ADD R1,SP,#+4 \ 000002DC 14008DE2 ADD R0,SP,#+20 \ 000002E0 CE0100EF SWI +462 7856 AddEditControlToEditQend(eq,&ec,ma); \ 000002E4 0520A0E1 MOV R2,R5 \ 000002E8 14108DE2 ADD R1,SP,#+20 \ 000002EC 0800A0E1 MOV R0,R8 \ 000002F0 660100EF SWI +358 7857 7858 if (t->answer) ParseAnswer(ews,t->answer); \ 000002F4 941094E5 LDR R1,[R4, #+148] \ 000002F8 04D08DE2 ADD SP,SP,#+4 \ 000002FC 000051E3 CMP R1,#+0 \ 00000300 0200000A BEQ ??CreateEditChat_14 \ 00000304 300297E5 LDR R0,[R7, #+560] \ 00000308 ........ BL ParseAnswer \ 0000030C 020000EA B ??CreateEditChat_15 7859 else CutWSTR(ews,0); \ ??CreateEditChat_14: \ 00000310 300297E5 LDR R0,[R7, #+560] \ 00000314 0010A0E3 MOV R1,#+0 \ 00000318 260100EF SWI +294 7860 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 0000031C 10008DE2 ADD R0,SP,#+16 \ 00000320 640100EF SWI +356 7861 // ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); 7862 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,4096); \ 00000324 440197E5 LDR R0,[R7, #+324] \ 00000328 0310A0E3 MOV R1,#+3 \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 400DA0E3 MOV R0,#+4096 \ 00000334 01002DE9 PUSH {R0} \ 00000338 303297E5 LDR R3,[R7, #+560] \ 0000033C 402DA013 MOVNE R2,#+4096 \ 00000340 0020A003 MOVEQ R2,#+0 \ 00000344 14008DE2 ADD R0,SP,#+20 \ 00000348 650100EF SWI +357 7863 7864 PrepareEditCOptions(&ec_options); \ 0000034C 04008DE2 ADD R0,SP,#+4 \ 00000350 C80100EF SWI +456 7865 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000354 801197E5 LDR R1,[R7, #+384] \ 00000358 04008DE2 ADD R0,SP,#+4 \ 0000035C CA0100EF SWI +458 7866 CopyOptionsToEditControl(&ec,&ec_options); \ 00000360 04108DE2 ADD R1,SP,#+4 \ 00000364 14008DE2 ADD R0,SP,#+20 \ 00000368 CE0100EF SWI +462 7867 edchat_toitem=AddEditControlToEditQend(eq,&ec,ma); \ 0000036C 0520A0E1 MOV R2,R5 \ 00000370 14108DE2 ADD R1,SP,#+20 \ 00000374 0800A0E1 MOV R0,R8 \ 00000378 660100EF SWI +358 \ 0000037C 00A0A0E1 MOV R10,R0 7868 7869 if (t->req_xtext) \ 00000380 AC0094E5 LDR R0,[R4, #+172] \ 00000384 04D08DE2 ADD SP,SP,#+4 \ 00000388 000050E3 CMP R0,#+0 \ 0000038C 0400000A BEQ ??CreateEditChat_16 7870 { 7871 FreeXText(t); \ 00000390 0400A0E1 MOV R0,R4 \ 00000394 ........ _BLF FreeXText,??FreeXText??rA 7872 t->req_xtext=0; \ 00000398 AC9084E5 STR R9,[R4, #+172] 7873 RequestXText(t->uin); \ 0000039C 0C0094E5 LDR R0,[R4, #+12] \ 000003A0 ........ BL RequestXText 7874 } 7875 7876 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_16: \ 000003A4 1400A0E3 MOV R0,#+20 \ 000003A8 140000EF SWI +20 \ 000003AC 0050A0E1 MOV R5,R0 7877 ed_struct->ed_contact=t; \ 000003B0 004085E5 STR R4,[R5, #+0] 7878 ed_struct->ed_answer=edchat_toitem; \ 000003B4 08A085E5 STR R10,[R5, #+8] 7879 ed_struct->requested_decrement_total_unread=0; \ 000003B8 0C9085E5 STR R9,[R5, #+12] 7880 t->req_add=0; \ 000003BC 889084E5 STR R9,[R4, #+136] 7881 t->last_log=NULL; \ 000003C0 989084E5 STR R9,[R4, #+152] 7882 7883 // int scr_w=ScreenW(); 7884 // int scr_h=ScreenH(); 7885 // int head_h=HeaderH(); 7886 7887 patch_header(&edchat_hdr); \ 000003C4 380086E2 ADD R0,R6,#+56 \ 000003C8 ........ _BLF patch_header,??patch_header??rA 7888 patch_input(&edchat_desc); \ 000003CC B891C6E1 STRH R9,[R6, #+24] \ 000003D0 8A8100EF SWI +33162 \ 000003D4 010080E2 ADD R0,R0,#+1 \ 000003D8 BA01C6E1 STRH R0,[R6, #+26] \ 000003DC 888100EF SWI +33160 \ 000003E0 010040E2 SUB R0,R0,#+1 \ 000003E4 BC01C6E1 STRH R0,[R6, #+28] \ 000003E8 898100EF SWI +33161 \ 000003EC 0040A0E1 MOV R4,R0 \ 000003F0 8B8100EF SWI +33163 \ 000003F4 000044E0 SUB R0,R4,R0 \ 000003F8 010040E2 SUB R0,R0,#+1 \ 000003FC BE01C6E1 STRH R0,[R6, #+30] 7889 // edchat_desc.font=ED_FONT_SIZE; 7890 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000400 20002DE9 PUSH {R5} \ 00000404 0130A0E3 MOV R3,#+1 \ 00000408 0820A0E1 MOV R2,R8 \ 0000040C 381086E2 ADD R1,R6,#+56 \ 00000410 0600A0E1 MOV R0,R6 \ 00000414 670100EF SWI +359 \ 00000418 C80287E5 STR R0,[R7, #+712] 7891 } \ 0000041C 40D08DE2 ADD SP,SP,#+64 \ 00000420 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000424 ........ DC32 edchat_desc 7892 7893 //----------------------------------------------------------------------------- 7894 #define EC_MNU_MAX 9 7895 \ In segment CODE, align 4, keep-with-next 7896 void Quote(GUI *data) 7897 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 7898 int q_n; 7899 EDITCONTROL ec, ec_hdr; 7900 EDITCONTROL ec_ed; 7901 WSHDR *ed_ws; 7902 WSHDR *ws; 7903 7904 EDCHAT_STRUCT *ed_struct; 7905 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7906 7907 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7908 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 7909 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 7910 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 7911 7912 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 7913 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 7914 { 7915 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7916 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 7917 } 7918 else 7919 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7920 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 7921 { 7922 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 7923 } 7924 else 7925 { 7926 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7927 } 7928 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7929 do 7930 { 7931 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7932 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 7933 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7934 } 7935 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 7936 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7937 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7938 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 7939 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7940 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7941 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7942 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7943 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 7944 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 7945 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 7946 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 7947 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 7948 \ In segment CODE, align 4, keep-with-next 7949 void Quote2(GUI *data)//цитирование без фокуса на ответ 7950 { \ Quote2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 7951 int q_n; 7952 EDITCONTROL ec, ec_hdr; 7953 EDITCONTROL ec_ed; 7954 WSHDR *ed_ws; 7955 WSHDR *ws; 7956 7957 EDCHAT_STRUCT *ed_struct; 7958 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7959 7960 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7961 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 7962 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 7963 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 7964 7965 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 7966 if(wstrlen(ec_hdr.pWS)) \ 00000060 80009DE5 LDR R0,[SP, #+128] \ 00000064 230100EF SWI +291 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0600000A BEQ ??Quote2_0 7967 { 7968 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7969 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote2_1 7970 } 7971 else 7972 CutWSTR(ed_ws,0); \ ??Quote2_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7973 if (EDIT_IsMarkModeActive(ed_struct->ed_chatgui)) \ ??Quote2_1: \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C D80100EF SWI +472 \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300000A BEQ ??Quote2_2 7974 { 7975 EDIT_GetMarkedText(ed_struct->ed_chatgui,ed_ws); \ 000000A8 040094E5 LDR R0,[R4, #+4] \ 000000AC 0510A0E1 MOV R1,R5 \ 000000B0 D90100EF SWI +473 \ 000000B4 020000EA B ??Quote2_3 7976 } 7977 else 7978 { 7979 wstrcat(ed_ws,ec.pWS); \ ??Quote2_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7980 } 7981 int ed_pos=0; \ ??Quote2_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7982 do 7983 { 7984 ed_pos++; \ ??Quote2_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7985 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 7986 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7987 } 7988 while((ed_pos=wstrchr(ed_ws,ed_pos,'\r'))!=0xFFFF); \ 000000F8 0D20A0E3 MOV R2,#+13 \ 000000FC 0710A0E1 MOV R1,R7 \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 DC0100EF SWI +476 \ 00000108 060050E1 CMP R0,R6 \ 0000010C EFFFFF1A BNE ??Quote2_4 7989 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7990 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7991 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 7992 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7993 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7994 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7995 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7996 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 7997 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000178 081094E5 LDR R1,[R4, #+8] \ 0000017C 0050A0E1 MOV R5,R0 \ 00000180 040094E5 LDR R0,[R4, #+4] \ 00000184 9B0100EF SWI +411 7998 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 7999 EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 9B0100EF SWI +411 8000 FreeWS(ws); \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 8001 GeneralFuncF1(1); \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 3B0100EF SWI +315 8002 } \ 000001B0 84D08DE2 ADD SP,SP,#+132 \ 000001B4 F080BDE8 POP {R4-R7,PC} ;; return 8003 8004 \ In segment CODE, align 4, keep-with-next 8005 void GetShortInfo(GUI *data) 8006 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 8007 EDCHAT_STRUCT *ed_struct; 8008 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 8009 8010 TPKT *p; 8011 CLIST *t; 8012 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,??DataTable154 ;; S_ICONS + 660 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1E00001A BNE ??GetShortInfo_0 8013 { 8014 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 8015 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 8016 p->pkt.type=T_REQINFOSHORT; 8017 p->pkt.data_len=0; 8018 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,??DataTable153 ;; `?ed_chatgui); \ 0000007C 040094E5 LDR R0,[R4, #+4] \ 00000080 ........ BL AddMsgToChat 8020 RecountMenu(t,1); \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C ........ BL RecountMenu 8021 SUBPROC((void *)SendAnswer,0,p); \ 00000090 ........ LDR R0,??DataTable155 ;; SendAnswer \ 00000094 0620A0E1 MOV R2,R6 \ 00000098 0010A0E3 MOV R1,#+0 \ 0000009C 710100EF SWI +369 \ 000000A0 08D08DE2 ADD SP,SP,#+8 8022 } 8023 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 000000A4 0100A0E3 MOV R0,#+1 \ 000000A8 3B0100EF SWI +315 8024 } \ 000000AC 7080BDE8 POP {R4-R6,PC} ;; return 8025 8026 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 8027 void AddCurContact(GUI *data) 8028 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 8029 EDCHAT_STRUCT *ed_struct; 8030 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8031 8032 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,??DataTable154 ;; S_ICONS + 660 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 8033 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 8034 } \ 00000030 0080BDE8 POP {PC} ;; return 8035 \ In segment CODE, align 4, keep-with-next 8036 void SendAuthReq(GUI *data) 8037 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 8038 EDCHAT_STRUCT *ed_struct; 8039 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 8040 8041 TPKT *p; 8042 CLIST *t; 8043 int l; 8044 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,??DataTable154 ;; S_ICONS + 660 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 8046 { 8047 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 8048 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 8049 p->pkt.type=T_AUTHREQ; 8050 p->pkt.data_len=l; 8051 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 8052 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable151 ;; `?ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8054 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 8055 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable155 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8056 } 8057 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8058 } \ 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,??DataTable154 ;; S_ICONS + 660 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_0 8070 { 8071 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 8072 p->pkt.uin=t->uin; \ 00000054 0C0096E5 LDR R0,[R6, #+12] 8073 p->pkt.type=T_AUTHGRANT; 8074 p->pkt.data_len=l; 8075 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 8076 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 323085E2 ADD R3,R5,#+50 \ 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 8077 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 8078 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0600A0E1 MOV R0,R6 \ 000000A8 ........ BL RecountMenu 8079 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable155 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 8080 } 8081 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 8082 } \ 000000C8 FF81BDE8 POP {R0-R8,PC} ;; return 8083 \ In segment CODE, align 4, keep-with-next 8084 void OpenLogfile(GUI *data) 8085 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 8086 EDCHAT_STRUCT *ed_struct; 8087 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 8088 8089 CLIST *t; 8090 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0050A0E1 MOV R5,R0 8091 if ((t=ed_struct->ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??OpenLogfile_0 8092 { 8093 #ifdef EVILFOX 8094 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 8095 #else 8096 #ifdef UIN_WRITE 8097 if (HISTORY_TYPE) 8098 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 8099 else 8100 wsprintf(ws,"%s\\%s(%d).txt",HIST_PATH,t->name, t->uin); 8101 #else 8102 if (HISTORY_TYPE) \ 00000024 ........ LDR R2,??DataTable157 ;; S_ICONS \ 00000028 0C3090E5 LDR R3,[R0, #+12] \ 0000002C 504192E5 LDR R4,[R2, #+336] \ 00000030 58109FE5 LDR R1,??OpenLogfile_1 ;; `?` \ 00000034 DA0EA0E3 MOV R0,#+3488 \ 00000038 000054E3 CMP R4,#+0 \ 0000003C 0600000A BEQ ??OpenLogfile_2 8103 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); \ 00000040 08002DE9 PUSH {R3} \ 00000044 283192E5 LDR R3,[R2, #+296] \ 00000048 022080E0 ADD R2,R0,R2 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 240100EF SWI +292 \ 00000054 04D08DE2 ADD SP,SP,#+4 \ 00000058 030000EA B ??OpenLogfile_3 8104 else 8105 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); \ ??OpenLogfile_2: \ 0000005C 022080E0 ADD R2,R0,R2 \ 00000060 101081E2 ADD R1,R1,#+16 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 240100EF SWI +292 8106 #endif 8107 #endif 8108 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 0000006C 0020A0E3 MOV R2,#+0 \ 00000070 0010A0E3 MOV R1,#+0 \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 940000EF SWI +148 8109 } 8110 FreeWS(ws); \ ??OpenLogfile_0: \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 290100EF SWI +297 8111 GeneralFuncF1(1); \ 00000084 0100A0E3 MOV R0,#+1 \ 00000088 3B0100EF SWI +315 8112 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 00000090 ........ DC32 `?` 8113 \ In segment CODE, align 4, keep-with-next 8114 void ClearLog(GUI *data/*,void *dummy*/) 8115 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 8116 EDITCONTROL ec; 8117 EDCHAT_STRUCT *ed_struct; 8118 WSHDR *ws; 8119 CLIST *t; 8120 8121 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 8122 8123 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 8124 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 8125 { 8126 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 8127 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 8128 8129 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 8130 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 8131 8132 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 8133 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 8134 } 8135 else 8136 { 8137 8138 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 8139 { 8140 if (t->log) \ 00000074 900095E5 LDR R0,[R5, #+144] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 8141 { 8142 FreeLOGQ(&t->log); \ 00000084 900085E2 ADD R0,R5,#+144 \ 00000088 ........ BL FreeLOGQ 8143 t->msg_count=0; \ 0000008C A06085E5 STR R6,[R5, #+160] 8144 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 8145 { 8146 while(ed_struct->ed_answer!=2) 8147 { 8148 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 8149 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 8150 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 8151 } 8152 } 8153 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 9C6085E5 STR R6,[R5, #+156] 8154 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 8155 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 8156 } 8157 } 8158 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 8159 \ In segment CODE, align 4, keep-with-next 8160 void ecmenu_ghook(void *data, int cmd) 8161 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 8162 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 8163 { 8164 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 8165 } 8166 } \ 00000010 0080BDE8 POP {PC} ;; return 8167 \ In segment DATA_C, align 4, align-sorted 8168 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ CmdMenuHeader: \ 00000074 DS8 20 \ 00000088 REQUIRE `?` \ gipc: \ 00000088 DS8 12 \ 00000094 REQUIRE `?` \ tmr_gipc: \ 00000094 DS8 12 \ 000000A0 REQUIRE `?` \ color_choose: \ 000000A0 DS8 4 \ 000000A4 REQUIRE `?` \ Vibra_cc: \ 000000A4 DS8 4 \ 000000A8 REQUIRE `?` \ Ping_X: \ 000000A8 DS8 4 \ 000000AC REQUIRE `?` \ Ping_Y: \ 000000AC DS8 4 \ 000000B0 REQUIRE `?` \ unread_X: \ 000000B0 DS8 4 \ 000000B4 REQUIRE `?` \ unread_Y: \ 000000B4 DS8 4 \ 000000B8 REQUIRE `?` \ show_xstatus: \ 000000B8 DS8 4 \ 000000BC REQUIRE `?` \ isLogStatusChange: \ 000000BC DS8 4 \ 000000C0 REQUIRE `?` \ SORT_CLIST: \ 000000C0 DS8 4 \ 000000C4 REQUIRE `?` \ IsShowLoopback: \ 000000C4 DS8 4 \ 000000C8 REQUIRE `?` \ fonto: \ 000000C8 DS8 4 \ 000000CC REQUIRE `?` \ spaco1: \ 000000CC DS8 4 \ 000000D0 REQUIRE `?` \ spaco2: \ 000000D0 DS8 4 \ 000000D4 REQUIRE `?` \ AUTO_ENGADE: \ 000000D4 DS8 4 \ 000000D8 REQUIRE `?` \ Is_Unread_On: \ 000000D8 DS8 4 \ 000000DC REQUIRE `?` \ Pause_Time: \ 000000DC DS8 4 \ 000000E0 REQUIRE `?` \ auto_x: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ auto_y: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ showAwayIdle: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ onlineTime_x: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ onlineTime_y: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ Auto_Status: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ time_zone: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ TIME_OR_MSG: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ ping_time_config: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ msg_d_x: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ msg_d_y: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ main_lenght: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ use_cutter: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ Reset_timer: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ LongRightAction: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ LongLeftAction: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ screenSaverTime: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ isScreenSaverEna: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ UIN: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ VIBR_ON_CONNECT: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ SHOW_ACTIVE: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ VIBR_TYPE: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ DEVELOP_IF: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ LOG_ALL: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ LOG_STATCH: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ FIRST_LETTER: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ show_send_info: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ ActionResh: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ HISTORY_TYPE: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ vibraPower: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ IDLEICON_X: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ IDLEICON_Y: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ IDLEICON_XX: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ IDLEICON_YX: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ I_COLOR: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ TO_COLOR: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ X_COLOR: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ O_I_COLOR: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ O_TO_COLOR: \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ O_X_COLOR: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ ED_FONT_SIZE: \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ ED_H_FONT_SIZE: \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ ED_X_FONT_SIZE: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ O_ED_FONT_SIZE: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ O_ED_H_FONT_SIZE: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ O_ED_X_FONT_SIZE: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ ACK_COLOR: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ UNACK_COLOR: \ 0000019C DS8 4 \ 000001A0 REQUIRE `?` \ ENA_AUTO_XTXT: \ 000001A0 DS8 4 \ 000001A4 REQUIRE `?` \ NOT_LOG_SAME_XTXT: \ 000001A4 DS8 4 \ 000001A8 REQUIRE `?` \ LOG_XTXT: \ 000001A8 DS8 4 \ 000001AC REQUIRE `?` \ HISTORY_BUFFER: \ 000001AC DS8 4 \ 000001B0 REQUIRE `?` \ ILL_DISP_RECV: \ 000001B0 DS8 4 \ 000001B4 REQUIRE `?` \ ILL_KEYS_RECV: \ 000001B4 DS8 4 \ 000001B8 REQUIRE `?` \ ILL_RECV_TMR: \ 000001B8 DS8 4 \ 000001BC REQUIRE `?` \ ILL_DISP_SEND: \ 000001BC DS8 4 \ 000001C0 REQUIRE `?` \ ILL_KEYS_SEND: \ 000001C0 DS8 4 \ 000001C4 REQUIRE `?` \ ILL_SEND_TMR: \ 000001C4 DS8 4 \ 000001C8 REQUIRE `?` \ ILL_SEND_FADE: \ 000001C8 DS8 4 \ 000001CC REQUIRE `?` \ ILL_RECV_FADE: \ 000001CC DS8 4 \ 000001D0 REQUIRE `?` \ ILL_OFF_FADE: \ 000001D0 DS8 4 \ 000001D4 REQUIRE `?` \ extended_sounds: \ 000001D4 DS8 4 \ 000001D8 REQUIRE `?` \ sndVolume: \ 000001D8 DS8 4 \ 000001DC REQUIRE `?` \ NATICQ_PORT: \ 000001DC DS8 4 \ 000001E0 REQUIRE `?` \ RECONNECT_TIME: \ 000001E0 DS8 4 \ 000001E4 REQUIRE `?` \ main_d: \ 000001E4 DS8 4 \ 000001E8 REQUIRE `?` \ align: \ 000001E8 DS8 4 \ 000001EC REQUIRE `?` \ canvasdata: \ 000001EC DS8 4 \ 000001F0 REQUIRE `?` \ paused_height: \ 000001F0 DS8 4 \ 000001F4 REQUIRE `?` \ wsBuffer: \ 000001F4 DS8 4 \ 000001F8 REQUIRE `?` \ uins: \ 000001F8 DS8 4 \ 000001FC REQUIRE `?` \ saver_on: \ 000001FC DS8 4 \ 00000200 REQUIRE `?` \ Is_PING_On: \ 00000200 DS8 4 \ 00000204 REQUIRE `?` \ Is_SMARTCPU_On: \ 00000204 DS8 4 \ 00000208 REQUIRE `?` \ Is_INC_On: \ 00000208 DS8 4 \ 0000020C REQUIRE `?` \ Is_ILU_On: \ 0000020C DS8 4 \ 00000210 REQUIRE `?` \ Is_Double_Vibra_On: \ 00000210 DS8 4 \ 00000214 REQUIRE `?` \ total_unread2: \ 00000214 DS8 4 \ 00000218 REQUIRE `?` \ maincsm_id: \ 00000218 DS8 4 \ 0000021C REQUIRE `?` \ maingui_id: \ 0000021C DS8 4 \ 00000220 REQUIRE `?` \ SENDMSGCOUNT: \ 00000220 DS8 4 \ 00000224 REQUIRE `?` \ IsActiveUp: \ 00000224 DS8 4 \ 00000228 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000228 DS8 4 \ 0000022C REQUIRE `?` \ CurrentXStatus: \ 0000022C DS8 4 \ 00000230 REQUIRE `?` \ ews: \ 00000230 DS8 4 \ 00000234 REQUIRE `?` \ scrsTime: \ 00000234 DS8 4 \ 00000238 REQUIRE `?` \ msg_away_timer: \ 00000238 DS8 4 \ 0000023C REQUIRE `?` \ away_m: \ 0000023C DS8 4 \ 00000240 REQUIRE `?` \ status_rem: \ 00000240 DS8 4 \ 00000244 REQUIRE `?` \ change_back_status: \ 00000244 DS8 4 \ 00000248 REQUIRE `?` \ Show_XTX: \ 00000248 DS8 4 \ 0000024C REQUIRE `?` \ Is_UPTIME_On: \ 0000024C DS8 4 \ 00000250 REQUIRE `?` \ uptimeHour: \ 00000250 DS8 4 \ 00000254 REQUIRE `?` \ uptimeMin: \ 00000254 DS8 4 \ 00000258 REQUIRE `?` \ uptimeSec: \ 00000258 DS8 4 \ 0000025C REQUIRE `?` \ INC_show2: \ 0000025C DS8 4 \ 00000260 REQUIRE `?` \ font: \ 00000260 DS8 4 \ 00000264 REQUIRE `?` \ input_awaymsg_id: \ 00000264 DS8 4 \ 00000268 REQUIRE `?` \ silenthide: \ 00000268 DS8 4 \ 0000026C REQUIRE `?` \ disautorecconect: \ 0000026C DS8 4 \ 00000270 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000270 DS8 4 \ 00000274 REQUIRE `?` \ Is_Show_Offline: \ 00000274 DS8 4 \ 00000278 REQUIRE `?` \ Is_Show_Groups: \ 00000278 DS8 4 \ 0000027C REQUIRE `?` \ CurrentStatus: \ 0000027C DS8 4 \ 00000280 REQUIRE `?` \ CurrentPrivateStatus: \ 00000280 DS8 4 \ 00000284 REQUIRE `?` \ vibra_count: \ 00000284 DS8 4 \ 00000288 REQUIRE `?` \ templates_chars: \ 00000288 DS8 4 \ 0000028C REQUIRE `?` \ templates_lines: \ 0000028C DS8 4 \ 00000290 REQUIRE `?` \ RXstate: \ 00000290 DS8 4 \ 00000294 REQUIRE `?` \ connect_state: \ 00000294 DS8 4 \ 00000298 REQUIRE `?` \ sock: \ 00000298 DS8 4 \ 0000029C REQUIRE `?` \ TOTALRECEIVED: \ 0000029C DS8 4 \ 000002A0 REQUIRE `?` \ TOTALSENDED: \ 000002A0 DS8 4 \ 000002A4 REQUIRE `?` \ ALLTOTALRECEIVED: \ 000002A4 DS8 4 \ 000002A8 REQUIRE `?` \ ALLTOTALSENDED: \ 000002A8 DS8 4 \ 000002AC REQUIRE `?` \ sendq_l: \ 000002AC DS8 4 \ 000002B0 REQUIRE `?` \ sendq_p: \ 000002B0 DS8 4 \ 000002B4 REQUIRE `?` \ is_gprs_online: \ 000002B4 DS8 4 \ 000002B8 REQUIRE `?` \ total_unread: \ 000002B8 DS8 4 \ 000002BC REQUIRE `?` \ cltop: \ 000002BC DS8 4 \ 000002C0 REQUIRE `?` \ GROUP_CACHE: \ 000002C0 DS8 4 \ 000002C4 REQUIRE `?` \ contactlist_menu_id: \ 000002C4 DS8 4 \ 000002C8 REQUIRE `?` \ edchat_id: \ 000002C8 DS8 4 \ 000002CC REQUIRE `?` \ 000002CC DS8 4 \ 000002D0 REQUIRE `?` \ tenseconds_to_ping: \ 000002D0 DS8 4 \ 000002D4 REQUIRE `?` \ kopa_online: \ 000002D4 DS8 4 \ 000002D8 REQUIRE `?` \ kopa_kontaktu: \ 000002D8 DS8 4 \ 000002DC REQUIRE `?` \ gui_methods2: \ 000002DC DS8 96 \ 0000033C REQUIRE `?` \ old_redraw: \ 0000033C DS8 4 \ 00000340 REQUIRE `?` \ 00000340 DS8 4 \ 00000344 REQUIRE `?` \ 00000344 DS8 4 \ 00000348 REQUIRE `?` \ DNR_ID: \ 00000348 DS8 4 \ 0000034C REQUIRE `?` \ DNR_TRIES: \ 0000034C DS8 4 \ 00000350 REQUIRE `?` \ host_counter: \ 00000350 DS8 4 \ 00000354 REQUIRE `?` \ ping_time: \ 00000354 DS8 4 \ 00000358 REQUIRE `?` \ NEW_MSG: \ 00000358 DS8 4 \ 0000035C REQUIRE `?` \ time_to_stop_t9: \ 0000035C DS8 4 \ 00000360 REQUIRE `?` \ cmd_chars: \ 00000360 DS8 4 \ 00000364 REQUIRE `?` \ cmd_lines: \ 00000364 DS8 4 \ 00000368 REQUIRE `?` \ NumOfItems: \ 00000368 DS8 4 \ 0000036C REQUIRE `?` \ comanda: \ 0000036C DS8 4 \ 00000370 REQUIRE `?` \ INC_show: \ 00000370 DS8 4 \ 00000374 REQUIRE `?` \ old_ed_redraw: \ 00000374 DS8 4 \ 00000378 REQUIRE `?` \ 00000378 DS8 64 \ 000003B8 REQUIRE `?` \ fontColor: \ 000003B8 DS8 1 \ 000003B9 REQUIRE `?` \ bgrColor: \ 000003B9 DS8 1 \ 000003BA REQUIRE `?` \ 000003BA DS8 2 \ awayMsg: \ 000003BC DS8 1024 \ 000007BC REQUIRE `?` \ elf_path: \ 000007BC DS8 256 \ 000008BC REQUIRE `?` \ ContactT9Key: \ 000008BC DS8 32 \ 000008DC REQUIRE `?` \ per_s: \ 000008DC DS8 3 \ 000008DF REQUIRE `?` \ 000008DF DS8 1 \ fontpath: \ 000008E0 DS8 64 \ 00000920 REQUIRE `?` \ CsmAdr: \ 00000920 DS8 12 \ 0000092C REQUIRE `?` \ awayHelloMsg: \ 0000092C DS8 24 \ 00000944 REQUIRE `?` \ ignor_list: \ 00000944 DS8 256 \ 00000A44 REQUIRE `?` \ playing: \ 00000A44 DS8 16 \ 00000A54 REQUIRE `?` \ PASS: \ 00000A54 DS8 12 \ 00000A60 REQUIRE `?` \ sndStartup: \ 00000A60 DS8 64 \ 00000AA0 REQUIRE `?` \ sndSrvMsg: \ 00000AA0 DS8 64 \ 00000AE0 REQUIRE `?` \ sndGlobal: \ 00000AE0 DS8 64 \ 00000B20 REQUIRE `?` \ sndGlobal2: \ 00000B20 DS8 64 \ 00000B60 REQUIRE `?` \ sndMsg: \ 00000B60 DS8 64 \ 00000BA0 REQUIRE `?` \ sndMsg2: \ 00000BA0 DS8 64 \ 00000BE0 REQUIRE `?` \ sndMsgSent: \ 00000BE0 DS8 64 \ 00000C20 REQUIRE `?` \ pingsnd: \ 00000C20 DS8 64 \ 00000C60 REQUIRE `?` \ SMILE_FILE: \ 00000C60 DS8 64 \ 00000CA0 REQUIRE `?` \ TEMPLATES_PATH: \ 00000CA0 DS8 64 \ 00000CE0 REQUIRE `?` \ ICON_PATH: \ 00000CE0 DS8 64 \ 00000D20 REQUIRE `?` \ SMILE_PATH: \ 00000D20 DS8 64 \ 00000D60 REQUIRE `?` \ XSTATUSES_PATH: \ 00000D60 DS8 64 \ 00000DA0 REQUIRE `?` \ HIST_PATH: \ 00000DA0 DS8 64 \ 00000DE0 REQUIRE `?` \ NATICQ_HOST: \ 00000DE0 DS8 128 \ 00000E60 REQUIRE `?` \ suc_config_name: \ 00000E60 DS8 64 \ 00000EA0 REQUIRE `?` \ suc_config_name_mod: \ 00000EA0 DS8 64 \ 00000EE0 REQUIRE `?` \ talk_sound: \ 00000EE0 DS8 128 \ 00000F60 REQUIRE `?` \ unread_msg_info: \ 00000F60 DS8 64 \ 00000FA0 REQUIRE `?` \ mytmr3: \ 00000FA0 DS8 16 \ 00000FB0 REQUIRE `?` \ PINGO: \ 00000FB0 DS8 256 \ 000010B0 REQUIRE `?` \ scrsTmr: \ 000010B0 DS8 16 \ 000010C0 REQUIRE `?` \ away_msg: \ 000010C0 DS8 264 \ 000011C8 REQUIRE `?` \ away_msg_time: \ 000011C8 DS8 64 \ 00001208 REQUIRE `?` \ away_msg_time_dace: \ 00001208 DS8 16 \ 00001218 REQUIRE `?` \ tim_zone: \ 00001218 DS8 16 \ 00001228 REQUIRE `?` \ away_tmr: \ 00001228 DS8 16 \ 00001238 REQUIRE `?` \ mytmr: \ 00001238 DS8 16 \ 00001248 REQUIRE `?` \ mytmr2: \ 00001248 DS8 16 \ 00001258 REQUIRE `?` \ mytmr4: \ 00001258 DS8 16 \ 00001268 REQUIRE `?` \ onlineTime: \ 00001268 DS8 128 \ 000012E8 REQUIRE `?` \ onContact: \ 000012E8 DS8 64 \ 00001328 REQUIRE `?` \ incs2: \ 00001328 DS8 16 \ 00001338 REQUIRE `?` \ logmsg: \ 00001338 DS8 256 \ 00001438 REQUIRE `?` \ tmr_illumination: \ 00001438 DS8 16 \ 00001448 REQUIRE `?` \ tmr_vibra: \ 00001448 DS8 16 \ 00001458 REQUIRE `?` \ reconnect_tmr: \ 00001458 DS8 16 \ 00001468 REQUIRE `?` \ tmr_active: \ 00001468 DS8 16 \ 00001478 REQUIRE `?` \ clm_hdr_text: \ 00001478 DS8 64 \ 000014B8 REQUIRE `?` \ clmenu_sk_r: \ 000014B8 DS8 16 \ 000014C8 REQUIRE `?` \ statusTmr: \ 000014C8 DS8 16 \ 000014D8 REQUIRE `?` \ status: \ 000014D8 DS8 64 \ 00001518 REQUIRE `?` \ hostbuf2: \ 00001518 DS8 128 \ 00001598 REQUIRE `?` \ hostname: \ 00001598 DS8 128 \ 00001618 REQUIRE `?` \ send_tmr: \ 00001618 DS8 16 \ 00001628 REQUIRE `?` \ I_UIN: \ 00001628 DS8 12 \ 00001634 REQUIRE `?` \ a_txt: \ 00001634 DS8 48 \ 00001664 REQUIRE `?` \ s_txt: \ 00001664 DS8 48 \ 00001694 REQUIRE `?` \ d_txt: \ 00001694 DS8 48 \ 000016C4 REQUIRE `?` \ f_txt: \ 000016C4 DS8 48 \ 000016F4 REQUIRE `?` \ g_txt: \ 000016F4 DS8 48 \ 00001724 REQUIRE `?` \ develop: \ 00001724 DS8 16 \ 00001734 REQUIRE `?` \ requests1: \ 00001734 DS8 24 \ 0000174C REQUIRE `?` \ requests2: \ 0000174C DS8 20 \ 00001760 REQUIRE `?` \ requests3: \ 00001760 DS8 24 \ 00001778 REQUIRE `?` \ requests4: \ 00001778 DS8 20 \ 0000178C REQUIRE `?` \ requests6: \ 0000178C DS8 24 \ 000017A4 REQUIRE `?` \ mod_info: \ 000017A4 DS8 264 \ 000018AC REQUIRE `?` \ show_nick: \ 000018AC DS8 32 \ 000018CC REQUIRE `?` \ MAINCSM: \ 000018CC DS8 44 \ 000018F8 REQUIRE `?` 8183 { 8184 Quote, 8185 Quote2, 8186 AddSmile, 8187 GetShortInfo, 8188 AddCurContact, 8189 SendAuthReq, 8190 SendAuthGrant, 8191 OpenLogfile, 8192 ClearLog, 8193 }; 8194 8195 char ecm_contactname[64]; \ ecm_contactname: \ 000018F8 DS8 64 \ 00001938 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ ??sk: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ menuproc: \ 00000000 DS8 16 \ 00000010 REQUIRE `?` 8196 \ In segment DATA_C, align 4, align-sorted 8197 static const HEADER_DESC ecmenu_HDR={0,0,NULL,NULL,NULL,(int)ecm_contactname,LGP_NULL}; \ ecmenu_HDR: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, ecm_contactname, 32767 \ ....FF7F0000 \ 00000014 080000000000 DC32 8, 0H, ecmenu_ghook, 0H, menusoftkeys, menu_skt, 0, 0H \ 0000........ \ 00000000.... \ ............ \ 000000000000 \ 0000 \ 00000034 ............ DC32 ecmenu_ITEMS, ecmenu_HNDLS, 9 \ ....09000000 8198 8199 static const MENU_DESC ecmenu_STRUCT= 8200 { 8201 8,NULL,ecmenu_ghook,NULL, 8202 menusoftkeys, 8203 &menu_skt, 8204 0, 8205 NULL, 8206 ecmenu_ITEMS, 8207 ecmenu_HNDLS, 8208 EC_MNU_MAX 8209 }; 8210 \ In segment CODE, align 4, keep-with-next 8211 void ec_menu(EDCHAT_STRUCT *ed_struct) 8212 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 28D04DE2 SUB SP,SP,#+40 \ 00000008 0040A0E1 MOV R4,R0 8213 CLIST *t; 8214 int to_remove[EC_MNU_MAX+1]; 8215 int remove=0; 8216 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4800000A BEQ ??ec_menu_0 8217 { 8218 if (t->name) \ 00000018 ........ LDR R5,??DataTable157 ;; S_ICONS \ 0000001C F800A0E3 MOV R0,#+248 \ 00000020 600D80E3 ORR R0,R0,#0x1800 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 8219 { 8220 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 8221 } 8222 else 8223 { 8224 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 3E1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 8225 } 8226 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 820100EF SWI +386 \ 00000054 082094E5 LDR R2,[R4, #+8] \ 00000058 0210A0E3 MOV R1,#+2 \ 0000005C 020050E1 CMP R0,R2 \ 00000060 0500001A BNE ??ec_menu_4 8227 { 8228 to_remove[++remove]=0; \ 00000064 0020A0E3 MOV R2,#+0 \ 00000068 04208DE5 STR R2,[SP, #+4] 8229 to_remove[++remove]=1; \ 0000006C 0260A0E3 MOV R6,#+2 \ 00000070 0120A0E3 MOV R2,#+1 \ 00000074 08208DE5 STR R2,[SP, #+8] \ 00000078 010000EA B ??ec_menu_5 8230 } 8231 else 8232 { 8233 // to_remove[++remove]=1; 8234 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000007C 0160A0E3 MOV R6,#+1 \ 00000080 04108DE5 STR R1,[SP, #+4] 8235 } 8236 8237 if (ed_struct->ed_answer<=2) \ ??ec_menu_5: \ 00000084 080094E5 LDR R0,[R4, #+8] \ 00000088 030050E3 CMP R0,#+3 \ 0000008C 030000AA BGE ??ec_menu_6 8238 to_remove[++remove]=7; \ 00000090 016086E2 ADD R6,R6,#+1 \ 00000094 0D00A0E1 MOV R0,SP \ 00000098 0720A0E3 MOV R2,#+7 \ 0000009C 062180E7 STR R2,[R0, +R6, LSL #+2] 8239 8240 if (!ed_struct->ed_contact || connect_state!=3) \ ??ec_menu_6: \ 000000A0 000094E5 LDR R0,[R4, #+0] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0200000A BEQ ??ec_menu_7 \ 000000AC 940295E5 LDR R0,[R5, #+660] \ 000000B0 030050E3 CMP R0,#+3 \ 000000B4 1000000A BEQ ??ec_menu_8 8241 { 8242 to_remove[++remove]=2; \ ??ec_menu_7: \ 000000B8 010086E2 ADD R0,R6,#+1 \ 000000BC 0D20A0E1 MOV R2,SP \ 000000C0 001182E7 STR R1,[R2, +R0, LSL #+2] 8243 to_remove[++remove]=3; \ 000000C4 010080E2 ADD R0,R0,#+1 \ 000000C8 0D10A0E1 MOV R1,SP \ 000000CC 0320A0E3 MOV R2,#+3 \ 000000D0 002181E7 STR R2,[R1, +R0, LSL #+2] 8244 to_remove[++remove]=4; \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 0420A0E3 MOV R2,#+4 \ 000000DC 002181E7 STR R2,[R1, +R0, LSL #+2] 8245 to_remove[++remove]=5; \ 000000E0 010080E2 ADD R0,R0,#+1 \ 000000E4 0520A0E3 MOV R2,#+5 \ 000000E8 002181E7 STR R2,[R1, +R0, LSL #+2] 8246 to_remove[++remove]=6; \ 000000EC 016080E2 ADD R6,R0,#+1 \ 000000F0 0D00A0E1 MOV R0,SP \ 000000F4 0610A0E3 MOV R1,#+6 \ 000000F8 061180E7 STR R1,[R0, +R6, LSL #+2] 8247 } 8248 8249 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 000000FC 44509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 ........ _BLF patch_header,??patch_header??rA 8250 to_remove[0]=remove; \ 00000108 00608DE5 STR R6,[SP, #+0] 8251 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 0000010C 0D00A0E1 MOV R0,SP \ 00000110 01002DE9 PUSH {R0} \ 00000114 10002DE9 PUSH {R4} \ 00000118 0530A0E1 MOV R3,R5 \ 0000011C 0900A0E3 MOV R0,#+9 \ 00000120 01002DE9 PUSH {R0} \ 00000124 142085E2 ADD R2,R5,#+20 \ 00000128 0010A0E3 MOV R1,#+0 \ 0000012C 0000A0E3 MOV R0,#+0 \ 00000130 01002DE9 PUSH {R0} \ 00000134 520100EF SWI +338 \ 00000138 10D08DE2 ADD SP,SP,#+16 8252 } 8253 } \ ??ec_menu_0: \ 0000013C 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 00000140 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000144 25750000 DC8 "%u",+0 \ 00000148 ........ DC32 ecmenu_HDR 8254 8255 \ In segment CODE, align 4, keep-with-next 8256 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 8257 { 8258 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 8259 } 8260 \ In segment CODE, align 4, keep-with-next 8261 void AddSmile(GUI *data) 8262 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 8263 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 8264 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 8265 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 8266 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable2: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable4: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable15: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable136: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable139: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable142: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable151: \ 00000000 ........ DC32 `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000074 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 0000007C 000000000000 DC32 0H, 0, 32767 \ 0000FF7F0000 \ `?`: \ 00000088 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000094 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000100 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000104 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000108 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000010C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000110 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000114 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000118 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000011C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000120 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000124 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000130 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000134 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000138 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000013C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000140 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000144 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000148 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000014C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000150 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000154 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000158 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000015C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000160 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000164 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000168 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000016C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000170 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000174 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000178 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000017C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000180 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000184 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000188 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000018C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000190 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000194 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000198 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000019C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E8 00000000 DC32 0 \ `?`: \ 000001EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000200 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000204 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000208 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000020C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000210 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000214 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000218 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000021C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000220 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000224 00000000 DC32 0 \ `?`: \ 00000228 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000022C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000230 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000234 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000238 00000000 DC32 0 \ `?`: \ 0000023C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000240 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000244 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000248 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000024C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000250 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000254 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000258 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000025C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000260 07000000 DC32 7 \ `?`: \ 00000264 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000268 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000026C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000270 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000274 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000278 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000027C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000280 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000284 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000288 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000028C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000290 F6FFFFFF DC32 -10 \ `?`: \ 00000294 00000000 DC32 0 \ `?`: \ 00000298 FFFFFFFF DC32 -1 \ `?`: \ 0000029C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002AC 00000000 DC32 0 \ `?`: \ 000002B0 00000000 DC32 0H \ `?`: \ 000002B4 01000000 DC32 1 \ `?`: \ 000002B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002DC 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 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000340 01000000 DC32 1 \ `?`: \ 00000344 01000000 DC32 1 \ `?`: \ 00000348 00000000 DC32 0 \ `?`: \ 0000034C 03000000 DC32 3 \ `?`: \ 00000350 00000000 DC32 0 \ `?`: \ 00000354 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000358 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000035C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000360 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000364 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000368 00000000 DC32 0 \ `?`: \ 0000036C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000370 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000374 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000378 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000388 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000398 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003B8 00 DC8 0 \ `?`: \ 000003B9 00 DC8 0 \ 000003BA 0000 DC8 0, 0 \ `?`: \ 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 257300 DC8 "%s" \ 000008DF 00 DC8 0 \ `?`: \ 000008E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000900 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000910 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000920 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 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 \ 0000 \ `?`: \ 00000944 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000954 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000964 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000974 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000984 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000994 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000A44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000A54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000A60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000AA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000AE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000B20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000B60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000BA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000BE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000C20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000C60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000CA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000CE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000D20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000D60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000E60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000EA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ED0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000EE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000F60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000FA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000FB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001070 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001090 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000010B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000010C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001100 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001110 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001120 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001130 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001140 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001150 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001160 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001170 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001180 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001190 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 000011C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001208 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001218 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001228 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001238 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001248 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001258 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001268 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001278 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001288 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001298 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000012E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001308 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001318 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001328 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001338 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001348 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001358 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001368 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001378 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001388 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001398 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001408 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001418 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001428 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001438 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001448 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001458 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001468 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001478 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001488 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001498 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000014B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000014C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000014D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001508 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001518 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001528 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001538 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001548 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001558 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001568 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001578 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001588 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001598 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001608 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001618 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001628 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 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 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 0000174B 00 DC8 0 \ `?`: \ 0000174C 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001760 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00001778 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 0000178C 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 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 \ 0000 \ `?`: \ 000018AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018CC ............ DC32 maincsm_onmessage, maincsm_oncreate, maincsm_onclose, 44, 1 \ ............ \ 2C0000000100 \ 0000 \ 000018E0 ............ DC32 minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ ....CCCCAA55 \ 55AA33330000 \ 0000 \ 000018F4 8B00 DC16 139 \ 000018F6 0000 DC8 0, 0 \ `?`: \ 000018F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001908 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001918 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001928 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 input_awaymsg_sk, 0 \ 0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ............ DC32 ChangeVibraContact, ChangeSoundContact, ChangeAutoMsg \ ............ \ 0000000C ........ DC32 ChangeShowXstatus \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6576696C2E70 DC8 "evil.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646570726573 DC8 "depression.png" \ 73696F6E2E70 \ 6E6700 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646E642E706E DC8 "dnd.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6363757069 DC8 "occupied.png" \ 65642E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E612E706E67 DC8 "na.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 617761792E70 DC8 "away.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 696E76697369 DC8 "invisible.png" \ 626C652E706E \ 6700 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F66666C696E DC8 "offline.png" \ 652E706E6700 \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C25755C DC8 "%s\\%u\\%u.txt" \ 25752E747874 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ 00000010 25735C25752E DC8 "%s\\%u.txt" \ 74787400 \ 0000001A 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 236300 DC8 "#c" \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" \ In segment DATA_C, align 4, align-sorted \ 00000000 23636400 DC8 "#cd" \ In segment DATA_C, align 4, align-sorted \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 1, align-sorted \ 00000000 2000 DC8 " " \ In segment DATA_C, align 1, align-sorted \ 00000000 237300 DC8 "#s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C636D642E74 DC8 "\\cmd.txt" \ 787400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d %s:" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A00 \ 0000001D 000000 DC8 0, 0, 0 \ 00000020 253032643A25 DC8 "%02d:%02d:%02d %02d.%02d %s:\015\012" \ 3032643A2530 \ 326420253032 \ 642E25303264 \ 2025733A0D0A \ 00 \ 0000003F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25733A202573 DC8 "%s: %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F2530 DC8 "Sie_%04d" \ 346400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 53656E642065 DC8 "Send error!" \ 72726F722100 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 73656E642072 DC8 "send res %d" \ 657320256400 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C484541 DC8 "%s\\HEAD.png" \ 442E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C302E747874 DC8 "\\0.txt" \ 00 \ 00000007 00 DC8 0 \ 00000008 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 417761792066 DC8 "Away from [%s]" \ 726F6D205B25 \ 735D00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?_1`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 00000077 00 DC8 0 \ 00000078 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000083 00 DC8 0 \ 00000084 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 0000008F 00 DC8 0 \ 00000090 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 0000009B 00 DC8 0 \ 0000009C 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000A7 00 DC8 0 \ 000000A8 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000EF 00 DC8 0 \ 000000F0 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 000000FA 0000 DC8 0, 0 \ 000000FC 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 00000107 00 DC8 0 \ 00000108 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 00000113 00 DC8 0 \ 00000114 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 0000011F 00 DC8 0 \ 00000120 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 0000014F 00 DC8 0 \ 00000150 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 43616E277420 DC8 "Can't open configs!" \ 6F70656E2063 \ 6F6E66696773 \ 2100 \ 00000014 303A5C7A6269 DC8 "0:\\zbin\\etc\\NATICQMod.bcfg" \ 6E5C6574635C \ 4E4154494351 \ 4D6F642E6263 \ 666700 \ 0000002F 00 DC8 0 \ 00000030 4E4154494351 DC8 "NATICQMod" \ 4D6F6400 \ 0000003A 0000 DC8 0, 0 \ 0000003C 343A5C7A6269 DC8 "4:\\zbin\\etc\\NATICQMod.bcfg" \ 6E5C6574635C \ 4E4154494351 \ 4D6F642E6263 \ 666700 \ 00000057 00 DC8 0 \ 00000058 303A5C7A6269 DC8 "0:\\zbin\\etc\\NATICQ.bcfg" \ 6E5C6574635C \ 4E4154494351 \ 2E6263666700 \ 00000070 4E4154494351 DC8 "NATICQ" \ 00 \ 00000077 00 DC8 0 \ 00000078 343A5C7A6269 DC8 "4:\\zbin\\etc\\NATICQ.bcfg" \ 6E5C6574635C \ 4E4154494351 \ 2E6263666700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 00 DC8 "" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1F0E0F2 DC8 "\302\373\341\360\340\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E2F3EA00 DC8 "\307\342\363\352" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2E8E1F0E000 DC8 "\302\350\341\360\340" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEEFF6E8E800 DC8 "\316\357\366\350\350" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CBE5E200 DC8 "\313\345\342" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 92 AddSmile 4 AddStringToLog 200 AddToMain 44 AskNickAndAddContact 4 BackSpaceContactT9 8 ChangeAutoMsg 4 ChangeShowXstatus 4 ChangeSound 4 ChangeSoundContact 4 ChangeVibra 4 ChangeVibraContact 4 CheckComand 1320 CheckDoubleRun 8 ClearContactT9Key 4 ClearLog 60 ClearSendQ 8 CmdMenuGHook 4 CmdMenuItemHandler 24 CmdMenuKeyHook 16 CreateContactMenu 32 CreateEditChat 100 DispCmdMenu 32 DrawAck 84 DrawAutoMSG 80 DrawOnlineTime 20 DrawPing 12 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 80 IsIdleUiOnTop 4 IsUrl 44 LastLOGQ 0 LoadCmd 332 LoadTemplates 332 NewLOGQ 12 OpenLogfile 16 ParseAnswer 36 ParseXStatusText 20 Pinger2 20 Play 240 ProcessPacket 412 Quote 152 Quote2 152 ReadDefSettings 160 RecountMenu 20 Remind_Timer2 8 Reminder_timer 4 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SMART_REDRAW 8 SaveAnswer 12 ScreenSaverTimer 20 SendAnswer 28 SendAuthGrant 48 SendAuthReq 48 SendMSGACK 8 SetIndividStatus 0 UpdateCLheader 68 UpdateCSMname 4 UpdateConfig 36 UptimeMinHour 0 WriteDefSettings 160 ask_my_info 0 atoi 4 away_timer 24 begin_to_develop 4 checkGui 8 cmdFree 8 contact_keyhook 4 contact_list_ghook 4 contacthandler 28 contactlist_menu_ghook 28 contactlist_menu_iconhndl 668 contactlist_menu_onkey 44 create_connect 312 create_contactlist_menu 24 do_ping 4 do_reconnect 4 ec_menu 72 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 get_file_size 48 init_time_zone 4 input_awaymsg_ghook 4 input_awaymsg_locret 0 input_awaymsg_onkey 64 main 64 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 96 method0 96 method1 8 method2 8 method3 8 method4 0 method5 24 method8 0 method9 0 my_ed_redraw 16 my_keyhook 12 new_redraw 100 patch_header 8 process_active_timer 12 recon 8 resend 4 send_login 36 set_my_status 4 set_my_xstatus 36 setup_ICONS 12 show_on_contact 64 show_pp_sender 68 start_vibra 8 start_vibra2 8 stop_vibra 4 stop_vibra2 4 to_develop 4 upTime 12 wstrstr 32 Segment part sizes: Function/Label Bytes -------------- ----- patch_header 48 disk 4 UpdateConfig 1444 get_file_size 40 Pinger2 132 SMART_REDRAW 48 Is_Id3tag_Enabled 4 IsIdleUiOnTop 36 ScreenSaverTimer 112 timeh 4 timemin 4 FreeXText2 36 away_timer 216 init_time_zone 360 DrawPing 48 Remind_Timer2 64 Reminder_timer 32 UptimeMinHour 64 upTime 88 DrawOnlineTime 140 show_on_contact 364 DrawAutoMSG 108 input_awaymsg_onkey 192 input_awaymsg_ghook 68 input_awaymsg_locret 4 InputAwayMsg 312 setup_ICONS 68 free_ICONS 44 IlluminationOff 52 IlluminationOn 120 ReadDefSettings 312 WriteDefSettings 292 Play 288 start_vibra 92 stop_vibra 84 start_vibra2 60 stop_vibra2 84 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 new_redraw 132 UpdateCLheader 716 ClearContactT9Key 24 AddContactT9Key 44 BackSpaceContactT9 44 create_contactlist_menu 76 contactlist_menu_ghook 180 RecountMenu 160 ChangeVibraContact 44 ChangeSoundContact 44 ChangeAutoMsg 44 ChangeShowXstatus 44 contact_list_ghook 20 contact_keyhook 48 contacthandler 196 icon_array 76 CreateContactMenu 136 contactlist_menu_onkey 1756 GetOnTotalContact 92 contactlist_menu_iconhndl 688 GetHost 192 atoi 84 GetPort 276 GetHostsCount 120 create_connect 736 ClearSendQ 48 end_socket 56 resend 24 SendAnswer 424 send_login 144 do_ping 56 SendMSGACK 52 RequestXText 52 get_answer 1448 AddToMain 556 AddStringToLog 568 ParseXStatusText 152 AddMsgToChat 768 DrawAck 332 ask_my_info 4 set_my_status 72 set_my_xstatus 264 to_develop 92 ReqAddMsgToChat 120 begin_to_develop 52 cmdFree 56 LoadCmd 280 CmdMenuItemHandler 92 CmdMenuGHook 36 CmdMenuKeyHook 152 DispCmdMenu 124 CheckComand 5356 INC_Nick 32 show_pp_sender 364 Get_Online_total 92 SetIndividStatus 68 ProcessPacket 2684 process_active_timer 148 method0 856 method1 44 method2 36 method3 24 method4 20 method5 212 method8 8 method9 8 my_keyhook 84 ? 76 ? 12 maincsm_oncreate 272 maincsm_onclose 312 do_reconnect 40 CheckDoubleRun 116 checkGui 76 maincsm_onmessage 2764 minus11 4 maincsm_name_body 280 UpdateCSMname 40 main 388 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 1204 my_ed_redraw 136 edchat_ghook 544 edchat_desc 84 sk 16 CreateEditChat 1064 Quote 416 Quote2 440 GetShortInfo 176 AddCurContact 52 SendAuthReq 212 SendAuthGrant 204 OpenLogfile 148 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 252 ecmenu_HNDLS 36 S_ICONS 6456 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 menuproc 16 ecmenu_HDR 64 ec_menu 332 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable4 4 ??DataTable11 4 ??DataTable15 4 ??DataTable18 4 ??DataTable21 4 ??DataTable25 4 ??DataTable36 4 ??DataTable42 4 ??DataTable47 4 ??DataTable50 4 ??DataTable51 4 ??DataTable53 4 ??DataTable54 4 ??DataTable55 4 ??DataTable56 4 ??DataTable58 4 ??DataTable64 4 ??DataTable66 4 ??DataTable67 4 ??DataTable68 4 ??DataTable74 4 ??DataTable76 4 ??DataTable81 4 ??DataTable82 4 ??DataTable83 4 ??DataTable86 4 ??DataTable87 4 ??DataTable88 4 ??DataTable90 4 ??DataTable93 4 ??DataTable94 4 ??DataTable97 4 ??DataTable98 4 ??DataTable99 4 ??DataTable106 4 ??DataTable114 4 ??DataTable116 4 ??DataTable117 4 ??DataTable119 4 ??DataTable120 4 ??DataTable121 4 ??DataTable122 4 ??DataTable123 4 ??DataTable124 4 ??DataTable127 4 ??DataTable128 4 ??DataTable129 4 ??DataTable130 4 ??DataTable132 4 ??DataTable135 4 ??DataTable136 4 ??DataTable138 4 ??DataTable139 4 ??DataTable142 4 ??DataTable145 4 ??DataTable151 4 ??DataTable153 4 ??DataTable154 4 ??DataTable155 4 ??DataTable157 4 ? 6456 ? 8 ? 24 ? 8 ? 16 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 8 ? 16 ? 8 ? 12 ? 16 ? 12 ? 3 ? 12 ? 164 ? 8 ? 28 ? 3 ? 3 ? 4 ? 4 ? 4 ? 4 ? 2 ? 3 ? 12 ? 64 ? 8 ? 3 ? 12 ? 40 ? 2 ? 4 ? 4 ? 4 ? 4 ? 4 ? 12 ? 16 ? 3 ? 16 ?_1 8 ? 396 ? 144 ? 1 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 8 ? 4 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 Others 1096 41 368 bytes in segment CODE 6 107 bytes in segment DATA_C 6 512 bytes in segment DATA_I 6 512 bytes in segment DATA_ID 33 188 bytes in segment DATA_Z 24 bytes in segment INITTAB 40 248 bytes of CODE memory (+ 1 144 bytes shared) 12 619 bytes of CONST memory 39 700 bytes of DATA memory Errors: none Warnings: none