############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 01/Apr/2008 14:20:23 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c # # Command line = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c -D # # NEWSGOLD -D UIN_WRITE --preprocess # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod\ESKA\List\ -lC # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod\ESKA\List\ -o # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod\ESKA\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\ESKA\List\main. # # lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\ESKA\Obj\main.r # # 79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c 1 #include "../inc/swilib.h" 2 #include "../inc/cfg_items.h" 3 #include "../inc/pnglist.h" 4 #include "NatICQ.h" 5 #include "history.h" 6 #include "conf_loader.h" 7 #include "mainmenu.h" 8 #include "main.h" 9 #include "language.h" 10 #include "../inc/xtask_ipc.h" 11 #include "smiles.h" 12 #include "naticq_ipc.h" 13 #include "status_change.h" 14 #include "strings.h" 15 //#include "string_util_int.h" 16 #include "manage_cl.h" 17 #include "cl_work.h" 18 #include "select_smile.h" 19 #include "revision.h" 20 #include "print.h" 21 //#include "screen_save.h" 22 #ifdef NEWSGOLD 23 #include "player_tags.h" 24 #endif 25 #include "swilib2.h" 26 #include "rect_patcher.h" 27 28 //Теперь конфиги делаются отдельно!!!!как в экстраинфо! прикладываю два проекта 1stconfig && 2ndconfig 29 //должны находится в папке с исходником натаси в своих папках!чтобы конфиг можно было удоьно редактировать 30 //если изменили какой то из конфигов,то так же нужно изменить структуры в таком же порядке, 31 //как зменили конфиг с темиже данными!и поправить функцию UpdateConfig(),и потом скомпилить отдельно эльфы 1stconfig && 2ndconfig, 32 //чтобы получить разные конфиги...по другому пока не знаю как сделать... 33 //ЕСЛИ НЕ ЗНАЕШЬ КАК ДЕЛАТЬ ТО НЕ ЛЕЗЬ!!!ЭТО НЕ ТАК ПРОСТО КАК КАЖЕТСЯ!!!одна маленькая ошибка и пиздец... ;) 31.03.08 kluchnik 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 CFG_HDR cfghdr4_7; 163 CFG_HDR cfghdr4_7_1; 164 unsigned int ILL_DISP_RECV; 165 166 CFG_HDR cfghdr4_7_2; 167 unsigned int ILL_KEYS_RECV; 168 169 CFG_HDR cfghdr4_7_3; 170 unsigned int ILL_RECV_TMR; 171 172 CFG_HDR cfghdr4_7_4; 173 unsigned int ILL_RECV_FADE; 174 175 CFG_HDR cfghdr4_7_5; 176 unsigned int ILL_DISP_SEND; 177 178 CFG_HDR cfghdr4_7_6; 179 unsigned int ILL_KEYS_SEND; 180 181 CFG_HDR cfghdr4_7_7; 182 unsigned int ILL_SEND_TMR; 183 184 CFG_HDR cfghdr4_7_8; 185 unsigned int ILL_SEND_FADE; 186 187 CFG_HDR cfghdr4_7_9; 188 unsigned int ILL_OFF_FADE; 189 CFG_HDR cfghdr4_8; //ILLUMINATION 190 191 CFG_HDR cfghdr5;//INTERFACE 192 193 194 //------------------------------------------------------------------------------// 195 // HISTORY 196 //------------------------------------------------------------------------------// 197 198 //History 199 CFG_HDR cfghdr6; 200 201 CFG_HDR cfghdr6_8; 202 int SHOW_ACTIVE; 203 CFG_CBOX_ITEM cfgcbox6_8[2]; 204 //Enable history logging 205 CFG_HDR cfghdr6_1; 206 int LOG_ALL; 207 CFG_CBOX_ITEM cfgcbox6_1[2]; 208 209 //History type 210 CFG_HDR cfghdr6_2; 211 int HISTORY_TYPE; 212 CFG_CBOX_ITEM cfgcbox6_2[2]; 213 214 //Enable status logging 215 CFG_HDR cfghdr6_3; 216 int LOG_STATCH; 217 CFG_CBOX_ITEM cfgcbox6_3[2]; 218 219 //Enable X-status logging 220 CFG_HDR cfghdr6_4; 221 int LOG_XTXT; 222 CFG_CBOX_ITEM cfgcbox6_4[2]; 223 224 //Auto request X-status if entering to chat 225 CFG_HDR cfghdr6_5; 226 int ENA_AUTO_XTXT; 227 CFG_CBOX_ITEM cfgcbox6_5[2]; 228 229 //Don't log X-status, if it same as prevision 230 CFG_HDR cfghdr6_6; 231 int NOT_LOG_SAME_XTXT; 232 CFG_CBOX_ITEM cfgcbox6_6[2]; 233 234 //Buffer for fill from history 235 CFG_HDR cfghdr6_7; 236 int HISTORY_BUFFER; 237 CFG_CBOX_ITEM cfgcbox6_7[7]; 238 239 CFG_HDR cfghdr7;//HISTORY 240 241 //--------------------------------------------------// 242 // NOTYFY POWER // 243 //--------------------------------------------------// 244 245 CFG_HDR cfghdr8; 246 247 CFG_HDR cfghdr8_1; 248 unsigned int sndVolume; 249 250 CFG_HDR cfghdr8_2; 251 unsigned int vibraPower; 252 253 CFG_HDR cfghdr8_3; 254 int VIBR_TYPE; 255 CFG_CBOX_ITEM cfgcbox8_3[2]; 256 257 CFG_HDR cfghdr8_4; 258 int VIBR_ON_CONNECT; 259 CFG_CBOX_ITEM cfgcbox8_4[2]; 260 261 //------------------ SOUND SETUP ------------------// 262 CFG_HDR cfghdr8_5; 263 264 CFG_HDR cfghdr181; 265 unsigned int extended_sounds; 266 CFG_CBOX_ITEM cfgcbox18_3_2[2]; 267 268 CFG_HDR cfghdr8_5_1; 269 char sndStartup[64]; 270 271 CFG_HDR cfghdr8_5_2; 272 char sndSrvMsg[64]; 273 274 CFG_HDR cfghdr8_5_3; 275 char sndGlobal[64]; 276 277 CFG_HDR cfghdr8_5_4; 278 char sndMsg[64]; 279 280 CFG_HDR cfghdr8_5_5; 281 char sndMsgSent[64]; 282 283 CFG_HDR cfghdr15; 284 char sndGlobal2[64]; 285 286 CFG_HDR cfghdr161; 287 char sndMsg2[64]; 288 289 CFG_HDR cfghdr16r1; 290 char pingsnd[64]; 291 CFG_HDR cfghdr8_6;//SOUND SETUP 292 293 CFG_HDR cfghdr9;//NOTYFY POWER 294 }myConfig; 295 296 //----------------------------------------------------------------// 297 //------------------------ MOD CONFIG --------------------------// 298 //----------------------------------------------------------------// 299 300 typedef struct 301 { 302 CFG_HDR cfghdr0; 303 //----------- НАСТРОЙКА КЛАВИШ -----------// 304 //View settings 305 CFG_HDR cfghdr23_4; 306 /* 307 CFG_HDR cfghdr23_4_1;//={CFG_CBOX,"Показ. сообщ.при дл.нажатии",0,2}; 308 int isShowMsgLongPress;// = 1; 309 CFG_CBOX_ITEM cfgcbox23_4_2[2];//={"Нет","Да"}; 310 */ 311 //Long press right in chat 312 CFG_HDR cfghdr4_67; 313 int LongRightAction; 314 CFG_CBOX_ITEM cfgcbox4_56[3]; 315 316 //Long press right in chat 317 CFG_HDR cfghdr34_64; 318 int LongLeftAction ; 319 CFG_CBOX_ITEM cfgcbox444_56[2]; 320 321 //Action on # button in contact list 322 CFG_HDR cfghdr78_4520; 323 int ActionResh; 324 CFG_CBOX_ITEM cfgcbox_668_z[2]; 325 326 #ifdef ELKA 327 //Press vol up or vol down button in CL 328 CFG_HDR cfghdr34_642; 329 int isVolDownButton; 330 CFG_CBOX_ITEM cfgcbox434_56[2]; 331 332 CFG_HDR cfghdr34_6342; 333 int isVolUpButton; 334 CFG_CBOX_ITEM cfgcbox4134_56[2]; 335 #endif 336 CFG_HDR cfghdr223_5; //НАСТРОКА КЛАВИШ 337 338 339 //----------- STATUS SETTING -----------// 340 341 342 CFG_HDR cfghdr_45; 343 #ifdef ELKA 344 //Status icon on mainscreen position 345 CFG_HDR cfghdr467_1; 346 int ShowStatusIcon; 347 CFG_CBOX_ITEM cfgcbox9_1[5]; 348 #endif 349 #ifdef ELKA 350 //Show x-status on iconbar or mainscreen 351 CFG_HDR cfghdrz_68; 352 int show_xstatus; 353 CFG_CBOX_ITEM cfgcbox_8z[4]; 354 #else 355 CFG_HDR cfghdrz_68; 356 int show_xstatus; 357 CFG_CBOX_ITEM cfgcbox_8z[2]; 358 #endif 359 //Xstatus idle position 360 CFG_HDR cfghdrz_1; 361 unsigned int IDLEICON_XX; 362 unsigned int IDLEICON_YX; 363 364 #ifdef ELKA 365 //Number first pic status in folder img for show in iconbar 366 CFG_HDR cfghdr19_22; 367 unsigned int NumStatusToIconBar; 368 369 //Number first pic x-status in folder img for show in iconbar 370 CFG_HDR cfghdr19_242; 371 unsigned int NumXStatusToIconBar; 372 #endif 373 CFG_HDR cfghdr_4;//STATUS SETTINGS 374 375 376 //----------- PNGFONT SETTING -----------// 377 378 CFG_HDR cfghdr1_45; 379 380 //Nember png-font or system 381 CFG_HDR cfghdr65z; 382 unsigned int fonto; 383 384 //Path to png-font 385 CFG_HDR cfghdr98; 386 char fontpath[64]; 387 388 //Coordinates for message on idle 389 CFG_HDR cfghd83; 390 unsigned int msg_d_x ; 391 unsigned int msg_d_y ; 392 393 CFG_HDR cfghdr60_2; 394 char fontColor[4]; 395 396 CFG_HDR cfghdr60_3; 397 char bgrColor[4]; 398 399 //Max show symbol on idle 400 CFG_HDR cfghdr19a_1; 401 unsigned int main_lenght; 402 403 CFG_HDR cfghdr9z9; 404 int use_cutter; 405 CFG_CBOX_ITEM cfgcbox18a_4[2]; 406 407 CFG_HDR cfghdr65y; 408 unsigned int spaco1; 409 410 //__root const CFG_HDR cfghdr65u={CFG_UINT,"Main msg space",0,999999}; 411 //__root const unsigned int spaco2=0; 412 413 CFG_HDR cfghdrss_45;//PNGFONT SETTING 414 415 416 //-----------------------------------------------------------------------------// 417 // ONLINE TIME 418 //-----------------------------------------------------------------------------// 419 420 CFG_HDR cfghdr_m71; 421 422 CFG_HDR cfghdr699; 423 unsigned int onlineTime_x; 424 unsigned int onlineTime_y; 425 426 CFG_HDR cfghdr698; 427 int Pause_Time; 428 CFG_CBOX_ITEM cfgcbox85[2]; 429 430 CFG_HDR cfghdr_m70; 431 432 433 //-----------------------------------------------------------------------------// 434 // AUTO PING/UNREAD 435 //-----------------------------------------------------------------------------// 436 437 438 CFG_HDR cfghdr_m91; 439 440 CFG_HDR cfghd66; 441 unsigned int Ping_X ; 442 unsigned int Ping_Y ; 443 444 CFG_HDR cfghdr1z9a_1; 445 unsigned int ping_time_config ; 446 447 CFG_HDR cfghdr298; 448 int Is_Unread_On; 449 CFG_CBOX_ITEM cfgcbox86[2]; 450 451 CFG_HDR cfghd67; 452 unsigned int unread_X; 453 unsigned int unread_Y; 454 455 CFG_HDR cfghdr_m90; 456 457 458 //-----------------------------------------------------------------------------// 459 // AUTO STATUS // 460 //-----------------------------------------------------------------------------// 461 462 463 CFG_HDR cfghdr_m61; 464 465 CFG_HDR cfghdr668; 466 int Auto_Status; 467 CFG_CBOX_ITEM cfgcbox89[2]; 468 469 CFG_HDR cfghdr667; 470 unsigned int AUTO_ENGADE; 471 472 CFG_HDR cfghdr_13; 473 int time_zone; 474 CFG_CBOX_ITEM cfgcbox_13[33]; 475 476 CFG_HDR cfghdrzz_8; 477 char awayHelloMsg[24]; 478 479 CFG_HDR cfghdrzz_9; 480 char awayMsg[64]; 481 482 CFG_HDR cfghdr66_2; 483 int Reset_timer; 484 CFG_CBOX_ITEM cfgcbox90[2]; 485 486 //Show away time on idle 487 CFG_HDR cfghdr663; 488 int showAwayIdle ; 489 CFG_CBOX_ITEM cfgcbox82[2]; 490 491 CFG_HDR cfghd6_7; 492 unsigned int auto_x; 493 unsigned int auto_y; 494 495 CFG_HDR cfghdr_m60; 496 497 498 //------------------------------------------------------------------------------// 499 // EXTRA CONFIG // 500 //------------------------------------------------------------------------------// 501 502 503 CFG_HDR cfghdr_m51; 504 505 //Show contact header with... 506 CFG_HDR cfghdr467; 507 int TIME_OR_MSG; 508 CFG_CBOX_ITEM cfgcbox91[5]; 509 510 //Vibra count in vibra remaider 511 CFG_HDR cfghdr65; 512 unsigned int Vibra_cc; 513 514 //CSM for player 515 CFG_HDR cfghdr66; 516 char CsmAdr[9]; //el=A087B454 //es=A068E244 517 518 //Text before name track 519 CFG_HDR cfghdr67; 520 char playing[13]; 521 522 //Show command sending 523 CFG_HDR cfghdr780; 524 int show_send_info; 525 CFG_CBOX_ITEM cfgcbox8_z[2]; 526 527 //Show time offline contact 528 CFG_HDR cfghdr7_80; 529 int isLogOffline; 530 CFG_CBOX_ITEM cfgcbox8df_z[2]; 531 532 //Show time onlain contact 533 CFG_HDR cfghdr7_81; 534 int isLogOnline; 535 CFG_CBOX_ITEM cfgcbox9df_z[2]; 536 537 //Show Loopback contact in CL 538 CFG_HDR cfghdr71_30; 539 int IsShowLoopback; 540 CFG_CBOX_ITEM cfgcbox_3z[2]; 541 542 543 #ifdef kluchnik 544 //from me!!!))) 545 CFG_HDR cfghdr71280; 546 int autobot_kel; 547 CFG_CBOX_ITEM cfgcbox8a_z[2]; 548 549 CFG_HDR cfghdr781; 550 unsigned int AUTOBOT_UIN; 551 #endif 552 CFG_HDR cfghdr_m50;//level 553 554 CFG_HDR cfghdr11_9;//level 555 char ignor_list[256]; 556 }myConfigMod; 557 558 559 //-----------------------------------------------------------------------------------// 560 // ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ // 561 //-----------------------------------------------------------------------------------// 562 /* 563 unsigned int color_choose=1; 564 unsigned int Vibra_cc=2; 565 unsigned int Ping_X=2; 566 unsigned int Ping_Y=262; 567 unsigned int unread_X=99; 568 unsigned int unread_Y=65; 569 int show_xstatus=1; 570 char fontpath[64]=""; 571 int ShowStatusIcon=0; 572 573 //For online/offline log 574 int isLogOffline=1; 575 int isLogOnline=1; 576 577 char CsmAdr[9]=""; 578 int SORT_CLIST=1; 579 #ifdef ELKA 580 //If action vol up && vol down button on elka 581 int isVolUpButton=0; 582 int isVolDownButton=0; 583 #endif 584 585 //Autoaway message 586 char awayHelloMsg[24]="Привет";//hello msg 587 char awayMsg[64]="я не могу сейчас ответить...потом отвечу";//message 588 589 int IsShowLoopback;//Show Loopback contact in CL 590 //For png font 591 unsigned int fonto=1; 592 unsigned int spaco1=1; 593 unsigned int spaco2; 594 //int spaco2=spaco1; 595 char fontColor[]={0xFF,0xFF,0xFF,100};//Цвет для системного шрифта 596 char bgrColor[]={0x00,0x00,0x00,100}; 597 598 unsigned int AUTO_ENGADE=120; 599 int Is_Unread_On=0; 600 int Pause_Time=1; 601 unsigned int auto_x=0; 602 unsigned int auto_y=252; 603 int showAwayIdle=0; 604 605 //Online time on idle 606 unsigned int onlineTime_x=77; 607 unsigned int onlineTime_y=98; 608 609 int Auto_Status=1;//Включен автостатус или нет 610 int time_zone=16; 611 int TIME_OR_MSG=3; 612 613 unsigned int ping_time_config=29; 614 char ignor_list[256]; 615 616 unsigned int msg_d_x=0; 617 unsigned int msg_d_y=65; 618 unsigned int main_lenght=24; 619 int use_cutter=0; 620 621 char playing[13]="Play now:"; 622 int Reset_timer=0; 623 unsigned int NumStatusToIconBar=8000; 624 unsigned int NumXStatusToIconBar=8100; 625 626 int LongRightAction=0; 627 int LongLeftAction=0; 628 629 #ifdef kluchnik 630 unsigned int AUTOBOT_UIN=0; 631 int autobot_kel=0; 632 #endif 633 634 unsigned int UIN=0; 635 char PASS[9]; 636 637 int SHOW_ACTIVE=1; 638 int VIBR_TYPE=1; 639 int DEVELOP_IF=2; 640 641 int LOG_ALL=1; 642 int LOG_STATCH=1; 643 int VIBR_ON_CONNECT=1; 644 int FIRST_LETTER=1; 645 646 int show_send_info=1; 647 int ActionResh=0; 648 649 int HISTORY_TYPE; 650 unsigned int vibraPower=100; 651 652 unsigned int IDLEICON_X=2; 653 unsigned int IDLEICON_Y=50; 654 655 unsigned int IDLEICON_XX=2; 656 unsigned int IDLEICON_YX=70; 657 658 unsigned int I_COLOR=3; 659 unsigned int TO_COLOR=2; 660 unsigned int X_COLOR=2; 661 unsigned int O_I_COLOR=15; 662 unsigned int O_TO_COLOR=14; 663 unsigned int O_X_COLOR=14; 664 665 unsigned int ED_FONT_SIZE=1; 666 unsigned int ED_H_FONT_SIZE=2; 667 unsigned int ED_X_FONT_SIZE=1; 668 unsigned int O_ED_FONT_SIZE=1; 669 unsigned int O_ED_H_FONT_SIZE=2; 670 unsigned int O_ED_X_FONT_SIZE=1; 671 672 unsigned int ACK_COLOR; 673 unsigned int UNACK_COLOR; 674 675 int ENA_AUTO_XTXT=1; 676 int NOT_LOG_SAME_XTXT=1; 677 int LOG_XTXT=1; 678 int HISTORY_BUFFER=5; 679 680 //Illumination by BoBa 19.04.2007 681 /////////// 682 unsigned int ILL_DISP_RECV=10; 683 unsigned int ILL_KEYS_RECV=10; 684 unsigned int ILL_RECV_TMR=10; 685 unsigned int ILL_DISP_SEND=10; 686 unsigned int ILL_KEYS_SEND=0; 687 unsigned int ILL_SEND_TMR=5; 688 unsigned int ILL_SEND_FADE=256; 689 unsigned int ILL_RECV_FADE=256; 690 unsigned int ILL_OFF_FADE=256; 691 692 //=============================Проигрывание звука======================= 693 694 #ifdef NEWSGOLD 695 #define DEFAULT_DISK "4" 696 #else 697 #define DEFAULT_DISK "0" 698 #endif 699 700 char sndStartup[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndStartup.wav"; 701 char sndSrvMsg[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndSrvMsg.wav"; 702 char sndGlobal[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndGlobal.wav"; 703 char sndGlobal2[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\Uins_on\\"; 704 char sndMsg[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndMsg.wav"; 705 char sndMsg2[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\Uins_msg\\"; 706 char sndMsgSent[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndMsgSent.wav"; 707 char pingsnd[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndPing.wav"; 708 unsigned int extended_sounds=0; 709 unsigned int sndVolume=3; 710 711 //=============================================================== 712 713 int VIBR_TYPE; 714 unsigned int vibraPower; 715 716 char SMILE_FILE[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\smiles.cfg"; 717 char TEMPLATES_PATH[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\templates"; 718 char ICON_PATH[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\img"; 719 char SMILE_PATH[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\smiles"; 720 char XSTATUSES_PATH[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\ximg"; 721 char HIST_PATH[64]=DEFAULT_DISK ":\\ZBin\\NatICQ\\history"; 722 char NATICQ_HOST[64]="cbsie.dyndns.info; freegw.alltime.ru"; 723 unsigned int NATICQ_PORT=5050; 724 unsigned int RECONNECT_TIME=10; //2058 725 */ 726 unsigned int color_choose; 727 unsigned int Vibra_cc; 728 unsigned int Ping_X; 729 unsigned int Ping_Y; 730 unsigned int unread_X; 731 unsigned int unread_Y; 732 int show_xstatus; 733 char fontpath[64]; 734 #ifdef ELKA 735 int ShowStatusIcon; 736 #endif 737 //For online/offline log 738 int isLogOffline; 739 int isLogOnline; 740 741 char CsmAdr[9]; 742 int SORT_CLIST; 743 #ifdef ELKA 744 //If action vol up && vol down button on elka 745 int isVolUpButton; 746 int isVolDownButton; 747 #endif 748 749 //Autoaway message 750 char awayHelloMsg[24];//hello msg 751 char awayMsg[64];//message 752 753 int IsShowLoopback;//Show Loopback contact in CL 754 //For png font 755 unsigned int fonto; 756 unsigned int spaco1; 757 unsigned int spaco2; 758 //int spaco2=spaco1; 759 char fontColor[];//Цвет для системного шрифта 760 char bgrColor[]; 761 762 unsigned int AUTO_ENGADE; 763 int Is_Unread_On; 764 int Pause_Time; 765 unsigned int auto_x; 766 unsigned int auto_y; 767 int showAwayIdle; 768 769 //Online time on idle 770 unsigned int onlineTime_x; 771 unsigned int onlineTime_y; 772 773 int Auto_Status;//Включен автостатус или нет 774 int time_zone; 775 int TIME_OR_MSG; 776 777 unsigned int ping_time_config; 778 char ignor_list[256]; 779 780 unsigned int msg_d_x; 781 unsigned int msg_d_y; 782 unsigned int main_lenght; 783 int use_cutter; 784 785 char playing[13]; 786 int Reset_timer; 787 #ifdef ELKA 788 unsigned int NumStatusToIconBar; 789 unsigned int NumXStatusToIconBar; 790 #endif 791 int LongRightAction; 792 int LongLeftAction; 793 794 #ifdef kluchnik 795 unsigned int AUTOBOT_UIN; 796 int autobot_kel; 797 #endif 798 799 //int isShowMsgLongPress; 800 //------------ ORIGINAL SETTING -------------// 801 802 unsigned int UIN; 803 char PASS[9]; 804 805 int VIBR_ON_CONNECT; 806 int SHOW_ACTIVE; 807 int VIBR_TYPE; 808 int DEVELOP_IF; 809 810 int LOG_ALL; 811 int LOG_STATCH; 812 int FIRST_LETTER; 813 814 int show_send_info; 815 int ActionResh; 816 817 int HISTORY_TYPE; 818 unsigned int vibraPower; 819 820 unsigned int IDLEICON_X; 821 unsigned int IDLEICON_Y; 822 823 unsigned int IDLEICON_XX; 824 unsigned int IDLEICON_YX; 825 826 unsigned int I_COLOR; 827 unsigned int TO_COLOR; 828 unsigned int X_COLOR; 829 unsigned int O_I_COLOR; 830 unsigned int O_TO_COLOR; 831 unsigned int O_X_COLOR; 832 833 unsigned int ED_FONT_SIZE; 834 unsigned int ED_H_FONT_SIZE; 835 unsigned int ED_X_FONT_SIZE; 836 unsigned int O_ED_FONT_SIZE; 837 unsigned int O_ED_H_FONT_SIZE; 838 unsigned int O_ED_X_FONT_SIZE; 839 840 unsigned int ACK_COLOR; 841 unsigned int UNACK_COLOR; 842 843 int ENA_AUTO_XTXT; 844 int NOT_LOG_SAME_XTXT; 845 int LOG_XTXT; 846 int HISTORY_BUFFER; 847 848 //Illumination by BoBa 19.04.2007 849 /////////// 850 unsigned int ILL_DISP_RECV; 851 unsigned int ILL_KEYS_RECV; 852 unsigned int ILL_RECV_TMR; 853 unsigned int ILL_DISP_SEND; 854 unsigned int ILL_KEYS_SEND; 855 unsigned int ILL_SEND_TMR; 856 unsigned int ILL_SEND_FADE; 857 unsigned int ILL_RECV_FADE; 858 unsigned int ILL_OFF_FADE; 859 860 //=============================Проигрывание звука======================= 861 862 #ifdef NEWSGOLD 863 #define DEFAULT_DISK "4" 864 #else 865 #define DEFAULT_DISK "0" 866 #endif 867 868 char sndStartup[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndStartup.wav"; 869 char sndSrvMsg[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndSrvMsg.wav"; 870 char sndGlobal[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndGlobal.wav"; 871 char sndGlobal2[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\Uins_on\\"; 872 char sndMsg[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndMsg.wav"; 873 char sndMsg2[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\Uins_msg\\"; 874 char sndMsgSent[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndMsgSent.wav"; 875 char pingsnd[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndPing.wav"; 876 unsigned int extended_sounds; 877 unsigned int sndVolume; 878 879 //=============================================================== 880 881 //int VIBR_TYPE; 882 //unsigned int vibraPower; 883 884 char SMILE_FILE[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\smiles.cfg"; 885 char TEMPLATES_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\templates"; 886 char ICON_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\img"; 887 char SMILE_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\smiles"; 888 char XSTATUSES_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\ximg"; 889 char HIST_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\history"; 890 char NATICQ_HOST[128];//="cbsie.dyndns.info; freegw.alltime.ru"; 891 unsigned int NATICQ_PORT;//=5050; 892 unsigned int RECONNECT_TIME; //2058 893 894 //-----------------------------------------------------------------------------------// 895 // -------------------------------- INIT CONFIGS -----------------------------------// 896 //-----------------------------------------------------------------------------------// 897 898 extern int janis; 899 char per_s[]="%s"; 900 901 #ifdef NEWSGOLD 902 int disk=4; 903 #else 904 int disk=0; 905 #endif 906 \ In segment CODE, align 4, keep-with-next 907 void UpdateConfig() 908 { \ UpdateConfig: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 909 910 int myConfigSize = sizeof(myConfig); 911 myConfig* myConf = (myConfig*)malloc(myConfigSize); 912 int newCfgFile = InitConfig(myConf, myConfigSize, "NATICQ",disk); \ 00000004 74759FE5 LDR R7,??UpdateConfig_0 ;; `?` \ 00000008 ........ LDR R5,??DataTable21 ;; S_ICONS \ 0000000C D860A0E3 MOV R6,#+216 \ 00000010 546D86E3 ORR R6,R6,#0x1500 \ 00000014 0600A0E1 MOV R0,R6 \ 00000018 140000EF SWI +20 \ 0000001C D83195E5 LDR R3,[R5, #+472] \ 00000020 0040A0E1 MOV R4,R0 \ 00000024 202087E2 ADD R2,R7,#+32 \ 00000028 0610A0E1 MOV R1,R6 \ 0000002C ........ _BLF InitConfig,??InitConfig??rA \ 00000030 0080A0E1 MOV R8,R0 913 914 int myConfigModSize = sizeof(myConfigMod); 915 myConfigMod* myConfMod = (myConfigMod*)malloc(myConfigModSize); \ 00000034 9C9F46E2 SUB R9,R6,#+624 \ 00000038 0900A0E1 MOV R0,R9 \ 0000003C 140000EF SWI +20 916 int newCfgModFile = InitConfig(myConfMod, myConfigModSize, "NATICQMod",disk); \ 00000040 D83195E5 LDR R3,[R5, #+472] \ 00000044 0060A0E1 MOV R6,R0 \ 00000048 142087E2 ADD R2,R7,#+20 \ 0000004C 0910A0E1 MOV R1,R9 \ 00000050 ........ _BLF InitConfig,??InitConfig??rA 917 918 //--------------------------- 919 // MOD CONFIG 920 //--------------------------- 921 if(newCfgFile!=-1 && newCfgModFile!=-1)//Если конфиги есть \ 00000054 0010E0E3 MVN R1,#+0 \ 00000058 010058E1 CMP R8,R1 \ 0000005C 01005011 CMPNE R0,R1 \ 00000060 3E01000A BEQ ??UpdateConfig_1 922 { 923 Vibra_cc=myConfMod->Vibra_cc; \ 00000064 848086E2 ADD R8,R6,#+132 \ 00000068 540F98E5 LDR R0,[R8, #+3924] 924 Ping_X=myConfMod->Ping_X; 925 Ping_Y=myConfMod->Ping_Y; 926 unread_X=myConfMod->unread_X; 927 unread_Y=myConfMod->unread_Y; 928 show_xstatus=myConfMod->show_xstatus; 929 sprintf(fontpath,per_s,myConfMod->fontpath); \ 0000006C 507EA0E3 MOV R7,#+1280 \ 00000070 9C0085E5 STR R0,[R5, #+156] \ 00000074 180698E5 LDR R0,[R8, #+1560] \ 00000078 DE2F86E2 ADD R2,R6,#+888 \ 0000007C A00085E5 STR R0,[R5, #+160] \ 00000080 1C0698E5 LDR R0,[R8, #+1564] \ 00000084 051087E0 ADD R1,R7,R5 \ 00000088 A40085E5 STR R0,[R5, #+164] \ 0000008C EC0698E5 LDR R0,[R8, #+1772] \ 00000090 A80085E5 STR R0,[R5, #+168] \ 00000094 F00698E5 LDR R0,[R8, #+1776] \ 00000098 AC0085E5 STR R0,[R5, #+172] \ 0000009C C80198E5 LDR R0,[R8, #+456] \ 000000A0 B00085E5 STR R0,[R5, #+176] \ 000000A4 040087E3 ORR R0,R7,#0x4 \ 000000A8 050080E0 ADD R0,R0,R5 \ 000000AC 160000EF SWI +22 930 // ShowStatusIcon=myConfMod->ShowStatusIcon; 931 AUTO_ENGADE=myConfMod->AUTO_ENGADE; \ 000000B0 E80798E5 LDR R0,[R8, #+2024] 932 933 //For online/offline log 934 isLogOffline=myConfMod->isLogOffline; 935 isLogOnline=myConfMod->isLogOnline; 936 937 #ifdef ELKA 938 //If action vol up && vol down button on elka 939 isVolUpButton=myConfMod->isVolUpButton; 940 isVolDownButton=myConfMod->isVolDownButton; 941 #endif 942 sprintf(CsmAdr,per_s,myConfMod->CsmAdr); \ 000000B4 051087E0 ADD R1,R7,R5 \ 000000B8 D00085E5 STR R0,[R5, #+208] \ 000000BC 9F0F49E2 SUB R0,R9,#+636 \ 000000C0 069080E0 ADD R9,R0,R6 \ 000000C4 000099E5 LDR R0,[R9, #+0] \ 000000C8 B40085E5 STR R0,[R5, #+180] \ 000000CC 700099E5 LDR R0,[R9, #+112] \ 000000D0 B80085E5 STR R0,[R5, #+184] \ 000000D4 0800A0E3 MOV R0,#+8 \ 000000D8 400D80E3 ORR R0,R0,#0x1000 \ 000000DC 062080E0 ADD R2,R0,R6 \ 000000E0 440087E3 ORR R0,R7,#0x44 \ 000000E4 050080E0 ADD R0,R0,R5 \ 000000E8 160000EF SWI +22 943 //Autoaway message 944 sprintf(awayHelloMsg,per_s,myConfMod->awayHelloMsg);//hello msg \ 000000EC EC00A0E3 MOV R0,#+236 \ 000000F0 C00E80E3 ORR R0,R0,#0xC00 \ 000000F4 062080E0 ADD R2,R0,R6 \ 000000F8 051087E0 ADD R1,R7,R5 \ 000000FC 550E85E2 ADD R0,R5,#+1360 \ 00000100 160000EF SWI +22 945 sprintf(awayMsg,per_s,myConfMod->awayMsg);//message \ 00000104 D32E86E2 ADD R2,R6,#+3376 \ 00000108 051087E0 ADD R1,R7,R5 \ 0000010C E80F85E2 ADD R0,R5,#+928 \ 00000110 160000EF SWI +22 946 947 IsShowLoopback=myConfMod->IsShowLoopback;//Show Loopback contact in CL \ 00000114 E00099E5 LDR R0,[R9, #+224] \ 00000118 C00085E5 STR R0,[R5, #+192] 948 // isShowMsgLongPress=myConfMod->isShowMsgLongPress; 949 //For png font 950 fonto=myConfMod->fonto; \ 0000011C C40298E5 LDR R0,[R8, #+708] \ 00000120 C40085E5 STR R0,[R5, #+196] 951 spaco1=myConfMod->spaco1; \ 00000124 940498E5 LDR R0,[R8, #+1172] \ 00000128 C80085E5 STR R0,[R5, #+200] 952 spaco2=myConfMod->spaco1;//так нада \ 0000012C 940498E5 LDR R0,[R8, #+1172] \ 00000130 CC0085E5 STR R0,[R5, #+204] 953 //Цвет для системного шрифта 954 for(int i=0;i<4;i++) \ 00000134 0000A0E3 MOV R0,#+0 955 { 956 fontColor[i]=myConfMod->fontColor[i]; \ ??UpdateConfig_2: \ 00000138 062080E0 ADD R2,R0,R6 \ 0000013C 1824D2E5 LDRB R2,[R2, #+1048] \ 00000140 051080E0 ADD R1,R0,R5 \ 00000144 9C23C1E5 STRB R2,[R1, #+924] 957 bgrColor[i]=myConfMod->bgrColor[i]; \ 00000148 062080E0 ADD R2,R0,R6 \ 0000014C 4824D2E5 LDRB R2,[R2, #+1096] 958 } \ 00000150 010080E2 ADD R0,R0,#+1 \ 00000154 040050E3 CMP R0,#+4 \ 00000158 9D23C1E5 STRB R2,[R1, #+925] \ 0000015C F5FFFFBA BLT ??UpdateConfig_2 959 960 AUTO_ENGADE=myConfMod->AUTO_ENGADE; \ 00000160 E80798E5 LDR R0,[R8, #+2024] 961 Is_Unread_On=myConfMod->Is_Unread_On; 962 Pause_Time=myConfMod->Pause_Time; 963 964 auto_x=myConfMod->auto_x; 965 auto_y=myConfMod->auto_y; 966 showAwayIdle=myConfMod->showAwayIdle; 967 968 //Online time on idle 969 onlineTime_x=myConfMod->onlineTime_x; 970 onlineTime_y=myConfMod->onlineTime_y; 971 972 Auto_Status=myConfMod->Auto_Status;//Включен автостатус или нет 973 time_zone=myConfMod->time_zone; 974 975 TIME_OR_MSG=myConfMod->TIME_OR_MSG; 976 977 sprintf(pingsnd,per_s,myConf->pingsnd); \ 00000164 552D84E2 ADD R2,R4,#+5440 \ 00000168 D00085E5 STR R0,[R5, #+208] \ 0000016C 7C0698E5 LDR R0,[R8, #+1660] \ 00000170 051087E0 ADD R1,R7,R5 \ 00000174 D40085E5 STR R0,[R5, #+212] \ 00000178 500598E5 LDR R0,[R8, #+1360] \ 0000017C D80085E5 STR R0,[R5, #+216] \ 00000180 F80D98E5 LDR R0,[R8, #+3576] \ 00000184 DC0085E5 STR R0,[R5, #+220] \ 00000188 FC0D98E5 LDR R0,[R8, #+3580] \ 0000018C E00085E5 STR R0,[R5, #+224] \ 00000190 880D98E5 LDR R0,[R8, #+3464] \ 00000194 E40085E5 STR R0,[R5, #+228] \ 00000198 1C0598E5 LDR R0,[R8, #+1308] \ 0000019C E80085E5 STR R0,[R5, #+232] \ 000001A0 200598E5 LDR R0,[R8, #+1312] \ 000001A4 EC0085E5 STR R0,[R5, #+236] \ 000001A8 780798E5 LDR R0,[R8, #+1912] \ 000001AC F00085E5 STR R0,[R5, #+240] \ 000001B0 180898E5 LDR R0,[R8, #+2072] \ 000001B4 F40085E5 STR R0,[R5, #+244] \ 000001B8 840E98E5 LDR R0,[R8, #+3716] \ 000001BC F80085E5 STR R0,[R5, #+248] \ 000001C0 D10F87E2 ADD R0,R7,#+836 \ 000001C4 050080E0 ADD R0,R0,R5 \ 000001C8 160000EF SWI +22 978 ping_time_config=myConfMod->ping_time_config; \ 000001CC 4C0698E5 LDR R0,[R8, #+1612] 979 sprintf(ignor_list,per_s,myConfMod->ignor_list); \ 000001D0 051087E0 ADD R1,R7,R5 \ 000001D4 FC0085E5 STR R0,[R5, #+252] \ 000001D8 6800A0E3 MOV R0,#+104 \ 000001DC 480D80E3 ORR R0,R0,#0x1200 \ 000001E0 062080E0 ADD R2,R0,R6 \ 000001E4 D00E40E2 SUB R0,R0,#+3328 \ 000001E8 050080E0 ADD R0,R0,R5 \ 000001EC 160000EF SWI +22 980 981 msg_d_x=myConfMod->msg_d_x; \ 000001F0 600398E5 LDR R0,[R8, #+864] 982 msg_d_y=myConfMod->msg_d_y; 983 main_lenght=myConfMod->main_lenght; 984 use_cutter=myConfMod->use_cutter; 985 986 sprintf(playing,per_s,myConfMod->playing); \ 000001F4 412D86E2 ADD R2,R6,#+4160 \ 000001F8 000185E5 STR R0,[R5, #+256] \ 000001FC 640398E5 LDR R0,[R8, #+868] \ 00000200 051087E0 ADD R1,R7,R5 \ 00000204 040185E5 STR R0,[R5, #+260] \ 00000208 F40398E5 LDR R0,[R8, #+1012] \ 0000020C 080185E5 STR R0,[R5, #+264] \ 00000210 240498E5 LDR R0,[R8, #+1060] \ 00000214 0C0185E5 STR R0,[R5, #+268] \ 00000218 5A0F87E2 ADD R0,R7,#+360 \ 0000021C 050080E0 ADD R0,R0,R5 \ 00000220 160000EF SWI +22 987 Reset_timer=myConfMod->Reset_timer; \ 00000224 180D98E5 LDR R0,[R8, #+3352] 988 #ifdef ELKA 989 NumStatusToIconBar=myConfMod->NumStatusToIconBar; 990 NumXStatusToIconBar=myConfMod->NumXStatusToIconBar; 991 ShowStatusIcon=myConfMod->ShowStatusIcon; 992 #endif 993 LongRightAction=myConfMod->LongRightAction; 994 LongLeftAction=myConfMod->LongLeftAction; 995 996 //Позиция хстатус на гэ 997 IDLEICON_XX=myConfMod->IDLEICON_XX; 998 IDLEICON_YX=myConfMod->IDLEICON_YX; 999 1000 show_send_info=myConfMod->show_send_info; 1001 ActionResh=myConfMod->ActionResh;//действие на # в контакт листе 1002 1003 #ifdef kluchnik 1004 AUTOBOT_UIN=myConfMod->AUTOBOT_UIN; 1005 autobot_kel=myConfMod->autobot_kel; 1006 #endif 1007 1008 1009 //-------------------------------- 1010 // ORIGINAL CONFIG 1011 //-------------------------------- 1012 UIN=myConf->UIN; 1013 sprintf(PASS,per_s,myConf->PASS); \ 00000228 5C2084E2 ADD R2,R4,#+92 \ 0000022C 100185E5 STR R0,[R5, #+272] \ 00000230 000098E5 LDR R0,[R8, #+0] \ 00000234 051087E0 ADD R1,R7,R5 \ 00000238 140185E5 STR R0,[R5, #+276] \ 0000023C 900098E5 LDR R0,[R8, #+144] \ 00000240 180185E5 STR R0,[R5, #+280] \ 00000244 380298E5 LDR R0,[R8, #+568] \ 00000248 540185E5 STR R0,[R5, #+340] \ 0000024C 3C0298E5 LDR R0,[R8, #+572] \ 00000250 580185E5 STR R0,[R5, #+344] \ 00000254 F80F98E5 LDR R0,[R8, #+4088] \ 00000258 3C0185E5 STR R0,[R5, #+316] \ 0000025C 000198E5 LDR R0,[R8, #+256] \ 00000260 2C8084E2 ADD R8,R4,#+44 \ 00000264 400185E5 STR R0,[R5, #+320] \ 00000268 000098E5 LDR R0,[R8, #+0] \ 0000026C 1C0185E5 STR R0,[R5, #+284] \ 00000270 5E0F87E2 ADD R0,R7,#+376 \ 00000274 050080E0 ADD R0,R0,R5 \ 00000278 160000EF SWI +22 1014 1015 SORT_CLIST=myConf->SORT_CLIST; \ 0000027C 640598E5 LDR R0,[R8, #+1380] 1016 LOG_ALL=myConf->LOG_ALL; 1017 LOG_STATCH=myConf->LOG_STATCH; 1018 SHOW_ACTIVE=myConf->SHOW_ACTIVE; 1019 VIBR_TYPE=myConf->VIBR_TYPE; 1020 VIBR_ON_CONNECT=myConf->VIBR_ON_CONNECT; 1021 DEVELOP_IF=myConf->DEVELOP_IF; 1022 FIRST_LETTER=myConf->FIRST_LETTER; 1023 1024 1025 HISTORY_TYPE=myConf->HISTORY_TYPE; 1026 1027 color_choose=myConf->color_choose; 1028 1029 sprintf(HIST_PATH,per_s,myConf->HIST_PATH); \ 00000280 732F84E2 ADD R2,R4,#+460 \ 00000284 BC0085E5 STR R0,[R5, #+188] \ 00000288 3C0C98E5 LDR R0,[R8, #+3132] \ 0000028C 051087E0 ADD R1,R7,R5 \ 00000290 300185E5 STR R0,[R5, #+304] \ 00000294 1C0D98E5 LDR R0,[R8, #+3356] \ 00000298 340185E5 STR R0,[R5, #+308] \ 0000029C CC0B98E5 LDR R0,[R8, #+3020] \ 000002A0 240185E5 STR R0,[R5, #+292] \ 000002A4 B70E87E2 ADD R0,R7,#+2928 \ 000002A8 049080E0 ADD R9,R0,R4 \ 000002AC 600099E5 LDR R0,[R9, #+96] \ 000002B0 280185E5 STR R0,[R5, #+296] \ 000002B4 D00099E5 LDR R0,[R9, #+208] \ 000002B8 200185E5 STR R0,[R5, #+288] \ 000002BC B40498E5 LDR R0,[R8, #+1204] \ 000002C0 2C0185E5 STR R0,[R5, #+300] \ 000002C4 D40598E5 LDR R0,[R8, #+1492] \ 000002C8 380185E5 STR R0,[R5, #+312] \ 000002CC AC0C98E5 LDR R0,[R8, #+3244] \ 000002D0 440185E5 STR R0,[R5, #+324] \ 000002D4 100998E5 LDR R0,[R8, #+2320] \ 000002D8 980085E5 STR R0,[R5, #+152] \ 000002DC C400A0E3 MOV R0,#+196 \ 000002E0 900E80E3 ORR R0,R0,#0x900 \ 000002E4 050080E0 ADD R0,R0,R5 \ 000002E8 160000EF SWI +22 1030 sprintf(NATICQ_HOST,per_s,myConf->NATICQ_HOST); \ 000002EC C02084E2 ADD R2,R4,#+192 \ 000002F0 051087E0 ADD R1,R7,R5 \ 000002F4 0400A0E3 MOV R0,#+4 \ 000002F8 A00E80E3 ORR R0,R0,#0xA00 \ 000002FC 050080E0 ADD R0,R0,R5 \ 00000300 160000EF SWI +22 1031 NATICQ_PORT=myConf->NATICQ_PORT; \ 00000304 400198E5 LDR R0,[R8, #+320] \ 00000308 D00185E5 STR R0,[R5, #+464] 1032 RECONNECT_TIME=myConf->RECONNECT_TIME; //2058 \ 0000030C 700198E5 LDR R0,[R8, #+368] \ 00000310 D40185E5 STR R0,[R5, #+468] 1033 1034 vibraPower=myConf->vibraPower; \ 00000314 300099E5 LDR R0,[R9, #+48] \ 00000318 480185E5 STR R0,[R5, #+328] 1035 1036 IDLEICON_X=myConf->IDLEICON_X; \ 0000031C 800498E5 LDR R0,[R8, #+1152] \ 00000320 4C0185E5 STR R0,[R5, #+332] 1037 IDLEICON_Y=myConf->IDLEICON_Y; \ 00000324 840498E5 LDR R0,[R8, #+1156] \ 00000328 500185E5 STR R0,[R5, #+336] 1038 1039 I_COLOR=myConf->I_COLOR; \ 0000032C 700698E5 LDR R0,[R8, #+1648] \ 00000330 5C0185E5 STR R0,[R5, #+348] 1040 TO_COLOR=myConf->TO_COLOR; \ 00000334 A00698E5 LDR R0,[R8, #+1696] \ 00000338 600185E5 STR R0,[R5, #+352] 1041 X_COLOR=myConf->X_COLOR; \ 0000033C D00698E5 LDR R0,[R8, #+1744] \ 00000340 640185E5 STR R0,[R5, #+356] 1042 O_I_COLOR=myConf->O_I_COLOR; \ 00000344 900798E5 LDR R0,[R8, #+1936] \ 00000348 680185E5 STR R0,[R5, #+360] 1043 O_TO_COLOR=myConf->O_TO_COLOR; \ 0000034C C00798E5 LDR R0,[R8, #+1984] \ 00000350 6C0185E5 STR R0,[R5, #+364] 1044 O_X_COLOR=myConf->O_X_COLOR; \ 00000354 F00798E5 LDR R0,[R8, #+2032] \ 00000358 700185E5 STR R0,[R5, #+368] 1045 1046 ED_FONT_SIZE=myConf->ED_FONT_SIZE; \ 0000035C 000798E5 LDR R0,[R8, #+1792] 1047 ED_H_FONT_SIZE=myConf->ED_H_FONT_SIZE; 1048 ED_X_FONT_SIZE=myConf->ED_X_FONT_SIZE; 1049 O_ED_FONT_SIZE=myConf->O_ED_FONT_SIZE; 1050 O_ED_H_FONT_SIZE=myConf->O_ED_H_FONT_SIZE; 1051 O_ED_X_FONT_SIZE=myConf->O_ED_X_FONT_SIZE; 1052 1053 ACK_COLOR=myConf->ACK_COLOR; 1054 UNACK_COLOR=myConf->UNACK_COLOR; 1055 1056 ENA_AUTO_XTXT=myConf->ENA_AUTO_XTXT; 1057 NOT_LOG_SAME_XTXT=myConf->NOT_LOG_SAME_XTXT; 1058 LOG_XTXT=myConf->LOG_XTXT; 1059 1060 HISTORY_BUFFER=myConf->HISTORY_BUFFER; 1061 1062 //Illumination by BoBa 19.04.2007 1063 /////////// 1064 ILL_DISP_RECV=myConf->ILL_DISP_RECV; 1065 ILL_KEYS_RECV=myConf->ILL_KEYS_RECV; 1066 ILL_DISP_SEND=myConf->ILL_DISP_SEND; 1067 ILL_KEYS_SEND=myConf->ILL_KEYS_SEND; 1068 ILL_SEND_TMR=myConf->ILL_SEND_TMR; 1069 ILL_SEND_FADE=myConf->ILL_SEND_FADE; 1070 ILL_RECV_TMR=myConf->ILL_RECV_TMR; 1071 ILL_RECV_FADE=myConf->ILL_RECV_FADE; 1072 ILL_OFF_FADE=myConf->ILL_OFF_FADE; 1073 1074 //=============================Проигрывание звука======================= 1075 1076 sprintf(sndStartup,per_s,myConf->sndStartup); \ 00000360 051087E0 ADD R1,R7,R5 \ 00000364 740185E5 STR R0,[R5, #+372] \ 00000368 300798E5 LDR R0,[R8, #+1840] \ 0000036C 780185E5 STR R0,[R5, #+376] \ 00000370 600798E5 LDR R0,[R8, #+1888] \ 00000374 7C0185E5 STR R0,[R5, #+380] \ 00000378 200898E5 LDR R0,[R8, #+2080] \ 0000037C 800185E5 STR R0,[R5, #+384] \ 00000380 500898E5 LDR R0,[R8, #+2128] \ 00000384 840185E5 STR R0,[R5, #+388] \ 00000388 800898E5 LDR R0,[R8, #+2176] \ 0000038C 880185E5 STR R0,[R5, #+392] \ 00000390 B00898E5 LDR R0,[R8, #+2224] \ 00000394 8C0185E5 STR R0,[R5, #+396] \ 00000398 E00898E5 LDR R0,[R8, #+2272] \ 0000039C 900185E5 STR R0,[R5, #+400] \ 000003A0 FC0D98E5 LDR R0,[R8, #+3580] \ 000003A4 940185E5 STR R0,[R5, #+404] \ 000003A8 6C0E98E5 LDR R0,[R8, #+3692] \ 000003AC 980185E5 STR R0,[R5, #+408] \ 000003B0 8C0D98E5 LDR R0,[R8, #+3468] \ 000003B4 9C0185E5 STR R0,[R5, #+412] \ 000003B8 DC0E98E5 LDR R0,[R8, #+3804] \ 000003BC A00185E5 STR R0,[R5, #+416] \ 000003C0 980998E5 LDR R0,[R8, #+2456] \ 000003C4 A40185E5 STR R0,[R5, #+420] \ 000003C8 C80998E5 LDR R0,[R8, #+2504] \ 000003CC A80185E5 STR R0,[R5, #+424] \ 000003D0 580A98E5 LDR R0,[R8, #+2648] \ 000003D4 B00185E5 STR R0,[R5, #+432] \ 000003D8 880A98E5 LDR R0,[R8, #+2696] \ 000003DC B40185E5 STR R0,[R5, #+436] \ 000003E0 B80A98E5 LDR R0,[R8, #+2744] \ 000003E4 B80185E5 STR R0,[R5, #+440] \ 000003E8 E80A98E5 LDR R0,[R8, #+2792] \ 000003EC BC0185E5 STR R0,[R5, #+444] \ 000003F0 F80998E5 LDR R0,[R8, #+2552] \ 000003F4 AC0185E5 STR R0,[R5, #+428] \ 000003F8 280A98E5 LDR R0,[R8, #+2600] \ 000003FC C00185E5 STR R0,[R5, #+448] \ 00000400 180B98E5 LDR R0,[R8, #+2840] \ 00000404 C40185E5 STR R0,[R5, #+452] \ 00000408 4C00A0E3 MOV R0,#+76 \ 0000040C 480D80E3 ORR R0,R0,#0x1200 \ 00000410 042080E0 ADD R2,R0,R4 \ 00000414 610F87E2 ADD R0,R7,#+388 \ 00000418 050080E0 ADD R0,R0,R5 \ 0000041C 160000EF SWI +22 1077 sprintf(sndSrvMsg,per_s,myConf->sndSrvMsg); \ 00000420 B800A0E3 MOV R0,#+184 \ 00000424 480D80E3 ORR R0,R0,#0x1200 \ 00000428 042080E0 ADD R2,R0,R4 \ 0000042C 051087E0 ADD R1,R7,R5 \ 00000430 710F87E2 ADD R0,R7,#+452 \ 00000434 050080E0 ADD R0,R0,R5 \ 00000438 160000EF SWI +22 1078 sprintf(sndGlobal,per_s,myConf->sndGlobal); \ 0000043C 2400A0E3 MOV R0,#+36 \ 00000440 4C0D80E3 ORR R0,R0,#0x1300 \ 00000444 042080E0 ADD R2,R0,R4 \ 00000448 051087E0 ADD R1,R7,R5 \ 0000044C C20E40E2 SUB R0,R0,#+3104 \ 00000450 050080E0 ADD R0,R0,R5 \ 00000454 160000EF SWI +22 1079 sprintf(sndGlobal2,per_s,myConf->sndGlobal2); \ 00000458 6800A0E3 MOV R0,#+104 \ 0000045C 500D80E3 ORR R0,R0,#0x1400 \ 00000460 042080E0 ADD R2,R0,R4 \ 00000464 051087E0 ADD R1,R7,R5 \ 00000468 910F87E3 ORR R0,R7,#0x244 \ 0000046C 050080E0 ADD R0,R0,R5 \ 00000470 160000EF SWI +22 1080 sprintf(sndMsg,per_s,myConf->sndMsg); \ 00000474 E90E87E2 ADD R0,R7,#+3728 \ 00000478 042080E0 ADD R2,R0,R4 \ 0000047C 051087E0 ADD R1,R7,R5 \ 00000480 A10F87E3 ORR R0,R7,#0x284 \ 00000484 050080E0 ADD R0,R0,R5 \ 00000488 160000EF SWI +22 1081 sprintf(sndMsg2,per_s,myConf->sndMsg2); \ 0000048C D400A0E3 MOV R0,#+212 \ 00000490 500D80E3 ORR R0,R0,#0x1400 \ 00000494 042080E0 ADD R2,R0,R4 \ 00000498 051087E0 ADD R1,R7,R5 \ 0000049C D10E40E2 SUB R0,R0,#+3344 \ 000004A0 050080E0 ADD R0,R0,R5 \ 000004A4 160000EF SWI +22 1082 extended_sounds=myConf->extended_sounds; \ 000004A8 6C0199E5 LDR R0,[R9, #+364] 1083 sprintf(sndMsgSent,per_s,myConf->sndMsgSent); \ 000004AC 051087E0 ADD R1,R7,R5 \ 000004B0 C80185E5 STR R0,[R5, #+456] \ 000004B4 FC00A0E3 MOV R0,#+252 \ 000004B8 4C0D80E3 ORR R0,R0,#0x1300 \ 000004BC 042080E0 ADD R2,R0,R4 \ 000004C0 C10F87E2 ADD R0,R7,#+772 \ 000004C4 050080E0 ADD R0,R0,R5 \ 000004C8 160000EF SWI +22 1084 sndVolume=myConf->sndVolume; \ 000004CC 000099E5 LDR R0,[R9, #+0] 1085 1086 //----------------------------------------- 1087 1088 vibraPower=myConf->vibraPower; 1089 1090 sprintf(TEMPLATES_PATH,per_s,myConf->TEMPLATES_PATH); \ 000004D0 FA2F84E2 ADD R2,R4,#+1000 \ 000004D4 CC0185E5 STR R0,[R5, #+460] \ 000004D8 300099E5 LDR R0,[R9, #+48] \ 000004DC 051087E0 ADD R1,R7,R5 \ 000004E0 480185E5 STR R0,[R5, #+328] \ 000004E4 F10F87E2 ADD R0,R7,#+964 \ 000004E8 050080E0 ADD R0,R0,R5 \ 000004EC 160000EF SWI +22 1091 sprintf(ICON_PATH,per_s,myConf->ICON_PATH); \ 000004F0 C42F84E2 ADD R2,R4,#+784 \ 000004F4 051087E0 ADD R1,R7,R5 \ 000004F8 0400A0E3 MOV R0,#+4 \ 000004FC 900E80E3 ORR R0,R0,#0x900 \ 00000500 050080E0 ADD R0,R0,R5 \ 00000504 160000EF SWI +22 1092 sprintf(SMILE_FILE,per_s,myConf->SMILE_FILE); \ 00000508 8E2F84E2 ADD R2,R4,#+568 \ 0000050C 051087E0 ADD R1,R7,R5 \ 00000510 E10F87E2 ADD R0,R7,#+900 \ 00000514 050080E0 ADD R0,R0,R5 \ 00000518 160000EF SWI +22 1093 sprintf(SMILE_PATH,per_s,myConf->SMILE_PATH); \ 0000051C A92F84E2 ADD R2,R4,#+676 \ 00000520 051087E0 ADD R1,R7,R5 \ 00000524 4400A0E3 MOV R0,#+68 \ 00000528 900E80E3 ORR R0,R0,#0x900 \ 0000052C 050080E0 ADD R0,R0,R5 \ 00000530 160000EF SWI +22 1094 sprintf(XSTATUSES_PATH,per_s,myConf->XSTATUSES_PATH); \ 00000534 DF2F84E2 ADD R2,R4,#+892 \ 00000538 051087E0 ADD R1,R7,R5 \ 0000053C 8400A0E3 MOV R0,#+132 \ 00000540 900E80E3 ORR R0,R0,#0x900 \ 00000544 050080E0 ADD R0,R0,R5 \ 00000548 160000EF SWI +22 1095 1096 1097 //----------------------------------------- 1098 1099 mfree(myConf); \ 0000054C 0400A0E1 MOV R0,R4 \ 00000550 150000EF SWI +21 1100 mfree(myConfMod); \ 00000554 0600A0E1 MOV R0,R6 \ 00000558 150000EF SWI +21 \ 0000055C F083BDE8 POP {R4-R9,PC} 1101 } 1102 else 1103 { 1104 LockSched(); \ ??UpdateConfig_1: \ 00000560 460100EF SWI +326 1105 ShowMSG(1,(int)"Can't open configs!"); \ 00000564 0710A0E1 MOV R1,R7 \ 00000568 0100A0E3 MOV R0,#+1 \ 0000056C 480100EF SWI +328 1106 UnlockSched(); \ 00000570 470100EF SWI +327 1107 void ElfKiller(void); 1108 SUBPROC((void *)ElfKiller); \ 00000574 ........ LDR R0,??DataTable1 ;; ElfKiller \ 00000578 710100EF SWI +369 1109 } 1110 } \ 0000057C F083BDE8 POP {R4-R9,PC} ;; return \ ??UpdateConfig_0: \ 00000580 ........ DC32 `?` 1111 1112 //--------------------------------------------------------------------// 1113 //--------------------------------------------------------------------// 1114 //--------------------------------------------------------------------// 1115 1116 extern int *XStatusesIconArray; 1117 1118 #ifndef NEWSGOLD 1119 #define SEND_TIMER 1120 #endif 1121 1122 #ifdef ELKA 1123 #pragma swi_number=54 1124 __swi __arm void SLI_SetState(unsigned char state); 1125 #endif 1126 1127 #define IN_TICKS(sec) (sec * TMR_SECOND) 1128 1129 int main_d; 1130 int align=0; 1131 //int space=1; 1132 void *canvasdata; 1133 int paused_height; 1134 1135 1136 char talk_sound[128]; 1137 int uins; 1138 //char m_1[]="unofficial! private use only"; 1139 //char m_2[]="mod by (c)Evilfox 315384924"; 1140 char unread_msg_info[64]; 1141 1142 int saver_on; 1143 1144 #ifdef NEWSGOLD 1145 extern char teast2[256]; 1146 #endif 1147 1148 #ifdef ELKA 1149 char last_msg_buffer[4048]; 1150 #endif 1151 1152 1153 ///////////////////////////////////////////////auto ping//////////////////// 1154 GBSTMR mytmr3; 1155 static void PingToServer2(void) 1156 { 1157 TPKT *p; 1158 p=malloc(sizeof(PKT)+sizeof(TTime)); 1159 GetDateTime(NULL,(TTime *)p->data); 1160 p->pkt.uin=0; 1161 p->pkt.type=T_ECHO; 1162 p->pkt.data_len=sizeof(TTime); 1163 SUBPROC((void *)SendAnswer,0,p); 1164 } 1165 1166 int Is_PING_On; 1167 \ In segment CODE, align 4, keep-with-next 1168 void Pinger2() 1169 { \ Pinger2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1170 if(Is_PING_On) \ 00000004 ........ LDR R5,??DataTable2 ;; Pinger2 \ 00000008 ........ LDR R6,??DataTable21 ;; S_ICONS \ 0000000C 4440A0E3 MOV R4,#+68 \ 00000010 F40196E5 LDR R0,[R6, #+500] \ 00000014 B04E84E3 ORR R4,R4,#0xB00 \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 1500000A BEQ ??Pinger2_0 1171 { 1172 PingToServer2(); \ 00000020 1000A0E3 MOV R0,#+16 \ 00000024 140000EF SWI +20 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 081087E2 ADD R1,R7,#+8 \ 00000030 0000A0E3 MOV R0,#+0 \ 00000034 B40000EF SWI +180 \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 000087E5 STR R0,[R7, #+0] \ 00000040 1200A0E3 MOV R0,#+18 \ 00000044 B400C7E1 STRH R0,[R7, #+4] \ 00000048 0800A0E3 MOV R0,#+8 \ 0000004C B600C7E1 STRH R0,[R7, #+6] \ 00000050 ........ LDR R0,??DataTable4 ;; SendAnswer \ 00000054 0720A0E1 MOV R2,R7 \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 710100EF SWI +369 1173 GBS_StartTimerProc(&mytmr3, 12960, Pinger2); \ 00000060 0520A0E1 MOV R2,R5 \ 00000064 A010A0E3 MOV R1,#+160 \ 00000068 C81D81E3 ORR R1,R1,#0x3200 \ 0000006C 060084E0 ADD R0,R4,R6 \ 00000070 4D0000EF SWI +77 \ 00000074 F080BDE8 POP {R4-R7,PC} 1174 } 1175 else 1176 GBS_StartTimerProc(&mytmr3, 2160, Pinger2); \ ??Pinger2_0: \ 00000078 0520A0E1 MOV R2,R5 \ 0000007C 871EA0E3 MOV R1,#+2160 \ 00000080 060084E0 ADD R0,R4,R6 \ 00000084 4D0000EF SWI +77 1177 } \ 00000088 F080BDE8 POP {R4-R7,PC} ;; return 1178 1179 //////////////////////////////////////auto ping///////////////////////////// 1180 1181 extern volatile int total_smiles; 1182 extern volatile int total_xstatuses; 1183 extern volatile int xstatuses_load; 1184 extern volatile int pictures_max; //2026rev 1185 extern volatile int pictures_loaded; //2026rev 1186 1187 #ifdef ELKA 1188 int Is_SLI_On;//мигаем светодиодом 1189 #endif 1190 1191 int Is_SMARTCPU_On;//Вывод сообщений на гэ 1192 int Is_INC_On;//Popup message 1193 int Is_ILU_On;//Режим подсветки 1194 int Is_Double_Vibra_On;//Режим напоминания 1195 int total_unread; 1196 int total_unread2; 1197 1198 #ifdef ELKA 1199 const int SLI_TYPE=1; 1200 #endif 1201 1202 char PINGO[256]; 1203 1204 #ifdef ELKA 1205 extern const unsigned int SLI_time; 1206 extern const unsigned int SLI_time2; 1207 #endif 1208 #define USE_MLMENU 1209 1210 #define TMR_SECOND 216 1211 1212 //IPC 1213 const char ipc_my_name[32]=IPC_NATICQ_NAME; 1214 const char ipc_xtask_name[]=IPC_XTASK_NAME; 1215 const char ipc_test_name[]="test"; 1216 IPC_REQ gipc; 1217 1218 1219 char elf_path[256]; 1220 int maincsm_id; 1221 int maingui_id; 1222 \ In segment CODE, align 4, keep-with-next 1223 void SMART_REDRAW(void) 1224 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 1225 int f; 1226 LockSched(); \ 00000004 460100EF SWI +326 1227 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 528 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 1228 UnlockSched(); \ 00000018 470100EF SWI +327 1229 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 1230 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 528 1231 1232 //По 10 секунд 1233 #define ACTIVE_TIME 360 1234 1235 //Максимальное количество сообщений в логе 1236 #define MAXLOGMSG (20) 1237 1238 // Строковые описания статусов 1239 1240 const char S_OFFLINE[]="Offline"; 1241 const char S_INVISIBLE[]="Invisible"; 1242 const char S_AWAY[]="Away"; 1243 const char S_NA[]="N/A"; 1244 const char S_OCCUPIED[]="Occupied"; 1245 const char S_DND[]="DND"; 1246 const char S_ONLINE[]="Online"; 1247 const char S_FFC[]="FFC"; 1248 1249 volatile int SENDMSGCOUNT; 1250 #ifdef kluchnik 1251 int IsActiveUp=1; 1252 #else 1253 int IsActiveUp=0; 1254 #endif 1255 int Is_Vibra_Enabled; 1256 int Is_Id3tag_Enabled; 1257 unsigned int Is_Sounds_Enabled; 1258 int Is_Show_Offline; 1259 int Is_Show_Groups; 1260 1261 int S_ICONS[TOTAL_ICONS+1]; 1262 1263 #define EOP -10 1264 int CurrentStatus; 1265 #ifdef NEWSGOLD 1266 extern int CurrentXStatus; 1267 #else 1268 int CurrentXStatus; 1269 #endif 1270 1271 WSHDR *ews; 1272 1273 1274 static const char * const icons_names[TOTAL_ICONS]= 1275 { 1276 "offline.png", 1277 "invisible.png", 1278 "away.png", 1279 "na.png", 1280 "occupied.png", 1281 "dnd.png", 1282 "depression.png", 1283 "evil.png", 1284 "home.png", 1285 "lunch.png", 1286 "work.png", 1287 "online.png", 1288 "ffc.png", 1289 "message.png", 1290 "unknown.png", 1291 "groupon.png", 1292 "groupoff.png", 1293 "null.png", 1294 "addcont.png", 1295 "head.png", 1296 "logo.png", 1297 "ping.png", 1298 "settings.png", 1299 "vis1.png", 1300 "vis2.png", 1301 "vis3.png", 1302 "vis4.png", 1303 "vis5.png" 1304 }; 1305 1306 1307 1308 ////=================================away_msg============== 1309 1310 #ifdef NEWSGOLD 1311 #pragma swi_number=0x0C5 1312 __swi __arm int IsIdleUiOnTop();//На сг нет этой функции 1313 #else 1314 int IsIdleUiOnTop(void) 1315 { 1316 void *icsm=FindCSMbyID(CSM_root()->idle_id); 1317 if (IsGuiOnTop(((int*)icsm)[DISPLACE_OF_IDLEGUI_ID/4 ])) 1318 return(1); 1319 else 1320 return(0); 1321 } 1322 #endif 1323 1324 int msg_away_timer=0;//Счетчик для автостатуса 1325 char away_msg[264];//Само сообщение для ответа 1326 char away_msg_time[64];//Время когда сработал таймер 1327 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 1328 //char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 1329 char tim_zone[16]; \ In segment DATA_Z, align 4, align-sorted 1330 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 1331 int timemin; \ timemin: \ 00000000 DS8 4 1332 int away_m; 1333 int status_rem;//ДЛя сохранения текущего статуса 1334 int change_back_status;//вернуть предыдущий статус или нет 1335 GBSTMR away_tmr; 1336 1337 1338 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 1339 void FreeXText2(CLIST *t) 1340 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1341 if (t->xtext2) {mfree(t->xtext2);t->xtext2=NULL;} \ 00000008 880094E5 LDR R0,[R4, #+136] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 880084E5 STR R0,[R4, #+136] 1342 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1343 \ In segment CODE, align 4, keep-with-next 1344 void away_timer()//Таймер автостатуса 1345 { \ away_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1346 if(msg_away_timer==AUTO_ENGADE) \ 00000004 ........ LDR R4,??DataTable21 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 240294E5 LDR R0,[R4, #+548] \ 00000010 D01094E5 LDR R1,[R4, #+208] \ 00000014 010050E1 CMP R0,R1 \ 00000018 2000001A BNE ??away_timer_0 1347 { 1348 TTime tt; 1349 GetDateTime(NULL,&tt); 1350 sprintf(away_msg_time_dace, "%2d:%2d", tt.hour, tt.min); \ 0000001C B0509FE5 LDR R5,??away_timer_1 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C F43092E5 LDR R3,[R2, #+244] \ 00000010 AC00A0E3 MOV R0,#+172 \ 00000014 D00E80E3 ORR R0,R0,#0xD00 \ 00000018 200053E3 CMP R3,#+32 \ 0000001C 0080BD88 POPHI {PC} \ 00000020 01CF8FE2 ADR R12,??init_time_zone_0 \ 00000024 03C0DCE7 LDRB R12,[R12, R3] \ 00000028 0CF18FE0 ADD PC,PC,R12, LSL #+2 \ ??init_time_zone_0: \ 0000002C 080A0E12 DC8 +8,+10,+14,+18 \ 00000030 1416181A DC8 +20,+22,+24,+26 \ 00000034 1C1E2022 DC8 +28,+30,+32,+34 \ 00000038 2426282A DC8 +36,+38,+40,+42 \ 0000003C 2C2E3032 DC8 +44,+46,+48,+50 \ 00000040 3436383A DC8 +52,+54,+56,+58 \ 00000044 3C3E4042 DC8 +60,+62,+64,+66 \ 00000048 4446484A DC8 +68,+70,+72,+74 \ 0000004C 4C000000 DC8 +76,+0,+0,+0 1372 { 1373 case 0: 1374 sprintf(tim_zone, "GMT -12:00"); \ ??init_time_zone_2: \ 00000050 601F81E2 ADD R1,R1,#+384 \ 00000054 040000EA B ??init_time_zone_3 1375 break; 1376 case 1: 1377 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_4: \ 00000058 5D1F81E2 ADD R1,R1,#+372 \ 0000005C 020080E0 ADD R0,R0,R2 \ 00000060 160000EF SWI +22 \ 00000064 0080BDE8 POP {PC} 1378 break; 1379 case 2: 1380 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_5: \ 00000068 5A1F81E2 ADD R1,R1,#+360 \ ??init_time_zone_3: \ 0000006C 020080E0 ADD R0,R0,R2 \ 00000070 160000EF SWI +22 \ 00000074 0080BDE8 POP {PC} 1381 break; 1382 case 3: 1383 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_6: \ 00000078 571F81E2 ADD R1,R1,#+348 \ 0000007C FAFFFFEA B ??init_time_zone_3 1384 break; 1385 case 4: 1386 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_7: \ 00000080 541F81E2 ADD R1,R1,#+336 \ 00000084 F8FFFFEA B ??init_time_zone_3 1387 break; 1388 case 5: 1389 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_8: \ 00000088 511F81E2 ADD R1,R1,#+324 \ 0000008C F6FFFFEA B ??init_time_zone_3 1390 break; 1391 case 6: 1392 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_9: \ 00000090 4E1F81E2 ADD R1,R1,#+312 \ 00000094 F4FFFFEA B ??init_time_zone_3 1393 break; 1394 case 7: 1395 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_10: \ 00000098 4B1F81E2 ADD R1,R1,#+300 \ 0000009C F2FFFFEA B ??init_time_zone_3 1396 break; 1397 case 8: 1398 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_11: \ 000000A0 481F81E2 ADD R1,R1,#+288 \ 000000A4 F0FFFFEA B ??init_time_zone_3 1399 break; 1400 case 9: 1401 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_12: \ 000000A8 451F81E2 ADD R1,R1,#+276 \ 000000AC EEFFFFEA B ??init_time_zone_3 1402 break; 1403 case 10: 1404 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_13: \ 000000B0 421F81E2 ADD R1,R1,#+264 \ 000000B4 ECFFFFEA B ??init_time_zone_3 1405 break; 1406 case 11: 1407 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_14: \ 000000B8 FC1081E2 ADD R1,R1,#+252 \ 000000BC EAFFFFEA B ??init_time_zone_3 1408 break; 1409 case 12: 1410 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_15: \ 000000C0 F01081E2 ADD R1,R1,#+240 \ 000000C4 E8FFFFEA B ??init_time_zone_3 1411 break; 1412 case 13: 1413 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_16: \ 000000C8 E41081E2 ADD R1,R1,#+228 \ 000000CC E6FFFFEA B ??init_time_zone_3 1414 break; 1415 case 14: 1416 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_17: \ 000000D0 D81081E2 ADD R1,R1,#+216 \ 000000D4 E4FFFFEA B ??init_time_zone_3 1417 break; 1418 case 15: 1419 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_18: \ 000000D8 CC1081E2 ADD R1,R1,#+204 \ 000000DC E2FFFFEA B ??init_time_zone_3 1420 break; 1421 case 16: 1422 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_19: \ 000000E0 C01081E2 ADD R1,R1,#+192 \ 000000E4 E0FFFFEA B ??init_time_zone_3 1423 break; 1424 case 17: 1425 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_20: \ 000000E8 B41081E2 ADD R1,R1,#+180 \ 000000EC DEFFFFEA B ??init_time_zone_3 1426 break; 1427 case 18: 1428 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_21: \ 000000F0 A81081E2 ADD R1,R1,#+168 \ 000000F4 DCFFFFEA B ??init_time_zone_3 1429 break; 1430 case 19: 1431 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_22: \ 000000F8 9C1081E2 ADD R1,R1,#+156 \ 000000FC DAFFFFEA B ??init_time_zone_3 1432 break; 1433 case 20: 1434 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_23: \ 00000100 901081E2 ADD R1,R1,#+144 \ 00000104 D8FFFFEA B ??init_time_zone_3 1435 break; 1436 case 21: 1437 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_24: \ 00000108 841081E2 ADD R1,R1,#+132 \ 0000010C D6FFFFEA B ??init_time_zone_3 1438 break; 1439 case 22: 1440 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_25: \ 00000110 781081E2 ADD R1,R1,#+120 \ 00000114 D4FFFFEA B ??init_time_zone_3 1441 break; 1442 case 23: 1443 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_26: \ 00000118 6C1081E2 ADD R1,R1,#+108 \ 0000011C D2FFFFEA B ??init_time_zone_3 1444 break; 1445 case 24: 1446 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_27: \ 00000120 601081E2 ADD R1,R1,#+96 \ 00000124 D0FFFFEA B ??init_time_zone_3 1447 break; 1448 case 25: 1449 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_28: \ 00000128 541081E2 ADD R1,R1,#+84 \ 0000012C CEFFFFEA B ??init_time_zone_3 1450 break; 1451 case 26: 1452 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_29: \ 00000130 481081E2 ADD R1,R1,#+72 \ 00000134 CCFFFFEA B ??init_time_zone_3 1453 break; 1454 case 27: 1455 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_30: \ 00000138 3C1081E2 ADD R1,R1,#+60 \ 0000013C CAFFFFEA B ??init_time_zone_3 1456 break; 1457 case 28: 1458 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_31: \ 00000140 301081E2 ADD R1,R1,#+48 \ 00000144 C8FFFFEA B ??init_time_zone_3 1459 break; 1460 case 29: 1461 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_32: \ 00000148 241081E2 ADD R1,R1,#+36 \ 0000014C C6FFFFEA B ??init_time_zone_3 1462 break; 1463 case 30: 1464 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_33: \ 00000150 181081E2 ADD R1,R1,#+24 \ 00000154 C4FFFFEA B ??init_time_zone_3 1465 break; 1466 case 31: 1467 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_34: \ 00000158 0C1081E2 ADD R1,R1,#+12 \ 0000015C C2FFFFEA B ??init_time_zone_3 1468 break; 1469 case 32: 1470 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_35: \ 00000160 020080E0 ADD R0,R0,R2 \ 00000164 160000EF SWI +22 1471 break; 1472 } 1473 } \ ??init_time_zone_36: \ 00000168 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 0000016C ........ DC32 `?` 1474 1475 //=================================away_msg=============== 1476 //////////////////////////////////////////tozhe dlja auto ping/////////////// 1477 \ In segment CODE, align 4, keep-with-next 1478 void DrawPing(void *canv) 1479 { 1480 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R0,??DataTable21 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 C81090E5 LDR R1,[R0, #+200] \ 0000000C 02002DE9 PUSH {R1} \ 00000010 C41090E5 LDR R1,[R0, #+196] \ 00000014 02002DE9 PUSH {R1} \ 00000018 E03190E5 LDR R3,[R0, #+480] \ 0000001C 5410A0E3 MOV R1,#+84 \ 00000020 B01E81E3 ORR R1,R1,#0xB00 \ 00000024 002081E0 ADD R2,R1,R0 \ 00000028 A41090E5 LDR R1,[R0, #+164] \ 0000002C A00090E5 LDR R0,[R0, #+160] \ 00000030 ........ _BLF PrintField,??PrintField??rA 1481 } \ 00000034 0380BDE8 POP {R0,R1,PC} ;; return 1482 1483 //////////////////////////////////////////tozhe dlja auto ping/////////////// 1484 1485 GBSTMR mytmr; 1486 GBSTMR mytmr2; 1487 volatile int vibra_count; 1488 #ifdef ELKA 1489 void SLI_Off(void); 1490 #endif 1491 void start_vibra2(void); 1492 1493 //////////////////////////reminder timer///////////////////////// 1494 \ In segment CODE, align 4, keep-with-next 1495 void Remind_Timer2() 1496 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 1497 if (total_unread) \ 00000004 ........ LDR R4,??DataTable21 ;; S_ICONS \ 00000008 A40294E5 LDR R0,[R4, #+676] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 1498 { 1499 vibra_count=Vibra_cc; \ 00000014 9C0094E5 LDR R0,[R4, #+156] \ 00000018 700284E5 STR R0,[R4, #+624] 1500 start_vibra2(); \ 0000001C ........ BL start_vibra2 1501 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ 00000020 ........ LDR R2,??DataTable10 ;; Remind_Timer2 \ 00000024 5010A0E3 MOV R1,#+80 \ 00000028 641D81E3 ORR R1,R1,#0x1900 \ 0000002C DC00A0E3 MOV R0,#+220 \ 00000030 D00E80E3 ORR R0,R0,#0xD00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 1502 } 1503 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return 1504 \ In segment CODE, align 4, keep-with-next 1505 void Reminder_timer() 1506 { 1507 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable10 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 3548 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 1508 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 S_ICONS + 3548 1509 //////////////////////////reminder timer///////////////////////// 1510 1511 //////////////////////////uptime////////////////////////// 1512 int Is_UPTIME_On; 1513 int xstatus_old; 1514 int minimum_xstatus; 1515 int maximum; 1516 \ In segment CODE, align 4, keep-with-next 1517 void xstatuse() 1518 { 1519 maximum++; \ xstatuse: \ 00000000 ........ LDR R0,??DataTable21 ;; S_ICONS \ 00000004 441290E5 LDR R1,[R0, #+580] 1520 if(maximum==60) \ 00000008 402290E5 LDR R2,[R0, #+576] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 1521 { 1522 // if(saver_on) reftes(); 1523 maximum=0; \ 00000014 0010A003 MOVEQ R1,#+0 1524 minimum_xstatus++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C 441280E5 STR R1,[R0, #+580] 1525 } 1526 if(minimum_xstatus==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??xstatuse_0 1527 { 1528 minimum_xstatus=0; 1529 xstatus_old++; \ 00000028 3C1290E5 LDR R1,[R0, #+572] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 3C1280E5 STR R1,[R0, #+572] \ ??xstatuse_0: \ 00000038 402280E5 STR R2,[R0, #+576] 1530 } 1531 } \ 0000003C 1EFF2FE1 BX LR ;; return 1532 1533 GBSTMR mytmr4; 1534 #ifdef NEWSGOLD 1535 GBSTMR tracktmr; 1536 int tracktimer; 1537 #endif 1538 1539 \ In segment CODE, align 4, keep-with-next 1540 void x_zstatus() 1541 { \ x_zstatus: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1542 if(connect_state==3) \ 00000004 7C509FE5 LDR R5,??x_zstatus_0 ;; x_zstatus \ 00000008 ........ LDR R6,??DataTable21 ;; S_ICONS \ 0000000C EC40A0E3 MOV R4,#+236 \ 00000010 800296E5 LDR R0,[R6, #+640] \ 00000014 D04E84E3 ORR R4,R4,#0xD00 \ 00000018 0070A0E3 MOV R7,#+0 \ 0000001C 030050E3 CMP R0,#+3 \ 00000020 0E00001A BNE ??x_zstatus_1 1543 { 1544 xstatuse(); \ 00000024 ........ BL xstatuse 1545 #ifdef NEWSGOLD 1546 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 00000028 480296E5 LDR R0,[R6, #+584] \ 0000002C 0A0050E3 CMP R0,#+10 \ 00000030 060000BA BLT ??x_zstatus_2 1547 { 1548 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000034 ........ LDR R2,??DataTable13 ;; GetTags \ 00000038 3810A0E3 MOV R1,#+56 \ 0000003C 401E81E3 ORR R1,R1,#0x400 \ 00000040 100084E3 ORR R0,R4,#0x10 \ 00000044 060080E0 ADD R0,R0,R6 \ 00000048 4D0000EF SWI +77 1549 tracktimer=0; \ 0000004C 487286E5 STR R7,[R6, #+584] 1550 } 1551 tracktimer++; \ ??x_zstatus_2: \ 00000050 480296E5 LDR R0,[R6, #+584] \ 00000054 010080E2 ADD R0,R0,#+1 \ 00000058 480286E5 STR R0,[R6, #+584] 1552 #endif 1553 GBS_StartTimerProc(&mytmr4, 216, x_zstatus); \ 0000005C 040000EA B ??x_zstatus_3 1554 } 1555 else 1556 { 1557 if(!Pause_Time) \ ??x_zstatus_1: \ 00000060 D80096E5 LDR R0,[R6, #+216] \ 00000064 000050E3 CMP R0,#+0 1558 { 1559 xstatus_old=0; \ 00000068 3C728605 STREQ R7,[R6, #+572] 1560 minimum_xstatus=0; \ 0000006C 40728605 STREQ R7,[R6, #+576] 1561 maximum=0; \ 00000070 44728605 STREQ R7,[R6, #+580] 1562 } 1563 GBS_StartTimerProc(&mytmr4, 216, x_zstatus); \ ??x_zstatus_3: \ 00000074 0520A0E1 MOV R2,R5 \ 00000078 D810A0E3 MOV R1,#+216 \ 0000007C 060084E0 ADD R0,R4,R6 \ 00000080 4D0000EF SWI +77 1564 } 1565 } \ 00000084 F080BDE8 POP {R4-R7,PC} ;; return \ ??x_zstatus_0: \ 00000088 ........ DC32 x_zstatus 1566 1567 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 1568 void DrawOnlineTime(void *canv) 1569 { 1570 if(connect_state==3) \ DrawOnlineTime: \ 00000000 6C109FE5 LDR R1,??DrawOnlineTime_0 ;; `?` \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R5,??DataTable21 ;; S_ICONS \ 0000000C 0C40A0E3 MOV R4,#+12 \ 00000010 800295E5 LDR R0,[R5, #+640] \ 00000014 E04E84E3 ORR R4,R4,#0xE00 \ 00000018 030050E3 CMP R0,#+3 \ 0000001C 0800001A BNE ??DrawOnlineTime_1 1571 { 1572 sprintf(onlineTime,"Online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); \ 00000020 440295E5 LDR R0,[R5, #+580] \ 00000024 081081E2 ADD R1,R1,#+8 \ 00000028 01002DE9 PUSH {R0} \ 0000002C 403295E5 LDR R3,[R5, #+576] \ 00000030 3C2295E5 LDR R2,[R5, #+572] \ 00000034 050084E0 ADD R0,R4,R5 \ 00000038 160000EF SWI +22 \ 0000003C 04D08DE2 ADD SP,SP,#+4 \ 00000040 010000EA B ??DrawOnlineTime_2 1573 } 1574 else 1575 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_1: \ 00000044 050084E0 ADD R0,R4,R5 \ 00000048 160000EF SWI +22 1576 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_2: \ 0000004C C80095E5 LDR R0,[R5, #+200] \ 00000050 052084E0 ADD R2,R4,R5 \ 00000054 01002DE9 PUSH {R0} \ 00000058 C40095E5 LDR R0,[R5, #+196] \ 0000005C 01002DE9 PUSH {R0} \ 00000060 E03195E5 LDR R3,[R5, #+480] \ 00000064 EC1095E5 LDR R1,[R5, #+236] \ 00000068 E80095E5 LDR R0,[R5, #+232] \ 0000006C ........ _BLF PrintField,??PrintField??rA 1577 } \ 00000070 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_0: \ 00000074 ........ DC32 `?` 1578 1579 //-------------------------- Вывод времени на идле -----------------// 1580 1581 \ In segment CODE, align 4, keep-with-next 1582 void DrawAutoMSG(void *canv) 1583 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 1584 char awayTime[64]; 1585 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable21 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 280294E5 LDR R0,[R4, #+552] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 E4009415 LDRNE R0,[R4, #+228] \ 00000018 00005013 CMPNE R0,#+0 \ 0000001C 0F00000A BEQ ??DrawAutoMSG_0 1586 { 1587 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000020 40109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 00000024 9C00A0E3 MOV R0,#+156 \ 00000028 D00E80E3 ORR R0,R0,#0xD00 \ 0000002C 042080E0 ADD R2,R0,R4 \ 00000030 0D00A0E1 MOV R0,SP \ 00000034 160000EF SWI +22 1588 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000038 C80094E5 LDR R0,[R4, #+200] \ 0000003C 01002DE9 PUSH {R0} \ 00000040 C40094E5 LDR R0,[R4, #+196] \ 00000044 01002DE9 PUSH {R0} \ 00000048 E03194E5 LDR R3,[R4, #+480] \ 0000004C E01094E5 LDR R1,[R4, #+224] \ 00000050 DC0094E5 LDR R0,[R4, #+220] \ 00000054 08208DE2 ADD R2,SP,#+8 \ 00000058 ........ _BLF PrintField,??PrintField??rA \ 0000005C 08D08DE2 ADD SP,SP,#+8 1589 } 1590 } \ ??DrawAutoMSG_0: \ 00000060 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000064 1080BDE8 POP {R4,PC} ;; return \ ??DrawAutoMSG_1: \ 00000068 ........ DC32 `?` 1591 1592 1593 //---------------------------- Input away msg ---------------------------// 1594 1595 //Вводим сообщение какое хотим,а не то что прописали в конфиге 1596 int input_awaymsg_id; 1597 1598 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 1599 void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 1600 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 1601 { \ input_awaymsg_onkey: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 1602 WSHDR *ws; 1603 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 00000008 ........ LDR R4,??DataTable21 ;; 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 0E005113 CMPNE R1,#+14 \ 00000024 1A00001A BNE ??input_awaymsg_onkey_0 1604 { 1605 EDITCONTROL ec; 1606 ExtractEditControl(data,2,&ec); \ 00000028 0D20A0E1 MOV R2,SP \ 0000002C 0210A0E3 MOV R1,#+2 \ 00000030 690100EF SWI +361 1607 ws=ec.pWS; \ 00000034 28709DE5 LDR R7,[SP, #+40] 1608 int i=0; 1609 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 1610 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 A003C1E5 STRB R0,[R1, #+928] \ 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 1611 awayMsg[i++]='0'; \ ??input_awaymsg_onkey_2: \ 00000078 040086E0 ADD R0,R6,R4 \ 0000007C 3010A0E3 MOV R1,#+48 \ 00000080 A013C0E5 STRB R1,[R0, #+928] 1612 1613 #ifdef kluchnik 1614 char *s; 1615 ExtractEditControl(data,4,&ec); 1616 ws=ec.pWS; 1617 s=malloc(ec.maxlen); 1618 for(i=0;iwsbody[0];i++) 1619 *(s+i)=char16to8(ws->wsbody[i+1]); 1620 *(s+i++)=0; 1621 strcat(awayMsg,s); 1622 #endif 1623 1624 UpdateCLheader(); \ 00000084 ........ BL UpdateCLheader 1625 GeneralFunc_flag1(input_awaymsg_id,1); \ 00000088 4C0294E5 LDR R0,[R4, #+588] \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 3D0100EF SWI +317 1626 // GeneralFuncF1(1); 1627 } 1628 1629 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 1630 { 1631 msg_away_timer=0; \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 240284E5 STR R0,[R4, #+548] 1632 away_m=0; \ 000000AC 280284E5 STR R0,[R4, #+552] 1633 UpdateCLheader(); \ 000000B0 ........ BL UpdateCLheader 1634 } 1635 return(0); \ ??input_awaymsg_onkey_4: \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 2CD08DE2 ADD SP,SP,#+44 \ 000000BC F080BDE8 POP {R4-R7,PC} ;; return 1636 } 1637 \ In segment CODE, align 4, keep-with-next 1638 void input_awaymsg_ghook(GUI *gui, int cmd) 1639 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 1640 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 1641 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 1642 { 1643 SetSoftKey(gui,&sk,SET_SOFT_KEY_N); \ 0000000C 2C109FE5 LDR R1,??input_awaymsg_ghook_1 ;; ??sk \ 00000010 0020A0E3 MOV R2,#+0 \ 00000014 680100EF SWI +360 \ 00000018 0080BDE8 POP {PC} 1644 } 1645 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 1646 { 1647 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 1648 } 1649 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 1650 { 1651 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 1652 } 1653 if(cmd==0x03){} 1654 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 1655 \ In segment CODE, align 4, keep-with-next 1656 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 1657 1658 SOFTKEY_DESC input_awaymsg_sk[]= 1659 { 1660 {0x0018,0x0000,(int)"Лев"}, 1661 {0x0001,0x0000,(int)"Прав"}, 1662 {0x003D,0x0000,(int)LGP_DOIT_PIC} 1663 }; 1664 1665 SOFTKEYSTAB input_awaymsg_skt= 1666 { 1667 input_awaymsg_sk,0 1668 }; 1669 1670 const INPUTDIA_DESC input_awaymsg_desc= 1671 { 1672 1, 1673 input_awaymsg_onkey, 1674 input_awaymsg_ghook, 1675 (void *)input_awaymsg_locret, 1676 0, 1677 &input_awaymsg_skt, 1678 {0,NULL,NULL,NULL}, 1679 FONT_SMALL, 1680 100, 1681 101, 1682 0, 1683 0x00000000, 1684 0x40000000 1685 }; 1686 \ In segment CODE, align 4, keep-with-next 1687 void InputAwayMsg() 1688 { \ InputAwayMsg: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 1689 WSHDR *wss=AllocWS(256); 1690 void *ma=malloc_adr(); 1691 void *eq=AllocEQueue(ma, mfree_adr()); 1692 EDITCONTROL ec; 1693 PrepareEditControl(&ec); 1694 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 3C519FE5 LDR R5,??InputAwayMsg_0+0x4 ;; input_awaymsg_desc \ 00000008 2CD04DE2 SUB SP,SP,#+44 1695 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 1696 AddEditControlToEditQend(eq,&ec,ma); 1697 1698 PrepareEditControl(&ec); 1699 CutWSTR(wss,0); 1700 ascii2ws(wss,awayMsg); \ 0000000C ........ LDR R6,??DataTable21 ;; 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 4C2085E2 ADD R2,R5,#+76 \ 00000044 3E1F8FE2 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 E81F86E2 ADD R1,R6,#+928 \ 00000094 0700A0E1 MOV R0,R7 \ 00000098 ........ _BLF ascii2ws,??ascii2ws??rA 1701 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 1702 AddEditControlToEditQend(eq,&ec,ma); \ 000000B8 0820A0E1 MOV R2,R8 \ 000000BC 08108DE2 ADD R1,SP,#+8 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 660100EF SWI +358 1703 #ifdef kluchnik 1704 PrepareEditControl(&ec); 1705 wsprintf(wss,"%t","Сообщение 2:\n"); 1706 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 1707 AddEditControlToEditQend(eq,&ec,ma); 1708 1709 ascii2ws(wss,"когда смогу отвечу:)"); 1710 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 1711 AddEditControlToEditQend(eq,&ec,ma); 1712 #endif 1713 patch_header(&input_awaymsg_hdr); \ 000000C8 0070A0E3 MOV R7,#+0 \ 000000CC 387085E5 STR R7,[R5, #+56] \ 000000D0 888100EF SWI +33160 \ 000000D4 010040E2 SUB R0,R0,#+1 \ 000000D8 BC03C5E1 STRH R0,[R5, #+60] \ 000000DC 8A8100EF SWI +33162 \ 000000E0 010040E2 SUB R0,R0,#+1 \ 000000E4 BE03C5E1 STRH R0,[R5, #+62] 1714 patch_input(&input_awaymsg_desc); \ 000000E8 B871C5E1 STRH R7,[R5, #+24] \ 000000EC 8A8100EF SWI +33162 \ 000000F0 010080E2 ADD R0,R0,#+1 \ 000000F4 BA01C5E1 STRH R0,[R5, #+26] \ 000000F8 888100EF SWI +33160 \ 000000FC 010040E2 SUB R0,R0,#+1 \ 00000100 BC01C5E1 STRH R0,[R5, #+28] \ 00000104 898100EF SWI +33161 \ 00000108 0070A0E1 MOV R7,R0 \ 0000010C 8B8100EF SWI +33163 \ 00000110 000047E0 SUB R0,R7,R0 \ 00000114 010040E2 SUB R0,R0,#+1 \ 00000118 BE01C5E1 STRH R0,[R5, #+30] 1715 1716 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 0000011C 0000A0E3 MOV R0,#+0 \ 00000120 01002DE9 PUSH {R0} \ 00000124 0130A0E3 MOV R3,#+1 \ 00000128 0420A0E1 MOV R2,R4 \ 0000012C 381085E2 ADD R1,R5,#+56 \ 00000130 0500A0E1 MOV R0,R5 \ 00000134 670100EF SWI +359 \ 00000138 4C0286E5 STR R0,[R6, #+588] 1717 } \ 0000013C 38D08DE2 ADD SP,SP,#+56 \ 00000140 F081BDE8 POP {R4-R8,PC} ;; return \ ??InputAwayMsg_0: \ 00000144 25740000 DC8 "%t",+0 \ 00000148 ........ DC32 input_awaymsg_desc 1718 1719 1720 //////////////////////////uptime////////////////////////// 1721 #ifdef ELKA 1722 void SLI_On() 1723 { 1724 if(Is_SLI_On) 1725 SLI_SetState(1); 1726 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_Off); 1727 } 1728 1729 void SLI_Off() 1730 { 1731 SLI_SetState(2); 1732 if(total_unread) 1733 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 1734 else 1735 SLI_SetState(0); 1736 } 1737 1738 void SLI_check() 1739 { 1740 if (total_unread) 1741 SLI_On(); 1742 } 1743 1744 void SLI_Timer() 1745 { 1746 GBS_StartTimerProc(&mytmr, 262, SLI_check); //262*SLI_time 1747 } 1748 #endif 1749 \ In segment CODE, align 4, keep-with-next 1750 void setup_ICONS(void) 1751 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1752 int i=0; \ 00000004 ........ LDR R5,??DataTable19 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 1753 do 1754 { 1755 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 0700001A BNE ??setup_ICONS_1 \ 00000018 28009FE5 LDR R0,??setup_ICONS_2 ;; icons_names \ 0000001C 5C10A0E3 MOV R1,#+92 \ 00000020 042190E7 LDR R2,[R0, +R4, LSL #+2] \ 00000024 0400A0E3 MOV R0,#+4 \ 00000028 900E80E3 ORR R0,R0,#0x900 \ 0000002C 050080E0 ADD R0,R0,R5 \ 00000030 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 00000034 040185E7 STR R0,[R5, +R4, LSL #+2] 1756 i++; \ ??setup_ICONS_1: \ 00000038 014084E2 ADD R4,R4,#+1 1757 } 1758 while(i>2,stop_vibra); \ 00000040 3610A0E3 MOV R1,#+54 \ 00000044 000000EA B ??start_vibra_2 1970 else 1971 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 4D0000EF SWI +77 1972 } 1973 } \ 00000054 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000058 ........ DC32 stop_vibra 1974 \ In segment CODE, align 4, keep-with-next 1975 void stop_vibra(void) 1976 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1977 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1978 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable42 ;; S_ICONS \ 00000010 701290E5 LDR R1,[R0, #+624] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 701280E5 STR R1,[R0, #+624] \ 0000001C 0080BD08 POPEQ {PC} 1979 { 1980 if(VIBR_TYPE) \ 00000020 281190E5 LDR R1,[R0, #+296] \ 00000024 24209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000028 9C30A0E3 MOV R3,#+156 \ 0000002C F03E83E3 ORR R3,R3,#0xF00 \ 00000030 000051E3 CMP R1,#+0 \ 00000034 0100000A BEQ ??stop_vibra_1 1981 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000038 0610A0E3 MOV R1,#+6 \ 0000003C 000000EA B ??stop_vibra_2 1982 else 1983 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000040 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 00000044 000083E0 ADD R0,R3,R0 \ 00000048 4D0000EF SWI +77 1984 } 1985 } \ 0000004C 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000050 ........ DC32 start_vibra 1986 \ In segment CODE, align 4, keep-with-next 1987 void start_vibra2(void) 1988 { \ start_vibra2: \ 00000000 10402DE9 PUSH {R4,LR} 1989 void stop_vibra2(void); 1990 1991 SetVibration(vibraPower); \ 00000004 ........ LDR R4,??DataTable42 ;; S_ICONS \ 00000008 480194E5 LDR R0,[R4, #+328] \ 0000000C 7C0000EF SWI +124 1992 if(VIBR_TYPE) \ 00000010 281194E5 LDR R1,[R4, #+296] \ 00000014 1C209FE5 LDR R2,??start_vibra2_0 ;; stop_vibra2 \ 00000018 9C00A0E3 MOV R0,#+156 \ 0000001C F00E80E3 ORR R0,R0,#0xF00 \ 00000020 000051E3 CMP R1,#+0 1993 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1994 else 1995 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 1996 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra2_0: \ 00000038 ........ DC32 stop_vibra2 1997 \ In segment CODE, align 4, keep-with-next 1998 void stop_vibra2(void) 1999 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 2000 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 2001 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable42 ;; S_ICONS \ 00000010 701290E5 LDR R1,[R0, #+624] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 701280E5 STR R1,[R0, #+624] \ 0000001C 0080BD08 POPEQ {PC} 2002 { 2003 if(VIBR_TYPE) \ 00000020 281190E5 LDR R1,[R0, #+296] \ 00000024 24209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000028 9C30A0E3 MOV R3,#+156 \ 0000002C F03E83E3 ORR R3,R3,#0xF00 \ 00000030 000051E3 CMP R1,#+0 \ 00000034 0100000A BEQ ??stop_vibra2_1 2004 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000038 0610A0E3 MOV R1,#+6 \ 0000003C 000000EA B ??stop_vibra2_2 2005 else 2006 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000040 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 00000044 000083E0 ADD R0,R3,R0 \ 00000048 4D0000EF SWI +77 2007 } 2008 } \ 0000004C 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000050 ........ DC32 start_vibra2 2009 \ In segment CODE, align 4, keep-with-next 2010 void ChangeVibra(void) 2011 { 2012 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable42 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 581290E5 LDR R1,[R0, #+600] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000040 0520A0E1 MOV R2,R5 \ 00000044 081087E2 ADD R1,R7,#+8 \ 00000048 0600A0E1 MOV R0,R6 \ 0000004C 160000EF SWI +22 2054 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; \ 00000050 0050E0E3 MVN R5,#+0 \ 00000054 0D20A0E1 MOV R2,SP \ 00000058 04108DE2 ADD R1,SP,#+4 \ 0000005C 2C008DE2 ADD R0,SP,#+44 \ 00000060 840000EF SWI +132 \ 00000064 050050E1 CMP R0,R5 \ 00000068 0A00000A BEQ ??LoadTemplates_1 2055 if ((fsize=stat.size)<=0) goto L1; \ 0000006C 08809DE5 LDR R8,[SP, #+8] \ 00000070 010058E3 CMP R8,#+1 \ 00000074 070000BA BLT ??LoadTemplates_1 2056 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) \ 00000078 0D30A0E1 MOV R3,SP \ 0000007C 8020A0E3 MOV R2,#+128 \ 00000080 801CA0E3 MOV R1,#+32768 \ 00000084 2C008DE2 ADD R0,SP,#+44 \ 00000088 0A0000EF SWI +10 \ 0000008C 0090A0E1 MOV R9,R0 \ 00000090 050059E1 CMP R9,R5 \ 00000094 1400001A BNE ??LoadTemplates_2 2057 { 2058 L1: 2059 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 00000098 0710A0E1 MOV R1,R7 \ 0000009C 0600A0E1 MOV R0,R6 \ 000000A0 1A0000EF SWI +26 2060 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 000000A4 0D20A0E1 MOV R2,SP \ 000000A8 04108DE2 ADD R1,SP,#+4 \ 000000AC 2C008DE2 ADD R0,SP,#+44 \ 000000B0 840000EF SWI +132 \ 000000B4 050050E1 CMP R0,R5 \ 000000B8 0200001A BNE ??LoadTemplates_3 \ ??LoadTemplates_4: \ 000000BC 0000A0E3 MOV R0,#+0 \ ??LoadTemplates_5: \ 000000C0 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000C4 F087BDE8 POP {R4-R10,PC} ;; return 2061 if ((fsize=stat.size)<=0) return 0; \ ??LoadTemplates_3: \ 000000C8 08809DE5 LDR R8,[SP, #+8] \ 000000CC 010058E3 CMP R8,#+1 \ 000000D0 F9FFFFBA BLT ??LoadTemplates_4 2062 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 000000D4 0D30A0E1 MOV R3,SP \ 000000D8 8020A0E3 MOV R2,#+128 \ 000000DC 801CA0E3 MOV R1,#+32768 \ 000000E0 2C008DE2 ADD R0,SP,#+44 \ 000000E4 0A0000EF SWI +10 \ 000000E8 0090A0E1 MOV R9,R0 2063 } 2064 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000EC 050059E1 CMP R9,R5 \ 000000F0 F1FFFF0A BEQ ??LoadTemplates_4 2065 p=templates_chars=malloc(fsize+1); \ 000000F4 010088E2 ADD R0,R8,#+1 \ 000000F8 140000EF SWI +20 \ 000000FC 740284E5 STR R0,[R4, #+628] \ 00000100 0060A0E1 MOV R6,R0 2066 p[fread(f,p,fsize,&ul)]=0; \ 00000104 0050A0E3 MOV R5,#+0 \ 00000108 0D30A0E1 MOV R3,SP \ 0000010C 0820A0E1 MOV R2,R8 \ 00000110 0610A0E1 MOV R1,R6 \ 00000114 0900A0E1 MOV R0,R9 \ 00000118 0B0000EF SWI +11 \ 0000011C 0650C0E7 STRB R5,[R0, +R6] 2067 fclose(f,&ul); \ 00000120 0D10A0E1 MOV R1,SP \ 00000124 0900A0E1 MOV R0,R9 \ 00000128 0D0000EF SWI +13 2068 i=0; \ 0000012C 0070A0E3 MOV R7,#+0 2069 pp=p; \ 00000130 0680A0E1 MOV R8,R6 \ 00000134 020000EA B ??LoadTemplates_6 2070 for(;;) 2071 { 2072 c=*p; 2073 if (c<32) 2074 { 2075 if (pp&&(pp!=p)) 2076 { 2077 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 2078 templates_lines[i++]=pp; 2079 } 2080 pp=NULL; 2081 if (!c) break; 2082 *p=0; 2083 } 2084 else 2085 { 2086 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000138 000058E3 CMP R8,#+0 \ 0000013C 0680A001 MOVEQ R8,R6 2087 } 2088 p++; \ ??LoadTemplates_8: \ 00000140 016086E2 ADD R6,R6,#+1 \ ??LoadTemplates_6: \ 00000144 0090D6E5 LDRB R9,[R6, #+0] \ 00000148 200059E3 CMP R9,#+32 \ 0000014C F9FFFFAA BGE ??LoadTemplates_7 \ 00000150 000058E3 CMP R8,#+0 \ 00000154 06005811 CMPNE R8,R6 \ 00000158 0600000A BEQ ??LoadTemplates_9 \ 0000015C 780294E5 LDR R0,[R4, #+632] \ 00000160 01A087E2 ADD R10,R7,#+1 \ 00000164 0A11A0E1 LSL R1,R10,#+2 \ 00000168 BA0000EF SWI +186 \ 0000016C 780284E5 STR R0,[R4, #+632] \ 00000170 078180E7 STR R8,[R0, +R7, LSL #+2] \ 00000174 0A70A0E1 MOV R7,R10 \ ??LoadTemplates_9: \ 00000178 0080A0E3 MOV R8,#+0 \ 0000017C 000059E3 CMP R9,#+0 2089 } 2090 return i; \ 00000180 0700A001 MOVEQ R0,R7 \ 00000184 CDFFFF0A BEQ ??LoadTemplates_5 \ 00000188 0050C6E5 STRB R5,[R6, #+0] \ 0000018C EBFFFFEA B ??LoadTemplates_8 \ ??LoadTemplates_0: \ 00000190 ........ DC32 `?` 2091 } 2092 2093 2094 //=================================================================== 2095 2096 typedef struct 2097 { 2098 CSM_RAM csm; 2099 int gui_id; 2100 }MAIN_CSM; 2101 2102 typedef struct 2103 { 2104 GUI gui; 2105 WSHDR *ws1; 2106 WSHDR *ws2; 2107 int i1; 2108 }MAIN_GUI; 2109 2110 2111 2112 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 2113 \ In segment DATA_Z, align 4, align-sorted 2114 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 2115 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 2116 2117 int connect_state=0; 2118 2119 int sock=-1; 2120 2121 volatile unsigned long TOTALRECEIVED; 2122 volatile unsigned long TOTALSENDED; 2123 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 2124 volatile unsigned long ALLTOTALSENDED; 2125 2126 volatile int sendq_l=0; //Длинна очереди для send 2127 volatile void *sendq_p=NULL; //указатель очереди 2128 2129 volatile int is_gprs_online=1; 2130 2131 GBSTMR reconnect_tmr; 2132 2133 extern void kill_data(void *p,void (*func_p)(void *)); 2134 \ In segment CODE, align 4, keep-with-next 2135 void ElfKiller(void) 2136 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 2137 // if(SLI_TYPE) 2138 // GBS_StopTimer(&mytmr); 2139 // if(Is_Double_Vibra_On) 2140 // GBS_StopTimer(&mytmr2); 2141 // GBS_StopTimer(&mytmr3); 2142 // GBS_StopTimer(&mytmr4); 2143 // DoChangeWall2(); 2144 PrintLibFree(); \ 00000004 ........ _BLF PrintLibFree,??PrintLibFree??rA 2145 extern void *ELF_BEGIN; 2146 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 2147 } 2148 2149 int total_unread; //2058 - tam tak /windes 2150 2151 volatile CLIST *cltop; 2152 2153 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 2154 2155 volatile int contactlist_menu_id; 2156 2157 GBSTMR tmr_active; 2158 2159 volatile int edchat_id; 2160 2161 //Применяется для добавления сообщений 2162 //CLIST *edcontact; 2163 //void *edgui_data; 2164 2165 static int prev_clmenu_itemcount; 2166 2167 char clm_hdr_text[64]; 2168 static const char def_clm_hdr_text[] = LG_CLTITLE; 2169 static const char key_clm_hdr_text[] = LG_CLT9INP; 2170 2171 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 2172 static const int menusoftkeys[] = {0,1,2}; 2173 static const SOFTKEY_DESC menu_sk[] = 2174 { 2175 {0x0018, 0x0000, (int)LG_SELECT}, 2176 {0x0001, 0x0000, (int)LG_CLOSE}, 2177 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2178 }; 2179 2180 char clmenu_sk_r[16]; 2181 static const char def_clmenu_sk_r[] = LG_CLOSE; 2182 static const char key_clmenu_sk_r[] = LG_CLEAR; 2183 2184 static const SOFTKEY_DESC clmenu_sk[]= 2185 { 2186 {0x0018, 0x0000, (int)LG_OPTIONS}, 2187 {0x0001, 0x0000, (int)clmenu_sk_r}, 2188 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2189 }; 2190 2191 const SOFTKEYSTAB menu_skt = 2192 { 2193 menu_sk, 0 2194 }; 2195 2196 static const SOFTKEYSTAB clmenu_skt = 2197 { 2198 clmenu_sk, 0 2199 }; 2200 2201 void contactlist_menu_ghook(void *data, int cmd); 2202 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 2203 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 2204 2205 #ifdef USE_MLMENU 2206 static const ML_MENU_DESC contactlist_menu= 2207 { 2208 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 2209 menusoftkeys, 2210 &clmenu_skt, 2211 0x11, //+0x400 2212 contactlist_menu_iconhndl, 2213 NULL, //Items 2214 NULL, //Procs 2215 0, //n 2216 1 //Добавочных строк 2217 }; 2218 #else 2219 static const MENU_DESC contactlist_menu= 2220 { 2221 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 2222 menusoftkeys, 2223 &clmenu_skt, 2224 0x11, //+0x400 2225 contactlist_menu_iconhndl, 2226 NULL, //Items 2227 NULL, //Procs 2228 0 //n 2229 }; 2230 #endif 2231 2232 //GBSTMR tmr_ping; 2233 int tenseconds_to_ping; 2234 \ In segment CODE, align 4, keep-with-next 2235 LOGQ *NewLOGQ(const char *s) 2236 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2237 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 2238 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 2239 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 2240 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 2241 } 2242 \ In segment CODE, align 4, keep-with-next 2243 LOGQ *LastLOGQ(LOGQ **pp) 2244 { 2245 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 2246 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 2247 { 2248 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 2249 } 2250 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 2251 } 2252 2253 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 2254 void FreeLOGQ(LOGQ **pp) 2255 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 2256 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 2257 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 2258 while(p) 2259 { 2260 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 2261 mfree(p); \ 00000020 150000EF SWI +21 2262 p=np; \ 00000024 0400B0E1 MOVS R0,R4 2263 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 2264 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 2265 2266 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 2267 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 2268 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 2269 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 2270 LOGQ *qp; 2271 while(qp=q->next) 2272 { 2273 if (qp==p) 2274 { 2275 q->next=p->next; 2276 break; 2277 } 2278 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] 2279 } 2280 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 2281 } \ 00000030 0080BDE8 POP {PC} ;; return 2282 2283 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 2284 int AddLOGQ(LOGQ **queue, LOGQ *p) 2285 { 2286 LOGQ *q=(LOGQ *)queue; 2287 LOGQ *qp; 2288 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 2289 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 2290 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 2291 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 2292 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 2293 } 2294 \ In segment CODE, align 4, keep-with-next 2295 char *GetLastXTextLOGQ(CLIST *t) 2296 { 2297 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 701090E5 LDR R1,[R0, #+112] 2298 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 2299 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 2300 while(p->next) 2301 { 2302 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 2303 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 2304 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 2305 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 2306 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 2307 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 2308 return s; \ 00000044 1EFF2FE1 BX LR ;; return 2309 } 2310 \ In segment CODE, align 4, keep-with-next 2311 int GetIconIndex(CLIST *t) 2312 { 2313 unsigned short s; 2314 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 2315 { 2316 s=t->state; 2317 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 2318 if (t->isunread) \ 0000001C 600090E5 LDR R0,[R0, #+96] \ 00000020 000050E3 CMP R0,#+0 2319 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 2320 else 2321 { 2322 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 2323 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 2324 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 2325 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 2326 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 2327 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 2328 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 2329 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 2330 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 2331 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 2332 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 2333 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 2334 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 2335 } 2336 } 2337 else 2338 { 2339 return(IS_UNKNOWN); 2340 } 2341 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 2342 } 2343 \ In segment CODE, align 4, keep-with-next 2344 LOGQ *FindContactLOGQByAck(TPKT *p) 2345 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2346 CLIST *t; 2347 LockSched(); \ 00000008 460100EF SWI +326 2348 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 2349 UnlockSched(); \ 00000018 470100EF SWI +327 2350 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 2351 LOGQ *q; 2352 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 2353 LockSched(); \ 0000002C 460100EF SWI +326 2354 q=t->log; \ 00000030 705095E5 LDR R5,[R5, #+112] \ 00000034 000000EA B ??FindContactLOGQByAck_0 2355 while(q) 2356 { 2357 if (q->ID==id) break; 2358 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 2359 } 2360 UnlockSched(); \ 0000004C 470100EF SWI +327 2361 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 2362 } 2363 2364 GBSTMR statusTmr; 2365 2366 char ContactT9Key[32]; 2367 int kopa_online; 2368 int kopa_kontaktu; 2369 char status[64]; \ In segment CODE, align 4, keep-with-next 2370 void DrawStatusBar() 2371 { \ DrawStatusBar: \ 00000000 10402DE9 PUSH {R4,LR} 2372 // PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 2373 // if(TIME_OR_MSG==4) 2374 if(contactlist_menu_id) \ 00000004 ........ LDR R4,??DataTable42 ;; S_ICONS \ 00000008 B00294E5 LDR R0,[R4, #+688] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1200000A BEQ ??DrawStatusBar_0 2375 { 2376 PrintText(33,YDISP+2,status,0,1,1,2,0,0,ScreenW()-20); \ 00000014 888100EF SWI +33160 \ 00000018 140040E2 SUB R0,R0,#+20 \ 0000001C 01002DE9 PUSH {R0} \ 00000020 0030A0E3 MOV R3,#+0 \ 00000024 0210A0E3 MOV R1,#+2 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 01002DE9 PUSH {R0} \ 00000030 01002DE9 PUSH {R0} \ 00000034 0200A0E3 MOV R0,#+2 \ 00000038 01002DE9 PUSH {R0} \ 0000003C 0100A0E3 MOV R0,#+1 \ 00000040 01002DE9 PUSH {R0} \ 00000044 01002DE9 PUSH {R0} \ 00000048 2C00A0E3 MOV R0,#+44 \ 0000004C 400D80E3 ORR R0,R0,#0x1000 \ 00000050 042080E0 ADD R2,R0,R4 \ 00000054 2100A0E3 MOV R0,#+33 \ 00000058 ........ _BLF PrintText,??PrintText??rA \ 0000005C 18D08DE2 ADD SP,SP,#+24 2377 } 2378 GBS_StartTimerProc(&statusTmr,120,DrawStatusBar); \ ??DrawStatusBar_0: \ 00000060 14209FE5 LDR R2,??DrawStatusBar_1 ;; DrawStatusBar \ 00000064 7810A0E3 MOV R1,#+120 \ 00000068 1C00A0E3 MOV R0,#+28 \ 0000006C 400D80E3 ORR R0,R0,#0x1000 \ 00000070 040080E0 ADD R0,R0,R4 \ 00000074 4D0000EF SWI +77 2379 } \ 00000078 1080BDE8 POP {R4,PC} ;; return \ ??DrawStatusBar_1: \ 0000007C ........ DC32 DrawStatusBar 2380 2381 #define nmeth 24 2382 2383 void * gui_methods2[nmeth]; 2384 void * old_redraw; 2385 2386 typedef void (*tredraw)(void *data); 2387 \ In segment CODE, align 4, keep-with-next 2388 void new_redraw(void *data) 2389 { \ new_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 2390 ((tredraw)old_redraw)(data); \ 00000004 ........ LDR R4,??DataTable42 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 281394E5 LDR R1,[R4, #+808] \ 00000010 31FF2FE1 BLX R1 2391 char s[64]; 2392 sprintf(s,"%s\\HEAD.png",ICON_PATH); \ 00000014 6C109FE5 LDR R1,??new_redraw_0 ;; `?` \ 00000018 0400A0E3 MOV R0,#+4 \ 0000001C 900E80E3 ORR R0,R0,#0x900 \ 00000020 042080E0 ADD R2,R0,R4 \ 00000024 0D00A0E1 MOV R0,SP \ 00000028 160000EF SWI +22 2393 int x=GetImgWidth((int)s); \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 220000EF SWI +34 \ 00000034 0050A0E1 MOV R5,R0 2394 PrintText(x+7,YDISP+2,status,0,1,1,2,0,0,ScreenW()-20); \ 00000038 888100EF SWI +33160 \ 0000003C 140040E2 SUB R0,R0,#+20 \ 00000040 01002DE9 PUSH {R0} \ 00000044 0030A0E3 MOV R3,#+0 \ 00000048 0210A0E3 MOV R1,#+2 \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 01002DE9 PUSH {R0} \ 00000054 01002DE9 PUSH {R0} \ 00000058 0200A0E3 MOV R0,#+2 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 01002DE9 PUSH {R0} \ 00000068 01002DE9 PUSH {R0} \ 0000006C 2C00A0E3 MOV R0,#+44 \ 00000070 400D80E3 ORR R0,R0,#0x1000 \ 00000074 042080E0 ADD R2,R0,R4 \ 00000078 070085E2 ADD R0,R5,#+7 \ 0000007C ........ _BLF PrintText,??PrintText??rA 2395 } \ 00000080 58D08DE2 ADD SP,SP,#+88 \ 00000084 3080BDE8 POP {R4,R5,PC} ;; return \ ??new_redraw_0: \ 00000088 ........ DC32 `?` 2396 \ In segment CODE, align 4, keep-with-next 2397 void UpdateCLheader(void) 2398 { \ UpdateCLheader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2399 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R4,??DataTable42 ;; S_ICONS \ 00000008 98729FE5 LDR R7,??UpdateCLheader_1+0x14 ;; key_clmenu_sk_r \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 0C10A0E3 MOV R1,#+12 \ 00000014 401D81E3 ORR R1,R1,#0x1000 \ 00000018 041081E0 ADD R1,R1,R4 \ 0000001C 08108DE5 STR R1,[SP, #+8] \ 00000020 2C00A0E3 MOV R0,#+44 \ 00000024 400D80E3 ORR R0,R0,#0x1000 \ 00000028 045080E0 ADD R5,R0,R4 \ 0000002C 606040E2 SUB R6,R0,#+96 \ 00000030 4E8EA0E3 MOV R8,#+1248 \ 00000034 040088E0 ADD R0,R8,R4 \ 00000038 1B0000EF SWI +27 \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 0C00000A BEQ ??UpdateCLheader_2 2400 { 2401 zeromem(status,64); \ 00000044 4010A0E3 MOV R1,#+64 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 1D0100EF SWI +285 2402 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000050 601087E2 ADD R1,R7,#+96 \ 00000054 040086E0 ADD R0,R6,R4 \ 00000058 1A0000EF SWI +26 2403 strcat(clm_hdr_text,ContactT9Key); \ 0000005C 041088E0 ADD R1,R8,R4 \ 00000060 040086E0 ADD R0,R6,R4 \ 00000064 170000EF SWI +23 2404 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000068 08009DE5 LDR R0,[SP, #+8] \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 1A0000EF SWI +26 \ 00000074 F78FBDE8 POP {R0-R2,R4-R11,PC} 2405 } \ ??UpdateCLheader_2: \ 00000078 F80094E5 LDR R0,[R4, #+248] \ 0000007C 848F8FE2 ADR R8,??UpdateCLheader_1 ;; "[S]" \ 00000080 849F8FE2 ADR R9,??UpdateCLheader_1+0x4 ;; "[V]" \ 00000084 84AF8FE2 ADR R10,??UpdateCLheader_1+0x8 ;; "[I]" \ 00000088 84BF8FE2 ADR R11,??UpdateCLheader_1+0xC ;; "[A]" \ 0000008C 040050E3 CMP R0,#+4 \ 00000090 7B00008A BHI ??UpdateCLheader_3 \ 00000094 011F8FE2 ADR R1,??UpdateCLheader_0 \ 00000098 0010D1E7 LDRB R1,[R1, R0] \ 0000009C 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??UpdateCLheader_0: \ 000000A0 010D1319 DC8 +1,+13,+19,+25 \ 000000A4 43000000 DC8 +67,+0,+0,+0 2406 else 2407 { 2408 switch(TIME_OR_MSG) 2409 { 2410 case 0: 2411 { 2412 TTime the; 2413 GetDateTime(NULL,&the); \ ??UpdateCLheader_4: \ 000000A8 0D10A0E1 MOV R1,SP \ 000000AC 0000A0E3 MOV R0,#+0 \ 000000B0 B40000EF SWI +180 2414 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ 000000B4 0100DDE5 LDRB R0,[SP, #+1] \ 000000B8 542087E2 ADD R2,R7,#+84 \ 000000BC 441087E2 ADD R1,R7,#+68 \ 000000C0 01002DE9 PUSH {R0} \ 000000C4 0430DDE5 LDRB R3,[SP, #+4] \ ??UpdateCLheader_5: \ 000000C8 040086E0 ADD R0,R6,R4 \ 000000CC 160000EF SWI +22 \ 000000D0 04D08DE2 ADD SP,SP,#+4 \ 000000D4 6A0000EA B ??UpdateCLheader_3 2415 } 2416 break; 2417 case 1: 2418 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_6: \ 000000D8 080294E5 LDR R0,[R4, #+520] \ 000000DC 542087E2 ADD R2,R7,#+84 \ 000000E0 01002DE9 PUSH {R0} \ 000000E4 A43294E5 LDR R3,[R4, #+676] \ 000000E8 381087E2 ADD R1,R7,#+56 \ 000000EC F5FFFFEA B ??UpdateCLheader_5 2419 break; 2420 case 2: 2421 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); \ ??UpdateCLheader_7: \ 000000F0 C00294E5 LDR R0,[R4, #+704] \ 000000F4 542087E2 ADD R2,R7,#+84 \ 000000F8 01002DE9 PUSH {R0} \ 000000FC C43294E5 LDR R3,[R4, #+708] \ 00000100 381087E2 ADD R1,R7,#+56 \ 00000104 EFFFFFEA B ??UpdateCLheader_5 2422 break; 2423 case 3: 2424 { 2425 void Get_Online_total(); 2426 Get_Online_total(); \ ??UpdateCLheader_8: \ 00000108 ........ BL Get_Online_total 2427 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] ",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 0000010C 080294E5 LDR R0,[R4, #+520] \ 00000110 241087E2 ADD R1,R7,#+36 \ 00000114 01002DE9 PUSH {R0} \ 00000118 A40294E5 LDR R0,[R4, #+676] \ 0000011C 01002DE9 PUSH {R0} \ 00000120 C03294E5 LDR R3,[R4, #+704] \ 00000124 C42294E5 LDR R2,[R4, #+708] \ 00000128 040086E0 ADD R0,R6,R4 \ 0000012C 160000EF SWI +22 2428 if(away_m) strcat(clm_hdr_text,"[A]"); \ 00000130 280294E5 LDR R0,[R4, #+552] \ 00000134 08D08DE2 ADD SP,SP,#+8 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 0200000A BEQ ??UpdateCLheader_9 \ 00000140 0B10A0E1 MOV R1,R11 \ 00000144 040086E0 ADD R0,R6,R4 \ 00000148 170000EF SWI +23 2429 if(CurrentPrivateStatus==1) strcat(clm_hdr_text,"[I]"); \ ??UpdateCLheader_9: \ 0000014C 6C0294E5 LDR R0,[R4, #+620] \ 00000150 010050E3 CMP R0,#+1 \ 00000154 0200001A BNE ??UpdateCLheader_10 \ 00000158 0A10A0E1 MOV R1,R10 \ 0000015C 040086E0 ADD R0,R6,R4 \ 00000160 170000EF SWI +23 2430 if(Is_Vibra_Enabled) strcat(clm_hdr_text,"[V]"); \ ??UpdateCLheader_10: \ 00000164 580294E5 LDR R0,[R4, #+600] \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 0200000A BEQ ??UpdateCLheader_11 \ 00000170 0910A0E1 MOV R1,R9 \ 00000174 040086E0 ADD R0,R6,R4 \ 00000178 170000EF SWI +23 2431 if(Is_Sounds_Enabled) strcat(clm_hdr_text,"[S]"); \ ??UpdateCLheader_11: \ 0000017C 5C0294E5 LDR R0,[R4, #+604] \ 00000180 000050E3 CMP R0,#+0 \ 00000184 0200000A BEQ ??UpdateCLheader_12 \ 00000188 0810A0E1 MOV R1,R8 \ 0000018C 040086E0 ADD R0,R6,R4 \ 00000190 170000EF SWI +23 2432 if(Is_Double_Vibra_On) strcat(clm_hdr_text,"[R]"); \ ??UpdateCLheader_12: \ 00000194 040294E5 LDR R0,[R4, #+516] \ 00000198 000050E3 CMP R0,#+0 \ 0000019C 3800000A BEQ ??UpdateCLheader_3 \ 000001A0 3F1F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 000001A4 040086E0 ADD R0,R6,R4 \ 000001A8 170000EF SWI +23 \ 000001AC 340000EA B ??UpdateCLheader_3 2433 } 2434 break; 2435 case 4: 2436 { 2437 void Get_Online_total(); 2438 Get_Online_total(); \ ??UpdateCLheader_13: \ 000001B0 ........ BL Get_Online_total 2439 TTime the; 2440 GetDateTime(NULL,&the); \ 000001B4 0D10A0E1 MOV R1,SP \ 000001B8 0000A0E3 MOV R0,#+0 \ 000001BC B40000EF SWI +180 2441 #ifdef kluchnik 2442 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 2443 sprintf(status, "[Rx:%db/Tx:%db/Queue:%db]\n[%02d:%02d] [%d/%d] [%d/%d] ",RX,TX,sendq_l, 2444 the.hour, the.min, 2445 kopa_kontaktu, kopa_online, 2446 total_unread,total_unread2); 2447 #else 2448 sprintf(status, "%s\n[%02d:%02d] [%d/%d] [%d/%d] ",def_clm_hdr_text, 2449 the.hour, the.min, 2450 kopa_kontaktu, kopa_online, 2451 total_unread,total_unread2); \ 000001C0 080294E5 LDR R0,[R4, #+520] \ 000001C4 542087E2 ADD R2,R7,#+84 \ 000001C8 01002DE9 PUSH {R0} \ 000001CC A40294E5 LDR R0,[R4, #+676] \ 000001D0 041087E2 ADD R1,R7,#+4 \ 000001D4 01002DE9 PUSH {R0} \ 000001D8 C00294E5 LDR R0,[R4, #+704] \ 000001DC 01002DE9 PUSH {R0} \ 000001E0 C40294E5 LDR R0,[R4, #+708] \ 000001E4 01002DE9 PUSH {R0} \ 000001E8 1100DDE5 LDRB R0,[SP, #+17] \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 1430DDE5 LDRB R3,[SP, #+20] \ 000001F4 0500A0E1 MOV R0,R5 \ 000001F8 160000EF SWI +22 2452 #endif 2453 if(away_m) strcat(status,"[A]"); \ 000001FC 280294E5 LDR R0,[R4, #+552] \ 00000200 14D08DE2 ADD SP,SP,#+20 \ 00000204 000050E3 CMP R0,#+0 \ 00000208 0200000A BEQ ??UpdateCLheader_14 \ 0000020C 0B10A0E1 MOV R1,R11 \ 00000210 0500A0E1 MOV R0,R5 \ 00000214 170000EF SWI +23 2454 if(CurrentPrivateStatus==1) strcat(status,"[I]"); \ ??UpdateCLheader_14: \ 00000218 6C0294E5 LDR R0,[R4, #+620] \ 0000021C 010050E3 CMP R0,#+1 \ 00000220 0200001A BNE ??UpdateCLheader_15 \ 00000224 0A10A0E1 MOV R1,R10 \ 00000228 0500A0E1 MOV R0,R5 \ 0000022C 170000EF SWI +23 2455 if(Is_Vibra_Enabled) strcat(status,"[V]"); \ ??UpdateCLheader_15: \ 00000230 580294E5 LDR R0,[R4, #+600] \ 00000234 000050E3 CMP R0,#+0 \ 00000238 0200000A BEQ ??UpdateCLheader_16 \ 0000023C 0910A0E1 MOV R1,R9 \ 00000240 0500A0E1 MOV R0,R5 \ 00000244 170000EF SWI +23 2456 if(Is_Sounds_Enabled) strcat(status,"[S]"); \ ??UpdateCLheader_16: \ 00000248 5C0294E5 LDR R0,[R4, #+604] \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 0200000A BEQ ??UpdateCLheader_17 \ 00000254 0810A0E1 MOV R1,R8 \ 00000258 0500A0E1 MOV R0,R5 \ 0000025C 170000EF SWI +23 2457 if(Is_Double_Vibra_On) strcat(status,"[R]"); \ ??UpdateCLheader_17: \ 00000260 040294E5 LDR R0,[R4, #+516] \ 00000264 000050E3 CMP R0,#+0 \ 00000268 0200000A BEQ ??UpdateCLheader_18 \ 0000026C 0C1F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 00000270 0500A0E1 MOV R0,R5 \ 00000274 170000EF SWI +23 2458 zeromem(clm_hdr_text,64); \ ??UpdateCLheader_18: \ 00000278 4010A0E3 MOV R1,#+64 \ 0000027C 040086E0 ADD R0,R6,R4 \ 00000280 1D0100EF SWI +285 2459 //DrawStatusBar(); 2460 } 2461 break; 2462 } 2463 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_3: \ 00000284 08009DE5 LDR R0,[SP, #+8] \ 00000288 6C1087E2 ADD R1,R7,#+108 \ 0000028C 1A0000EF SWI +26 2464 } 2465 } \ 00000290 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??UpdateCLheader_1: \ 00000294 5B535D00 DC8 "[S]" \ 00000298 5B565D00 DC8 "[V]" \ 0000029C 5B495D00 DC8 "[I]" \ 000002A0 5B415D00 DC8 "[A]" \ 000002A4 5B525D00 DC8 "[R]" \ 000002A8 ........ DC32 key_clmenu_sk_r 2466 \ In segment CODE, align 4, keep-with-next 2467 void ClearContactT9Key(void) 2468 { 2469 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 1248 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 2470 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 1248 2471 \ In segment CODE, align 4, keep-with-next 2472 void AddContactT9Key(int chr) 2473 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 2474 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable42 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 4E0E85E2 ADD R0,R5,#+1248 \ 00000010 1B0000EF SWI +27 2475 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 2476 { 2477 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C E044C035 STRBCC R4,[R0, #+1248] 2478 } 2479 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 2480 \ In segment CODE, align 4, keep-with-next 2481 void BackSpaceContactT9(void) 2482 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 2483 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable42 ;; S_ICONS \ 00000008 4E0E84E2 ADD R0,R4,#+1248 \ 0000000C 1B0000EF SWI +27 2484 if (l) \ 00000010 000050E3 CMP R0,#+0 2485 { 2486 l--; 2487 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C DF14C015 STRBNE R1,[R0, #+1247] 2488 } 2489 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 2490 \ In segment CODE, align 4, keep-with-next 2491 void create_contactlist_menu(void) 2492 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2493 int i; 2494 i=CountContacts(); 2495 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable42 ;; S_ICONS 2496 UpdateCLheader(); 2497 patch_header(&contactlist_menuhdr); \ 00000008 50609FE5 LDR R6,??create_contactlist_menu_0 ;; contactlist_menuhdr \ 0000000C ........ _BLF CountContacts,??CountContacts??rA \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 B84285E5 STR R4,[R5, #+696] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 000086E5 STR R0,[R6, #+0] \ 00000024 888100EF SWI +33160 \ 00000028 010040E2 SUB R0,R0,#+1 \ 0000002C B400C6E1 STRH R0,[R6, #+4] \ 00000030 8A8100EF SWI +33162 \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 B600C6E1 STRH R0,[R6, #+6] 2498 #ifdef USE_MLMENU 2499 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); \ 0000003C 10002DE9 PUSH {R4} \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 01002DE9 PUSH {R0} \ 00000048 0630A0E1 MOV R3,R6 \ 0000004C 142086E2 ADD R2,R6,#+20 \ 00000050 0010A0E3 MOV R1,#+0 \ 00000054 170200EF SWI +535 \ 00000058 B00285E5 STR R0,[R5, #+688] 2500 #else 2501 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 2502 #endif 2503 } \ 0000005C 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000060 ........ DC32 contactlist_menuhdr 2504 static int unhooked2=1; \ In segment CODE, align 4, keep-with-next 2505 void contactlist_menu_ghook(void *data, int cmd) 2506 { \ contactlist_menu_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2507 PNGTOP_DESC *pltop=PNG_TOP(); 2508 if (cmd==9) 2509 { 2510 pltop->dyn_pltop=NULL; 2511 } 2512 static int unhooked=1; 2513 if((((unhooked) || (unhooked2)) && (TIME_OR_MSG==4))) \ 00000004 ........ LDR R8,??DataTable46 ;; 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 300398E5 LDR R0,[R8, #+816] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 2C039805 LDREQ R0,[R8, #+812] \ 00000030 00005003 CMPEQ R0,#+0 \ 00000034 1300000A BEQ ??contactlist_menu_ghook_0 \ 00000038 F80098E5 LDR R0,[R8, #+248] \ 0000003C 040050E3 CMP R0,#+4 \ 00000040 1000001A BNE ??contactlist_menu_ghook_0 2514 { 2515 if(!(strlen(ContactT9Key))) \ 00000044 4E0E88E2 ADD R0,R8,#+1248 \ 00000048 1B0000EF SWI +27 \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 0A00001A BNE ??contactlist_menu_ghook_1 2516 { 2517 GUI * gui=(GUI*)data; 2518 memcpy(&gui_methods2,gui->methods,nmeth*4); \ 00000054 041094E5 LDR R1,[R4, #+4] \ 00000058 B29FA0E3 MOV R9,#+712 \ 0000005C 6020A0E3 MOV R2,#+96 \ 00000060 080089E0 ADD R0,R9,R8 \ 00000064 1E0100EF SWI +286 2519 gui->methods=&gui_methods2; \ 00000068 080089E0 ADD R0,R9,R8 \ 0000006C 040084E5 STR R0,[R4, #+4] 2520 old_redraw=gui_methods2[0]; \ 00000070 080099E7 LDR R0,[R9, +R8] \ 00000074 280388E5 STR R0,[R8, #+808] 2521 gui_methods2[0]=(void*)&new_redraw; \ 00000078 28009FE5 LDR R0,??contactlist_menu_ghook_2 ;; new_redraw \ 0000007C 080089E7 STR R0,[R9, +R8] 2522 } 2523 unhooked=0; \ ??contactlist_menu_ghook_1: \ 00000080 307388E5 STR R7,[R8, #+816] 2524 unhooked2=0; \ 00000084 2C7388E5 STR R7,[R8, #+812] 2525 } 2526 2527 if (cmd==0x0A) \ ??contactlist_menu_ghook_0: \ 00000088 0A0055E3 CMP R5,#+10 \ 0000008C F083BD18 POPNE {R4-R9,PC} 2528 { 2529 silenthide=0; 2530 pltop->dyn_pltop=XStatusesImgList; \ 00000090 ........ LDR R0,??DataTable44 ;; XStatusesImgList \ 00000094 507288E5 STR R7,[R8, #+592] \ 00000098 000090E5 LDR R0,[R0, #+0] \ 0000009C 080086E5 STR R0,[R6, #+8] 2531 DisableIDLETMR(); \ 000000A0 7F0100EF SWI +383 2532 } 2533 } \ 000000A4 F083BDE8 POP {R4-R9,PC} ;; return \ ??contactlist_menu_ghook_2: \ 000000A8 ........ DC32 new_redraw 2534 \ In segment CODE, align 4, keep-with-next 2535 void RecountMenu(CLIST *req, int needfocus) 2536 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 2537 int i; 2538 int j; 2539 void *data; 2540 UpdateCLheader(); 2541 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable46 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 B00296E5 LDR R0,[R6, #+688] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 2542 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 B00296E5 LDR R0,[R6, #+688] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 2543 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 2544 { 2545 j=0; 2546 } 2547 else 2548 { 2549 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 2550 } 2551 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 2552 if (j>=i) j=i-1; 2553 if (j<0) j=0; 2554 if (i!=prev_clmenu_itemcount) \ 00000048 B81296E5 LDR R1,[R6, #+696] \ 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 2555 { 2556 prev_clmenu_itemcount=i; \ 00000064 B80286E5 STR R0,[R6, #+696] 2557 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 2558 } 2559 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 2560 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 B00296E5 LDR R0,[R6, #+688] \ 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 2561 } 2562 2563 char hostbuf2[128]; 2564 \ In segment CODE, align 4, keep-with-next 2565 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 2566 { \ contactlist_menu_onkey: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 2567 CLIST *t; 2568 int i; 2569 i=GetCurMenuItem(data); \ 00000008 8F0100EF SWI +399 2570 t=FindContactByN(i); \ 0000000C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000010 0090A0E1 MOV R9,R0 2571 if (msg->keys==0x18) \ 00000014 04009DE5 LDR R0,[SP, #+4] \ 00000018 F200D0E1 LDRSH R0,[R0, #+2] \ 0000001C 180050E3 CMP R0,#+24 \ 00000020 0100001A BNE ??contactlist_menu_onkey_1 2572 { 2573 ShowMainMenu(); \ 00000024 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 2574 return(-1); \ 00000028 B20000EA B ??contactlist_menu_onkey_2 2575 } 2576 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_1: \ 0000002C ........ LDR R6,??DataTable46 ;; S_ICONS \ 00000030 4E5EA0E3 MOV R5,#+1248 \ 00000034 3D0050E3 CMP R0,#+61 \ 00000038 2300001A BNE ??contactlist_menu_onkey_3 2577 { 2578 if (t) \ 0000003C 000059E3 CMP R9,#+0 \ 00000040 2B00000A BEQ ??contactlist_menu_onkey_4 2579 { 2580 if (t->isgroup) \ 00000044 080099E5 LDR R0,[R9, #+8] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0700000A BEQ ??contactlist_menu_onkey_5 2581 { 2582 t->state^=0xFFFF; \ 00000050 B405D9E1 LDRH R0,[R9, #+84] \ 00000054 FF10A0E3 MOV R1,#+255 \ 00000058 FF1C81E3 ORR R1,R1,#0xFF00 \ 0000005C 000021E0 EOR R0,R1,R0 \ 00000060 B405C9E1 STRH R0,[R9, #+84] 2583 RecountMenu(t,1); \ 00000064 0110A0E3 MOV R1,#+1 \ 00000068 0900A0E1 MOV R0,R9 \ 0000006C 1F0000EA B ??contactlist_menu_onkey_6 2584 return(-1); 2585 } 2586 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_5: \ 00000070 060085E0 ADD R0,R5,R6 \ 00000074 1B0000EF SWI +27 \ 00000078 000050E3 CMP R0,#+0 \ 0000007C 0500000A BEQ ??contactlist_menu_onkey_7 2587 { 2588 ClearContactT9Key(); \ 00000080 2010A0E3 MOV R1,#+32 \ 00000084 060085E0 ADD R0,R5,R6 \ 00000088 1D0100EF SWI +285 2589 RecountMenu(NULL,1); \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 ........ BL RecountMenu 2590 } 2591 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_3: \ 000000CC 010050E3 CMP R0,#+1 \ 000000D0 0900001A BNE ??contactlist_menu_onkey_9 2597 { 2598 if (strlen(ContactT9Key)) \ 000000D4 060085E0 ADD R0,R5,R6 \ 000000D8 1B0000EF SWI +27 \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0500000A BEQ ??contactlist_menu_onkey_9 2599 { 2600 BackSpaceContactT9(); \ 000000E4 ........ BL BackSpaceContactT9 2601 RecountMenu(NULL,1); \ 000000E8 0110A0E3 MOV R1,#+1 \ 000000EC 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_6: \ 000000F0 ........ BL RecountMenu 2602 return(-1); \ ??contactlist_menu_onkey_4: \ 000000F4 0000E0E3 MVN R0,#+0 \ 000000F8 F68FBDE8 POP {R1,R2,R4-R11,PC} 2603 } 2604 } 2605 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_9: \ 000000FC 04009DE5 LDR R0,[SP, #+4] \ 00000100 00A0A0E3 MOV R10,#+0 \ 00000104 041090E5 LDR R1,[R0, #+4] \ 00000108 0140A0E3 MOV R4,#+1 \ 0000010C 040091E5 LDR R0,[R1, #+4] \ 00000110 9320A0E3 MOV R2,#+147 \ 00000114 402F82E3 ORR R2,R2,#0x100 \ 00000118 020050E1 CMP R0,R2 \ 0000011C 7700001A BNE ??contactlist_menu_onkey_10 2606 { 2607 int key=msg->gbsmsg->submess; \ 00000120 080091E5 LDR R0,[R1, #+8] 2608 if ((key>='0')&&(key<='9')) \ 00000124 300050E3 CMP R0,#+48 \ 00000128 060000BA BLT ??contactlist_menu_onkey_11 \ 0000012C 3A0050E3 CMP R0,#+58 \ 00000130 0B0000AA BGE ??contactlist_menu_onkey_12 2609 { 2610 AddContactT9Key(key); \ 00000134 ........ BL AddContactT9Key 2611 RecountMenu(NULL,1); \ 00000138 0110A0E3 MOV R1,#+1 \ 0000013C 0A00A0E1 MOV R0,R10 \ 00000140 ........ BL RecountMenu \ 00000144 150000EA B ??contactlist_menu_onkey_13 2612 return(-1); 2613 } 2614 #ifdef ELKA 2615 if (key==VOL_UP_BUTTON && isVolUpButton) 2616 { 2617 char *small_info=malloc(256); 2618 sprintf(small_info, "Время в онлайн:\n" 2619 "%02d:%02d:%02d\n" 2620 "Сервер:\n%s" 2621 ,xstatus_old, minimum_xstatus, maximum, hostbuf2); 2622 ShowMSG(1,(int)small_info); 2623 mfree(small_info); 2624 } 2625 2626 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) 2627 { 2628 if(!away_m) 2629 { 2630 away_m=!away_m; 2631 GBS_StopTimer(&away_tmr); 2632 msg_away_timer=AUTO_ENGADE; 2633 away_timer(); 2634 main_d=1; 2635 // ShowMSG(1,(int)"Автоответчик включен!"); 2636 InputAwayMsg(); 2637 } 2638 else 2639 { 2640 msg_away_timer=0; 2641 away_m=!away_m; 2642 // ShowMSG(1,(int)"Автоответчик выключен!"); 2643 } 2644 UpdateCLheader(); 2645 RefreshGUI(); 2646 } 2647 #endif 2648 if (key==GREEN_BUTTON) \ ??contactlist_menu_onkey_11: \ 00000148 0B0050E3 CMP R0,#+11 \ 0000014C 2D00001A BNE ??contactlist_menu_onkey_14 2649 { 2650 #ifdef kluchnik 2651 Show_XTX=!(Show_XTX); 2652 if(Show_XTX) 2653 ShowMSG(1,(int)"Show x-status"); 2654 else 2655 ShowMSG(1,(int)"Show time"); 2656 #else 2657 IsActiveUp=!IsActiveUp; \ 00000150 180296E5 LDR R0,[R6, #+536] \ 00000154 000050E3 CMP R0,#+0 \ 00000158 0040A013 MOVNE R4,#+0 \ 0000015C 184286E5 STR R4,[R6, #+536] 2658 RecountMenu(NULL,1); \ 00000160 FA0000EA B ??contactlist_menu_onkey_15 2659 #endif 2660 return(-1); 2661 } 2662 if (key==LEFT_BUTTON) \ ??contactlist_menu_onkey_12: \ 00000164 3D0050E3 CMP R0,#+61 \ 00000168 1100000A BEQ ??contactlist_menu_onkey_16 2663 { 2664 while(t=(CLIST *)(t->next)) 2665 { 2666 if (t->isunread) goto doit; 2667 } 2668 t=(CLIST *)(&cltop); 2669 while(t=(CLIST *)(t->next)) 2670 { 2671 if (t->isunread) goto doit; 2672 } 2673 if (t && Is_Show_Groups) {//???? ??????? ? ?????????? ??????? 2674 if (!t->isgroup) 2675 t=FindGroupByID(t->group); 2676 if (t && !t->state) {//?????? ??????? ? ??? ???????? 2677 t->state^=0xFFFF; 2678 goto does; 2679 } 2680 } 2681 doit: 2682 { 2683 CLIST *g=FindGroupByID(t->group); 2684 if (g) 2685 { 2686 if (g->state) 2687 { 2688 g->state=0; 2689 } 2690 } 2691 } 2692 does: 2693 RecountMenu(t,1); 2694 return(-1); 2695 } 2696 if (key=='*') 2697 { 2698 while(t=(CLIST *)(t->next)) 2699 { 2700 if (t->just_now) goto doit3; 2701 } 2702 t=(CLIST *)(&cltop); 2703 while(t=(CLIST *)(t->next)) 2704 { 2705 if (t->just_now) goto doit3; 2706 } 2707 return(-1); 2708 doit3: 2709 { 2710 CLIST *g=FindGroupByID(t->group); 2711 if (g) 2712 { 2713 if (g->state) 2714 { 2715 g->state=0; 2716 } 2717 } 2718 } 2719 RecountMenu(t,1); 2720 return(-1); 2721 } 2722 2723 if (key=='#') 2724 { 2725 if(ActionResh) 2726 { 2727 while(t=(CLIST *)(t->next)) 2728 { 2729 if (t->isactive) goto doit4; 2730 } 2731 t=(CLIST *)(&cltop); 2732 while(t=(CLIST *)(t->next)) 2733 { 2734 if (t->isactive) goto doit4; 2735 } 2736 return(-1); 2737 doit4: 2738 { 2739 CLIST *g=FindGroupByID(t->group); 2740 if (g) 2741 { 2742 if (g->state) 2743 { 2744 g->state=0; 2745 } 2746 } 2747 } 2748 RecountMenu(t,1); 2749 } 2750 else 2751 { 2752 if(t->log) 2753 { 2754 FreeLOGQ(&t->log); 2755 t->msg_count=0; 2756 } 2757 if(strlen(ContactT9Key)) 2758 ClearContactT9Key(); 2759 t->isactive=0; 2760 RecountMenu(NULL,0); 2761 } 2762 return(-1); 2763 } 2764 if (key==RIGHT_BUTTON) \ 0000016C 3E0050E3 CMP R0,#+62 \ 00000170 6200001A BNE ??contactlist_menu_onkey_10 2765 { 2766 //Послать запрос текста XStatus 2767 if (t) \ 00000174 000059E3 CMP R9,#+0 \ 00000178 6000000A BEQ ??contactlist_menu_onkey_10 2768 { 2769 if (!t->isgroup) \ 0000017C 080099E5 LDR R0,[R9, #+8] \ 00000180 000050E3 CMP R0,#+0 \ 00000184 5D00001A BNE ??contactlist_menu_onkey_10 2770 { 2771 FreeXText(t); \ 00000188 0900A0E1 MOV R0,R9 \ 0000018C ........ _BLF FreeXText,??FreeXText??rA 2772 t->req_xtext=0; \ 00000190 8CA089E5 STR R10,[R9, #+140] 2773 RequestXText(t->uin); \ 00000194 0C0099E5 LDR R0,[R9, #+12] \ 00000198 ........ BL RequestXText 2774 RefreshGUI(); \ 0000019C 960100EF SWI +406 2775 return(-1); \ ??contactlist_menu_onkey_13: \ 000001A0 000064E2 RSB R0,R4,#+0 \ 000001A4 F68FBDE8 POP {R1,R2,R4-R11,PC} 2776 } 2777 } 2778 } \ ??contactlist_menu_onkey_17: \ 000001A8 600099E5 LDR R0,[R9, #+96] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 0900001A BNE ??contactlist_menu_onkey_18 \ ??contactlist_menu_onkey_16: \ 000001B4 009099E5 LDR R9,[R9, #+0] \ 000001B8 000059E3 CMP R9,#+0 \ 000001BC F9FFFF1A BNE ??contactlist_menu_onkey_17 \ 000001C0 AA9F86E2 ADD R9,R6,#+680 \ ??contactlist_menu_onkey_19: \ 000001C4 009099E5 LDR R9,[R9, #+0] \ 000001C8 000059E3 CMP R9,#+0 \ 000001CC 0200000A BEQ ??contactlist_menu_onkey_18 \ 000001D0 600099E5 LDR R0,[R9, #+96] \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 F9FFFF0A BEQ ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_18: \ 000001DC 100099E5 LDR R0,[R9, #+16] \ 000001E0 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000001E4 000050E3 CMP R0,#+0 \ 000001E8 B415D011 LDRHNE R1,[R0, #+84] \ 000001EC 00005113 CMPNE R1,#+0 \ 000001F0 B4A5C011 STRHNE R10,[R0, #+84] \ 000001F4 0110A0E3 MOV R1,#+1 \ 000001F8 0900A0E1 MOV R0,R9 \ 000001FC ........ BL RecountMenu \ 00000200 000064E2 RSB R0,R4,#+0 \ 00000204 F68FBDE8 POP {R1,R2,R4-R11,PC} \ ??contactlist_menu_onkey_14: \ 00000208 2A0050E3 CMP R0,#+42 \ 0000020C 1800000A BEQ ??contactlist_menu_onkey_20 \ 00000210 230050E3 CMP R0,#+35 \ 00000214 3900001A BNE ??contactlist_menu_onkey_10 \ 00000218 400196E5 LDR R0,[R6, #+320] \ 0000021C 000050E3 CMP R0,#+0 \ 00000220 2100001A BNE ??contactlist_menu_onkey_21 \ 00000224 700099E5 LDR R0,[R9, #+112] \ 00000228 000050E3 CMP R0,#+0 \ 0000022C 0200000A BEQ ??contactlist_menu_onkey_22 \ 00000230 700089E2 ADD R0,R9,#+112 \ 00000234 ........ BL FreeLOGQ \ 00000238 80A089E5 STR R10,[R9, #+128] \ ??contactlist_menu_onkey_22: \ 0000023C 060085E0 ADD R0,R5,R6 \ 00000240 1B0000EF SWI +27 \ 00000244 000050E3 CMP R0,#+0 \ 00000248 0200000A BEQ ??contactlist_menu_onkey_23 \ 0000024C 2010A0E3 MOV R1,#+32 \ 00000250 060085E0 ADD R0,R5,R6 \ 00000254 1D0100EF SWI +285 \ ??contactlist_menu_onkey_23: \ 00000258 7CA089E5 STR R10,[R9, #+124] \ 0000025C 0010A0E3 MOV R1,#+0 \ 00000260 0100A0E1 MOV R0,R1 \ 00000264 220000EA B ??contactlist_menu_onkey_24 \ ??contactlist_menu_onkey_25: \ 00000268 580099E5 LDR R0,[R9, #+88] \ 0000026C 000050E3 CMP R0,#+0 \ 00000270 D9FFFF1A BNE ??contactlist_menu_onkey_18 \ ??contactlist_menu_onkey_20: \ 00000274 009099E5 LDR R9,[R9, #+0] \ 00000278 000059E3 CMP R9,#+0 \ 0000027C F9FFFF1A BNE ??contactlist_menu_onkey_25 \ 00000280 AA9F86E2 ADD R9,R6,#+680 \ ??contactlist_menu_onkey_26: \ 00000284 009099E5 LDR R9,[R9, #+0] \ 00000288 000059E3 CMP R9,#+0 \ 0000028C 98FFFF0A BEQ ??contactlist_menu_onkey_4 \ 00000290 580099E5 LDR R0,[R9, #+88] \ 00000294 000050E3 CMP R0,#+0 \ 00000298 F9FFFF0A BEQ ??contactlist_menu_onkey_26 \ 0000029C CEFFFFEA B ??contactlist_menu_onkey_18 \ ??contactlist_menu_onkey_27: \ 000002A0 7C0099E5 LDR R0,[R9, #+124] \ 000002A4 000050E3 CMP R0,#+0 \ 000002A8 0900001A BNE ??contactlist_menu_onkey_28 \ ??contactlist_menu_onkey_21: \ 000002AC 009099E5 LDR R9,[R9, #+0] \ 000002B0 000059E3 CMP R9,#+0 \ 000002B4 F9FFFF1A BNE ??contactlist_menu_onkey_27 \ 000002B8 AA9F86E2 ADD R9,R6,#+680 \ ??contactlist_menu_onkey_29: \ 000002BC 009099E5 LDR R9,[R9, #+0] \ 000002C0 000059E3 CMP R9,#+0 \ 000002C4 8AFFFF0A BEQ ??contactlist_menu_onkey_4 \ 000002C8 7C0099E5 LDR R0,[R9, #+124] \ 000002CC 000050E3 CMP R0,#+0 \ 000002D0 F9FFFF0A BEQ ??contactlist_menu_onkey_29 \ ??contactlist_menu_onkey_28: \ 000002D4 100099E5 LDR R0,[R9, #+16] \ 000002D8 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 B415D011 LDRHNE R1,[R0, #+84] \ 000002E4 00005113 CMPNE R1,#+0 \ 000002E8 B4A5C011 STRHNE R10,[R0, #+84] \ 000002EC 0110A0E3 MOV R1,#+1 \ 000002F0 0900A0E1 MOV R0,R9 \ ??contactlist_menu_onkey_24: \ 000002F4 ........ BL RecountMenu \ ??contactlist_menu_onkey_2: \ 000002F8 0000E0E3 MVN R0,#+0 \ 000002FC F68FBDE8 POP {R1,R2,R4-R11,PC} 2779 /* 2780 if (key==0x19) 2781 { 2782 CreateScreenSelectGUI(); 2783 // GeneralFuncF1(1); 2784 return(-1); 2785 }*/ 2786 } 2787 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_10: \ 00000300 040091E5 LDR R0,[R1, #+4] \ 00000304 022082E2 ADD R2,R2,#+2 \ 00000308 020050E1 CMP R0,R2 \ 0000030C DA00001A BNE ??contactlist_menu_onkey_30 2788 { 2789 if (msg->gbsmsg->submess=='#') \ 00000310 080091E5 LDR R0,[R1, #+8] \ 00000314 ........ LDR R7,??DataTable49 ;; `?gbsmsg->submess=='*') \ ??contactlist_menu_onkey_31: \ 0000038C 2A0050E3 CMP R0,#+42 \ 00000390 1200001A BNE ??contactlist_menu_onkey_32 2809 { 2810 ClearContactT9Key(); \ 00000394 2010A0E3 MOV R1,#+32 \ 00000398 060085E0 ADD R0,R5,R6 \ 0000039C 1D0100EF SWI +285 2811 RecountMenu(NULL,1); \ 000003A0 0110A0E3 MOV R1,#+1 \ 000003A4 0A00A0E1 MOV R0,R10 \ 000003A8 ........ BL RecountMenu 2812 silenthide=1; \ 000003AC 504286E5 STR R4,[R6, #+592] 2813 gipc.name_to=ipc_xtask_name; \ 000003B0 850F85E3 ORR R0,R5,#0x214 \ 000003B4 070080E0 ADD R0,R0,R7 \ 000003B8 740086E5 STR R0,[R6, #+116] 2814 gipc.name_from=ipc_my_name; \ 000003BC 7D0F85E2 ADD R0,R5,#+500 \ 000003C0 070080E0 ADD R0,R0,R7 \ 000003C4 780086E5 STR R0,[R6, #+120] 2815 gipc.data=0; \ 000003C8 7CA086E5 STR R10,[R6, #+124] 2816 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000003CC 743086E2 ADD R3,R6,#+116 \ 000003D0 0420A0E1 MOV R2,R4 \ 000003D4 0B10A0E1 MOV R1,R11 \ 000003D8 0800A0E1 MOV R0,R8 \ 000003DC 000100EF SWI +256 2817 } 2818 2819 //-------------------- LONG PRESS ACTION ON CL --------------------// 2820 2821 switch(msg->gbsmsg->submess) \ ??contactlist_menu_onkey_32: \ 000003E0 04009DE5 LDR R0,[SP, #+4] \ 000003E4 98829FE5 LDR R8,??contactlist_menu_onkey_33 ;; WriteDefSettings \ 000003E8 040090E5 LDR R0,[R0, #+4] \ 000003EC 080090E5 LDR R0,[R0, #+8] \ 000003F0 310040E2 SUB R0,R0,#+49 \ 000003F4 080050E3 CMP R0,#+8 \ 000003F8 9100008A BHI ??contactlist_menu_onkey_34 \ 000003FC 011F8FE2 ADR R1,??contactlist_menu_onkey_0 \ 00000400 0010D1E7 LDRB R1,[R1, R0] \ 00000404 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??contactlist_menu_onkey_0: \ 00000408 02101F2D DC8 +2,+16,+31,+45 \ 0000040C 3D56677A DC8 +61,+86,+103,+122 \ 00000410 80000000 DC8 +128,+0,+0,+0 2822 { 2823 case '1': 2824 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??contactlist_menu_onkey_35: \ 00000414 5C0296E5 LDR R0,[R6, #+604] \ 00000418 000050E3 CMP R0,#+0 \ 0000041C 0040A013 MOVNE R4,#+0 \ 00000420 5C4286E5 STR R4,[R6, #+604] 2825 // if(isShowMsgLongPress) 2826 // { 2827 if(Is_Sounds_Enabled) \ 00000424 000054E3 CMP R4,#+0 2828 ShowMSG(1,(int)"Sound 0n"); \ 00000428 7A0F8512 ADDNE R0,R5,#+488 2829 else 2830 ShowMSG(1,(int)"Sound Off"); \ 0000042C 770F8502 ADDEQ R0,R5,#+476 \ 00000430 071080E0 ADD R1,R0,R7 \ 00000434 0100A0E3 MOV R0,#+1 \ 00000438 480100EF SWI +328 2831 // } 2832 SUBPROC((void*)WriteDefSettings); \ 0000043C 0800A0E1 MOV R0,R8 \ 00000440 710100EF SWI +369 2833 RefreshGUI(); \ 00000444 960100EF SWI +406 \ 00000448 7D0000EA B ??contactlist_menu_onkey_34 2834 break; 2835 case '2': 2836 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??contactlist_menu_onkey_36: \ 0000044C 580296E5 LDR R0,[R6, #+600] \ 00000450 000050E3 CMP R0,#+0 \ 00000454 0040A013 MOVNE R4,#+0 \ 00000458 584286E5 STR R4,[R6, #+600] 2837 SUBPROC((void*)WriteDefSettings); \ 0000045C 0800A0E1 MOV R0,R8 \ 00000460 710100EF SWI +369 2838 RefreshGUI(); \ 00000464 960100EF SWI +406 2839 // if(isShowMsgLongPress) 2840 // { 2841 if(Is_Vibra_Enabled) \ 00000468 580296E5 LDR R0,[R6, #+600] \ 0000046C 000050E3 CMP R0,#+0 \ 00000470 710F8502 ADDEQ R0,R5,#+452 \ 00000474 07108000 ADDEQ R1,R0,R7 2842 ShowMSG(1,(int)"Vibra On"); \ 00000478 6B1E8712 ADDNE R1,R7,#+1712 \ ??contactlist_menu_onkey_37: \ 0000047C 0100A0E3 MOV R0,#+1 \ ??contactlist_menu_onkey_38: \ 00000480 480100EF SWI +328 \ 00000484 6E0000EA B ??contactlist_menu_onkey_34 2843 else 2844 ShowMSG(1,(int)"Vibra Off"); 2845 // } 2846 break; 2847 case '3': 2848 if(CurrentPrivateStatus!=1) \ ??contactlist_menu_onkey_39: \ 00000488 6C0296E5 LDR R0,[R6, #+620] \ 0000048C 010050E3 CMP R0,#+1 \ 00000490 0500000A BEQ ??contactlist_menu_onkey_40 2849 { 2850 SetPrivateStatus(1);//Инвиз \ 00000494 0100A0E3 MOV R0,#+1 \ 00000498 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 2851 // if(isShowMsgLongPress) 2852 ShowMSG(1,(int)"Инвиз включен"); \ 0000049C 6D0F85E2 ADD R0,R5,#+436 \ 000004A0 071080E0 ADD R1,R0,R7 \ 000004A4 0400A0E1 MOV R0,R4 \ ??contactlist_menu_onkey_41: \ 000004A8 F4FFFFEA B ??contactlist_menu_onkey_38 2853 } 2854 else 2855 { 2856 SetPrivateStatus(3);//не инвиз:) \ ??contactlist_menu_onkey_40: \ 000004AC 0300A0E3 MOV R0,#+3 \ 000004B0 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 2857 // if(isShowMsgLongPress) 2858 ShowMSG(1,(int)"Инвиз выключен"); \ 000004B4 690F85E2 ADD R0,R5,#+420 \ 000004B8 071080E0 ADD R1,R0,R7 \ 000004BC EEFFFFEA B ??contactlist_menu_onkey_37 2859 } 2860 break; 2861 case '4': 2862 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??contactlist_menu_onkey_42: \ 000004C0 040296E5 LDR R0,[R6, #+516] \ 000004C4 000050E3 CMP R0,#+0 \ 000004C8 0040A013 MOVNE R4,#+0 \ 000004CC 044286E5 STR R4,[R6, #+516] 2863 SUBPROC((void*)WriteDefSettings); \ 000004D0 0800A0E1 MOV R0,R8 \ 000004D4 710100EF SWI +369 2864 RefreshGUI(); \ 000004D8 960100EF SWI +406 2865 // if(isShowMsgLongPress) 2866 // { 2867 if(Is_Double_Vibra_On) \ 000004DC 040296E5 LDR R0,[R6, #+516] \ 000004E0 000050E3 CMP R0,#+0 \ 000004E4 0300000A BEQ ??contactlist_menu_onkey_43 2868 ShowMSG(1,(int)"Vibra rem On"); \ 000004E8 650F85E2 ADD R0,R5,#+404 \ 000004EC 071080E0 ADD R1,R0,R7 \ 000004F0 0100A0E3 MOV R0,#+1 \ 000004F4 E1FFFFEA B ??contactlist_menu_onkey_38 2869 else 2870 ShowMSG(1,(int)"Vibra rem Off"); \ ??contactlist_menu_onkey_43: \ 000004F8 3C1087E2 ADD R1,R7,#+60 \ 000004FC DEFFFFEA B ??contactlist_menu_onkey_37 2871 // } 2872 break; 2873 case '5': 2874 { 2875 CLIST *cl; 2876 cl=(CLIST *)cltop; \ ??contactlist_menu_onkey_44: \ 00000500 A84296E5 LDR R4,[R6, #+680] \ 00000504 000054E3 CMP R4,#+0 \ 00000508 0800000A BEQ ??contactlist_menu_onkey_45 2877 while(cl) 2878 { 2879 if(cl->log) \ ??contactlist_menu_onkey_46: \ 0000050C 700094E5 LDR R0,[R4, #+112] \ 00000510 000050E3 CMP R0,#+0 \ 00000514 0200000A BEQ ??contactlist_menu_onkey_47 2880 { 2881 FreeLOGQ(&cl->log); \ 00000518 700084E2 ADD R0,R4,#+112 \ 0000051C ........ BL FreeLOGQ 2882 cl->msg_count=0; \ 00000520 80A084E5 STR R10,[R4, #+128] 2883 } 2884 cl=cl->next; \ ??contactlist_menu_onkey_47: \ 00000524 004094E5 LDR R4,[R4, #+0] 2885 } \ 00000528 000054E3 CMP R4,#+0 \ 0000052C F6FFFF1A BNE ??contactlist_menu_onkey_46 2886 2887 if(strlen(ContactT9Key)) \ ??contactlist_menu_onkey_45: \ 00000530 060085E0 ADD R0,R5,R6 \ 00000534 1B0000EF SWI +27 \ 00000538 000050E3 CMP R0,#+0 \ 0000053C 0200000A BEQ ??contactlist_menu_onkey_48 2888 ClearContactT9Key(); \ 00000540 2010A0E3 MOV R1,#+32 \ 00000544 060085E0 ADD R0,R5,R6 \ 00000548 1D0100EF SWI +285 2889 t->isactive=0; \ ??contactlist_menu_onkey_48: \ 0000054C 7CA089E5 STR R10,[R9, #+124] 2890 RecountMenu(NULL,1); \ ??contactlist_menu_onkey_15: \ 00000550 0110A0E3 MOV R1,#+1 \ 00000554 0000A0E3 MOV R0,#+0 \ 00000558 ........ BL RecountMenu 2891 return (-1); \ 0000055C 0A00E0E1 MVN R0,R10 \ 00000560 F68FBDE8 POP {R1,R2,R4-R11,PC} 2892 } 2893 case '6': 2894 if(!away_m) \ ??contactlist_menu_onkey_49: \ 00000564 280296E5 LDR R0,[R6, #+552] \ 00000568 000050E3 CMP R0,#+0 \ 0000056C 0900001A BNE ??contactlist_menu_onkey_50 2895 { 2896 away_m=!away_m; \ 00000570 284286E5 STR R4,[R6, #+552] 2897 GBS_StopTimer(&away_tmr); \ 00000574 BC00A0E3 MOV R0,#+188 \ 00000578 D00E80E3 ORR R0,R0,#0xD00 \ 0000057C 060080E0 ADD R0,R0,R6 \ 00000580 440100EF SWI +324 2898 msg_away_timer=AUTO_ENGADE; \ 00000584 D00096E5 LDR R0,[R6, #+208] \ 00000588 240286E5 STR R0,[R6, #+548] 2899 away_timer(); \ 0000058C ........ BL away_timer 2900 // ShowMSG(1,(int)"Автоответчик включен!"); 2901 InputAwayMsg(); \ 00000590 ........ BL InputAwayMsg \ 00000594 010000EA B ??contactlist_menu_onkey_51 2902 } 2903 else 2904 { 2905 msg_away_timer=0; \ ??contactlist_menu_onkey_50: \ 00000598 24A286E5 STR R10,[R6, #+548] 2906 away_m=!away_m; \ 0000059C 28A286E5 STR R10,[R6, #+552] 2907 // ShowMSG(1,(int)"Автоответчик выключен!"); 2908 } 2909 UpdateCLheader(); \ ??contactlist_menu_onkey_51: \ 000005A0 ........ BL UpdateCLheader \ 000005A4 260000EA B ??contactlist_menu_onkey_34 2910 break; 2911 case '7': 2912 { 2913 Show_XTX=!(Show_XTX); \ ??contactlist_menu_onkey_52: \ 000005A8 340296E5 LDR R0,[R6, #+564] \ 000005AC 000050E3 CMP R0,#+0 \ 000005B0 0040A013 MOVNE R4,#+0 \ 000005B4 344286E5 STR R4,[R6, #+564] 2914 // if(isShowMsgLongPress) 2915 // { 2916 if(Show_XTX) \ 000005B8 000054E3 CMP R4,#+0 2917 ShowMSG(1,(int)"Show x-status"); \ 000005BC 610F8512 ADDNE R0,R5,#+388 2918 else 2919 ShowMSG(1,(int)"Show time"); \ 000005C0 5E0F8502 ADDEQ R0,R5,#+376 \ 000005C4 071080E0 ADD R1,R0,R7 \ 000005C8 0100A0E3 MOV R0,#+1 \ 000005CC 480100EF SWI +328 2920 //} 2921 } 2922 ClearContactT9Key(); \ 000005D0 2010A0E3 MOV R1,#+32 \ 000005D4 060085E0 ADD R0,R5,R6 \ 000005D8 1D0100EF SWI +285 2923 UpdateCLheader(); \ 000005DC ........ BL UpdateCLheader 2924 RecountMenu(t,1); \ 000005E0 0110A0E3 MOV R1,#+1 \ 000005E4 0900A0E1 MOV R0,R9 \ 000005E8 ........ BL RecountMenu \ 000005EC 0A00E0E1 MVN R0,R10 \ 000005F0 F68FBDE8 POP {R1,R2,R4-R11,PC} 2925 return -1; 2926 case '8': 2927 { 2928 WSHDR *ws; 2929 ws=AllocWS(150); \ ??contactlist_menu_onkey_53: \ 000005F4 9600A0E3 MOV R0,#+150 \ 000005F8 250100EF SWI +293 \ 000005FC 0040A0E1 MOV R4,R0 2930 #ifdef NEWSGOLD 2931 str_2ws(ws,"4:\\zbin\\etc\\NATICQ.bcfg",128); \ 00000600 8020A0E3 MOV R2,#+128 \ 00000604 641E87E2 ADD R1,R7,#+1600 \ 00000608 060000EA B ??contactlist_menu_onkey_54 2932 #else 2933 str_2ws(ws,"0:\\zbin\\etc\\NATICQ.bcfg",128); 2934 #endif 2935 ExecuteFile(ws,0,0); 2936 FreeWS(ws); 2937 } 2938 break; 2939 case '9': 2940 { 2941 2942 WSHDR *ws; 2943 ws=AllocWS(150); \ ??contactlist_menu_onkey_55: \ 0000060C 9600A0E3 MOV R0,#+150 \ 00000610 250100EF SWI +293 \ 00000614 0040A0E1 MOV R4,R0 2944 #ifdef NEWSGOLD 2945 str_2ws(ws,"4:\\zbin\\etc\\NATICQMod.bcfg",128); \ 00000618 8020A0E3 MOV R2,#+128 \ 0000061C 510F85E2 ADD R0,R5,#+324 \ 00000620 071080E0 ADD R1,R0,R7 \ 00000624 0400A0E1 MOV R0,R4 \ ??contactlist_menu_onkey_54: \ 00000628 6C0100EF SWI +364 2946 #else 2947 str_2ws(ws,"0:\\zbin\\etc\\NATICQMod.bcfg",128); 2948 #endif 2949 ExecuteFile(ws,0,0); \ 0000062C 0020A0E3 MOV R2,#+0 \ 00000630 0210A0E1 MOV R1,R2 \ 00000634 0400A0E1 MOV R0,R4 \ 00000638 940000EF SWI +148 2950 FreeWS(ws); \ 0000063C 0400A0E1 MOV R0,R4 \ 00000640 290100EF SWI +297 2951 } 2952 break; 2953 } 2954 2955 int key=msg->gbsmsg->submess; \ ??contactlist_menu_onkey_34: \ 00000644 04009DE5 LDR R0,[SP, #+4] \ 00000648 040090E5 LDR R0,[R0, #+4] \ 0000064C 080090E5 LDR R0,[R0, #+8] 2956 if ((key>='0')&&(key<='9')) \ 00000650 300050E3 CMP R0,#+48 \ 00000654 080000BA BLT ??contactlist_menu_onkey_30 \ 00000658 3A0050E3 CMP R0,#+58 \ 0000065C 060000AA BGE ??contactlist_menu_onkey_30 2957 { 2958 ClearContactT9Key(); \ 00000660 2010A0E3 MOV R1,#+32 \ 00000664 060085E0 ADD R0,R5,R6 \ 00000668 1D0100EF SWI +285 2959 UpdateCLheader(); \ 0000066C ........ BL UpdateCLheader 2960 RecountMenu(NULL,1); \ 00000670 0110A0E3 MOV R1,#+1 \ 00000674 0000A0E3 MOV R0,#+0 \ 00000678 ........ BL RecountMenu 2961 } 2962 } 2963 return(0); \ ??contactlist_menu_onkey_30: \ 0000067C 0000A0E3 MOV R0,#+0 \ 00000680 F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return \ ??contactlist_menu_onkey_33: \ 00000684 ........ DC32 WriteDefSettings 2964 } 2965 \ In segment CODE, align 4, keep-with-next 2966 void GetOnTotalContact(int group_id,int *_onlinetotal) 2967 { 2968 CLIST *t; 2969 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable48 ;; S_ICONS + 680 \ 00000004 30002DE9 PUSH {R4,R5} 2970 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 2971 while((t=t->next)) 2972 { 2973 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 2974 { 2975 total++; 2976 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 2977 } 2978 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 2979 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 2980 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 2981 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 2982 2983 \ In segment CODE, align 4, keep-with-next 2984 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 2985 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 2986 CLIST *t; 2987 #ifdef USE_MLMENU 2988 void *item=AllocMLMenuItem(data); 2989 #else 2990 void *item=AllocMenuItem(data); 2991 #endif 2992 int icon; 2993 2994 WSHDR *ws2; 2995 #ifdef USE_MLMENU 2996 WSHDR *ws4; 2997 #endif 2998 WSHDR ws1loc, *ws1; 2999 unsigned short num[128]; 3000 ws1=CreateLocalWS(&ws1loc,num,128); 3001 #ifdef USE_MLMENU 3002 WSHDR ws3loc, *ws3; 3003 unsigned short num3[128]; 3004 ws3=CreateLocalWS(&ws3loc,num3,128); 3005 char s[64]; 3006 #endif 3007 t=FindContactByN(curitem); \ 00000008 ........ LDR R10,??DataTable49 ;; `?just_now) \ 00000060 580098E5 LDR R0,[R8, #+88] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0F00000A BEQ ??contactlist_menu_iconhndl_2 3014 { 3015 char *test=malloc(64); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 00B0A0E1 MOV R11,R0 3016 sprintf(test, ">> %s <<", t->name); \ 00000078 142088E2 ADD R2,R8,#+20 \ 0000007C 1800A0E3 MOV R0,#+24 \ 00000080 600E80E3 ORR R0,R0,#0x600 \ 00000084 0A1080E0 ADD R1,R0,R10 \ 00000088 0B00A0E1 MOV R0,R11 \ 0000008C 160000EF SWI +22 3017 wsprintf(ws1,percent_t,test); \ 00000090 0B20A0E1 MOV R2,R11 \ 00000094 18108AE2 ADD R1,R10,#+24 \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C 240100EF SWI +292 3018 mfree(test); \ 000000A0 0B00A0E1 MOV R0,R11 \ 000000A4 150000EF SWI +21 \ 000000A8 030000EA B ??contactlist_menu_iconhndl_3 3019 } 3020 else 3021 wsprintf(ws1,percent_t,t->name); \ ??contactlist_menu_iconhndl_2: \ 000000AC 142088E2 ADD R2,R8,#+20 \ 000000B0 18108AE2 ADD R1,R10,#+24 \ 000000B4 0600A0E1 MOV R0,R6 \ 000000B8 240100EF SWI +292 3022 if (t->just_now) \ ??contactlist_menu_iconhndl_3: \ 000000BC 580098E5 LDR R0,[R8, #+88] \ 000000C0 08B0A0E3 MOV R11,#+8 \ 000000C4 E0BC8BE3 ORR R11,R11,#0xE000 \ 000000C8 000050E3 CMP R0,#+0 3023 { 3024 wsInsertChar(ws1,0x0004,1); \ 000000CC 0120A013 MOVNE R2,#+1 \ 000000D0 0410A013 MOVNE R1,#+4 \ 000000D4 0400001A BNE ??contactlist_menu_iconhndl_4 3025 wsInsertChar(ws1,0xE008,1); 3026 } 3027 else 3028 if (t->isactive) \ 000000D8 7C0098E5 LDR R0,[R8, #+124] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0700000A BEQ ??contactlist_menu_iconhndl_5 3029 { 3030 wsInsertChar(ws1,0x0002,1); \ 000000E4 0120A0E3 MOV R2,#+1 \ 000000E8 0210A0E3 MOV R1,#+2 \ ??contactlist_menu_iconhndl_4: \ 000000EC 0600A0E1 MOV R0,R6 \ 000000F0 1D0000EF SWI +29 3031 wsInsertChar(ws1,0xE008,1); \ 000000F4 0120A0E3 MOV R2,#+1 \ 000000F8 0B10A0E1 MOV R1,R11 \ 000000FC 0600A0E1 MOV R0,R6 \ 00000100 1D0000EF SWI +29 3032 } 3033 #ifdef USE_MLMENU 3034 if ((t->xtext && t->xtext[0]!=0) && (Show_XTX) && (t->state!=0xFFFF))//Если контакт онлайн и показывать хстатус \ ??contactlist_menu_iconhndl_5: \ 00000104 840098E5 LDR R0,[R8, #+132] \ 00000108 0AB08BE2 ADD R11,R11,#+10 \ 0000010C 000050E3 CMP R0,#+0 \ 00000110 0000D015 LDRBNE R0,[R0, #+0] \ 00000114 00005013 CMPNE R0,#+0 \ 00000118 1800000A BEQ ??contactlist_menu_iconhndl_6 \ 0000011C 94019FE5 LDR R0,??contactlist_menu_iconhndl_7 ;; S_ICONS + 564 \ 00000120 000090E5 LDR R0,[R0, #+0] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 1400000A BEQ ??contactlist_menu_iconhndl_6 \ 0000012C B405D8E1 LDRH R0,[R8, #+84] \ 00000130 FF10A0E3 MOV R1,#+255 \ 00000134 FF1C81E3 ORR R1,R1,#0xFF00 \ 00000138 010050E1 CMP R0,R1 \ 0000013C 0F00000A BEQ ??contactlist_menu_iconhndl_6 3035 { 3036 int i; 3037 zeromem(s,64); \ 00000140 4010A0E3 MOV R1,#+64 \ 00000144 820F8DE2 ADD R0,SP,#+520 \ 00000148 1D0100EF SWI +285 3038 i=t->xtext[0]; \ 0000014C 840098E5 LDR R0,[R8, #+132] \ ??contactlist_menu_iconhndl_8: \ 00000150 0020D0E5 LDRB R2,[R0, #+0] 3039 if (i>63) i=63; 3040 strncpy(s,t->xtext+1,i); \ 00000154 011080E2 ADD R1,R0,#+1 \ 00000158 820F8DE2 ADD R0,SP,#+520 \ 0000015C 400052E3 CMP R2,#+64 \ 00000160 3F20A0A3 MOVGE R2,#+63 \ 00000164 160100EF SWI +278 3041 wsprintf(ws3,"%c%t",0xE012,s); \ 00000168 823F8DE2 ADD R3,SP,#+520 \ 0000016C 0B20A0E1 MOV R2,R11 \ 00000170 611E8AE2 ADD R1,R10,#+1552 \ 00000174 0700A0E1 MOV R0,R7 \ 00000178 240100EF SWI +292 \ 0000017C 0D0000EA B ??contactlist_menu_iconhndl_9 3042 } 3043 else 3044 if(t->xtext2 && t->xtext2[0]!=0) \ ??contactlist_menu_iconhndl_6: \ 00000180 880098E5 LDR R0,[R8, #+136] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 0000D015 LDRBNE R0,[R0, #+0] \ 0000018C 00005013 CMPNE R0,#+0 \ 00000190 0400000A BEQ ??contactlist_menu_iconhndl_10 3045 { 3046 int i; 3047 zeromem(s,64); \ 00000194 4010A0E3 MOV R1,#+64 \ 00000198 820F8DE2 ADD R0,SP,#+520 \ 0000019C 1D0100EF SWI +285 3048 i=t->xtext2[0]; \ 000001A0 880098E5 LDR R0,[R8, #+136] \ 000001A4 E9FFFFEA B ??contactlist_menu_iconhndl_8 3049 if (i>63) i=63; 3050 strncpy(s,t->xtext2+1,i); 3051 wsprintf(ws3,"%c%t",0xE012,s); 3052 } 3053 else 3054 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_10: \ 000001A8 0C2098E5 LDR R2,[R8, #+12] \ 000001AC 1B108AE2 ADD R1,R10,#+27 \ 000001B0 0700A0E1 MOV R0,R7 \ 000001B4 240100EF SWI +292 3055 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_9: \ 000001B8 B605D8E1 LDRH R0,[R8, #+86] \ 000001BC ........ LDR R2,??DataTable50 ;; total_xstatuses \ 000001C0 0010A0E1 MOV R1,R0 \ 000001C4 002092E5 LDR R2,[R2, #+0] \ 000001C8 020051E1 CMP R1,R2 \ 000001CC 1D0000AA BGE ??contactlist_menu_iconhndl_11 \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 1B00000A BEQ ??contactlist_menu_iconhndl_11 3056 { 3057 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 000001D8 0120A0E3 MOV R2,#+1 \ 000001DC 460F8BE2 ADD R0,R11,#+280 \ 000001E0 011080E0 ADD R1,R0,R1 \ 000001E4 0700A0E1 MOV R0,R7 \ 000001E8 1D0000EF SWI +29 \ 000001EC 150000EA B ??contactlist_menu_iconhndl_11 3058 } 3059 #endif 3060 } 3061 else 3062 { 3063 int onlinetotal[2]; 3064 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 000001F0 100098E5 LDR R0,[R8, #+16] \ 000001F4 0D10A0E1 MOV R1,SP \ 000001F8 ........ BL GetOnTotalContact 3065 #ifdef USE_MLMENU 3066 wsprintf(ws1,percent_t,t->name); \ 000001FC 142088E2 ADD R2,R8,#+20 \ 00000200 18108AE2 ADD R1,R10,#+24 \ 00000204 0600A0E1 MOV R0,R6 \ 00000208 240100EF SWI +292 3067 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 0000020C 04309DE5 LDR R3,[SP, #+4] \ 00000210 00209DE5 LDR R2,[SP, #+0] \ 00000214 0800A0E3 MOV R0,#+8 \ 00000218 600E80E3 ORR R0,R0,#0x600 \ 0000021C 0A1080E0 ADD R1,R0,R10 \ 00000220 0700A0E1 MOV R0,R7 \ 00000224 240100EF SWI +292 3068 #else 3069 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 3070 #endif 3071 if (t->state) icon++; //Модификация иконки группы \ 00000228 B405D8E1 LDRH R0,[R8, #+84] \ 0000022C 000050E3 CMP R0,#+0 \ 00000230 0400000A BEQ ??contactlist_menu_iconhndl_11 \ 00000234 019089E2 ADD R9,R9,#+1 \ 00000238 020000EA B ??contactlist_menu_iconhndl_11 3072 } 3073 } 3074 else 3075 { 3076 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 0000023C 601E8AE2 ADD R1,R10,#+1536 \ 00000240 0600A0E1 MOV R0,R6 \ 00000244 240100EF SWI +292 3077 } 3078 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ ??contactlist_menu_iconhndl_11: \ 00000248 000096E5 LDR R0,[R6, #+0] \ 0000024C B010D0E1 LDRH R1,[R0, #+0] \ 00000250 0400A0E1 MOV R0,R4 \ 00000254 980100EF SWI +408 \ 00000258 0080A0E1 MOV R8,R0 3079 wstrcpy(ws2,ws1); \ 0000025C 0610A0E1 MOV R1,R6 \ 00000260 1F0100EF SWI +287 3080 3081 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 00000264 ........ LDR R0,??DataTable51 ;; S_ICONS \ 00000268 0510A0E1 MOV R1,R5 \ 0000026C 092180E0 ADD R2,R0,R9, LSL #+2 \ 00000270 0400A0E1 MOV R0,R4 \ 00000274 990100EF SWI +409 3082 #ifdef USE_MLMENU 3083 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 00000278 000097E5 LDR R0,[R7, #+0] \ 0000027C B010D0E1 LDRH R1,[R0, #+0] \ 00000280 0400A0E1 MOV R0,R4 \ 00000284 980100EF SWI +408 \ 00000288 0060A0E1 MOV R6,R0 3084 wstrcpy(ws4,ws3); \ 0000028C 0710A0E1 MOV R1,R7 \ 00000290 1F0100EF SWI +287 3085 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 00000294 70029DE5 LDR R0,[SP, #+624] \ 00000298 0630A0E1 MOV R3,R6 \ 0000029C 01002DE9 PUSH {R0} \ 000002A0 0820A0E1 MOV R2,R8 \ 000002A4 0510A0E1 MOV R1,R5 \ 000002A8 0400A0E1 MOV R0,R4 \ 000002AC 180200EF SWI +536 3086 #else 3087 SetMenuItemText(data, item, ws2, curitem); 3088 #endif 3089 } \ 000002B0 9EDF8DE2 ADD SP,SP,#+632 \ 000002B4 F08FBDE8 POP {R4-R11,PC} ;; return \ ??contactlist_menu_iconhndl_7: \ 000002B8 ........ DC32 S_ICONS + 564 3090 3091 //=============================================================================================== 3092 3093 int DNR_ID=0; 3094 int DNR_TRIES=3; 3095 3096 char hostname[128]; //2058 che toka 128? :) 3097 3098 int host_counter = 0; 3099 3100 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3101 const char *GetHost(int cnt, const char *str, char *buf) 3102 { 3103 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 3104 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 3105 { 3106 for(;cnt;cnt--) 3107 { 3108 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 3109 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 3110 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 3111 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 3112 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 3113 } 3114 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 3115 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 3116 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 3117 end = str; 3118 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 3130 } 3131 } 3132 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3133 int GetPort(int cnt, const char *str) 3134 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 3135 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 3136 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 3137 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 3138 { 3139 for(;cnt;cnt--) 3140 { 3141 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 3142 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 3143 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 3144 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 3145 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 3146 } 3147 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 3148 if(*str!=':') return NATICQ_PORT; \ 000000A8 ........ LDRB R0,[R1], #+1 \ 000000AC 3A0050E3 CMP R0,#+58 \ 000000B0 58009F15 LDRNE R0,??GetPort_6 ;; S_ICONS + 464 \ 000000B4 00009015 LDRNE R0,[R0, #+0] \ 000000B8 1680BD18 POPNE {R1,R2,R4,PC} 3149 str++; 3150 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 3151 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 3152 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 3153 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 + 464 3154 3155 } 3156 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3157 int GetHostsCount(const char *str) 3158 { 3159 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 3160 for(;cnt;cnt++) 3161 { 3162 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 3163 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 3164 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 3165 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 3166 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 3167 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 3168 } 3169 //--------------------------------------------------------------------------- 3170 \ In segment CODE, align 4, keep-with-next 3171 void create_connect(void) 3172 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3173 // static int host_counter = 0; 3174 char hostbuf[128], buf[128]; 3175 int hostport; 3176 int ***p_res=NULL; 3177 void do_reconnect(void); 3178 SOCK_ADDR sa; 3179 //Устанавливаем соединение 3180 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable61 ;; S_ICONS 3181 int err; 3182 unsigned int ip; 3183 GBS_DelTimer(&reconnect_tmr); 3184 if (!IsGPRSEnabled()) \ 00000008 E0629FE5 LDR R6,??create_connect_0+0x4 ;; `? GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 3194 GetHost(host_counter, NATICQ_HOST, hostbuf); 3195 hostport = GetPort(host_counter, NATICQ_HOST); 3196 host_counter++; 3197 3198 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf 3199 strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 3200 strcpy(logmsg,buf); 3201 SMART_REDRAW(); 3202 3203 ip=str2ip(hostbuf); 3204 if (ip!=0xFFFFFFFF) \ 00000060 ........ LDR R8,??DataTable53 ;; do_reconnect \ 00000064 0470A0E3 MOV R7,#+4 \ 00000068 A07E87E3 ORR R7,R7,#0xA00 \ 0000006C 050087E0 ADD R0,R7,R5 \ 00000070 ........ BL GetHostsCount \ 00000074 3C1395E5 LDR R1,[R5, #+828] \ 00000078 010040E2 SUB R0,R0,#+1 \ 0000007C 010050E1 CMP R0,R1 \ 00000080 3C4385B5 STRLT R4,[R5, #+828] \ 00000084 3C0395E5 LDR R0,[R5, #+828] \ 00000088 14208DE2 ADD R2,SP,#+20 \ 0000008C 051087E0 ADD R1,R7,R5 \ 00000090 ........ BL GetHost \ 00000094 3C0395E5 LDR R0,[R5, #+828] \ 00000098 051087E0 ADD R1,R7,R5 \ 0000009C ........ BL GetPort \ 000000A0 0070A0E1 MOV R7,R0 \ 000000A4 3C0395E5 LDR R0,[R5, #+828] \ 000000A8 0730A0E1 MOV R3,R7 \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 3C0385E5 STR R0,[R5, #+828] \ 000000B4 14208DE2 ADD R2,SP,#+20 \ 000000B8 A01086E2 ADD R1,R6,#+160 \ 000000BC 980F8AE2 ADD R0,R10,#+608 \ 000000C0 050080E0 ADD R0,R0,R5 \ 000000C4 160000EF SWI +22 \ 000000C8 14108DE2 ADD R1,SP,#+20 \ 000000CC 780F8AE2 ADD R0,R10,#+480 \ 000000D0 050080E0 ADD R0,R0,R5 \ 000000D4 1A0000EF SWI +26 \ 000000D8 94108DE2 ADD R1,SP,#+148 \ 000000DC 05008AE0 ADD R0,R10,R5 \ 000000E0 1A0000EF SWI +26 \ 000000E4 ........ BL SMART_REDRAW \ 000000E8 14008DE2 ADD R0,SP,#+20 \ 000000EC B70100EF SWI +439 \ 000000F0 0490E0E1 MVN R9,R4 \ 000000F4 090050E1 CMP R0,R9 \ 000000F8 0500000A BEQ ??create_connect_3 3205 { 3206 sa.ip=ip; \ 000000FC 08008DE5 STR R0,[SP, #+8] 3207 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 00000100 901086E2 ADD R1,R6,#+144 \ 00000104 05008AE0 ADD R0,R10,R5 \ 00000108 1A0000EF SWI +26 3208 SMART_REDRAW(); \ 0000010C ........ BL SMART_REDRAW 3209 goto L_CONNECT; \ 00000110 3A0000EA B ??create_connect_4 3210 } 3211 strcat(logmsg,"\n"); \ ??create_connect_3: \ 00000114 74BF8FE2 ADR R11,??create_connect_0 ;; "\n" \ 00000118 0B10A0E1 MOV R1,R11 \ 0000011C 05008AE0 ADD R0,R10,R5 \ 00000120 170000EF SWI +23 3212 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000124 841086E2 ADD R1,R6,#+132 \ 00000128 05008AE0 ADD R0,R10,R5 \ 0000012C 1A0000EF SWI +26 3213 SMART_REDRAW(); \ 00000130 ........ BL SMART_REDRAW 3214 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000134 CD2F85E2 ADD R2,R5,#+820 \ 00000138 0D10A0E1 MOV R1,SP \ 0000013C 14008DE2 ADD R0,SP,#+20 \ 00000140 B60100EF SWI +438 \ 00000144 0030B0E1 MOVS R3,R0 3215 if (err) \ 00000148 1600000A BEQ ??create_connect_5 3216 { 3217 if ((err==0xC9)||(err==0xD6)) \ 0000014C C90053E3 CMP R3,#+201 \ 00000150 D6005313 CMPNE R3,#+214 \ 00000154 0600001A BNE ??create_connect_6 3218 { 3219 if (DNR_ID) \ 00000158 340395E5 LDR R0,[R5, #+820] \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 1000000A BEQ ??create_connect_5 3220 { 3221 host_counter--; \ 00000164 3C0395E5 LDR R0,[R5, #+828] \ 00000168 010040E2 SUB R0,R0,#+1 \ 0000016C 3C0385E5 STR R0,[R5, #+828] 3222 return; //Ждем готовности DNR \ 00000170 390000EA B ??create_connect_7 3223 } 3224 } 3225 else 3226 { 3227 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000174 742086E2 ADD R2,R6,#+116 \ 00000178 FF10A0E3 MOV R1,#+255 \ 0000017C 05008AE0 ADD R0,R10,R5 \ 00000180 1B0100EF SWI +283 3228 SMART_REDRAW(); \ 00000184 ........ BL SMART_REDRAW 3229 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000188 D40195E5 LDR R0,[R5, #+468] \ 0000018C 0820A0E1 MOV R2,R8 \ 00000190 D830A0E3 MOV R3,#+216 \ 00000194 930001E0 MUL R1,R3,R0 \ 00000198 480F8AE3 ORR R0,R10,#0x120 \ ??create_connect_8: \ 0000019C 050080E0 ADD R0,R0,R5 \ 000001A0 4D0000EF SWI +77 3230 return; \ 000001A4 2C0000EA B ??create_connect_7 3231 } 3232 } 3233 if (p_res) \ ??create_connect_5: \ 000001A8 00009DE5 LDR R0,[SP, #+0] \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 4300000A BEQ ??create_connect_9 3234 { 3235 if (p_res[3]) \ 000001B4 0C0090E5 LDR R0,[R0, #+12] \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 4800000A BEQ ??create_connect_10 3236 { 3237 strcpy(logmsg,buf); \ 000001C0 94108DE2 ADD R1,SP,#+148 \ 000001C4 05008AE0 ADD R0,R10,R5 \ 000001C8 1A0000EF SWI +26 3238 strcat(logmsg,"\n"); \ 000001CC 0B10A0E1 MOV R1,R11 \ 000001D0 05008AE0 ADD R0,R10,R5 \ 000001D4 170000EF SWI +23 3239 strcpy(logmsg,LG_GRDNROK); \ 000001D8 5C1086E2 ADD R1,R6,#+92 \ 000001DC 05008AE0 ADD R0,R10,R5 \ 000001E0 1A0000EF SWI +26 3240 SMART_REDRAW(); \ 000001E4 ........ BL SMART_REDRAW 3241 DNR_TRIES=0; \ 000001E8 384385E5 STR R4,[R5, #+824] 3242 sa.ip=p_res[3][0][0]; \ 000001EC 00109DE5 LDR R1,[SP, #+0] \ 000001F0 0C1091E5 LDR R1,[R1, #+12] \ 000001F4 001091E5 LDR R1,[R1, #+0] \ 000001F8 001091E5 LDR R1,[R1, #+0] \ 000001FC 08108DE5 STR R1,[SP, #+8] 3243 L_CONNECT: 3244 sock=socket(1,1,0); \ ??create_connect_4: \ 00000200 0020A0E3 MOV R2,#+0 \ 00000204 0110A0E3 MOV R1,#+1 \ 00000208 0100A0E1 MOV R0,R1 \ 0000020C 730100EF SWI +371 \ 00000210 840285E5 STR R0,[R5, #+644] 3245 if (sock!=-1) \ 00000214 090050E1 CMP R0,R9 \ 00000218 2000000A BEQ ??create_connect_11 3246 { 3247 sa.family=1; \ 0000021C 01A0A0E3 MOV R10,#+1 \ 00000220 B4A0CDE1 STRH R10,[SP, #+4] 3248 sa.port=htons(hostport); \ 00000224 0708A0E1 MOV R0,R7, LSL #+16 \ 00000228 2008A0E1 MOV R0,R0, LSR #+16 \ 0000022C 7A0100EF SWI +378 \ 00000230 B600CDE1 STRH R0,[SP, #+6] 3249 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 3250 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000234 840295E5 LDR R0,[R5, #+644] \ 00000238 1020A0E3 MOV R2,#+16 \ 0000023C 04108DE2 ADD R1,SP,#+4 \ 00000240 740100EF SWI +372 \ 00000244 090050E1 CMP R0,R9 \ 00000248 0500000A BEQ ??create_connect_12 3251 { 3252 connect_state=1; \ 0000024C 80A285E5 STR R10,[R5, #+640] 3253 TOTALRECEIVED=0; \ 00000250 884285E5 STR R4,[R5, #+648] 3254 TOTALSENDED=0; \ 00000254 8C4285E5 STR R4,[R5, #+652] 3255 SMART_REDRAW(); \ ??create_connect_2: \ 00000258 ........ BL SMART_REDRAW \ ??create_connect_7: \ 0000025C 45DF8DE2 ADD SP,SP,#+276 \ 00000260 F08FBDE8 POP {R4-R11,PC} 3256 } 3257 else 3258 { 3259 closesocket(sock); \ ??create_connect_12: \ 00000264 840295E5 LDR R0,[R5, #+644] \ 00000268 760100EF SWI +374 3260 sock=-1; \ 0000026C 849285E5 STR R9,[R5, #+644] 3261 LockSched(); \ 00000270 460100EF SWI +326 3262 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000274 401086E2 ADD R1,R6,#+64 \ 00000278 0100A0E3 MOV R0,#+1 \ 0000027C 480100EF SWI +328 3263 UnlockSched(); \ 00000280 470100EF SWI +327 3264 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000284 D40195E5 LDR R0,[R5, #+468] \ 00000288 0820A0E1 MOV R2,R8 \ 0000028C D830A0E3 MOV R3,#+216 \ 00000290 930001E0 MUL R1,R3,R0 \ 00000294 AC00A0E3 MOV R0,#+172 \ 00000298 F00E80E3 ORR R0,R0,#0xF00 \ 0000029C BEFFFFEA B ??create_connect_8 3265 3266 } 3267 } 3268 else 3269 { 3270 LockSched(); \ ??create_connect_11: \ 000002A0 460100EF SWI +326 3271 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 000002A4 141086E2 ADD R1,R6,#+20 \ 000002A8 0100A0E3 MOV R0,#+1 \ 000002AC 480100EF SWI +328 3272 UnlockSched(); \ 000002B0 470100EF SWI +327 3273 //Не осилили создания сокета, закрываем GPRS-сессию 3274 GPRS_OnOff(0,1); \ 000002B4 0110A0E3 MOV R1,#+1 \ 000002B8 0000A0E3 MOV R0,#+0 \ 000002BC 8E0100EF SWI +398 \ 000002C0 E5FFFFEA B ??create_connect_7 3275 } 3276 } 3277 } 3278 else 3279 { 3280 DNR_TRIES--; \ ??create_connect_9: \ 000002C4 380395E5 LDR R0,[R5, #+824] \ 000002C8 010040E2 SUB R0,R0,#+1 \ 000002CC 380385E5 STR R0,[R5, #+824] 3281 LockSched(); \ 000002D0 460100EF SWI +326 3282 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002D4 0610A0E1 MOV R1,R6 \ 000002D8 0100A0E3 MOV R0,#+1 \ 000002DC 480100EF SWI +328 3283 UnlockSched(); \ 000002E0 470100EF SWI +327 \ ??create_connect_10: \ 000002E4 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002E8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 000002EC 0A000000 DC8 "\n",+0,+0 \ 000002F0 ........ DC32 `?=0) \ 00000004 ........ LDR R4,??DataTable61 ;; S_ICONS \ 00000008 840294E5 LDR R0,[R4, #+644] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 3304 { 3305 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 3306 closesocket(sock); \ 0000001C 840294E5 LDR R0,[R4, #+644] \ 00000020 760100EF SWI +374 3307 } 3308 #ifdef SEND_TIMER 3309 GBS_DelTimer(&send_tmr); 3310 #endif 3311 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 3312 3313 #ifdef SEND_TIMER 3314 static void resend(void) 3315 { 3316 void SendAnswer(int dummy, TPKT *p); 3317 SUBPROC((void*)SendAnswer,0,0); 3318 } 3319 #endif 3320 \ In segment CODE, align 4, keep-with-next 3321 void SendAnswer(int dummy, TPKT *p) 3322 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 3323 int i; 3324 int j; 3325 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable61 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 800294E5 LDR R0,[R4, #+640] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 3326 { 3327 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 3328 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 3329 } 3330 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 3331 { 3332 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 3333 TOTALSENDED+=j; \ 00000034 8C0294E5 LDR R0,[R4, #+652] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 8C0284E5 STR R0,[R4, #+652] 3334 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 940294E5 LDR R0,[R4, #+660] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 940284E5 STR R0,[R4, #+660] 3335 //Проверяем, не надо ли добавить в очередь 3336 if (sendq_p) \ 0000004C 9C0294E5 LDR R0,[R4, #+668] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 3337 { 3338 //Есть очередь, добавляем в нее 3339 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 981294E5 LDR R1,[R4, #+664] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 9C0284E5 STR R0,[R4, #+668] 3340 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 980294E5 LDR R0,[R4, #+664] \ 0000006C 9C3294E5 LDR R3,[R4, #+668] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 3341 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 3342 sendq_l+=j; \ 00000088 980294E5 LDR R0,[R4, #+664] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 980284E5 STR R0,[R4, #+664] 3343 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 3344 } 3345 sendq_p=p; \ ??SendAnswer_2: \ 00000098 9C6284E5 STR R6,[R4, #+668] 3346 sendq_l=j; \ 0000009C 985284E5 STR R5,[R4, #+664] \ 000000A0 080000EA B ??SendAnswer_1 3347 } 3348 //Отправляем уже существующее в очереди 3349 while((i=sendq_l)!=0) 3350 { 3351 if (i>0x400) i=0x400; 3352 j=send(sock,(void *)sendq_p,i,0); 3353 snprintf(logmsg,255,"send res %d",j); 3354 SMART_REDRAW(); 3355 if (j<0) 3356 { 3357 j=*socklasterr(); 3358 if ((j==0xC9)||(j==0xD6)) 3359 { 3360 //Передали что хотели 3361 strcpy(logmsg,"Send delayed..."); 3362 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 3363 } 3364 else 3365 { 3366 //Ошибка 3367 LockSched(); 3368 ShowMSG(1,(int)"Send error!"); 3369 UnlockSched(); 3370 end_socket(); 3371 return; 3372 } 3373 } 3374 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 980294E5 LDR R0,[R4, #+664] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC 982284E5 STR R2,[R4, #+664] \ 000000B0 9C0294E5 LDR R0,[R4, #+668] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 3375 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000056E1 CMP R6,R0 \ 000000EC 840294E5 LDR R0,[R4, #+644] \ 000000F0 406EA0A3 MOVGE R6,#+1024 \ 000000F4 0030A0E3 MOV R3,#+0 \ 000000F8 0620A0E1 MOV R2,R6 \ 000000FC 790100EF SWI +377 \ 00000100 0050A0E1 MOV R5,R0 \ 00000104 8C80A0E3 MOV R8,#+140 \ 00000108 E08E88E3 ORR R8,R8,#0xE00 \ 0000010C 0530A0E1 MOV R3,R5 \ 00000110 1C2089E2 ADD R2,R9,#+28 \ 00000114 FF10A0E3 MOV R1,#+255 \ 00000118 040088E0 ADD R0,R8,R4 \ 0000011C 1B0100EF SWI +283 \ 00000120 ........ BL SMART_REDRAW \ 00000124 000055E3 CMP R5,#+0 \ 00000128 DDFFFF5A BPL ??SendAnswer_3 \ 0000012C 7C8100EF SWI +33148 \ 00000130 005090E5 LDR R5,[R0, #+0] \ 00000134 C90055E3 CMP R5,#+201 \ 00000138 D6005513 CMPNE R5,#+214 \ 0000013C 0300001A BNE ??SendAnswer_6 \ 00000140 0C1089E2 ADD R1,R9,#+12 \ 00000144 040088E0 ADD R0,R8,R4 \ 00000148 1A0000EF SWI +26 \ 0000014C F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 00000150 460100EF SWI +326 \ 00000154 0910A0E1 MOV R1,R9 \ 00000158 0100A0E3 MOV R0,#+1 \ 0000015C 480100EF SWI +328 \ 00000160 470100EF SWI +327 \ 00000164 ........ BL end_socket \ 00000168 F083BDE8 POP {R4-R9,PC} 3384 } 3385 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 0000016C 0100A0E1 MOV R0,R1 \ 00000170 150000EF SWI +21 3386 sendq_p=NULL; \ 00000174 9C7284E5 STR R7,[R4, #+668] 3387 } \ 00000178 F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 0000017C ........ DC32 `?` 3388 3389 \ In segment CODE, align 4, keep-with-next 3390 void send_login(int dummy, TPKT *p) 3391 { 3392 connect_state=2; 3393 char rev[16]; 3394 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 3395 //А Вова будет банить на форуме! 3396 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,??DataTable61 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0050A0E1 MOV R5,R0 \ 00000014 0160A0E1 MOV R6,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 800284E5 STR R0,[R4, #+640] \ 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 3397 3398 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 3399 p2->pkt.uin=UIN; \ 00000040 1C0194E5 LDR R0,[R4, #+284] 3400 p2->pkt.type=T_SETCLIENT_ID; 3401 p2->pkt.data_len=8; 3402 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 3403 SendAnswer(0,p2); \ 00000068 0710A0E1 MOV R1,R7 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 ........ BL SendAnswer 3404 SendAnswer(dummy,p); \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C ........ BL SendAnswer 3405 RXstate=-(int)sizeof(PKT); \ 00000080 0700E0E3 MVN R0,#+7 \ 00000084 7C0284E5 STR R0,[R4, #+636] 3406 } \ 00000088 FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 0000008C ........ DC32 `?` 3407 \ In segment CODE, align 4, keep-with-next 3408 void do_ping(void) 3409 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 3410 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 3411 pingp->pkt.uin=UIN; \ 0000000C 20109FE5 LDR R1,??do_ping_0 ;; S_ICONS + 284 \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 3412 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 3413 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3414 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 + 284 3415 } 3416 \ In segment CODE, align 4, keep-with-next 3417 void SendMSGACK(int i) 3418 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3419 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3420 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 3421 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3422 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3423 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3424 } 3425 \ In segment CODE, align 4, keep-with-next 3426 void RequestXText(unsigned int uin) 3427 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3428 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3429 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 3430 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3431 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3432 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable58 ;; SendAnswer \ 0000002C 710100EF SWI +369 3433 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 3434 3435 extern int main2_count; 3436 3437 int ping_time; 3438 //#ifdef EVILFOX 3439 //#else 3440 3441 //#endif 3442 char I_UIN[9]; 3443 \ In segment CODE, align 4, keep-with-next 3444 void get_answer(void) 3445 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3446 void *p; 3447 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable61 ;; S_ICONS \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 3448 int j; 3449 int n; 3450 char rb[1024]; 3451 char *rp=rb; 3452 if (connect_state<2) return; \ 00000010 800295E5 LDR R0,[R5, #+640] \ 00000014 7C8295E5 LDR R8,[R5, #+636] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 660100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 6401000A BEQ ??get_answer_1 3453 if (i==EOP) return; 3454 j=recv(sock,rb,sizeof(rb),0); \ 00000030 840295E5 LDR R0,[R5, #+644] \ 00000034 ........ LDR R10,??DataTable60 ;; `?0) 3456 { 3457 if (i<0) 3458 { 3459 //Принимаем заголовок 3460 n=-i; //Требуемое количество байт 3461 if (j=0) 3468 { 3469 //Принимаем тельце ;) 3470 n=RXbuf.pkt.data_len; //Всего в тельце 3471 if (n>16383) 3472 { 3473 //Слишком много 3474 strcpy(logmsg,LG_GRBADPACKET); 3475 end_socket(); 3476 RXstate=EOP; 3477 return; 3478 } 3479 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 3480 if (n>0) 3481 { 3482 if (jhour*3600+pt->min*60+pt->sec; 3625 s1-=s2; 3626 if (s1<0) s1+=86400; 3627 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 3628 sprintf(PINGO, "Ping: %dsec",s1); 3629 LockSched(); 3630 if(janis==1) 3631 { 3632 ShowMSG(1,(int)logmsg); 3633 Play(pingsnd); 3634 janis=0; 3635 } 3636 else 3637 { 3638 if(ping_time==0) 3639 { 3640 ping_time=ping_time_config; 3641 Play(pingsnd); 3642 } 3643 else 3644 ping_time--; 3645 } 3646 UnlockSched(); 3647 } 3648 break; 3649 case T_LASTPRIVACY: 3650 n=i+sizeof(PKT); \ ??get_answer_3: \ 00000054 0040A0E1 MOV R4,R0 3651 p=malloc(n); \ ??get_answer_4: \ 00000058 140000EF SWI +20 \ 0000005C 00B0A0E1 MOV R11,R0 3652 memcpy(p,&RXbuf,n); \ 00000060 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 00000064 0710A0E1 MOV R1,R7 \ 00000068 1E0100EF SWI +286 3653 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 0000006C 840295E5 LDR R0,[R5, #+644] \ 00000070 0B30A0E1 MOV R3,R11 \ 00000074 01002DE9 PUSH {R0} \ 00000078 0020A0E3 MOV R2,#+0 \ 0000007C 0810A0E1 MOV R1,R8 \ 00000080 0900A0E1 MOV R0,R9 \ 00000084 000100EF SWI +256 \ ??get_answer_6: \ 00000088 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 3654 break; 3655 } 3656 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 0000008C 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 00000090 010056E3 CMP R6,#+1 \ 00000094 490100BA BLT ??get_answer_8 \ 00000098 34759FE5 LDR R7,??get_answer_9+0x4 ;; RXbuf \ 0000009C 000058E3 CMP R8,#+0 \ 000000A0 0C00005A BPL ??get_answer_10 \ 000000A4 00109DE5 LDR R1,[SP, #+0] \ 000000A8 004068E2 RSB R4,R8,#+0 \ 000000AC 040056E1 CMP R6,R4 \ 000000B0 0640A0B1 MOVLT R4,R6 \ 000000B4 0420A0E1 MOV R2,R4 \ 000000B8 070088E0 ADD R0,R8,R7 \ 000000BC 080080E2 ADD R0,R0,#+8 \ 000000C0 1E0100EF SWI +286 \ 000000C4 00109DE5 LDR R1,[SP, #+0] \ 000000C8 088084E0 ADD R8,R4,R8 \ 000000CC 046046E0 SUB R6,R6,R4 \ 000000D0 011084E0 ADD R1,R4,R1 \ 000000D4 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D8 000058E3 CMP R8,#+0 \ 000000DC EBFFFF4A BMI ??get_answer_2 \ 000000E0 B640D7E1 LDRH R4,[R7, #+6] \ 000000E4 400C54E3 CMP R4,#+16384 \ 000000E8 0C0000BA BLT ??get_answer_11 \ 000000EC F400A0E3 MOV R0,#+244 \ 000000F0 500E80E3 ORR R0,R0,#0x500 \ 000000F4 0A1080E0 ADD R1,R0,R10 \ 000000F8 8C00A0E3 MOV R0,#+140 \ 000000FC E00E80E3 ORR R0,R0,#0xE00 \ 00000100 050080E0 ADD R0,R0,R5 \ 00000104 1A0000EF SWI +26 \ 00000108 ........ BL end_socket \ 0000010C 0900E0E3 MVN R0,#+9 \ 00000110 7C0285E5 STR R0,[R5, #+636] \ 00000114 1CD08DE2 ADD SP,SP,#+28 \ 00000118 40DE8DE2 ADD SP,SP,#+1024 \ 0000011C F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000120 084044E0 SUB R4,R4,R8 \ 00000124 010054E3 CMP R4,#+1 \ 00000128 0B0000BA BLT ??get_answer_12 \ 0000012C 00109DE5 LDR R1,[SP, #+0] \ 00000130 040056E1 CMP R6,R4 \ 00000134 0640A0B1 MOVLT R4,R6 \ 00000138 0420A0E1 MOV R2,R4 \ 0000013C 070088E0 ADD R0,R8,R7 \ 00000140 080080E2 ADD R0,R0,#+8 \ 00000144 1E0100EF SWI +286 \ 00000148 00109DE5 LDR R1,[SP, #+0] \ 0000014C 088084E0 ADD R8,R4,R8 \ 00000150 046046E0 SUB R6,R6,R4 \ 00000154 011084E0 ADD R1,R4,R1 \ 00000158 00108DE5 STR R1,[SP, #+0] \ ??get_answer_12: \ 0000015C B600D7E1 LDRH R0,[R7, #+6] \ 00000160 080050E1 CMP R0,R8 \ 00000164 C9FFFF1A BNE ??get_answer_2 \ 00000168 881295E5 LDR R1,[R5, #+648] \ 0000016C 080088E2 ADD R0,R8,#+8 \ 00000170 011080E0 ADD R1,R0,R1 \ 00000174 881285E5 STR R1,[R5, #+648] \ 00000178 901295E5 LDR R1,[R5, #+656] \ 0000017C 0020A0E3 MOV R2,#+0 \ 00000180 011080E0 ADD R1,R0,R1 \ 00000184 901285E5 STR R1,[R5, #+656] \ 00000188 071088E0 ADD R1,R8,R7 \ 0000018C 0820C1E5 STRB R2,[R1, #+8] \ 00000190 B410D7E1 LDRH R1,[R7, #+4] \ 00000194 094088E2 ADD R4,R8,#+9 \ 00000198 AE80A0E3 MOV R8,#+174 \ 0000019C DE8C88E3 ORR R8,R8,#0xDE00 \ 000001A0 031041E2 SUB R1,R1,#+3 \ 000001A4 1C0051E3 CMP R1,#+28 \ 000001A8 B7FFFF8A BHI ??get_answer_7 \ 000001AC 022F8FE2 ADR R2,??get_answer_0 \ 000001B0 8110A0E1 MOV R1,R1, LSL #+1 \ 000001B4 F12092E1 LDRSH R2,[R2, R1] \ 000001B8 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001BC 52000E00B3FF DC16 +82,+14,+65459,+73 \ 4900 \ 000001C4 2D00B3FF2F00 DC16 +45,+65459,+47,+65459 \ B3FF \ 000001CC B3FFB3FFA900 DC16 +65459,+65459,+169,+65459 \ B3FF \ 000001D4 B3FFAF00B700 DC16 +65459,+175,+183,+65459 \ B3FF \ 000001DC BC002D002D00 DC16 +188,+45,+45,+65459 \ B3FF \ 000001E4 B3FFB3FF2D00 DC16 +65459,+65459,+45,+65459 \ B3FF \ 000001EC B3FFB3FFB3FF DC16 +65459,+65459,+65459,+65459 \ B3FF \ 000001F4 A5FF0000 DC16 +65445,+0 \ ??get_answer_13: \ 000001F8 0400A0E1 MOV R0,R4 \ 000001FC 140000EF SWI +20 \ 00000200 00B0A0E1 MOV R11,R0 \ 00000204 0420A0E1 MOV R2,R4 \ 00000208 0710A0E1 MOV R1,R7 \ 0000020C 1E0100EF SWI +286 \ 00000210 840295E5 LDR R0,[R5, #+644] \ 00000214 0B30A0E1 MOV R3,R11 \ 00000218 01002DE9 PUSH {R0} \ 0000021C 0020A0E3 MOV R2,#+0 \ 00000220 0810A0E1 MOV R1,R8 \ 00000224 0900A0E1 MOV R0,R9 \ 00000228 000100EF SWI +256 \ 0000022C 8400A0E3 MOV R0,#+132 \ 00000230 600E80E3 ORR R0,R0,#0x600 \ 00000234 050080E0 ADD R0,R0,R5 \ 00000238 ........ BL Play \ 0000023C 083087E2 ADD R3,R7,#+8 \ 00000240 E22F8FE2 ADR R2,??get_answer_9 ;; "%s" \ 00000244 FF10A0E3 MOV R1,#+255 \ 00000248 8C00A0E3 MOV R0,#+140 \ 0000024C E00E80E3 ORR R0,R0,#0xE00 \ 00000250 050080E0 ADD R0,R0,R5 \ 00000254 1B0100EF SWI +283 \ 00000258 0300A0E3 MOV R0,#+3 \ 0000025C 800285E5 STR R0,[R5, #+640] \ 00000260 3C0395E5 LDR R0,[R5, #+828] \ 00000264 010040E2 SUB R0,R0,#+1 \ 00000268 3C0385E5 STR R0,[R5, #+828] \ 0000026C ........ BL SMART_REDRAW \ 00000270 84FFFFEA B ??get_answer_6 \ ??get_answer_14: \ 00000274 0400A0E1 MOV R0,R4 \ 00000278 76FFFFEA B ??get_answer_4 \ ??get_answer_15: \ 0000027C 0040A0E1 MOV R4,R0 \ 00000280 140000EF SWI +20 \ 00000284 00B0A0E1 MOV R11,R0 \ 00000288 0420A0E1 MOV R2,R4 \ 0000028C 0710A0E1 MOV R1,R7 \ 00000290 1E0100EF SWI +286 \ 00000294 B800D7E1 LDRH R0,[R7, #+8] \ 00000298 FF10A0E3 MOV R1,#+255 \ 0000029C 01002DE9 PUSH {R0} \ 000002A0 003097E5 LDR R3,[R7, #+0] \ 000002A4 E800A0E3 MOV R0,#+232 \ 000002A8 500E80E3 ORR R0,R0,#0x500 \ 000002AC 0A2080E0 ADD R2,R0,R10 \ 000002B0 8C00A0E3 MOV R0,#+140 \ 000002B4 E00E80E3 ORR R0,R0,#0xE00 \ 000002B8 050080E0 ADD R0,R0,R5 \ 000002BC 1B0100EF SWI +283 \ 000002C0 840295E5 LDR R0,[R5, #+644] \ 000002C4 0B30A0E1 MOV R3,R11 \ 000002C8 01002DE9 PUSH {R0} \ 000002CC 0020A0E3 MOV R2,#+0 \ 000002D0 0810A0E1 MOV R1,R8 \ 000002D4 0900A0E1 MOV R0,R9 \ 000002D8 000100EF SWI +256 \ 000002DC 08D08DE2 ADD SP,SP,#+8 \ 000002E0 69FFFFEA B ??get_answer_7 \ ??get_answer_16: \ 000002E4 083087E2 ADD R3,R7,#+8 \ 000002E8 5E2E8AE2 ADD R2,R10,#+1504 \ 000002EC FF10A0E3 MOV R1,#+255 \ 000002F0 8C00A0E3 MOV R0,#+140 \ 000002F4 E00E80E3 ORR R0,R0,#0xE00 \ 000002F8 050080E0 ADD R0,R0,R5 \ 000002FC 1B0100EF SWI +283 \ 00000300 ........ BL SMART_REDRAW \ 00000304 60FFFFEA B ??get_answer_7 \ ??get_answer_17: \ 00000308 0400A0E1 MOV R0,R4 \ 0000030C 140000EF SWI +20 \ 00000310 00B0A0E1 MOV R11,R0 \ 00000314 0420A0E1 MOV R2,R4 \ 00000318 0710A0E1 MOV R1,R7 \ 0000031C 1E0100EF SWI +286 \ 00000320 08008BE2 ADD R0,R11,#+8 \ 00000324 030000EA B ??get_answer_18 \ ??get_answer_19: \ 00000328 030051E3 CMP R1,#+3 \ 0000032C 2010A0B3 MOVLT R1,#+32 \ 00000330 0010C0B5 STRBLT R1,[R0, #+0] \ 00000334 010080E2 ADD R0,R0,#+1 \ ??get_answer_18: \ 00000338 0010D0E5 LDRB R1,[R0, #+0] \ 0000033C 000051E3 CMP R1,#+0 \ 00000340 F8FFFF1A BNE ??get_answer_19 \ 00000344 002097E5 LDR R2,[R7, #+0] \ 00000348 6C00A0E3 MOV R0,#+108 \ 0000034C 440D80E3 ORR R0,R0,#0x1100 \ 00000350 054080E0 ADD R4,R0,R5 \ 00000354 D800A0E3 MOV R0,#+216 \ 00000358 500E80E3 ORR R0,R0,#0x500 \ 0000035C 0A1080E0 ADD R1,R0,R10 \ 00000360 0400A0E1 MOV R0,R4 \ 00000364 160000EF SWI +22 \ 00000368 0410A0E1 MOV R1,R4 \ 0000036C 6800A0E3 MOV R0,#+104 \ 00000370 500E80E3 ORR R0,R0,#0x500 \ 00000374 050080E0 ADD R0,R0,R5 \ 00000378 180100EF SWI +280 \ 0000037C 000050E3 CMP R0,#+0 \ 00000380 41FFFF1A BNE ??get_answer_7 \ 00000384 080087E2 ADD R0,R7,#+8 \ 00000388 01002DE9 PUSH {R0} \ 0000038C 003097E5 LDR R3,[R7, #+0] \ 00000390 FF10A0E3 MOV R1,#+255 \ 00000394 8440A0E3 MOV R4,#+132 \ 00000398 CC00A0E3 MOV R0,#+204 \ 0000039C 500E80E3 ORR R0,R0,#0x500 \ 000003A0 0A2080E0 ADD R2,R0,R10 \ 000003A4 8C0E80E2 ADD R0,R0,#+2240 \ 000003A8 050080E0 ADD R0,R0,R5 \ 000003AC 1B0100EF SWI +283 \ 000003B0 880295E5 LDR R0,[R5, #+648] \ 000003B4 704E84E3 ORR R4,R4,#0x700 \ 000003B8 ........ BL SendMSGACK \ 000003BC 840295E5 LDR R0,[R5, #+644] \ 000003C0 0B30A0E1 MOV R3,R11 \ 000003C4 01002DE9 PUSH {R0} \ 000003C8 0020A0E3 MOV R2,#+0 \ 000003CC 0810A0E1 MOV R1,R8 \ 000003D0 0900A0E1 MOV R0,R9 \ 000003D4 000100EF SWI +256 \ 000003D8 ........ BL SMART_REDRAW \ 000003DC C80195E5 LDR R0,[R5, #+456] \ 000003E0 08D08DE2 ADD SP,SP,#+8 \ 000003E4 000050E3 CMP R0,#+0 \ 000003E8 0200001A BNE ??get_answer_20 \ 000003EC 050084E0 ADD R0,R4,R5 \ ??get_answer_21: \ 000003F0 ........ BL Play \ 000003F4 24FFFFEA B ??get_answer_7 \ ??get_answer_20: \ 000003F8 000097E5 LDR R0,[R7, #+0] \ 000003FC 0010A0E3 MOV R1,#+0 \ 00000400 EC0185E5 STR R0,[R5, #+492] \ 00000404 08108DE5 STR R1,[SP, #+8] \ 00000408 EC3195E5 LDR R3,[R5, #+492] \ 0000040C C07F84E2 ADD R7,R4,#+768 \ 00000410 400084E3 ORR R0,R4,#0x40 \ 00000414 052080E0 ADD R2,R0,R5 \ 00000418 5C1E8AE2 ADD R1,R10,#+1472 \ 0000041C 050087E0 ADD R0,R7,R5 \ 00000420 160000EF SWI +22 \ 00000424 08308DE2 ADD R3,SP,#+8 \ 00000428 8020A0E3 MOV R2,#+128 \ 0000042C 801CA0E3 MOV R1,#+32768 \ 00000430 050087E0 ADD R0,R7,R5 \ 00000434 0A0000EF SWI +10 \ 00000438 04008DE5 STR R0,[SP, #+4] \ 0000043C 04009DE5 LDR R0,[SP, #+4] \ 00000440 010070E3 CMN R0,#+1 \ 00000444 0400000A BEQ ??get_answer_22 \ 00000448 04009DE5 LDR R0,[SP, #+4] \ 0000044C 08108DE2 ADD R1,SP,#+8 \ 00000450 0D0000EF SWI +13 \ 00000454 050087E0 ADD R0,R7,R5 \ 00000458 E4FFFFEA B ??get_answer_21 \ ??get_answer_22: \ 0000045C 050084E0 ADD R0,R4,R5 \ 00000460 E2FFFFEA B ??get_answer_21 \ ??get_answer_23: \ 00000464 460100EF SWI +326 \ 00000468 081087E2 ADD R1,R7,#+8 \ 0000046C 0100A0E3 MOV R0,#+1 \ 00000470 480100EF SWI +328 \ ??get_answer_24: \ 00000474 470100EF SWI +327 \ 00000478 03FFFFEA B ??get_answer_7 \ ??get_answer_25: \ 0000047C 0700A0E1 MOV R0,R7 \ 00000480 ........ BL FindContactLOGQByAck \ 00000484 000050E3 CMP R0,#+0 \ 00000488 0300000A BEQ ??get_answer_26 \ 0000048C 0400A0E3 MOV R0,#+4 \ 00000490 800E80E3 ORR R0,R0,#0x800 \ 00000494 050080E0 ADD R0,R0,R5 \ 00000498 ........ BL Play \ ??get_answer_26: \ 0000049C 0A00A0E3 MOV R0,#+10 \ 000004A0 140000EF SWI +20 \ 000004A4 00B0A0E1 MOV R11,R0 \ 000004A8 0A20A0E3 MOV R2,#+10 \ 000004AC ECFEFFEA B ??get_answer_5 \ ??get_answer_27: \ 000004B0 0C108DE2 ADD R1,SP,#+12 \ 000004B4 14008DE2 ADD R0,SP,#+20 \ 000004B8 B40000EF SWI +180 \ 000004BC 0C00DDE5 LDRB R0,[SP, #+12] \ 000004C0 0D20DDE5 LDRB R2,[SP, #+13] \ 000004C4 E11EA0E3 MOV R1,#+3600 \ 000004C8 3C30A0E3 MOV R3,#+60 \ 000004CC 930202E0 MUL R2,R3,R2 \ 000004D0 912020E0 MLA R0,R1,R0,R2 \ 000004D4 0E10DDE5 LDRB R1,[SP, #+14] \ 000004D8 E12EA0E3 MOV R2,#+3600 \ 000004DC 000081E0 ADD R0,R1,R0 \ 000004E0 0810D7E5 LDRB R1,[R7, #+8] \ 000004E4 920101E0 MUL R1,R2,R1 \ 000004E8 3C20A0E3 MOV R2,#+60 \ 000004EC 010040E0 SUB R0,R0,R1 \ 000004F0 0910D7E5 LDRB R1,[R7, #+9] \ 000004F4 920101E0 MUL R1,R2,R1 \ 000004F8 010040E0 SUB R0,R0,R1 \ 000004FC 0A10D7E5 LDRB R1,[R7, #+10] \ 00000500 D0709FE5 LDR R7,??get_answer_9+0x8 ;; janis \ 00000504 014050E0 SUBS R4,R0,R1 \ 00000508 500BA043 MOVMI R0,#+81920 \ 0000050C 460D8043 ORRMI R0,R0,#0x1180 \ 00000510 04408040 ADDMI R4,R0,R4 \ 00000514 010084E2 ADD R0,R4,#+1 \ 00000518 01002DE9 PUSH {R0} \ 0000051C 0430A0E1 MOV R3,R4 \ 00000520 FF10A0E3 MOV R1,#+255 \ 00000524 570E82E2 ADD R0,R2,#+1392 \ 00000528 0A2080E0 ADD R2,R0,R10 \ 0000052C 8E0E80E2 ADD R0,R0,#+2272 \ 00000530 050080E0 ADD R0,R0,R5 \ 00000534 1B0100EF SWI +283 \ 00000538 0420A0E1 MOV R2,R4 \ 0000053C 5A1E8AE2 ADD R1,R10,#+1440 \ 00000540 5400A0E3 MOV R0,#+84 \ 00000544 B00E80E3 ORR R0,R0,#0xB00 \ 00000548 050080E0 ADD R0,R0,R5 \ 0000054C 160000EF SWI +22 \ 00000550 460100EF SWI +326 \ 00000554 000097E5 LDR R0,[R7, #+0] \ 00000558 4440A0E3 MOV R4,#+68 \ 0000055C 804E84E3 ORR R4,R4,#0x800 \ 00000560 010050E3 CMP R0,#+1 \ 00000564 04D08DE2 ADD SP,SP,#+4 \ 00000568 0900001A BNE ??get_answer_28 \ 0000056C 8C00A0E3 MOV R0,#+140 \ 00000570 E00E80E3 ORR R0,R0,#0xE00 \ 00000574 051080E0 ADD R1,R0,R5 \ 00000578 0100A0E3 MOV R0,#+1 \ 0000057C 480100EF SWI +328 \ 00000580 050084E0 ADD R0,R4,R5 \ 00000584 ........ BL Play \ 00000588 0000A0E3 MOV R0,#+0 \ 0000058C 000087E5 STR R0,[R7, #+0] \ 00000590 B7FFFFEA B ??get_answer_24 \ ??get_answer_28: \ 00000594 400395E5 LDR R0,[R5, #+832] \ 00000598 000050E3 CMP R0,#+0 \ 0000059C 0400001A BNE ??get_answer_29 \ 000005A0 FC0095E5 LDR R0,[R5, #+252] \ 000005A4 400385E5 STR R0,[R5, #+832] \ 000005A8 050084E0 ADD R0,R4,R5 \ 000005AC ........ BL Play \ 000005B0 AFFFFFEA B ??get_answer_24 \ ??get_answer_29: \ 000005B4 010040E2 SUB R0,R0,#+1 \ 000005B8 400385E5 STR R0,[R5, #+832] \ 000005BC ACFFFFEA B ??get_answer_24 3657 } 3658 } 3659 } 3660 RXstate=i; \ ??get_answer_8: \ 000005C0 7C8285E5 STR R8,[R5, #+636] 3661 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 3662 // SMART_REDRAW(); 3663 } \ ??get_answer_1: \ 000005C4 1CD08DE2 ADD SP,SP,#+28 \ 000005C8 40DE8DE2 ADD SP,SP,#+1024 \ 000005CC F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 000005D0 25730000 DC8 "%s",+0 \ 000005D4 ........ DC32 RXbuf \ 000005D8 ........ DC32 janis 3664 3665 3666 extern int main_count; 3667 3668 //=====================add to main info==================== 3669 3670 //Сюда я не лез...kluchnik 3671 3672 char a_txt[45]; 3673 char s_txt[45]; 3674 char d_txt[45]; 3675 char f_txt[45]; 3676 char g_txt[45]; 3677 //char de[64]; 3678 //char du[38]; 3679 3680 \ In segment CODE, align 4, keep-with-next 3681 void AddToMain(const char *nameu,char *si) 3682 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3683 char *de=malloc(64); 3684 int text_l; 3685 int iz; 3686 int name_l; 3687 name_l=0; 3688 text_l=0; 3689 name_l=strlen(nameu); 3690 // char *du=malloc(64);a_txt 3691 iz=0; 3692 #ifdef ELKA 3693 text_l=main_lenght-name_l; 3694 #else 3695 text_l=main_lenght-name_l; \ 00000004 ........ LDR R6,??DataTable61 ;; 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 081196E5 LDR R1,[R6, #+264] \ 0000002C 0080A0E3 MOV R8,#+0 \ 00000030 00A041E0 SUB R10,R1,R0 3696 #endif 3697 3698 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 3699 { 3700 /* 3701 char *du=malloc(text_l); 3702 strncpy(du,si,text_l); 3703 sprintf(de,"%s%s",du,"..."); 3704 mfree(du); 3705 } 3706 */ 3707 while(text_l!=0) 3708 { 3709 de[iz]=si[iz]; 3710 iz++; 3711 text_l--; 3712 } 3713 if(use_cutter) 3714 { 3715 de[iz]='.'; 3716 iz++; 3717 de[iz]='.'; 3718 iz++; 3719 de[iz]='.'; 3720 iz++; 3721 } 3722 de[iz]='\0'; 3723 } 3724 else 3725 strcpy(de, si); \ 00000048 0910A0E1 MOV R1,R9 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 3726 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 0C1196E5 LDR R1,[R6, #+268] \ 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 3727 while(strlen(de)!=iz) 3728 { 3729 // if(d[i]==0x2A) d[i]=0x20; 3730 // if(d[i]==0x27) d[i]=0x20; 3731 // if(d[i]==0x22) d[i]=0x20; 3732 // if(d[i]==0x26) d[i]=0x20; 3733 // if(d[i]==0x3D) d[i]=0x20; 3734 // if(d[i]==0x3C) d[i]=0x20; 3735 // if(d[i]==0x3E) d[i]=0x20; 3736 // if(d[i]==0x7B) d[i]=0x20; 3737 // if(d[i]==0x7D) d[i]=0x20; 3738 // if(d[i]==0x5B) d[i]=0x20; 3739 // if(d[i]==0x5D) d[i]=0x20; 3740 // if(d[i]==0x23) d[i]=0x20; 3741 // if(d[i]==0x2F) d[i]=0x20; 3742 // if(d[i]==0x5C) d[i]=0x20; 3743 // if(d[i]==0x7E) d[i]=0x20; 3744 // if(d[i]==0x5E) d[i]=0x20; 3745 // if(d[i]==0xAC) d[i]=0x20; 3746 // if(d[i]==0xA3) d[i]=0x20; 3747 // if(d[i]==0x24) d[i]=0x20; 3748 // if(d[i]==0xA5) d[i]=0x20; 3749 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] 3750 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B4 0510D8E7 LDRB R1,[R8, +R5] \ 000000B8 0A0051E3 CMP R1,#+10 \ 000000BC 0500C807 STRBEQ R0,[R8, +R5] 3751 iz++; \ 000000C0 018088E2 ADD R8,R8,#+1 3752 } \ ??AddToMain_2: \ 000000C4 0500A0E1 MOV R0,R5 \ 000000C8 1B0000EF SWI +27 \ 000000CC 080050E1 CMP R0,R8 \ 000000D0 F3FFFF1A BNE ??AddToMain_5 3753 de[iz]='\0'; \ 000000D4 0570C8E7 STRB R7,[R8, +R5] 3754 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable62 ;; main_count \ 000000DC 44719FE5 LDR R7,??AddToMain_6 ;; `?` \ 000000E0 7810A0E3 MOV R1,#+120 \ 000000E4 441D81E3 ORR R1,R1,#0x1100 \ 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 3755 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000110 A810A0E3 MOV R1,#+168 \ 00000114 441D81E3 ORR R1,R1,#0x1100 \ 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 3756 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000140 D800A0E3 MOV R0,#+216 \ 00000144 440D80E3 ORR R0,R0,#0x1100 \ 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 3757 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 0000016C 0800A0E3 MOV R0,#+8 \ 00000170 480D80E3 ORR R0,R0,#0x1200 \ 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 3758 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000198 3800A0E3 MOV R0,#+56 \ 0000019C 480D80E3 ORR R0,R0,#0x1200 \ 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 3759 if(main_count>4) \ ??AddToMain_11: \ 000001C4 000098E5 LDR R0,[R8, #+0] \ 000001C8 050050E3 CMP R0,#+5 \ 000001CC 100000BA BLT ??AddToMain_12 3760 { 3761 strcpy(a_txt, s_txt); \ 000001D0 00109DE5 LDR R1,[SP, #+0] \ 000001D4 04009DE5 LDR R0,[SP, #+4] \ 000001D8 1A0000EF SWI +26 3762 strcpy(s_txt, d_txt); \ 000001DC 00009DE5 LDR R0,[SP, #+0] \ 000001E0 0910A0E1 MOV R1,R9 \ 000001E4 1A0000EF SWI +26 3763 strcpy(d_txt, f_txt); \ 000001E8 0A10A0E1 MOV R1,R10 \ 000001EC 0900A0E1 MOV R0,R9 \ 000001F0 1A0000EF SWI +26 3764 strcpy(f_txt, g_txt); \ 000001F4 0B10A0E1 MOV R1,R11 \ 000001F8 0A00A0E1 MOV R0,R10 \ 000001FC 1A0000EF SWI +26 3765 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 3766 } 3767 mfree(de); \ ??AddToMain_12: \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 150000EF SWI +21 3768 main_d=1; \ 0000021C 0100A0E3 MOV R0,#+1 \ 00000220 DC0186E5 STR R0,[R6, #+476] 3769 } \ 00000224 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_6: \ 00000228 ........ DC32 `?` 3770 3771 //======================add to main info================ 3772 3773 int NEW_MSG; 3774 //int LOG_TIME_CONN=0;//not log online/offline time 3775 \ In segment CODE, align 4, keep-with-next 3776 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 3777 { \ AddStringToLog: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3778 char hs[128], *lastX; 3779 TTime tt; 3780 TDate d; 3781 GetDateTime(&d,&tt); 3782 int i; 3783 3784 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 3785 if ( code==3 && NOT_LOG_SAME_XTXT ) \ 00000004 ........ LDR R5,??DataTable74 ;; 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 980195E5 LDR R0,[R5, #+408] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 1100000A BEQ ??AddStringToLog_0 3786 { 3787 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000090 0700A0E1 MOV R0,R7 \ 00000094 01002DE9 PUSH {R0} \ 00000098 1000DDE5 LDRB R0,[SP, #+16] \ 0000009C 182089E2 ADD R2,R9,#+24 \ 000000A0 7F10A0E3 MOV R1,#+127 \ 000000A4 01002DE9 PUSH {R0} \ 000000A8 1500DDE5 LDRB R0,[SP, #+21] \ 000000AC 01002DE9 PUSH {R0} \ 000000B0 0D00DDE5 LDRB R0,[SP, #+13] \ 000000B4 01002DE9 PUSH {R0} \ 000000B8 1030DDE5 LDRB R3,[SP, #+16] \ 000000BC 20008DE2 ADD R0,SP,#+32 \ 000000C0 1B0100EF SWI +283 3794 if(code != 3 || ((LOG_XTXT) && (flag)))//Нужно сохранять иксстатус \ 000000C4 030056E3 CMP R6,#+3 \ 000000C8 10D08DE2 ADD SP,SP,#+16 \ 000000CC 0300001A BNE ??AddStringToLog_4 \ 000000D0 9C0195E5 LDR R0,[R5, #+412] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 00005B13 CMPNE R11,#+0 \ 000000DC 0400000A BEQ ??AddStringToLog_5 3795 Add2History(t, hs, s, code); \ ??AddStringToLog_4: \ 000000E0 0630A0E1 MOV R3,R6 \ 000000E4 0A20A0E1 MOV R2,R10 \ 000000E8 10108DE2 ADD R1,SP,#+16 \ 000000EC 0400A0E1 MOV R0,R4 \ 000000F0 ........ _BLF Add2History,??Add2History??rA 3796 3797 // ShowMSG(1,(int)t); 3798 // ShowMSG(1,(int)s); // Запись хистори 3799 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000F4 0A00A0E1 MOV R0,R10 \ 000000F8 ........ BL NewLOGQ \ 000000FC 00A0A0E1 MOV R10,R0 3800 snprintf(p->hdr,79,"%02d:%02d %02d-%02d %s:",tt.hour,tt.min,d.day,d.month,name); \ 00000100 80002DE9 PUSH {R7} \ 00000104 1000DDE5 LDRB R0,[SP, #+16] \ 00000108 0920A0E1 MOV R2,R9 \ 0000010C 4F10A0E3 MOV R1,#+79 \ 00000110 01002DE9 PUSH {R0} \ 00000114 1500DDE5 LDRB R0,[SP, #+21] \ 00000118 01002DE9 PUSH {R0} \ 0000011C 0D00DDE5 LDRB R0,[SP, #+13] \ 00000120 01002DE9 PUSH {R0} \ 00000124 1030DDE5 LDRB R3,[SP, #+16] \ 00000128 10008AE2 ADD R0,R10,#+16 \ 0000012C 1B0100EF SWI +283 3801 p->type=code; \ 00000130 0C608AE5 STR R6,[R10, #+12] 3802 p->ID=IDforACK; //0-32767 \ 00000134 08808AE5 STR R8,[R10, #+8] 3803 i=AddLOGQ(&t->log,p); \ 00000138 0A10A0E1 MOV R1,R10 \ 0000013C 700084E2 ADD R0,R4,#+112 \ 00000140 ........ BL AddLOGQ \ 00000144 0070A0E1 MOV R7,R0 \ 00000148 150057E3 CMP R7,#+21 \ 0000014C 10D08DE2 ADD SP,SP,#+16 \ 00000150 090000BA BLT ??AddStringToLog_6 3804 while(i>MAXLOGMSG) 3805 { 3806 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000154 780094E5 LDR R0,[R4, #+120] \ 00000158 701094E5 LDR R1,[R4, #+112] 3807 RemoveLOGQ(&t->log,t->log); 3808 i--; \ 0000015C 017047E2 SUB R7,R7,#+1 \ 00000160 000051E1 CMP R1,R0 \ 00000164 00009005 LDREQ R0,[R0, #+0] \ 00000168 78008405 STREQ R0,[R4, #+120] \ 0000016C 700084E2 ADD R0,R4,#+112 \ 00000170 ........ BL RemoveLOGQ 3809 } \ 00000174 150057E3 CMP R7,#+21 \ 00000178 F5FFFFAA BGE ??AddStringToLog_7 3810 t->msg_count=i; \ ??AddStringToLog_6: \ 0000017C 807084E5 STR R7,[R4, #+128] 3811 if (!t->last_log) t->last_log=p; \ 00000180 780094E5 LDR R0,[R4, #+120] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 78A08405 STREQ R10,[R4, #+120] 3812 if (code==3) \ 0000018C 030056E3 CMP R6,#+3 \ 00000190 0D00001A BNE ??AddStringToLog_8 3813 { 3814 if (edchat_id) \ 00000194 B40295E5 LDR R0,[R5, #+692] \ 00000198 000050E3 CMP R0,#+0 \ 0000019C 1C00000A BEQ ??AddStringToLog_9 3815 { 3816 void *data=FindGUIbyId(edchat_id,NULL); \ 000001A0 B40295E5 LDR R0,[R5, #+692] \ 000001A4 0010A0E3 MOV R1,#+0 \ 000001A8 090200EF SWI +521 3817 if (data) \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 1700000A BEQ ??AddStringToLog_9 3818 { 3819 EDCHAT_STRUCT *ed_struct; 3820 ed_struct=EDIT_GetUserPointer(data); \ 000001B4 DF0100EF SWI +479 3821 if (ed_struct) \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 1400000A BEQ ??AddStringToLog_9 3822 { 3823 if (ed_struct->ed_contact==t) \ 000001C0 000090E5 LDR R0,[R0, #+0] \ 000001C4 040050E1 CMP R0,R4 \ 000001C8 1100001A BNE ??AddStringToLog_9 3824 { 3825 goto L_INC; 3826 } 3827 } 3828 } 3829 } 3830 goto L_NOINC; 3831 } 3832 L_INC: 3833 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001CC 600094E5 LDR R0,[R4, #+96] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 A4029505 LDREQ R0,[R5, #+676] \ 000001D8 01008002 ADDEQ R0,R0,#+1 \ 000001DC A4028505 STREQ R0,[R5, #+676] 3834 if(NEW_MSG==1) \ 000001E0 440395E5 LDR R0,[R5, #+836] \ 000001E4 010050E3 CMP R0,#+1 \ 000001E8 0700001A BNE ??AddStringToLog_10 3835 { 3836 t->unread_msg++; \ 000001EC 640094E5 LDR R0,[R4, #+100] \ 000001F0 010080E2 ADD R0,R0,#+1 \ 000001F4 640084E5 STR R0,[R4, #+100] 3837 total_unread2++; \ 000001F8 080295E5 LDR R0,[R5, #+520] \ 000001FC 010080E2 ADD R0,R0,#+1 \ 00000200 080285E5 STR R0,[R5, #+520] 3838 NEW_MSG=0; \ 00000204 0000A0E3 MOV R0,#+0 \ 00000208 440385E5 STR R0,[R5, #+836] 3839 } 3840 t->isunread=1; \ ??AddStringToLog_10: \ 0000020C 0100A0E3 MOV R0,#+1 \ 00000210 600084E5 STR R0,[R4, #+96] 3841 // if(saver_on) reftes(); 3842 L_NOINC: 3843 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000214 0400A0E1 MOV R0,R4 \ 00000218 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3844 } \ ??AddStringToLog_2: \ 0000021C 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 00000220 F08FBDE8 POP {R4-R11,PC} ;; return \ ??AddStringToLog_3: \ 00000224 ........ DC32 `?` 3845 3846 void ParseAnswer(WSHDR *ws, const char *s); 3847 3848 int time_to_stop_t9; 3849 \ In segment CODE, align 4, keep-with-next 3850 void ParseXStatusText(WSHDR *ws, const char *s, int color) 3851 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 3852 int c; 3853 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 3854 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 3855 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} 3856 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 3857 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 3858 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 3859 while((c=*s++)) 3860 { 3861 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 3862 { 3863 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 3864 { 3865 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 3866 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 3867 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 3868 } 3869 } 3870 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 3871 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 3872 } 3873 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 3874 void AddMsgToChat(void *data) 3875 { \ AddMsgToChat: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 3876 LOGQ *p; 3877 EDITCONTROL ec; 3878 EDITC_OPTIONS ec_options; 3879 EDCHAT_STRUCT *ed_struct; 3880 int j; 3881 int color, font, type; 3882 int zc; 3883 if (!data) return; \ 0000000C B900000A BEQ ??AddMsgToChat_0 3884 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0050B0E1 MOVS R5,R0 3885 if (!ed_struct) return; \ 00000018 B600000A BEQ ??AddMsgToChat_0 3886 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000095E5 LDR R0,[R5, #+0] \ 00000020 601090E5 LDR R1,[R0, #+96] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 B200000A BEQ ??AddMsgToChat_0 3887 3888 3889 p=ed_struct->ed_contact->last_log; \ 0000002C 786090E5 LDR R6,[R0, #+120] 3890 if (p) \ 00000030 ........ LDR R7,??DataTable74 ;; S_ICONS \ 00000034 000056E3 CMP R6,#+0 \ 00000038 9800000A BEQ ??AddMsgToChat_1 3891 { 3892 while(p) 3893 { 3894 font = ED_H_FONT_SIZE; 3895 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C 040096E5 LDR R0,[R6, #+4] \ 00000040 788197E5 LDR R8,[R7, #+376] \ 00000044 5C9197E5 LDR R9,[R7, #+348] \ 00000048 030010E2 ANDS R0,R0,#0x3 \ 0000004C 0300000A BEQ ??AddMsgToChat_3 3896 { 3897 if (zc==1) \ 00000050 010050E3 CMP R0,#+1 \ 00000054 1A00001A BNE ??AddMsgToChat_4 3898 color=ACK_COLOR; //Зеленый \ 00000058 8C9197E5 LDR R9,[R7, #+396] \ 0000005C 180000EA B ??AddMsgToChat_4 3899 else 3900 color=I_COLOR; 3901 //#endif 3902 } 3903 else 3904 { 3905 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000060 080096E5 LDR R0,[R6, #+8] \ 00000064 010070E3 CMN R0,#+1 \ 00000068 1400001A BNE ??AddMsgToChat_5 3906 { 3907 type = p->type&0x0F; \ 0000006C 0C0096E5 LDR R0,[R6, #+12] \ 00000070 0F1000E2 AND R1,R0,#0xF 3908 if(p->type&0x10) \ 00000074 100010E3 TST R0,#0x10 \ 00000078 0900000A BEQ ??AddMsgToChat_6 3909 { 3910 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 0000007C 010051E3 CMP R1,#+1 \ 00000080 68919705 LDREQ R9,[R7, #+360] \ 00000084 0400000A BEQ ??AddMsgToChat_7 \ 00000088 030051E3 CMP R1,#+3 \ 0000008C 70919705 LDREQ R9,[R7, #+368] \ 00000090 88819705 LDREQ R8,[R7, #+392] \ 00000094 0A00000A BEQ ??AddMsgToChat_4 \ 00000098 6C9197E5 LDR R9,[R7, #+364] \ ??AddMsgToChat_7: \ 0000009C 848197E5 LDR R8,[R7, #+388] \ 000000A0 070000EA B ??AddMsgToChat_4 3911 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 3912 } 3913 else 3914 { 3915 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 60919715 LDRNE R9,[R7, #+352] \ 000000B4 7C819705 LDREQ R8,[R7, #+380] \ 000000B8 64919705 LDREQ R9,[R7, #+356] \ 000000BC 000000EA B ??AddMsgToChat_4 3916 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 3917 } 3918 } 3919 else 3920 color=UNACK_COLOR; //????? \ ??AddMsgToChat_5: \ 000000C0 909197E5 LDR R9,[R7, #+400] 3921 } 3922 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000C4 10008DE2 ADD R0,SP,#+16 \ 000000C8 640100EF SWI +356 3923 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 3924 { 3925 ascii2ws(ews,p->hdr); \ 000000DC 200297E5 LDR R0,[R7, #+544] \ 000000E0 101086E2 ADD R1,R6,#+16 \ 000000E4 ........ _BLF ascii2ws,??ascii2ws??rA 3926 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000000E8 203297E5 LDR R3,[R7, #+544] \ 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 3927 } 3928 else 3929 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_8: \ 00000100 0000A0E3 MOV R0,#+0 \ 00000104 01002DE9 PUSH {R0} \ 00000108 203297E5 LDR R3,[R7, #+544] \ 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 3930 PrepareEditCOptions(&ec_options); \ 00000120 0D00A0E1 MOV R0,SP \ 00000124 C80100EF SWI +456 3931 SetPenColorToEditCOptions(&ec_options,color); \ 00000128 0910A0E1 MOV R1,R9 \ 0000012C 0D00A0E1 MOV R0,SP \ 00000130 CC0100EF SWI +460 3932 SetFontToEditCOptions(&ec_options,font); \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0D00A0E1 MOV R0,SP \ 0000013C CA0100EF SWI +458 3933 CopyOptionsToEditControl(&ec,&ec_options); \ 00000140 0D10A0E1 MOV R1,SP \ 00000144 10008DE2 ADD R0,SP,#+16 \ 00000148 CE0100EF SWI +462 3934 //AddEditControlToEditQend(eq,&ec,ma); 3935 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 3936 ed_struct->ed_answer++; \ 00000160 080095E5 LDR R0,[R5, #+8] \ 00000164 010080E2 ADD R0,R0,#+1 \ 00000168 080085E5 STR R0,[R5, #+8] 3937 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 3938 { 3939 ParseAnswer(ews,p->text); \ 0000017C 200297E5 LDR R0,[R7, #+544] \ 00000180 601086E2 ADD R1,R6,#+96 \ 00000184 ........ BL ParseAnswer \ 00000188 050000EA B ??AddMsgToChat_11 3940 } 3941 else 3942 { 3943 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_10: \ 0000018C 100010E3 TST R0,#0x10 \ 00000190 70219715 LDRNE R2,[R7, #+368] \ 00000194 200297E5 LDR R0,[R7, #+544] \ 00000198 64219705 LDREQ R2,[R7, #+356] \ 0000019C 601086E2 ADD R1,R6,#+96 \ 000001A0 ........ BL ParseXStatusText 3944 } 3945 PrepareEditControl(&ec); \ ??AddMsgToChat_11: \ 000001A4 10008DE2 ADD R0,SP,#+16 \ 000001A8 640100EF SWI +356 3946 ConstructEditControl(&ec, 3947 ECT_NORMAL_TEXT, 3948 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 3949 ews,ews->wsbody[0]); \ 000001AC 203297E5 LDR R3,[R7, #+544] \ 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 3950 PrepareEditCOptions(&ec_options); \ 000001D8 04008DE2 ADD R0,SP,#+4 \ 000001DC C80100EF SWI +456 3951 //#ifdef M75 3952 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 3953 { 3954 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 000001F4 100010E3 TST R0,#0x10 \ 000001F8 74119705 LDREQ R1,[R7, #+372] \ 000001FC 80119715 LDRNE R1,[R7, #+384] \ 00000200 080000EA B ??AddMsgToChat_13 3955 } 3956 else 3957 { 3958 SetPenColorToEditCOptions(&ec_options,(p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_12: \ 00000204 100010E3 TST R0,#0x10 \ 00000208 70119715 LDRNE R1,[R7, #+368] \ 0000020C 0D00A0E1 MOV R0,SP \ 00000210 64119705 LDREQ R1,[R7, #+356] \ 00000214 CC0100EF SWI +460 3959 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 88119715 LDRNE R1,[R7, #+392] \ 00000224 7C119705 LDREQ R1,[R7, #+380] \ ??AddMsgToChat_13: \ 00000228 0D00A0E1 MOV R0,SP \ 0000022C CA0100EF SWI +458 3960 } 3961 //#else 3962 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 3963 //#endif 3964 CopyOptionsToEditControl(&ec,&ec_options); \ 00000230 0D10A0E1 MOV R1,SP \ 00000234 10008DE2 ADD R0,SP,#+16 \ 00000238 CE0100EF SWI +462 3965 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 3966 ed_struct->ed_answer++; \ 00000250 080095E5 LDR R0,[R5, #+8] \ 00000254 010080E2 ADD R0,R0,#+1 \ 00000258 080085E5 STR R0,[R5, #+8] 3967 p=p->next; \ 0000025C 006096E5 LDR R6,[R6, #+0] 3968 } \ 00000260 000056E3 CMP R6,#+0 \ 00000264 74FFFF1A BNE ??AddMsgToChat_2 3969 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 00000268 001095E5 LDR R1,[R5, #+0] \ 0000026C 801091E5 LDR R1,[R1, #+128] \ 00000270 011081E2 ADD R1,R1,#+1 \ 00000274 8140A0E1 LSL R4,R1,#+1 \ 00000278 000054E1 CMP R4,R0 \ 0000027C 070000AA BGE ??AddMsgToChat_1 3970 while(jed_answer) 3971 { 3972 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_14: \ 00000280 040095E5 LDR R0,[R5, #+4] \ 00000284 0110A0E3 MOV R1,#+1 \ 00000288 D10100EF SWI +465 3973 ed_struct->ed_answer--; \ 0000028C 080095E5 LDR R0,[R5, #+8] \ 00000290 010040E2 SUB R0,R0,#+1 \ 00000294 080085E5 STR R0,[R5, #+8] 3974 } \ 00000298 000054E1 CMP R4,R0 \ 0000029C F7FFFFBA BLT ??AddMsgToChat_14 3975 } 3976 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002A0 000095E5 LDR R0,[R5, #+0] \ 000002A4 0040A0E3 MOV R4,#+0 \ 000002A8 784080E5 STR R4,[R0, #+120] 3977 if (IsGuiOnTop(edchat_id)) \ 000002AC B40297E5 LDR R0,[R7, #+692] \ 000002B0 350100EF SWI +309 \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0300000A BEQ ??AddMsgToChat_15 3978 { 3979 total_unread--; \ 000002BC A40297E5 LDR R0,[R7, #+676] \ 000002C0 010040E2 SUB R0,R0,#+1 \ 000002C4 A40287E5 STR R0,[R7, #+676] \ 000002C8 020000EA B ??AddMsgToChat_16 3980 } 3981 else 3982 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] 3983 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_16: \ 000002D8 000095E5 LDR R0,[R5, #+0] \ 000002DC 604080E5 STR R4,[R0, #+96] 3984 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 000002E0 081297E5 LDR R1,[R7, #+520] \ 000002E4 642090E5 LDR R2,[R0, #+100] \ 000002E8 021041E0 SUB R1,R1,R2 \ 000002EC 081287E5 STR R1,[R7, #+520] 3985 ed_struct->ed_contact->unread_msg=0; \ 000002F0 644080E5 STR R4,[R0, #+100] 3986 ChangeContactPos(ed_struct->ed_contact); \ 000002F4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3987 // EDIT_SetFocus(data,ed_struct->ed_answer); 3988 } \ ??AddMsgToChat_0: \ 000002F8 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 000002FC F083BDE8 POP {R4-R9,PC} ;; return 3989 3990 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 3991 void DrawAck(void *data) 3992 { \ DrawAck: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 3993 LOGQ *p; 3994 EDITCONTROL ec; 3995 EDITC_OPTIONS ec_options; 3996 EDCHAT_STRUCT *ed_struct; 3997 int j; 3998 int color; 3999 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 4000 if (!data) return; \ 00000010 4B00000A BEQ ??DrawAck_0 4001 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 4002 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4800000A BEQ ??DrawAck_0 4003 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 4004 j=ed_struct->ed_answer; 4005 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 705091E5 LDR R5,[R1, #+112] \ 0000002C 801091E5 LDR R1,[R1, #+128] \ 00000030 ........ LDR R8,??DataTable74 ;; 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 4006 while(p) 4007 { 4008 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000044 010057E3 CMP R7,#+1 \ 00000048 330000BA BLT ??DrawAck_3 4009 { 4010 if (!(p->acked&4)) \ 0000004C 040095E5 LDR R0,[R5, #+4] \ 00000050 040010E3 TST R0,#0x4 \ 00000054 3000001A BNE ??DrawAck_3 4011 { 4012 ExtractEditControl(data,j,&ec); \ 00000058 10208DE2 ADD R2,SP,#+16 \ 0000005C 0710A0E1 MOV R1,R7 \ 00000060 0400A0E1 MOV R0,R4 \ 00000064 690100EF SWI +361 4013 PrepareEditCOptions(&ec_options); \ 00000068 0D00A0E1 MOV R0,SP \ 0000006C C80100EF SWI +456 4014 if (p->acked) \ 00000070 040095E5 LDR R0,[R5, #+4] \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0400000A BEQ ??DrawAck_4 4015 { 4016 if (p->acked==1) \ 0000007C 010050E3 CMP R0,#+1 4017 color=ACK_COLOR; //Зеленый \ 00000080 8C119805 LDREQ R1,[R8, #+396] \ 00000084 1100000A BEQ ??DrawAck_5 4018 else 4019 color=I_COLOR; \ ??DrawAck_6: \ 00000088 5C1198E5 LDR R1,[R8, #+348] \ 0000008C 0F0000EA B ??DrawAck_5 4020 } 4021 else 4022 { 4023 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000090 080095E5 LDR R0,[R5, #+8] \ 00000094 010070E3 CMN R0,#+1 \ 00000098 0B00001A BNE ??DrawAck_7 4024 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 6C119815 LDRNE R1,[R8, #+364] \ 000000B4 68119805 LDREQ R1,[R8, #+360] \ 000000B8 040000EA B ??DrawAck_5 \ ??DrawAck_8: \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 F0FFFF0A BEQ ??DrawAck_6 \ 000000C4 601198E5 LDR R1,[R8, #+352] \ 000000C8 000000EA B ??DrawAck_5 4025 else 4026 color=UNACK_COLOR; //Серый \ ??DrawAck_7: \ 000000CC 901198E5 LDR R1,[R8, #+400] 4027 } 4028 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); \ ??DrawAck_5: \ 000000D0 0D00A0E1 MOV R0,SP \ 000000D4 CC0100EF SWI +460 4029 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); \ 000000D8 0C0095E5 LDR R0,[R5, #+12] 4030 CopyOptionsToEditControl(&ec,&ec_options); 4031 StoreEditControl(data,j,&ec); 4032 p->acked|=4; //Обработали 4033 dorefresh=1; \ 000000DC 0160A0E3 MOV R6,#+1 \ 000000E0 100010E3 TST R0,#0x10 \ 000000E4 84119815 LDRNE R1,[R8, #+388] \ 000000E8 0D00A0E1 MOV R0,SP \ 000000EC 78119805 LDREQ R1,[R8, #+376] \ 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] 4034 } 4035 } 4036 j+=2; 4037 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 4038 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C5FFFF1A BNE ??DrawAck_2 4039 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C B40298E5 LDR R0,[R8, #+692] \ 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 4040 } 4041 \ In segment CODE, align 4, keep-with-next 4042 void ask_my_info(void) 4043 { 4044 /* TPKT *p; 4045 CLIST *t; 4046 p=malloc(sizeof(PKT)); 4047 p->pkt.uin=UIN; 4048 p->pkt.type=T_REQINFOSHORT; 4049 p->pkt.data_len=0; 4050 // AddStringToLog(t,0x01,"Request info...",I_str); 4051 SUBPROC((void *)SendAnswer,0,p);*/ 4052 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 4053 \ In segment CODE, align 4, keep-with-next 4054 void set_my_status(void) 4055 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 4056 TPKT *p; 4057 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 4058 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 4059 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 4060 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 4061 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 616 4062 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,??DataTable77 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 4063 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 616 4064 4065 extern int Send0; 4066 \ In segment CODE, align 4, keep-with-next 4067 void set_my_xstatus(void) 4068 { \ set_my_xstatus: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4069 #ifdef NEWSGOLD 4070 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R4,??DataTable77 ;; SendAnswer \ 00000008 ........ LDR R10,??DataTable74 ;; S_ICONS \ 0000000C ........ LDR R8,??DataTable69 ;; CurrentXStatus \ 00000010 0CD04DE2 SUB SP,SP,#+12 \ 00000014 1C029AE5 LDR R0,[R10, #+540] \ 00000018 1A50A0E3 MOV R5,#+26 \ 0000001C 0160A0E3 MOV R6,#+1 \ 00000020 1670A0E3 MOV R7,#+22 \ 00000024 0090A0E3 MOV R9,#+0 \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 3C00000A BEQ ??set_my_xstatus_0 4071 { 4072 if(CurrentXStatus!=11) \ 00000030 000098E5 LDR R0,[R8, #+0] \ 00000034 0B0050E3 CMP R0,#+11 \ 00000038 7200000A BEQ ??set_my_xstatus_1 4073 { 4074 #endif 4075 TPKT *p; 4076 char *s1; 4077 char *s2; 4078 int l1; 4079 int l2; 4080 p=malloc(sizeof(PKT)+1); \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 140000EF SWI +20 \ 00000044 00A0A0E1 MOV R10,R0 4081 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000048 00908AE5 STR R9,[R10, #+0] 4082 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 0000004C B470CAE1 STRH R7,[R10, #+4] 4083 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000050 B660CAE1 STRH R6,[R10, #+6] 4084 p->data[0]=CurrentXStatus; \ 00000054 000098E5 LDR R0,[R8, #+0] 4085 SUBPROC((void *)SendAnswer,0,p); \ 00000058 0A20A0E1 MOV R2,R10 \ 0000005C 0800CAE5 STRB R0,[R10, #+8] \ 00000060 0010A0E3 MOV R1,#+0 \ 00000064 0400A0E1 MOV R0,R4 \ 00000068 710100EF SWI +369 4086 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 0000006C 000098E5 LDR R0,[R8, #+0] \ 00000070 0D10A0E1 MOV R1,SP \ 00000074 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000078 010080E2 ADD R0,R0,#+1 \ 0000007C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000080 0060A0E1 MOV R6,R0 4087 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000084 000098E5 LDR R0,[R8, #+0] \ 00000088 04108DE2 ADD R1,SP,#+4 \ 0000008C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000090 020080E2 ADD R0,R0,#+2 \ 00000094 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000098 0070A0E1 MOV R7,R0 4088 if ((!s1)||(!s2)) return; \ 0000009C 000056E3 CMP R6,#+0 \ 000000A0 00005713 CMPNE R7,#+0 \ 000000A4 F78FBD08 POPEQ {R0-R2,R4-R11,PC} 4089 p=malloc(sizeof(PKT)+l1+l2+1); \ 000000A8 00009DE5 LDR R0,[SP, #+0] \ 000000AC 04109DE5 LDR R1,[SP, #+4] \ 000000B0 000081E0 ADD R0,R1,R0 \ 000000B4 090080E2 ADD R0,R0,#+9 \ 000000B8 140000EF SWI +20 \ 000000BC 00A0A0E1 MOV R10,R0 4090 p->pkt.uin=0; \ 000000C0 00908AE5 STR R9,[R10, #+0] 4091 p->pkt.type=T_XTEXT_SET; \ 000000C4 B450CAE1 STRH R5,[R10, #+4] 4092 p->pkt.data_len=l1+l2+1; \ 000000C8 00009DE5 LDR R0,[SP, #+0] \ 000000CC 04109DE5 LDR R1,[SP, #+4] \ 000000D0 000081E0 ADD R0,R1,R0 \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 B600CAE1 STRH R0,[R10, #+6] 4093 strncpy(p->data+0,s1,l1); \ 000000DC 00209DE5 LDR R2,[SP, #+0] \ 000000E0 0610A0E1 MOV R1,R6 \ 000000E4 08008AE2 ADD R0,R10,#+8 \ 000000E8 160100EF SWI +278 4094 p->data[l1]=0; \ 000000EC 00009DE5 LDR R0,[SP, #+0] 4095 strncpy(p->data+l1+1,s2,l2); \ 000000F0 0710A0E1 MOV R1,R7 \ 000000F4 0A0080E0 ADD R0,R0,R10 \ 000000F8 0890C0E5 STRB R9,[R0, #+8] \ 000000FC 00009DE5 LDR R0,[SP, #+0] \ 00000100 04209DE5 LDR R2,[SP, #+4] \ 00000104 0A0080E0 ADD R0,R0,R10 \ 00000108 090080E2 ADD R0,R0,#+9 \ 0000010C 160100EF SWI +278 4096 SUBPROC((void *)SendAnswer,0,p); \ 00000110 0A20A0E1 MOV R2,R10 \ 00000114 0010A0E3 MOV R1,#+0 \ 00000118 0400A0E1 MOV R0,R4 \ 0000011C 710100EF SWI +369 \ 00000120 F78FBDE8 POP {R0-R2,R4-R11,PC} 4097 #ifdef NEWSGOLD 4098 } 4099 else 4100 { 4101 tracktimer=0; 4102 GetTags(); 4103 } 4104 } 4105 else 4106 { 4107 TPKT *p; 4108 char *s1; 4109 char *s2; 4110 int l1; 4111 int l2; 4112 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000124 0900A0E3 MOV R0,#+9 \ 00000128 140000EF SWI +20 \ 0000012C 00B0A0E1 MOV R11,R0 4113 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000130 00908BE5 STR R9,[R11, #+0] 4114 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000134 B470CBE1 STRH R7,[R11, #+4] 4115 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000138 B660CBE1 STRH R6,[R11, #+6] 4116 p->data[0]=CurrentXStatus; \ 0000013C 000098E5 LDR R0,[R8, #+0] 4117 SUBPROC((void *)SendAnswer,0,p); \ 00000140 0B20A0E1 MOV R2,R11 \ 00000144 0800CBE5 STRB R0,[R11, #+8] \ 00000148 0010A0E3 MOV R1,#+0 \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 710100EF SWI +369 4118 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000154 000098E5 LDR R0,[R8, #+0] \ 00000158 0D10A0E1 MOV R1,SP \ 0000015C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000160 010080E2 ADD R0,R0,#+1 \ 00000164 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000168 0060A0E1 MOV R6,R0 4119 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 0000016C 000098E5 LDR R0,[R8, #+0] \ 00000170 04108DE2 ADD R1,SP,#+4 \ 00000174 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000178 020080E2 ADD R0,R0,#+2 \ 0000017C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000180 0070A0E1 MOV R7,R0 4120 if ((!s1)||(!s2)) return; \ 00000184 000056E3 CMP R6,#+0 \ 00000188 00005713 CMPNE R7,#+0 \ 0000018C F78FBD08 POPEQ {R0-R2,R4-R11,PC} 4121 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000190 00009DE5 LDR R0,[SP, #+0] \ 00000194 04109DE5 LDR R1,[SP, #+4] \ 00000198 000081E0 ADD R0,R1,R0 \ 0000019C 090080E2 ADD R0,R0,#+9 \ 000001A0 140000EF SWI +20 \ 000001A4 00B0A0E1 MOV R11,R0 4122 p->pkt.uin=0; \ 000001A8 00908BE5 STR R9,[R11, #+0] 4123 p->pkt.type=T_XTEXT_SET; \ 000001AC B450CBE1 STRH R5,[R11, #+4] 4124 p->pkt.data_len=l1+l2+1; \ 000001B0 00009DE5 LDR R0,[SP, #+0] \ 000001B4 04109DE5 LDR R1,[SP, #+4] \ 000001B8 000081E0 ADD R0,R1,R0 \ 000001BC 010080E2 ADD R0,R0,#+1 \ 000001C0 B600CBE1 STRH R0,[R11, #+6] 4125 strncpy(p->data+0,s1,l1); \ 000001C4 00209DE5 LDR R2,[SP, #+0] \ 000001C8 0610A0E1 MOV R1,R6 \ 000001CC 08008BE2 ADD R0,R11,#+8 \ 000001D0 160100EF SWI +278 4126 p->data[l1]=0; \ 000001D4 00009DE5 LDR R0,[SP, #+0] 4127 strncpy(p->data+l1+1,s2,l2); \ 000001D8 0710A0E1 MOV R1,R7 \ 000001DC 0B0080E0 ADD R0,R0,R11 \ 000001E0 0890C0E5 STRB R9,[R0, #+8] \ 000001E4 00009DE5 LDR R0,[SP, #+0] \ 000001E8 04209DE5 LDR R2,[SP, #+4] \ 000001EC 0B0080E0 ADD R0,R0,R11 \ 000001F0 090080E2 ADD R0,R0,#+9 \ 000001F4 160100EF SWI +278 4128 SUBPROC((void *)SendAnswer,0,p); \ 000001F8 0B20A0E1 MOV R2,R11 \ 000001FC 0010A0E3 MOV R1,#+0 \ 00000200 0400A0E1 MOV R0,R4 \ 00000204 710100EF SWI +369 4129 tracktimer=0; \ ??set_my_xstatus_1: \ 00000208 48928AE5 STR R9,[R10, #+584] 4130 GetTags(); \ 0000020C ........ _BLF GetTags,??GetTags??rA \ 00000210 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return 4131 } 4132 #endif 4133 } 4134 #ifdef NEWSGOLD 4135 4136 \ In segment CODE, align 4, keep-with-next 4137 void set_my_xstatus2(void) 4138 { \ set_my_xstatus2: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4139 TPKT *p; 4140 // char *s1; 4141 // char *s2; 4142 int l1; 4143 int l2; 4144 p=malloc(sizeof(PKT)+1); 4145 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 4146 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 4147 p->pkt.data_len=1; // Длина пакета: 1 байт 4148 p->data[0]=11; 4149 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable77 ;; SendAnswer 4150 // char *s1; 4151 char *sk2=malloc(256); 4152 // strcpy(s1, playing); 4153 // s1="Now playing:"; 4154 strcpy(sk2,teast2); 4155 l1=strlen(playing); \ 00000008 ........ LDR R9,??DataTable74 ;; S_ICONS \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 00000010 0900A0E3 MOV R0,#+9 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 0050A0E3 MOV R5,#+0 \ 00000020 005084E5 STR R5,[R4, #+0] \ 00000024 1600A0E3 MOV R0,#+22 \ 00000028 B400C4E1 STRH R0,[R4, #+4] \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 B600C4E1 STRH R0,[R4, #+6] \ 00000034 0B00A0E3 MOV R0,#+11 \ 00000038 0800C4E5 STRB R0,[R4, #+8] \ 0000003C 0420A0E1 MOV R2,R4 \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 710100EF SWI +369 \ 0000004C 400FA0E3 MOV R0,#+256 \ 00000050 140000EF SWI +20 \ 00000054 98109FE5 LDR R1,??set_my_xstatus2_0 ;; teast2 \ 00000058 0070A0E1 MOV R7,R0 \ 0000005C 1A0000EF SWI +26 \ 00000060 6880A0E3 MOV R8,#+104 \ 00000064 608E88E3 ORR R8,R8,#0x600 \ 00000068 090088E0 ADD R0,R8,R9 \ 0000006C 1B0000EF SWI +27 \ 00000070 00A0A0E1 MOV R10,R0 4156 l2=strlen(sk2); \ 00000074 0700A0E1 MOV R0,R7 \ 00000078 1B0000EF SWI +27 \ 0000007C 00B0A0E1 MOV R11,R0 4157 if ((!playing)||(!sk2)) return; \ 00000080 000057E3 CMP R7,#+0 \ 00000084 F18FBD08 POPEQ {R0,R4-R11,PC} 4158 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000088 0A008BE0 ADD R0,R11,R10 \ 0000008C 090080E2 ADD R0,R0,#+9 \ 00000090 140000EF SWI +20 \ 00000094 0040A0E1 MOV R4,R0 4159 p->pkt.uin=0; \ 00000098 005084E5 STR R5,[R4, #+0] 4160 p->pkt.type=T_XTEXT_SET; \ 0000009C 1A00A0E3 MOV R0,#+26 \ 000000A0 B400C4E1 STRH R0,[R4, #+4] 4161 p->pkt.data_len=l1+l2+1; \ 000000A4 0A008BE0 ADD R0,R11,R10 \ 000000A8 010080E2 ADD R0,R0,#+1 \ 000000AC B600C4E1 STRH R0,[R4, #+6] 4162 strncpy(p->data+0,playing,l1); \ 000000B0 0A20A0E1 MOV R2,R10 \ 000000B4 091088E0 ADD R1,R8,R9 \ 000000B8 080084E2 ADD R0,R4,#+8 \ 000000BC 160100EF SWI +278 4163 p->data[l1]=0; \ 000000C0 04008AE0 ADD R0,R10,R4 \ 000000C4 0850C0E5 STRB R5,[R0, #+8] 4164 strncpy(p->data+l1+1,sk2,l2); \ 000000C8 0B20A0E1 MOV R2,R11 \ 000000CC 0710A0E1 MOV R1,R7 \ 000000D0 090080E2 ADD R0,R0,#+9 \ 000000D4 160100EF SWI +278 4165 mfree(sk2); \ 000000D8 0700A0E1 MOV R0,R7 \ 000000DC 150000EF SWI +21 4166 SUBPROC((void *)SendAnswer,0,p); \ 000000E0 0420A0E1 MOV R2,R4 \ 000000E4 0010A0E3 MOV R1,#+0 \ 000000E8 0600A0E1 MOV R0,R6 \ 000000EC 710100EF SWI +369 4167 // mfree(s1); 4168 // mfree(s2); 4169 } \ 000000F0 F18FBDE8 POP {R0,R4-R11,PC} ;; return \ ??set_my_xstatus2_0: \ 000000F4 ........ DC32 teast2 4170 #endif \ In segment CODE, align 4, keep-with-next 4171 void to_develop(void) 4172 { 4173 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable74 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 501290E5 LDR R1,[R0, #+592] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 4174 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} 4191 { 4192 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 4193 { 4194 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 680084E5 STR R0,[R4, #+104] 4195 #ifdef EVILFOX 4196 time_to_stop_t9=2; 4197 #else 4198 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 480385E5 STR R0,[R5, #+840] \ 00000060 7080BDE8 POP {R4-R6,PC} 4199 #endif 4200 } 4201 else 4202 { 4203 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 4204 DirectRedrawGUI_ID(edchat_id); \ 0000006C B40295E5 LDR R0,[R5, #+692] \ 00000070 400100EF SWI +320 4205 } 4206 } 4207 } 4208 } 4209 } 4210 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 4211 4212 GBSTMR develop; 4213 \ In segment CODE, align 4, keep-with-next 4214 void begin_to_develop() 4215 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 4216 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 4217 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 4218 else 4219 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 + 4712 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 4220 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 S_ICONS + 4712 4221 ////=================================comand lists 4222 int comanda; 4223 4224 char requests1[]="Sending online time..."; 4225 char requests2[]="Sending msg info..."; 4226 char requests3[]="Sending battery info..."; 4227 char requests4[]="Sending mod info..."; 4228 char requests6[]="Sending offline info..."; 4229 4230 4231 4232 4233 4234 char mod_info[264]; 4235 4236 const char ipc_game_name[]="Combats"; 4237 IPC_REQ game_gipc; 4238 #define IPC_GAME_DATA 24 4239 4240 #ifdef kluchnik 4241 int autobot; 4242 void AutobotInit() 4243 { 4244 if(autobot==1) 4245 { 4246 autobot=0; 4247 ShowMSG(1,(int)"Autobot Off"); 4248 } 4249 else 4250 { 4251 autobot=1; 4252 ShowMSG(1,(int)"Autobot On"); 4253 } 4254 } 4255 #endif 4256 4257 \ In segment CODE, align 4, keep-with-next 4258 void CheckComand(char *txt, CLIST *t, char *ddd) 4259 { \ CheckComand: \ 00000000 F44F2DE9 PUSH {R2,R4-R11,LR} 4260 comanda=1; \ 00000004 ........ LDR R6,??DataTable81 ;; S_ICONS 4261 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 ........ LDR R7,??DataTable76 ;; `?pkt.uin=t->uin; \ 00000120 0C0095E5 LDR R0,[R5, #+12] \ 00000124 000084E5 STR R0,[R4, #+0] 4282 p->pkt.type=T_SENDMSG; \ 00000128 B4A0C4E1 STRH R10,[R4, #+4] 4283 p->pkt.data_len=strlen(online); \ 0000012C 20008DE2 ADD R0,SP,#+32 \ 00000130 1B0000EF SWI +27 \ 00000134 B600C4E1 STRH R0,[R4, #+6] 4284 strcpy(p->data,online); \ 00000138 20108DE2 ADD R1,SP,#+32 \ 0000013C 080084E2 ADD R0,R4,#+8 \ 00000140 1A0000EF SWI +26 4285 #ifdef EVILFOX 4286 SENDMSGCOUNT++; 4287 #else 4288 if(show_send_info) \ 00000144 3C0196E5 LDR R0,[R6, #+316] \ 00000148 08D08DE2 ADD SP,SP,#+8 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 140296E5 LDR R0,[R6, #+532] \ 00000154 010080E2 ADD R0,R0,#+1 \ 00000158 140286E5 STR R0,[R6, #+532] \ 0000015C 0A00000A BEQ ??CheckComand_3 4289 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000160 0110A0E3 MOV R1,#+1 \ 00000164 02002DE9 PUSH {R1} \ 00000168 000009E0 AND R0,R9,R0 \ 0000016C 01002DE9 PUSH {R0} \ 00000170 1F3087E2 ADD R3,R7,#+31 \ 00000174 7800A0E3 MOV R0,#+120 \ 00000178 480D80E3 ORR R0,R0,#0x1200 \ 0000017C 062080E0 ADD R2,R0,R6 \ 00000180 0500A0E1 MOV R0,R5 \ 00000184 ........ BL AddStringToLog \ 00000188 08D08DE2 ADD SP,SP,#+8 4290 else 4291 SENDMSGCOUNT++; 4292 #endif 4293 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_3: \ 0000018C 0420A0E1 MOV R2,R4 \ 00000190 0010A0E3 MOV R1,#+0 \ 00000194 0800A0E1 MOV R0,R8 \ 00000198 710100EF SWI +369 4294 return; \ ??CheckComand_1: \ 0000019C 47DF8DE2 ADD SP,SP,#+284 \ 000001A0 F08FBDE8 POP {R4-R11,PC} 4295 } 4296 4297 if(!strcmp(txt, "GET_MSG_INFO")) \ ??CheckComand_2: \ 000001A4 C400A0E3 MOV R0,#+196 \ 000001A8 400E80E3 ORR R0,R0,#0x400 \ 000001AC 071080E0 ADD R1,R0,R7 \ 000001B0 0400A0E1 MOV R0,R4 \ 000001B4 190000EF SWI +25 \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 2900001A BNE ??CheckComand_4 4298 { 4299 comanda=0; \ 000001C0 4C0386E5 STR R0,[R6, #+844] 4300 TPKT *p; 4301 char *send_txt=malloc(64); \ 000001C4 4000A0E3 MOV R0,#+64 \ 000001C8 140000EF SWI +20 \ 000001CC 0040A0E1 MOV R4,R0 4302 sprintf(send_txt, "Отправлено сообщений: %d \n" 4303 "Принято сообщений: %d" 4304 , main2_count, main_count); \ 000001D0 ........ LDR R0,??DataTable78 ;; main_count \ 000001D4 003090E5 LDR R3,[R0, #+0] \ 000001D8 ........ LDR R0,??DataTable79 ;; main2_count \ 000001DC 002090E5 LDR R2,[R0, #+0] \ 000001E0 D400A0E3 MOV R0,#+212 \ 000001E4 400E80E3 ORR R0,R0,#0x400 \ 000001E8 071080E0 ADD R1,R0,R7 \ 000001EC 0400A0E1 MOV R0,R4 \ 000001F0 160000EF SWI +22 4305 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000001F4 0400A0E1 MOV R0,R4 \ 000001F8 1B0000EF SWI +27 \ 000001FC 090080E2 ADD R0,R0,#+9 \ 00000200 140000EF SWI +20 \ 00000204 00B0A0E1 MOV R11,R0 4306 p->pkt.uin=t->uin; \ 00000208 0C0095E5 LDR R0,[R5, #+12] \ 0000020C 00008BE5 STR R0,[R11, #+0] 4307 p->pkt.type=T_SENDMSG; \ 00000210 B4A0CBE1 STRH R10,[R11, #+4] 4308 p->pkt.data_len=strlen(send_txt); \ 00000214 0400A0E1 MOV R0,R4 \ 00000218 1B0000EF SWI +27 \ 0000021C B600CBE1 STRH R0,[R11, #+6] 4309 strcpy(p->data,send_txt); \ 00000220 0410A0E1 MOV R1,R4 \ 00000224 08008BE2 ADD R0,R11,#+8 \ 00000228 1A0000EF SWI +26 4310 #ifdef EVILFOX 4311 SENDMSGCOUNT++; 4312 #else 4313 if(show_send_info) \ 0000022C 3C0196E5 LDR R0,[R6, #+316] \ 00000230 000050E3 CMP R0,#+0 \ 00000234 140296E5 LDR R0,[R6, #+532] \ 00000238 010080E2 ADD R0,R0,#+1 \ 0000023C 140286E5 STR R0,[R6, #+532] \ 00000240 1801000A BEQ ??CheckComand_5 4314 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000244 0110A0E3 MOV R1,#+1 \ 00000248 02002DE9 PUSH {R1} \ 0000024C 000009E0 AND R0,R9,R0 \ 00000250 01002DE9 PUSH {R0} \ 00000254 1F3087E2 ADD R3,R7,#+31 \ 00000258 9000A0E3 MOV R0,#+144 \ 0000025C 480D80E3 ORR R0,R0,#0x1200 \ 00000260 062080E0 ADD R2,R0,R6 \ 00000264 0C0100EA B ??CheckComand_6 4315 else 4316 SENDMSGCOUNT++; 4317 #endif 4318 SUBPROC((void *)SendAnswer,0,p); 4319 mfree(send_txt); 4320 return; 4321 } 4322 4323 //==========================windes commands begin ===================== 4324 4325 if(!strcmp(txt, "GET_PROVIDER")) \ ??CheckComand_4: \ 00000268 8800A0E3 MOV R0,#+136 \ 0000026C 400E80E3 ORR R0,R0,#0x400 \ 00000270 071080E0 ADD R1,R0,R7 \ 00000274 0400A0E1 MOV R0,R4 \ 00000278 190000EF SWI +25 \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 3100001A BNE ??CheckComand_7 4326 { 4327 comanda=0; \ 00000284 4C0386E5 STR R0,[R6, #+844] 4328 TPKT *p; 4329 4330 WSHDR *ws=AllocWS(32); \ 00000288 2000A0E3 MOV R0,#+32 \ 0000028C 250100EF SWI +293 \ 00000290 00B0A0E1 MOV R11,R0 4331 GetProvider(ws,0); \ 00000294 0010A0E3 MOV R1,#+0 \ 00000298 410000EF SWI +65 4332 char prov[16]; 4333 ws_2str(ws,prov,wstrlen(ws)); \ 0000029C 0B00A0E1 MOV R0,R11 \ 000002A0 230100EF SWI +291 \ 000002A4 0020A0E1 MOV R2,R0 \ 000002A8 08108DE2 ADD R1,SP,#+8 \ 000002AC 0B00A0E1 MOV R0,R11 \ 000002B0 A30000EF SWI +163 4334 char *send_txt=malloc(32); \ 000002B4 2000A0E3 MOV R0,#+32 \ 000002B8 140000EF SWI +20 \ 000002BC 0040A0E1 MOV R4,R0 4335 sprintf(send_txt, "Оператор: %s", prov); \ 000002C0 08208DE2 ADD R2,SP,#+8 \ 000002C4 B400A0E3 MOV R0,#+180 \ 000002C8 400E80E3 ORR R0,R0,#0x400 \ 000002CC 071080E0 ADD R1,R0,R7 \ 000002D0 0400A0E1 MOV R0,R4 \ 000002D4 160000EF SWI +22 4336 FreeWS(ws); \ 000002D8 0B00A0E1 MOV R0,R11 \ 000002DC 290100EF SWI +297 4337 4338 p=malloc(sizeof(PKT)+28+1); \ 000002E0 2500A0E3 MOV R0,#+37 \ 000002E4 140000EF SWI +20 \ 000002E8 00B0A0E1 MOV R11,R0 4339 p->pkt.uin=t->uin; \ 000002EC 0C0095E5 LDR R0,[R5, #+12] \ 000002F0 00008BE5 STR R0,[R11, #+0] 4340 p->pkt.type=T_SENDMSG; \ 000002F4 B4A0CBE1 STRH R10,[R11, #+4] 4341 p->pkt.data_len=strlen(send_txt); \ 000002F8 0400A0E1 MOV R0,R4 \ 000002FC 1B0000EF SWI +27 \ 00000300 B600CBE1 STRH R0,[R11, #+6] 4342 strcpy(p->data,send_txt); \ 00000304 0410A0E1 MOV R1,R4 \ 00000308 08008BE2 ADD R0,R11,#+8 \ 0000030C 1A0000EF SWI +26 4343 if(show_send_info) \ 00000310 3C0196E5 LDR R0,[R6, #+316] \ 00000314 000050E3 CMP R0,#+0 \ 00000318 140296E5 LDR R0,[R6, #+532] \ 0000031C 010080E2 ADD R0,R0,#+1 \ 00000320 140286E5 STR R0,[R6, #+532] \ 00000324 DF00000A BEQ ??CheckComand_5 4344 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000328 0110A0E3 MOV R1,#+1 \ 0000032C 02002DE9 PUSH {R1} \ 00000330 000009E0 AND R0,R9,R0 \ 00000334 01002DE9 PUSH {R0} \ 00000338 1F3087E2 ADD R3,R7,#+31 \ 0000033C 9800A0E3 MOV R0,#+152 \ 00000340 400E80E3 ORR R0,R0,#0x400 \ 00000344 072080E0 ADD R2,R0,R7 \ 00000348 D30000EA B ??CheckComand_6 4345 else 4346 SENDMSGCOUNT++; 4347 SUBPROC((void *)SendAnswer,0,p); 4348 mfree(send_txt); 4349 return; 4350 } 4351 4352 //----------------------------------------------------------------------- 4353 4354 if(!strcmp(txt, "GET_MOD_INFO")) \ ??CheckComand_7: \ 0000034C 6400A0E3 MOV R0,#+100 \ 00000350 400E80E3 ORR R0,R0,#0x400 \ 00000354 071080E0 ADD R1,R0,R7 \ 00000358 0400A0E1 MOV R0,R4 \ 0000035C 190000EF SWI +25 \ 00000360 000050E3 CMP R0,#+0 \ 00000364 3600001A BNE ??CheckComand_8 4355 { 4356 comanda=0; \ 00000368 4C0386E5 STR R0,[R6, #+844] 4357 TPKT *p; 4358 char *send_txt=malloc(256); \ 0000036C 400FA0E3 MOV R0,#+256 \ 00000370 140000EF SWI +20 \ 00000374 0040A0E1 MOV R4,R0 4359 // sprintf(I_UIN, "uin%d", t->uin); 4360 strcpy(I_UIN, t->name); \ 00000378 6C10A0E3 MOV R1,#+108 \ 0000037C 441D81E3 ORR R1,R1,#0x1100 \ 00000380 061081E0 ADD R1,R1,R6 \ 00000384 04108DE5 STR R1,[SP, #+4] \ 00000388 04009DE5 LDR R0,[SP, #+4] \ 0000038C 141085E2 ADD R1,R5,#+20 \ 00000390 1A0000EF SWI +26 4361 if(strstr(ignor_list,I_UIN)==0) \ 00000394 04109DE5 LDR R1,[SP, #+4] \ 00000398 6800A0E3 MOV R0,#+104 \ 0000039C 500E80E3 ORR R0,R0,#0x500 \ 000003A0 060080E0 ADD R0,R0,R6 \ 000003A4 180100EF SWI +280 \ 000003A8 000050E3 CMP R0,#+0 4362 { 4363 strcpy(send_txt, mod_info); \ 000003AC 0B10A001 MOVEQ R1,R11 4364 } 4365 else 4366 strcpy(send_txt, "***Access denied***"); \ 000003B0 7400A013 MOVNE R0,#+116 \ 000003B4 400E8013 ORRNE R0,R0,#0x400 \ 000003B8 07108010 ADDNE R1,R0,R7 \ 000003BC 0400A0E1 MOV R0,R4 \ 000003C0 1A0000EF SWI +26 4367 4368 strcpy(send_txt, mod_info); \ 000003C4 0B10A0E1 MOV R1,R11 \ 000003C8 0400A0E1 MOV R0,R4 \ 000003CC 1A0000EF SWI +26 4369 4370 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000003D0 0400A0E1 MOV R0,R4 \ 000003D4 1B0000EF SWI +27 \ 000003D8 090080E2 ADD R0,R0,#+9 \ 000003DC 140000EF SWI +20 \ 000003E0 00B0A0E1 MOV R11,R0 4371 p->pkt.uin=t->uin; \ 000003E4 0C0095E5 LDR R0,[R5, #+12] \ 000003E8 00008BE5 STR R0,[R11, #+0] 4372 p->pkt.type=T_SENDMSG; \ 000003EC B4A0CBE1 STRH R10,[R11, #+4] 4373 p->pkt.data_len=strlen(send_txt); \ 000003F0 0400A0E1 MOV R0,R4 \ 000003F4 1B0000EF SWI +27 \ 000003F8 B600CBE1 STRH R0,[R11, #+6] 4374 strcpy(p->data,send_txt); \ 000003FC 0410A0E1 MOV R1,R4 \ 00000400 08008BE2 ADD R0,R11,#+8 \ 00000404 1A0000EF SWI +26 4375 #ifdef EVILFOX 4376 SENDMSGCOUNT++; 4377 #else 4378 if(show_send_info) \ 00000408 3C0196E5 LDR R0,[R6, #+316] \ 0000040C 000050E3 CMP R0,#+0 \ 00000410 140296E5 LDR R0,[R6, #+532] \ 00000414 010080E2 ADD R0,R0,#+1 \ 00000418 140286E5 STR R0,[R6, #+532] \ 0000041C A100000A BEQ ??CheckComand_5 4379 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000420 0110A0E3 MOV R1,#+1 \ 00000424 02002DE9 PUSH {R1} \ 00000428 000009E0 AND R0,R9,R0 \ 0000042C 01002DE9 PUSH {R0} \ 00000430 1F3087E2 ADD R3,R7,#+31 \ 00000434 BC00A0E3 MOV R0,#+188 \ 00000438 480D80E3 ORR R0,R0,#0x1200 \ 0000043C 062080E0 ADD R2,R0,R6 \ 00000440 950000EA B ??CheckComand_6 4380 else 4381 SENDMSGCOUNT++; 4382 #endif 4383 SUBPROC((void *)SendAnswer,0,p); 4384 mfree(send_txt); 4385 return; 4386 } 4387 4388 if(!strcmp(txt, "GET_BAT_INFO")) \ ??CheckComand_8: \ 00000444 3800A0E3 MOV R0,#+56 \ 00000448 400E80E3 ORR R0,R0,#0x400 \ 0000044C 071080E0 ADD R1,R0,R7 \ 00000450 0400A0E1 MOV R0,R4 \ 00000454 190000EF SWI +25 \ 00000458 000050E3 CMP R0,#+0 \ 0000045C 2600001A BNE ??CheckComand_9 4389 { 4390 comanda=0; \ 00000460 4C0386E5 STR R0,[R6, #+844] 4391 TPKT *p; 4392 int bat; 4393 bat=*RamCap(); \ 00000464 C88000EF SWI +32968 \ 00000468 B0B0D0E1 LDRH R11,[R0, #+0] 4394 char *send_txt=malloc(64); \ 0000046C 4000A0E3 MOV R0,#+64 \ 00000470 140000EF SWI +20 \ 00000474 0040A0E1 MOV R4,R0 4395 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 00000478 0B20A0E1 MOV R2,R11 \ 0000047C 4800A0E3 MOV R0,#+72 \ 00000480 400E80E3 ORR R0,R0,#0x400 \ 00000484 071080E0 ADD R1,R0,R7 \ 00000488 0400A0E1 MOV R0,R4 \ 0000048C 160000EF SWI +22 4396 p=malloc(sizeof(PKT)+28+1); \ 00000490 2500A0E3 MOV R0,#+37 \ 00000494 140000EF SWI +20 \ 00000498 00B0A0E1 MOV R11,R0 4397 p->pkt.uin=t->uin; \ 0000049C 0C0095E5 LDR R0,[R5, #+12] \ 000004A0 00008BE5 STR R0,[R11, #+0] 4398 p->pkt.type=T_SENDMSG; \ 000004A4 B4A0CBE1 STRH R10,[R11, #+4] 4399 p->pkt.data_len=strlen(send_txt); \ 000004A8 0400A0E1 MOV R0,R4 \ 000004AC 1B0000EF SWI +27 \ 000004B0 B600CBE1 STRH R0,[R11, #+6] 4400 strcpy(p->data,send_txt); \ 000004B4 0410A0E1 MOV R1,R4 \ 000004B8 08008BE2 ADD R0,R11,#+8 \ 000004BC 1A0000EF SWI +26 4401 #ifdef EVILFOX 4402 SENDMSGCOUNT++; 4403 #else 4404 if(show_send_info) \ 000004C0 3C0196E5 LDR R0,[R6, #+316] \ 000004C4 000050E3 CMP R0,#+0 \ 000004C8 140296E5 LDR R0,[R6, #+532] \ 000004CC 010080E2 ADD R0,R0,#+1 \ 000004D0 140286E5 STR R0,[R6, #+532] \ 000004D4 7300000A BEQ ??CheckComand_5 4405 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000004D8 0110A0E3 MOV R1,#+1 \ 000004DC 02002DE9 PUSH {R1} \ 000004E0 000009E0 AND R0,R9,R0 \ 000004E4 01002DE9 PUSH {R0} \ 000004E8 1F3087E2 ADD R3,R7,#+31 \ 000004EC A400A0E3 MOV R0,#+164 \ 000004F0 480D80E3 ORR R0,R0,#0x1200 \ 000004F4 062080E0 ADD R2,R0,R6 \ 000004F8 670000EA B ??CheckComand_6 4406 else 4407 SENDMSGCOUNT++; 4408 #endif 4409 SUBPROC((void *)SendAnswer,0,p); 4410 mfree(send_txt); 4411 return; 4412 } 4413 4414 if(away_m==1) \ ??CheckComand_9: \ 000004FC 280296E5 LDR R0,[R6, #+552] \ 00000500 010050E3 CMP R0,#+1 \ 00000504 3900001A BNE ??CheckComand_10 4415 { 4416 comanda=1; \ 00000508 4C0386E5 STR R0,[R6, #+844] \ 0000050C 5C00A0E3 MOV R0,#+92 \ 00000510 D00E80E3 ORR R0,R0,#0xD00 \ 00000514 060080E0 ADD R0,R0,R6 \ 00000518 01002DE9 PUSH {R0} \ 0000051C 552E86E2 ADD R2,R6,#+1360 \ 00000520 E80F86E2 ADD R0,R6,#+928 \ 00000524 01002DE9 PUSH {R0} \ 00000528 20319DE5 LDR R3,[SP, #+288] \ 0000052C 1C00A0E3 MOV R0,#+28 \ 00000530 400E80E3 ORR R0,R0,#0x400 \ 00000534 071080E0 ADD R1,R0,R7 \ 00000538 5400A0E3 MOV R0,#+84 \ 0000053C C00E80E3 ORR R0,R0,#0xC00 \ 00000540 060080E0 ADD R0,R0,R6 4417 TPKT *p; 4418 // sprintf(hah,"online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); 4419 4420 // if(inp_away_msg2)//Если ввели текст то выводим его,иначе из конфига 4421 // sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, ddd, inp_away_msg2, away_msg_time); 4422 // else 4423 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, ddd, awayMsg, away_msg_time); \ 00000544 160000EF SWI +22 4424 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000548 5400A0E3 MOV R0,#+84 \ 0000054C C00E80E3 ORR R0,R0,#0xC00 \ 00000550 060080E0 ADD R0,R0,R6 \ 00000554 1B0000EF SWI +27 \ 00000558 090080E2 ADD R0,R0,#+9 \ 0000055C 140000EF SWI +20 \ 00000560 00B0A0E1 MOV R11,R0 4425 p->pkt.uin=t->uin; \ 00000564 0C0095E5 LDR R0,[R5, #+12] \ 00000568 00008BE5 STR R0,[R11, #+0] 4426 p->pkt.type=T_SENDMSG; \ 0000056C B4A0CBE1 STRH R10,[R11, #+4] 4427 p->pkt.data_len=strlen(away_msg); \ 00000570 5400A0E3 MOV R0,#+84 \ 00000574 C00E80E3 ORR R0,R0,#0xC00 \ 00000578 060080E0 ADD R0,R0,R6 \ 0000057C 1B0000EF SWI +27 \ 00000580 B600CBE1 STRH R0,[R11, #+6] 4428 strcpy(p->data,away_msg); \ 00000584 5400A0E3 MOV R0,#+84 \ 00000588 C00E80E3 ORR R0,R0,#0xC00 \ 0000058C 061080E0 ADD R1,R0,R6 \ 00000590 08008BE2 ADD R0,R11,#+8 \ 00000594 1A0000EF SWI +26 4429 #ifdef EVILFOX 4430 SENDMSGCOUNT++; 4431 #else 4432 if(show_send_info) \ 00000598 3C0196E5 LDR R0,[R6, #+316] \ 0000059C 08D08DE2 ADD SP,SP,#+8 \ 000005A0 000050E3 CMP R0,#+0 \ 000005A4 140296E5 LDR R0,[R6, #+532] \ 000005A8 010080E2 ADD R0,R0,#+1 \ 000005AC 140286E5 STR R0,[R6, #+532] \ 000005B0 0A00000A BEQ ??CheckComand_11 4433 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000005B4 0110A0E3 MOV R1,#+1 \ 000005B8 02002DE9 PUSH {R1} \ 000005BC 000009E0 AND R0,R9,R0 \ 000005C0 01002DE9 PUSH {R0} \ 000005C4 1F3087E2 ADD R3,R7,#+31 \ 000005C8 D000A0E3 MOV R0,#+208 \ 000005CC 480D80E3 ORR R0,R0,#0x1200 \ 000005D0 062080E0 ADD R2,R0,R6 \ 000005D4 0500A0E1 MOV R0,R5 \ 000005D8 ........ BL AddStringToLog \ 000005DC 08D08DE2 ADD SP,SP,#+8 4434 else 4435 SENDMSGCOUNT++; 4436 #endif 4437 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_11: \ 000005E0 0B20A0E1 MOV R2,R11 \ 000005E4 0010A0E3 MOV R1,#+0 \ 000005E8 0800A0E1 MOV R0,R8 \ 000005EC 710100EF SWI +369 4438 } 4439 #ifdef klcuhnik 4440 if((t->uin==AUTOBOT_UIN)&&(autobot)) 4441 { 4442 TPKT *p; 4443 if(t->bot_msg==0) sprintf(away_msg, "Привет"); 4444 if(t->bot_msg==1) sprintf(away_msg, "думаешь?!"); 4445 if(t->bot_msg==2) sprintf(away_msg, "да что ты говоришь"); 4446 if(t->bot_msg==3) sprintf(away_msg, "странно"); 4447 if(t->bot_msg==4) sprintf(away_msg, "ты так думаешь?"); 4448 if(t->bot_msg==5) sprintf(away_msg, "может быть"); 4449 if(t->bot_msg==6) sprintf(away_msg, "да нахрен"); 4450 if(t->bot_msg==7) sprintf(away_msg, "конечна"); 4451 if(t->bot_msg==8) sprintf(away_msg, "почему нет"); 4452 t->bot_msg++; 4453 if(t->bot_msg==9) 4454 t->bot_msg=1; 4455 // strcpy(away_msg, c); 4456 p=malloc(sizeof(PKT)+strlen(away_msg)+1); 4457 p->pkt.uin=t->uin; 4458 p->pkt.type=T_SENDMSG; 4459 p->pkt.data_len=strlen(away_msg); 4460 strcpy(p->data,away_msg); 4461 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); 4462 SUBPROC((void *)SendAnswer,0,p); 4463 4464 if((t->uin==334492880)&&(autobot_kel)) 4465 { 4466 TPKT *p; 4467 //if(t->bot_msg==0) sprintf(away_msg, "Привет"); 4468 if(t->bot_msg==0) sprintf(away_msg, "думаешь?!"); 4469 if(t->bot_msg==1) sprintf(away_msg, "да что ты говоришь"); 4470 if(t->bot_msg==2) sprintf(away_msg, "странно"); 4471 if(t->bot_msg==3) sprintf(away_msg, "угу"); 4472 if(t->bot_msg==4) sprintf(away_msg, "Не еби мне мозг!"); 4473 if(t->bot_msg==5) sprintf(away_msg, "иди на хуй!!"); 4474 if(t->bot_msg==6) sprintf(away_msg, "сука"); 4475 if(t->bot_msg==7) sprintf(away_msg, "заебал"); 4476 if(t->bot_msg==8) sprintf(away_msg, "отъебись cука!!!*FUCK_YOU*"); 4477 t->bot_msg++; 4478 if(t->bot_msg==9) 4479 t->bot_msg=1; 4480 // strcpy(away_msg, c); 4481 p=malloc(sizeof(PKT)+strlen(away_msg)+1); 4482 p->pkt.uin=t->uin; 4483 p->pkt.type=T_SENDMSG; 4484 p->pkt.data_len=strlen(away_msg); 4485 strcpy(p->data,away_msg); 4486 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); 4487 SUBPROC((void *)SendAnswer,0,p); 4488 } 4489 } 4490 #endif 4491 //----------------------// 4492 4493 if(!strcmp(txt, "GET_URL_INFO"))// kluchnik 26.03.08 \ ??CheckComand_10: \ 000005F0 911F87E2 ADD R1,R7,#+580 \ 000005F4 0400A0E1 MOV R0,R4 \ 000005F8 190000EF SWI +25 \ 000005FC 000050E3 CMP R0,#+0 \ 00000600 2E00001A BNE ??CheckComand_12 4494 { 4495 comanda=0; \ 00000604 4C0386E5 STR R0,[R6, #+844] 4496 TPKT *p; 4497 4498 char *send_txt=malloc(786); \ 00000608 C40F8AE3 ORR R0,R10,#0x310 \ 0000060C 140000EF SWI +20 \ 00000610 0040A0E1 MOV R4,R0 4499 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 4500 "http://windes.narod.ru/files/naticq_mod2058s.zip (sgold) (40kb)\n" 4501 "http://windes.narod.ru/files/naticq_mod2058n.zip (NewSGold) (40kb)\n" 4502 "http://windes.narod.ru/files/naticq_mod2058e.zip (elka) (40kb)\n" 4503 "files: http://windes.narod.ru/files/naticqmod_allfiles_w.zip (432kb)\n" 4504 "Status on iconbar http://windes.narod.ru/files/img16x16.zip (74kb)\n" 4505 "Так же все будет тут http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000614 4800A0E3 MOV R0,#+72 \ 00000618 500E80E3 ORR R0,R0,#0x500 \ 0000061C 070080E0 ADD R0,R0,R7 \ 00000620 01002DE9 PUSH {R0} \ 00000624 473F87E2 ADD R3,R7,#+284 \ 00000628 9A2F87E2 ADD R2,R7,#+616 \ 0000062C FE1F87E2 ADD R1,R7,#+1016 \ 00000630 0400A0E1 MOV R0,R4 \ 00000634 160000EF SWI +22 4506 4507 p=malloc(sizeof(PKT)+786); \ 00000638 C60F8AE3 ORR R0,R10,#0x318 \ 0000063C 140000EF SWI +20 \ 00000640 00B0A0E1 MOV R11,R0 4508 p->pkt.uin=t->uin; \ 00000644 0C0095E5 LDR R0,[R5, #+12] \ 00000648 00008BE5 STR R0,[R11, #+0] 4509 p->pkt.type=T_SENDMSG; \ 0000064C B4A0CBE1 STRH R10,[R11, #+4] 4510 p->pkt.data_len=strlen(send_txt); \ 00000650 0400A0E1 MOV R0,R4 \ 00000654 1B0000EF SWI +27 \ 00000658 B600CBE1 STRH R0,[R11, #+6] 4511 strcpy(p->data,send_txt); \ 0000065C 0410A0E1 MOV R1,R4 \ 00000660 08008BE2 ADD R0,R11,#+8 \ 00000664 1A0000EF SWI +26 4512 if(show_send_info) \ 00000668 3C0196E5 LDR R0,[R6, #+316] \ 0000066C 04D08DE2 ADD SP,SP,#+4 \ 00000670 000050E3 CMP R0,#+0 \ 00000674 140296E5 LDR R0,[R6, #+532] \ 00000678 010080E2 ADD R0,R0,#+1 \ 0000067C 140286E5 STR R0,[R6, #+532] \ 00000680 0800000A BEQ ??CheckComand_5 4513 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000684 0110A0E3 MOV R1,#+1 \ 00000688 02002DE9 PUSH {R1} \ 0000068C 000009E0 AND R0,R9,R0 \ 00000690 01002DE9 PUSH {R0} \ 00000694 1F3087E2 ADD R3,R7,#+31 \ 00000698 952F87E2 ADD R2,R7,#+596 \ ??CheckComand_6: \ 0000069C 0500A0E1 MOV R0,R5 \ 000006A0 ........ BL AddStringToLog \ 000006A4 08D08DE2 ADD SP,SP,#+8 4514 else 4515 SENDMSGCOUNT++; 4516 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_5: \ 000006A8 0B20A0E1 MOV R2,R11 \ 000006AC 0010A0E3 MOV R1,#+0 \ 000006B0 0800A0E1 MOV R0,R8 \ 000006B4 710100EF SWI +369 4517 mfree(send_txt); \ 000006B8 0400A0E1 MOV R0,R4 \ 000006BC 150000EF SWI +21 4518 return; \ ??CheckComand_12: \ 000006C0 47DF8DE2 ADD SP,SP,#+284 ;; stack cleaning \ 000006C4 F08FBDE8 POP {R4-R11,PC} ;; return 4519 } 4520 } 4521 //===========================komand list end 4522 \ In segment DATA_Z, align 4, align-sorted 4523 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 4524 char show_nick[32]; 4525 int INC_show; 4526 #ifdef ELKA 4527 int font =9; 4528 #else 4529 int font= 4; 4530 #endif 4531 const char color[4]={255,255,255,100}; 4532 \ In segment CODE, align 4, keep-with-next 4533 void show_pp_sender() 4534 { \ show_pp_sender: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 4535 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable81 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 500394E5 LDR R0,[R4, #+848] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F383BDB8 POPLT {R0,R1,R4-R9,PC} 4536 { 4537 WSHDR *ws=AllocWS(256); 4538 ascii2ws(ws,show_nick); 4539 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 4540 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000018 34619FE5 LDR R6,??show_pp_sender_0 ;; `?` \ 0000001C 400FA0E3 MOV R0,#+256 \ 00000020 250100EF SWI +293 \ 00000024 0050A0E1 MOV R5,R0 \ 00000028 F000A0E3 MOV R0,#+240 \ 0000002C 4C0D80E3 ORR R0,R0,#0x1300 \ 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] 4541 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 4542 { 4543 extern void DrawScreenShot(); 4544 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 4545 } 4546 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ ??show_pp_sender_1: \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 2E0100EF SWI +302 \ 0000007C 0070A0E1 MOV R7,R0 \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 2E0100EF SWI +302 \ 00000088 0080A0E1 MOV R8,R0 \ 0000008C 540394E5 LDR R0,[R4, #+852] \ 00000090 C50100EF SWI +453 \ 00000094 541394E5 LDR R1,[R4, #+852] \ 00000098 0090A0E1 MOV R9,R0 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 080200EF SWI +520 \ 000000A4 80002DE9 PUSH {R7} \ 000000A8 00012DE9 PUSH {R8} \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 02002DE9 PUSH {R1} \ 000000B4 023089E2 ADD R3,R9,#+2 \ 000000B8 022080E2 ADD R2,R0,#+2 \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 B40100EF SWI +436 4547 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,( char*) color,GetPaletteAdrByColorIndex(23)); \ 000000C4 1700A0E3 MOV R0,#+23 \ 000000C8 2E0100EF SWI +302 \ 000000CC 0080A0E1 MOV R8,R0 \ 000000D0 540394E5 LDR R0,[R4, #+852] \ 000000D4 C50100EF SWI +453 \ 000000D8 541394E5 LDR R1,[R4, #+852] \ 000000DC 0070A0E1 MOV R7,R0 \ 000000E0 0500A0E1 MOV R0,R5 \ 000000E4 080200EF SWI +520 \ 000000E8 00012DE9 PUSH {R8} \ 000000EC 081086E2 ADD R1,R6,#+8 \ 000000F0 02002DE9 PUSH {R1} \ 000000F4 033080E2 ADD R3,R0,#+3 \ 000000F8 0120A0E3 MOV R2,#+1 \ 000000FC 0500A0E1 MOV R0,R5 \ 00000100 0010A0E3 MOV R1,#+0 \ 00000104 02002DE9 PUSH {R1} \ 00000108 541394E5 LDR R1,[R4, #+852] \ 0000010C 02002DE9 PUSH {R1} \ 00000110 011087E2 ADD R1,R7,#+1 \ 00000114 02002DE9 PUSH {R1} \ 00000118 0210A0E1 MOV R1,R2 \ 0000011C 4C0100EF SWI +332 4548 4549 FreeWS(ws); \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 290100EF SWI +297 4550 INC_show--; \ 00000128 500394E5 LDR R0,[R4, #+848] 4551 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 0000012C 24209FE5 LDR R2,??show_pp_sender_0+0x4 ;; show_pp_sender \ 00000130 010040E2 SUB R0,R0,#+1 \ 00000134 500384E5 STR R0,[R4, #+848] \ 00000138 0A10A0E3 MOV R1,#+10 \ 0000013C 6800A0E3 MOV R0,#+104 \ 00000140 480D80E3 ORR R0,R0,#0x1200 \ 00000144 040080E0 ADD R0,R0,R4 \ 00000148 4D0000EF SWI +77 \ 0000014C 20D08DE2 ADD SP,SP,#+32 4552 } 4553 } \ 00000150 F383BDE8 POP {R0,R1,R4-R9,PC} ;; return \ ??show_pp_sender_0: \ 00000154 ........ DC32 `?` \ 00000158 ........ DC32 show_pp_sender 4554 4555 4556 \ In segment CODE, align 4, keep-with-next 4557 void Get_Online_total() 4558 { 4559 CLIST *t; 4560 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable81 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 C01280E5 STR R1,[R0, #+704] 4561 kopa_kontaktu=0; \ 0000000C C41280E5 STR R1,[R0, #+708] 4562 t=(CLIST *)(&cltop); \ 00000010 AA1F80E2 ADD R1,R0,#+680 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 4563 while(t=(CLIST *)(t->next)) 4564 { 4565 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 4566 { 4567 kopa_online++; \ 0000002C C02290E5 LDR R2,[R0, #+704] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 C02280E5 STR R2,[R0, #+704] 4568 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 C4229015 LDRNE R2,[R0, #+708] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 C4228015 STRNE R2,[R0, #+708] 4569 } 4570 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 4571 } \ 00000058 1EFF2FE1 BX LR ;; return 4572 \ In segment CODE, align 4, keep-with-next 4573 ProcessPacket(TPKT *p) 4574 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 50DF4DE2 SUB SP,SP,#+320 4575 4576 CLIST *t; 4577 LOGQ *q; 4578 char s[256]; 4579 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable88 ;; `?pkt.uin) \ ??ProcessPacket_3: \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 1800000A BEQ ??ProcessPacket_4 4587 { 4588 if ((t=FindContactByUin(p->pkt.uin))) \ 00000090 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000094 0090B0E1 MOVS R9,R0 \ 00000098 0E00000A BEQ ??ProcessPacket_5 4589 { 4590 // t->state=0xFFFF; 4591 if (!t->local) strncpy(t->name,p->data,63); \ 0000009C 900099E5 LDR R0,[R9, #+144] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300001A BNE ??ProcessPacket_6 \ 000000A8 3F20A0E3 MOV R2,#+63 \ 000000AC 081084E2 ADD R1,R4,#+8 \ 000000B0 140089E2 ADD R0,R9,#+20 \ 000000B4 160100EF SWI +278 4592 t->group=GROUP_CACHE; \ ??ProcessPacket_6: \ 000000B8 AC0297E5 LDR R0,[R7, #+684] \ 000000BC 100089E5 STR R0,[R9, #+16] 4593 ChangeContactPos(t); \ ??ProcessPacket_7: \ 000000C0 0900A0E1 MOV R0,R9 \ 000000C4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4594 RecountMenu(t,1); \ 000000C8 0110A0E3 MOV R1,#+1 \ 000000CC 0900A0E1 MOV R0,R9 \ ??ProcessPacket_8: \ 000000D0 ........ BL RecountMenu \ 000000D4 390200EA B ??ProcessPacket_1 4595 } 4596 else 4597 { 4598 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_5: \ 000000D8 AC2297E5 LDR R2,[R7, #+684] \ 000000DC 000094E5 LDR R0,[R4, #+0] \ 000000E0 0030A0E3 MOV R3,#+0 \ 000000E4 081084E2 ADD R1,R4,#+8 \ 000000E8 ........ _BLF AddContact,??AddContact??rA \ 000000EC 0610A0E1 MOV R1,R6 \ 000000F0 F6FFFFEA B ??ProcessPacket_8 4599 } 4600 } 4601 else 4602 { 4603 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000F4 200197E5 LDR R0,[R7, #+288] \ 000000F8 000050E3 CMP R0,#+0 \ 000000FC 0100000A BEQ ??ProcessPacket_9 4604 { 4605 vibra_count=1; \ 00000100 706287E5 STR R6,[R7, #+624] 4606 start_vibra(); \ 00000104 ........ BL start_vibra 4607 } 4608 GROUP_CACHE=0; \ ??ProcessPacket_9: \ 00000108 AC8287E5 STR R8,[R7, #+684] 4609 ask_my_info(); 4610 if (contactlist_menu_id) \ 0000010C B00297E5 LDR R0,[R7, #+688] \ 00000110 000050E3 CMP R0,#+0 \ 00000114 0200000A BEQ ??ProcessPacket_10 4611 { 4612 RecountMenu(NULL,1); \ 00000118 0110A0E3 MOV R1,#+1 \ 0000011C 0800A0E1 MOV R0,R8 \ ??ProcessPacket_11: \ 00000120 EAFFFFEA B ??ProcessPacket_8 4613 } 4614 else 4615 { 4616 create_contactlist_menu(); \ ??ProcessPacket_10: \ 00000124 ........ BL create_contactlist_menu \ 00000128 240200EA B ??ProcessPacket_1 4617 // if(!dontLogOnConnect && isLogOnline) dontLogOnConnect=1; 4618 } 4619 } 4620 break; 4621 case T_GROUPID: 4622 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_12: \ 0000012C AC0287E5 STR R0,[R7, #+684] \ 00000130 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000134 0090B0E1 MOVS R9,R0 \ 00000138 0400000A BEQ ??ProcessPacket_13 4623 { 4624 strncpy(t->name,p->data,63); \ 0000013C 3F20A0E3 MOV R2,#+63 \ 00000140 081084E2 ADD R1,R4,#+8 \ 00000144 140089E2 ADD R0,R9,#+20 \ 00000148 160100EF SWI +278 4625 ChangeContactPos(t); \ 0000014C DBFFFFEA B ??ProcessPacket_7 4626 RecountMenu(t,1); 4627 } 4628 else 4629 { 4630 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_13: \ 00000150 000094E5 LDR R0,[R4, #+0] \ 00000154 081084E2 ADD R1,R4,#+8 \ 00000158 ........ _BLF AddGroup,??AddGroup??rA \ 0000015C 0110A0E3 MOV R1,#+1 \ 00000160 DAFFFFEA B ??ProcessPacket_8 4631 } 4632 break; 4633 case T_GROUPFOLLOW: 4634 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_14: \ 00000164 AC0287E5 STR R0,[R7, #+684] \ 00000168 140200EA B ??ProcessPacket_1 4635 break; 4636 case T_STATUSCHANGE: 4637 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_15: \ 0000016C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000170 0090B0E1 MOVS R9,R0 4638 if (t) \ 00000174 C100000A BEQ ??ProcessPacket_16 4639 { 4640 int i=t->state; \ 00000178 B415D9E1 LDRH R1,[R9, #+84] 4641 CLIST *oldt=NULL; \ 0000017C 00A0A0E3 MOV R10,#+0 \ 00000180 10108DE5 STR R1,[SP, #+16] \ 00000184 0A00D4E5 LDRB R0,[R4, #+10] \ 00000188 B615D9E1 LDRH R1,[R9, #+86] \ 0000018C 000051E1 CMP R1,R0 \ 00000190 1B00000A BEQ ??ProcessPacket_17 4642 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 4643 { 4644 t->xstate=p->data[2]; \ 00000194 B605C9E1 STRH R0,[R9, #+86] 4645 FreeXText(t); \ 00000198 0900A0E1 MOV R0,R9 \ 0000019C ........ _BLF FreeXText,??FreeXText??rA 4646 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001A0 B605D9E1 LDRH R0,[R9, #+86] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 94019715 LDRNE R0,[R7, #+404] \ 000001AC 00005013 CMPNE R0,#+0 \ 000001B0 1200000A BEQ ??ProcessPacket_18 4647 { 4648 t->req_xtext=1; \ 000001B4 8C6089E5 STR R6,[R9, #+140] 4649 if (edchat_id) // Если открыт чат \ 000001B8 B40297E5 LDR R0,[R7, #+692] \ 000001BC 000050E3 CMP R0,#+0 \ 000001C0 0F00000A BEQ ??ProcessPacket_17 4650 { 4651 void *data=FindGUIbyId(edchat_id,NULL); \ 000001C4 B40297E5 LDR R0,[R7, #+692] \ 000001C8 0010A0E3 MOV R1,#+0 \ 000001CC 090200EF SWI +521 4652 if (data) \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 0A00000A BEQ ??ProcessPacket_17 4653 { 4654 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001D8 DF0100EF SWI +479 4655 if (ed_struct) \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 0700000A BEQ ??ProcessPacket_17 4656 { 4657 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001E4 000090E5 LDR R0,[R0, #+0] \ 000001E8 090050E1 CMP R0,R9 \ 000001EC 0400001A BNE ??ProcessPacket_17 4658 { 4659 t->req_xtext=0; \ 000001F0 8C8089E5 STR R8,[R9, #+140] 4660 RequestXText(t->uin); \ 000001F4 0C0099E5 LDR R0,[R9, #+12] \ 000001F8 ........ BL RequestXText \ 000001FC 000000EA B ??ProcessPacket_17 4661 } 4662 } 4663 } 4664 } 4665 } 4666 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 4667 { 4668 t->req_xtext=0; \ ??ProcessPacket_18: \ 00000200 8C8089E5 STR R8,[R9, #+140] 4669 } 4670 } 4671 if (contactlist_menu_id) \ ??ProcessPacket_17: \ 00000204 B00297E5 LDR R0,[R7, #+688] \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 0500000A BEQ ??ProcessPacket_19 4672 { 4673 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000210 B00297E5 LDR R0,[R7, #+688] \ 00000214 0010A0E3 MOV R1,#+0 \ 00000218 090200EF SWI +521 \ 0000021C 8F0100EF SWI +399 \ 00000220 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000224 00A0A0E1 MOV R10,R0 4674 } 4675 if(t->state==65535) t->change=1; \ ??ProcessPacket_19: \ 00000228 B405D9E1 LDRH R0,[R9, #+84] \ 0000022C FFB0A0E3 MOV R11,#+255 \ 00000230 FFBC8BE3 ORR R11,R11,#0xFF00 \ 00000234 0B0050E1 CMP R0,R11 \ 00000238 5C608905 STREQ R6,[R9, #+92] 4676 t->state=*((unsigned short *)(p->data)); \ 0000023C B800D4E1 LDRH R0,[R4, #+8] \ 00000240 B405C9E1 STRH R0,[R9, #+84] 4677 if((t->state!=65535)&&(t->change==1)) \ 00000244 0B0050E1 CMP R0,R11 \ 00000248 0400000A BEQ ??ProcessPacket_20 \ 0000024C 5C0099E5 LDR R0,[R9, #+92] \ 00000250 010050E3 CMP R0,#+1 4678 { 4679 t->just_now=2; \ 00000254 0200A003 MOVEQ R0,#+2 \ 00000258 58008905 STREQ R0,[R9, #+88] 4680 t->change=0; \ 0000025C 5C808905 STREQ R8,[R9, #+92] 4681 } 4682 LogStatusChange(t); \ ??ProcessPacket_20: \ 00000260 0900A0E1 MOV R0,R9 \ 00000264 ........ _BLF LogStatusChange,??LogStatusChange??rA 4683 ChangeContactPos(t); \ 00000268 0900A0E1 MOV R0,R9 \ 0000026C ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4684 RecountMenu(oldt,1); \ 00000270 0110A0E3 MOV R1,#+1 \ 00000274 0A00A0E1 MOV R0,R10 \ 00000278 ........ BL RecountMenu 4685 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ 0000027C B405D9E1 LDRH R0,[R9, #+84] \ 00000280 886FA0E3 MOV R6,#+544 \ 00000284 0B0050E1 CMP R0,R11 \ 00000288 3E00000A BEQ ??ProcessPacket_21 \ 0000028C 10109DE5 LDR R1,[SP, #+16] \ 00000290 0B0051E1 CMP R1,R11 \ 00000294 3B00001A BNE ??ProcessPacket_21 4686 { 4687 #ifdef EVILFOX 4688 if(!extended_sounds) 4689 { 4690 Play(sndGlobal); 4691 4692 } 4693 else 4694 { 4695 uins=t->uin; 4696 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); 4697 Play(talk_sound); 4698 4699 } 4700 #else 4701 /* 4702 #ifdef kluchnik 4703 void SetIconBarHandler(); 4704 if(t->uin==438532198) 4705 { 4706 solnce=1; 4707 SetIconBarHandler(); 4708 } 4709 #endif*/ 4710 if(!extended_sounds) \ 00000298 C80197E5 LDR R0,[R7, #+456] \ 0000029C 04A0A0E3 MOV R10,#+4 \ 000002A0 70AE8AE3 ORR R10,R10,#0x700 \ 000002A4 000050E3 CMP R0,#+0 \ 000002A8 2300001A BNE ??ProcessPacket_22 4711 { 4712 Play(sndGlobal); \ 000002AC 07008AE0 ADD R0,R10,R7 \ ??ProcessPacket_23: \ 000002B0 ........ BL Play 4713 if(isLogOnline) //by kluchnik 26.03.08 \ 000002B4 B80097E5 LDR R0,[R7, #+184] \ 000002B8 000050E3 CMP R0,#+0 \ 000002BC 6B00000A BEQ ??ProcessPacket_24 4714 { 4715 FreeXText2(t); \ 000002C0 0900A0E1 MOV R0,R9 \ 000002C4 ........ BL FreeXText2 4716 TTime time; 4717 TDate date; 4718 GetDateTime(&date,&time); \ 000002C8 0D10A0E1 MOV R1,SP \ 000002CC 08008DE2 ADD R0,SP,#+8 \ 000002D0 B40000EF SWI +180 4719 char *txt=malloc(64); \ 000002D4 4000A0E3 MOV R0,#+64 \ 000002D8 140000EF SWI +20 \ 000002DC 0080A0E1 MOV R8,R0 4720 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); \ 000002E0 0D00DDE5 LDRB R0,[SP, #+13] \ 000002E4 051086E0 ADD R1,R6,R5 \ 000002E8 01002DE9 PUSH {R0} \ 000002EC 1000DDE5 LDRB R0,[SP, #+16] \ 000002F0 01002DE9 PUSH {R0} \ 000002F4 0A00DDE5 LDRB R0,[SP, #+10] \ 000002F8 01002DE9 PUSH {R0} \ 000002FC 0C20DDE5 LDRB R2,[SP, #+12] \ 00000300 0D30DDE5 LDRB R3,[SP, #+13] \ 00000304 0800A0E1 MOV R0,R8 \ 00000308 160000EF SWI +22 4721 4722 t->xtext2=malloc(64); \ 0000030C 4000A0E3 MOV R0,#+64 \ 00000310 140000EF SWI +20 \ 00000314 880089E5 STR R0,[R9, #+136] 4723 snprintf(t->xtext2,64,txt); \ 00000318 0820A0E1 MOV R2,R8 \ 0000031C 4010A0E3 MOV R1,#+64 \ 00000320 1B0100EF SWI +283 4724 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); \ 00000324 0000A0E3 MOV R0,#+0 \ 00000328 01002DE9 PUSH {R0} \ 0000032C 0000E0E1 MVN R0,R0 \ 00000330 01002DE9 PUSH {R0} \ 00000334 08004AE2 SUB R0,R10,#+8 \ 00000338 3F0000EA B ??ProcessPacket_25 4725 ReqAddMsgToChat(t); 4726 // RecountMenu(t, 1); 4727 RecountMenu(NULL, 0); 4728 mfree(txt); 4729 } 4730 } 4731 else 4732 { 4733 FSTATS stat; 4734 int fsize; 4735 unsigned int ul = 0; \ ??ProcessPacket_22: \ 0000033C 14808DE5 STR R8,[SP, #+20] 4736 uins=t->uin; \ 00000340 0C0099E5 LDR R0,[R9, #+12] 4737 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ 00000344 E08F8AE2 ADD R8,R10,#+896 \ 00000348 EC0187E5 STR R0,[R7, #+492] \ 0000034C 0030A0E1 MOV R3,R0 \ 00000350 D00F48E2 SUB R0,R8,#+832 \ 00000354 072080E0 ADD R2,R0,R7 \ 00000358 5C1E85E2 ADD R1,R5,#+1472 \ 0000035C 070088E0 ADD R0,R8,R7 \ 00000360 160000EF SWI +22 4738 GetFileStats(talk_sound,&stat,&ul); \ 00000364 14208DE2 ADD R2,SP,#+20 \ 00000368 461F8DE2 ADD R1,SP,#+280 \ 0000036C 070088E0 ADD R0,R8,R7 \ 00000370 840000EF SWI +132 4739 fsize=stat.size; 4740 if(fsize>0) \ 00000374 1C019DE5 LDR R0,[SP, #+284] \ 00000378 010050E3 CMP R0,#+1 4741 Play(talk_sound); \ 0000037C 070088A0 ADDGE R0,R8,R7 4742 else 4743 Play(sndGlobal); \ 00000380 07008AB0 ADDLT R0,R10,R7 \ 00000384 C9FFFFEA B ??ProcessPacket_23 4744 if(isLogOnline ) //by kluchnik 26.03.08 4745 { 4746 FreeXText2(t); 4747 TTime time; 4748 TDate date; 4749 GetDateTime(&date,&time); 4750 char *txt=malloc(64); 4751 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); 4752 4753 t->xtext2=malloc(64); 4754 snprintf(t->xtext2,64,txt); 4755 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); 4756 ReqAddMsgToChat(t); 4757 // RecountMenu(t, 1); 4758 RecountMenu(NULL, 0); 4759 mfree(txt); 4760 } 4761 } 4762 #endif 4763 } 4764 4765 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_21: \ 00000388 10109DE5 LDR R1,[SP, #+16] \ 0000038C 0B0051E1 CMP R1,R11 \ 00000390 3600000A BEQ ??ProcessPacket_24 \ 00000394 0B0050E1 CMP R0,R11 \ 00000398 3400001A BNE ??ProcessPacket_24 4766 { 4767 Play(sndSrvMsg); \ 0000039C C400A0E3 MOV R0,#+196 \ 000003A0 600E80E3 ORR R0,R0,#0x600 \ 000003A4 070080E0 ADD R0,R0,R7 \ 000003A8 ........ BL Play 4768 4769 //-------------------- Log offline ----------------------// 4770 4771 if(t->isactive && isLogOffline) // by kluchnik 26.03.08 \ 000003AC 7C0099E5 LDR R0,[R9, #+124] \ 000003B0 000050E3 CMP R0,#+0 \ 000003B4 B4009715 LDRNE R0,[R7, #+180] \ 000003B8 00005013 CMPNE R0,#+0 \ 000003BC 2B00000A BEQ ??ProcessPacket_24 4772 { 4773 FreeXText2(t); \ 000003C0 0900A0E1 MOV R0,R9 \ 000003C4 ........ BL FreeXText2 4774 TTime time; 4775 TDate date; 4776 GetDateTime(&date,&time); \ 000003C8 0D10A0E1 MOV R1,SP \ 000003CC 08008DE2 ADD R0,SP,#+8 \ 000003D0 B40000EF SWI +180 4777 char *txt=malloc(64); \ 000003D4 4000A0E3 MOV R0,#+64 \ 000003D8 140000EF SWI +20 \ 000003DC 0080A0E1 MOV R8,R0 4778 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); \ 000003E0 0D00DDE5 LDRB R0,[SP, #+13] \ 000003E4 051086E0 ADD R1,R6,R5 \ 000003E8 01002DE9 PUSH {R0} \ 000003EC 1000DDE5 LDRB R0,[SP, #+16] \ 000003F0 01002DE9 PUSH {R0} \ 000003F4 0A00DDE5 LDRB R0,[SP, #+10] \ 000003F8 01002DE9 PUSH {R0} \ 000003FC 0C20DDE5 LDRB R2,[SP, #+12] \ 00000400 0D30DDE5 LDRB R3,[SP, #+13] \ 00000404 0800A0E1 MOV R0,R8 \ 00000408 160000EF SWI +22 4779 4780 t->xtext2=malloc(64); \ 0000040C 4000A0E3 MOV R0,#+64 \ 00000410 140000EF SWI +20 \ 00000414 880089E5 STR R0,[R9, #+136] 4781 snprintf(t->xtext2,64,txt); \ 00000418 0820A0E1 MOV R2,R8 \ 0000041C 4010A0E3 MOV R1,#+64 \ 00000420 1B0100EF SWI +283 4782 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); \ 00000424 0000A0E3 MOV R0,#+0 \ 00000428 01002DE9 PUSH {R0} \ 0000042C 0000E0E1 MVN R0,R0 \ 00000430 01002DE9 PUSH {R0} \ 00000434 FC00A0E3 MOV R0,#+252 \ 00000438 600E80E3 ORR R0,R0,#0x600 \ ??ProcessPacket_25: \ 0000043C 053080E0 ADD R3,R0,R5 \ 00000440 0820A0E1 MOV R2,R8 \ 00000444 0310A0E3 MOV R1,#+3 \ 00000448 0900A0E1 MOV R0,R9 \ 0000044C ........ BL AddStringToLog 4783 ReqAddMsgToChat(t); \ 00000450 0900A0E1 MOV R0,R9 \ 00000454 ........ BL ReqAddMsgToChat 4784 // RecountMenu(t, 1); 4785 RecountMenu(NULL, 0); \ 00000458 0010A0E3 MOV R1,#+0 \ 0000045C 0000A0E3 MOV R0,#+0 \ 00000460 ........ BL RecountMenu 4786 mfree(txt); \ 00000464 0800A0E1 MOV R0,R8 \ 00000468 150000EF SWI +21 \ 0000046C 14D08DE2 ADD SP,SP,#+20 4787 } 4788 } 4789 4790 //------------------------------------------------------------// 4791 4792 if(TIME_OR_MSG==2) \ ??ProcessPacket_24: \ 00000470 F80097E5 LDR R0,[R7, #+248] \ 00000474 020050E3 CMP R0,#+2 \ 00000478 0000001A BNE ??ProcessPacket_16 4793 Get_Online_total(); \ 0000047C ........ BL Get_Online_total 4794 } 4795 if (edchat_id) \ ??ProcessPacket_16: \ 00000480 B40297E5 LDR R0,[R7, #+692] \ 00000484 000050E3 CMP R0,#+0 \ 00000488 4C01000A BEQ ??ProcessPacket_1 4796 { 4797 void *data=FindGUIbyId(edchat_id,NULL); \ 0000048C B40297E5 LDR R0,[R7, #+692] \ 00000490 0010A0E3 MOV R1,#+0 \ 00000494 090200EF SWI +521 4798 { 4799 EDCHAT_STRUCT *ed_struct; 4800 ed_struct=EDIT_GetUserPointer(data); \ 00000498 DF0100EF SWI +479 4801 if (ed_struct) \ 0000049C 000050E3 CMP R0,#+0 \ 000004A0 4601000A BEQ ??ProcessPacket_1 4802 { 4803 if (ed_struct->ed_contact==t) \ 000004A4 000090E5 LDR R0,[R0, #+0] \ 000004A8 090050E1 CMP R0,R9 \ 000004AC 4301001A BNE ??ProcessPacket_1 4804 { 4805 DirectRedrawGUI_ID(edchat_id); \ 000004B0 B40297E5 LDR R0,[R7, #+692] \ 000004B4 400100EF SWI +320 \ 000004B8 400100EA B ??ProcessPacket_1 4806 } 4807 } 4808 } 4809 } 4810 break; 4811 case T_RECVMSG: 4812 NEW_MSG=1; \ ??ProcessPacket_26: \ 000004BC 446387E5 STR R6,[R7, #+836] 4813 t=FindContactByUin(p->pkt.uin); \ 000004C0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000004C4 0090B0E1 MOVS R9,R0 4814 if (!t) \ 000004C8 0900001A BNE ??ProcessPacket_27 4815 { 4816 sprintf(s,percent_d,p->pkt.uin); \ 000004CC 002094E5 LDR R2,[R4, #+0] \ 000004D0 1B1085E2 ADD R1,R5,#+27 \ 000004D4 18008DE2 ADD R0,SP,#+24 \ 000004D8 160000EF SWI +22 4817 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 000004DC AC2297E5 LDR R2,[R7, #+684] \ 000004E0 000094E5 LDR R0,[R4, #+0] \ 000004E4 0030A0E3 MOV R3,#+0 \ 000004E8 18108DE2 ADD R1,SP,#+24 \ 000004EC ........ _BLF AddContact,??AddContact??rA \ 000004F0 0090A0E1 MOV R9,R0 4818 } 4819 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ 00000524 5A0FA013 MOVNE R0,#+360 \ 00000528 7C008915 STRNE R0,[R9, #+124] 4822 // ChangeContactPos(t); 4823 if(VIBR_TYPE) \ 0000052C 280197E5 LDR R0,[R7, #+296] \ 00000530 000050E3 CMP R0,#+0 4824 vibra_count=2; \ 00000534 0200A013 MOVNE R0,#+2 \ 00000538 70028715 STRNE R0,[R7, #+624] 4825 else 4826 vibra_count=1; \ 0000053C 70628705 STREQ R6,[R7, #+624] 4827 start_vibra(); \ 00000540 ........ BL start_vibra 4828 #ifdef ELKA 4829 if(SLI_TYPE) 4830 SLI_Timer(); 4831 #endif 4832 if(Is_Double_Vibra_On) \ 00000544 040297E5 LDR R0,[R7, #+516] \ 00000548 000050E3 CMP R0,#+0 \ 0000054C 0000000A BEQ ??ProcessPacket_29 4833 Reminder_timer(); \ 00000550 ........ BL Reminder_timer 4834 if (Is_ILU_On) \ ??ProcessPacket_29: \ 00000554 000297E5 LDR R0,[R7, #+512] \ 00000558 000050E3 CMP R0,#+0 \ 0000055C 0400000A BEQ ??ProcessPacket_30 4835 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000560 C03197E5 LDR R3,[R7, #+448] \ 00000564 AC2197E5 LDR R2,[R7, #+428] \ 00000568 A81197E5 LDR R1,[R7, #+424] \ 0000056C A40197E5 LDR R0,[R7, #+420] \ 00000570 ........ BL IlluminationOn 4836 if (t->name[0]=='#') \ ??ProcessPacket_30: \ 00000574 1400D9E5 LDRB R0,[R9, #+20] \ 00000578 230050E3 CMP R0,#+35 \ 0000057C 1700001A BNE ??ProcessPacket_31 4837 { 4838 //Если это конференция, патчим имя 4839 char *s=strchr(p->data,'>'); \ 00000580 3E10A0E3 MOV R1,#+62 \ 00000584 080084E2 ADD R0,R4,#+8 \ 00000588 180000EF SWI +24 4840 //Если нашли символ > и после него пробел и ник короче 16 символов 4841 if (s) \ 0000058C 000050E3 CMP R0,#+0 \ 00000590 1200000A BEQ ??ProcessPacket_31 4842 { 4843 if ((s[1]==' ')&&((s-p->data)<16)) \ 00000594 0110D0E5 LDRB R1,[R0, #+1] \ 00000598 200051E3 CMP R1,#+32 \ 0000059C 0F00001A BNE ??ProcessPacket_31 \ 000005A0 081084E2 ADD R1,R4,#+8 \ 000005A4 011040E0 SUB R1,R0,R1 \ 000005A8 100051E3 CMP R1,#+16 \ 000005AC 0B0000AA BGE ??ProcessPacket_31 4844 { 4845 *s=0; //Режем строку \ 000005B0 0080C0E5 STRB R8,[R0, #+0] 4846 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 000005B4 0110A0E3 MOV R1,#+1 \ 000005B8 02002DE9 PUSH {R1} \ 000005BC 083084E2 ADD R3,R4,#+8 \ 000005C0 022080E2 ADD R2,R0,#+2 \ 000005C4 0900A0E1 MOV R0,R9 \ 000005C8 001061E2 RSB R1,R1,#+0 \ 000005CC 02002DE9 PUSH {R1} \ 000005D0 0210A0E3 MOV R1,#+2 \ 000005D4 ........ BL AddStringToLog 4847 goto L1; \ 000005D8 08D08DE2 ADD SP,SP,#+8 \ 000005DC 2A0000EA B ??ProcessPacket_32 4848 } 4849 } 4850 } 4851 4852 //=================== tas bus jautri ===================// 4853 4854 comanda=1; \ ??ProcessPacket_31: \ 000005E0 4C6387E5 STR R6,[R7, #+844] 4855 // if(UIN!=t->uin) 4856 CheckComand(p->data, t, t->name); \ 000005E4 142089E2 ADD R2,R9,#+20 \ 000005E8 0910A0E1 MOV R1,R9 \ 000005EC 080084E2 ADD R0,R4,#+8 \ 000005F0 ........ BL CheckComand 4857 if(comanda==1) \ 000005F4 4C0397E5 LDR R0,[R7, #+844] \ 000005F8 010050E3 CMP R0,#+1 \ 000005FC 2200001A BNE ??ProcessPacket_32 4858 { 4859 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 00000600 01002DE9 PUSH {R0} \ 00000604 143089E2 ADD R3,R9,#+20 \ 00000608 082084E2 ADD R2,R4,#+8 \ 0000060C 0210A0E3 MOV R1,#+2 \ 00000610 000066E2 RSB R0,R6,#+0 \ 00000614 01002DE9 PUSH {R0} \ 00000618 0900A0E1 MOV R0,R9 \ 0000061C ........ BL AddStringToLog 4860 main_count++; \ 00000620 ........ LDR R0,??DataTable84 ;; main_count \ 00000624 001090E5 LDR R1,[R0, #+0] \ 00000628 011081E2 ADD R1,R1,#+1 \ 0000062C 001080E5 STR R1,[R0, #+0] 4861 if(Is_INC_On) \ 00000630 FC0197E5 LDR R0,[R7, #+508] \ 00000634 08D08DE2 ADD SP,SP,#+8 \ 00000638 000050E3 CMP R0,#+0 \ 0000063C 0C00000A BEQ ??ProcessPacket_33 4862 { 4863 strcpy(show_nick, t->name); \ 00000640 141089E2 ADD R1,R9,#+20 \ 00000644 F000A0E3 MOV R0,#+240 \ 00000648 4C0D80E3 ORR R0,R0,#0x1300 \ 0000064C 070080E0 ADD R0,R0,R7 \ 00000650 1A0000EF SWI +26 4864 if(!IsIdleUiOnTop()&&(!saver_on)) \ 00000654 C50000EF SWI +197 \ 00000658 000050E3 CMP R0,#+0 \ 0000065C F0019705 LDREQ R0,[R7, #+496] \ 00000660 00005003 CMPEQ R0,#+0 \ 00000664 0200001A BNE ??ProcessPacket_33 4865 { 4866 //int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 4867 // char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 4868 // if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) 4869 // { 4870 INC_show=15; \ 00000668 0F00A0E3 MOV R0,#+15 \ 0000066C 500387E5 STR R0,[R7, #+848] 4871 show_pp_sender(); \ 00000670 ........ BL show_pp_sender 4872 //} 4873 } 4874 } 4875 if(Is_SMARTCPU_On) \ ??ProcessPacket_33: \ 00000674 F80197E5 LDR R0,[R7, #+504] \ 00000678 000050E3 CMP R0,#+0 \ 0000067C 0200000A BEQ ??ProcessPacket_32 4876 AddToMain(t->name,p->data); \ 00000680 081084E2 ADD R1,R4,#+8 \ 00000684 140089E2 ADD R0,R9,#+20 \ 00000688 ........ BL AddToMain 4877 } 4878 // if((Is_SMARTCPU_On)&&(comanda==1)) 4879 // AddToMain(t->name,p->data); 4880 L1: 4881 //Разворачиваем группу, в которой пришло сообщение 4882 { 4883 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_32: \ 0000068C 100099E5 LDR R0,[R9, #+16] \ 00000690 ........ _BLF FindGroupByID,??FindGroupByID??rA 4884 if (g) \ 00000694 000050E3 CMP R0,#+0 4885 { 4886 if (g->state) \ 00000698 B415D011 LDRHNE R1,[R0, #+84] \ 0000069C 00005113 CMPNE R1,#+0 4887 { 4888 g->state=0; \ 000006A0 B485C011 STRHNE R8,[R0, #+84] 4889 } 4890 } 4891 } 4892 // if(comanda==1) 4893 // { 4894 ReqAddMsgToChat(t); \ 000006A4 0900A0E1 MOV R0,R9 \ 000006A8 ........ BL ReqAddMsgToChat 4895 RecountMenu(t,1); \ 000006AC 0110A0E3 MOV R1,#+1 \ 000006B0 0900A0E1 MOV R0,R9 \ 000006B4 ........ BL RecountMenu 4896 4897 switch (DEVELOP_IF) \ 000006B8 2C0197E5 LDR R0,[R7, #+300] \ 000006BC 000050E3 CMP R0,#+0 \ 000006C0 0400000A BEQ ??ProcessPacket_34 \ 000006C4 010050E2 SUBS R0,R0,#+1 \ 000006C8 0B00000A BEQ ??ProcessPacket_35 \ 000006CC 020050E2 SUBS R0,R0,#+2 \ 000006D0 1300000A BEQ ??ProcessPacket_36 \ 000006D4 B90000EA B ??ProcessPacket_1 4898 { 4899 case 0: 4900 #ifdef EVILFOX 4901 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) GBS_StartTimerProc(&develop, 216*2, to_develop); 4902 #else 4903 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_34: \ 000006D8 068100EF SWI +33030 \ 000006DC 080090E5 LDR R0,[R0, #+8] \ 000006E0 0C1297E5 LDR R1,[R7, #+524] \ 000006E4 0C0090E5 LDR R0,[R0, #+12] \ 000006E8 0C0090E5 LDR R0,[R0, #+12] \ 000006EC 010050E1 CMP R0,R1 \ ??ProcessPacket_37: \ 000006F0 B200000A BEQ ??ProcessPacket_1 \ 000006F4 ........ BL to_develop \ 000006F8 B00000EA B ??ProcessPacket_1 4904 #endif 4905 break; 4906 case 1: 4907 #ifdef EVILFOX 4908 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) GBS_StartTimerProc(&develop, 216*2, to_develop); 4909 #else 4910 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_35: \ 000006FC 068100EF SWI +33030 \ 00000700 080090E5 LDR R0,[R0, #+8] \ 00000704 0C1297E5 LDR R1,[R7, #+524] \ 00000708 0C0090E5 LDR R0,[R0, #+12] \ 0000070C 0C0090E5 LDR R0,[R0, #+12] \ 00000710 010050E1 CMP R0,R1 \ 00000714 A900000A BEQ ??ProcessPacket_1 \ 00000718 430000EF SWI +67 \ 0000071C 000050E3 CMP R0,#+0 \ 00000720 F2FFFFEA B ??ProcessPacket_37 4911 #endif 4912 break; 4913 case 2: 4914 break; 4915 case 3: 4916 GBS_DelTimer(&develop); \ ??ProcessPacket_36: \ 00000724 6800A0E3 MOV R0,#+104 \ 00000728 480D80E3 ORR R0,R0,#0x1200 \ 0000072C 070080E0 ADD R0,R0,R7 \ 00000730 8C0100EF SWI +396 4917 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 00000734 068100EF SWI +33030 \ 00000738 080090E5 LDR R0,[R0, #+8] \ 0000073C 0C1297E5 LDR R1,[R7, #+524] \ 00000740 0C0090E5 LDR R0,[R0, #+12] \ 00000744 0C0090E5 LDR R0,[R0, #+12] \ 00000748 010050E1 CMP R0,R1 \ 0000074C 9B00000A BEQ ??ProcessPacket_1 \ 00000750 430000EF SWI +67 \ 00000754 000050E3 CMP R0,#+0 \ 00000758 9800001A BNE ??ProcessPacket_1 \ 0000075C ........ BL begin_to_develop \ 00000760 960000EA B ??ProcessPacket_1 4918 break; 4919 } 4920 // } 4921 break; 4922 case T_SRV_ACK: 4923 case T_CLIENT_ACK: 4924 q=FindContactLOGQByAck(p); \ ??ProcessPacket_38: \ 00000764 0400A0E1 MOV R0,R4 \ 00000768 ........ BL FindContactLOGQByAck 4925 /* if (q&&(p->pkt.type==T_SRV_ACK)) 4926 { 4927 if (Is_ILU_On) 4928 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); 4929 }//Illumination by BoBa 19.04.2007 */ 4930 /* if (( 4931 IsGuiOnTop(contactlist_menu_id)|| 4932 IsGuiOnTop(edchat_id) 4933 )&&(q)) 4934 { 4935 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 4936 GetPaletteAdrByColorIndex(0), 4937 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 4938 }*/ 4939 if (q) \ 0000076C 000050E3 CMP R0,#+0 \ 00000770 9200000A BEQ ??ProcessPacket_1 4940 { 4941 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 00000774 B410D4E1 LDRH R1,[R4, #+4] \ 00000778 100051E3 CMP R1,#+16 \ 0000077C 0110A003 MOVEQ R1,#+1 \ 00000780 0210A013 MOVNE R1,#+2 \ 00000784 041080E5 STR R1,[R0, #+4] 4942 t=FindContactByUin(p->pkt.uin); \ 00000788 000094E5 LDR R0,[R4, #+0] \ 0000078C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000790 0090A0E1 MOV R9,R0 4943 if (edchat_id) \ 00000794 B40297E5 LDR R0,[R7, #+692] \ 00000798 000050E3 CMP R0,#+0 \ 0000079C 8700000A BEQ ??ProcessPacket_1 4944 { 4945 void *data=FindGUIbyId(edchat_id,NULL); \ 000007A0 B40297E5 LDR R0,[R7, #+692] \ 000007A4 0010A0E3 MOV R1,#+0 \ 000007A8 090200EF SWI +521 \ 000007AC 0050B0E1 MOVS R5,R0 4946 if (data) \ 000007B0 8200000A BEQ ??ProcessPacket_1 4947 { 4948 EDCHAT_STRUCT *ed_struct; 4949 ed_struct=EDIT_GetUserPointer(data); \ 000007B4 DF0100EF SWI +479 4950 if (ed_struct) \ 000007B8 000050E3 CMP R0,#+0 \ 000007BC 7F00000A BEQ ??ProcessPacket_1 4951 { 4952 if (ed_struct->ed_contact==t) \ 000007C0 000090E5 LDR R0,[R0, #+0] \ 000007C4 090050E1 CMP R0,R9 \ 000007C8 7C00001A BNE ??ProcessPacket_1 4953 { 4954 if (EDIT_IsBusy(data)) \ 000007CC 0500A0E1 MOV R0,R5 \ 000007D0 1C0200EF SWI +540 \ 000007D4 000050E3 CMP R0,#+0 \ 000007D8 0300000A BEQ ??ProcessPacket_39 4955 { 4956 t->req_drawack=1; \ 000007DC 6C6089E5 STR R6,[R9, #+108] 4957 #ifdef EVILFOX 4958 time_to_stop_t9=2; 4959 #else 4960 time_to_stop_t9=3; \ 000007E0 0300A0E3 MOV R0,#+3 \ 000007E4 480387E5 STR R0,[R7, #+840] \ 000007E8 740000EA B ??ProcessPacket_1 4961 #endif 4962 } 4963 else { 4964 DrawAck(data); \ ??ProcessPacket_39: \ 000007EC 0500A0E1 MOV R0,R5 \ 000007F0 ........ BL DrawAck 4965 if (p->pkt.type==T_SRV_ACK) \ 000007F4 B400D4E1 LDRH R0,[R4, #+4] \ 000007F8 100050E3 CMP R0,#+16 \ 000007FC 6F00001A BNE ??ProcessPacket_1 4966 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000800 C03197E5 LDR R3,[R7, #+448] \ 00000804 B82197E5 LDR R2,[R7, #+440] \ 00000808 B41197E5 LDR R1,[R7, #+436] \ 0000080C B00197E5 LDR R0,[R7, #+432] \ 00000810 ........ BL IlluminationOn \ 00000814 690000EA B ??ProcessPacket_1 4967 } 4968 } 4969 } 4970 } 4971 } 4972 } 4973 break; 4974 case T_XTEXT_ACK: 4975 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_40: \ 00000818 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000081C 0090B0E1 MOVS R9,R0 4976 if (t) \ 00000820 6600000A BEQ ??ProcessPacket_1 4977 { 4978 int i; 4979 int j; 4980 FreeXText(t); \ 00000824 ........ _BLF FreeXText,??FreeXText??rA 4981 i=p->pkt.data_len; \ 00000828 B660D4E1 LDRH R6,[R4, #+6] 4982 memcpy(t->xtext=malloc(i),p->data,i); \ 0000082C 0600A0E1 MOV R0,R6 \ 00000830 140000EF SWI +20 \ 00000834 840089E5 STR R0,[R9, #+132] \ 00000838 0620A0E1 MOV R2,R6 \ 0000083C 081084E2 ADD R1,R4,#+8 \ 00000840 1E0100EF SWI +286 4983 zeromem(s,256); \ 00000844 401FA0E3 MOV R1,#+256 \ 00000848 18008DE2 ADD R0,SP,#+24 \ 0000084C 1D0100EF SWI +285 4984 strcpy(s,t->name); \ 00000850 141089E2 ADD R1,R9,#+20 \ 00000854 18008DE2 ADD R0,SP,#+24 \ 00000858 1A0000EF SWI +26 4985 strcat(s,":\n"); \ 0000085C 5B1F8FE2 ADR R1,??ProcessPacket_41 ;; ":\n" \ 00000860 18008DE2 ADD R0,SP,#+24 \ 00000864 170000EF SWI +23 4986 i=strlen(s); \ 00000868 18008DE2 ADD R0,SP,#+24 \ 0000086C 1B0000EF SWI +27 4987 j=p->data[0]; \ 00000870 0860D4E5 LDRB R6,[R4, #+8] \ 00000874 0070A0E1 MOV R7,R0 4988 if (j>(255-i)) j=255-i; \ 00000878 FF0067E2 RSB R0,R7,#+255 \ 0000087C 060050E1 CMP R0,R6 \ 00000880 0060A0B1 MOVLT R6,R0 4989 strncpy(s+i,p->data+1,j); \ 00000884 0620A0E1 MOV R2,R6 \ 00000888 091084E2 ADD R1,R4,#+9 \ 0000088C 18008DE2 ADD R0,SP,#+24 \ 00000890 000087E0 ADD R0,R7,R0 \ 00000894 160100EF SWI +278 4990 i+=j; \ 00000898 070086E0 ADD R0,R6,R7 4991 if (i<255) \ 0000089C FF0050E3 CMP R0,#+255 \ 000008A0 100000AA BGE ??ProcessPacket_42 4992 { 4993 s[i]='\n'; \ 000008A4 18108DE2 ADD R1,SP,#+24 \ 000008A8 0A20A0E3 MOV R2,#+10 \ 000008AC 0120C0E7 STRB R2,[R0, +R1] 4994 i++; \ 000008B0 0810D4E5 LDRB R1,[R4, #+8] \ 000008B4 B620D4E1 LDRH R2,[R4, #+6] \ 000008B8 010080E2 ADD R0,R0,#+1 4995 j=p->pkt.data_len-p->data[0]-1; 4996 if (j>(255-i)) j=255-i; 4997 strncpy(s+i,p->data+p->data[0]+1,j); \ 000008BC 18308DE2 ADD R3,SP,#+24 \ 000008C0 012042E0 SUB R2,R2,R1 \ 000008C4 016042E2 SUB R6,R2,#+1 \ 000008C8 FF2060E2 RSB R2,R0,#+255 \ 000008CC 060052E1 CMP R2,R6 \ 000008D0 0260A0B1 MOVLT R6,R2 \ 000008D4 0620A0E1 MOV R2,R6 \ 000008D8 041081E0 ADD R1,R1,R4 \ 000008DC 091081E2 ADD R1,R1,#+9 \ 000008E0 030080E0 ADD R0,R0,R3 \ 000008E4 160100EF SWI +278 4998 } 4999 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 5000 //if (!edchat_id && // Только если редактор не наверху 5001 // strlen(p->data)) // и x-status не пустой 5002 // ShowMSG(0,(int)s); 5003 5004 /* 5005 #ifdef EVILFOX 5006 #else 5007 if (!edchat_id) ShowMSG(0,(int)s); // Только если редактор не наверху 5008 #endif 5009 */ 5010 zeromem(s,256); \ ??ProcessPacket_42: \ 000008E8 401FA0E3 MOV R1,#+256 \ 000008EC 18008DE2 ADD R0,SP,#+24 \ 000008F0 1D0100EF SWI +285 5011 i=0; 5012 j=p->data[0]; \ 000008F4 0860D4E5 LDRB R6,[R4, #+8] 5013 if (j>(255-i)) j=255-i; 5014 strncpy(s,p->data+1,j); \ 000008F8 091084E2 ADD R1,R4,#+9 \ 000008FC 18008DE2 ADD R0,SP,#+24 \ 00000900 400F56E3 CMP R6,#+256 \ 00000904 FF60A0A3 MOVGE R6,#+255 \ 00000908 0620A0E1 MOV R2,R6 \ 0000090C 160100EF SWI +278 5015 i+=j; 5016 if (i<255) \ 00000910 FF0056E3 CMP R6,#+255 \ 00000914 100000AA BGE ??ProcessPacket_43 5017 { 5018 s[i++]=13; \ 00000918 18108DE2 ADD R1,SP,#+24 \ 0000091C 0D20A0E3 MOV R2,#+13 \ 00000920 0120C6E7 STRB R2,[R6, +R1] \ 00000924 0810D4E5 LDRB R1,[R4, #+8] \ 00000928 B620D4E1 LDRH R2,[R4, #+6] \ 0000092C 010086E2 ADD R0,R6,#+1 5019 j=p->pkt.data_len-p->data[0]-1; 5020 if (j>(255-i)) j=255-i; 5021 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000930 18308DE2 ADD R3,SP,#+24 \ 00000934 012042E0 SUB R2,R2,R1 \ 00000938 016042E2 SUB R6,R2,#+1 \ 0000093C FF2060E2 RSB R2,R0,#+255 \ 00000940 060052E1 CMP R2,R6 \ 00000944 0260A0B1 MOVLT R6,R2 \ 00000948 0620A0E1 MOV R2,R6 \ 0000094C 041081E0 ADD R1,R1,R4 \ 00000950 091081E2 ADD R1,R1,#+9 \ 00000954 030080E0 ADD R0,R0,R3 \ 00000958 160100EF SWI +278 5022 } 5023 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_43: \ 0000095C 0100A0E3 MOV R0,#+1 \ 00000960 01002DE9 PUSH {R0} \ 00000964 0310A0E3 MOV R1,#+3 \ 00000968 000060E2 RSB R0,R0,#+0 \ 0000096C 01002DE9 PUSH {R0} \ 00000970 20208DE2 ADD R2,SP,#+32 \ 00000974 FC00A0E3 MOV R0,#+252 \ 00000978 600E80E3 ORR R0,R0,#0x600 \ 0000097C 053080E0 ADD R3,R0,R5 \ 00000980 0900A0E1 MOV R0,R9 \ 00000984 ........ BL AddStringToLog 5024 ReqAddMsgToChat(t); \ 00000988 0900A0E1 MOV R0,R9 \ 0000098C ........ BL ReqAddMsgToChat 5025 if (strlen(p->data)) // Если x-status не пустой \ 00000990 080084E2 ADD R0,R4,#+8 \ 00000994 1B0000EF SWI +27 \ 00000998 000050E3 CMP R0,#+0 \ 0000099C 08D08DE2 ADD SP,SP,#+8 5026 RecountMenu(t, 1); \ 000009A0 0110A013 MOVNE R1,#+1 \ 000009A4 0900A011 MOVNE R0,R9 \ 000009A8 C8FDFF1A BNE ??ProcessPacket_8 5027 else 5028 RecountMenu(NULL, 0); \ 000009AC 0010A0E3 MOV R1,#+0 \ 000009B0 0100A0E1 MOV R0,R1 \ 000009B4 C5FDFFEA B ??ProcessPacket_8 5029 } 5030 break; 5031 case T_LASTPRIVACY: 5032 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_44: \ 000009B8 0800D4E5 LDRB R0,[R4, #+8] \ 000009BC 6C0287E5 STR R0,[R7, #+620] 5033 break; 5034 } 5035 mfree(p); \ ??ProcessPacket_1: \ 000009C0 0400A0E1 MOV R0,R4 \ 000009C4 150000EF SWI +21 5036 } \ 000009C8 50DF8DE2 ADD SP,SP,#+320 \ 000009CC F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_41: \ 000009D0 3A0A0000 DC8 ":\n",+0 5037 5038 5039 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 5040 void process_active_timer(void) 5041 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5042 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable92 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 800295E5 LDR R0,[R5, #+640] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 5043 { 5044 if (++tenseconds_to_ping>12) \ 00000018 BC0295E5 LDR R0,[R5, #+700] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 BC0285E5 STR R0,[R5, #+700] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 5045 { 5046 tenseconds_to_ping=0; 5047 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 BC4285E5 STR R4,[R5, #+700] \ 00000034 710100EF SWI +369 5048 } 5049 } 5050 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable88 ;; `?ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000008 ........ LDR R7,??DataTable88 ;; `?ws1,"\nLoading images..."); 5087 5088 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 5089 { 5090 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001C8 002090E5 LDR R2,[R0, #+0] \ 000001CC 340094E5 LDR R0,[R4, #+52] \ 000001D0 751F87E2 ADD R1,R7,#+468 \ 000001D4 160200EF SWI +534 5091 } 5092 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 5093 { 5094 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001E8 ........ LDR R0,??DataTable90 ;; total_xstatuses \ 000001EC 701F87E2 ADD R1,R7,#+448 \ 000001F0 002090E5 LDR R2,[R0, #+0] \ 000001F4 340094E5 LDR R0,[R4, #+52] \ 000001F8 160200EF SWI +534 5095 } 5096 } 5097 #ifdef kluchnik 5098 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5099 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5100 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 5101 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5102 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5103 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 5104 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5105 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5106 int y=140; 5107 char A[]="[A] %s"; 5108 char I[]="[I]"; 5109 char V[]="[V]"; 5110 char S[]="[S]"; 5111 // char Vr[]="[Vr]; 5112 if(CurrentPrivateStatus==1) 5113 { 5114 wsprintf(data->ws2,I); 5115 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5116 y+=GetFontYSIZE(11)+5; 5117 } 5118 5119 if(Is_Vibra_Enabled) 5120 { 5121 wsprintf(data->ws2,V); 5122 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5123 y+=GetFontYSIZE(11)+5; 5124 } 5125 5126 if(Is_Sounds_Enabled) 5127 { 5128 wsprintf(data->ws2,S); 5129 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5130 y+=GetFontYSIZE(11)+5; 5131 } 5132 5133 if(Is_Double_Vibra_On) 5134 { 5135 wsprintf(data->ws2,"[Vr]"); 5136 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5137 } 5138 5139 if(away_m) 5140 { 5141 wsprintf(data->ws2,A,away_msg_time_dace); 5142 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5143 y+=GetFontYSIZE(11)+5; 5144 } 5145 #else 5146 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5147 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 0500A0E3 MOV R0,#+5 \ 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 0B10A0E3 MOV R1,#+11 \ 00000244 02002DE9 PUSH {R1} \ 00000248 01002DE9 PUSH {R0} \ 0000024C 340094E5 LDR R0,[R4, #+52] \ 00000250 0320A0E3 MOV R2,#+3 \ 00000254 0310A0E3 MOV R1,#+3 \ 00000258 4C0100EF SWI +332 5148 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 0000025C A80296E5 LDR R0,[R6, #+680] \ 00000260 14D08DE2 ADD SP,SP,#+20 \ 00000264 000050E3 CMP R0,#+0 \ 00000268 380094E5 LDR R0,[R4, #+56] \ 0000026C 6E2F8712 ADDNE R2,R7,#+440 \ 00000270 1E208702 ADDEQ R2,R7,#+30 \ 00000274 181087E2 ADD R1,R7,#+24 \ 00000278 240100EF SWI +292 5149 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5150 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 0500A0E3 MOV R0,#+5 \ 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 0510A0E3 MOV R1,#+5 \ 000002C0 02002DE9 PUSH {R1} \ 000002C4 0B10A0E1 MOV R1,R11 \ 000002C8 02002DE9 PUSH {R1} \ 000002CC 380094E5 LDR R0,[R4, #+56] \ 000002D0 0510A0E1 MOV R1,R5 \ 000002D4 4C0100EF SWI +332 5151 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 000002D8 380094E5 LDR R0,[R4, #+56] \ 000002DC 6C2F87E2 ADD R2,R7,#+432 \ 000002E0 181087E2 ADD R1,R7,#+24 \ 000002E4 240100EF SWI +292 5152 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5153 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 0500A0E3 MOV R0,#+5 \ 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 0510A0E3 MOV R1,#+5 \ 00000324 02002DE9 PUSH {R1} \ 00000328 0B10A0E1 MOV R1,R11 \ 0000032C 02002DE9 PUSH {R1} \ 00000330 380094E5 LDR R0,[R4, #+56] \ 00000334 0310A0E3 MOV R1,#+3 \ 00000338 4C0100EF SWI +332 \ 0000033C 28D08DE2 ADD SP,SP,#+40 5154 #endif 5155 } \ 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 5156 \ In segment CODE, align 4, keep-with-next 5157 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 5158 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5159 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 5160 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 5161 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 5162 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 5163 \ In segment CODE, align 4, keep-with-next 5164 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 5165 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5166 FreeWS(data->ws1); \ 00000008 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 5167 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 00000014 290100EF SWI +297 5168 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 5169 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 5170 \ In segment CODE, align 4, keep-with-next 5171 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 5172 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5173 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 5174 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 5175 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 5176 \ In segment CODE, align 4, keep-with-next 5177 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 5178 { 5179 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 5180 return; 5181 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 5182 } \ 00000010 1EFF2FE1 BX LR ;; return 5183 \ In segment CODE, align 4, keep-with-next 5184 int method5(MAIN_GUI *data,GUI_MSG *msg) 5185 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 5186 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 5187 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 9320A0E3 MOV R2,#+147 \ 00000018 041090E5 LDR R1,[R0, #+4] \ 0000001C 402F82E3 ORR R2,R2,#0x100 \ 00000020 020051E1 CMP R1,R2 \ 00000024 2700001A BNE ??method5_0 5188 { 5189 switch(msg->gbsmsg->submess) \ 00000028 080090E5 LDR R0,[R0, #+8] \ 0000002C ........ LDR R5,??DataTable113 ;; create_connect \ 00000030 ........ LDR R4,??DataTable92 ;; S_ICONS \ 00000034 0360A0E3 MOV R6,#+3 \ 00000038 AC70A0E3 MOV R7,#+172 \ 0000003C F07E87E3 ORR R7,R7,#0xF00 \ 00000040 010050E2 SUBS R0,R0,#+1 \ 00000044 0600000A BEQ ??method5_1 \ 00000048 030050E2 SUBS R0,R0,#+3 \ 0000004C 0600000A BEQ ??method5_2 \ 00000050 070050E2 SUBS R0,R0,#+7 \ 00000054 0C00000A BEQ ??method5_3 \ 00000058 250050E2 SUBS R0,R0,#+37 \ 0000005C 1200000A BEQ ??method5_4 \ 00000060 070000EA B ??method5_5 5190 { 5191 #ifdef kluchnik 5192 case LEFT_SOFT: 5193 if (cltop) create_contactlist_menu(); 5194 unhooked2=1; 5195 // if (cltop) remake_clmenu(); 5196 break; 5197 case RIGHT_SOFT: 5198 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 5199 #else 5200 case LEFT_SOFT: 5201 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_1: \ 00000064 0100A0E3 MOV R0,#+1 \ 00000068 F280BDE8 POP {R1,R4-R7,PC} 5202 case RIGHT_SOFT: 5203 // if (cltop) remake_clmenu(); 5204 unhooked2=1; \ ??method5_2: \ 0000006C 0100A0E3 MOV R0,#+1 \ 00000070 2C0384E5 STR R0,[R4, #+812] 5205 if (cltop) create_contactlist_menu(); \ 00000074 A80294E5 LDR R0,[R4, #+680] \ 00000078 000050E3 CMP R0,#+0 \ 0000007C F280BD08 POPEQ {R1,R4-R7,PC} \ 00000080 ........ BL create_contactlist_menu \ ??method5_5: \ 00000084 0000A0E3 MOV R0,#+0 \ 00000088 F280BDE8 POP {R1,R4-R7,PC} 5206 break; 5207 #endif 5208 case GREEN_BUTTON: 5209 disautorecconect=0; \ ??method5_3: \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 540284E5 STR R0,[R4, #+596] 5210 if ((connect_state==0)&&(sock==-1)) \ 00000094 800294E5 LDR R0,[R4, #+640] \ 00000098 000050E3 CMP R0,#+0 \ 0000009C 84029405 LDREQ R0,[R4, #+644] \ 000000A0 01007003 CMNEQ R0,#+1 \ 000000A4 0700001A BNE ??method5_0 5211 { 5212 GBS_DelTimer(&reconnect_tmr); \ 000000A8 010000EA B ??method5_6 5213 DNR_TRIES=3; 5214 SUBPROC((void *)create_connect); 5215 } 5216 break; 5217 case '0': 5218 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000AC ........ LDR R0,??DataTable115 ;; end_socket \ 000000B0 710100EF SWI +369 5219 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000B4 040087E0 ADD R0,R7,R4 \ 000000B8 8C0100EF SWI +396 5220 DNR_TRIES=3; \ 000000BC 386384E5 STR R6,[R4, #+824] 5221 SUBPROC((void *)create_connect); \ 000000C0 0500A0E1 MOV R0,R5 \ 000000C4 710100EF SWI +369 5222 break; 5223 } 5224 } 5225 return(0); \ ??method5_0: \ 000000C8 0000A0E3 MOV R0,#+0 \ 000000CC F280BDE8 POP {R1,R4-R7,PC} ;; return 5226 } 5227 \ In segment CODE, align 4, keep-with-next 5228 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5229 \ In segment CODE, align 4, keep-with-next 5230 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5231 5232 const void * const gui_methods[11]={ 5233 (void *)method0, //Redraw 5234 (void *)method1, //Create 5235 (void *)method2, //Close 5236 (void *)method3, //Focus 5237 (void *)method4, //Unfocus 5238 (void *)method5, //OnKey 5239 0, 5240 (void *)kill_data, //method7, //Destroy 5241 (void *)method8, 5242 (void *)method9, 5243 0 5244 }; 5245 5246 \ In segment CODE, align 4, keep-with-next 5247 int my_keyhook(int key, int m) 5248 { \ my_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5249 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 5250 { 5251 if(change_back_status==1) \ 00000014 ........ LDR R5,??DataTable117 ;; S_ICONS \ 00000018 0040A0E3 MOV R4,#+0 \ 0000001C 300295E5 LDR R0,[R5, #+560] \ 00000020 010050E3 CMP R0,#+1 \ 00000024 0300001A BNE ??my_keyhook_1 5252 { 5253 CurrentStatus=status_rem; \ 00000028 2C0295E5 LDR R0,[R5, #+556] \ 0000002C 680285E5 STR R0,[R5, #+616] 5254 set_my_status(); \ 00000030 ........ BL set_my_status 5255 // SUBPROC((void*)WriteDefSettings); 5256 change_back_status=0; \ 00000034 304285E5 STR R4,[R5, #+560] 5257 } 5258 #ifdef EVILFOX 5259 if ((key==VOL_UP_BUTTON)&&(IsIdleUiOnTop())) 5260 { 5261 if(autobot==1) 5262 { 5263 autobot=0; 5264 ShowMSG(1,(int)"Autobot Off"); 5265 } 5266 else 5267 { 5268 autobot=1; 5269 ShowMSG(1,(int)"Autobot On"); 5270 } 5271 } 5272 #endif 5273 #ifdef ELKA 5274 #ifdef EVILFOX 5275 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) 5276 #else 5277 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) 5278 #endif 5279 { 5280 GBS_StopTimer(&away_tmr); 5281 msg_away_timer=AUTO_ENGADE; 5282 away_timer(); 5283 main_d=1; 5284 } 5285 else 5286 { 5287 #endif 5288 if(Reset_timer) \ ??my_keyhook_1: \ 00000038 100195E5 LDR R0,[R5, #+272] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 3080BD08 POPEQ {R4,R5,PC} 5289 { 5290 msg_away_timer=0; \ 00000044 244285E5 STR R4,[R5, #+548] 5291 away_m=0; \ 00000048 284285E5 STR R4,[R5, #+552] 5292 } 5293 #ifdef ELKA 5294 } 5295 #endif 5296 } 5297 return 0; \ ??my_keyhook_0: \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 3080BDE8 POP {R4,R5,PC} ;; return 5298 } \ In segment DATA_C, align 4, align-sorted \ `?> %s <<" \ 3C3C00 \ 00000621 000000 DC8 0, 0, 0 \ 00000624 343A5C7A6269 DC8 "4:\\zbin\\etc\\NATICQMod.bcfg" \ 6E5C6574635C \ 4E4154494351 \ 4D6F642E6263 \ 666700 \ 0000063F 00 DC8 0 \ 00000640 343A5C7A6269 DC8 "4:\\zbin\\etc\\NATICQ.bcfg" \ 6E5C6574635C \ 4E4154494351 \ 2E6263666700 \ 00000658 53686F772074 DC8 "Show time" \ 696D6500 \ 00000662 0000 DC8 0, 0 \ 00000664 53686F772078 DC8 "Show x-status" \ 2D7374617475 \ 7300 \ 00000672 0000 DC8 0, 0 \ 00000674 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 00000681 000000 DC8 0, 0, 0 \ 00000684 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 00000693 00 DC8 0 \ 00000694 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 000006A2 0000 DC8 0, 0 \ 000006A4 566962726120 DC8 "Vibra Off" \ 4F666600 \ 000006AE 0000 DC8 0, 0 \ 000006B0 566962726120 DC8 "Vibra On" \ 4F6E00 \ 000006B9 000000 DC8 0, 0, 0 \ 000006BC 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 000006C6 0000 DC8 0, 0 \ 000006C8 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 000006D1 000000 DC8 0, 0, 0 \ ipc_my_name: \ 000006D4 4E6174494351 DC8 "NatICQ" \ 00 \ 000006DB 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006EB 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000006F4 585461736B00 DC8 "XTask" \ 000006FA 0000 DC8 0, 0 \ x_status_change: \ 000006FC 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ ipc_game_name: \ 0000070C 436F6D626174 DC8 "Combats" \ 7300 \ gui_methods: \ 00000714 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 00000730 ............ 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 0B0000006400 DC32 11, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ input_awaymsg_hdr: \ 00000038 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 00000040 00000000.... DC32 0H, `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ clmenu_sk: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 clmenu_sk_r \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ clmenu_skt: \ 00000000 ........0000 DC32 clmenu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ color: \ 00000008 FFFFFF64 DC8 255, 255, 255, 100 5301 \ In segment CODE, align 4, keep-with-next 5302 void maincsm_oncreate(CSM_RAM *data) 5303 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 5304 // UpdateConfig(); 5305 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 4000A0E3 MOV R0,#+64 5306 MAIN_CSM*csm=(MAIN_CSM*)data; 5307 zeromem(main_gui,sizeof(MAIN_GUI)); 5308 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 0000000C 0070A0E3 MOV R7,#+0 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 4010A0E3 MOV R1,#+64 \ 0000001C 1D0100EF SWI +285 \ 00000020 898100EF SWI +33161 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 011044E2 SUB R1,R4,#+1 \ 00000030 ........ LDR R4,??DataTable119 ;; `?gui.canvas=(void *)(&Canvas); \ 00000044 100084E2 ADD R0,R4,#+16 \ 00000048 000086E5 STR R0,[R6, #+0] 5310 // main_gui->gui.flag30=2; 5311 main_gui->gui.methods=(void *)gui_methods; \ 0000004C 1400A0E3 MOV R0,#+20 \ 00000050 700E80E3 ORR R0,R0,#0x700 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 040086E5 STR R0,[R6, #+4] 5312 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000005C 158000EF SWI +32789 \ 00000060 200086E5 STR R0,[R6, #+32] 5313 csm->csm.state=0; \ 00000064 107085E5 STR R7,[R5, #+16] 5314 csm->csm.unk1=0; \ 00000068 147085E5 STR R7,[R5, #+20] 5315 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,??DataTable117 ;; S_ICONS \ 0000007C 100285E5 STR R0,[R5, #+528] 5316 ews=AllocWS(16384); \ 00000080 400CA0E3 MOV R0,#+16384 \ 00000084 250100EF SWI +293 5317 // MutexCreate(&contactlist_mtx); 5318 DNR_TRIES=3; 5319 // SUBPROC((void *)InitSmiles); 5320 // SUBPROC((void *)create_connect); 5321 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000088 ........ LDR R2,??DataTable97 ;; process_active_timer \ 0000008C 200285E5 STR R0,[R5, #+544] \ 00000090 0300A0E3 MOV R0,#+3 \ 00000094 380385E5 STR R0,[R5, #+824] \ 00000098 871EA0E3 MOV R1,#+2160 \ 0000009C BC00A0E3 MOV R0,#+188 \ 000000A0 F00E80E3 ORR R0,R0,#0xF00 \ 000000A4 050080E0 ADD R0,R0,R5 \ 000000A8 4D0000EF SWI +77 5322 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000AC 1C2195E5 LDR R2,[R5, #+284] \ 000000B0 1B1084E2 ADD R1,R4,#+27 \ 000000B4 DA00A0E3 MOV R0,#+218 \ 000000B8 600E80E3 ORR R0,R0,#0x600 \ 000000BC 040080E0 ADD R0,R0,R4 \ 000000C0 160000EF SWI +22 5323 gipc.name_to=ipc_my_name; \ 000000C4 D400A0E3 MOV R0,#+212 \ 000000C8 600E80E3 ORR R0,R0,#0x600 \ 000000CC 041080E0 ADD R1,R0,R4 \ 000000D0 741085E5 STR R1,[R5, #+116] 5324 gipc.name_from=ipc_my_name; \ 000000D4 040080E0 ADD R0,R0,R4 \ 000000D8 780085E5 STR R0,[R5, #+120] 5325 gipc.data=(void *)-1; \ 000000DC 0700E0E1 MVN R0,R7 \ 000000E0 7C0085E5 STR R0,[R5, #+124] 5326 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000E4 743085E2 ADD R3,R5,#+116 \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC B010A0E3 MOV R1,#+176 \ 000000F0 DE1C81E3 ORR R1,R1,#0xDE00 \ 000000F4 0900A0E3 MOV R0,#+9 \ 000000F8 420C80E3 ORR R0,R0,#0x4200 \ 000000FC 000100EF SWI +256 5327 /* 5328 InitXStatusesImg(); 5329 //InitSmiles(); Это вызовется из InitXStatusesImg 5330 create_connect(); 5331 silenthide=1; 5332 gipc.name_to=ipc_xtask_name; 5333 gipc.name_from=ipc_my_name; 5334 gipc.data=0; 5335 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 5336 */ 5337 } \ 00000100 F080BDE8 POP {R4-R7,PC} ;; return 5338 \ In segment CODE, align 4, keep-with-next 5339 void maincsm_onclose(CSM_RAM *csm) 5340 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 5341 WriteDefSettings(); 5342 // SaveConfigData(successed_config_filename); 5343 5344 /* 5345 #pragma segment="CONFIG_C" 5346 unsigned int ul; 5347 int f; 5348 extern const CFG_HDR cfghdr0; //first var in CONFIG 5349 void *cfg=(void*)&cfghdr0; 5350 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 5351 5352 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 5353 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 5354 } 5355 fwrite(f,cfg,len,&ul); 5356 fclose(f,&ul); 5357 */ 5358 5359 // GBS_DelTimer(&tmr_dorecv); 5360 RemoveKeybMsgHook((void *)my_keyhook); 5361 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable117 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C ........ LDR R0,??DataTable122 ;; my_keyhook \ 00000010 2D0100EF SWI +301 \ 00000014 BC00A0E3 MOV R0,#+188 \ 00000018 F00E80E3 ORR R0,R0,#0xF00 \ 0000001C 040080E0 ADD R0,R0,R4 \ 00000020 8C0100EF SWI +396 5362 GBS_DelTimer(&tmr_vibra); \ 00000024 9C00A0E3 MOV R0,#+156 \ 00000028 F00E80E3 ORR R0,R0,#0xF00 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 8C0100EF SWI +396 5363 GBS_DelTimer(&reconnect_tmr); \ 00000034 AC00A0E3 MOV R0,#+172 \ 00000038 F00E80E3 ORR R0,R0,#0xF00 \ 0000003C 040080E0 ADD R0,R0,R4 \ 00000040 8C0100EF SWI +396 5364 GBS_DelTimer(&tmr_illumination); \ 00000044 8C00A0E3 MOV R0,#+140 \ 00000048 F00E80E3 ORR R0,R0,#0xF00 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 8C0100EF SWI +396 5365 GBS_DelTimer(&mytmr); \ 00000054 CC00A0E3 MOV R0,#+204 \ 00000058 D00E80E3 ORR R0,R0,#0xD00 \ 0000005C 040080E0 ADD R0,R0,R4 \ 00000060 8C0100EF SWI +396 5366 GBS_DelTimer(&mytmr2); \ 00000064 DC00A0E3 MOV R0,#+220 \ 00000068 D00E80E3 ORR R0,R0,#0xD00 \ 0000006C 040080E0 ADD R0,R0,R4 \ 00000070 8C0100EF SWI +396 5367 GBS_DelTimer(&mytmr3); \ 00000074 4400A0E3 MOV R0,#+68 \ 00000078 B00E80E3 ORR R0,R0,#0xB00 \ 0000007C 040080E0 ADD R0,R0,R4 \ 00000080 8C0100EF SWI +396 5368 GBS_DelTimer(&mytmr4); \ 00000084 EC00A0E3 MOV R0,#+236 \ 00000088 D00E80E3 ORR R0,R0,#0xD00 \ 0000008C 040080E0 ADD R0,R0,R4 \ 00000090 8C0100EF SWI +396 5369 GBS_DelTimer(&statusTmr); \ 00000094 1C00A0E3 MOV R0,#+28 \ 00000098 400D80E3 ORR R0,R0,#0x1000 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 8C0100EF SWI +396 5370 #ifdef NEWSGOLD 5371 GBS_DelTimer(&tracktmr); \ 000000A4 FC00A0E3 MOV R0,#+252 \ 000000A8 D00E80E3 ORR R0,R0,#0xD00 \ 000000AC 040080E0 ADD R0,R0,R4 \ 000000B0 8C0100EF SWI +396 5372 #endif 5373 GBS_DelTimer(&develop); \ 000000B4 6800A0E3 MOV R0,#+104 \ 000000B8 480D80E3 ORR R0,R0,#0x1200 \ 000000BC 040080E0 ADD R0,R0,R4 \ 000000C0 8C0100EF SWI +396 5374 GBS_DelTimer(&away_tmr); \ 000000C4 BC00A0E3 MOV R0,#+188 \ 000000C8 D00E80E3 ORR R0,R0,#0xD00 \ 000000CC 040080E0 ADD R0,R0,R4 \ 000000D0 8C0100EF SWI +396 5375 SetVibration(0); \ 000000D4 0000A0E3 MOV R0,#+0 \ 000000D8 7C0000EF SWI +124 5376 FreeTemplates(); \ 000000DC ........ BL FreeTemplates 5377 FreeCLIST(); \ 000000E0 ........ _BLF FreeCLIST,??FreeCLIST??rA 5378 free_ICONS(); \ 000000E4 ........ BL free_ICONS 5379 // FreeSmiles(); 5380 FreeWS(ews); \ 000000E8 200294E5 LDR R0,[R4, #+544] \ 000000EC 290100EF SWI +297 5381 FreeXStatusText(); \ 000000F0 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 5382 // MutexDestroy(&contactlist_mtx); 5383 SUBPROC((void *)FreeSmiles); \ 000000F4 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 000000F8 710100EF SWI +369 5384 SUBPROC((void *)FreeXStatusesImg); \ 000000FC 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 00000100 710100EF SWI +369 5385 SUBPROC((void *)end_socket); \ 00000104 ........ LDR R0,??DataTable115 ;; end_socket \ 00000108 710100EF SWI +369 5386 SUBPROC((void *)ClearSendQ); \ 0000010C ........ LDR R0,??DataTable116 ;; ClearSendQ \ 00000110 710100EF SWI +369 5387 SUBPROC((void *)ElfKiller); \ 00000114 ........ LDR R0,??DataTable120 ;; ElfKiller \ 00000118 710100EF SWI +369 5388 } \ 0000011C 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000120 ........ DC32 FreeSmiles \ 00000124 ........ DC32 FreeXStatusesImg 5389 \ In segment CODE, align 4, keep-with-next 5390 void do_reconnect(void) 5391 { 5392 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable117 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 A01290E5 LDR R1,[R0, #+672] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 5393 { 5394 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 381380E5 STR R1,[R0, #+824] 5395 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable113 ;; create_connect \ 00000020 710100EF SWI +369 5396 } 5397 } \ 00000024 0080BDE8 POP {PC} ;; return 5398 \ In segment CODE, align 4, keep-with-next 5399 void CheckDoubleRun(void) 5400 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 5401 int csm_id; 5402 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable117 ;; S_ICONS \ 00000008 7C0094E5 LDR R0,[R4, #+124] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1500000A BEQ ??CheckDoubleRun_0 5403 { 5404 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable119 ;; `?msg==MSG_IPC) 5436 { 5437 IPC_REQ *ipc; 5438 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 0C8094E5 LDR R8,[R4, #+12] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 8300000A BEQ ??maincsm_onmessage_2 5439 { 5440 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C D490A0E3 MOV R9,#+212 \ 00000040 609E89E3 ORR R9,R9,#0x600 \ 00000044 071089E0 ADD R1,R9,R7 \ 00000048 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 7C00001A BNE ??maincsm_onmessage_2 5441 { 5442 switch (msg->submess) \ 00000054 081094E5 LDR R1,[R4, #+8] \ 00000058 040098E5 LDR R0,[R8, #+4] \ 0000005C 011041E2 SUB R1,R1,#+1 \ 00000060 040051E3 CMP R1,#+4 \ 00000064 7700008A BHI ??maincsm_onmessage_2 \ 00000068 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 0000006C 0120D2E7 LDRB R2,[R2, R1] \ 00000070 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000074 010A1116 DC8 +1,+10,+17,+22 \ 00000078 4F000000 DC8 +79,+0,+0,+0 5443 { 5444 case IPC_CHECK_DOUBLERUN: 5445 //Если приняли свое собственное сообщение, значит запускаем чекер 5446 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 0000007C 071089E0 ADD R1,R9,R7 \ 00000080 010050E1 CMP R0,R1 \ 00000084 0200001A BNE ??maincsm_onmessage_4 \ 00000088 F4099FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000008C 710100EF SWI +369 \ 00000090 6C0000EA B ??maincsm_onmessage_2 5447 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 00000094 0C0295E5 LDR R0,[R5, #+524] \ 00000098 080088E5 STR R0,[R8, #+8] \ 0000009C 690000EA B ??maincsm_onmessage_2 5448 break; 5449 case IPC_SMILE_PROCESSED: 5450 //Только собственные смайлы ;) 5451 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000A0 071089E0 ADD R1,R9,R7 \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 0100001A BNE ??maincsm_onmessage_7 \ 000000AC D4099FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000B0 710100EF SWI +369 5452 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000B4 ........ BL SMART_REDRAW \ 000000B8 620000EA B ??maincsm_onmessage_2 5453 break; 5454 case IPC_XSTATUSIMG_PROCESSED: 5455 //Только собственные иксстатусы ;) 5456 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_9: \ 000000BC 071089E0 ADD R1,R9,R7 \ 000000C0 010050E1 CMP R0,R1 \ 000000C4 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000C8 BC099FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000CC F7FFFFEA B ??maincsm_onmessage_8 5457 SMART_REDRAW(); 5458 break; 5459 case IPC_GAME: 5460 { 5461 5462 } 5463 break; 5464 case IPC_TENSECONDS: 5465 //Только свое сообщение 5466 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000D0 071089E0 ADD R1,R9,R7 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 5A00001A BNE ??maincsm_onmessage_2 5467 { 5468 CLIST *t=(CLIST *)cltop; \ 000000DC A88295E5 LDR R8,[R5, #+680] 5469 int f=0; \ 000000E0 0090A0E3 MOV R9,#+0 \ 000000E4 000058E3 CMP R8,#+0 \ 000000E8 2500000A BEQ ??maincsm_onmessage_11 5470 while(t) 5471 { 5472 if(t->just_now) \ ??maincsm_onmessage_12: \ 000000EC 580098E5 LDR R0,[R8, #+88] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0200000A BEQ ??maincsm_onmessage_13 5473 { 5474 if (!(--(t->just_now))) f=1; \ 000000F8 010050E2 SUBS R0,R0,#+1 \ 000000FC 580088E5 STR R0,[R8, #+88] \ 00000100 0190A003 MOVEQ R9,#+1 5475 } 5476 if (t->isactive) \ ??maincsm_onmessage_13: \ 00000104 7C0098E5 LDR R0,[R8, #+124] \ 00000108 000050E3 CMP R0,#+0 \ 0000010C 0C00000A BEQ ??maincsm_onmessage_14 5477 { 5478 if (!(--(t->isactive))) \ 00000110 010050E2 SUBS R0,R0,#+1 \ 00000114 7C0088E5 STR R0,[R8, #+124] \ 00000118 0900001A BNE ??maincsm_onmessage_14 5479 { 5480 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 5481 if ((t->log)&&(!t->isunread)) \ 0000011C 700098E5 LDR R0,[R8, #+112] \ 00000120 0190A0E3 MOV R9,#+1 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0500000A BEQ ??maincsm_onmessage_14 \ 0000012C 600098E5 LDR R0,[R8, #+96] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0200001A BNE ??maincsm_onmessage_14 5482 { 5483 FreeLOGQ(&t->log); \ 00000138 700088E2 ADD R0,R8,#+112 \ 0000013C ........ BL FreeLOGQ 5484 t->msg_count=0; \ 00000140 806088E5 STR R6,[R8, #+128] 5485 } 5486 } 5487 } 5488 t=(CLIST *)(t->next); \ ??maincsm_onmessage_14: \ 00000144 008098E5 LDR R8,[R8, #+0] 5489 } \ 00000148 000058E3 CMP R8,#+0 \ 0000014C E6FFFF1A BNE ??maincsm_onmessage_12 5490 if (f) \ 00000150 000059E3 CMP R9,#+0 \ 00000154 0A00000A BEQ ??maincsm_onmessage_11 5491 { 5492 CLIST *oldt=NULL; 5493 if (contactlist_menu_id) \ 00000158 B01295E5 LDR R1,[R5, #+688] \ 0000015C 0000A0E3 MOV R0,#+0 \ 00000160 000051E3 CMP R1,#+0 \ 00000164 0400000A BEQ ??maincsm_onmessage_15 5494 { 5495 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000168 B00295E5 LDR R0,[R5, #+688] \ 0000016C 0010A0E3 MOV R1,#+0 \ 00000170 090200EF SWI +521 \ 00000174 8F0100EF SWI +399 \ 00000178 ........ _BLF FindContactByN,??FindContactByN??rA 5496 } 5497 RecountMenu(oldt,1); \ ??maincsm_onmessage_15: \ 0000017C 0110A0E3 MOV R1,#+1 \ 00000180 ........ BL RecountMenu 5498 } 5499 if (time_to_stop_t9) \ ??maincsm_onmessage_11: \ 00000184 480395E5 LDR R0,[R5, #+840] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 2D00000A BEQ ??maincsm_onmessage_2 5500 { 5501 if (!(--time_to_stop_t9)) \ 00000190 010050E2 SUBS R0,R0,#+1 \ 00000194 480385E5 STR R0,[R5, #+840] \ 00000198 2A00001A BNE ??maincsm_onmessage_2 5502 { 5503 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 0000019C B40295E5 LDR R0,[R5, #+692] \ 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 5504 } 5505 } 5506 } 5507 break; 5508 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 5509 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_16: \ 000001B4 080098E5 LDR R0,[R8, #+8] \ 000001B8 040090E5 LDR R0,[R0, #+4] \ 000001BC 1B0000EF SWI +27 \ 000001C0 0090A0E1 MOV R9,R0 5510 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 000001C4 260089E2 ADD R0,R9,#+38 \ 000001C8 140000EF SWI +20 \ 000001CC 00A0A0E1 MOV R10,R0 5511 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 000001D0 080098E5 LDR R0,[R8, #+8] 5512 msg->pkt.type=T_SENDMSG; 5513 msg->pkt.data_len=l; 5514 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 000001D4 0920A0E1 MOV R2,R9 \ 000001D8 000090E5 LDR R0,[R0, #+0] \ 000001DC 00008AE5 STR R0,[R10, #+0] \ 000001E0 0200A0E3 MOV R0,#+2 \ 000001E4 B400CAE1 STRH R0,[R10, #+4] \ 000001E8 B690CAE1 STRH R9,[R10, #+6] \ 000001EC 080098E5 LDR R0,[R8, #+8] \ 000001F0 041090E5 LDR R1,[R0, #+4] \ 000001F4 08008AE2 ADD R0,R10,#+8 \ 000001F8 1E0100EF SWI +286 5515 //slientsend=1; 5516 if(strstr(msg->data,PASS)==0) \ 000001FC 7800A0E3 MOV R0,#+120 \ 00000200 600E80E3 ORR R0,R0,#0x600 \ 00000204 051080E0 ADD R1,R0,R5 \ 00000208 08008AE2 ADD R0,R10,#+8 \ 0000020C 180100EF SWI +280 \ 00000210 000050E3 CMP R0,#+0 \ 00000214 0400000A BEQ ??maincsm_onmessage_17 5517 { 5518 SENDMSGCOUNT++; //Номер сообщения 5519 SUBPROC((void *)SendAnswer,0,msg); 5520 } 5521 else 5522 { 5523 msg->pkt.data_len=40; \ 00000218 2800A0E3 MOV R0,#+40 \ 0000021C B600CAE1 STRH R0,[R10, #+6] 5524 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 00000220 621F87E2 ADD R1,R7,#+392 \ 00000224 08008AE2 ADD R0,R10,#+8 \ 00000228 1A0000EF SWI +26 5525 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_17: \ 0000022C 140295E5 LDR R0,[R5, #+532] 5526 SUBPROC((void *)SendAnswer,0,msg); \ 00000230 0A20A0E1 MOV R2,R10 \ 00000234 010080E2 ADD R0,R0,#+1 \ 00000238 140285E5 STR R0,[R5, #+532] \ 0000023C ........ LDR R0,??DataTable114 ;; SendAnswer \ 00000240 0010A0E3 MOV R1,#+0 \ 00000244 710100EF SWI +369 5527 } 5528 break; 5529 } 5530 } 5531 } 5532 } 5533 //Нарисуем иконочку моего статуса 5534 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 5535 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 00000248 068100EF SWI +33030 \ 0000024C 040090E5 LDR R0,[R0, #+4] 5536 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 00000250 0180A0E3 MOV R8,#+1 \ 00000254 080100EF SWI +264 \ 00000258 2C0090E5 LDR R0,[R0, #+44] \ 0000025C 350100EF SWI +309 \ 00000260 000050E3 CMP R0,#+0 \ 00000264 4B00000A BEQ ??maincsm_onmessage_18 5537 { 5538 GUI *igui=GetTopGUI(); 5539 if (igui) //И он существует \ 00000268 4D0100EF SWI +333 \ 0000026C 000050E3 CMP R0,#+0 \ 00000270 4900000A BEQ ??maincsm_onmessage_19 5540 { 5541 //#ifdef ELKA 5542 INC_show=0; \ 00000274 506385E5 STR R6,[R5, #+848] 5543 //#endif 5544 canvasdata=BuildCanvas(); //void * - belyj fon! \ 00000278 F18000EF SWI +33009 \ 0000027C E40185E5 STR R0,[R5, #+484] 5545 int icn; 5546 // if(ShowStatusIcon==0 || ShowStatusIcon==3) 5547 // { 5548 if(total_unread) \ 00000280 A40295E5 LDR R0,[R5, #+676] \ 00000284 000050E3 CMP R0,#+0 5549 icn=IS_MSG; \ 00000288 0D00A013 MOVNE R0,#+13 \ 0000028C 0500001A BNE ??maincsm_onmessage_20 5550 else 5551 { 5552 switch(connect_state) \ 00000290 800295E5 LDR R0,[R5, #+640] \ 00000294 000050E3 CMP R0,#+0 \ 00000298 0200000A BEQ ??maincsm_onmessage_20 \ 0000029C 030050E2 SUBS R0,R0,#+3 5553 { 5554 case 0: 5555 icn=IS_OFFLINE; break; 5556 case 3: 5557 icn=CurrentStatus; //IS_ONLINE; \ 000002A0 68029505 LDREQ R0,[R5, #+616] 5558 break; 5559 default: 5560 icn=IS_UNKNOWN; break; \ 000002A4 0E00A013 MOVNE R0,#+14 5561 } 5562 } 5563 //} 5564 //Тут трохи поменял 5565 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 5566 // __root const CFG_CBOX_ITEM cfgcbox9_1[5]={"On main screen","Iconbar","Iconbar except idle","All","Nothing"}; 5567 #ifdef ELKA 5568 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 5569 { 5570 #endif 5571 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 5572 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_20: \ 000002A8 009185E0 ADD R9,R5,R0, LSL #+2 \ 000002AC 000099E5 LDR R0,[R9, #+0] \ 000002B0 210000EF SWI +33 \ 000002B4 00A0A0E1 MOV R10,R0 \ 000002B8 000099E5 LDR R0,[R9, #+0] \ 000002BC 220000EF SWI +34 \ 000002C0 4C1195E5 LDR R1,[R5, #+332] \ 000002C4 502195E5 LDR R2,[R5, #+336] \ 000002C8 0130A0E3 MOV R3,#+1 \ 000002CC 08002DE9 PUSH {R3} \ 000002D0 010080E0 ADD R0,R0,R1 \ 000002D4 02308AE0 ADD R3,R10,R2 \ 000002D8 013043E2 SUB R3,R3,#+1 \ 000002DC 08002DE9 PUSH {R3} \ 000002E0 013040E2 SUB R3,R0,#+1 \ 000002E4 E40195E5 LDR R0,[R5, #+484] \ 000002E8 250000EF SWI +37 5573 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 000002EC 002099E5 LDR R2,[R9, #+0] \ 000002F0 501195E5 LDR R1,[R5, #+336] \ 000002F4 4C0195E5 LDR R0,[R5, #+332] \ 000002F8 230000EF SWI +35 5574 #ifdef ELKA 5575 } 5576 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 5577 #else 5578 if(show_xstatus==1) //kluchnik 26.03.08 \ 000002FC B00095E5 LDR R0,[R5, #+176] \ 00000300 08D08DE2 ADD SP,SP,#+8 \ 00000304 010050E3 CMP R0,#+1 \ 00000308 2300001A BNE ??maincsm_onmessage_19 5579 #endif 5580 { 5581 PNGTOP_DESC *pltop=PNG_TOP(); 5582 pltop->dyn_pltop=XStatusesImgList; 5583 DisableIDLETMR(); 5584 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 5585 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 0000030C ........ LDR R9,??DataTable110 ;; CurrentXStatus \ 00000310 78A79FE5 LDR R10,??maincsm_onmessage_5+0xC ;; XStatusesIconArray \ 00000314 B98100EF SWI +33209 \ 00000318 ........ LDR R1,??DataTable111 ;; XStatusesImgList \ 0000031C 001091E5 LDR R1,[R1, #+0] \ 00000320 081080E5 STR R1,[R0, #+8] \ 00000324 7F0100EF SWI +383 \ 00000328 000099E5 LDR R0,[R9, #+0] \ 0000032C 00109AE5 LDR R1,[R10, #+0] \ 00000330 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000334 210000EF SWI +33 \ 00000338 00109AE5 LDR R1,[R10, #+0] \ 0000033C 00B0A0E1 MOV R11,R0 \ 00000340 000099E5 LDR R0,[R9, #+0] \ 00000344 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000348 220000EF SWI +34 \ 0000034C 541195E5 LDR R1,[R5, #+340] \ 00000350 582195E5 LDR R2,[R5, #+344] \ 00000354 0130A0E3 MOV R3,#+1 \ 00000358 08002DE9 PUSH {R3} \ 0000035C 010080E0 ADD R0,R0,R1 \ 00000360 02308BE0 ADD R3,R11,R2 \ 00000364 013043E2 SUB R3,R3,#+1 \ 00000368 08002DE9 PUSH {R3} \ 0000036C 013040E2 SUB R3,R0,#+1 \ 00000370 E40195E5 LDR R0,[R5, #+484] \ 00000374 250000EF SWI +37 5586 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 00000378 000099E5 LDR R0,[R9, #+0] \ 0000037C 00109AE5 LDR R1,[R10, #+0] \ 00000380 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 00000384 581195E5 LDR R1,[R5, #+344] \ 00000388 540195E5 LDR R0,[R5, #+340] \ 0000038C 230000EF SWI +35 \ 00000390 08D08DE2 ADD SP,SP,#+8 \ 00000394 000000EA B ??maincsm_onmessage_19 5587 } 5588 #ifdef EVILFOX 5589 DrawImg(IDLEICON_X-1,IDLEICON_Y-8,(int)"4:\\zbin\\naticq\\img\\naticq_ms.png"); 5590 #endif 5591 /* 5592 #ifdef EVILFOX 5593 #else 5594 if(strlen(fontpath)>5) 5595 { 5596 #endif 5597 */ 5598 5599 #ifdef ELKA 5600 if (total_unread) 5601 SLI_On(); 5602 #endif 5603 } 5604 } 5605 else 5606 { 5607 main_d=1; \ ??maincsm_onmessage_18: \ 00000398 DC8185E5 STR R8,[R5, #+476] 5608 } 5609 } 5610 5611 //---------------------------------------------------// 5612 5613 if(msg->msg == MSG_IPC) //kluchnik 26.03.08 \ ??maincsm_onmessage_19: \ 0000039C 040094E5 LDR R0,[R4, #+4] \ 000003A0 B010A0E3 MOV R1,#+176 \ 000003A4 DE1C81E3 ORR R1,R1,#0xDE00 \ 000003A8 010050E1 CMP R0,R1 \ 000003AC B100001A BNE ??maincsm_onmessage_21 5614 { 5615 IPC_REQ *ipc; 5616 if ((ipc=(IPC_REQ*)msg->data0)) \ 000003B0 0C0094E5 LDR R0,[R4, #+12] \ 000003B4 000050E3 CMP R0,#+0 \ 000003B8 0F01000A BEQ ??maincsm_onmessage_22 5617 { 5618 if (strcmp_nocase(ipc->name_to,"IdleUpd")==0) \ 000003BC 000090E5 LDR R0,[R0, #+0] \ 000003C0 5D1F87E2 ADD R1,R7,#+372 \ 000003C4 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000003C8 000050E3 CMP R0,#+0 5619 { 5620 switch (msg->submess) \ 000003CC 08009405 LDREQ R0,[R4, #+8] \ 000003D0 00005003 CMPEQ R0,#+0 \ 000003D4 A700001A BNE ??maincsm_onmessage_21 5621 { 5622 case 0: 5623 { 5624 if (main_d==1) \ 000003D8 DC0195E5 LDR R0,[R5, #+476] \ 000003DC 010050E3 CMP R0,#+1 \ 000003E0 8000001A BNE ??maincsm_onmessage_23 5625 { 5626 ClearScreen(); \ 000003E4 ........ _BLF ClearScreen,??ClearScreen??rA 5627 if(Is_SMARTCPU_On) \ 000003E8 F80195E5 LDR R0,[R5, #+504] \ 000003EC 000050E3 CMP R0,#+0 \ 000003F0 7B00000A BEQ ??maincsm_onmessage_24 5628 { 5629 #ifdef EVILFOX 5630 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, 0); 5631 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, 0); 5632 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, 0); 5633 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, 0); 5634 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, 0); 5635 #else 5636 if(fonto==1) \ 000003F4 000195E5 LDR R0,[R5, #+256] \ 000003F8 041195E5 LDR R1,[R5, #+260] \ 000003FC E03195E5 LDR R3,[R5, #+480] \ 00000400 CCC095E5 LDR R12,[R5, #+204] \ 00000404 C4E095E5 LDR LR,[R5, #+196] \ 00000408 3890A0E3 MOV R9,#+56 \ 0000040C 489D89E3 ORR R9,R9,#0x1200 \ 00000410 059089E0 ADD R9,R9,R5 \ 00000414 08908DE5 STR R9,[SP, #+8] \ 00000418 00102DE9 PUSH {R12} \ 0000041C 0820A0E3 MOV R2,#+8 \ 00000420 482D82E3 ORR R2,R2,#0x1200 \ 00000424 059082E0 ADD R9,R2,R5 \ 00000428 302042E2 SUB R2,R2,#+48 \ 0000042C 05A082E0 ADD R10,R2,R5 \ 00000430 302042E2 SUB R2,R2,#+48 \ 00000434 05B082E0 ADD R11,R2,R5 \ 00000438 302042E2 SUB R2,R2,#+48 \ 0000043C 052082E0 ADD R2,R2,R5 \ 00000440 01005EE3 CMP LR,#+1 \ 00000444 2E00001A BNE ??maincsm_onmessage_25 5637 { 5638 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 00000448 01C0A0E3 MOV R12,#+1 \ 0000044C 00102DE9 PUSH {R12} \ 00000450 ........ _BLF PrintField,??PrintField??rA 5639 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000454 CC0095E5 LDR R0,[R5, #+204] \ 00000458 0B20A0E1 MOV R2,R11 \ 0000045C 01002DE9 PUSH {R0} \ 00000460 C40095E5 LDR R0,[R5, #+196] \ 00000464 01002DE9 PUSH {R0} \ 00000468 E81195E5 LDR R1,[R5, #+488] \ 0000046C E03195E5 LDR R3,[R5, #+480] \ 00000470 040195E5 LDR R0,[R5, #+260] \ 00000474 001081E0 ADD R1,R1,R0 \ 00000478 000195E5 LDR R0,[R5, #+256] \ 0000047C ........ _BLF PrintField,??PrintField??rA 5640 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 00000480 CC0095E5 LDR R0,[R5, #+204] \ 00000484 0A20A0E1 MOV R2,R10 \ 00000488 01002DE9 PUSH {R0} \ 0000048C C40095E5 LDR R0,[R5, #+196] \ 00000490 01002DE9 PUSH {R0} \ 00000494 E81195E5 LDR R1,[R5, #+488] \ 00000498 E03195E5 LDR R3,[R5, #+480] \ 0000049C 040195E5 LDR R0,[R5, #+260] \ 000004A0 811080E0 ADD R1,R0,R1, LSL #+1 \ 000004A4 000195E5 LDR R0,[R5, #+256] \ 000004A8 ........ _BLF PrintField,??PrintField??rA 5641 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000004AC CC0095E5 LDR R0,[R5, #+204] \ 000004B0 0920A0E1 MOV R2,R9 \ 000004B4 01002DE9 PUSH {R0} \ 000004B8 C40095E5 LDR R0,[R5, #+196] \ 000004BC 01002DE9 PUSH {R0} \ 000004C0 E81195E5 LDR R1,[R5, #+488] \ 000004C4 E03195E5 LDR R3,[R5, #+480] \ 000004C8 040195E5 LDR R0,[R5, #+260] \ 000004CC 811081E0 ADD R1,R1,R1, LSL #+1 \ 000004D0 001081E0 ADD R1,R1,R0 \ 000004D4 000195E5 LDR R0,[R5, #+256] \ 000004D8 ........ _BLF PrintField,??PrintField??rA 5642 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 000004DC CC0095E5 LDR R0,[R5, #+204] \ 000004E0 01002DE9 PUSH {R0} \ 000004E4 C40095E5 LDR R0,[R5, #+196] \ 000004E8 01002DE9 PUSH {R0} \ 000004EC E81195E5 LDR R1,[R5, #+488] \ 000004F0 E03195E5 LDR R3,[R5, #+480] \ 000004F4 30209DE5 LDR R2,[SP, #+48] \ 000004F8 040195E5 LDR R0,[R5, #+260] \ 000004FC 011180E0 ADD R1,R0,R1, LSL #+2 \ 00000500 340000EA B ??maincsm_onmessage_26 5643 } 5644 else 5645 { 5646 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_25: \ 00000504 00402DE9 PUSH {LR} \ 00000508 ........ _BLF PrintField,??PrintField??rA 5647 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 0000050C E80195E5 LDR R0,[R5, #+488] \ 00000510 C50100EF SWI +453 \ 00000514 CC1095E5 LDR R1,[R5, #+204] \ 00000518 0B20A0E1 MOV R2,R11 \ 0000051C 02002DE9 PUSH {R1} \ 00000520 C41095E5 LDR R1,[R5, #+196] \ 00000524 02002DE9 PUSH {R1} \ 00000528 E03195E5 LDR R3,[R5, #+480] \ 0000052C 041195E5 LDR R1,[R5, #+260] \ 00000530 010080E0 ADD R0,R0,R1 \ 00000534 011080E2 ADD R1,R0,#+1 \ 00000538 000195E5 LDR R0,[R5, #+256] \ 0000053C ........ _BLF PrintField,??PrintField??rA 5648 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 00000540 E80195E5 LDR R0,[R5, #+488] \ 00000544 C50100EF SWI +453 \ 00000548 CC1095E5 LDR R1,[R5, #+204] \ 0000054C 0A20A0E1 MOV R2,R10 \ 00000550 02002DE9 PUSH {R1} \ 00000554 C41095E5 LDR R1,[R5, #+196] \ 00000558 02002DE9 PUSH {R1} \ 0000055C E03195E5 LDR R3,[R5, #+480] \ 00000560 041195E5 LDR R1,[R5, #+260] \ 00000564 800081E0 ADD R0,R1,R0, LSL #+1 \ 00000568 021080E2 ADD R1,R0,#+2 \ 0000056C 000195E5 LDR R0,[R5, #+256] \ 00000570 ........ _BLF PrintField,??PrintField??rA 5649 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 00000574 E80195E5 LDR R0,[R5, #+488] \ 00000578 C50100EF SWI +453 \ 0000057C CC1095E5 LDR R1,[R5, #+204] \ 00000580 0920A0E1 MOV R2,R9 \ 00000584 02002DE9 PUSH {R1} \ 00000588 C41095E5 LDR R1,[R5, #+196] \ 0000058C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000590 02002DE9 PUSH {R1} \ 00000594 E03195E5 LDR R3,[R5, #+480] \ 00000598 041195E5 LDR R1,[R5, #+260] \ 0000059C 010080E0 ADD R0,R0,R1 \ 000005A0 031080E2 ADD R1,R0,#+3 \ 000005A4 000195E5 LDR R0,[R5, #+256] \ 000005A8 ........ _BLF PrintField,??PrintField??rA 5650 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 000005AC E80195E5 LDR R0,[R5, #+488] \ 000005B0 C50100EF SWI +453 \ 000005B4 CC1095E5 LDR R1,[R5, #+204] \ 000005B8 02002DE9 PUSH {R1} \ 000005BC C41095E5 LDR R1,[R5, #+196] \ 000005C0 02002DE9 PUSH {R1} \ 000005C4 E03195E5 LDR R3,[R5, #+480] \ 000005C8 30209DE5 LDR R2,[SP, #+48] \ 000005CC 041195E5 LDR R1,[R5, #+260] \ 000005D0 000181E0 ADD R0,R1,R0, LSL #+2 \ 000005D4 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_26: \ 000005D8 000195E5 LDR R0,[R5, #+256] \ 000005DC ........ _BLF PrintField,??PrintField??rA \ 000005E0 28D08DE2 ADD SP,SP,#+40 5651 } 5652 #endif 5653 } 5654 main_d=0; \ ??maincsm_onmessage_24: \ 000005E4 DC6185E5 STR R6,[R5, #+476] 5655 } 5656 if(Is_UPTIME_On) \ ??maincsm_onmessage_23: \ 000005E8 380295E5 LDR R0,[R5, #+568] \ 000005EC 000050E3 CMP R0,#+0 \ 000005F0 0100000A BEQ ??maincsm_onmessage_27 5657 DrawOnlineTime(canvasdata); \ 000005F4 E40195E5 LDR R0,[R5, #+484] \ 000005F8 ........ BL DrawOnlineTime 5658 if(Is_PING_On) \ ??maincsm_onmessage_27: \ 000005FC F40195E5 LDR R0,[R5, #+500] \ 00000600 000050E3 CMP R0,#+0 \ 00000604 0100000A BEQ ??maincsm_onmessage_28 5659 DrawPing(canvasdata); \ 00000608 E40195E5 LDR R0,[R5, #+484] \ 0000060C ........ BL DrawPing 5660 5661 if(Auto_Status && showAwayIdle) \ ??maincsm_onmessage_28: \ 00000610 F00095E5 LDR R0,[R5, #+240] \ 00000614 000050E3 CMP R0,#+0 \ 00000618 E4009515 LDRNE R0,[R5, #+228] \ 0000061C 00005013 CMPNE R0,#+0 \ 00000620 0100000A BEQ ??maincsm_onmessage_29 5662 DrawAutoMSG(canvasdata); \ 00000624 E40195E5 LDR R0,[R5, #+484] \ 00000628 ........ BL DrawAutoMSG 5663 if(Is_Unread_On) \ ??maincsm_onmessage_29: \ 0000062C D40095E5 LDR R0,[R5, #+212] \ 00000630 000050E3 CMP R0,#+0 \ 00000634 0F00000A BEQ ??maincsm_onmessage_21 5664 { 5665 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 00000638 082295E5 LDR R2,[R5, #+520] \ 0000063C 0490A0E3 MOV R9,#+4 \ 00000640 B09E89E3 ORR R9,R9,#0xB00 \ 00000644 5F1F87E2 ADD R1,R7,#+380 \ 00000648 050089E0 ADD R0,R9,R5 \ 0000064C 160000EF SWI +22 5666 #ifdef EVILFOX 5667 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, space); 5668 #else 5669 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 00000650 C80095E5 LDR R0,[R5, #+200] \ 00000654 052089E0 ADD R2,R9,R5 \ 00000658 01002DE9 PUSH {R0} \ 0000065C C40095E5 LDR R0,[R5, #+196] \ 00000660 01002DE9 PUSH {R0} \ 00000664 E03195E5 LDR R3,[R5, #+480] \ 00000668 AC1095E5 LDR R1,[R5, #+172] \ 0000066C A80095E5 LDR R0,[R5, #+168] \ 00000670 ........ _BLF PrintField,??PrintField??rA \ 00000674 08D08DE2 ADD SP,SP,#+8 5670 #endif 5671 } 5672 } 5673 } 5674 } 5675 } 5676 } 5677 5678 //-----------------------------------------------------------// 5679 5680 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_21: \ 00000678 040094E5 LDR R0,[R4, #+4] \ 0000067C AF10A0E3 MOV R1,#+175 \ 00000680 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000684 010050E1 CMP R0,R1 \ 00000688 3400001A BNE ??maincsm_onmessage_30 5681 { 5682 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 5683 #ifdef NEWSGOLD 5684 if( (strcmp_nocase("4:\\zbin\\etc\\NATICQ.bcfg",(char *)msg->data0)==0) 5685 || (strcmp_nocase("4:\\zbin\\etc\\NATICQMod.bcfg",(char *)msg->data0)==0)) \ 0000068C 0C1094E5 LDR R1,[R4, #+12] \ 00000690 640E87E2 ADD R0,R7,#+1600 \ 00000694 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000698 000050E3 CMP R0,#+0 \ 0000069C 0600000A BEQ ??maincsm_onmessage_31 \ 000006A0 0C1094E5 LDR R1,[R4, #+12] \ 000006A4 2400A0E3 MOV R0,#+36 \ 000006A8 600E80E3 ORR R0,R0,#0x600 \ 000006AC 070080E0 ADD R0,R0,R7 \ 000006B0 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000006B4 000050E3 CMP R0,#+0 \ 000006B8 2800001A BNE ??maincsm_onmessage_30 5686 #else 5687 if( (strcmp_nocase("0:\\zbin\\etc\\NATICQ.bcfg",(char *)msg->data0)==0) 5688 || (strcmp_nocase("0:\\zbin\\etc\\NATICQMod.bcfg",(char *)msg->data0)==0)) 5689 #endif 5690 { 5691 ShowMSG(1,(int)"NatICQ config updated!"); \ ??maincsm_onmessage_31: \ 000006BC 571F87E2 ADD R1,R7,#+348 \ 000006C0 0100A0E3 MOV R0,#+1 \ 000006C4 480100EF SWI +328 5692 // InitConfig(); 5693 UpdateConfig(); \ 000006C8 ........ BL UpdateConfig 5694 #ifdef NEWSGOLD 5695 initTags(); \ 000006CC ........ _BLF initTags,??initTags??rA 5696 #endif 5697 PrintLibInit(1); \ 000006D0 0800A0E1 MOV R0,R8 \ 000006D4 ........ _BLF PrintLibInit,??PrintLibInit??rA 5698 FontPathInit((char *)fontpath, 1); \ 000006D8 0490A0E3 MOV R9,#+4 \ 000006DC 509E89E3 ORR R9,R9,#0x500 \ 000006E0 0810A0E1 MOV R1,R8 \ 000006E4 050089E0 ADD R0,R9,R5 \ 000006E8 ........ _BLF FontPathInit,??FontPathInit??rA 5699 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 000006EC 0820A0E1 MOV R2,R8 \ 000006F0 E70F82E3 ORR R0,R2,#0x39C \ 000006F4 051080E0 ADD R1,R0,R5 \ 000006F8 E70F85E2 ADD R0,R5,#+924 \ 000006FC ........ _BLF SetFontColor,??SetFontColor??rA 5700 //#ifdef ELKA 5701 if(fonto==1) \ 00000700 C40095E5 LDR R0,[R5, #+196] \ 00000704 010050E3 CMP R0,#+1 \ 00000708 0B00001A BNE ??maincsm_onmessage_32 5702 { 5703 char *heght=malloc(64); \ 0000070C 4000A0E3 MOV R0,#+64 \ 00000710 140000EF SWI +20 \ 00000714 00A0A0E1 MOV R10,R0 5704 sprintf(heght, "%s2240.png", fontpath); \ 00000718 052089E0 ADD R2,R9,R5 \ 0000071C 541F87E2 ADD R1,R7,#+336 \ 00000720 160000EF SWI +22 5705 paused_height=GetImgHeight((int)heght); \ 00000724 0A00A0E1 MOV R0,R10 \ 00000728 210000EF SWI +33 \ 0000072C E80185E5 STR R0,[R5, #+488] 5706 mfree(heght); \ 00000730 0A00A0E1 MOV R0,R10 \ 00000734 150000EF SWI +21 \ 00000738 010000EA B ??maincsm_onmessage_33 5707 } 5708 else 5709 paused_height=fonto-100; \ ??maincsm_onmessage_32: \ 0000073C 640040E2 SUB R0,R0,#+100 \ 00000740 E80185E5 STR R0,[R5, #+488] 5710 //#endif 5711 free_ICONS(); \ ??maincsm_onmessage_33: \ 00000744 ........ BL free_ICONS 5712 setup_ICONS(); \ 00000748 ........ BL setup_ICONS 5713 ResortCL(); \ 0000074C ........ _BLF ResortCL,??ResortCL??rA 5714 RecountMenu(NULL,1); \ 00000750 0110A0E3 MOV R1,#+1 \ 00000754 0600A0E1 MOV R0,R6 \ 00000758 ........ BL RecountMenu 5715 init_time_zone(); \ 0000075C ........ BL init_time_zone 5716 // InitSmiles(); 5717 } 5718 } 5719 5720 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_30: \ 00000760 040094E5 LDR R0,[R4, #+4] \ 00000764 0E10A0E3 MOV R1,#+14 \ 00000768 641C81E3 ORR R1,R1,#0x6400 \ 0000076C 010050E1 CMP R0,R1 \ 00000770 0E00001A BNE ??maincsm_onmessage_34 5721 { 5722 if ((int)msg->data0==csm->gui_id) \ 00000774 10109DE5 LDR R1,[SP, #+16] \ 00000778 0C0094E5 LDR R0,[R4, #+12] \ 0000077C 281091E5 LDR R1,[R1, #+40] \ 00000780 010050E1 CMP R0,R1 5723 { 5724 csm->csm.state=-3; \ 00000784 10009D05 LDREQ R0,[SP, #+16] \ 00000788 0210E003 MVNEQ R1,#+2 \ 0000078C 10108005 STREQ R1,[R0, #+16] 5725 } 5726 if ((int)msg->data0==contactlist_menu_id) \ 00000790 0C0094E5 LDR R0,[R4, #+12] \ 00000794 B01295E5 LDR R1,[R5, #+688] \ 00000798 010050E1 CMP R0,R1 5727 { 5728 contactlist_menu_id=0; \ 0000079C B0628505 STREQ R6,[R5, #+688] 5729 prev_clmenu_itemcount=0; \ 000007A0 B8628505 STREQ R6,[R5, #+696] 5730 } 5731 if ((int)msg->data0==edchat_id) \ 000007A4 B41295E5 LDR R1,[R5, #+692] \ 000007A8 010050E1 CMP R0,R1 5732 { 5733 edchat_id=0; \ 000007AC B4628505 STREQ R6,[R5, #+692] 5734 } 5735 } 5736 5737 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_34: \ 000007B0 040094E5 LDR R0,[R4, #+4] \ 000007B4 AE10A0E3 MOV R1,#+174 \ 000007B8 DE1C81E3 ORR R1,R1,#0xDE00 \ 000007BC 010050E1 CMP R0,R1 \ 000007C0 0D00001A BNE ??maincsm_onmessage_22 5738 { 5739 switch((int)msg->data0) \ 000007C4 0C0094E5 LDR R0,[R4, #+12] \ 000007C8 101094E5 LDR R1,[R4, #+16] \ 000007CC ........ LDR R9,??DataTable112 ;; do_reconnect \ 000007D0 AC40A0E3 MOV R4,#+172 \ 000007D4 F04E84E3 ORR R4,R4,#0xF00 \ 000007D8 48AFC4E3 BIC R10,R4,#0x120 \ 000007DC 802050E2 SUBS R2,R0,#+128 \ 000007E0 0800000A BEQ ??maincsm_onmessage_35 \ 000007E4 022052E2 SUBS R2,R2,#+2 \ 000007E8 0200000A BEQ ??maincsm_onmessage_36 \ 000007EC 122052E2 SUBS R2,R2,#+18 \ 000007F0 1100000A BEQ ??maincsm_onmessage_37 \ 000007F4 1B0000EA B ??maincsm_onmessage_38 5740 { 5741 case LMAN_DISCONNECT_IND: 5742 is_gprs_online=0; \ ??maincsm_onmessage_36: \ 000007F8 A06285E5 STR R6,[R5, #+672] 5743 return(1); \ ??maincsm_onmessage_22: \ 000007FC 0100A0E3 MOV R0,#+1 \ 00000800 14D08DE2 ADD SP,SP,#+20 \ 00000804 F08FBDE8 POP {R4-R11,PC} ;; return 5744 case LMAN_CONNECT_CNF: 5745 vibra_count=1; \ ??maincsm_onmessage_35: \ 00000808 708285E5 STR R8,[R5, #+624] 5746 start_vibra(); \ 0000080C ........ BL start_vibra 5747 is_gprs_online=1; \ 00000810 A08285E5 STR R8,[R5, #+672] 5748 strcpy(logmsg,LG_GRGPRSUP); \ 00000814 241087E2 ADD R1,R7,#+36 \ 00000818 05008AE0 ADD R0,R10,R5 \ 0000081C 1A0000EF SWI +26 5749 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000820 D40195E5 LDR R0,[R5, #+468] \ 00000824 0920A0E1 MOV R2,R9 \ 00000828 D830A0E3 MOV R3,#+216 \ 0000082C 930001E0 MUL R1,R3,R0 \ 00000830 050084E0 ADD R0,R4,R5 \ 00000834 4D0000EF SWI +77 5750 return(1); \ 00000838 070000EA B ??maincsm_onmessage_39 5751 case ENIP_DNR_HOST_BY_NAME: 5752 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_37: \ 0000083C 340395E5 LDR R0,[R5, #+820] \ 00000840 000051E1 CMP R1,R0 \ 00000844 ECFFFF1A BNE ??maincsm_onmessage_22 5753 { 5754 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000848 380395E5 LDR R0,[R5, #+824] \ 0000084C 000050E3 CMP R0,#+0 \ 00000850 E9FFFF0A BEQ ??maincsm_onmessage_22 \ 00000854 ........ LDR R0,??DataTable113 ;; create_connect \ ??maincsm_onmessage_40: \ 00000858 710100EF SWI +369 5755 } 5756 return(1); \ ??maincsm_onmessage_39: \ 0000085C 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_41: \ 00000860 14D08DE2 ADD SP,SP,#+20 \ 00000864 F08FBDE8 POP {R4-R11,PC} 5757 } 5758 if ((int)msg->data1==sock) \ ??maincsm_onmessage_38: \ 00000868 842295E5 LDR R2,[R5, #+644] \ 0000086C 020051E1 CMP R1,R2 \ 00000870 E1FFFF1A BNE ??maincsm_onmessage_22 5759 { 5760 //Если наш сокет 5761 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000874 201EA0E1 LSR R1,R0,#+28 \ 00000878 0A0051E3 CMP R1,#+10 \ 0000087C 0200001A BNE ??maincsm_onmessage_42 5762 { 5763 //Принят пакет 5764 ProcessPacket((TPKT *)msg->data0); \ 00000880 ........ BL ProcessPacket 5765 return(0); \ 00000884 0000A0E3 MOV R0,#+0 \ 00000888 F4FFFFEA B ??maincsm_onmessage_41 5766 } 5767 switch((int)msg->data0) \ ??maincsm_onmessage_42: \ 0000088C 801295E5 LDR R1,[R5, #+640] \ 00000890 8A0040E2 SUB R0,R0,#+138 \ 00000894 050050E3 CMP R0,#+5 \ 00000898 D7FFFF8A BHI ??maincsm_onmessage_22 \ 0000089C 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 000008A0 D02092E1 LDRSB R2,[R2, R0] \ 000008A4 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 000008A8 43433E01 DC8 +67,+67,+62,+1 \ 000008AC 4C480000 DC8 +76,+72,+0,+0 5768 { 5769 case ENIP_SOCK_CONNECTED: 5770 if (connect_state==1) \ ??maincsm_onmessage_43: \ 000008B0 010051E3 CMP R1,#+1 \ 000008B4 3600001A BNE ??maincsm_onmessage_44 5771 { 5772 if(VIBR_ON_CONNECT) \ 000008B8 200195E5 LDR R0,[R5, #+288] \ 000008BC 000050E3 CMP R0,#+0 5773 vibra_count=2; \ 000008C0 0200A013 MOVNE R0,#+2 \ 000008C4 70028515 STRNE R0,[R5, #+624] 5774 else 5775 vibra_count=1; \ 000008C8 70828505 STREQ R8,[R5, #+624] 5776 start_vibra(); \ 000008CC ........ BL start_vibra 5777 //Соединение установленно, посылаем пакет login 5778 strcpy(logmsg, LG_GRTRYLOGIN); \ 000008D0 501F87E2 ADD R1,R7,#+320 \ 000008D4 05008AE0 ADD R0,R10,R5 \ 000008D8 1A0000EF SWI +26 5779 { 5780 int i=strlen(PASS); \ 000008DC 7800A0E3 MOV R0,#+120 \ 000008E0 600E80E3 ORR R0,R0,#0x600 \ 000008E4 050080E0 ADD R0,R0,R5 \ 000008E8 1B0000EF SWI +27 \ 000008EC 0040A0E1 MOV R4,R0 5781 TPKT *p=malloc(sizeof(PKT)+i); \ 000008F0 080084E2 ADD R0,R4,#+8 \ 000008F4 140000EF SWI +20 \ 000008F8 0090A0E1 MOV R9,R0 5782 p->pkt.uin=UIN; \ 000008FC 1C0195E5 LDR R0,[R5, #+284] 5783 p->pkt.type=T_REQLOGIN; 5784 p->pkt.data_len=i; 5785 memcpy(p->data,PASS,i); \ 00000900 0420A0E1 MOV R2,R4 \ 00000904 000089E5 STR R0,[R9, #+0] \ 00000908 B480C9E1 STRH R8,[R9, #+4] \ 0000090C B640C9E1 STRH R4,[R9, #+6] \ 00000910 7800A0E3 MOV R0,#+120 \ 00000914 600E80E3 ORR R0,R0,#0x600 \ 00000918 051080E0 ADD R1,R0,R5 \ 0000091C 080089E2 ADD R0,R9,#+8 \ 00000920 1E0100EF SWI +286 5786 SUBPROC((void *)send_login,0,p); \ 00000924 68019FE5 LDR R0,??maincsm_onmessage_5+0x10 ;; send_login \ 00000928 0920A0E1 MOV R2,R9 \ 0000092C 0010A0E3 MOV R1,#+0 \ 00000930 710100EF SWI +369 5787 } 5788 GROUP_CACHE=0; \ 00000934 AC6285E5 STR R6,[R5, #+684] 5789 SENDMSGCOUNT=0; //Начинаем отсчет \ 00000938 146285E5 STR R6,[R5, #+532] 5790 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 0000093C 0600A0E1 MOV R0,R6 \ 00000940 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000944 000050E3 CMP R0,#+0 \ 00000948 0100001A BNE ??maincsm_onmessage_45 \ 0000094C 4D1F87E2 ADD R1,R7,#+308 \ 00000950 ........ _BLF AddGroup,??AddGroup??rA 5791 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_45: \ 00000954 1C0195E5 LDR R0,[R5, #+284] \ 00000958 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000095C 000050E3 CMP R0,#+0 \ 00000960 0700001A BNE ??maincsm_onmessage_46 \ 00000964 C00095E5 LDR R0,[R5, #+192] \ 00000968 000050E3 CMP R0,#+0 \ 0000096C 0400000A BEQ ??maincsm_onmessage_46 \ 00000970 1C0195E5 LDR R0,[R5, #+284] \ 00000974 0130A0E3 MOV R3,#+1 \ 00000978 0620A0E1 MOV R2,R6 \ 0000097C 4A1F87E2 ADD R1,R7,#+296 \ 00000980 ........ _BLF AddContact,??AddContact??rA 5792 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_46: \ 00000984 0C019FE5 LDR R0,??maincsm_onmessage_5+0x14 ;; LoadLocalCL \ 00000988 710100EF SWI +369 5793 SMART_REDRAW(); \ 0000098C ........ BL SMART_REDRAW \ 00000990 B1FFFFEA B ??maincsm_onmessage_39 5794 } 5795 else 5796 { 5797 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_44: \ 00000994 4C1087E2 ADD R1,R7,#+76 \ ??maincsm_onmessage_47: \ 00000998 0100A0E3 MOV R0,#+1 \ 0000099C 480100EF SWI +328 \ 000009A0 ADFFFFEA B ??maincsm_onmessage_39 5798 } 5799 break; 5800 case ENIP_SOCK_DATA_READ: 5801 if (connect_state>=2) \ ??maincsm_onmessage_48: \ 000009A4 020051E3 CMP R1,#+2 5802 { 5803 //Если посылали send 5804 SUBPROC((void *)get_answer); \ 000009A8 EC009FA5 LDRGE R0,??maincsm_onmessage_5+0x18 ;; get_answer \ 000009AC A9FFFFAA BGE ??maincsm_onmessage_40 5805 //SMART_REDRAW(); 5806 } 5807 else 5808 { 5809 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 000009B0 741087E2 ADD R1,R7,#+116 \ 000009B4 F7FFFFEA B ??maincsm_onmessage_47 5810 } 5811 break; 5812 case ENIP_BUFFER_FREE: 5813 case ENIP_BUFFER_FREE1: 5814 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_49: \ 000009B8 ........ LDR R0,??DataTable114 ;; SendAnswer \ 000009BC 0020A0E3 MOV R2,#+0 \ 000009C0 0210A0E1 MOV R1,R2 \ 000009C4 710100EF SWI +369 \ 000009C8 A3FFFFEA B ??maincsm_onmessage_39 5815 break; 5816 case ENIP_SOCK_REMOTE_CLOSED: 5817 //Закрыт со стороны сервера 5818 if (connect_state) \ ??maincsm_onmessage_50: \ 000009CC 000051E3 CMP R1,#+0 \ 000009D0 89FFFF0A BEQ ??maincsm_onmessage_22 5819 SUBPROC((void *)end_socket); \ 000009D4 ........ LDR R0,??DataTable115 ;; end_socket \ 000009D8 9EFFFFEA B ??maincsm_onmessage_40 5820 break; 5821 case ENIP_SOCK_CLOSED: 5822 //strcpy(logmsg, "No connection"); 5823 //Dump not received 5824 /* if (RXstate>(-(int)sizeof(PKT))) 5825 { 5826 unsigned int err; 5827 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 5828 if (f!=-1) 5829 { 5830 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 5831 fclose(f,&err); 5832 } 5833 }*/ 5834 FillAllOffline(); \ ??maincsm_onmessage_51: \ 000009DC ........ _BLF FillAllOffline,??FillAllOffline??rA 5835 RecountMenu(NULL,1); \ 000009E0 0110A0E3 MOV R1,#+1 \ 000009E4 0600A0E1 MOV R0,R6 \ 000009E8 ........ BL RecountMenu 5836 connect_state=0; 5837 sock=-1; \ 000009EC 0600E0E1 MVN R0,R6 \ 000009F0 840285E5 STR R0,[R5, #+644] 5838 if(VIBR_ON_CONNECT) \ 000009F4 200195E5 LDR R0,[R5, #+288] \ 000009F8 806285E5 STR R6,[R5, #+640] \ 000009FC 000050E3 CMP R0,#+0 5839 vibra_count=4; \ 00000A00 0400A013 MOVNE R0,#+4 \ 00000A04 70028515 STRNE R0,[R5, #+624] 5840 else 5841 vibra_count=1; \ 00000A08 70828505 STREQ R8,[R5, #+624] 5842 5843 start_vibra(); \ 00000A0C ........ BL start_vibra 5844 if (sendq_p) \ 00000A10 9C0295E5 LDR R0,[R5, #+668] \ 00000A14 000050E3 CMP R0,#+0 \ 00000A18 0400000A BEQ ??maincsm_onmessage_52 5845 { 5846 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000A1C 983295E5 LDR R3,[R5, #+664] \ 00000A20 982087E2 ADD R2,R7,#+152 \ 00000A24 FF10A0E3 MOV R1,#+255 \ 00000A28 05008AE0 ADD R0,R10,R5 \ 00000A2C 1B0100EF SWI +283 5847 } 5848 SMART_REDRAW(); \ ??maincsm_onmessage_52: \ 00000A30 ........ BL SMART_REDRAW 5849 SUBPROC((void *)ClearSendQ); \ 00000A34 ........ LDR R0,??DataTable116 ;; ClearSendQ \ 00000A38 710100EF SWI +369 5850 #ifdef EVILFOX 5851 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 5852 #else 5853 if (!disautorecconect) \ 00000A3C 540295E5 LDR R0,[R5, #+596] \ 00000A40 000050E3 CMP R0,#+0 \ 00000A44 6CFFFF1A BNE ??maincsm_onmessage_22 5854 { 5855 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000A48 D40195E5 LDR R0,[R5, #+468] \ 00000A4C 0920A0E1 MOV R2,R9 \ 00000A50 D830A0E3 MOV R3,#+216 \ 00000A54 930001E0 MUL R1,R3,R0 \ 00000A58 050084E0 ADD R0,R4,R5 \ 00000A5C 4D0000EF SWI +77 5856 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000A60 D40195E5 LDR R0,[R5, #+468] \ 00000A64 05308AE0 ADD R3,R10,R5 \ 00000A68 01002DE9 PUSH {R0} \ 00000A6C BC2087E2 ADD R2,R7,#+188 \ 00000A70 FF10A0E3 MOV R1,#+255 \ 00000A74 05008AE0 ADD R0,R10,R5 \ 00000A78 1B0100EF SWI +283 \ 00000A7C 04D08DE2 ADD SP,SP,#+4 \ 00000A80 75FFFFEA B ??maincsm_onmessage_39 \ ??maincsm_onmessage_5: \ 00000A84 ........ DC32 CheckDoubleRun \ 00000A88 ........ DC32 ProcessNextSmile \ 00000A8C ........ DC32 ProcessNextXStatImg \ 00000A90 ........ DC32 XStatusesIconArray \ 00000A94 ........ DC32 send_login \ 00000A98 ........ DC32 LoadLocalCL \ 00000A9C ........ DC32 get_answer 5857 } 5858 5859 #endif 5860 break; 5861 } 5862 } 5863 } 5864 return(1); 5865 } 5866 5867 5868 //-------------------- ICON IN ICONBAR ------------// 5869 5870 //kluchnik 26.03.08 5871 #ifdef ELKA 5872 #pragma swi_number=0x27 5873 __swi __arm void AddIconToIconBar(int pic, short *num); 5874 5875 5876 void addIconBar(short* num) 5877 { 5878 int icn; 5879 if(ShowStatusIcon==1 || ShowStatusIcon==3) 5880 { 5881 if(total_unread) 5882 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 5883 else 5884 { 5885 switch(connect_state) 5886 { 5887 case 0: 5888 icn=IS_OFFLINE; break; 5889 case 3: 5890 icn=CurrentStatus; //IS_ONLINE; 5891 break; 5892 default: 5893 icn=IS_UNKNOWN; break; 5894 } 5895 AddIconToIconBar(NumStatusToIconBar + icn, num); 5896 } 5897 } 5898 else 5899 { 5900 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 5901 { 5902 if(!(IsIdleUiOnTop())) 5903 { 5904 if(total_unread) 5905 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 5906 else 5907 { 5908 switch(connect_state) 5909 { 5910 case 0: 5911 icn=IS_OFFLINE; break; 5912 case 3: 5913 icn=CurrentStatus; //IS_ONLINE; 5914 break; 5915 default: 5916 icn=IS_UNKNOWN; break; 5917 } 5918 AddIconToIconBar(NumStatusToIconBar + icn, num); 5919 } 5920 } 5921 } 5922 } 5923 5924 if(show_xstatus==2 || show_xstatus==3) 5925 if(CurrentXStatus!=0) 5926 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); 5927 5928 #ifdef kluchnik 5929 // if(solnce) 5930 //{ 5931 CLIST *t; 5932 t=FindContactByUin(438532198); 5933 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 5934 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 5935 // } 5936 #endif 5937 } 5938 5939 typedef struct 5940 { 5941 char check_name[8]; 5942 int addr; 5943 }ICONBAR_H; 5944 5945 #endif 5946 \ In segment DATA_C, align 4, align-sorted 5947 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 5948 \ In segment DATA_Z, align 4, align-sorted 5949 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 5950 5951 struct 5952 { 5953 CSM_DESC maincsm; 5954 WSHDR maincsm_name; 5955 #ifdef ELKA 5956 ICONBAR_H iconbar_handler; 5957 #endif 5958 }MAINCSM = 5959 { 5960 { 5961 maincsm_onmessage, 5962 maincsm_oncreate, 5963 #ifdef NEWSGOLD 5964 0, 5965 0, 5966 0, 5967 0, 5968 #endif 5969 maincsm_onclose, 5970 sizeof(MAIN_CSM), 5971 1, 5972 &minus11 5973 }, 5974 { 5975 maincsm_name_body, 5976 NAMECSM_MAGIC1, 5977 NAMECSM_MAGIC2, 5978 0x0, 5979 139 5980 } 5981 #ifdef ELKA 5982 , 5983 { 5984 "IconBar" 5985 } 5986 #endif 5987 }; 5988 \ In segment CODE, align 4, keep-with-next 5989 void UpdateCSMname(void) 5990 { 5991 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable117 ;; S_ICONS \ 00000004 18109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 1C2190E5 LDR R2,[R0, #+284] \ 00000010 3830A0E3 MOV R3,#+56 \ 00000014 503D83E3 ORR R3,R3,#0x1400 \ 00000018 000083E0 ADD R0,R3,R0 \ 0000001C 240100EF SWI +292 5992 } \ 00000020 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 00000024 ........ DC32 `?` 5993 5994 #ifdef ELKA 5995 void SetIconBarHandler() 5996 { 5997 MAINCSM.iconbar_handler.addr = (int)addIconBar; 5998 } 5999 #endif 6000 \ In segment CODE, align 4, keep-with-next 6001 int main(char *filename) 6002 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 6003 MAIN_CSM main_csm; 6004 char *s; 6005 int len; 6006 // WSHDR *ws; 6007 UpdateConfig(); 6008 //InitConfig(); 6009 6010 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable131 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable119 ;; `?wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 6075 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 6076 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 6077 { 6078 for (int i=0; i=0xE100) 6082 { 6083 t=FindSmileByUni(c); 6084 if (t) 6085 { 6086 if (t->lines) 6087 { 6088 len+=strlen(t->lines->text); 6089 } 6090 } 6091 else len++; 6092 } 6093 else len++; 6094 } 6095 6096 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 6097 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 6098 for (int wcur=0; wcur=0xE100) 6103 { 6104 t=FindSmileByUni(c); 6105 if (t) 6106 { 6107 int w; 6108 char *s; 6109 if (t->lines) 6110 { 6111 s=t->lines->text; 6112 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 6139 { 6140 if (t->isactive) return t; \ 0000000C 7C1090E5 LDR R1,[R0, #+124] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 6141 } 6142 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable124 ;; S_ICONS + 680 \ 00000020 020000EA B ??FindNextActiveContact_2 6143 while(t=(CLIST *)(t->next)) 6144 { 6145 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 7C1090E5 LDR R1,[R0, #+124] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 6146 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 6147 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 6148 } 6149 \ In segment CODE, align 4, keep-with-next 6150 CLIST *FindPrevActiveContact(CLIST *t) 6151 { 6152 CLIST *cl; 6153 CLIST *cl_active=NULL; 6154 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable124 ;; S_ICONS + 680 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 6155 6156 6157 while(cl=cl->next) 6158 { 6159 if (cl==t) 6160 { 6161 if (cl_active==NULL) break; 6162 else return (cl_active); 6163 } 6164 else 6165 { 6166 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 7C3092E5 LDR R3,[R2, #+124] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 6167 } \ ??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 6168 } 6169 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 6170 { 6171 if (t->isactive) cl_active=t; \ 00000044 7C2090E5 LDR R2,[R0, #+124] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 6172 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 6173 } 6174 return cl_active; 6175 } 6176 6177 \ In segment CODE, align 4, keep-with-next 6178 void ed_options_handler(USR_MENU_ITEM *item) 6179 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 6180 EDCHAT_STRUCT *ed_struct=item->user_pointer; 6181 CLIST *t; 6182 int i=item->cur_item; 6183 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable131 ;; 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 6184 { 6185 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ws,LG_MNUEDNEXTACT); 6189 break; 6190 case 1: 6191 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 6192 break; 6193 default: 6194 i-=2; 6195 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 781295E5 LDR R1,[R5, #+632] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 6196 break; 6197 } 6198 } 6199 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 6200 { 6201 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 6202 { 6203 case 0: 6204 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 6205 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 6206 { 6207 GeneralFunc_flag1(edchat_id,1); \ 00000094 B40295E5 LDR R0,[R5, #+692] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 6208 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 6209 } 6210 break; 6211 case 1: 6212 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 6213 if (t && t!=ed_struct->ed_contact) 6214 { 6215 GeneralFunc_flag1(edchat_id,1); 6216 CreateEditChat(t); 6217 } 6218 break; 6219 default: 6220 i-=2; 6221 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 6222 { 6223 EDITCONTROL ec; 6224 WSHDR *ed_ws; 6225 int c; 6226 char *p=templates_lines[i]; \ 000000CC 780295E5 LDR R0,[R5, #+632] 6227 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 6228 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 6229 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 6230 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 6231 { 6232 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 6233 while(c=*p++) 6234 { 6235 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 6236 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 6237 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 6238 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 6239 } 6240 else 6241 { 6242 while(c=*p++) 6243 { 6244 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 6245 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 6246 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 6247 } 6248 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 6249 } 6250 break; 6251 } 6252 } 6253 } \ ??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) 6262 { 6263 s = str; 6264 w = ws; 6265 l = len; 6266 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 6267 if(!l) return ws; 6268 ws++; 6269 (*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} 6270 } 6271 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 6272 6273 } 6274 \ In segment CODE, align 4, keep-with-next 6275 int IsUrl(WSHDR *ws, int pos, char *link) 6276 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 6277 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6278 6279 int len = wstrlen(ws); 6280 unsigned short *str = ws->wsbody+1, *tmp, *begin; 6281 tmp = str; 6282 6283 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable127 ;; `?` \ 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 6284 6285 while(str && (begin-tmp <= pos)) 6286 { 6287 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6288 if(str-tmp >= pos-2) 6289 { 6290 for(;begin < str; begin++, link++) 6291 *link = char16to8(*begin); 6292 link[str-begin] = 0; 6293 return 1; 6294 } 6295 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 6296 } 6297 6298 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 6299 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} 6300 while(str && (begin-tmp <= pos)) 6301 { 6302 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6303 if(str-tmp >= pos-2) 6304 { 6305 for(;begin < str; begin++, link++) 6306 *link = char16to8(*begin); 6307 link[str-begin] = 0; 6308 return 1; 6309 } 6310 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 6311 } 6312 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 6313 } 6314 6315 #define UTF16_DIS_UNDERLINE (0xE002) 6316 #define UTF16_ENA_UNDERLINE (0xE001) 6317 \ In segment CODE, align 4, keep-with-next 6318 void ParseAnswer(WSHDR *ws, const char *s) 6319 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 6320 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6321 S_SMILES *t; 6322 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 6323 STXT_SMILES *st; 6324 unsigned int wchar; 6325 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 6326 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 6327 int i; 6328 while(wchar=*s) 6329 { 6330 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 6331 { 6332 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 6333 while(*s && strchr(valid, *s)) 6334 { 6335 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 6336 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 6337 s++; 6338 } \ 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 6339 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 6340 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 6341 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable127 ;; `?` \ 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 6342 } 6343 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 6344 while(t) 6345 { 6346 st=t->lines; 6347 while(st) 6348 { 6349 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 6350 { 6351 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 6352 } 6353 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] 6354 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 6355 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 6356 } 6357 L1: 6358 if (t) 6359 { 6360 wchar=t->uni_smile; 6361 s+=strlen(st->text); 6362 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 6363 } 6364 else 6365 { 6366 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 6367 s++; 6368 ulb>>=8; 6369 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 6370 } \ ??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 6371 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 6372 } 6373 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 6374 while(i>1) 6375 { 6376 if (ws->wsbody[i--]!=13) break; 6377 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 6378 } 6379 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 6380 \ In segment CODE, align 4, keep-with-next 6381 void SaveAnswer(CLIST *cl, WSHDR *ws) 6382 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 6383 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 6384 mfree(cl->answer); \ 00000014 740094E5 LDR R0,[R4, #+116] \ 00000018 150000EF SWI +21 6385 cl->answer=p; \ 0000001C 745084E5 STR R5,[R4, #+116] 6386 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 6387 6388 //links applicator 6389 6390 \ In segment CODE, align 4, keep-with-next 6391 int GetTempName(void) 6392 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 6393 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 6394 unsigned long iday; 6395 TTime tt; 6396 TDate dd; 6397 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 6398 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 6399 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 6400 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] 6401 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 6402 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 6403 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 6404 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 6405 } \ 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 6406 6407 \ In segment CODE, align 4, keep-with-next 6408 void recon() 6409 { 6410 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable128 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 6411 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable131 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 AC00A0E3 MOV R0,#+172 \ 00000014 F00E80E3 ORR R0,R0,#0xF00 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 6412 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 380384E5 STR R0,[R4, #+824] 6413 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable130 ;; create_connect \ 0000002C 710100EF SWI +369 6414 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 6415 \ In segment CODE, align 4, keep-with-next 6416 int edchat_onkey(GUI *data, GUI_MSG *msg) 6417 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6418 //-1 - do redraw 6419 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R5,??DataTable131 ;; S_ICONS \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 8C00A0E3 MOV R0,#+140 \ 00000018 F00E80E3 ORR R0,R0,#0xF00 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 8C0100EF SWI +396 6420 CLIST *t; 6421 TPKT *p; 6422 EDITCONTROL ec; 6423 int len, f;//2026rev 6424 unsigned err;//2026rev 6425 char *s; 6426 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 088090E5 LDR R8,[R0, #+8] 6427 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 6428 char fn[256]; 6429 6430 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 6431 { 6432 void ec_menu(EDCHAT_STRUCT *); 6433 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 6434 return(-1); \ ??edchat_onkey_1: \ 00000054 FD0000EA B ??edchat_onkey_2 6435 } 6436 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 FA0000EA B ??edchat_onkey_4 6437 #ifdef EVILFOX 6438 if (msg->gbsmsg->msg==LONG_PRESS) 6439 { 6440 if (l==VOL_DOWN_BUTTON) 6441 { 6442 WSHDR *ws; 6443 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6444 if(wstrlen(ec.pWS)>0) 6445 { 6446 ws=AllocWS(1); 6447 CutWSTR(ws,0); 6448 6449 EDIT_SetFocus(data,ed_struct->ed_answer); 6450 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6451 6452 FreeWS(ws); 6453 RefreshGUI(); 6454 } 6455 } 6456 if (l==VOL_UP_BUTTON) 6457 { 6458 // WSHDR *ws=AllocWS(strlen(ed_struct->ed_contact->last_msg_buffer)+1); 6459 // ascii2ws(ws,ed_struct->ed_contact->last_msg_buffer); 6460 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 6461 ascii2ws(ws,last_msg_buffer); 6462 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 6463 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6464 FreeWS(ws); 6465 RefreshGUI(); 6466 } 6467 } 6468 #else 6469 6470 void AddSmile(GUI *data); 6471 if (msg->gbsmsg->msg==LONG_PRESS) \ ??edchat_onkey_3: \ 00000068 040097E5 LDR R0,[R7, #+4] \ 0000006C 9510A0E3 MOV R1,#+149 \ 00000070 040090E5 LDR R0,[R0, #+4] \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 3E00001A BNE ??edchat_onkey_5 6472 { 6473 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 2100001A BNE ??edchat_onkey_6 6474 { 6475 if(LongRightAction==2) \ 00000088 140195E5 LDR R0,[R5, #+276] \ 0000008C 020050E3 CMP R0,#+2 \ 00000090 0200001A BNE ??edchat_onkey_7 6476 CreateSmileSelectGUI(ed_struct); \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 0000009C 360000EA B ??edchat_onkey_5 6477 else 6478 if(LongRightAction==1) \ ??edchat_onkey_7: \ 000000A0 010050E3 CMP R0,#+1 \ 000000A4 3400001A BNE ??edchat_onkey_5 6479 { 6480 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 6481 { 6482 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000BC 04208DE2 ADD R2,SP,#+4 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 690100EF SWI +361 6483 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 6484 { 6485 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 6486 if (t && t!=ed_struct->ed_contact) \ 000000F8 0A005911 CMPNE R9,R10 \ 000000FC 1E00000A BEQ ??edchat_onkey_5 6487 { 6488 CreateEditChat(t); \ ??edchat_onkey_8: \ 00000100 0900A0E1 MOV R0,R9 \ 00000104 ........ BL CreateEditChat 6489 return(1); \ 00000108 0100A0E3 MOV R0,#+1 \ 0000010C D00000EA B ??edchat_onkey_4 6490 } 6491 } 6492 } 6493 } 6494 } 6495 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_6: \ 00000110 3D0058E3 CMP R8,#+61 \ 00000114 1800001A BNE ??edchat_onkey_5 \ 00000118 180195E5 LDR R0,[R5, #+280] \ 0000011C 000050E3 CMP R0,#+0 \ 00000120 1500000A BEQ ??edchat_onkey_5 6496 { 6497 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 6498 { 6499 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000138 04208DE2 ADD R2,SP,#+4 \ 0000013C 0400A0E1 MOV R0,R4 \ 00000140 690100EF SWI +361 6500 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 6501 { 6502 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 6503 if (t && t!=ed_struct->ed_contact) \ 00000174 0A005911 CMPNE R9,R10 \ 00000178 E0FFFF1A BNE ??edchat_onkey_8 6504 { 6505 CreateEditChat(t); 6506 return(1); 6507 } 6508 } 6509 } 6510 } 6511 #ifdef ELKA 6512 if (l==VOL_DOWN_BUTTON) 6513 { 6514 WSHDR *ws; 6515 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6516 if(wstrlen(ec.pWS)>0) 6517 { 6518 ws=AllocWS(1); 6519 CutWSTR(ws,0); 6520 6521 EDIT_SetFocus(data,ed_struct->ed_answer); 6522 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6523 6524 FreeWS(ws); 6525 RefreshGUI(); 6526 } 6527 } 6528 if (l==VOL_UP_BUTTON) 6529 { 6530 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 6531 ascii2ws(ws,last_msg_buffer); 6532 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 6533 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6534 FreeWS(ws); 6535 RefreshGUI(); 6536 } 6537 #endif 6538 } 6539 #endif 6540 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_5: \ 0000017C 040097E5 LDR R0,[R7, #+4] \ 00000180 9310A0E3 MOV R1,#+147 \ 00000184 040090E5 LDR R0,[R0, #+4] \ 00000188 401F81E3 ORR R1,R1,#0x100 \ 0000018C 010050E1 CMP R0,R1 \ 00000190 0A00001A BNE ??edchat_onkey_9 6541 { 6542 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 6543 { 6544 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 6545 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000001B8 0400A0E1 MOV R0,R4 \ 000001BC 9B0100EF SWI +411 6546 } 6547 if (l==GREEN_BUTTON) 6548 { 6549 if (connect_state==3) 6550 { 6551 if ((t=ed_struct->ed_contact)) 6552 { 6553 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6554 SaveAnswer(t,ec.pWS); 6555 if ((s=t->answer)) 6556 { 6557 if ((len=strlen(s))) 6558 { 6559 msg_away_timer=0; 6560 away_m=0; 6561 if(SHOW_ACTIVE) 6562 t->isactive=ACTIVE_TIME; 6563 p=malloc(sizeof(PKT)+len+1); 6564 p->pkt.uin=t->uin; 6565 p->pkt.type=T_SENDMSG; 6566 p->pkt.data_len=len; 6567 strcpy(p->data,s); 6568 /* 6569 #ifdef EVILFOX 6570 strcpy(t->last_msg_buffer, s); 6571 #else 6572 */ 6573 #ifdef ELKA 6574 strcpy(last_msg_buffer, s); 6575 #endif 6576 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 6577 SUBPROC((void *)SendAnswer,0,p); 6578 main2_count++; 6579 mfree(t->answer); 6580 t->answer=NULL; 6581 // request_remake_edchat=1; 6582 EDIT_SetFocus(data,ed_struct->ed_answer); 6583 CutWSTR(ews,0); 6584 EDIT_SetTextToFocused(data,ews); 6585 AddMsgToChat(data); 6586 RecountMenu(t,1); 6587 return(-1); 6588 } 6589 } 6590 } 6591 } 6592 } 6593 //================2026rev-begin 6594 if (l==ENTER_BUTTON) 6595 { 6596 6597 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 6598 { 6599 int pos, len; 6600 char *link; 6601 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 6602 wstrcpy(ews,ec.pWS); 6603 pos = EDIT_GetCursorPos(data); 6604 len = wstrlen(ews); 6605 link = malloc(len+1); 6606 6607 if(IsUrl(ews, pos, link)) 6608 { 6609 //templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 6610 // templates_lines[i++]=pp; 6611 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 6612 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 6613 { 6614 fwrite(f,link,strlen(link),&err); 6615 fclose(f,&err); 6616 str_2ws(ews,fn,256); 6617 6618 // if(OpenBrowser) 6619 ExecuteFile(ews,0,0); 6620 /* else 6621 { 6622 6623 ExecuteFile(ews,0,(void*)BalleteMiniPath); 6624 }*/ 6625 6626 unlink(fn, &err); 6627 } 6628 // int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 6629 // templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 6630 // templates_lines[i++]="Open Url"; 6631 // EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 6632 // LockSched(); 6633 // ShowMSG(1,(int)link); 6634 // UnlockSched(); 6635 mfree(link); 6636 return (-1); 6637 } 6638 else 6639 { 6640 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 6641 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 6642 mfree(link); 6643 return (-1); 6644 } 6645 6646 } 6647 6648 } 6649 //================ 2026rev-end =================// 6650 6651 if (l==VOL_UP_BUTTON) 6652 { 6653 int pos; 6654 6655 if ((pos=EDIT_GetFocus(data)-2)>=2) 6656 { 6657 EDIT_SetFocus(data, pos); 6658 EDIT_SetCursorPos(data, 1); 6659 } 6660 return (-1); 6661 } 6662 if (l==VOL_DOWN_BUTTON) 6663 { 6664 int pos; 6665 6666 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 6667 { 6668 EDIT_SetFocus(data, pos); 6669 EDIT_SetCursorPos(data, 1); 6670 } 6671 return (-1); 6672 } 6673 } 6674 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 800295E5 LDR R0,[R5, #+640] \ 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 74A099E5 LDR R10,[R9, #+116] \ 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 240195E5 LDR R0,[R5, #+292] \ 00000228 0070A0E3 MOV R7,#+0 \ 0000022C 247285E5 STR R7,[R5, #+548] \ 00000230 287285E5 STR R7,[R5, #+552] \ 00000234 000050E3 CMP R0,#+0 \ 00000238 5A0FA013 MOVNE R0,#+360 \ 0000023C 7C008915 STRNE R0,[R9, #+124] \ 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 140295E5 LDR R0,[R5, #+532] \ 00000270 ........ LDR R3,??DataTable143 ;; `?ed_contact)); 6695 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 6696 DrawImg(ScreenW()-1-width,1,icon); 6697 #else 6698 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C ........ BL GetIconIndex \ 00000040 004194E7 LDR R4,[R4, +R0, LSL #+2] 6699 width=GetImgWidth(icon); \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 220000EF SWI +34 \ 0000004C 0050A0E1 MOV R5,R0 6700 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); \ 00000050 8A8100EF SWI +33162 \ 00000054 0420A0E1 MOV R2,R4 \ 00000058 050040E0 SUB R0,R0,R5 \ 0000005C C010A0E1 ASR R1,R0,#+1 \ 00000060 0200A0E3 MOV R0,#+2 \ 00000064 230000EF SWI +35 6701 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 6702 GetPaletteAdrByColorIndex(0), 6703 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 6704 #endif 6705 } 6706 } 6707 } \ 00000068 3080BDE8 POP {R4,R5,PC} ;; return 6708 \ In segment CODE, align 4, keep-with-next 6709 void edchat_ghook(GUI *data, int cmd) 6710 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 6711 6712 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 6713 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 6714 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 6715 int j; 6716 EDITCONTROL ec; 6717 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 6718 PNGTOP_DESC *pltop=PNG_TOP(); 6719 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable149 ;; 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 6720 { 6721 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 8C00A0E3 MOV R0,#+140 \ 00000034 F00E80E3 ORR R0,R0,#0xF00 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 6722 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 6723 } 6724 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 6725 { 6726 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 6727 // edgui_data=data; 6728 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 6729 6730 static void *methods[16]; 6731 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 6732 if (m) 6733 { 6734 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6300000A BEQ ??edchat_ghook_3 6735 { 6736 memcpy(methods,m[1],sizeof(methods)); \ 0000007C D76FA0E3 MOV R6,#+860 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 6737 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 580384E5 STR R0,[R4, #+856] 6738 methods[0]=(void *)my_ed_redraw; \ 00000098 74019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 6739 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} 6740 } 6741 } 6742 } 6743 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 6744 { 6745 // if (edgui_data==data) edgui_data=NULL; 6746 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 6747 { 6748 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 6749 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 6750 } 6751 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 6752 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 6753 } 6754 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0900001A BNE ??edchat_ghook_7 6755 { 6756 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] 6757 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 6758 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C A40294E5 LDR R0,[R4, #+676] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 A40284E5 STR R0,[R4, #+676] 6759 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] \ 00000120 E0FFFFEA B ??edchat_ghook_1 6760 #ifdef ELKA 6761 if (!total_unread) 6762 { 6763 SLI_Off(); 6764 } 6765 #endif 6766 /* if (request_close_edchat) 6767 { 6768 request_close_edchat=0; 6769 GeneralFunc_flag1(edchat_id,1); 6770 return; 6771 }*/ 6772 } 6773 if (cmd==7) \ ??edchat_ghook_7: \ 00000124 070059E3 CMP R9,#+7 \ 00000128 2800001A BNE ??edchat_ghook_8 6774 { 6775 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000012C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000130 0020A0E3 MOV R2,#+0 \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0500A0E1 MOV R0,R5 \ 0000013C 680100EF SWI +360 6776 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 6777 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 6778 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000164 0120A0E3 MOV R2,#+1 \ 00000168 081088E2 ADD R1,R8,#+8 \ 0000016C 0500A0E1 MOV R0,R5 \ 00000170 680100EF SWI +360 6779 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 6780 { 6781 time_to_stop_t9=0; \ 00000184 486384E5 STR R6,[R4, #+840] 6782 if (ed_struct->ed_contact->req_add) \ 00000188 000097E5 LDR R0,[R7, #+0] \ 0000018C 681090E5 LDR R1,[R0, #+104] \ 00000190 000051E3 CMP R1,#+0 \ 00000194 0500000A BEQ ??edchat_ghook_10 6783 { 6784 ed_struct->ed_contact->req_add=0; \ 00000198 686080E5 STR R6,[R0, #+104] 6785 AddMsgToChat(data); \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 ........ BL AddMsgToChat 6786 RecountMenu(ed_struct->ed_contact,1); \ 000001A4 000097E5 LDR R0,[R7, #+0] \ 000001A8 0110A0E3 MOV R1,#+1 \ 000001AC ........ BL RecountMenu 6787 } 6788 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001B0 000097E5 LDR R0,[R7, #+0] \ 000001B4 6C1090E5 LDR R1,[R0, #+108] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 1200000A BEQ ??edchat_ghook_3 6789 { 6790 ed_struct->ed_contact->req_drawack=0; \ 000001C0 6C6080E5 STR R6,[R0, #+108] 6791 DrawAck(data); \ 000001C4 0500A0E1 MOV R0,R5 \ 000001C8 ........ BL DrawAck \ 000001CC B5FFFFEA B ??edchat_ghook_1 6792 } 6793 } 6794 } 6795 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001D0 0C0059E3 CMP R9,#+12 \ 000001D4 0C00001A BNE ??edchat_ghook_3 6796 { 6797 j=EDIT_GetFocus(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC 820100EF SWI +386 \ 000001E0 0040A0E1 MOV R4,R0 6798 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 6799 EDIT_SetCursorPos(data,1); \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 D40100EF SWI +468 6800 } 6801 } \ ??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 6802 6803 6804 6805 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 0B0000006400 DC32 11, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 \ In segment DATA_C, align 4, align-sorted \ ??sk_1: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 6806 { 6807 1, 6808 edchat_onkey, 6809 edchat_ghook, 6810 (void *)edchat_locret, 6811 0, 6812 &menu_skt, 6813 {0,NULL,NULL,NULL}, 6814 FONT_SMALL, 6815 100, 6816 101, 6817 0, 6818 // 0x00000001 - Выровнять по правому краю 6819 // 0x00000002 - Выровнять по центру 6820 // 0x00000004 - Инверсия знакомест 6821 // 0x00000008 - UnderLine 6822 // 0x00000020 - Не переносить слова 6823 // 0x00000200 - bold 6824 0, 6825 // 0x00000002 - ReadOnly 6826 // 0x00000004 - Не двигается курсор 6827 // 0x40000000 - Поменять местами софт-кнопки 6828 0x40000000 6829 }; 6830 \ In segment CODE, align 4, keep-with-next 6831 void CreateEditChat(CLIST *t) 6832 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6833 6834 void *ma=malloc_adr(); 6835 void *eq; 6836 EDITCONTROL ec; 6837 EDITC_OPTIONS ec_options; 6838 int color, font, type; 6839 int zc; 6840 6841 LOGQ *lp; 6842 int edchat_toitem; 6843 // edcontact=t; 6844 6845 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 2C649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 6846 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 6847 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable137 ;; 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] 6848 6849 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 6850 6851 /* hist = malloc(256); 6852 if(!GetHistory(hist, 256, t->uin)) 6853 { 6854 ascii2ws(ews,hist); 6855 PrepareEditControl(&ec); 6856 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 6857 } 6858 mfree(hist); 6859 6860 AddEditControlToEditQend(eq,&ec,ma); */ 6861 lp=t->log; \ 0000003C 709094E5 LDR R9,[R4, #+112] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8200000A BEQ ??CreateEditChat_1 6862 6863 while(lp) 6864 { 6865 font = ED_H_FONT_SIZE; 6866 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C 040099E5 LDR R0,[R9, #+4] \ 00000050 78A197E5 LDR R10,[R7, #+376] \ 00000054 5CB197E5 LDR R11,[R7, #+348] \ 00000058 030010E2 ANDS R0,R0,#0x3 \ 0000005C 0300000A BEQ ??CreateEditChat_3 6867 { 6868 if (zc==1) \ 00000060 010050E3 CMP R0,#+1 \ 00000064 1A00001A BNE ??CreateEditChat_4 6869 color=ACK_COLOR; //Зеленый \ 00000068 8CB197E5 LDR R11,[R7, #+396] \ 0000006C 180000EA B ??CreateEditChat_4 6870 else 6871 color=I_COLOR; 6872 } 6873 else 6874 { 6875 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000070 080099E5 LDR R0,[R9, #+8] \ 00000074 010070E3 CMN R0,#+1 \ 00000078 1400001A BNE ??CreateEditChat_5 6876 { 6877 type = lp->type&0x0F; \ 0000007C 0C0099E5 LDR R0,[R9, #+12] \ 00000080 0F1000E2 AND R1,R0,#0xF 6878 if(lp->type&0x10) \ 00000084 100010E3 TST R0,#0x10 \ 00000088 0900000A BEQ ??CreateEditChat_6 6879 { 6880 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 0000008C 010051E3 CMP R1,#+1 \ 00000090 68B19705 LDREQ R11,[R7, #+360] \ 00000094 0400000A BEQ ??CreateEditChat_7 \ 00000098 030051E3 CMP R1,#+3 \ 0000009C 70B19705 LDREQ R11,[R7, #+368] \ 000000A0 88A19705 LDREQ R10,[R7, #+392] \ 000000A4 0A00000A BEQ ??CreateEditChat_4 \ 000000A8 6CB197E5 LDR R11,[R7, #+364] \ ??CreateEditChat_7: \ 000000AC 84A197E5 LDR R10,[R7, #+388] \ 000000B0 070000EA B ??CreateEditChat_4 6881 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 6882 } 6883 else 6884 { 6885 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 60B19715 LDRNE R11,[R7, #+352] \ 000000C4 7CA19705 LDREQ R10,[R7, #+380] \ 000000C8 64B19705 LDREQ R11,[R7, #+356] \ 000000CC 000000EA B ??CreateEditChat_4 6886 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 6887 } 6888 } 6889 else 6890 color=UNACK_COLOR; //????? \ ??CreateEditChat_5: \ 000000D0 90B197E5 LDR R11,[R7, #+400] 6891 } 6892 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000D4 10008DE2 ADD R0,SP,#+16 \ 000000D8 640100EF SWI +356 6893 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 6894 { 6895 ascii2ws(ews,lp->hdr); \ 000000EC 200297E5 LDR R0,[R7, #+544] \ 000000F0 101089E2 ADD R1,R9,#+16 \ 000000F4 ........ _BLF ascii2ws,??ascii2ws??rA 6896 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000000F8 203297E5 LDR R3,[R7, #+544] \ 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 6897 } 6898 else 6899 { 6900 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_8: \ 00000110 0000A0E3 MOV R0,#+0 \ 00000114 01002DE9 PUSH {R0} \ 00000118 203297E5 LDR R3,[R7, #+544] \ 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 6901 } 6902 PrepareEditCOptions(&ec_options); \ 00000130 0D00A0E1 MOV R0,SP \ 00000134 C80100EF SWI +456 6903 SetPenColorToEditCOptions(&ec_options,color); \ 00000138 0B10A0E1 MOV R1,R11 \ 0000013C 0D00A0E1 MOV R0,SP \ 00000140 CC0100EF SWI +460 6904 SetFontToEditCOptions(&ec_options,font); \ 00000144 0A10A0E1 MOV R1,R10 \ 00000148 0D00A0E1 MOV R0,SP \ 0000014C CA0100EF SWI +458 6905 CopyOptionsToEditControl(&ec,&ec_options); \ 00000150 0D10A0E1 MOV R1,SP \ 00000154 10008DE2 ADD R0,SP,#+16 \ 00000158 CE0100EF SWI +462 6906 AddEditControlToEditQend(eq,&ec,ma); \ 0000015C 0520A0E1 MOV R2,R5 \ 00000160 10108DE2 ADD R1,SP,#+16 \ 00000164 0800A0E1 MOV R0,R8 \ 00000168 660100EF SWI +358 6907 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 6908 { 6909 ParseAnswer(ews,lp->text); \ 0000017C 200297E5 LDR R0,[R7, #+544] \ 00000180 601089E2 ADD R1,R9,#+96 \ 00000184 ........ BL ParseAnswer \ 00000188 050000EA B ??CreateEditChat_11 6910 } 6911 else 6912 { 6913 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_10: \ 0000018C 100010E3 TST R0,#0x10 \ 00000190 70219715 LDRNE R2,[R7, #+368] \ 00000194 200297E5 LDR R0,[R7, #+544] \ 00000198 64219705 LDREQ R2,[R7, #+356] \ 0000019C 601089E2 ADD R1,R9,#+96 \ 000001A0 ........ BL ParseXStatusText 6914 } 6915 PrepareEditControl(&ec); \ ??CreateEditChat_11: \ 000001A4 10008DE2 ADD R0,SP,#+16 \ 000001A8 640100EF SWI +356 6916 ConstructEditControl(&ec, 6917 ECT_NORMAL_TEXT, 6918 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 6919 ews,ews->wsbody[0]); \ 000001AC 203297E5 LDR R3,[R7, #+544] \ 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 6920 PrepareEditCOptions(&ec_options); \ 000001D8 04008DE2 ADD R0,SP,#+4 \ 000001DC C80100EF SWI +456 6921 //#ifdef M75 6922 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 6923 { 6924 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 000001F4 100010E3 TST R0,#0x10 \ 000001F8 74119705 LDREQ R1,[R7, #+372] \ 000001FC 80119715 LDRNE R1,[R7, #+384] \ 00000200 080000EA B ??CreateEditChat_13 6925 } 6926 else 6927 { 6928 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_12: \ 00000204 100010E3 TST R0,#0x10 \ 00000208 70119715 LDRNE R1,[R7, #+368] \ 0000020C 0D00A0E1 MOV R0,SP \ 00000210 64119705 LDREQ R1,[R7, #+356] \ 00000214 CC0100EF SWI +460 6929 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 88119715 LDRNE R1,[R7, #+392] \ 00000224 7C119705 LDREQ R1,[R7, #+380] \ ??CreateEditChat_13: \ 00000228 0D00A0E1 MOV R0,SP \ 0000022C CA0100EF SWI +458 6930 } 6931 //#else 6932 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 6933 //#endif 6934 CopyOptionsToEditControl(&ec,&ec_options); \ 00000230 0D10A0E1 MOV R1,SP \ 00000234 10008DE2 ADD R0,SP,#+16 \ 00000238 CE0100EF SWI +462 6935 AddEditControlToEditQend(eq,&ec,ma); \ 0000023C 0520A0E1 MOV R2,R5 \ 00000240 10108DE2 ADD R1,SP,#+16 \ 00000244 0800A0E1 MOV R0,R8 \ 00000248 660100EF SWI +358 6936 lp=lp->next; \ 0000024C 009099E5 LDR R9,[R9, #+0] 6937 } \ 00000250 000059E3 CMP R9,#+0 \ 00000254 7CFFFF1A BNE ??CreateEditChat_2 6938 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 00000258 600094E5 LDR R0,[R4, #+96] 6939 total_unread2=total_unread2-t->unread_msg; 6940 t->unread_msg=0; \ 0000025C 0090A0E3 MOV R9,#+0 \ 00000260 000050E3 CMP R0,#+0 \ 00000264 A4029715 LDRNE R0,[R7, #+676] \ 00000268 01004012 SUBNE R0,R0,#+1 \ 0000026C A4028715 STRNE R0,[R7, #+676] \ 00000270 080297E5 LDR R0,[R7, #+520] \ 00000274 641094E5 LDR R1,[R4, #+100] \ 00000278 010040E0 SUB R0,R0,R1 \ 0000027C 080287E5 STR R0,[R7, #+520] \ 00000280 649084E5 STR R9,[R4, #+100] 6941 t->isunread=0; \ 00000284 609084E5 STR R9,[R4, #+96] 6942 ChangeContactPos(t); \ 00000288 0400A0E1 MOV R0,R4 \ 0000028C ........ _BLF ChangeContactPos,??ChangeContactPos??rA 6943 wsprintf(ews, "-------"); \ 00000290 200297E5 LDR R0,[R7, #+544] \ 00000294 4C1086E2 ADD R1,R6,#+76 \ 00000298 240100EF SWI +292 6944 PrepareEditControl(&ec); \ 0000029C 10008DE2 ADD R0,SP,#+16 \ 000002A0 640100EF SWI +356 6945 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002A4 203297E5 LDR R3,[R7, #+544] \ 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 6946 PrepareEditCOptions(&ec_options); \ 000002C4 04008DE2 ADD R0,SP,#+4 \ 000002C8 C80100EF SWI +456 6947 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000002CC 741197E5 LDR R1,[R7, #+372] \ 000002D0 04008DE2 ADD R0,SP,#+4 \ 000002D4 CA0100EF SWI +458 6948 CopyOptionsToEditControl(&ec,&ec_options); \ 000002D8 04108DE2 ADD R1,SP,#+4 \ 000002DC 14008DE2 ADD R0,SP,#+20 \ 000002E0 CE0100EF SWI +462 6949 AddEditControlToEditQend(eq,&ec,ma); \ 000002E4 0520A0E1 MOV R2,R5 \ 000002E8 14108DE2 ADD R1,SP,#+20 \ 000002EC 0800A0E1 MOV R0,R8 \ 000002F0 660100EF SWI +358 6950 6951 if (t->answer) ParseAnswer(ews,t->answer); \ 000002F4 741094E5 LDR R1,[R4, #+116] \ 000002F8 04D08DE2 ADD SP,SP,#+4 \ 000002FC 000051E3 CMP R1,#+0 \ 00000300 0200000A BEQ ??CreateEditChat_14 \ 00000304 200297E5 LDR R0,[R7, #+544] \ 00000308 ........ BL ParseAnswer \ 0000030C 020000EA B ??CreateEditChat_15 6952 else CutWSTR(ews,0); \ ??CreateEditChat_14: \ 00000310 200297E5 LDR R0,[R7, #+544] \ 00000314 0010A0E3 MOV R1,#+0 \ 00000318 260100EF SWI +294 6953 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 0000031C 10008DE2 ADD R0,SP,#+16 \ 00000320 640100EF SWI +356 6954 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); \ 00000324 380197E5 LDR R0,[R7, #+312] \ 00000328 0310A0E3 MOV R1,#+3 \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 400EA0E3 MOV R0,#+1024 \ 00000334 01002DE9 PUSH {R0} \ 00000338 203297E5 LDR R3,[R7, #+544] \ 0000033C 402DA013 MOVNE R2,#+4096 \ 00000340 0020A003 MOVEQ R2,#+0 \ 00000344 14008DE2 ADD R0,SP,#+20 \ 00000348 650100EF SWI +357 6955 6956 PrepareEditCOptions(&ec_options); \ 0000034C 04008DE2 ADD R0,SP,#+4 \ 00000350 C80100EF SWI +456 6957 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000354 741197E5 LDR R1,[R7, #+372] \ 00000358 04008DE2 ADD R0,SP,#+4 \ 0000035C CA0100EF SWI +458 6958 CopyOptionsToEditControl(&ec,&ec_options); \ 00000360 04108DE2 ADD R1,SP,#+4 \ 00000364 14008DE2 ADD R0,SP,#+20 \ 00000368 CE0100EF SWI +462 6959 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 6960 6961 if (t->req_xtext) \ 00000380 8C0094E5 LDR R0,[R4, #+140] \ 00000384 04D08DE2 ADD SP,SP,#+4 \ 00000388 000050E3 CMP R0,#+0 \ 0000038C 0400000A BEQ ??CreateEditChat_16 6962 { 6963 FreeXText(t); \ 00000390 0400A0E1 MOV R0,R4 \ 00000394 ........ _BLF FreeXText,??FreeXText??rA 6964 t->req_xtext=0; \ 00000398 8C9084E5 STR R9,[R4, #+140] 6965 RequestXText(t->uin); \ 0000039C 0C0094E5 LDR R0,[R4, #+12] \ 000003A0 ........ BL RequestXText 6966 } 6967 6968 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_16: \ 000003A4 1400A0E3 MOV R0,#+20 \ 000003A8 140000EF SWI +20 \ 000003AC 0050A0E1 MOV R5,R0 6969 ed_struct->ed_contact=t; \ 000003B0 004085E5 STR R4,[R5, #+0] 6970 ed_struct->ed_answer=edchat_toitem; \ 000003B4 08A085E5 STR R10,[R5, #+8] 6971 ed_struct->requested_decrement_total_unread=0; \ 000003B8 0C9085E5 STR R9,[R5, #+12] 6972 t->req_add=0; \ 000003BC 689084E5 STR R9,[R4, #+104] 6973 t->last_log=NULL; \ 000003C0 789084E5 STR R9,[R4, #+120] 6974 6975 // int scr_w=ScreenW(); 6976 // int scr_h=ScreenH(); 6977 // int head_h=HeaderH(); 6978 6979 patch_header(&edchat_hdr); \ 000003C4 389086E5 STR R9,[R6, #+56] \ 000003C8 888100EF SWI +33160 \ 000003CC 010040E2 SUB R0,R0,#+1 \ 000003D0 BC03C6E1 STRH R0,[R6, #+60] \ 000003D4 8A8100EF SWI +33162 \ 000003D8 010040E2 SUB R0,R0,#+1 \ 000003DC BE03C6E1 STRH R0,[R6, #+62] 6980 patch_input(&edchat_desc); \ 000003E0 B891C6E1 STRH R9,[R6, #+24] \ 000003E4 8A8100EF SWI +33162 \ 000003E8 010080E2 ADD R0,R0,#+1 \ 000003EC BA01C6E1 STRH R0,[R6, #+26] \ 000003F0 888100EF SWI +33160 \ 000003F4 010040E2 SUB R0,R0,#+1 \ 000003F8 BC01C6E1 STRH R0,[R6, #+28] \ 000003FC 898100EF SWI +33161 \ 00000400 0040A0E1 MOV R4,R0 \ 00000404 8B8100EF SWI +33163 \ 00000408 000044E0 SUB R0,R4,R0 \ 0000040C 010040E2 SUB R0,R0,#+1 \ 00000410 BE01C6E1 STRH R0,[R6, #+30] 6981 // edchat_desc.font=ED_FONT_SIZE; 6982 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000414 20002DE9 PUSH {R5} \ 00000418 0130A0E3 MOV R3,#+1 \ 0000041C 0820A0E1 MOV R2,R8 \ 00000420 381086E2 ADD R1,R6,#+56 \ 00000424 0600A0E1 MOV R0,R6 \ 00000428 670100EF SWI +359 \ 0000042C B40287E5 STR R0,[R7, #+692] 6983 } \ 00000430 40D08DE2 ADD SP,SP,#+64 \ 00000434 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000438 ........ DC32 edchat_desc 6984 6985 //----------------------------------------------------------------------------- 6986 #define EC_MNU_MAX 8 6987 \ In segment CODE, align 4, keep-with-next 6988 void Quote(GUI *data) 6989 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 6990 int q_n; 6991 EDITCONTROL ec, ec_hdr; 6992 EDITCONTROL ec_ed; 6993 WSHDR *ed_ws; 6994 WSHDR *ws; 6995 6996 EDCHAT_STRUCT *ed_struct; 6997 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 6998 6999 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7000 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 7001 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 7002 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 7003 7004 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 7005 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 7006 { 7007 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7008 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 7009 } 7010 else 7011 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7012 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 7013 { 7014 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 7015 } 7016 else 7017 { 7018 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7019 } 7020 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7021 do 7022 { 7023 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7024 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 7025 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7026 } 7027 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 7028 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7029 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7030 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 7031 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7032 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7033 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7034 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7035 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 7036 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 7037 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 7038 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 7039 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 7040 7041 \ In segment CODE, align 4, keep-with-next 7042 void GetShortInfo(GUI *data) 7043 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 7044 EDCHAT_STRUCT *ed_struct; 7045 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7046 7047 TPKT *p; 7048 CLIST *t; 7049 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 2000000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable146 ;; S_ICONS + 640 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1C00001A BNE ??GetShortInfo_0 7050 { 7051 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 7052 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 7053 p->pkt.type=T_REQINFOSHORT; 7054 p->pkt.data_len=0; 7055 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,??DataTable145 ;; `?ed_chatgui); \ 00000074 040094E5 LDR R0,[R4, #+4] \ 00000078 ........ BL AddMsgToChat 7057 RecountMenu(t,1); \ 0000007C 0110A0E3 MOV R1,#+1 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 ........ BL RecountMenu 7058 SUBPROC((void *)SendAnswer,0,p); \ 00000088 ........ LDR R0,??DataTable147 ;; SendAnswer \ 0000008C 0620A0E1 MOV R2,R6 \ 00000090 0010A0E3 MOV R1,#+0 \ 00000094 710100EF SWI +369 \ 00000098 08D08DE2 ADD SP,SP,#+8 7059 } 7060 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 0000009C 0100A0E3 MOV R0,#+1 \ 000000A0 3B0100EF SWI +315 7061 } \ 000000A4 7080BDE8 POP {R4-R6,PC} ;; return 7062 7063 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 7064 void AddCurContact(GUI *data) 7065 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 7066 EDCHAT_STRUCT *ed_struct; 7067 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7068 7069 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,??DataTable146 ;; S_ICONS + 640 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 7070 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 7071 } \ 00000030 0080BDE8 POP {PC} ;; return 7072 \ In segment CODE, align 4, keep-with-next 7073 void SendAuthReq(GUI *data) 7074 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 7075 EDCHAT_STRUCT *ed_struct; 7076 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 7077 7078 TPKT *p; 7079 CLIST *t; 7080 int l; 7081 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,??DataTable146 ;; S_ICONS + 640 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 7083 { 7084 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 7085 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 7086 p->pkt.type=T_AUTHREQ; 7087 p->pkt.data_len=l; 7088 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 7089 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable143 ;; `?ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 7091 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 7092 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable147 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 7093 } 7094 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 7095 } \ 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,??DataTable146 ;; S_ICONS + 640 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_0 7107 { 7108 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 7109 p->pkt.uin=t->uin; \ 00000054 0C0096E5 LDR R0,[R6, #+12] 7110 p->pkt.type=T_AUTHGRANT; 7111 p->pkt.data_len=l; 7112 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 7113 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 1F3085E2 ADD R3,R5,#+31 \ 00000080 082087E2 ADD R2,R7,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 000060E2 RSB R0,R0,#+0 \ 0000008C 01002DE9 PUSH {R0} \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ BL AddStringToLog 7114 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 7115 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0600A0E1 MOV R0,R6 \ 000000A8 ........ BL RecountMenu 7116 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable147 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 7117 } 7118 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 7119 } \ 000000C8 FF81BDE8 POP {R0-R8,PC} ;; return 7120 \ In segment CODE, align 4, keep-with-next 7121 void OpenLogfile(GUI *data) 7122 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 7123 EDCHAT_STRUCT *ed_struct; 7124 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7125 7126 CLIST *t; 7127 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0050A0E1 MOV R5,R0 7128 if ((t=ed_struct->ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1A00000A BEQ ??OpenLogfile_0 7129 { 7130 #ifdef EVILFOX 7131 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 7132 #else 7133 #ifdef UIN_WRITE 7134 if (HISTORY_TYPE) \ 00000024 ........ LDR R12,??DataTable149 ;; S_ICONS \ 00000028 0C2090E5 LDR R2,[R0, #+12] \ 0000002C 44319CE5 LDR R3,[R12, #+324] \ 00000030 6C109FE5 LDR R1,??OpenLogfile_1 ;; `?` \ 00000034 04002DE9 PUSH {R2} \ 00000038 C440A0E3 MOV R4,#+196 \ 0000003C 904E84E3 ORR R4,R4,#0x900 \ 00000040 000053E3 CMP R3,#+0 \ 00000044 0700000A BEQ ??OpenLogfile_2 7135 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); \ 00000048 140080E2 ADD R0,R0,#+20 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 1C319CE5 LDR R3,[R12, #+284] \ 00000054 0C2084E0 ADD R2,R4,R12 \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 240100EF SWI +292 \ 00000060 08D08DE2 ADD SP,SP,#+8 \ 00000064 050000EA B ??OpenLogfile_3 7136 else 7137 wsprintf(ws,"%s\\%s(%d).txt",HIST_PATH,t->name, t->uin); \ ??OpenLogfile_2: \ 00000068 143080E2 ADD R3,R0,#+20 \ 0000006C 0C2084E0 ADD R2,R4,R12 \ 00000070 141081E2 ADD R1,R1,#+20 \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 240100EF SWI +292 \ 0000007C 04D08DE2 ADD SP,SP,#+4 7138 #else 7139 if (HISTORY_TYPE) 7140 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); 7141 else 7142 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); 7143 #endif 7144 #endif 7145 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 00000080 0020A0E3 MOV R2,#+0 \ 00000084 0010A0E3 MOV R1,#+0 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 940000EF SWI +148 7146 } 7147 FreeWS(ws); \ ??OpenLogfile_0: \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 290100EF SWI +297 7148 GeneralFuncF1(1); \ 00000098 0100A0E3 MOV R0,#+1 \ 0000009C 3B0100EF SWI +315 7149 } \ 000000A0 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 000000A4 ........ DC32 `?` 7150 \ In segment CODE, align 4, keep-with-next 7151 void ClearLog(GUI *data/*,void *dummy*/) 7152 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 7153 EDITCONTROL ec; 7154 EDCHAT_STRUCT *ed_struct; 7155 WSHDR *ws; 7156 CLIST *t; 7157 7158 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7159 7160 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 7161 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 7162 { 7163 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 7164 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 7165 7166 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 7167 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 7168 7169 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 7170 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 7171 } 7172 else 7173 { 7174 7175 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 7176 { 7177 if (t->log) \ 00000074 700095E5 LDR R0,[R5, #+112] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 7178 { 7179 FreeLOGQ(&t->log); \ 00000084 700085E2 ADD R0,R5,#+112 \ 00000088 ........ BL FreeLOGQ 7180 t->msg_count=0; \ 0000008C 806085E5 STR R6,[R5, #+128] 7181 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 7182 { 7183 while(ed_struct->ed_answer!=2) 7184 { 7185 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 7186 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 7187 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 7188 } 7189 } 7190 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 7C6085E5 STR R6,[R5, #+124] 7191 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 7192 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 7193 } 7194 } 7195 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 7196 \ In segment CODE, align 4, keep-with-next 7197 void ecmenu_ghook(void *data, int cmd) 7198 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 7199 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 7200 { 7201 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 7202 } 7203 } \ 00000010 0080BDE8 POP {PC} ;; return 7204 \ In segment DATA_C, align 4, align-sorted 7205 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ gipc: \ 00000074 DS8 12 \ 00000080 REQUIRE `?` \ game_gipc: \ 00000080 DS8 12 \ 0000008C REQUIRE `?` \ tmr_gipc: \ 0000008C DS8 12 \ 00000098 REQUIRE `?` \ color_choose: \ 00000098 DS8 4 \ 0000009C REQUIRE `?` \ Vibra_cc: \ 0000009C DS8 4 \ 000000A0 REQUIRE `?` \ Ping_X: \ 000000A0 DS8 4 \ 000000A4 REQUIRE `?` \ Ping_Y: \ 000000A4 DS8 4 \ 000000A8 REQUIRE `?` \ unread_X: \ 000000A8 DS8 4 \ 000000AC REQUIRE `?` \ unread_Y: \ 000000AC DS8 4 \ 000000B0 REQUIRE `?` \ show_xstatus: \ 000000B0 DS8 4 \ 000000B4 REQUIRE `?` \ isLogOffline: \ 000000B4 DS8 4 \ 000000B8 REQUIRE `?` \ isLogOnline: \ 000000B8 DS8 4 \ 000000BC REQUIRE `?` \ SORT_CLIST: \ 000000BC DS8 4 \ 000000C0 REQUIRE `?` \ IsShowLoopback: \ 000000C0 DS8 4 \ 000000C4 REQUIRE `?` \ fonto: \ 000000C4 DS8 4 \ 000000C8 REQUIRE `?` \ spaco1: \ 000000C8 DS8 4 \ 000000CC REQUIRE `?` \ spaco2: \ 000000CC DS8 4 \ 000000D0 REQUIRE `?` \ AUTO_ENGADE: \ 000000D0 DS8 4 \ 000000D4 REQUIRE `?` \ Is_Unread_On: \ 000000D4 DS8 4 \ 000000D8 REQUIRE `?` \ Pause_Time: \ 000000D8 DS8 4 \ 000000DC REQUIRE `?` \ auto_x: \ 000000DC DS8 4 \ 000000E0 REQUIRE `?` \ auto_y: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ showAwayIdle: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ onlineTime_x: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ onlineTime_y: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ Auto_Status: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ time_zone: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ TIME_OR_MSG: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ ping_time_config: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ msg_d_x: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ msg_d_y: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ main_lenght: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ use_cutter: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ Reset_timer: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ LongRightAction: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ LongLeftAction: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ UIN: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ VIBR_ON_CONNECT: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ SHOW_ACTIVE: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ VIBR_TYPE: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ DEVELOP_IF: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ LOG_ALL: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ LOG_STATCH: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ FIRST_LETTER: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ show_send_info: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ ActionResh: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ HISTORY_TYPE: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ vibraPower: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ IDLEICON_X: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ IDLEICON_Y: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ IDLEICON_XX: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ IDLEICON_YX: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ I_COLOR: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ TO_COLOR: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ X_COLOR: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ O_I_COLOR: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ O_TO_COLOR: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ O_X_COLOR: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ ED_FONT_SIZE: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ ED_H_FONT_SIZE: \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ ED_X_FONT_SIZE: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ O_ED_FONT_SIZE: \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ O_ED_H_FONT_SIZE: \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ O_ED_X_FONT_SIZE: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ ACK_COLOR: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ UNACK_COLOR: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ ENA_AUTO_XTXT: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ NOT_LOG_SAME_XTXT: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ LOG_XTXT: \ 0000019C DS8 4 \ 000001A0 REQUIRE `?` \ HISTORY_BUFFER: \ 000001A0 DS8 4 \ 000001A4 REQUIRE `?` \ ILL_DISP_RECV: \ 000001A4 DS8 4 \ 000001A8 REQUIRE `?` \ ILL_KEYS_RECV: \ 000001A8 DS8 4 \ 000001AC REQUIRE `?` \ ILL_RECV_TMR: \ 000001AC DS8 4 \ 000001B0 REQUIRE `?` \ ILL_DISP_SEND: \ 000001B0 DS8 4 \ 000001B4 REQUIRE `?` \ ILL_KEYS_SEND: \ 000001B4 DS8 4 \ 000001B8 REQUIRE `?` \ ILL_SEND_TMR: \ 000001B8 DS8 4 \ 000001BC REQUIRE `?` \ ILL_SEND_FADE: \ 000001BC DS8 4 \ 000001C0 REQUIRE `?` \ ILL_RECV_FADE: \ 000001C0 DS8 4 \ 000001C4 REQUIRE `?` \ ILL_OFF_FADE: \ 000001C4 DS8 4 \ 000001C8 REQUIRE `?` \ extended_sounds: \ 000001C8 DS8 4 \ 000001CC REQUIRE `?` \ sndVolume: \ 000001CC DS8 4 \ 000001D0 REQUIRE `?` \ NATICQ_PORT: \ 000001D0 DS8 4 \ 000001D4 REQUIRE `?` \ RECONNECT_TIME: \ 000001D4 DS8 4 \ 000001D8 REQUIRE `?` \ disk: \ 000001D8 DS8 4 \ 000001DC REQUIRE `?` \ main_d: \ 000001DC DS8 4 \ 000001E0 REQUIRE `?` \ align: \ 000001E0 DS8 4 \ 000001E4 REQUIRE `?` \ canvasdata: \ 000001E4 DS8 4 \ 000001E8 REQUIRE `?` \ paused_height: \ 000001E8 DS8 4 \ 000001EC REQUIRE `?` \ uins: \ 000001EC DS8 4 \ 000001F0 REQUIRE `?` \ saver_on: \ 000001F0 DS8 4 \ 000001F4 REQUIRE `?` \ Is_PING_On: \ 000001F4 DS8 4 \ 000001F8 REQUIRE `?` \ Is_SMARTCPU_On: \ 000001F8 DS8 4 \ 000001FC REQUIRE `?` \ Is_INC_On: \ 000001FC DS8 4 \ 00000200 REQUIRE `?` \ Is_ILU_On: \ 00000200 DS8 4 \ 00000204 REQUIRE `?` \ Is_Double_Vibra_On: \ 00000204 DS8 4 \ 00000208 REQUIRE `?` \ total_unread2: \ 00000208 DS8 4 \ 0000020C REQUIRE `?` \ maincsm_id: \ 0000020C DS8 4 \ 00000210 REQUIRE `?` \ maingui_id: \ 00000210 DS8 4 \ 00000214 REQUIRE `?` \ SENDMSGCOUNT: \ 00000214 DS8 4 \ 00000218 REQUIRE `?` \ IsActiveUp: \ 00000218 DS8 4 \ 0000021C REQUIRE `?` \ Is_Id3tag_Enabled: \ 0000021C DS8 4 \ 00000220 REQUIRE `?` \ ews: \ 00000220 DS8 4 \ 00000224 REQUIRE `?` \ msg_away_timer: \ 00000224 DS8 4 \ 00000228 REQUIRE `?` \ away_m: \ 00000228 DS8 4 \ 0000022C REQUIRE `?` \ status_rem: \ 0000022C DS8 4 \ 00000230 REQUIRE `?` \ change_back_status: \ 00000230 DS8 4 \ 00000234 REQUIRE `?` \ Show_XTX: \ 00000234 DS8 4 \ 00000238 REQUIRE `?` \ Is_UPTIME_On: \ 00000238 DS8 4 \ 0000023C REQUIRE `?` \ xstatus_old: \ 0000023C DS8 4 \ 00000240 REQUIRE `?` \ minimum_xstatus: \ 00000240 DS8 4 \ 00000244 REQUIRE `?` \ maximum: \ 00000244 DS8 4 \ 00000248 REQUIRE `?` \ tracktimer: \ 00000248 DS8 4 \ 0000024C REQUIRE `?` \ input_awaymsg_id: \ 0000024C DS8 4 \ 00000250 REQUIRE `?` \ silenthide: \ 00000250 DS8 4 \ 00000254 REQUIRE `?` \ disautorecconect: \ 00000254 DS8 4 \ 00000258 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000258 DS8 4 \ 0000025C REQUIRE `?` \ Is_Sounds_Enabled: \ 0000025C DS8 4 \ 00000260 REQUIRE `?` \ Is_Show_Offline: \ 00000260 DS8 4 \ 00000264 REQUIRE `?` \ Is_Show_Groups: \ 00000264 DS8 4 \ 00000268 REQUIRE `?` \ CurrentStatus: \ 00000268 DS8 4 \ 0000026C REQUIRE `?` \ CurrentPrivateStatus: \ 0000026C DS8 4 \ 00000270 REQUIRE `?` \ vibra_count: \ 00000270 DS8 4 \ 00000274 REQUIRE `?` \ templates_chars: \ 00000274 DS8 4 \ 00000278 REQUIRE `?` \ templates_lines: \ 00000278 DS8 4 \ 0000027C REQUIRE `?` \ RXstate: \ 0000027C DS8 4 \ 00000280 REQUIRE `?` \ connect_state: \ 00000280 DS8 4 \ 00000284 REQUIRE `?` \ sock: \ 00000284 DS8 4 \ 00000288 REQUIRE `?` \ TOTALRECEIVED: \ 00000288 DS8 4 \ 0000028C REQUIRE `?` \ TOTALSENDED: \ 0000028C DS8 4 \ 00000290 REQUIRE `?` \ ALLTOTALRECEIVED: \ 00000290 DS8 4 \ 00000294 REQUIRE `?` \ ALLTOTALSENDED: \ 00000294 DS8 4 \ 00000298 REQUIRE `?` \ sendq_l: \ 00000298 DS8 4 \ 0000029C REQUIRE `?` \ sendq_p: \ 0000029C DS8 4 \ 000002A0 REQUIRE `?` \ is_gprs_online: \ 000002A0 DS8 4 \ 000002A4 REQUIRE `?` \ total_unread: \ 000002A4 DS8 4 \ 000002A8 REQUIRE `?` \ cltop: \ 000002A8 DS8 4 \ 000002AC REQUIRE `?` \ GROUP_CACHE: \ 000002AC DS8 4 \ 000002B0 REQUIRE `?` \ contactlist_menu_id: \ 000002B0 DS8 4 \ 000002B4 REQUIRE `?` \ edchat_id: \ 000002B4 DS8 4 \ 000002B8 REQUIRE `?` \ 000002B8 DS8 4 \ 000002BC REQUIRE `?` \ tenseconds_to_ping: \ 000002BC DS8 4 \ 000002C0 REQUIRE `?` \ kopa_online: \ 000002C0 DS8 4 \ 000002C4 REQUIRE `?` \ kopa_kontaktu: \ 000002C4 DS8 4 \ 000002C8 REQUIRE `?` \ gui_methods2: \ 000002C8 DS8 96 \ 00000328 REQUIRE `?` \ old_redraw: \ 00000328 DS8 4 \ 0000032C REQUIRE `?` \ 0000032C DS8 4 \ 00000330 REQUIRE `?` \ 00000330 DS8 4 \ 00000334 REQUIRE `?` \ DNR_ID: \ 00000334 DS8 4 \ 00000338 REQUIRE `?` \ DNR_TRIES: \ 00000338 DS8 4 \ 0000033C REQUIRE `?` \ host_counter: \ 0000033C DS8 4 \ 00000340 REQUIRE `?` \ ping_time: \ 00000340 DS8 4 \ 00000344 REQUIRE `?` \ NEW_MSG: \ 00000344 DS8 4 \ 00000348 REQUIRE `?` \ time_to_stop_t9: \ 00000348 DS8 4 \ 0000034C REQUIRE `?` \ comanda: \ 0000034C DS8 4 \ 00000350 REQUIRE `?` \ INC_show: \ 00000350 DS8 4 \ 00000354 REQUIRE `?` \ font: \ 00000354 DS8 4 \ 00000358 REQUIRE `?` \ old_ed_redraw: \ 00000358 DS8 4 \ 0000035C REQUIRE `?` \ 0000035C DS8 64 \ 0000039C REQUIRE `?` \ fontColor: \ 0000039C DS8 1 \ 0000039D REQUIRE `?` \ bgrColor: \ 0000039D DS8 1 \ 0000039E REQUIRE `?` \ 0000039E DS8 2 \ awayMsg: \ 000003A0 DS8 64 \ 000003E0 REQUIRE `?` \ elf_path: \ 000003E0 DS8 256 \ 000004E0 REQUIRE `?` \ ContactT9Key: \ 000004E0 DS8 32 \ 00000500 REQUIRE `?` \ per_s: \ 00000500 DS8 3 \ 00000503 REQUIRE `?` \ 00000503 DS8 1 \ fontpath: \ 00000504 DS8 64 \ 00000544 REQUIRE `?` \ CsmAdr: \ 00000544 DS8 12 \ 00000550 REQUIRE `?` \ awayHelloMsg: \ 00000550 DS8 24 \ 00000568 REQUIRE `?` \ ignor_list: \ 00000568 DS8 256 \ 00000668 REQUIRE `?` \ playing: \ 00000668 DS8 16 \ 00000678 REQUIRE `?` \ PASS: \ 00000678 DS8 12 \ 00000684 REQUIRE `?` \ sndStartup: \ 00000684 DS8 64 \ 000006C4 REQUIRE `?` \ sndSrvMsg: \ 000006C4 DS8 64 \ 00000704 REQUIRE `?` \ sndGlobal: \ 00000704 DS8 64 \ 00000744 REQUIRE `?` \ sndGlobal2: \ 00000744 DS8 64 \ 00000784 REQUIRE `?` \ sndMsg: \ 00000784 DS8 64 \ 000007C4 REQUIRE `?` \ sndMsg2: \ 000007C4 DS8 64 \ 00000804 REQUIRE `?` \ sndMsgSent: \ 00000804 DS8 64 \ 00000844 REQUIRE `?` \ pingsnd: \ 00000844 DS8 64 \ 00000884 REQUIRE `?` \ SMILE_FILE: \ 00000884 DS8 64 \ 000008C4 REQUIRE `?` \ TEMPLATES_PATH: \ 000008C4 DS8 64 \ 00000904 REQUIRE `?` \ ICON_PATH: \ 00000904 DS8 64 \ 00000944 REQUIRE `?` \ SMILE_PATH: \ 00000944 DS8 64 \ 00000984 REQUIRE `?` \ XSTATUSES_PATH: \ 00000984 DS8 64 \ 000009C4 REQUIRE `?` \ HIST_PATH: \ 000009C4 DS8 64 \ 00000A04 REQUIRE `?` \ NATICQ_HOST: \ 00000A04 DS8 128 \ 00000A84 REQUIRE `?` \ talk_sound: \ 00000A84 DS8 128 \ 00000B04 REQUIRE `?` \ unread_msg_info: \ 00000B04 DS8 64 \ 00000B44 REQUIRE `?` \ mytmr3: \ 00000B44 DS8 16 \ 00000B54 REQUIRE `?` \ PINGO: \ 00000B54 DS8 256 \ 00000C54 REQUIRE `?` \ away_msg: \ 00000C54 DS8 264 \ 00000D5C REQUIRE `?` \ away_msg_time: \ 00000D5C DS8 64 \ 00000D9C REQUIRE `?` \ away_msg_time_dace: \ 00000D9C DS8 16 \ 00000DAC REQUIRE `?` \ tim_zone: \ 00000DAC DS8 16 \ 00000DBC REQUIRE `?` \ away_tmr: \ 00000DBC DS8 16 \ 00000DCC REQUIRE `?` \ mytmr: \ 00000DCC DS8 16 \ 00000DDC REQUIRE `?` \ mytmr2: \ 00000DDC DS8 16 \ 00000DEC REQUIRE `?` \ mytmr4: \ 00000DEC DS8 16 \ 00000DFC REQUIRE `?` \ tracktmr: \ 00000DFC DS8 16 \ 00000E0C REQUIRE `?` \ onlineTime: \ 00000E0C DS8 128 \ 00000E8C REQUIRE `?` \ logmsg: \ 00000E8C DS8 256 \ 00000F8C REQUIRE `?` \ tmr_illumination: \ 00000F8C DS8 16 \ 00000F9C REQUIRE `?` \ tmr_vibra: \ 00000F9C DS8 16 \ 00000FAC REQUIRE `?` \ reconnect_tmr: \ 00000FAC DS8 16 \ 00000FBC REQUIRE `?` \ tmr_active: \ 00000FBC DS8 16 \ 00000FCC REQUIRE `?` \ clm_hdr_text: \ 00000FCC DS8 64 \ 0000100C REQUIRE `?` \ clmenu_sk_r: \ 0000100C DS8 16 \ 0000101C REQUIRE `?` \ statusTmr: \ 0000101C DS8 16 \ 0000102C REQUIRE `?` \ status: \ 0000102C DS8 64 \ 0000106C REQUIRE `?` \ hostbuf2: \ 0000106C DS8 128 \ 000010EC REQUIRE `?` \ hostname: \ 000010EC DS8 128 \ 0000116C REQUIRE `?` \ I_UIN: \ 0000116C DS8 12 \ 00001178 REQUIRE `?` \ a_txt: \ 00001178 DS8 48 \ 000011A8 REQUIRE `?` \ s_txt: \ 000011A8 DS8 48 \ 000011D8 REQUIRE `?` \ d_txt: \ 000011D8 DS8 48 \ 00001208 REQUIRE `?` \ f_txt: \ 00001208 DS8 48 \ 00001238 REQUIRE `?` \ g_txt: \ 00001238 DS8 48 \ 00001268 REQUIRE `?` \ develop: \ 00001268 DS8 16 \ 00001278 REQUIRE `?` \ requests1: \ 00001278 DS8 24 \ 00001290 REQUIRE `?` \ requests2: \ 00001290 DS8 20 \ 000012A4 REQUIRE `?` \ requests3: \ 000012A4 DS8 24 \ 000012BC REQUIRE `?` \ requests4: \ 000012BC DS8 20 \ 000012D0 REQUIRE `?` \ requests6: \ 000012D0 DS8 24 \ 000012E8 REQUIRE `?` \ mod_info: \ 000012E8 DS8 264 \ 000013F0 REQUIRE `?` \ show_nick: \ 000013F0 DS8 32 \ 00001410 REQUIRE `?` \ MAINCSM: \ 00001410 DS8 60 \ 0000144C REQUIRE `?` 7219 { 7220 Quote, 7221 AddSmile, 7222 GetShortInfo, 7223 AddCurContact, 7224 SendAuthReq, 7225 SendAuthGrant, 7226 OpenLogfile, 7227 ClearLog, 7228 }; 7229 7230 char ecm_contactname[64]; \ ecm_contactname: \ 0000144C DS8 64 \ 0000148C 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 `?` 7231 \ In segment DATA_C, align 4, align-sorted 7232 static const HEADER_DESC ecmenu_HDR={0,0,NULL,NULL,NULL,(int)ecm_contactname,LGP_NULL}; \ ecmenu_HDR: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, ecm_contactname, 2147483647 \ ....FFFFFF7F \ 00000014 080000000000 DC32 8, 0H, ecmenu_ghook, 0H, menusoftkeys, menu_skt, 0, 0H \ 0000........ \ 00000000.... \ ............ \ 000000000000 \ 0000 \ 00000034 ............ DC32 ecmenu_ITEMS, ecmenu_HNDLS, 8 \ ....08000000 7233 7234 static const MENU_DESC ecmenu_STRUCT= 7235 { 7236 8,NULL,ecmenu_ghook,NULL, 7237 menusoftkeys, 7238 &menu_skt, 7239 0, 7240 NULL, 7241 ecmenu_ITEMS, 7242 ecmenu_HNDLS, 7243 EC_MNU_MAX 7244 }; 7245 \ In segment CODE, align 4, keep-with-next 7246 void ec_menu(EDCHAT_STRUCT *ed_struct) 7247 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 \ 00000008 0040A0E1 MOV R4,R0 7248 CLIST *t; 7249 int to_remove[EC_MNU_MAX+1]; 7250 int remove=0; 7251 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4300000A BEQ ??ec_menu_0 7252 { 7253 if (t->name) \ 00000018 ........ LDR R5,??DataTable149 ;; S_ICONS \ 0000001C 4C00A0E3 MOV R0,#+76 \ 00000020 500D80E3 ORR R0,R0,#0x1400 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 7254 { 7255 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 7256 } 7257 else 7258 { 7259 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 391F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 7260 } 7261 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 0160A0E3 MOV R6,#+1 \ 00000054 820100EF SWI +386 \ 00000058 082094E5 LDR R2,[R4, #+8] \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 020050E1 CMP R0,R2 7262 { 7263 to_remove[++remove]=0; \ 00000064 04108D05 STREQ R1,[SP, #+4] 7264 } 7265 else 7266 { 7267 to_remove[++remove]=1; \ 00000068 0120A013 MOVNE R2,#+1 \ 0000006C 04208D15 STRNE R2,[SP, #+4] 7268 } 7269 7270 if (ed_struct->ed_answer<=2) to_remove[++remove]=7; \ 00000070 080094E5 LDR R0,[R4, #+8] \ 00000074 030050E3 CMP R0,#+3 \ 00000078 0720A0B3 MOVLT R2,#+7 \ 0000007C 08208DB5 STRLT R2,[SP, #+8] 7271 if (!ed_struct->ed_contact || connect_state!=3) \ 00000080 000094E5 LDR R0,[R4, #+0] \ 00000084 0260A0B3 MOVLT R6,#+2 \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0200000A BEQ ??ec_menu_4 \ 00000090 800295E5 LDR R0,[R5, #+640] \ 00000094 030050E3 CMP R0,#+3 \ 00000098 0D00000A BEQ ??ec_menu_5 7272 { 7273 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000009C 010086E2 ADD R0,R6,#+1 \ 000000A0 0D20A0E1 MOV R2,SP \ 000000A4 0230A0E3 MOV R3,#+2 \ 000000A8 003182E7 STR R3,[R2, +R0, LSL #+2] 7274 to_remove[++remove]=3; \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 0330A0E3 MOV R3,#+3 \ 000000B4 003182E7 STR R3,[R2, +R0, LSL #+2] 7275 to_remove[++remove]=4; \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC 0430A0E3 MOV R3,#+4 \ 000000C0 003182E7 STR R3,[R2, +R0, LSL #+2] 7276 to_remove[++remove]=5; \ 000000C4 016080E2 ADD R6,R0,#+1 \ 000000C8 0D00A0E1 MOV R0,SP \ 000000CC 0520A0E3 MOV R2,#+5 \ 000000D0 062180E7 STR R2,[R0, +R6, LSL #+2] 7277 } 7278 7279 patch_header(&ecmenu_HDR); \ ??ec_menu_5: \ 000000D4 58509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 000000D8 001085E5 STR R1,[R5, #+0] \ 000000DC 888100EF SWI +33160 \ 000000E0 010040E2 SUB R0,R0,#+1 \ 000000E4 B400C5E1 STRH R0,[R5, #+4] \ 000000E8 8A8100EF SWI +33162 \ 000000EC 010040E2 SUB R0,R0,#+1 \ 000000F0 B600C5E1 STRH R0,[R5, #+6] 7280 to_remove[0]=remove; \ 000000F4 00608DE5 STR R6,[SP, #+0] 7281 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 000000F8 0D00A0E1 MOV R0,SP \ 000000FC 01002DE9 PUSH {R0} \ 00000100 10002DE9 PUSH {R4} \ 00000104 0530A0E1 MOV R3,R5 \ 00000108 0800A0E3 MOV R0,#+8 \ 0000010C 01002DE9 PUSH {R0} \ 00000110 142085E2 ADD R2,R5,#+20 \ 00000114 0010A0E3 MOV R1,#+0 \ 00000118 0000A0E3 MOV R0,#+0 \ 0000011C 01002DE9 PUSH {R0} \ 00000120 520100EF SWI +338 \ 00000124 10D08DE2 ADD SP,SP,#+16 7282 } 7283 } \ ??ec_menu_0: \ 00000128 24D08DE2 ADD SP,SP,#+36 ;; stack cleaning \ 0000012C 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000130 25750000 DC8 "%u",+0 \ 00000134 ........ DC32 ecmenu_HDR 7284 7285 \ In segment CODE, align 4, keep-with-next 7286 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 7287 { 7288 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 7289 } 7290 \ In segment CODE, align 4, keep-with-next 7291 void AddSmile(GUI *data) 7292 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 7293 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7294 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 7295 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 7296 } \ 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 \ ??DataTable10: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable13: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable21: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable25: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable27: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable42: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable44: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable46: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 S_ICONS + 680 \ In segment CODE, align 4, keep-with-next \ ??DataTable49: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable128: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable130: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable131: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable134: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000074 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 0000008C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000098 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000009C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D8 00000000 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 04000000 DC32 4 \ `?`: \ 000001DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E0 00000000 DC32 0 \ `?`: \ 000001E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000200 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000204 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000208 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000020C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000210 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000214 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000218 00000000 DC32 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 DC8 0, 0, 0, 0 \ `?`: \ 0000023C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000240 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000244 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000248 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000024C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000250 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000254 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000258 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000025C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000260 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000264 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000268 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000026C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000270 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000274 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000278 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000027C F6FFFFFF DC32 -10 \ `?`: \ 00000280 00000000 DC32 0 \ `?`: \ 00000284 FFFFFFFF DC32 -1 \ `?`: \ 00000288 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000028C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000290 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000294 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000298 00000000 DC32 0 \ `?`: \ 0000029C 00000000 DC32 0H \ `?`: \ 000002A0 01000000 DC32 1 \ `?`: \ 000002A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000308 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000318 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000328 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000032C 01000000 DC32 1 \ `?`: \ 00000330 01000000 DC32 1 \ `?`: \ 00000334 00000000 DC32 0 \ `?`: \ 00000338 03000000 DC32 3 \ `?`: \ 0000033C 00000000 DC32 0 \ `?`: \ 00000340 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000344 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000348 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000034C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000350 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000354 04000000 DC32 4 \ `?`: \ 00000358 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000035C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000036C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000037C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000038C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000039C 00 DC8 0 \ `?`: \ 0000039D 00 DC8 0 \ 0000039E 0000 DC8 0, 0 \ `?`: \ 000003A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000400 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000410 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000420 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000430 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000440 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000450 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000460 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000470 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000480 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000490 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000004E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000500 257300 DC8 "%s" \ 00000503 00 DC8 0 \ `?`: \ 00000504 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000514 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000524 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000534 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000544 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000550 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000560 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000568 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000578 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000588 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000598 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000608 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000618 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000628 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000638 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000648 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000658 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000668 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000678 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000684 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000694 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000006C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000704 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000714 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000724 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000734 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000744 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000754 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000764 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000774 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000784 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000794 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000007C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000804 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000814 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000824 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000834 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000844 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000854 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000864 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000874 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000884 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000894 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000008C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000904 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000914 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000924 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000934 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000944 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000954 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000964 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000974 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000984 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000994 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000009C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000A04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000A84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000B04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000B44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000B54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000C54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CE4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D14 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D24 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D34 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000D5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000D9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000E0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000E8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ECC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000F8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000F9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000FAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000FBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000FCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000100C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000101C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000102C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000103C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000104C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000105C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000106C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000107C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000108C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000109C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000010EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000110C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000111C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000112C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000113C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000114C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000115C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000116C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00001178 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001188 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001198 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000011A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 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 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 0000128F 00 DC8 0 \ `?`: \ 00001290 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 000012A4 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 000012BC 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 000012D0 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 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 \ 0000 \ `?`: \ 000013F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001400 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001410 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 0000142C 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 00001448 8B00 DC16 139 \ 0000144A 0000 DC8 0, 0 \ `?`: \ 0000144C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000145C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000146C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000147C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 input_awaymsg_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C25755C DC8 "%s\\%u\\%s(%d).txt" \ 257328256429 \ 2E74787400 \ 00000011 000000 DC8 0, 0, 0 \ 00000014 25735C257328 DC8 "%s\\%s(%d).txt" \ 2564292E7478 \ 7400 \ 00000022 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d %02d-%02d %s:" \ 303264202530 \ 32642D253032 \ 642025733A00 \ 00000018 253032643A25 DC8 "%02d:%02d %02d-%02d %s:\015\012" \ 303264202530 \ 32642D253032 \ 642025733A0D \ 0A00 \ 00000032 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 5B525D00 DC8 "[R]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B535D00 DC8 "[S]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B565D00 DC8 "[V]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B495D00 DC8 "[I]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B415D00 DC8 "[A]" \ 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 \ `?`: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ 00000008 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 0000001F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 00000077 00 DC8 0 \ 00000078 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000083 00 DC8 0 \ 00000084 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 0000008F 00 DC8 0 \ 00000090 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 0000009B 00 DC8 0 \ 0000009C 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000A7 00 DC8 0 \ 000000A8 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000E3 00 DC8 0 \ 000000E4 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 000000EE 0000 DC8 0, 0 \ 000000F0 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 00000107 00 DC8 0 \ 00000108 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000113 00 DC8 0 \ 00000114 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 0000011F 00 DC8 0 \ 00000120 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 0000014F 00 DC8 0 \ 00000150 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 43616E277420 DC8 "Can't open configs!" \ 6F70656E2063 \ 6F6E66696773 \ 2100 \ 00000014 4E4154494351 DC8 "NATICQMod" \ 4D6F6400 \ 0000001E 0000 DC8 0, 0 \ 00000020 4E4154494351 DC8 "NATICQ" \ 00 \ 00000027 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `? 12 maincsm_oncreate 260 maincsm_onclose 296 do_reconnect 40 CheckDoubleRun 120 maincsm_onmessage 2720 minus11 4 maincsm_name_body 280 UpdateCSMname 40 main 372 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 1212 my_ed_redraw 108 edchat_ghook 544 edchat_desc 84 sk 16 CreateEditChat 1084 Quote 416 GetShortInfo 168 AddCurContact 52 SendAuthReq 212 SendAuthGrant 204 OpenLogfile 168 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 224 ecmenu_HNDLS 32 S_ICONS 5260 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 ecmenu_HDR 64 ec_menu 312 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable4 4 ??DataTable10 4 ??DataTable13 4 ??DataTable19 4 ??DataTable21 4 ??DataTable25 4 ??DataTable27 4 ??DataTable42 4 ??DataTable44 4 ??DataTable46 4 ??DataTable48 4 ??DataTable49 4 ??DataTable50 4 ??DataTable51 4 ??DataTable53 4 ??DataTable58 4 ??DataTable60 4 ??DataTable61 4 ??DataTable62 4 ??DataTable69 4 ??DataTable74 4 ??DataTable76 4 ??DataTable77 4 ??DataTable78 4 ??DataTable79 4 ??DataTable81 4 ??DataTable84 4 ??DataTable88 4 ??DataTable89 4 ??DataTable90 4 ??DataTable92 4 ??DataTable97 4 ??DataTable107 4 ??DataTable110 4 ??DataTable111 4 ??DataTable112 4 ??DataTable113 4 ??DataTable114 4 ??DataTable115 4 ??DataTable116 4 ??DataTable117 4 ??DataTable119 4 ??DataTable120 4 ??DataTable121 4 ??DataTable122 4 ??DataTable124 4 ??DataTable127 4 ??DataTable128 4 ??DataTable130 4 ??DataTable131 4 ??DataTable134 4 ??DataTable137 4 ??DataTable143 4 ??DataTable145 4 ??DataTable146 4 ??DataTable147 4 ??DataTable149 4 ??DataTable150 4 ? 5260 ? 8 ? 24 ? 8 ? 8 ? 8 ? 8 ? 8 ? 4 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 12 ? 16 ? 8 ? 16 ? 8 ? 12 ? 16 ? 12 ? 12 ? 164 ? 8 ? 36 ? 3 ? 3 ? 52 ? 8 ? 3 ? 12 ? 40 ? 2 ? 12 ? 4 ? 4 ? 4 ? 4 ? 4 ? 12 ? 16 ? 3 ? 16 ? 32 ? 396 ? 12 ? 40 ?