############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 04/Apr/2008 21:12:31 # # 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 # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Re # # lease_SGOLD\List\ -lC D:\Pasha\elf\_MY_PROJECT_\nati # # cq_mod\Release_SGOLD\List\ -o # # D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Release_SGOLD\O # # bj\ -s9 --no_unroll --cpu_mode arm --endian little # # --cpu ARM926EJ-S --stack_align 4 --interwork -e # # --fpu None --dlib_config "D:\Pasha\Embedded # # Workbench 4.0 Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Release_SGOLD\L # # ist\main.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\Release_SGOLD\O # # bj\main.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c 1 #include "../inc/swilib.h" 2 #include "../inc/cfg_items.h" 3 #include "../inc/pnglist.h" 4 #include "NatICQ.h" 5 #include "history.h" 6 #include "conf_loader.h" 7 #include "mainmenu.h" 8 #include "main.h" 9 #include "language.h" 10 #include "../inc/xtask_ipc.h" 11 #include "smiles.h" 12 #include "naticq_ipc.h" 13 #include "status_change.h" 14 #include "strings.h" 15 //#include "string_util_int.h" 16 #include "manage_cl.h" 17 #include "cl_work.h" 18 #include "select_smile.h" 19 #include "revision.h" 20 #include "print.h" 21 //#include "screen_save.h" 22 #ifdef NEWSGOLD 23 #include "player_tags.h" 24 #endif 25 #include "swilib2.h" 26 #include "rect_patcher.h" \ In segment CODE, align 4, keep-with-next \ __??Code32?? __code __interwork __atpcs void patch_header(HEADER_DESC const *) \ patch_header: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0000A0E3 MOV R0,#+0 \ 0000000C B000C4E1 STRH R0,[R4, #+0] \ 00000010 B200C4E1 STRH R0,[R4, #+2] \ 00000014 888100EF SWI +33160 \ 00000018 010040E2 SUB R0,R0,#+1 \ 0000001C B400C4E1 STRH R0,[R4, #+4] \ 00000020 8A8100EF SWI +33162 \ 00000024 010040E2 SUB R0,R0,#+1 \ 00000028 B600C4E1 STRH R0,[R4, #+6] \ 0000002C 1080BDE8 POP {R4,PC} ;; return 27 28 //Теперь конфиги делаются отдельно!!!!как в экстраинфо! прикладываю два проекта 1stconfig && 2ndconfig 29 //должны находится в папке с исходником натаси в своих папках!чтобы конфиг можно было удоьно редактировать 30 //если изменили какой то из конфигов,то так же нужно изменить структуры в таком же порядке, 31 //как зменили конфиг с темиже данными!и поправить функцию UpdateConfig(),и потом скомпилить отдельно эльфы 1stconfig && 2ndconfig, 32 //чтобы получить разные конфиги...по другому пока не знаю как сделать... 33 // by kluchnik 31.03.08 34 35 //--------------------------------------------------------------------// 36 // READ CONFIGS // 37 //--------------------------------------------------------------------// 38 39 //--------------------------------------------------------------------// 40 //------------------------ ORIGINAL CONFIG -------------------------// 41 //--------------------------------------------------------------------// 42 43 typedef struct 44 { 45 46 CFG_HDR cfghdr0; 47 unsigned int UIN; 48 49 CFG_HDR cfghdr1; 50 char PASS[9]; 51 52 //--------------- NETWORK SETTING -------------------// 53 54 CFG_HDR cfghdr2; 55 CFG_HDR cfghdr2_1; 56 char NATICQ_HOST[128]; 57 58 CFG_HDR cfghdr2_2; 59 unsigned int NATICQ_PORT; 60 61 CFG_HDR cfghdr2_3; 62 unsigned int RECONNECT_TIME; 63 64 CFG_HDR cfghdr2_4; 65 char HIST_PATH[64]; 66 67 CFG_HDR cfghdr2_5; 68 char SMILE_FILE[64]; 69 70 CFG_HDR cfghdr2_6; 71 char SMILE_PATH[64]; 72 73 CFG_HDR cfghdr2_7; 74 char ICON_PATH[64]; 75 76 CFG_HDR cfghdr2_8; 77 char XSTATUSES_PATH[64]; 78 79 CFG_HDR cfghdr2_9; 80 char TEMPLATES_PATH[64]; 81 CFG_HDR cfghdr3;//NETWORK SETTING 82 83 84 //------------------ INTERFACE ------------------// 85 86 CFG_HDR cfghdr4; 87 //Status icon on mainscreen position 88 CFG_HDR cfghdr4_1; 89 unsigned int IDLEICON_X; 90 unsigned int IDLEICON_Y; 91 92 //Popup chat 93 CFG_HDR cfghdr4_2; 94 int DEVELOP_IF; 95 CFG_CBOX_ITEM cfgcbox4_2[4]; 96 97 //Sorting 98 CFG_HDR cfghdr4_3; 99 int SORT_CLIST; 100 CFG_CBOX_ITEM cfgcbox4_3[2]; 101 102 //First letter when typing 103 CFG_HDR cfghdr4_4; 104 int FIRST_LETTER; 105 CFG_CBOX_ITEM cfgcbox4_4[2]; 106 107 108 //------------------ FONT AND COLOR ------------------// 109 110 111 CFG_HDR cfghdr4_5; 112 CFG_HDR cfghdr4_5_1; 113 unsigned int I_COLOR; 114 115 CFG_HDR cfghdr4_5_2; 116 unsigned int TO_COLOR; 117 118 CFG_HDR cfghdr4_5_3; 119 unsigned int X_COLOR; 120 121 CFG_HDR cfghdr4_5_4; 122 unsigned int ED_FONT_SIZE; 123 124 CFG_HDR cfghdr4_5_5; 125 unsigned int ED_H_FONT_SIZE; 126 127 CFG_HDR cfghdr4_5_6; 128 unsigned int ED_X_FONT_SIZE; 129 130 CFG_HDR cfghdr4_5_7; 131 unsigned int O_I_COLOR; 132 133 CFG_HDR cfghdr4_5_8; 134 unsigned int O_TO_COLOR; 135 136 CFG_HDR cfghdr4_5_9; 137 unsigned int O_X_COLOR; 138 139 CFG_HDR cfghdr4_5_10; 140 unsigned int O_ED_FONT_SIZE; 141 142 CFG_HDR cfghdr4_5_11; 143 unsigned int O_ED_H_FONT_SIZE; 144 145 CFG_HDR cfghdr4_5_12; 146 unsigned int O_ED_X_FONT_SIZE; 147 148 CFG_HDR cfghdr4_5_13; 149 unsigned int ACK_COLOR; 150 151 CFG_HDR cfghdr4_5_14; 152 unsigned int UNACK_COLOR; 153 154 //Color for background in select smail 155 CFG_HDR cfghdr19_1; 156 unsigned int color_choose; 157 158 CFG_HDR cfghdr4_6;//FONT & COLOR 159 160 //------------------ ILLUMINATION ------------------// 161 //Illumination by BoBa 19.04.2007 162 163 CFG_HDR cfghdr4_7; 164 CFG_HDR cfghdr4_7_1; 165 unsigned int ILL_DISP_RECV; 166 167 CFG_HDR cfghdr4_7_2; 168 unsigned int ILL_KEYS_RECV; 169 170 CFG_HDR cfghdr4_7_3; 171 unsigned int ILL_RECV_TMR; 172 173 CFG_HDR cfghdr4_7_4; 174 unsigned int ILL_RECV_FADE; 175 176 CFG_HDR cfghdr4_7_5; 177 unsigned int ILL_DISP_SEND; 178 179 CFG_HDR cfghdr4_7_6; 180 unsigned int ILL_KEYS_SEND; 181 182 CFG_HDR cfghdr4_7_7; 183 unsigned int ILL_SEND_TMR; 184 185 CFG_HDR cfghdr4_7_8; 186 unsigned int ILL_SEND_FADE; 187 188 CFG_HDR cfghdr4_7_9; 189 unsigned int ILL_OFF_FADE; 190 CFG_HDR cfghdr4_8; //ILLUMINATION 191 192 CFG_HDR cfghdr5;//INTERFACE 193 194 195 //------------------------------------------------------------------------------// 196 // HISTORY 197 //------------------------------------------------------------------------------// 198 199 //History 200 CFG_HDR cfghdr6; 201 202 CFG_HDR cfghdr6_8; 203 int SHOW_ACTIVE; 204 CFG_CBOX_ITEM cfgcbox6_8[2]; 205 //Enable history logging 206 CFG_HDR cfghdr6_1; 207 int LOG_ALL; 208 CFG_CBOX_ITEM cfgcbox6_1[2]; 209 210 //History type 211 CFG_HDR cfghdr6_2; 212 int HISTORY_TYPE; 213 CFG_CBOX_ITEM cfgcbox6_2[2]; 214 215 //Enable status logging 216 CFG_HDR cfghdr6_3; 217 int LOG_STATCH; 218 CFG_CBOX_ITEM cfgcbox6_3[2]; 219 220 //Enable X-status logging 221 CFG_HDR cfghdr6_4; 222 int LOG_XTXT; 223 CFG_CBOX_ITEM cfgcbox6_4[2]; 224 225 //Auto request X-status if entering to chat 226 CFG_HDR cfghdr6_5; 227 int ENA_AUTO_XTXT; 228 CFG_CBOX_ITEM cfgcbox6_5[2]; 229 230 //Don't log X-status, if it same as prevision 231 CFG_HDR cfghdr6_6; 232 int NOT_LOG_SAME_XTXT; 233 CFG_CBOX_ITEM cfgcbox6_6[2]; 234 235 //Buffer for fill from history 236 CFG_HDR cfghdr6_7; 237 int HISTORY_BUFFER; 238 CFG_CBOX_ITEM cfgcbox6_7[7]; 239 240 CFG_HDR cfghdr7;//HISTORY 241 242 //--------------------------------------------------// 243 // NOTYFY POWER // 244 //--------------------------------------------------// 245 246 CFG_HDR cfghdr8; 247 248 CFG_HDR cfghdr8_1; 249 unsigned int sndVolume; 250 251 CFG_HDR cfghdr8_2; 252 unsigned int vibraPower; 253 254 CFG_HDR cfghdr8_3; 255 int VIBR_TYPE; 256 CFG_CBOX_ITEM cfgcbox8_3[2]; 257 258 CFG_HDR cfghdr8_4; 259 int VIBR_ON_CONNECT; 260 CFG_CBOX_ITEM cfgcbox8_4[2]; 261 262 //------------------ SOUND SETUP ------------------// 263 CFG_HDR cfghdr8_5; 264 265 CFG_HDR cfghdr181; 266 unsigned int extended_sounds; 267 CFG_CBOX_ITEM cfgcbox18_3_2[2]; 268 269 CFG_HDR cfghdr8_5_1; 270 char sndStartup[64]; 271 272 CFG_HDR cfghdr8_5_2; 273 char sndSrvMsg[64]; 274 275 CFG_HDR cfghdr8_5_3; 276 char sndGlobal[64]; 277 278 CFG_HDR cfghdr8_5_4; 279 char sndMsg[64]; 280 281 CFG_HDR cfghdr8_5_5; 282 char sndMsgSent[64]; 283 284 CFG_HDR cfghdr15; 285 char sndGlobal2[64]; 286 287 CFG_HDR cfghdr161; 288 char sndMsg2[64]; 289 290 CFG_HDR cfghdr16r1; 291 char pingsnd[64]; 292 CFG_HDR cfghdr8_6;//SOUND SETUP 293 294 CFG_HDR cfghdr9;//NOTYFY POWER 295 }myConfig; 296 297 //----------------------------------------------------------------// 298 //------------------------ MOD CONFIG --------------------------// 299 //----------------------------------------------------------------// 300 301 typedef struct 302 { 303 CFG_HDR cfghdr0; 304 //----------- НАСТРОЙКА КЛАВИШ -----------// 305 //View settings 306 CFG_HDR cfghdr23_4; 307 /* 308 CFG_HDR cfghdr23_4_1;//={CFG_CBOX,"Показ. сообщ.при дл.нажатии",0,2}; 309 int isShowMsgLongPress;// = 1; 310 CFG_CBOX_ITEM cfgcbox23_4_2[2];//={"Нет","Да"}; 311 */ 312 //Long press right in chat 313 CFG_HDR cfghdr4_67; 314 int LongRightAction; 315 CFG_CBOX_ITEM cfgcbox4_56[3]; 316 317 //Long press right in chat 318 CFG_HDR cfghdr34_64; 319 int LongLeftAction ; 320 CFG_CBOX_ITEM cfgcbox444_56[2]; 321 322 //Action on # button in contact list 323 CFG_HDR cfghdr78_4520; 324 int ActionResh; 325 CFG_CBOX_ITEM cfgcbox_668_z[2]; 326 327 #ifdef ELKA 328 //Press vol up or vol down button in CL 329 CFG_HDR cfghdr34_642; 330 int isVolDownButton; 331 CFG_CBOX_ITEM cfgcbox434_56[2]; 332 333 CFG_HDR cfghdr34_6342; 334 int isVolUpButton; 335 CFG_CBOX_ITEM cfgcbox4134_56[2]; 336 #endif 337 CFG_HDR cfghdr223_5; //НАСТРОКА КЛАВИШ 338 339 340 //----------- STATUS SETTING -----------// 341 342 343 CFG_HDR cfghdr_45; 344 #ifdef ELKA 345 //Status icon on mainscreen position 346 CFG_HDR cfghdr467_1; 347 int ShowStatusIcon; 348 CFG_CBOX_ITEM cfgcbox9_1[5]; 349 #endif 350 #ifdef ELKA 351 //Show x-status on iconbar or mainscreen 352 CFG_HDR cfghdrz_68; 353 int show_xstatus; 354 CFG_CBOX_ITEM cfgcbox_8z[4]; 355 #else 356 CFG_HDR cfghdrz_68; 357 int show_xstatus; 358 CFG_CBOX_ITEM cfgcbox_8z[2]; 359 #endif 360 //Xstatus idle position 361 CFG_HDR cfghdrz_1; 362 unsigned int IDLEICON_XX; 363 unsigned int IDLEICON_YX; 364 365 #ifdef ELKA 366 //Number first pic status in folder img for show in iconbar 367 CFG_HDR cfghdr19_22; 368 unsigned int NumStatusToIconBar; 369 370 //Number first pic x-status in folder img for show in iconbar 371 CFG_HDR cfghdr19_242; 372 unsigned int NumXStatusToIconBar; 373 #endif 374 CFG_HDR cfghdr_4;//STATUS SETTINGS 375 376 377 //----------- PNGFONT SETTING -----------// 378 379 CFG_HDR cfghdr1_45; 380 381 //Nember png-font or system 382 CFG_HDR cfghdr65z; 383 unsigned int fonto; 384 385 //Path to png-font 386 CFG_HDR cfghdr98; 387 char fontpath[64]; 388 389 //Coordinates for message on idle 390 CFG_HDR cfghd83; 391 unsigned int msg_d_x ; 392 unsigned int msg_d_y ; 393 394 CFG_HDR cfghdr60_2; 395 char fontColor[4]; 396 397 CFG_HDR cfghdr60_3; 398 char bgrColor[4]; 399 400 //Max show symbol on idle 401 CFG_HDR cfghdr19a_1; 402 unsigned int main_lenght; 403 404 CFG_HDR cfghdr9z9; 405 int use_cutter; 406 CFG_CBOX_ITEM cfgcbox18a_4[2]; 407 408 CFG_HDR cfghdr65y; 409 unsigned int spaco1; 410 411 //__root const CFG_HDR cfghdr65u={CFG_UINT,"Main msg space",0,999999}; 412 //__root const unsigned int spaco2=0; 413 414 CFG_HDR cfghdrss_45;//PNGFONT SETTING 415 416 417 //-----------------------------------------------------------------------------// 418 // ONLINE TIME 419 //-----------------------------------------------------------------------------// 420 421 CFG_HDR cfghdr_m71; 422 423 CFG_HDR cfghdr699; 424 unsigned int onlineTime_x; 425 unsigned int onlineTime_y; 426 427 CFG_HDR cfghdr698; 428 int Pause_Time; 429 CFG_CBOX_ITEM cfgcbox85[2]; 430 431 CFG_HDR cfghdr_m70; 432 433 434 //-----------------------------------------------------------------------------// 435 // AUTO PING/UNREAD 436 //-----------------------------------------------------------------------------// 437 438 439 CFG_HDR cfghdr_m91; 440 441 CFG_HDR cfghd66; 442 unsigned int Ping_X ; 443 unsigned int Ping_Y ; 444 445 CFG_HDR cfghdr1z9a_1; 446 unsigned int ping_time_config ; 447 448 CFG_HDR cfghdr298; 449 int Is_Unread_On; 450 CFG_CBOX_ITEM cfgcbox86[2]; 451 452 CFG_HDR cfghd67; 453 unsigned int unread_X; 454 unsigned int unread_Y; 455 456 CFG_HDR cfghdr_m90; 457 458 459 //-----------------------------------------------------------------------------// 460 // AUTO STATUS // 461 //-----------------------------------------------------------------------------// 462 463 464 CFG_HDR cfghdr_m61; 465 466 CFG_HDR cfghdr668; 467 int Auto_Status; 468 CFG_CBOX_ITEM cfgcbox89[2]; 469 470 CFG_HDR cfghdr667; 471 unsigned int AUTO_ENGADE; 472 473 CFG_HDR cfghdr_13; 474 int time_zone; 475 CFG_CBOX_ITEM cfgcbox_13[33]; 476 477 CFG_HDR cfghdrzz_8; 478 char awayHelloMsg[24]; 479 480 CFG_HDR cfghdrzz_9; 481 char awayMsg[64]; 482 483 CFG_HDR cfghdr66_2; 484 int Reset_timer; 485 CFG_CBOX_ITEM cfgcbox90[2]; 486 487 //Show away time on idle 488 CFG_HDR cfghdr663; 489 int showAwayIdle ; 490 CFG_CBOX_ITEM cfgcbox82[2]; 491 492 CFG_HDR cfghd6_7; 493 unsigned int auto_x; 494 unsigned int auto_y; 495 496 CFG_HDR cfghdr_m60; 497 498 499 //------------------------------------------------------------------------------// 500 // EXTRA CONFIG // 501 //------------------------------------------------------------------------------// 502 503 504 CFG_HDR cfghdr_m51; 505 506 //Show contact header with... 507 CFG_HDR cfghdr467; 508 int TIME_OR_MSG; 509 CFG_CBOX_ITEM cfgcbox91[5]; 510 511 //Vibra count in vibra remaider 512 CFG_HDR cfghdr65; 513 unsigned int Vibra_cc; 514 515 //CSM for player 516 CFG_HDR cfghdr66; 517 char CsmAdr[9]; //el=A087B454 //es=A068E244 518 519 //Text before name track 520 CFG_HDR cfghdr67; 521 char playing[13]; 522 523 //Show command sending 524 CFG_HDR cfghdr780; 525 int show_send_info; 526 CFG_CBOX_ITEM cfgcbox8_z[2]; 527 528 //Show time offline contact 529 CFG_HDR cfghdr7_80; 530 int isLogOffline; 531 CFG_CBOX_ITEM cfgcbox8df_z[2]; 532 533 //Show time onlain contact 534 CFG_HDR cfghdr7_81; 535 int isLogOnline; 536 CFG_CBOX_ITEM cfgcbox9df_z[2]; 537 538 //Show Loopback contact in CL 539 CFG_HDR cfghdr71_30; 540 int IsShowLoopback; 541 CFG_CBOX_ITEM cfgcbox_3z[2]; 542 543 CFG_HDR cfghdr_m50;//level 544 545 CFG_HDR cfghdr11_9;//level 546 char ignor_list[256]; 547 }myConfigMod; 548 549 550 //-----------------------------------------------------------------------------------// 551 // ГЛОБАЛЬНЫЕ ПЕРЕМЕННЫЕ // 552 //-----------------------------------------------------------------------------------// 553 unsigned int color_choose; 554 unsigned int Vibra_cc; 555 unsigned int Ping_X; 556 unsigned int Ping_Y; 557 unsigned int unread_X; 558 unsigned int unread_Y; 559 int show_xstatus; 560 char fontpath[64]; 561 #ifdef ELKA 562 int ShowStatusIcon; 563 #endif 564 //For online/offline log 565 int isLogOffline; 566 int isLogOnline; 567 568 char CsmAdr[9]; 569 int SORT_CLIST; 570 #ifdef ELKA 571 //If action vol up && vol down button on elka 572 int isVolUpButton; 573 int isVolDownButton; 574 #endif 575 576 //Autoaway message 577 char awayHelloMsg[24];//hello msg 578 char awayMsg[64];//message 579 580 int IsShowLoopback;//Show Loopback contact in CL 581 //For png font 582 unsigned int fonto; 583 unsigned int spaco1; 584 unsigned int spaco2; 585 //int spaco2=spaco1; 586 char fontColor[];//Цвет для системного шрифта 587 char bgrColor[]; 588 589 unsigned int AUTO_ENGADE; 590 int Is_Unread_On; 591 int Pause_Time; 592 unsigned int auto_x; 593 unsigned int auto_y; 594 int showAwayIdle; 595 596 //Online time on idle 597 unsigned int onlineTime_x; 598 unsigned int onlineTime_y; 599 600 int Auto_Status;//Включен автостатус или нет 601 int time_zone; 602 int TIME_OR_MSG; 603 604 unsigned int ping_time_config; 605 char ignor_list[256]; 606 607 unsigned int msg_d_x; 608 unsigned int msg_d_y; 609 unsigned int main_lenght; 610 int use_cutter; 611 612 char playing[13]; 613 int Reset_timer; 614 #ifdef ELKA 615 unsigned int NumStatusToIconBar; 616 unsigned int NumXStatusToIconBar; 617 #endif 618 int LongRightAction; 619 int LongLeftAction; 620 621 //int isShowMsgLongPress; 622 //------------ ORIGINAL SETTING -------------// 623 624 unsigned int UIN; 625 char PASS[9]; 626 627 int VIBR_ON_CONNECT; 628 int SHOW_ACTIVE; 629 int VIBR_TYPE; 630 int DEVELOP_IF; 631 632 int LOG_ALL; 633 int LOG_STATCH; 634 int FIRST_LETTER; 635 636 int show_send_info; 637 int ActionResh; 638 639 int HISTORY_TYPE; 640 unsigned int vibraPower; 641 642 unsigned int IDLEICON_X; 643 unsigned int IDLEICON_Y; 644 645 unsigned int IDLEICON_XX; 646 unsigned int IDLEICON_YX; 647 648 unsigned int I_COLOR; 649 unsigned int TO_COLOR; 650 unsigned int X_COLOR; 651 unsigned int O_I_COLOR; 652 unsigned int O_TO_COLOR; 653 unsigned int O_X_COLOR; 654 655 unsigned int ED_FONT_SIZE; 656 unsigned int ED_H_FONT_SIZE; 657 unsigned int ED_X_FONT_SIZE; 658 unsigned int O_ED_FONT_SIZE; 659 unsigned int O_ED_H_FONT_SIZE; 660 unsigned int O_ED_X_FONT_SIZE; 661 662 unsigned int ACK_COLOR; 663 unsigned int UNACK_COLOR; 664 665 int ENA_AUTO_XTXT; 666 int NOT_LOG_SAME_XTXT; 667 int LOG_XTXT; 668 int HISTORY_BUFFER; 669 670 //Illumination by BoBa 19.04.2007 671 /////////// 672 unsigned int ILL_DISP_RECV; 673 unsigned int ILL_KEYS_RECV; 674 unsigned int ILL_RECV_TMR; 675 unsigned int ILL_DISP_SEND; 676 unsigned int ILL_KEYS_SEND; 677 unsigned int ILL_SEND_TMR; 678 unsigned int ILL_SEND_FADE; 679 unsigned int ILL_RECV_FADE; 680 unsigned int ILL_OFF_FADE; 681 682 //=============================Проигрывание звука======================= 683 684 #ifdef NEWSGOLD 685 #define DEFAULT_DISK "4" 686 #else 687 #define DEFAULT_DISK "0" 688 #endif 689 690 char sndStartup[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndStartup.wav"; 691 char sndSrvMsg[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndSrvMsg.wav"; 692 char sndGlobal[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndGlobal.wav"; 693 char sndGlobal2[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\Uins_on\\"; 694 char sndMsg[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndMsg.wav"; 695 char sndMsg2[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\Uins_msg\\"; 696 char sndMsgSent[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndMsgSent.wav"; 697 char pingsnd[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\Sounds\\sndPing.wav"; 698 unsigned int extended_sounds; 699 unsigned int sndVolume; 700 701 //=============================================================== 702 703 //int VIBR_TYPE; 704 //unsigned int vibraPower; 705 706 char SMILE_FILE[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\smiles.cfg"; 707 char TEMPLATES_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\templates"; 708 char ICON_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\img"; 709 char SMILE_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\smiles"; 710 char XSTATUSES_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\ximg"; 711 char HIST_PATH[64];//=DEFAULT_DISK ":\\ZBin\\NatICQ\\history"; 712 char NATICQ_HOST[128];//="cbsie.dyndns.info; freegw.alltime.ru"; 713 unsigned int NATICQ_PORT;//=5050; 714 unsigned int RECONNECT_TIME; //2058 715 716 //-----------------------------------------------------------------------------------// 717 // -------------------------------- INIT CONFIGS -----------------------------------// 718 //-----------------------------------------------------------------------------------// 719 720 extern int janis; 721 char per_s[]="%s"; 722 723 #ifdef NEWSGOLD 724 int disk=4; 725 #else \ In segment DATA_Z, align 4, align-sorted 726 int disk=0; \ disk: \ 00000000 DS8 4 727 #endif 728 \ In segment CODE, align 4, keep-with-next 729 void UpdateConfig() 730 { \ UpdateConfig: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 731 732 int myConfigSize = sizeof(myConfig); 733 myConfig* myConf = (myConfig*)malloc(myConfigSize); 734 int newCfgFile; 735 int myConfigModSize = sizeof(myConfigMod); 736 myConfigMod* myConfMod = (myConfigMod*)malloc(myConfigModSize); 737 int newCfgModFile;// = InitConfig(myConfMod, myConfigModSize, "NATICQMod",disk); 738 #ifdef kluchnik 739 newCfgFile= InitConfig(myConf, myConfigSize, "NATICQ_344720626",4); 740 newCfgModFile = InitConfig(myConfMod, myConfigModSize, "NATICQMod_344720626",4); 741 #else 742 if((newCfgFile= InitConfig(myConf, myConfigSize, "NATICQ",4))==-1) \ 00000004 64859FE5 LDR R8,??UpdateConfig_0 ;; `?` \ 00000008 D860A0E3 MOV R6,#+216 \ 0000000C 546D86E3 ORR R6,R6,#0x1500 \ 00000010 0600A0E1 MOV R0,R6 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 9C7F46E2 SUB R7,R6,#+624 \ 00000020 0700A0E1 MOV R0,R7 \ 00000024 140000EF SWI +20 \ 00000028 0050A0E1 MOV R5,R0 \ 0000002C 0430A0E3 MOV R3,#+4 \ 00000030 202088E2 ADD R2,R8,#+32 \ 00000034 0610A0E1 MOV R1,R6 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF InitConfig,??InitConfig??rA \ 00000040 0090A0E1 MOV R9,R0 \ 00000044 00A0E0E3 MVN R10,#+0 \ 00000048 0A0059E1 CMP R9,R10 \ 0000004C 0500001A BNE ??UpdateConfig_1 743 newCfgFile= InitConfig(myConf, myConfigSize, "NATICQ",0); \ 00000050 0030A0E3 MOV R3,#+0 \ 00000054 202088E2 ADD R2,R8,#+32 \ 00000058 0610A0E1 MOV R1,R6 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 ........ _BLF InitConfig,??InitConfig??rA \ 00000064 0090A0E1 MOV R9,R0 744 if((newCfgModFile = InitConfig(myConfMod, myConfigModSize, "NATICQMod",4))==-1) \ ??UpdateConfig_1: \ 00000068 0430A0E3 MOV R3,#+4 \ 0000006C 142088E2 ADD R2,R8,#+20 \ 00000070 0710A0E1 MOV R1,R7 \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 ........ _BLF InitConfig,??InitConfig??rA \ 0000007C 0A0050E1 CMP R0,R10 \ 00000080 0400001A BNE ??UpdateConfig_2 745 newCfgModFile = InitConfig(myConfMod, myConfigModSize, "NATICQMod",0); \ 00000084 0030A0E3 MOV R3,#+0 \ 00000088 142088E2 ADD R2,R8,#+20 \ 0000008C 0710A0E1 MOV R1,R7 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 ........ _BLF InitConfig,??InitConfig??rA 746 #endif 747 748 //--------------------------- 749 // MOD CONFIG 750 //--------------------------- 751 if(newCfgFile!=-1 && newCfgModFile!=-1)//Если конфиги есть \ ??UpdateConfig_2: \ 00000098 0A0059E1 CMP R9,R10 \ 0000009C 0A005011 CMPNE R0,R10 \ 000000A0 2A01000A BEQ ??UpdateConfig_3 752 { 753 //setting interface 754 TIME_OR_MSG=myConfMod->TIME_OR_MSG; \ 000000A4 ........ LDR R6,??DataTable20 ;; S_ICONS \ 000000A8 847085E2 ADD R7,R5,#+132 \ 000000AC 840E97E5 LDR R0,[R7, #+3716] 755 isLogOffline=myConfMod->isLogOffline;//For online/offline log 756 isLogOnline=myConfMod->isLogOnline; 757 IsShowLoopback=myConfMod->IsShowLoopback;//Show Loopback contact in CL 758 //isShowMsgLongPress=myConfMod->isShowMsgLongPress; 759 760 //setting png font 761 sprintf(fontpath,per_s,myConfMod->fontpath); \ 000000B0 0C80A0E3 MOV R8,#+12 \ 000000B4 000186E5 STR R0,[R6, #+256] \ 000000B8 EC00A0E3 MOV R0,#+236 \ 000000BC 400D80E3 ORR R0,R0,#0x1000 \ 000000C0 050080E0 ADD R0,R0,R5 \ 000000C4 001090E5 LDR R1,[R0, #+0] \ 000000C8 508E88E3 ORR R8,R8,#0x500 \ 000000CC BC1086E5 STR R1,[R6, #+188] \ 000000D0 701090E5 LDR R1,[R0, #+112] \ 000000D4 DE2F85E2 ADD R2,R5,#+888 \ 000000D8 C01086E5 STR R1,[R6, #+192] \ 000000DC E00090E5 LDR R0,[R0, #+224] \ 000000E0 061088E0 ADD R1,R8,R6 \ 000000E4 C80086E5 STR R0,[R6, #+200] \ 000000E8 510E86E2 ADD R0,R6,#+1296 \ 000000EC 160000EF SWI +22 762 fonto=myConfMod->fonto; \ 000000F0 C40297E5 LDR R0,[R7, #+708] \ 000000F4 CC0086E5 STR R0,[R6, #+204] 763 spaco1=myConfMod->spaco1; \ 000000F8 940497E5 LDR R0,[R7, #+1172] \ 000000FC D00086E5 STR R0,[R6, #+208] 764 spaco2=myConfMod->spaco1;//так нада \ 00000100 940497E5 LDR R0,[R7, #+1172] \ 00000104 D40086E5 STR R0,[R6, #+212] 765 //Цвет для системного шрифта 766 for(int i=0;i<4;i++) \ 00000108 0000A0E3 MOV R0,#+0 767 { 768 fontColor[i]=myConfMod->fontColor[i]; \ ??UpdateConfig_4: \ 0000010C 052080E0 ADD R2,R0,R5 \ 00000110 1824D2E5 LDRB R2,[R2, #+1048] \ 00000114 061080E0 ADD R1,R0,R6 \ 00000118 A823C1E5 STRB R2,[R1, #+936] 769 bgrColor[i]=myConfMod->bgrColor[i]; \ 0000011C 052080E0 ADD R2,R0,R5 \ 00000120 4824D2E5 LDRB R2,[R2, #+1096] 770 } \ 00000124 010080E2 ADD R0,R0,#+1 \ 00000128 040050E3 CMP R0,#+4 \ 0000012C A923C1E5 STRB R2,[R1, #+937] \ 00000130 F5FFFFBA BLT ??UpdateConfig_4 771 772 Is_Unread_On=myConfMod->Is_Unread_On; \ 00000134 7C0697E5 LDR R0,[R7, #+1660] 773 774 //automessage setting 775 AUTO_ENGADE=myConfMod->AUTO_ENGADE;//time to away 776 Auto_Status=myConfMod->Auto_Status;//Включен автостатус или нет 777 time_zone=myConfMod->time_zone; 778 auto_x=myConfMod->auto_x; 779 auto_y=myConfMod->auto_y; 780 showAwayIdle=myConfMod->showAwayIdle; 781 sprintf(awayHelloMsg,per_s,myConfMod->awayHelloMsg);//hello msg \ 00000138 061088E0 ADD R1,R8,R6 \ 0000013C DC0086E5 STR R0,[R6, #+220] \ 00000140 E80797E5 LDR R0,[R7, #+2024] \ 00000144 D80086E5 STR R0,[R6, #+216] \ 00000148 780797E5 LDR R0,[R7, #+1912] \ 0000014C F80086E5 STR R0,[R6, #+248] \ 00000150 180897E5 LDR R0,[R7, #+2072] \ 00000154 FC0086E5 STR R0,[R6, #+252] \ 00000158 F80D97E5 LDR R0,[R7, #+3576] \ 0000015C E40086E5 STR R0,[R6, #+228] \ 00000160 FC0D97E5 LDR R0,[R7, #+3580] \ 00000164 E80086E5 STR R0,[R6, #+232] \ 00000168 880D97E5 LDR R0,[R7, #+3464] \ 0000016C EC0086E5 STR R0,[R6, #+236] \ 00000170 7E0E88E2 ADD R0,R8,#+2016 \ 00000174 052080E0 ADD R2,R0,R5 \ 00000178 790E40E2 SUB R0,R0,#+1936 \ 0000017C 060080E0 ADD R0,R0,R6 \ 00000180 160000EF SWI +22 782 snprintf(awayMsg,64,per_s,myConfMod->awayMsg);//message \ 00000184 D33E85E2 ADD R3,R5,#+3376 \ 00000188 062088E0 ADD R2,R8,R6 \ 0000018C 4010A0E3 MOV R1,#+64 \ 00000190 EB0F86E2 ADD R0,R6,#+940 \ 00000194 1B0100EF SWI +283 783 Reset_timer=myConfMod->Reset_timer;//reset away timer on send message or key down \ 00000198 180D97E5 LDR R0,[R7, #+3352] 784 785 //Online time on idle 786 onlineTime_x=myConfMod->onlineTime_x; 787 onlineTime_y=myConfMod->onlineTime_y; 788 Pause_Time=myConfMod->Pause_Time; 789 790 //setting ping 791 Ping_X=myConfMod->Ping_X; 792 Ping_Y=myConfMod->Ping_Y; 793 sprintf(pingsnd,per_s,myConf->pingsnd); \ 0000019C 552D84E2 ADD R2,R4,#+5440 \ 000001A0 180186E5 STR R0,[R6, #+280] \ 000001A4 1C0597E5 LDR R0,[R7, #+1308] \ 000001A8 061088E0 ADD R1,R8,R6 \ 000001AC F00086E5 STR R0,[R6, #+240] \ 000001B0 200597E5 LDR R0,[R7, #+1312] \ 000001B4 F40086E5 STR R0,[R6, #+244] \ 000001B8 500597E5 LDR R0,[R7, #+1360] \ 000001BC E00086E5 STR R0,[R6, #+224] \ 000001C0 180697E5 LDR R0,[R7, #+1560] \ 000001C4 A80086E5 STR R0,[R6, #+168] \ 000001C8 1C0697E5 LDR R0,[R7, #+1564] \ 000001CC AC0086E5 STR R0,[R6, #+172] \ 000001D0 850E86E2 ADD R0,R6,#+2128 \ 000001D4 160000EF SWI +22 794 ping_time_config=myConfMod->ping_time_config; \ 000001D8 4C0697E5 LDR R0,[R7, #+1612] 795 796 //setting last 5 message on idle 797 msg_d_x=myConfMod->msg_d_x; 798 msg_d_y=myConfMod->msg_d_y; 799 main_lenght=myConfMod->main_lenght; 800 use_cutter=myConfMod->use_cutter; 801 802 //player setting 803 sprintf(CsmAdr,per_s,myConfMod->CsmAdr);//csm mediaplayer \ 000001DC 061088E0 ADD R1,R8,R6 \ 000001E0 040186E5 STR R0,[R6, #+260] \ 000001E4 600397E5 LDR R0,[R7, #+864] \ 000001E8 080186E5 STR R0,[R6, #+264] \ 000001EC 640397E5 LDR R0,[R7, #+868] \ 000001F0 0C0186E5 STR R0,[R6, #+268] \ 000001F4 F40397E5 LDR R0,[R7, #+1012] \ 000001F8 100186E5 STR R0,[R6, #+272] \ 000001FC 240497E5 LDR R0,[R7, #+1060] \ 00000200 140186E5 STR R0,[R6, #+276] \ 00000204 0800A0E3 MOV R0,#+8 \ 00000208 400D80E3 ORR R0,R0,#0x1000 \ 0000020C 052080E0 ADD R2,R0,R5 \ 00000210 550E86E2 ADD R0,R6,#+1360 \ 00000214 160000EF SWI +22 804 sprintf(playing,per_s,myConfMod->playing);//text before name song \ 00000218 412D85E2 ADD R2,R5,#+4160 \ 0000021C 061088E0 ADD R1,R8,R6 \ 00000220 5A0F88E2 ADD R0,R8,#+360 \ 00000224 060080E0 ADD R0,R0,R6 \ 00000228 160000EF SWI +22 805 806 #ifdef ELKA 807 NumStatusToIconBar=myConfMod->NumStatusToIconBar; 808 NumXStatusToIconBar=myConfMod->NumXStatusToIconBar; 809 ShowStatusIcon=myConfMod->ShowStatusIcon; 810 #endif 811 812 //setting xstatus 813 show_xstatus=myConfMod->show_xstatus; \ 0000022C C80197E5 LDR R0,[R7, #+456] 814 IDLEICON_XX=myConfMod->IDLEICON_XX; 815 IDLEICON_YX=myConfMod->IDLEICON_YX; 816 817 //setting keys 818 LongRightAction=myConfMod->LongRightAction; 819 LongLeftAction=myConfMod->LongLeftAction; 820 ActionResh=myConfMod->ActionResh;//действие на # в контакт листе 821 #ifdef ELKA 822 //If action vol up && vol down button on elka 823 isVolUpButton=myConfMod->isVolUpButton; 824 isVolDownButton=myConfMod->isVolDownButton; 825 #endif 826 827 //other setting 828 sprintf(ignor_list,per_s,myConfMod->ignor_list); \ 00000230 061088E0 ADD R1,R8,R6 \ 00000234 B80086E5 STR R0,[R6, #+184] \ 00000238 380297E5 LDR R0,[R7, #+568] \ 0000023C 5C0186E5 STR R0,[R6, #+348] \ 00000240 3C0297E5 LDR R0,[R7, #+572] \ 00000244 600186E5 STR R0,[R6, #+352] \ 00000248 000097E5 LDR R0,[R7, #+0] \ 0000024C 1C0186E5 STR R0,[R6, #+284] \ 00000250 900097E5 LDR R0,[R7, #+144] \ 00000254 200186E5 STR R0,[R6, #+288] \ 00000258 000197E5 LDR R0,[R7, #+256] \ 0000025C 480186E5 STR R0,[R6, #+328] \ 00000260 6800A0E3 MOV R0,#+104 \ 00000264 480D80E3 ORR R0,R0,#0x1200 \ 00000268 052080E0 ADD R2,R0,R5 \ 0000026C 680088E2 ADD R0,R8,#+104 \ 00000270 060080E0 ADD R0,R0,R6 \ 00000274 160000EF SWI +22 829 show_send_info=myConfMod->show_send_info; \ 00000278 F80F97E5 LDR R0,[R7, #+4088] 830 831 Vibra_cc=myConfMod->Vibra_cc;//vibra remainder 832 833 unread_X=myConfMod->unread_X; 834 unread_Y=myConfMod->unread_Y; 835 836 //-------------------------------- 837 // ORIGINAL CONFIG 838 //-------------------------------- 839 UIN=myConf->UIN; 840 sprintf(PASS,per_s,myConf->PASS); \ 0000027C 5C2084E2 ADD R2,R4,#+92 \ 00000280 440186E5 STR R0,[R6, #+324] \ 00000284 540F97E5 LDR R0,[R7, #+3924] \ 00000288 061088E0 ADD R1,R8,R6 \ 0000028C A40086E5 STR R0,[R6, #+164] \ 00000290 EC0697E5 LDR R0,[R7, #+1772] \ 00000294 B00086E5 STR R0,[R6, #+176] \ 00000298 F00697E5 LDR R0,[R7, #+1776] \ 0000029C 2C7084E2 ADD R7,R4,#+44 \ 000002A0 B40086E5 STR R0,[R6, #+180] \ 000002A4 000097E5 LDR R0,[R7, #+0] \ 000002A8 240186E5 STR R0,[R6, #+292] \ 000002AC 5E0F88E2 ADD R0,R8,#+376 \ 000002B0 060080E0 ADD R0,R0,R6 \ 000002B4 160000EF SWI +22 841 842 SORT_CLIST=myConf->SORT_CLIST; \ 000002B8 640597E5 LDR R0,[R7, #+1380] 843 LOG_ALL=myConf->LOG_ALL; 844 LOG_STATCH=myConf->LOG_STATCH; 845 SHOW_ACTIVE=myConf->SHOW_ACTIVE; 846 VIBR_TYPE=myConf->VIBR_TYPE; 847 VIBR_ON_CONNECT=myConf->VIBR_ON_CONNECT; 848 DEVELOP_IF=myConf->DEVELOP_IF; 849 FIRST_LETTER=myConf->FIRST_LETTER; 850 851 HISTORY_TYPE=myConf->HISTORY_TYPE; 852 853 854 sprintf(HIST_PATH,per_s,myConf->HIST_PATH); \ 000002BC 732F84E2 ADD R2,R4,#+460 \ 000002C0 C40086E5 STR R0,[R6, #+196] \ 000002C4 3C0C97E5 LDR R0,[R7, #+3132] \ 000002C8 061088E0 ADD R1,R8,R6 \ 000002CC 380186E5 STR R0,[R6, #+312] \ 000002D0 1C0D97E5 LDR R0,[R7, #+3356] \ 000002D4 3C0186E5 STR R0,[R6, #+316] \ 000002D8 CC0B97E5 LDR R0,[R7, #+3020] \ 000002DC 2C0186E5 STR R0,[R6, #+300] \ 000002E0 7000A0E3 MOV R0,#+112 \ 000002E4 400D80E3 ORR R0,R0,#0x1000 \ 000002E8 049080E0 ADD R9,R0,R4 \ 000002EC 600099E5 LDR R0,[R9, #+96] \ 000002F0 300186E5 STR R0,[R6, #+304] \ 000002F4 D00099E5 LDR R0,[R9, #+208] \ 000002F8 280186E5 STR R0,[R6, #+296] \ 000002FC B40497E5 LDR R0,[R7, #+1204] \ 00000300 340186E5 STR R0,[R6, #+308] \ 00000304 D40597E5 LDR R0,[R7, #+1492] \ 00000308 400186E5 STR R0,[R6, #+320] \ 0000030C AC0C97E5 LDR R0,[R7, #+3244] \ 00000310 4C0186E5 STR R0,[R6, #+332] \ 00000314 9D0E86E2 ADD R0,R6,#+2512 \ 00000318 160000EF SWI +22 855 sprintf(NATICQ_HOST,per_s,myConf->NATICQ_HOST); \ 0000031C C02084E2 ADD R2,R4,#+192 \ 00000320 061088E0 ADD R1,R8,R6 \ 00000324 A10E86E2 ADD R0,R6,#+2576 \ 00000328 160000EF SWI +22 856 NATICQ_PORT=myConf->NATICQ_PORT; \ 0000032C 400197E5 LDR R0,[R7, #+320] \ 00000330 D80186E5 STR R0,[R6, #+472] 857 RECONNECT_TIME=myConf->RECONNECT_TIME; //2058 \ 00000334 700197E5 LDR R0,[R7, #+368] 858 859 vibraPower=myConf->vibraPower; 860 861 IDLEICON_X=myConf->IDLEICON_X; 862 IDLEICON_Y=myConf->IDLEICON_Y; 863 864 I_COLOR=myConf->I_COLOR; 865 TO_COLOR=myConf->TO_COLOR; 866 X_COLOR=myConf->X_COLOR; 867 O_I_COLOR=myConf->O_I_COLOR; 868 O_TO_COLOR=myConf->O_TO_COLOR; 869 O_X_COLOR=myConf->O_X_COLOR; 870 871 ED_FONT_SIZE=myConf->ED_FONT_SIZE; 872 ED_H_FONT_SIZE=myConf->ED_H_FONT_SIZE; 873 ED_X_FONT_SIZE=myConf->ED_X_FONT_SIZE; 874 O_ED_FONT_SIZE=myConf->O_ED_FONT_SIZE; 875 O_ED_H_FONT_SIZE=myConf->O_ED_H_FONT_SIZE; 876 O_ED_X_FONT_SIZE=myConf->O_ED_X_FONT_SIZE; 877 878 ACK_COLOR=myConf->ACK_COLOR; 879 UNACK_COLOR=myConf->UNACK_COLOR; 880 881 color_choose=myConf->color_choose; 882 883 ENA_AUTO_XTXT=myConf->ENA_AUTO_XTXT; 884 NOT_LOG_SAME_XTXT=myConf->NOT_LOG_SAME_XTXT; 885 LOG_XTXT=myConf->LOG_XTXT; 886 887 HISTORY_BUFFER=myConf->HISTORY_BUFFER; 888 889 //Illumination by BoBa 19.04.2007 890 /////////// 891 ILL_DISP_RECV=myConf->ILL_DISP_RECV; 892 ILL_KEYS_RECV=myConf->ILL_KEYS_RECV; 893 ILL_DISP_SEND=myConf->ILL_DISP_SEND; 894 ILL_KEYS_SEND=myConf->ILL_KEYS_SEND; 895 ILL_SEND_TMR=myConf->ILL_SEND_TMR; 896 ILL_SEND_FADE=myConf->ILL_SEND_FADE; 897 ILL_RECV_TMR=myConf->ILL_RECV_TMR; 898 ILL_RECV_FADE=myConf->ILL_RECV_FADE; 899 ILL_OFF_FADE=myConf->ILL_OFF_FADE; 900 901 //=============================Проигрывание звука======================= 902 903 sprintf(sndStartup,per_s,myConf->sndStartup); \ 00000338 061088E0 ADD R1,R8,R6 \ 0000033C DC0186E5 STR R0,[R6, #+476] \ 00000340 300099E5 LDR R0,[R9, #+48] \ 00000344 500186E5 STR R0,[R6, #+336] \ 00000348 800497E5 LDR R0,[R7, #+1152] \ 0000034C 540186E5 STR R0,[R6, #+340] \ 00000350 840497E5 LDR R0,[R7, #+1156] \ 00000354 580186E5 STR R0,[R6, #+344] \ 00000358 700697E5 LDR R0,[R7, #+1648] \ 0000035C 640186E5 STR R0,[R6, #+356] \ 00000360 A00697E5 LDR R0,[R7, #+1696] \ 00000364 680186E5 STR R0,[R6, #+360] \ 00000368 D00697E5 LDR R0,[R7, #+1744] \ 0000036C 6C0186E5 STR R0,[R6, #+364] \ 00000370 900797E5 LDR R0,[R7, #+1936] \ 00000374 700186E5 STR R0,[R6, #+368] \ 00000378 C00797E5 LDR R0,[R7, #+1984] \ 0000037C 740186E5 STR R0,[R6, #+372] \ 00000380 F00797E5 LDR R0,[R7, #+2032] \ 00000384 780186E5 STR R0,[R6, #+376] \ 00000388 000797E5 LDR R0,[R7, #+1792] \ 0000038C 7C0186E5 STR R0,[R6, #+380] \ 00000390 300797E5 LDR R0,[R7, #+1840] \ 00000394 800186E5 STR R0,[R6, #+384] \ 00000398 600797E5 LDR R0,[R7, #+1888] \ 0000039C 840186E5 STR R0,[R6, #+388] \ 000003A0 200897E5 LDR R0,[R7, #+2080] \ 000003A4 880186E5 STR R0,[R6, #+392] \ 000003A8 500897E5 LDR R0,[R7, #+2128] \ 000003AC 8C0186E5 STR R0,[R6, #+396] \ 000003B0 800897E5 LDR R0,[R7, #+2176] \ 000003B4 900186E5 STR R0,[R6, #+400] \ 000003B8 B00897E5 LDR R0,[R7, #+2224] \ 000003BC 940186E5 STR R0,[R6, #+404] \ 000003C0 E00897E5 LDR R0,[R7, #+2272] \ 000003C4 980186E5 STR R0,[R6, #+408] \ 000003C8 100997E5 LDR R0,[R7, #+2320] \ 000003CC A00086E5 STR R0,[R6, #+160] \ 000003D0 FC0D97E5 LDR R0,[R7, #+3580] \ 000003D4 9C0186E5 STR R0,[R6, #+412] \ 000003D8 6C0E97E5 LDR R0,[R7, #+3692] \ 000003DC A00186E5 STR R0,[R6, #+416] \ 000003E0 8C0D97E5 LDR R0,[R7, #+3468] \ 000003E4 A40186E5 STR R0,[R6, #+420] \ 000003E8 DC0E97E5 LDR R0,[R7, #+3804] \ 000003EC A80186E5 STR R0,[R6, #+424] \ 000003F0 980997E5 LDR R0,[R7, #+2456] \ 000003F4 AC0186E5 STR R0,[R6, #+428] \ 000003F8 C80997E5 LDR R0,[R7, #+2504] \ 000003FC B00186E5 STR R0,[R6, #+432] \ 00000400 580A97E5 LDR R0,[R7, #+2648] \ 00000404 B80186E5 STR R0,[R6, #+440] \ 00000408 880A97E5 LDR R0,[R7, #+2696] \ 0000040C BC0186E5 STR R0,[R6, #+444] \ 00000410 B80A97E5 LDR R0,[R7, #+2744] \ 00000414 C00186E5 STR R0,[R6, #+448] \ 00000418 E80A97E5 LDR R0,[R7, #+2792] \ 0000041C C40186E5 STR R0,[R6, #+452] \ 00000420 F80997E5 LDR R0,[R7, #+2552] \ 00000424 B40186E5 STR R0,[R6, #+436] \ 00000428 280A97E5 LDR R0,[R7, #+2600] \ 0000042C C80186E5 STR R0,[R6, #+456] \ 00000430 180B97E5 LDR R0,[R7, #+2840] \ 00000434 CC0186E5 STR R0,[R6, #+460] \ 00000438 D40E88E2 ADD R0,R8,#+3392 \ 0000043C 042080E0 ADD R2,R0,R4 \ 00000440 690E86E2 ADD R0,R6,#+1680 \ 00000444 160000EF SWI +22 904 sprintf(sndSrvMsg,per_s,myConf->sndSrvMsg); \ 00000448 B800A0E3 MOV R0,#+184 \ 0000044C 480D80E3 ORR R0,R0,#0x1200 \ 00000450 042080E0 ADD R2,R0,R4 \ 00000454 061088E0 ADD R1,R8,R6 \ 00000458 6D0E86E2 ADD R0,R6,#+1744 \ 0000045C 160000EF SWI +22 905 sprintf(sndGlobal,per_s,myConf->sndGlobal); \ 00000460 2400A0E3 MOV R0,#+36 \ 00000464 4C0D80E3 ORR R0,R0,#0x1300 \ 00000468 042080E0 ADD R2,R0,R4 \ 0000046C 061088E0 ADD R1,R8,R6 \ 00000470 710E86E2 ADD R0,R6,#+1808 \ 00000474 160000EF SWI +22 906 sprintf(sndGlobal2,per_s,myConf->sndGlobal2); \ 00000478 6800A0E3 MOV R0,#+104 \ 0000047C 500D80E3 ORR R0,R0,#0x1400 \ 00000480 042080E0 ADD R2,R0,R4 \ 00000484 061088E0 ADD R1,R8,R6 \ 00000488 750E86E2 ADD R0,R6,#+1872 \ 0000048C 160000EF SWI +22 907 sprintf(sndMsg,per_s,myConf->sndMsg); \ 00000490 9000A0E3 MOV R0,#+144 \ 00000494 4C0D80E3 ORR R0,R0,#0x1300 \ 00000498 042080E0 ADD R2,R0,R4 \ 0000049C 061088E0 ADD R1,R8,R6 \ 000004A0 790E86E2 ADD R0,R6,#+1936 \ 000004A4 160000EF SWI +22 908 sprintf(sndMsg2,per_s,myConf->sndMsg2); \ 000004A8 D400A0E3 MOV R0,#+212 \ 000004AC 500D80E3 ORR R0,R0,#0x1400 \ 000004B0 042080E0 ADD R2,R0,R4 \ 000004B4 061088E0 ADD R1,R8,R6 \ 000004B8 7D0E86E2 ADD R0,R6,#+2000 \ 000004BC 160000EF SWI +22 909 extended_sounds=myConf->extended_sounds; \ 000004C0 6C0199E5 LDR R0,[R9, #+364] 910 sprintf(sndMsgSent,per_s,myConf->sndMsgSent); \ 000004C4 061088E0 ADD R1,R8,R6 \ 000004C8 D00186E5 STR R0,[R6, #+464] \ 000004CC EF0E88E2 ADD R0,R8,#+3824 \ 000004D0 042080E0 ADD R2,R0,R4 \ 000004D4 810E86E2 ADD R0,R6,#+2064 \ 000004D8 160000EF SWI +22 911 sndVolume=myConf->sndVolume; \ 000004DC 000099E5 LDR R0,[R9, #+0] 912 913 //----------------------------------------- 914 915 vibraPower=myConf->vibraPower; 916 917 sprintf(TEMPLATES_PATH,per_s,myConf->TEMPLATES_PATH); \ 000004E0 FA2F84E2 ADD R2,R4,#+1000 \ 000004E4 D40186E5 STR R0,[R6, #+468] \ 000004E8 300099E5 LDR R0,[R9, #+48] \ 000004EC 061088E0 ADD R1,R8,R6 \ 000004F0 500186E5 STR R0,[R6, #+336] \ 000004F4 8D0E86E2 ADD R0,R6,#+2256 \ 000004F8 160000EF SWI +22 918 sprintf(ICON_PATH,per_s,myConf->ICON_PATH); \ 000004FC C42F84E2 ADD R2,R4,#+784 \ 00000500 061088E0 ADD R1,R8,R6 \ 00000504 910E86E2 ADD R0,R6,#+2320 \ 00000508 160000EF SWI +22 919 sprintf(SMILE_FILE,per_s,myConf->SMILE_FILE); \ 0000050C 8E2F84E2 ADD R2,R4,#+568 \ 00000510 061088E0 ADD R1,R8,R6 \ 00000514 890E86E2 ADD R0,R6,#+2192 \ 00000518 160000EF SWI +22 920 sprintf(SMILE_PATH,per_s,myConf->SMILE_PATH); \ 0000051C A92F84E2 ADD R2,R4,#+676 \ 00000520 061088E0 ADD R1,R8,R6 \ 00000524 950E86E2 ADD R0,R6,#+2384 \ 00000528 160000EF SWI +22 921 sprintf(XSTATUSES_PATH,per_s,myConf->XSTATUSES_PATH); \ 0000052C DF2F84E2 ADD R2,R4,#+892 \ 00000530 061088E0 ADD R1,R8,R6 \ 00000534 990E86E2 ADD R0,R6,#+2448 \ 00000538 160000EF SWI +22 922 923 924 //----------------------------------------- 925 926 mfree(myConf); \ 0000053C 0400A0E1 MOV R0,R4 \ 00000540 150000EF SWI +21 927 mfree(myConfMod); \ 00000544 0500A0E1 MOV R0,R5 \ 00000548 150000EF SWI +21 \ 0000054C F087BDE8 POP {R4-R10,PC} 928 } 929 else 930 { 931 LockSched(); \ ??UpdateConfig_3: \ 00000550 460100EF SWI +326 932 ShowMSG(1,(int)"Can't open configs!"); \ 00000554 0810A0E1 MOV R1,R8 \ 00000558 0100A0E3 MOV R0,#+1 \ 0000055C 480100EF SWI +328 933 UnlockSched(); \ 00000560 470100EF SWI +327 934 void ElfKiller(void); 935 SUBPROC((void *)ElfKiller); \ 00000564 ........ LDR R0,??DataTable1 ;; ElfKiller \ 00000568 710100EF SWI +369 936 } 937 } \ 0000056C F087BDE8 POP {R4-R10,PC} ;; return \ ??UpdateConfig_0: \ 00000570 ........ DC32 `?` 938 939 //--------------------------------------------------------------------// 940 //--------------------------------------------------------------------// 941 //--------------------------------------------------------------------// 942 \ In segment CODE, align 4, keep-with-next 943 int get_file_size(char* fname) 944 { \ get_file_size: \ 00000000 00402DE9 PUSH {LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 945 unsigned int err; 946 FSTATS fs; 947 if ((GetFileStats(fname,&fs,&err))==-1) return 0; \ 00000008 0D20A0E1 MOV R2,SP \ 0000000C 04108DE2 ADD R1,SP,#+4 \ 00000010 840000EF SWI +132 \ 00000014 010070E3 CMN R0,#+1 948 return (fs.size); \ 00000018 08009D15 LDRNE R0,[SP, #+8] \ 0000001C 2CD08DE2 ADD SP,SP,#+44 \ 00000020 0000A003 MOVEQ R0,#+0 \ 00000024 0080BDE8 POP {PC} ;; return 949 } 950 951 extern int *XStatusesIconArray; 952 953 #ifndef NEWSGOLD 954 #define SEND_TIMER 955 #endif 956 957 #ifdef ELKA 958 #pragma swi_number=54 959 __swi __arm void SLI_SetState(unsigned char state); 960 #endif 961 962 #define IN_TICKS(sec) (sec * TMR_SECOND) 963 964 int main_d; 965 int align=0; 966 //int space=1; 967 void *canvasdata; 968 int paused_height; 969 WSHDR *wsBuffer;//мультибуффер 970 971 char talk_sound[128]; 972 int uins; 973 //char m_1[]="unofficial! private use only"; 974 //char m_2[]="mod by (c)Evilfox 315384924"; 975 char unread_msg_info[64]; 976 977 int saver_on; 978 979 #ifdef NEWSGOLD 980 extern char teast2[256]; 981 #endif 982 983 #ifdef ELKA 984 char last_msg_buffer[4048]; 985 #endif 986 987 988 ///////////////////////////////////////////////auto ping//////////////////// 989 GBSTMR mytmr3; 990 static void PingToServer2(void) 991 { 992 TPKT *p; 993 p=malloc(sizeof(PKT)+sizeof(TTime)); 994 GetDateTime(NULL,(TTime *)p->data); 995 p->pkt.uin=0; 996 p->pkt.type=T_ECHO; 997 p->pkt.data_len=sizeof(TTime); 998 SUBPROC((void *)SendAnswer,0,p); 999 } 1000 1001 int Is_PING_On; 1002 \ In segment CODE, align 4, keep-with-next 1003 void Pinger2() 1004 { \ Pinger2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1005 if(Is_PING_On) \ 00000004 ........ LDR R5,??DataTable2 ;; Pinger2 \ 00000008 ........ LDR R6,??DataTable20 ;; S_ICONS \ 0000000C B54EA0E3 MOV R4,#+2896 \ 00000010 FC0196E5 LDR R0,[R6, #+508] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1500000A BEQ ??Pinger2_0 1006 { 1007 PingToServer2(); \ 0000001C 1000A0E3 MOV R0,#+16 \ 00000020 140000EF SWI +20 \ 00000024 0070A0E1 MOV R7,R0 \ 00000028 081087E2 ADD R1,R7,#+8 \ 0000002C 0000A0E3 MOV R0,#+0 \ 00000030 B40000EF SWI +180 \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 000087E5 STR R0,[R7, #+0] \ 0000003C 1200A0E3 MOV R0,#+18 \ 00000040 B400C7E1 STRH R0,[R7, #+4] \ 00000044 0800A0E3 MOV R0,#+8 \ 00000048 B600C7E1 STRH R0,[R7, #+6] \ 0000004C ........ LDR R0,??DataTable4 ;; SendAnswer \ 00000050 0720A0E1 MOV R2,R7 \ 00000054 0010A0E3 MOV R1,#+0 \ 00000058 710100EF SWI +369 1008 GBS_StartTimerProc(&mytmr3, 12960, Pinger2); \ 0000005C 0520A0E1 MOV R2,R5 \ 00000060 A010A0E3 MOV R1,#+160 \ 00000064 C81D81E3 ORR R1,R1,#0x3200 \ 00000068 060084E0 ADD R0,R4,R6 \ 0000006C 4D0000EF SWI +77 \ 00000070 F080BDE8 POP {R4-R7,PC} 1009 } 1010 else 1011 GBS_StartTimerProc(&mytmr3, 2160, Pinger2); \ ??Pinger2_0: \ 00000074 0520A0E1 MOV R2,R5 \ 00000078 871EA0E3 MOV R1,#+2160 \ 0000007C 060084E0 ADD R0,R4,R6 \ 00000080 4D0000EF SWI +77 1012 } \ 00000084 F080BDE8 POP {R4-R7,PC} ;; return 1013 1014 //////////////////////////////////////auto ping///////////////////////////// 1015 1016 extern volatile int total_smiles; 1017 extern volatile int total_xstatuses; 1018 extern volatile int xstatuses_load; 1019 extern volatile int pictures_max; //2026rev 1020 extern volatile int pictures_loaded; //2026rev 1021 1022 #ifdef ELKA 1023 int Is_SLI_On;//мигаем светодиодом 1024 #endif 1025 1026 int Is_SMARTCPU_On;//Вывод сообщений на гэ 1027 int Is_INC_On;//Popup message 1028 int Is_ILU_On;//Режим подсветки 1029 int Is_Double_Vibra_On;//Режим напоминания 1030 int total_unread; 1031 int total_unread2; 1032 1033 #ifdef ELKA 1034 const int SLI_TYPE=1; 1035 #endif 1036 1037 char PINGO[256]; 1038 1039 #ifdef ELKA 1040 extern const unsigned int SLI_time; 1041 extern const unsigned int SLI_time2; 1042 #endif 1043 #define USE_MLMENU 1044 1045 #define TMR_SECOND 216 1046 1047 //IPC 1048 const char ipc_my_name[32]=IPC_NATICQ_NAME; 1049 const char ipc_xtask_name[]=IPC_XTASK_NAME; 1050 const char ipc_test_name[]="test"; 1051 IPC_REQ gipc; 1052 1053 1054 char elf_path[256]; 1055 int maincsm_id; 1056 int maingui_id; 1057 \ In segment CODE, align 4, keep-with-next 1058 void SMART_REDRAW(void) 1059 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 1060 int f; 1061 LockSched(); \ 00000004 460100EF SWI +326 1062 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 536 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 1063 UnlockSched(); \ 00000018 470100EF SWI +327 1064 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 1065 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 536 1066 1067 //По 10 секунд 1068 #define ACTIVE_TIME 360 1069 1070 //Максимальное количество сообщений в логе 1071 #define MAXLOGMSG (20) 1072 1073 // Строковые описания статусов 1074 1075 const char S_OFFLINE[]="Offline"; 1076 const char S_INVISIBLE[]="Invisible"; 1077 const char S_AWAY[]="Away"; 1078 const char S_NA[]="N/A"; 1079 const char S_OCCUPIED[]="Occupied"; 1080 const char S_DND[]="DND"; 1081 const char S_ONLINE[]="Online"; 1082 const char S_FFC[]="FFC"; 1083 1084 volatile int SENDMSGCOUNT; 1085 #ifdef kluchnik 1086 int IsActiveUp=1; 1087 #else 1088 int IsActiveUp=0; 1089 #endif 1090 int Is_Vibra_Enabled; \ In segment DATA_Z, align 4, align-sorted 1091 int Is_Id3tag_Enabled; \ Is_Id3tag_Enabled: \ 00000000 DS8 4 1092 unsigned int Is_Sounds_Enabled; 1093 int Is_Show_Offline; 1094 int Is_Show_Groups; 1095 1096 int S_ICONS[TOTAL_ICONS+1]; 1097 1098 #define EOP -10 1099 int CurrentStatus; 1100 #ifdef NEWSGOLD 1101 extern int CurrentXStatus; 1102 #else 1103 int CurrentXStatus; 1104 #endif 1105 1106 WSHDR *ews; 1107 1108 1109 static const char * const icons_names[TOTAL_ICONS]= 1110 { 1111 "offline.png", 1112 "invisible.png", 1113 "away.png", 1114 "na.png", 1115 "occupied.png", 1116 "dnd.png", 1117 "depression.png", 1118 "evil.png", 1119 "home.png", 1120 "lunch.png", 1121 "work.png", 1122 "online.png", 1123 "ffc.png", 1124 "message.png", 1125 "unknown.png", 1126 "groupon.png", 1127 "groupoff.png", 1128 "null.png", 1129 "addcont.png", 1130 "head.png", 1131 "logo.png", 1132 "ping.png", 1133 "settings.png", 1134 "vis1.png", 1135 "vis2.png", 1136 "vis3.png", 1137 "vis4.png", 1138 "vis5.png" 1139 }; 1140 1141 1142 1143 ////=================================away_msg============== 1144 1145 #ifdef NEWSGOLD 1146 #pragma swi_number=0x0C5 1147 __swi __arm int IsIdleUiOnTop();//На сг нет этой функции 1148 #else \ In segment CODE, align 4, keep-with-next 1149 int IsIdleUiOnTop(void) 1150 { \ IsIdleUiOnTop: \ 00000000 00402DE9 PUSH {LR} 1151 void *icsm=FindCSMbyID(CSM_root()->idle_id); \ 00000004 068100EF SWI +33030 \ 00000008 040090E5 LDR R0,[R0, #+4] \ 0000000C 080100EF SWI +264 1152 if (IsGuiOnTop(((int*)icsm)[DISPLACE_OF_IDLEGUI_ID/4 ])) \ 00000010 280090E5 LDR R0,[R0, #+40] \ 00000014 350100EF SWI +309 \ 00000018 000050E3 CMP R0,#+0 1153 return(1); \ 0000001C 0100A013 MOVNE R0,#+1 1154 else 1155 return(0); \ 00000020 0080BDE8 POP {PC} ;; return 1156 } 1157 #endif 1158 1159 int msg_away_timer=0;//Счетчик для автостатуса 1160 char away_msg[264];//Само сообщение для ответа 1161 char away_msg_time[64];//Время когда сработал таймер 1162 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 1163 //char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 1164 char tim_zone[16]; \ In segment DATA_Z, align 4, align-sorted 1165 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 1166 int timemin; \ timemin: \ 00000000 DS8 4 1167 int away_m;//состояние автоответчика 1168 int status_rem;//Для сохранения текущего статуса 1169 int change_back_status;//вернуть предыдущий статус или нет 1170 GBSTMR away_tmr; 1171 1172 1173 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 1174 void FreeXText2(CLIST *t) 1175 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1176 if (t->xtext2) {mfree(t->xtext2);t->xtext2=NULL;} \ 00000008 980094E5 LDR R0,[R4, #+152] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 980084E5 STR R0,[R4, #+152] 1177 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1178 \ In segment CODE, align 4, keep-with-next 1179 void away_timer()//Таймер автостатуса 1180 { \ away_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1181 if(msg_away_timer==AUTO_ENGADE) \ 00000004 ........ LDR R4,??DataTable20 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 300294E5 LDR R0,[R4, #+560] \ 00000010 D81094E5 LDR R1,[R4, #+216] \ 00000014 010050E1 CMP R0,R1 \ 00000018 2000001A BNE ??away_timer_0 1182 { 1183 TTime tt; 1184 GetDateTime(NULL,&tt); 1185 sprintf(away_msg_time_dace, "%2d:%2d", tt.hour, tt.min); \ 0000001C AC509FE5 LDR R5,??away_timer_1 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C FC3092E5 LDR R3,[R2, #+252] \ 00000010 B800A0E3 MOV R0,#+184 \ 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 1207 { 1208 case 0: 1209 sprintf(tim_zone, "GMT -12:00"); \ ??init_time_zone_2: \ 00000050 601F81E2 ADD R1,R1,#+384 \ 00000054 040000EA B ??init_time_zone_3 1210 break; 1211 case 1: 1212 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} 1213 break; 1214 case 2: 1215 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} 1216 break; 1217 case 3: 1218 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_6: \ 00000078 571F81E2 ADD R1,R1,#+348 \ 0000007C FAFFFFEA B ??init_time_zone_3 1219 break; 1220 case 4: 1221 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_7: \ 00000080 541F81E2 ADD R1,R1,#+336 \ 00000084 F8FFFFEA B ??init_time_zone_3 1222 break; 1223 case 5: 1224 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_8: \ 00000088 511F81E2 ADD R1,R1,#+324 \ 0000008C F6FFFFEA B ??init_time_zone_3 1225 break; 1226 case 6: 1227 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_9: \ 00000090 4E1F81E2 ADD R1,R1,#+312 \ 00000094 F4FFFFEA B ??init_time_zone_3 1228 break; 1229 case 7: 1230 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_10: \ 00000098 4B1F81E2 ADD R1,R1,#+300 \ 0000009C F2FFFFEA B ??init_time_zone_3 1231 break; 1232 case 8: 1233 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_11: \ 000000A0 481F81E2 ADD R1,R1,#+288 \ 000000A4 F0FFFFEA B ??init_time_zone_3 1234 break; 1235 case 9: 1236 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_12: \ 000000A8 451F81E2 ADD R1,R1,#+276 \ 000000AC EEFFFFEA B ??init_time_zone_3 1237 break; 1238 case 10: 1239 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_13: \ 000000B0 421F81E2 ADD R1,R1,#+264 \ 000000B4 ECFFFFEA B ??init_time_zone_3 1240 break; 1241 case 11: 1242 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_14: \ 000000B8 FC1081E2 ADD R1,R1,#+252 \ 000000BC EAFFFFEA B ??init_time_zone_3 1243 break; 1244 case 12: 1245 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_15: \ 000000C0 F01081E2 ADD R1,R1,#+240 \ 000000C4 E8FFFFEA B ??init_time_zone_3 1246 break; 1247 case 13: 1248 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_16: \ 000000C8 E41081E2 ADD R1,R1,#+228 \ 000000CC E6FFFFEA B ??init_time_zone_3 1249 break; 1250 case 14: 1251 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_17: \ 000000D0 D81081E2 ADD R1,R1,#+216 \ 000000D4 E4FFFFEA B ??init_time_zone_3 1252 break; 1253 case 15: 1254 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_18: \ 000000D8 CC1081E2 ADD R1,R1,#+204 \ 000000DC E2FFFFEA B ??init_time_zone_3 1255 break; 1256 case 16: 1257 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_19: \ 000000E0 C01081E2 ADD R1,R1,#+192 \ 000000E4 E0FFFFEA B ??init_time_zone_3 1258 break; 1259 case 17: 1260 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_20: \ 000000E8 B41081E2 ADD R1,R1,#+180 \ 000000EC DEFFFFEA B ??init_time_zone_3 1261 break; 1262 case 18: 1263 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_21: \ 000000F0 A81081E2 ADD R1,R1,#+168 \ 000000F4 DCFFFFEA B ??init_time_zone_3 1264 break; 1265 case 19: 1266 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_22: \ 000000F8 9C1081E2 ADD R1,R1,#+156 \ 000000FC DAFFFFEA B ??init_time_zone_3 1267 break; 1268 case 20: 1269 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_23: \ 00000100 901081E2 ADD R1,R1,#+144 \ 00000104 D8FFFFEA B ??init_time_zone_3 1270 break; 1271 case 21: 1272 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_24: \ 00000108 841081E2 ADD R1,R1,#+132 \ 0000010C D6FFFFEA B ??init_time_zone_3 1273 break; 1274 case 22: 1275 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_25: \ 00000110 781081E2 ADD R1,R1,#+120 \ 00000114 D4FFFFEA B ??init_time_zone_3 1276 break; 1277 case 23: 1278 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_26: \ 00000118 6C1081E2 ADD R1,R1,#+108 \ 0000011C D2FFFFEA B ??init_time_zone_3 1279 break; 1280 case 24: 1281 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_27: \ 00000120 601081E2 ADD R1,R1,#+96 \ 00000124 D0FFFFEA B ??init_time_zone_3 1282 break; 1283 case 25: 1284 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_28: \ 00000128 541081E2 ADD R1,R1,#+84 \ 0000012C CEFFFFEA B ??init_time_zone_3 1285 break; 1286 case 26: 1287 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_29: \ 00000130 481081E2 ADD R1,R1,#+72 \ 00000134 CCFFFFEA B ??init_time_zone_3 1288 break; 1289 case 27: 1290 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_30: \ 00000138 3C1081E2 ADD R1,R1,#+60 \ 0000013C CAFFFFEA B ??init_time_zone_3 1291 break; 1292 case 28: 1293 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_31: \ 00000140 301081E2 ADD R1,R1,#+48 \ 00000144 C8FFFFEA B ??init_time_zone_3 1294 break; 1295 case 29: 1296 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_32: \ 00000148 241081E2 ADD R1,R1,#+36 \ 0000014C C6FFFFEA B ??init_time_zone_3 1297 break; 1298 case 30: 1299 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_33: \ 00000150 181081E2 ADD R1,R1,#+24 \ 00000154 C4FFFFEA B ??init_time_zone_3 1300 break; 1301 case 31: 1302 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_34: \ 00000158 0C1081E2 ADD R1,R1,#+12 \ 0000015C C2FFFFEA B ??init_time_zone_3 1303 break; 1304 case 32: 1305 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_35: \ 00000160 020080E0 ADD R0,R0,R2 \ 00000164 160000EF SWI +22 1306 break; 1307 } 1308 } \ ??init_time_zone_36: \ 00000168 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 0000016C ........ DC32 `?` 1309 1310 //=================================away_msg=============== 1311 //////////////////////////////////////////tozhe dlja auto ping/////////////// 1312 \ In segment CODE, align 4, keep-with-next 1313 void DrawPing(void *canv) 1314 { 1315 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R0,??DataTable20 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 D01090E5 LDR R1,[R0, #+208] \ 0000000C B62E80E2 ADD R2,R0,#+2912 \ 00000010 02002DE9 PUSH {R1} \ 00000014 CC1090E5 LDR R1,[R0, #+204] \ 00000018 02002DE9 PUSH {R1} \ 0000001C E43190E5 LDR R3,[R0, #+484] \ 00000020 AC1090E5 LDR R1,[R0, #+172] \ 00000024 A80090E5 LDR R0,[R0, #+168] \ 00000028 ........ _BLF PrintField,??PrintField??rA 1316 } \ 0000002C 0380BDE8 POP {R0,R1,PC} ;; return 1317 1318 //////////////////////////////////////////tozhe dlja auto ping/////////////// 1319 1320 GBSTMR mytmr; 1321 GBSTMR mytmr2; 1322 volatile int vibra_count; 1323 #ifdef ELKA 1324 void SLI_Off(void); 1325 #endif 1326 void start_vibra2(void); 1327 1328 //////////////////////////reminder timer///////////////////////// 1329 \ In segment CODE, align 4, keep-with-next 1330 void Remind_Timer2() 1331 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 1332 if (total_unread) \ 00000004 ........ LDR R4,??DataTable20 ;; S_ICONS \ 00000008 B00294E5 LDR R0,[R4, #+688] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 1333 { 1334 vibra_count=Vibra_cc; \ 00000014 A40094E5 LDR R0,[R4, #+164] \ 00000018 7C0284E5 STR R0,[R4, #+636] 1335 start_vibra2(); \ 0000001C ........ BL start_vibra2 1336 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ 00000020 ........ LDR R2,??DataTable10 ;; Remind_Timer2 \ 00000024 5010A0E3 MOV R1,#+80 \ 00000028 641D81E3 ORR R1,R1,#0x1900 \ 0000002C E800A0E3 MOV R0,#+232 \ 00000030 D00E80E3 ORR R0,R0,#0xD00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 1337 } 1338 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return 1339 \ In segment CODE, align 4, keep-with-next 1340 void Reminder_timer() 1341 { 1342 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable10 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 3560 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 1343 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 S_ICONS + 3560 1344 //////////////////////////reminder timer///////////////////////// 1345 1346 //////////////////////////uptime////////////////////////// 1347 int Is_UPTIME_On; 1348 //int xstatus_old; 1349 int uptimeHour; 1350 //int minimum_xstatus; 1351 int uptimeMin; 1352 //int maximum; 1353 int uptimeSec; 1354 \ In segment CODE, align 4, keep-with-next 1355 void UptimeMinHour() 1356 { 1357 uptimeSec++; \ UptimeMinHour: \ 00000000 ........ LDR R0,??DataTable20 ;; S_ICONS \ 00000004 501290E5 LDR R1,[R0, #+592] 1358 if(uptimeSec==60) \ 00000008 4C2290E5 LDR R2,[R0, #+588] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 1359 { 1360 // if(saver_on) reftes(); 1361 uptimeSec=0; \ 00000014 0010A003 MOVEQ R1,#+0 1362 uptimeMin++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C 501280E5 STR R1,[R0, #+592] 1363 } 1364 if(uptimeMin==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??UptimeMinHour_0 1365 { 1366 uptimeMin=0; 1367 uptimeHour++; \ 00000028 481290E5 LDR R1,[R0, #+584] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 481280E5 STR R1,[R0, #+584] \ ??UptimeMinHour_0: \ 00000038 4C2280E5 STR R2,[R0, #+588] 1368 } 1369 } \ 0000003C 1EFF2FE1 BX LR ;; return 1370 1371 GBSTMR mytmr4; 1372 #ifdef NEWSGOLD 1373 GBSTMR tracktmr; 1374 int tracktimer; 1375 #endif 1376 \ In segment CODE, align 4, keep-with-next 1377 void upTime() 1378 { \ upTime: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1379 if(connect_state==3) \ 00000004 44509FE5 LDR R5,??upTime_0 ;; upTime \ 00000008 ........ LDR R6,??DataTable20 ;; S_ICONS \ 0000000C F840A0E3 MOV R4,#+248 \ 00000010 8C0296E5 LDR R0,[R6, #+652] \ 00000014 D04E84E3 ORR R4,R4,#0xD00 \ 00000018 030050E3 CMP R0,#+3 \ 0000001C 0100001A BNE ??upTime_1 1380 { 1381 UptimeMinHour(); \ 00000020 ........ BL UptimeMinHour 1382 #ifdef NEWSGOLD 1383 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ 1384 { 1385 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); 1386 tracktimer=0; 1387 } 1388 tracktimer++; 1389 #endif 1390 GBS_StartTimerProc(&mytmr4, 216, upTime); \ 00000024 040000EA B ??upTime_2 1391 } 1392 else 1393 { 1394 if(!Pause_Time) \ ??upTime_1: \ 00000028 E00096E5 LDR R0,[R6, #+224] \ 0000002C 000050E3 CMP R0,#+0 1395 { 1396 uptimeHour=0; \ 00000030 48028605 STREQ R0,[R6, #+584] 1397 uptimeMin=0; \ 00000034 4C028605 STREQ R0,[R6, #+588] 1398 uptimeSec=0; \ 00000038 50028605 STREQ R0,[R6, #+592] 1399 } 1400 GBS_StartTimerProc(&mytmr4, 216, upTime); \ ??upTime_2: \ 0000003C 0520A0E1 MOV R2,R5 \ 00000040 D810A0E3 MOV R1,#+216 \ 00000044 060084E0 ADD R0,R4,R6 \ 00000048 4D0000EF SWI +77 1401 } 1402 } \ 0000004C 7080BDE8 POP {R4-R6,PC} ;; return \ ??upTime_0: \ 00000050 ........ DC32 upTime 1403 1404 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 1405 void DrawOnlineTime(void *canv) 1406 { 1407 if(connect_state==3) \ DrawOnlineTime: \ 00000000 6C109FE5 LDR R1,??DrawOnlineTime_0 ;; `?` \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R5,??DataTable20 ;; S_ICONS \ 0000000C 0840A0E3 MOV R4,#+8 \ 00000010 8C0295E5 LDR R0,[R5, #+652] \ 00000014 E04E84E3 ORR R4,R4,#0xE00 \ 00000018 030050E3 CMP R0,#+3 \ 0000001C 0800001A BNE ??DrawOnlineTime_1 1408 { 1409 sprintf(onlineTime,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); \ 00000020 500295E5 LDR R0,[R5, #+592] \ 00000024 081081E2 ADD R1,R1,#+8 \ 00000028 01002DE9 PUSH {R0} \ 0000002C 4C3295E5 LDR R3,[R5, #+588] \ 00000030 482295E5 LDR R2,[R5, #+584] \ 00000034 050084E0 ADD R0,R4,R5 \ 00000038 160000EF SWI +22 \ 0000003C 04D08DE2 ADD SP,SP,#+4 \ 00000040 010000EA B ??DrawOnlineTime_2 1410 } 1411 else 1412 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_1: \ 00000044 050084E0 ADD R0,R4,R5 \ 00000048 160000EF SWI +22 1413 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_2: \ 0000004C D00095E5 LDR R0,[R5, #+208] \ 00000050 052084E0 ADD R2,R4,R5 \ 00000054 01002DE9 PUSH {R0} \ 00000058 CC0095E5 LDR R0,[R5, #+204] \ 0000005C 01002DE9 PUSH {R0} \ 00000060 E43195E5 LDR R3,[R5, #+484] \ 00000064 F41095E5 LDR R1,[R5, #+244] \ 00000068 F00095E5 LDR R0,[R5, #+240] \ 0000006C ........ _BLF PrintField,??PrintField??rA 1414 } \ 00000070 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_0: \ 00000074 ........ DC32 `?` 1415 1416 1417 //------------- Попап месаже для подключившегося контакта -----------// 1418 char onContact[64]; 1419 int INC_show2; 1420 GBSTMR incs2; 1421 #ifdef ELKA 1422 int font =9; 1423 #else 1424 int font= 4; 1425 #endif 1426 \ In segment CODE, align 4, keep-with-next 1427 void show_on_contact() 1428 { \ show_on_contact: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 1429 if(INC_show2>0) \ 00000004 ........ LDR R4,??DataTable20 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 540294E5 LDR R0,[R4, #+596] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 500000BA BLT ??show_on_contact_0 1430 { 1431 WSHDR *ws=AllocWS(64); \ 00000018 4000A0E3 MOV R0,#+64 \ 0000001C 250100EF SWI +293 \ 00000020 0050A0E1 MOV R5,R0 1432 /* wsprintf(ws, onContact); 1433 DrawString(ws,2,2,2+Get_WS_width(ws,font)+2,2+GetFontYSIZE(font),font,0,GetPaletteAdrByColorIndex(4),GetPaletteAdrByColorIndex(1)); 1434 FreeWS(ws); 1435 INC_show2--; 1436 GBS_StartTimerProc(&incs2, 5, show_on_contact);*/ 1437 ascii2ws(ws,onContact); \ 00000024 8800A0E3 MOV R0,#+136 \ 00000028 E00E80E3 ORR R0,R0,#0xE00 \ 0000002C 041080E0 ADD R1,R0,R4 \ 00000030 0500A0E1 MOV R0,R5 \ 00000034 ........ _BLF ascii2ws,??ascii2ws??rA 1438 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 00000038 068100EF SWI +33030 \ 0000003C 080090E5 LDR R0,[R0, #+8] 1439 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000040 1C219FE5 LDR R2,??show_on_contact_1 ;; `?_1` \ 00000044 0C0090E5 LDR R0,[R0, #+12] \ 00000048 480092E8 LDM R2,{R3,R6} \ 0000004C 080090E5 LDR R0,[R0, #+8] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 040090E5 LDR R0,[R0, #+4] \ 00000058 480081E8 STM R1,{R3,R6} \ 0000005C 010040E2 SUB R0,R0,#+1 1440 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000060 0820A0E3 MOV R2,#+8 \ 00000064 1C0100EF SWI +284 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0000001A BNE ??show_on_contact_2 1441 { 1442 extern void DrawScreenShot(); 1443 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 1444 } 1445 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ ??show_on_contact_2: \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 2E0100EF SWI +302 \ 0000007C 0060A0E1 MOV R6,R0 \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 2E0100EF SWI +302 \ 00000088 0070A0E1 MOV R7,R0 \ 0000008C 580294E5 LDR R0,[R4, #+600] \ 00000090 C50100EF SWI +453 \ 00000094 581294E5 LDR R1,[R4, #+600] \ 00000098 0080A0E1 MOV R8,R0 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 080200EF SWI +520 \ 000000A4 40002DE9 PUSH {R6} \ 000000A8 80002DE9 PUSH {R7} \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 02002DE9 PUSH {R1} \ 000000B4 023088E2 ADD R3,R8,#+2 \ 000000B8 022080E2 ADD R2,R0,#+2 \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 B40100EF SWI +436 1446 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,GetPaletteAdrByColorIndex(4),GetPaletteAdrByColorIndex(23)); \ 000000C4 1700A0E3 MOV R0,#+23 \ 000000C8 2E0100EF SWI +302 \ 000000CC 0060A0E1 MOV R6,R0 \ 000000D0 0400A0E3 MOV R0,#+4 \ 000000D4 2E0100EF SWI +302 \ 000000D8 0070A0E1 MOV R7,R0 \ 000000DC 580294E5 LDR R0,[R4, #+600] \ 000000E0 C50100EF SWI +453 \ 000000E4 581294E5 LDR R1,[R4, #+600] \ 000000E8 0080A0E1 MOV R8,R0 \ 000000EC 0500A0E1 MOV R0,R5 \ 000000F0 080200EF SWI +520 \ 000000F4 40002DE9 PUSH {R6} \ 000000F8 80002DE9 PUSH {R7} \ 000000FC 0010A0E3 MOV R1,#+0 \ 00000100 02002DE9 PUSH {R1} \ 00000104 581294E5 LDR R1,[R4, #+600] \ 00000108 033080E2 ADD R3,R0,#+3 \ 0000010C 02002DE9 PUSH {R1} \ 00000110 0120A0E3 MOV R2,#+1 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 011088E2 ADD R1,R8,#+1 \ 0000011C 02002DE9 PUSH {R1} \ 00000120 0210A0E1 MOV R1,R2 \ 00000124 4C0100EF SWI +332 1447 FreeWS(ws); \ 00000128 0500A0E1 MOV R0,R5 \ 0000012C 290100EF SWI +297 1448 INC_show2--; \ 00000130 540294E5 LDR R0,[R4, #+596] 1449 GBS_StartTimerProc(&incs2, 15, show_on_contact); \ 00000134 2C209FE5 LDR R2,??show_on_contact_1+0x4 ;; show_on_contact \ 00000138 010040E2 SUB R0,R0,#+1 \ 0000013C 540284E5 STR R0,[R4, #+596] \ 00000140 0F10A0E3 MOV R1,#+15 \ 00000144 C800A0E3 MOV R0,#+200 \ 00000148 E00E80E3 ORR R0,R0,#0xE00 \ 0000014C 040080E0 ADD R0,R0,R4 \ 00000150 4D0000EF SWI +77 \ 00000154 20D08DE2 ADD SP,SP,#+32 \ 00000158 F381BDE8 POP {R0,R1,R4-R8,PC} 1450 } 1451 else 1452 RefreshGUI(); \ ??show_on_contact_0: \ 0000015C 960100EF SWI +406 1453 } \ 00000160 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return \ ??show_on_contact_1: \ 00000164 ........ DC32 `?_1` \ 00000168 ........ DC32 show_on_contact 1454 1455 1456 //---------------------- Вывод времени на идле ---------------------// 1457 1458 \ In segment CODE, align 4, keep-with-next 1459 void DrawAutoMSG(void *canv) 1460 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 1461 char awayTime[64]; 1462 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable20 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 340294E5 LDR R0,[R4, #+564] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 EC009415 LDRNE R0,[R4, #+236] \ 00000018 00005013 CMPNE R0,#+0 \ 0000001C 0F00000A BEQ ??DrawAutoMSG_0 1463 { 1464 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000020 40109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 00000024 A800A0E3 MOV R0,#+168 \ 00000028 D00E80E3 ORR R0,R0,#0xD00 \ 0000002C 042080E0 ADD R2,R0,R4 \ 00000030 0D00A0E1 MOV R0,SP \ 00000034 160000EF SWI +22 1465 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000038 D00094E5 LDR R0,[R4, #+208] \ 0000003C 01002DE9 PUSH {R0} \ 00000040 CC0094E5 LDR R0,[R4, #+204] \ 00000044 01002DE9 PUSH {R0} \ 00000048 E43194E5 LDR R3,[R4, #+484] \ 0000004C E81094E5 LDR R1,[R4, #+232] \ 00000050 E40094E5 LDR R0,[R4, #+228] \ 00000054 08208DE2 ADD R2,SP,#+8 \ 00000058 ........ _BLF PrintField,??PrintField??rA \ 0000005C 08D08DE2 ADD SP,SP,#+8 1466 } 1467 } \ ??DrawAutoMSG_0: \ 00000060 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000064 1080BDE8 POP {R4,PC} ;; return \ ??DrawAutoMSG_1: \ 00000068 ........ DC32 `?` 1468 1469 1470 //---------------------------- Input away msg ---------------------------// 1471 1472 //Вводим сообщение какое хотим,а не то что прописали в конфиге 1473 int input_awaymsg_id; 1474 1475 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 1476 void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 1477 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 1478 { \ input_awaymsg_onkey: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 1479 WSHDR *ws; 1480 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON) \ 00000008 ........ LDR R4,??DataTable20 ;; 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 1481 { 1482 EDITCONTROL ec; 1483 ExtractEditControl(data,2,&ec); \ 00000028 0D20A0E1 MOV R2,SP \ 0000002C 0210A0E3 MOV R1,#+2 \ 00000030 690100EF SWI +361 1484 ws=ec.pWS; \ 00000034 28709DE5 LDR R7,[SP, #+40] 1485 int i=0; 1486 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 1487 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 AC03C1E5 STRB R0,[R1, #+940] \ 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 1488 awayMsg[i++]='0'; \ ??input_awaymsg_onkey_2: \ 00000078 040086E0 ADD R0,R6,R4 \ 0000007C 3010A0E3 MOV R1,#+48 \ 00000080 AC13C0E5 STRB R1,[R0, #+940] 1489 1490 #ifdef kluchnik 1491 char *s; 1492 ExtractEditControl(data,4,&ec); 1493 ws=ec.pWS; 1494 s=malloc(ec.maxlen); 1495 for(i=0;iwsbody[0];i++) 1496 *(s+i)=char16to8(ws->wsbody[i+1]); 1497 *(s+i++)=0; 1498 strcat(awayMsg,s); 1499 #endif 1500 1501 UpdateCLheader(); \ 00000084 ........ BL UpdateCLheader 1502 GeneralFunc_flag1(input_awaymsg_id,1); \ 00000088 5C0294E5 LDR R0,[R4, #+604] \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 3D0100EF SWI +317 1503 // GeneralFuncF1(1); 1504 } 1505 1506 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 1507 { 1508 msg_away_timer=0; \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 300284E5 STR R0,[R4, #+560] 1509 away_m=0; \ 000000AC 340284E5 STR R0,[R4, #+564] 1510 UpdateCLheader(); \ 000000B0 ........ BL UpdateCLheader 1511 } 1512 return(0); \ ??input_awaymsg_onkey_4: \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 2CD08DE2 ADD SP,SP,#+44 \ 000000BC F080BDE8 POP {R4-R7,PC} ;; return 1513 } 1514 \ In segment CODE, align 4, keep-with-next 1515 void input_awaymsg_ghook(GUI *gui, int cmd) 1516 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 1517 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 1518 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 1519 { 1520 SetSoftKey(gui,&sk,SET_SOFT_KEY_N); \ 0000000C 2C109FE5 LDR R1,??input_awaymsg_ghook_1 ;; ??sk \ 00000010 0120A0E3 MOV R2,#+1 \ 00000014 680100EF SWI +360 \ 00000018 0080BDE8 POP {PC} 1521 } 1522 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 1523 { 1524 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 1525 } 1526 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 1527 { 1528 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 1529 } 1530 if(cmd==0x03){} 1531 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 1532 \ In segment CODE, align 4, keep-with-next 1533 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 1534 1535 SOFTKEY_DESC input_awaymsg_sk[]= 1536 { 1537 {0x0018,0x0000,(int)"Лев"}, 1538 {0x0001,0x0000,(int)"Прав"}, 1539 {0x003D,0x0000,(int)LGP_DOIT_PIC} 1540 }; 1541 1542 SOFTKEYSTAB input_awaymsg_skt= 1543 { 1544 input_awaymsg_sk,0 1545 }; 1546 1547 const INPUTDIA_DESC input_awaymsg_desc= 1548 { 1549 1, 1550 input_awaymsg_onkey, 1551 input_awaymsg_ghook, 1552 (void *)input_awaymsg_locret, 1553 0, 1554 &input_awaymsg_skt, 1555 {0,NULL,NULL,NULL}, 1556 FONT_SMALL, 1557 100, 1558 101, 1559 0, 1560 0x00000000, 1561 0x40000000 1562 }; 1563 \ In segment CODE, align 4, keep-with-next 1564 void InputAwayMsg() 1565 { \ InputAwayMsg: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 1566 WSHDR *wss=AllocWS(256); 1567 void *ma=malloc_adr(); 1568 void *eq=AllocEQueue(ma, mfree_adr()); 1569 EDITCONTROL ec; 1570 PrepareEditControl(&ec); 1571 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 28519FE5 LDR R5,??InputAwayMsg_0+0x4 ;; input_awaymsg_desc \ 00000008 2CD04DE2 SUB SP,SP,#+44 1572 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 1573 AddEditControlToEditQend(eq,&ec,ma); 1574 1575 PrepareEditControl(&ec); 1576 CutWSTR(wss,0); 1577 ascii2ws(wss,awayMsg); \ 0000000C ........ LDR R6,??DataTable20 ;; S_ICONS \ 00000010 400FA0E3 MOV R0,#+256 \ 00000014 250100EF SWI +293 \ 00000018 0070A0E1 MOV R7,R0 \ 0000001C 148000EF SWI +32788 \ 00000020 0080A0E1 MOV R8,R0 \ 00000024 158000EF SWI +32789 \ 00000028 0010A0E1 MOV R1,R0 \ 0000002C 0800A0E1 MOV R0,R8 \ 00000030 630100EF SWI +355 \ 00000034 0040A0E1 MOV R4,R0 \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 640100EF SWI +356 \ 00000040 382085E2 ADD R2,R5,#+56 \ 00000044 391F8FE2 ADR R1,??InputAwayMsg_0 ;; "%t" \ 00000048 0700A0E1 MOV R0,R7 \ 0000004C 240100EF SWI +292 \ 00000050 2000A0E3 MOV R0,#+32 \ 00000054 01002DE9 PUSH {R0} \ 00000058 0730A0E1 MOV R3,R7 \ 0000005C 0020A0E3 MOV R2,#+0 \ 00000060 0110A0E3 MOV R1,#+1 \ 00000064 04008DE2 ADD R0,SP,#+4 \ 00000068 650100EF SWI +357 \ 0000006C 0820A0E1 MOV R2,R8 \ 00000070 04108DE2 ADD R1,SP,#+4 \ 00000074 0400A0E1 MOV R0,R4 \ 00000078 660100EF SWI +358 \ 0000007C 04008DE2 ADD R0,SP,#+4 \ 00000080 640100EF SWI +356 \ 00000084 0010A0E3 MOV R1,#+0 \ 00000088 0700A0E1 MOV R0,R7 \ 0000008C 260100EF SWI +294 \ 00000090 EB1F86E2 ADD R1,R6,#+940 \ 00000094 0700A0E1 MOV R0,R7 \ 00000098 ........ _BLF ascii2ws,??ascii2ws??rA 1578 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 1579 AddEditControlToEditQend(eq,&ec,ma); \ 000000B8 0820A0E1 MOV R2,R8 \ 000000BC 08108DE2 ADD R1,SP,#+8 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 660100EF SWI +358 1580 #ifdef kluchnik 1581 PrepareEditControl(&ec); 1582 wsprintf(wss,"%t","Сообщение 2:\n"); 1583 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 1584 AddEditControlToEditQend(eq,&ec,ma); 1585 1586 ascii2ws(wss,"когда смогу отвечу:)"); 1587 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 1588 AddEditControlToEditQend(eq,&ec,ma); 1589 #endif 1590 patch_header(&input_awaymsg_hdr); \ 000000C8 440085E2 ADD R0,R5,#+68 \ 000000CC ........ _BLF patch_header,??patch_header??rA 1591 patch_input(&input_awaymsg_desc); \ 000000D0 0000A0E3 MOV R0,#+0 \ 000000D4 B801C5E1 STRH R0,[R5, #+24] \ 000000D8 8A8100EF SWI +33162 \ 000000DC 010080E2 ADD R0,R0,#+1 \ 000000E0 BA01C5E1 STRH R0,[R5, #+26] \ 000000E4 888100EF SWI +33160 \ 000000E8 010040E2 SUB R0,R0,#+1 \ 000000EC BC01C5E1 STRH R0,[R5, #+28] \ 000000F0 898100EF SWI +33161 \ 000000F4 0070A0E1 MOV R7,R0 \ 000000F8 8B8100EF SWI +33163 \ 000000FC 000047E0 SUB R0,R7,R0 \ 00000100 010040E2 SUB R0,R0,#+1 \ 00000104 BE01C5E1 STRH R0,[R5, #+30] 1592 1593 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 00000108 0000A0E3 MOV R0,#+0 \ 0000010C 01002DE9 PUSH {R0} \ 00000110 0130A0E3 MOV R3,#+1 \ 00000114 0420A0E1 MOV R2,R4 \ 00000118 441085E2 ADD R1,R5,#+68 \ 0000011C 0500A0E1 MOV R0,R5 \ 00000120 670100EF SWI +359 \ 00000124 5C0286E5 STR R0,[R6, #+604] 1594 } \ 00000128 38D08DE2 ADD SP,SP,#+56 \ 0000012C F081BDE8 POP {R4-R8,PC} ;; return \ ??InputAwayMsg_0: \ 00000130 25740000 DC8 "%t",+0 \ 00000134 ........ DC32 input_awaymsg_desc 1595 1596 1597 //////////////////////////uptime////////////////////////// 1598 #ifdef ELKA 1599 void SLI_On() 1600 { 1601 if(Is_SLI_On) 1602 SLI_SetState(1); 1603 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_Off); 1604 } 1605 1606 void SLI_Off() 1607 { 1608 SLI_SetState(2); 1609 if(total_unread) 1610 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 1611 else 1612 SLI_SetState(0); 1613 } 1614 1615 void SLI_check() 1616 { 1617 if (total_unread) 1618 SLI_On(); 1619 } 1620 1621 void SLI_Timer() 1622 { 1623 GBS_StartTimerProc(&mytmr, 262, SLI_check); //262*SLI_time 1624 } 1625 #endif 1626 \ In segment CODE, align 4, keep-with-next 1627 void setup_ICONS(void) 1628 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1629 int i=0; \ 00000004 ........ LDR R5,??DataTable19 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 1630 do 1631 { 1632 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 0000000C 040195E7 LDR R0,[R5, +R4, LSL #+2] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0500001A BNE ??setup_ICONS_1 \ 00000018 20009FE5 LDR R0,??setup_ICONS_2 ;; icons_names \ 0000001C 5C10A0E3 MOV R1,#+92 \ 00000020 042190E7 LDR R2,[R0, +R4, LSL #+2] \ 00000024 910E85E2 ADD R0,R5,#+2320 \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 040185E7 STR R0,[R5, +R4, LSL #+2] 1633 i++; \ ??setup_ICONS_1: \ 00000030 014084E2 ADD R4,R4,#+1 1634 } 1635 while(i>2,stop_vibra); \ 00000040 3610A0E3 MOV R1,#+54 \ 00000044 000000EA B ??start_vibra_2 1851 else 1852 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 1853 } 1854 } \ 00000054 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000058 ........ DC32 stop_vibra 1855 \ In segment CODE, align 4, keep-with-next 1856 void stop_vibra(void) 1857 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 1858 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1859 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable40 ;; S_ICONS \ 00000010 7C1290E5 LDR R1,[R0, #+636] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 7C1280E5 STR R1,[R0, #+636] \ 0000001C 0080BD08 POPEQ {PC} 1860 { 1861 if(VIBR_TYPE) \ 00000020 301190E5 LDR R1,[R0, #+304] \ 00000024 24209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000028 E830A0E3 MOV R3,#+232 \ 0000002C F03E83E3 ORR R3,R3,#0xF00 \ 00000030 000051E3 CMP R1,#+0 \ 00000034 0100000A BEQ ??stop_vibra_1 1862 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000038 0610A0E3 MOV R1,#+6 \ 0000003C 000000EA B ??stop_vibra_2 1863 else 1864 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 1865 } 1866 } \ 0000004C 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000050 ........ DC32 start_vibra 1867 \ In segment CODE, align 4, keep-with-next 1868 void start_vibra2(void) 1869 { \ start_vibra2: \ 00000000 10402DE9 PUSH {R4,LR} 1870 void stop_vibra2(void); 1871 1872 SetVibration(vibraPower); \ 00000004 ........ LDR R4,??DataTable40 ;; S_ICONS \ 00000008 500194E5 LDR R0,[R4, #+336] \ 0000000C 7C0000EF SWI +124 1873 if(VIBR_TYPE) \ 00000010 301194E5 LDR R1,[R4, #+304] \ 00000014 1C209FE5 LDR R2,??start_vibra2_0 ;; stop_vibra2 \ 00000018 E800A0E3 MOV R0,#+232 \ 0000001C F00E80E3 ORR R0,R0,#0xF00 \ 00000020 000051E3 CMP R1,#+0 1874 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1875 else 1876 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 1877 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra2_0: \ 00000038 ........ DC32 stop_vibra2 1878 \ In segment CODE, align 4, keep-with-next 1879 void stop_vibra2(void) 1880 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1881 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1882 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable40 ;; S_ICONS \ 00000010 7C1290E5 LDR R1,[R0, #+636] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 7C1280E5 STR R1,[R0, #+636] \ 0000001C 0080BD08 POPEQ {PC} 1883 { 1884 if(VIBR_TYPE) \ 00000020 301190E5 LDR R1,[R0, #+304] \ 00000024 24209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000028 E830A0E3 MOV R3,#+232 \ 0000002C F03E83E3 ORR R3,R3,#0xF00 \ 00000030 000051E3 CMP R1,#+0 \ 00000034 0100000A BEQ ??stop_vibra2_1 1885 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000038 0610A0E3 MOV R1,#+6 \ 0000003C 000000EA B ??stop_vibra2_2 1886 else 1887 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 1888 } 1889 } \ 0000004C 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000050 ........ DC32 start_vibra2 1890 \ In segment CODE, align 4, keep-with-next 1891 void ChangeVibra(void) 1892 { 1893 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable40 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 241290E5 LDR R1,[R0, #+548] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000038 0520A0E1 MOV R2,R5 \ 0000003C 081087E2 ADD R1,R7,#+8 \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 160000EF SWI +22 1935 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; \ 00000048 0050E0E3 MVN R5,#+0 \ 0000004C 0D20A0E1 MOV R2,SP \ 00000050 04108DE2 ADD R1,SP,#+4 \ 00000054 2C008DE2 ADD R0,SP,#+44 \ 00000058 840000EF SWI +132 \ 0000005C 050050E1 CMP R0,R5 \ 00000060 0A00000A BEQ ??LoadTemplates_1 1936 if ((fsize=stat.size)<=0) goto L1; \ 00000064 08809DE5 LDR R8,[SP, #+8] \ 00000068 010058E3 CMP R8,#+1 \ 0000006C 070000BA BLT ??LoadTemplates_1 1937 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) \ 00000070 0D30A0E1 MOV R3,SP \ 00000074 8020A0E3 MOV R2,#+128 \ 00000078 801CA0E3 MOV R1,#+32768 \ 0000007C 2C008DE2 ADD R0,SP,#+44 \ 00000080 0A0000EF SWI +10 \ 00000084 0090A0E1 MOV R9,R0 \ 00000088 050059E1 CMP R9,R5 \ 0000008C 1400001A BNE ??LoadTemplates_2 1938 { 1939 L1: 1940 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 00000090 0710A0E1 MOV R1,R7 \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 1A0000EF SWI +26 1941 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 0000009C 0D20A0E1 MOV R2,SP \ 000000A0 04108DE2 ADD R1,SP,#+4 \ 000000A4 2C008DE2 ADD R0,SP,#+44 \ 000000A8 840000EF SWI +132 \ 000000AC 050050E1 CMP R0,R5 \ 000000B0 0200001A BNE ??LoadTemplates_3 \ ??LoadTemplates_4: \ 000000B4 0000A0E3 MOV R0,#+0 \ ??LoadTemplates_5: \ 000000B8 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000BC F087BDE8 POP {R4-R10,PC} ;; return 1942 if ((fsize=stat.size)<=0) return 0; \ ??LoadTemplates_3: \ 000000C0 08809DE5 LDR R8,[SP, #+8] \ 000000C4 010058E3 CMP R8,#+1 \ 000000C8 F9FFFFBA BLT ??LoadTemplates_4 1943 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 000000CC 0D30A0E1 MOV R3,SP \ 000000D0 8020A0E3 MOV R2,#+128 \ 000000D4 801CA0E3 MOV R1,#+32768 \ 000000D8 2C008DE2 ADD R0,SP,#+44 \ 000000DC 0A0000EF SWI +10 \ 000000E0 0090A0E1 MOV R9,R0 1944 } 1945 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E4 050059E1 CMP R9,R5 \ 000000E8 F1FFFF0A BEQ ??LoadTemplates_4 1946 p=templates_chars=malloc(fsize+1); \ 000000EC 010088E2 ADD R0,R8,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 800284E5 STR R0,[R4, #+640] \ 000000F8 0060A0E1 MOV R6,R0 1947 p[fread(f,p,fsize,&ul)]=0; \ 000000FC 0050A0E3 MOV R5,#+0 \ 00000100 0D30A0E1 MOV R3,SP \ 00000104 0820A0E1 MOV R2,R8 \ 00000108 0610A0E1 MOV R1,R6 \ 0000010C 0900A0E1 MOV R0,R9 \ 00000110 0B0000EF SWI +11 \ 00000114 0650C0E7 STRB R5,[R0, +R6] 1948 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0900A0E1 MOV R0,R9 \ 00000120 0D0000EF SWI +13 1949 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1950 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1951 for(;;) 1952 { 1953 c=*p; 1954 if (c<32) 1955 { 1956 if (pp&&(pp!=p)) 1957 { 1958 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1959 templates_lines[i++]=pp; 1960 } 1961 pp=NULL; 1962 if (!c) break; 1963 *p=0; 1964 } 1965 else 1966 { 1967 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1968 } 1969 p++; \ ??LoadTemplates_8: \ 00000138 016086E2 ADD R6,R6,#+1 \ ??LoadTemplates_6: \ 0000013C 0090D6E5 LDRB R9,[R6, #+0] \ 00000140 200059E3 CMP R9,#+32 \ 00000144 F9FFFFAA BGE ??LoadTemplates_7 \ 00000148 000058E3 CMP R8,#+0 \ 0000014C 06005811 CMPNE R8,R6 \ 00000150 0600000A BEQ ??LoadTemplates_9 \ 00000154 840294E5 LDR R0,[R4, #+644] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 840284E5 STR R0,[R4, #+644] \ 00000168 078180E7 STR R8,[R0, +R7, LSL #+2] \ 0000016C 0A70A0E1 MOV R7,R10 \ ??LoadTemplates_9: \ 00000170 0080A0E3 MOV R8,#+0 \ 00000174 000059E3 CMP R9,#+0 1970 } 1971 return i; \ 00000178 0700A001 MOVEQ R0,R7 \ 0000017C CDFFFF0A BEQ ??LoadTemplates_5 \ 00000180 0050C6E5 STRB R5,[R6, #+0] \ 00000184 EBFFFFEA B ??LoadTemplates_8 \ ??LoadTemplates_0: \ 00000188 ........ DC32 `?` 1972 } 1973 1974 1975 //---------------------- AUTOBOT MESSAGE -------------------------// 1976 1977 #ifdef kluchnik 1978 char *bot_chars; //Собственно файл 1979 char **bot_lines; //Массив указателей на строки 1980 1981 void FreeBotMessage(void) 1982 { 1983 if (bot_lines) mfree(bot_lines); 1984 if (bot_chars) mfree(bot_chars); 1985 bot_lines=NULL; 1986 bot_chars=NULL; 1987 } 1988 1989 int LoadBotMessage(unsigned int uin) 1990 { 1991 FSTATS stat; 1992 char fn[256]; 1993 int f; 1994 unsigned int ul; 1995 int i; 1996 int fsize; 1997 char *p; 1998 char *pp; 1999 int c; 2000 FreeBotMessage(); 2001 strcpy(fn,TEMPLATES_PATH); 2002 i=strlen(fn); 2003 sprintf(fn+i,"\\bot_%d.txt",uin); 2004 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; 2005 if ((fsize=stat.size)<=0) goto L1; 2006 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) 2007 { 2008 L1: 2009 strcpy(fn+i,"\\bot.txt"); 2010 if (GetFileStats(fn,&stat,&ul)==-1) return 0; 2011 if ((fsize=stat.size)<=0) return 0; 2012 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); 2013 } 2014 if (f==-1) return 0; 2015 p=bot_chars=malloc(fsize+1); 2016 p[fread(f,p,fsize,&ul)]=0; 2017 fclose(f,&ul); 2018 i=0; 2019 pp=p; 2020 for(;;) 2021 { 2022 c=*p; 2023 if (c<32) 2024 { 2025 if (pp&&(pp!=p)) 2026 { 2027 bot_lines=realloc(bot_lines,(i+1)*sizeof(char *)); 2028 bot_lines[i++]=pp; 2029 } 2030 pp=NULL; 2031 if (!c) break; 2032 *p=0; 2033 } 2034 else 2035 { 2036 if (pp==NULL) pp=p; 2037 } 2038 p++; 2039 } 2040 return i; 2041 } 2042 #endif 2043 2044 //=================================================================== 2045 2046 typedef struct 2047 { 2048 CSM_RAM csm; 2049 int gui_id; 2050 }MAIN_CSM; 2051 2052 typedef struct 2053 { 2054 GUI gui; 2055 WSHDR *ws1; 2056 WSHDR *ws2; 2057 int i1; 2058 }MAIN_GUI; 2059 2060 2061 2062 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 2063 \ In segment DATA_Z, align 4, align-sorted 2064 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 2065 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 2066 2067 int connect_state=0; 2068 2069 int sock=-1; 2070 2071 volatile unsigned long TOTALRECEIVED; 2072 volatile unsigned long TOTALSENDED; 2073 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 2074 volatile unsigned long ALLTOTALSENDED; 2075 2076 volatile int sendq_l=0; //Длинна очереди для send 2077 volatile void *sendq_p=NULL; //указатель очереди 2078 2079 volatile int is_gprs_online=1; 2080 2081 GBSTMR reconnect_tmr; 2082 2083 extern void kill_data(void *p,void (*func_p)(void *)); 2084 \ In segment CODE, align 4, keep-with-next 2085 void ElfKiller(void) 2086 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 2087 // if(SLI_TYPE) 2088 // GBS_StopTimer(&mytmr); 2089 // if(Is_Double_Vibra_On) 2090 // GBS_StopTimer(&mytmr2); 2091 // GBS_StopTimer(&mytmr3); 2092 // GBS_StopTimer(&mytmr4); 2093 // DoChangeWall2(); 2094 PrintLibFree(); \ 00000004 ........ _BLF PrintLibFree,??PrintLibFree??rA 2095 extern void *ELF_BEGIN; 2096 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 2097 } 2098 2099 int total_unread; //2058 - tam tak /windes 2100 2101 volatile CLIST *cltop; 2102 2103 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 2104 2105 volatile int contactlist_menu_id; 2106 2107 GBSTMR tmr_active; 2108 2109 volatile int edchat_id; 2110 2111 //Применяется для добавления сообщений 2112 //CLIST *edcontact; 2113 //void *edgui_data; 2114 2115 static int prev_clmenu_itemcount; 2116 2117 char clm_hdr_text[64]; 2118 static const char def_clm_hdr_text[] = LG_CLTITLE; 2119 static const char key_clm_hdr_text[] = LG_CLT9INP; 2120 #ifdef kluchnik 2121 int ICON_HD; 2122 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+IS_NULLICON, (int)clm_hdr_text, LGP_NULL}; 2123 #else 2124 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 2125 #endif 2126 2127 static const int menusoftkeys[] = {0,1,2}; 2128 static const SOFTKEY_DESC menu_sk[] = 2129 { 2130 {0x0018, 0x0000, (int)LG_SELECT}, 2131 {0x0001, 0x0000, (int)LG_CLOSE}, 2132 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2133 }; 2134 2135 char clmenu_sk_r[16]; 2136 static const char def_clmenu_sk_r[] = LG_CLOSE; 2137 static const char key_clmenu_sk_r[] = LG_CLEAR; 2138 2139 static const SOFTKEY_DESC clmenu_sk[]= 2140 { 2141 {0x0018, 0x0000, (int)LG_OPTIONS}, 2142 {0x0001, 0x0000, (int)clmenu_sk_r}, 2143 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2144 }; 2145 2146 const SOFTKEYSTAB menu_skt = 2147 { 2148 menu_sk, 0 2149 }; 2150 2151 static const SOFTKEYSTAB clmenu_skt = 2152 { 2153 clmenu_sk, 0 2154 }; 2155 2156 void contactlist_menu_ghook(void *data, int cmd); 2157 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 2158 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 2159 2160 #ifdef USE_MLMENU 2161 static const ML_MENU_DESC contactlist_menu= 2162 { 2163 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 2164 menusoftkeys, 2165 &clmenu_skt, 2166 0x11, //+0x400 2167 contactlist_menu_iconhndl, 2168 NULL, //Items 2169 NULL, //Procs 2170 0, //n 2171 1 //Добавочных строк 2172 }; 2173 #else 2174 static const MENU_DESC contactlist_menu= 2175 { 2176 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 2177 menusoftkeys, 2178 &clmenu_skt, 2179 0x11, //+0x400 2180 contactlist_menu_iconhndl, 2181 NULL, //Items 2182 NULL, //Procs 2183 0 //n 2184 }; 2185 #endif 2186 2187 //GBSTMR tmr_ping; 2188 int tenseconds_to_ping; 2189 \ In segment CODE, align 4, keep-with-next 2190 LOGQ *NewLOGQ(const char *s) 2191 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2192 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 2193 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 2194 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 2195 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 2196 } 2197 \ In segment CODE, align 4, keep-with-next 2198 LOGQ *LastLOGQ(LOGQ **pp) 2199 { 2200 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 2201 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 2202 { 2203 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 2204 } 2205 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 2206 } 2207 2208 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 2209 void FreeLOGQ(LOGQ **pp) 2210 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 2211 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 2212 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 2213 while(p) 2214 { 2215 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 2216 mfree(p); \ 00000020 150000EF SWI +21 2217 p=np; \ 00000024 0400B0E1 MOVS R0,R4 2218 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 2219 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 2220 2221 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 2222 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 2223 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 2224 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 2225 LOGQ *qp; 2226 while(qp=q->next) 2227 { 2228 if (qp==p) 2229 { 2230 q->next=p->next; 2231 break; 2232 } 2233 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] 2234 } 2235 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 2236 } \ 00000030 0080BDE8 POP {PC} ;; return 2237 2238 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 2239 int AddLOGQ(LOGQ **queue, LOGQ *p) 2240 { 2241 LOGQ *q=(LOGQ *)queue; 2242 LOGQ *qp; 2243 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 2244 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 2245 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 2246 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 2247 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 2248 } 2249 \ In segment CODE, align 4, keep-with-next 2250 char *GetLastXTextLOGQ(CLIST *t) 2251 { 2252 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 801090E5 LDR R1,[R0, #+128] 2253 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 2254 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 2255 while(p->next) 2256 { 2257 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 2258 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 2259 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 2260 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 2261 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 2262 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 2263 return s; \ 00000044 1EFF2FE1 BX LR ;; return 2264 } 2265 \ In segment CODE, align 4, keep-with-next 2266 int GetIconIndex(CLIST *t) 2267 { 2268 unsigned short s; 2269 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 2270 { 2271 s=t->state; 2272 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 2273 if (t->isunread) \ 0000001C 700090E5 LDR R0,[R0, #+112] \ 00000020 000050E3 CMP R0,#+0 2274 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 2275 else 2276 { 2277 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 2278 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 2279 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 2280 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 2281 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 2282 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 2283 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 2284 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 2285 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 2286 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 2287 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 2288 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 2289 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 2290 } 2291 } 2292 else 2293 { 2294 return(IS_UNKNOWN); 2295 } 2296 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 2297 } 2298 \ In segment CODE, align 4, keep-with-next 2299 LOGQ *FindContactLOGQByAck(TPKT *p) 2300 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 2301 CLIST *t; 2302 LockSched(); \ 00000008 460100EF SWI +326 2303 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 2304 UnlockSched(); \ 00000018 470100EF SWI +327 2305 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 2306 LOGQ *q; 2307 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 2308 LockSched(); \ 0000002C 460100EF SWI +326 2309 q=t->log; \ 00000030 805095E5 LDR R5,[R5, #+128] \ 00000034 000000EA B ??FindContactLOGQByAck_0 2310 while(q) 2311 { 2312 if (q->ID==id) break; 2313 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 2314 } 2315 UnlockSched(); \ 0000004C 470100EF SWI +327 2316 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 2317 } 2318 2319 GBSTMR statusTmr; 2320 2321 char ContactT9Key[32]; 2322 int kopa_online; 2323 int kopa_kontaktu; 2324 char status[64]; 2325 /* 2326 void DrawStatusBar() 2327 { 2328 // PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 2329 // if(TIME_OR_MSG==4) 2330 if(contactlist_menu_id) 2331 { 2332 PrintText(33,YDISP+2,status,0,1,1,2,0,0,ScreenW()-20); 2333 } 2334 GBS_StartTimerProc(&statusTmr,120,DrawStatusBar); 2335 } 2336 */ 2337 #define nmeth 24 2338 2339 void * gui_methods2[nmeth]; 2340 void * old_redraw; 2341 2342 typedef void (*tredraw)(void *data); 2343 \ In segment CODE, align 4, keep-with-next 2344 void new_redraw(void *data) 2345 { \ new_redraw: \ 00000000 30402DE9 PUSH {R4,R5,LR} 2346 ((tredraw)old_redraw)(data); \ 00000004 ........ LDR R4,??DataTable40 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 341394E5 LDR R1,[R4, #+820] \ 00000010 31FF2FE1 BLX R1 2347 char s[64]; 2348 sprintf(s,"%s\\HEAD.png",ICON_PATH); \ 00000014 64109FE5 LDR R1,??new_redraw_0 ;; `?` \ 00000018 912E84E2 ADD R2,R4,#+2320 \ 0000001C 0D00A0E1 MOV R0,SP \ 00000020 160000EF SWI +22 2349 int x=GetImgWidth((int)s); \ 00000024 0D00A0E1 MOV R0,SP \ 00000028 220000EF SWI +34 \ 0000002C 0050A0E1 MOV R5,R0 2350 PrintText(x+7,YDISP+2,status,0,1,1,2,0,0,ScreenW()-20); \ 00000030 888100EF SWI +33160 \ 00000034 140040E2 SUB R0,R0,#+20 \ 00000038 01002DE9 PUSH {R0} \ 0000003C 0030A0E3 MOV R3,#+0 \ 00000040 0210A0E3 MOV R1,#+2 \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 01002DE9 PUSH {R0} \ 0000004C 01002DE9 PUSH {R0} \ 00000050 0200A0E3 MOV R0,#+2 \ 00000054 01002DE9 PUSH {R0} \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 01002DE9 PUSH {R0} \ 00000064 7800A0E3 MOV R0,#+120 \ 00000068 400D80E3 ORR R0,R0,#0x1000 \ 0000006C 042080E0 ADD R2,R0,R4 \ 00000070 070085E2 ADD R0,R5,#+7 \ 00000074 ........ _BLF PrintText,??PrintText??rA 2351 #ifdef kluchnik 2352 switch(CurrentPrivateStatus) 2353 { 2354 case 0: ICON_HD=ICON_ALL_CAN_SEE; break; 2355 case 1: ICON_HD=ICON_NOBODY_CAN_SEE; break; 2356 case 2: ICON_HD=ICON_VISLIST_CAN_SEE; break; 2357 case 3: ICON_HD=ICON_INVISLIST_CANNOT_SEE; break; 2358 case 4: ICON_HD=ICON_CONTACTLIST_CAN_SEE; break; 2359 default :ICON_HD=ICON_HEAD;break; 2360 } 2361 int icon; 2362 icon=*(S_ICONS+ICON_HD); 2363 //((HEADER_DESC *)&contactlist_menuhdr)->rc.x2=1+(GetImgWidth(icon)); 2364 DrawImg(3,YDISP+3,icon); 2365 #endif 2366 } \ 00000078 58D08DE2 ADD SP,SP,#+88 \ 0000007C 3080BDE8 POP {R4,R5,PC} ;; return \ ??new_redraw_0: \ 00000080 ........ DC32 `?` 2367 \ In segment CODE, align 4, keep-with-next 2368 void UpdateCLheader(void) 2369 { \ UpdateCLheader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2370 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R4,??DataTable40 ;; S_ICONS \ 00000008 B8729FE5 LDR R7,??UpdateCLheader_1+0x14 ;; key_clmenu_sk_r \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 5810A0E3 MOV R1,#+88 \ 00000014 401D81E3 ORR R1,R1,#0x1000 \ 00000018 041081E0 ADD R1,R1,R4 \ 0000001C 08108DE5 STR R1,[SP, #+8] \ 00000020 1800A0E3 MOV R0,#+24 \ 00000024 400D80E3 ORR R0,R0,#0x1000 \ 00000028 045080E0 ADD R5,R0,R4 \ 0000002C 600080E3 ORR R0,R0,#0x60 \ 00000030 046080E0 ADD R6,R0,R4 \ 00000034 EC80A0E3 MOV R8,#+236 \ 00000038 408E88E3 ORR R8,R8,#0x400 \ 0000003C 040088E0 ADD R0,R8,R4 \ 00000040 1B0000EF SWI +27 \ 00000044 000050E3 CMP R0,#+0 \ 00000048 0C00000A BEQ ??UpdateCLheader_2 2371 { 2372 zeromem(status,64); \ 0000004C 4010A0E3 MOV R1,#+64 \ 00000050 0600A0E1 MOV R0,R6 \ 00000054 1D0100EF SWI +285 2373 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000058 701087E2 ADD R1,R7,#+112 \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 1A0000EF SWI +26 2374 strcat(clm_hdr_text,ContactT9Key); \ 00000064 041088E0 ADD R1,R8,R4 \ 00000068 0500A0E1 MOV R0,R5 \ 0000006C 170000EF SWI +23 2375 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000070 08009DE5 LDR R0,[SP, #+8] \ 00000074 0710A0E1 MOV R1,R7 \ 00000078 1A0000EF SWI +26 \ 0000007C F78FBDE8 POP {R0-R2,R4-R11,PC} 2376 } \ ??UpdateCLheader_2: \ 00000080 000194E5 LDR R0,[R4, #+256] \ 00000084 8A8F8FE2 ADR R8,??UpdateCLheader_1 ;; "[S]" \ 00000088 8A9F8FE2 ADR R9,??UpdateCLheader_1+0x4 ;; "[V]" \ 0000008C 8AAF8FE2 ADR R10,??UpdateCLheader_1+0x8 ;; "[I]" \ 00000090 8ABF8FE2 ADR R11,??UpdateCLheader_1+0xC ;; "[A]" \ 00000094 040050E3 CMP R0,#+4 \ 00000098 8100008A BHI ??UpdateCLheader_3 \ 0000009C 011F8FE2 ADR R1,??UpdateCLheader_0 \ 000000A0 0010D1E7 LDRB R1,[R1, R0] \ 000000A4 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??UpdateCLheader_0: \ 000000A8 010D1319 DC8 +1,+13,+19,+25 \ 000000AC 43000000 DC8 +67,+0,+0,+0 2377 else 2378 { 2379 switch(TIME_OR_MSG) 2380 { 2381 case 0: 2382 { 2383 TTime the; 2384 GetDateTime(NULL,&the); \ ??UpdateCLheader_4: \ 000000B0 0D10A0E1 MOV R1,SP \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 B40000EF SWI +180 2385 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ 000000BC 0100DDE5 LDRB R0,[SP, #+1] \ 000000C0 642087E2 ADD R2,R7,#+100 \ 000000C4 541087E2 ADD R1,R7,#+84 \ 000000C8 01002DE9 PUSH {R0} \ 000000CC 0430DDE5 LDRB R3,[SP, #+4] \ ??UpdateCLheader_5: \ 000000D0 0500A0E1 MOV R0,R5 \ 000000D4 160000EF SWI +22 \ 000000D8 04D08DE2 ADD SP,SP,#+4 \ 000000DC 700000EA B ??UpdateCLheader_3 2386 } 2387 break; 2388 case 1: 2389 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_6: \ 000000E0 100294E5 LDR R0,[R4, #+528] \ 000000E4 642087E2 ADD R2,R7,#+100 \ 000000E8 01002DE9 PUSH {R0} \ 000000EC B03294E5 LDR R3,[R4, #+688] \ 000000F0 481087E2 ADD R1,R7,#+72 \ 000000F4 F5FFFFEA B ??UpdateCLheader_5 2390 break; 2391 case 2: 2392 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); \ ??UpdateCLheader_7: \ 000000F8 CC0294E5 LDR R0,[R4, #+716] \ 000000FC 642087E2 ADD R2,R7,#+100 \ 00000100 01002DE9 PUSH {R0} \ 00000104 D03294E5 LDR R3,[R4, #+720] \ 00000108 481087E2 ADD R1,R7,#+72 \ 0000010C EFFFFFEA B ??UpdateCLheader_5 2393 break; 2394 case 3: 2395 { 2396 void Get_Online_total(); 2397 Get_Online_total(); \ ??UpdateCLheader_8: \ 00000110 ........ BL Get_Online_total 2398 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] ",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000114 100294E5 LDR R0,[R4, #+528] \ 00000118 341087E2 ADD R1,R7,#+52 \ 0000011C 01002DE9 PUSH {R0} \ 00000120 B00294E5 LDR R0,[R4, #+688] \ 00000124 01002DE9 PUSH {R0} \ 00000128 CC3294E5 LDR R3,[R4, #+716] \ 0000012C D02294E5 LDR R2,[R4, #+720] \ 00000130 0500A0E1 MOV R0,R5 \ 00000134 160000EF SWI +22 2399 if(away_m) strcat(clm_hdr_text,"[A]"); \ 00000138 340294E5 LDR R0,[R4, #+564] \ 0000013C 08D08DE2 ADD SP,SP,#+8 \ 00000140 000050E3 CMP R0,#+0 \ 00000144 0200000A BEQ ??UpdateCLheader_9 \ 00000148 0B10A0E1 MOV R1,R11 \ 0000014C 0500A0E1 MOV R0,R5 \ 00000150 170000EF SWI +23 2400 if(CurrentPrivateStatus==1) strcat(clm_hdr_text,"[I]"); \ ??UpdateCLheader_9: \ 00000154 780294E5 LDR R0,[R4, #+632] \ 00000158 010050E3 CMP R0,#+1 \ 0000015C 0200001A BNE ??UpdateCLheader_10 \ 00000160 0A10A0E1 MOV R1,R10 \ 00000164 0500A0E1 MOV R0,R5 \ 00000168 170000EF SWI +23 2401 if(Is_Vibra_Enabled) strcat(clm_hdr_text,"[V]"); \ ??UpdateCLheader_10: \ 0000016C 240294E5 LDR R0,[R4, #+548] \ 00000170 000050E3 CMP R0,#+0 \ 00000174 0200000A BEQ ??UpdateCLheader_11 \ 00000178 0910A0E1 MOV R1,R9 \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 170000EF SWI +23 2402 if(Is_Sounds_Enabled) strcat(clm_hdr_text,"[S]"); \ ??UpdateCLheader_11: \ 00000184 680294E5 LDR R0,[R4, #+616] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0200000A BEQ ??UpdateCLheader_12 \ 00000190 0810A0E1 MOV R1,R8 \ 00000194 0500A0E1 MOV R0,R5 \ 00000198 170000EF SWI +23 2403 if(Is_Double_Vibra_On) strcat(clm_hdr_text,"[R]"); \ ??UpdateCLheader_12: \ 0000019C 0C0294E5 LDR R0,[R4, #+524] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 3E00000A BEQ ??UpdateCLheader_3 \ 000001A8 451F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 000001AC 0500A0E1 MOV R0,R5 \ 000001B0 170000EF SWI +23 \ 000001B4 3A0000EA B ??UpdateCLheader_3 2404 } 2405 break; 2406 case 4: 2407 { 2408 void Get_Online_total(); 2409 Get_Online_total(); \ ??UpdateCLheader_13: \ 000001B8 ........ BL Get_Online_total 2410 TTime the; 2411 GetDateTime(NULL,&the); \ 000001BC 0D10A0E1 MOV R1,SP \ 000001C0 0000A0E3 MOV R0,#+0 \ 000001C4 B40000EF SWI +180 2412 #ifdef kluchnik 2413 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //sendq_l 2414 sprintf(status, "[Rx:%db/Tx:%db/Queue:%db]\n[%02d:%02d] [%d/%d] [%d/%d] ",RX,TX,sendq_l, 2415 the.hour, the.min, 2416 kopa_kontaktu, kopa_online, 2417 total_unread,total_unread2); 2418 #else 2419 sprintf(status, "%s\n[%02d:%02d] [%d/%d] [%d/%d] ",def_clm_hdr_text, 2420 the.hour, the.min, 2421 kopa_kontaktu, kopa_online, 2422 total_unread,total_unread2); \ 000001C8 100294E5 LDR R0,[R4, #+528] \ 000001CC 642087E2 ADD R2,R7,#+100 \ 000001D0 01002DE9 PUSH {R0} \ 000001D4 B00294E5 LDR R0,[R4, #+688] \ 000001D8 141087E2 ADD R1,R7,#+20 \ 000001DC 01002DE9 PUSH {R0} \ 000001E0 CC0294E5 LDR R0,[R4, #+716] \ 000001E4 01002DE9 PUSH {R0} \ 000001E8 D00294E5 LDR R0,[R4, #+720] \ 000001EC 01002DE9 PUSH {R0} \ 000001F0 1100DDE5 LDRB R0,[SP, #+17] \ 000001F4 01002DE9 PUSH {R0} \ 000001F8 1430DDE5 LDRB R3,[SP, #+20] \ 000001FC 0600A0E1 MOV R0,R6 \ 00000200 160000EF SWI +22 2423 #endif 2424 if(away_m) strcat(status,"[A]"); \ 00000204 340294E5 LDR R0,[R4, #+564] \ 00000208 14D08DE2 ADD SP,SP,#+20 \ 0000020C 000050E3 CMP R0,#+0 \ 00000210 0200000A BEQ ??UpdateCLheader_14 \ 00000214 0B10A0E1 MOV R1,R11 \ 00000218 0600A0E1 MOV R0,R6 \ 0000021C 170000EF SWI +23 2425 if(CurrentPrivateStatus==1) strcat(status,"[I]"); \ ??UpdateCLheader_14: \ 00000220 780294E5 LDR R0,[R4, #+632] \ 00000224 010050E3 CMP R0,#+1 \ 00000228 0200001A BNE ??UpdateCLheader_15 \ 0000022C 0A10A0E1 MOV R1,R10 \ 00000230 0600A0E1 MOV R0,R6 \ 00000234 170000EF SWI +23 2426 if(Is_Vibra_Enabled) strcat(status,"[V]"); \ ??UpdateCLheader_15: \ 00000238 240294E5 LDR R0,[R4, #+548] \ 0000023C 000050E3 CMP R0,#+0 \ 00000240 0200000A BEQ ??UpdateCLheader_16 \ 00000244 0910A0E1 MOV R1,R9 \ 00000248 0600A0E1 MOV R0,R6 \ 0000024C 170000EF SWI +23 2427 if(Is_Sounds_Enabled) strcat(status,"[S]"); \ ??UpdateCLheader_16: \ 00000250 680294E5 LDR R0,[R4, #+616] \ 00000254 000050E3 CMP R0,#+0 \ 00000258 0200000A BEQ ??UpdateCLheader_17 \ 0000025C 0810A0E1 MOV R1,R8 \ 00000260 0600A0E1 MOV R0,R6 \ 00000264 170000EF SWI +23 2428 if(Is_Double_Vibra_On) strcat(status,"[R]"); \ ??UpdateCLheader_17: \ 00000268 0C0294E5 LDR R0,[R4, #+524] \ 0000026C 000050E3 CMP R0,#+0 \ 00000270 0200000A BEQ ??UpdateCLheader_18 \ 00000274 121F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 00000278 0600A0E1 MOV R0,R6 \ 0000027C 170000EF SWI +23 2429 if(Show_XTX) strcat(status,"[Xs]"); \ ??UpdateCLheader_18: \ 00000280 400294E5 LDR R0,[R4, #+576] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 0C108712 ADDNE R1,R7,#+12 2430 else strcat(status,"[Tm]"); \ 0000028C 04108702 ADDEQ R1,R7,#+4 \ 00000290 0600A0E1 MOV R0,R6 \ 00000294 170000EF SWI +23 2431 zeromem(clm_hdr_text,64); \ 00000298 4010A0E3 MOV R1,#+64 \ 0000029C 0500A0E1 MOV R0,R5 \ 000002A0 1D0100EF SWI +285 2432 //DrawStatusBar(); 2433 } 2434 break; 2435 } 2436 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_3: \ 000002A4 08009DE5 LDR R0,[SP, #+8] \ 000002A8 7C1087E2 ADD R1,R7,#+124 \ 000002AC 1A0000EF SWI +26 2437 } 2438 } \ 000002B0 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??UpdateCLheader_1: \ 000002B4 5B535D00 DC8 "[S]" \ 000002B8 5B565D00 DC8 "[V]" \ 000002BC 5B495D00 DC8 "[I]" \ 000002C0 5B415D00 DC8 "[A]" \ 000002C4 5B525D00 DC8 "[R]" \ 000002C8 ........ DC32 key_clmenu_sk_r 2439 \ In segment CODE, align 4, keep-with-next 2440 void ClearContactT9Key(void) 2441 { 2442 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 1260 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 2443 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 1260 2444 \ In segment CODE, align 4, keep-with-next 2445 void AddContactT9Key(int chr) 2446 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 2447 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable40 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C EC00A0E3 MOV R0,#+236 \ 00000010 400E80E3 ORR R0,R0,#0x400 \ 00000014 050080E0 ADD R0,R0,R5 \ 00000018 1B0000EF SWI +27 2448 if (l<(sizeof(ContactT9Key)-1)) \ 0000001C 1F0050E3 CMP R0,#+31 2449 { 2450 ContactT9Key[l]=chr; \ 00000020 05008030 ADDCC R0,R0,R5 \ 00000024 EC44C035 STRBCC R4,[R0, #+1260] 2451 } 2452 } \ 00000028 3080BDE8 POP {R4,R5,PC} ;; return 2453 \ In segment CODE, align 4, keep-with-next 2454 void BackSpaceContactT9(void) 2455 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 2456 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable40 ;; S_ICONS \ 00000008 EC00A0E3 MOV R0,#+236 \ 0000000C 400E80E3 ORR R0,R0,#0x400 \ 00000010 040080E0 ADD R0,R0,R4 \ 00000014 1B0000EF SWI +27 2457 if (l) \ 00000018 000050E3 CMP R0,#+0 2458 { 2459 l--; 2460 ContactT9Key[l]=0; \ 0000001C 04008010 ADDNE R0,R0,R4 \ 00000020 0010A013 MOVNE R1,#+0 \ 00000024 EB14C015 STRBNE R1,[R0, #+1259] 2461 } 2462 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 2463 \ In segment CODE, align 4, keep-with-next 2464 void create_contactlist_menu(void) 2465 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2466 2467 int i; 2468 i=CountContacts(); 2469 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable40 ;; S_ICONS 2470 UpdateCLheader(); 2471 patch_header(&contactlist_menuhdr); \ 00000008 38609FE5 LDR R6,??create_contactlist_menu_0 ;; contactlist_menuhdr \ 0000000C ........ _BLF CountContacts,??CountContacts??rA \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 C44285E5 STR R4,[R5, #+708] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0600A0E1 MOV R0,R6 \ 00000020 ........ _BLF patch_header,??patch_header??rA 2472 #ifdef USE_MLMENU 2473 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); \ 00000024 10002DE9 PUSH {R4} \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 01002DE9 PUSH {R0} \ 00000030 0630A0E1 MOV R3,R6 \ 00000034 142086E2 ADD R2,R6,#+20 \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 170200EF SWI +535 \ 00000040 BC0285E5 STR R0,[R5, #+700] 2474 #else 2475 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 2476 #endif 2477 } \ 00000044 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000048 ........ DC32 contactlist_menuhdr 2478 2479 2480 static int unhooked2=1; 2481 \ In segment CODE, align 4, keep-with-next 2482 void contactlist_menu_ghook(void *data, int cmd) 2483 { \ contactlist_menu_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2484 PNGTOP_DESC *pltop=PNG_TOP(); 2485 if (cmd==9) 2486 { 2487 pltop->dyn_pltop=NULL; 2488 } 2489 static int unhooked=1; 2490 if((((unhooked) || (unhooked2)) && (TIME_OR_MSG==4))) \ 00000004 ........ LDR R8,??DataTable40 ;; 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 3C0398E5 LDR R0,[R8, #+828] \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 38039805 LDREQ R0,[R8, #+824] \ 00000030 00005003 CMPEQ R0,#+0 \ 00000034 1500000A BEQ ??contactlist_menu_ghook_0 \ 00000038 000198E5 LDR R0,[R8, #+256] \ 0000003C 040050E3 CMP R0,#+4 \ 00000040 1200001A BNE ??contactlist_menu_ghook_0 2491 { 2492 if(!(strlen(ContactT9Key))) \ 00000044 EC00A0E3 MOV R0,#+236 \ 00000048 400E80E3 ORR R0,R0,#0x400 \ 0000004C 080080E0 ADD R0,R0,R8 \ 00000050 1B0000EF SWI +27 \ 00000054 000050E3 CMP R0,#+0 \ 00000058 0A00001A BNE ??contactlist_menu_ghook_1 2493 { 2494 GUI * gui=(GUI*)data; 2495 memcpy(&gui_methods2,gui->methods,nmeth*4); \ 0000005C 041094E5 LDR R1,[R4, #+4] \ 00000060 B59FA0E3 MOV R9,#+724 \ 00000064 6020A0E3 MOV R2,#+96 \ 00000068 080089E0 ADD R0,R9,R8 \ 0000006C 1E0100EF SWI +286 2496 gui->methods=&gui_methods2; \ 00000070 080089E0 ADD R0,R9,R8 \ 00000074 040084E5 STR R0,[R4, #+4] 2497 old_redraw=gui_methods2[0]; \ 00000078 080099E7 LDR R0,[R9, +R8] \ 0000007C 340388E5 STR R0,[R8, #+820] 2498 gui_methods2[0]=(void*)&new_redraw; \ 00000080 28009FE5 LDR R0,??contactlist_menu_ghook_2 ;; new_redraw \ 00000084 080089E7 STR R0,[R9, +R8] 2499 } 2500 unhooked=0; \ ??contactlist_menu_ghook_1: \ 00000088 3C7388E5 STR R7,[R8, #+828] 2501 unhooked2=0; \ 0000008C 387388E5 STR R7,[R8, #+824] 2502 } 2503 2504 if (cmd==0x0A) \ ??contactlist_menu_ghook_0: \ 00000090 0A0055E3 CMP R5,#+10 \ 00000094 F083BD18 POPNE {R4-R9,PC} 2505 { 2506 silenthide=0; 2507 pltop->dyn_pltop=XStatusesImgList; \ 00000098 ........ LDR R0,??DataTable41 ;; XStatusesImgList \ 0000009C 607288E5 STR R7,[R8, #+608] \ 000000A0 000090E5 LDR R0,[R0, #+0] \ 000000A4 080086E5 STR R0,[R6, #+8] 2508 DisableIDLETMR(); \ 000000A8 7F0100EF SWI +383 2509 } 2510 2511 2512 } \ 000000AC F083BDE8 POP {R4-R9,PC} ;; return \ ??contactlist_menu_ghook_2: \ 000000B0 ........ DC32 new_redraw 2513 \ In segment CODE, align 4, keep-with-next 2514 void RecountMenu(CLIST *req, int needfocus) 2515 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 2516 int i; 2517 int j; 2518 void *data; 2519 UpdateCLheader(); 2520 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable50 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 BC0296E5 LDR R0,[R6, #+700] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 2521 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 BC0296E5 LDR R0,[R6, #+700] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 2522 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 2523 { 2524 j=0; 2525 } 2526 else 2527 { 2528 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 2529 } 2530 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 2531 if (j>=i) j=i-1; 2532 if (j<0) j=0; 2533 if (i!=prev_clmenu_itemcount) \ 00000048 C41296E5 LDR R1,[R6, #+708] \ 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 2534 { 2535 prev_clmenu_itemcount=i; \ 00000064 C40286E5 STR R0,[R6, #+708] 2536 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 2537 } 2538 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 2539 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 BC0296E5 LDR R0,[R6, #+700] \ 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 2540 } 2541 2542 //-------------------- MANAGE CONTACT MENU --------------------------// 2543 #ifdef kluchnik 2544 #define _MAX 5 2545 #else 2546 #define _MAX 4 2547 #endif 2548 2549 static int uinContact; 2550 \ In segment CODE, align 4, keep-with-next 2551 static void ChangeVibraContact(GUI *data) 2552 { 2553 CLIST *t; 2554 t=FindContactByUin(uinContact); \ ChangeVibraContact: \ 00000000 ........ LDR R0,??DataTable46 ;; S_ICONS + 832 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2555 t->isvibra=!(t->isvibra); \ 00000010 581090E5 LDR R1,[R0, #+88] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 581080E5 STR R1,[R0, #+88] 2556 RefreshGUI(); \ 00000024 960100EF SWI +406 2557 } \ 00000028 0080BDE8 POP {PC} ;; return 2558 \ In segment CODE, align 4, keep-with-next 2559 static void ChangeSoundContact(GUI *data) 2560 { 2561 CLIST *t; 2562 t=FindContactByUin(uinContact); \ ChangeSoundContact: \ 00000000 ........ LDR R0,??DataTable46 ;; S_ICONS + 832 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2563 t->issound=!(t->issound); \ 00000010 5C1090E5 LDR R1,[R0, #+92] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 5C1080E5 STR R1,[R0, #+92] 2564 RefreshGUI(); \ 00000024 960100EF SWI +406 2565 } \ 00000028 0080BDE8 POP {PC} ;; return 2566 \ In segment CODE, align 4, keep-with-next 2567 static void ChangeAutoMsg(GUI *data) 2568 { 2569 CLIST *t; 2570 t=FindContactByUin(uinContact); \ ChangeAutoMsg: \ 00000000 ........ LDR R0,??DataTable46 ;; S_ICONS + 832 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ _BLF FindContactByUin,??FindContactByUin??rA 2571 t->isautomsg=!(t->isautomsg); \ 00000010 601090E5 LDR R1,[R0, #+96] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0110A003 MOVEQ R1,#+1 \ 0000001C 0010A013 MOVNE R1,#+0 \ 00000020 601080E5 STR R1,[R0, #+96] 2572 RefreshGUI(); \ 00000024 960100EF SWI +406 2573 } \ 00000028 0080BDE8 POP {PC} ;; return 2574 #ifdef kluchnik 2575 static void ChangeAutobot(GUI *data) 2576 { 2577 CLIST *t; 2578 t=FindContactByUin(uinContact); 2579 t->isautobot=!(t->isautobot); 2580 RefreshGUI(); 2581 } 2582 #endif \ In segment CODE, align 4, keep-with-next 2583 static void RqtXText(GUI *data) 2584 { 2585 void RequestXText(unsigned int uin); 2586 RequestXText(uinContact); \ RqtXText: \ 00000000 ........ LDR R0,??DataTable46 ;; S_ICONS + 832 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C ........ BL RequestXText 2587 GeneralFuncF1(1); \ 00000010 0100A0E3 MOV R0,#+1 \ 00000014 3B0100EF SWI +315 2588 } \ 00000018 0080BDE8 POP {PC} ;; return 2589 \ In segment CODE, align 4, keep-with-next 2590 static void contact_list_ghook(void *data, int cmd) 2591 { \ contact_list_ghook: \ 00000000 00402DE9 PUSH {LR} 2592 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 2593 { 2594 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 2595 } 2596 } \ 00000010 0080BDE8 POP {PC} ;; return 2597 static int icon_array[2]; 2598 2599 static const void *menuproc[_MAX]= 2600 { 2601 (void *)ChangeVibraContact, 2602 (void *)ChangeSoundContact, 2603 (void *)ChangeAutoMsg, 2604 #ifdef kluchnik 2605 (void *)ChangeAutobot, 2606 #endif 2607 (void *)RqtXText 2608 }; 2609 2610 static const char * const menutext[_MAX]= 2611 { 2612 "Вибра", 2613 "Звук", 2614 "Автоответчик", 2615 #ifdef kluchnik 2616 "Aвтобот", 2617 #endif 2618 "Запрос xtext" 2619 }; 2620 \ In segment CODE, align 4, keep-with-next 2621 static int contact_keyhook(void *data, GUI_MSG *msg) 2622 { \ contact_keyhook: \ 00000000 00402DE9 PUSH {LR} 2623 if ((msg->keys==0x18)||(msg->keys==0x3D)) \ 00000004 F210D1E1 LDRSH R1,[R1, #+2] \ 00000008 180051E3 CMP R1,#+24 \ 0000000C 3D005113 CMPNE R1,#+61 \ 00000010 0300001A BNE ??contact_keyhook_0 2624 { 2625 ((void (*)(void))(menuproc[GetCurMenuItem(data)]))(); \ 00000014 8F0100EF SWI +399 \ 00000018 0C109FE5 LDR R1,??contact_keyhook_1 ;; menuproc \ 0000001C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000020 30FF2FE1 BLX R0 2626 } 2627 //if(msg->keys==LEFT_BUTTON) GeneralFuncF1(1); 2628 return(0); \ ??contact_keyhook_0: \ 00000024 0000A0E3 MOV R0,#+0 \ 00000028 0080BDE8 POP {PC} ;; return \ ??contact_keyhook_1: \ 0000002C ........ DC32 menuproc 2629 } 2630 \ In segment CODE, align 4, keep-with-next 2631 static void contacthandler(void *data, int curitem, void *unk) 2632 { \ contacthandler: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2633 WSHDR *ws; 2634 void *item=AllocMenuItem(data); 2635 extern const char percent_t[]; 2636 ws=AllocMenuWS(data,strlen(menutext[curitem])); \ 00000004 ........ LDR R8,??DataTable53 ;; `?isvibra?0:1)); \ ??contacthandler_0: \ 00000074 580090E5 LDR R0,[R0, #+88] \ ??contacthandler_5: \ 00000078 000050E3 CMP R0,#+0 \ 0000007C 0000A013 MOVNE R0,#+0 \ 00000080 0100A003 MOVEQ R0,#+1 \ 00000084 000188E0 ADD R0,R8,R0, LSL #+2 \ 00000088 982080E2 ADD R2,R0,#+152 \ 0000008C 090000EA B ??contacthandler_6 2644 break; 2645 case 1: 2646 SetMenuItemIconArray(data,item,icon_array+(t->issound?0:1)); \ ??contacthandler_1: \ 00000090 5C0090E5 LDR R0,[R0, #+92] \ 00000094 F7FFFFEA B ??contacthandler_5 2647 break; 2648 case 2: 2649 SetMenuItemIconArray(data,item,icon_array+(t->isautomsg?0:1)); \ ??contacthandler_2: \ 00000098 600090E5 LDR R0,[R0, #+96] \ 0000009C 000050E3 CMP R0,#+0 \ 000000A0 0000A013 MOVNE R0,#+0 \ 000000A4 0100A003 MOVEQ R0,#+1 \ 000000A8 000188E0 ADD R0,R8,R0, LSL #+2 \ 000000AC 982080E2 ADD R2,R0,#+152 \ 000000B0 000000EA B ??contacthandler_6 2650 break; 2651 #ifdef kluchnik 2652 case 3: 2653 SetMenuItemIconArray(data,item,icon_array+(t->isautobot?0:1)); 2654 break; 2655 case 4: 2656 SetMenuItemIconArray(data,item,S_ICONS+IS_NULLICON); 2657 break; 2658 #else 2659 case 3: 2660 SetMenuItemIconArray(data,item,S_ICONS+IS_NULLICON); \ ??contacthandler_3: \ 000000B4 442088E2 ADD R2,R8,#+68 \ ??contacthandler_6: \ 000000B8 0610A0E1 MOV R1,R6 \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 990100EF SWI +409 2661 break; 2662 #endif 2663 } 2664 SetMenuItemText(data, item, ws, curitem); \ ??contacthandler_4: \ 000000C4 0530A0E1 MOV R3,R5 \ 000000C8 0720A0E1 MOV R2,R7 \ 000000CC 0610A0E1 MOV R1,R6 \ 000000D0 0400A0E1 MOV R0,R4 \ 000000D4 9A0100EF SWI +410 2665 } \ 000000D8 F083BDE8 POP {R4-R9,PC} ;; return 2666 char cont_hdr[64]; 2667 static const HEADER_DESC contact_list_HDR={0,0,NULL,NULL,NULL,(int)cont_hdr,LGP_NULL}; 2668 static const int _softkeys[] = {0,1,2}; 2669 2670 static const SOFTKEY_DESC _sk[] = 2671 { 2672 {0x0018, 0x0000, (int)"Выбрать"}, 2673 {0x0001, 0x0000, (int)LG_CLOSE}, 2674 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 2675 }; 2676 2677 const SOFTKEYSTAB _skt = 2678 { 2679 _sk, 0 2680 }; 2681 static const MENU_DESC contact_list_MNU= 2682 { 2683 8,contact_keyhook,contact_list_ghook,NULL, 2684 _softkeys, 2685 &_skt, 2686 0x11, 2687 contacthandler, 2688 NULL, 2689 NULL, 2690 _MAX 2691 }; 2692 2693 \ In segment CODE, align 4, keep-with-next 2694 int CreateContactMenu(CLIST *t) 2695 { \ CreateContactMenu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2696 uinContact=t->uin; \ 00000004 ........ LDR R5,??DataTable50 ;; S_ICONS 2697 icon_array[0]=GetPicNByUnicodeSymbol(CBOX_CHECKED); 2698 icon_array[1]=GetPicNByUnicodeSymbol(CBOX_UNCHECKED); 2699 sprintf(cont_hdr,"%t %s","Меню кoнт.",t->name); \ 00000008 80609FE5 LDR R6,??CreateContactMenu_0 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0C0094E5 LDR R0,[R4, #+12] \ 00000014 400385E5 STR R0,[R5, #+832] \ 00000018 0B00A0E3 MOV R0,#+11 \ 0000001C E10C80E3 ORR R0,R0,#0xE100 \ 00000020 E40100EF SWI +484 \ 00000024 980085E5 STR R0,[R5, #+152] \ 00000028 0C00A0E3 MOV R0,#+12 \ 0000002C E10C80E3 ORR R0,R0,#0xE100 \ 00000030 E40100EF SWI +484 \ 00000034 9C0085E5 STR R0,[R5, #+156] \ 00000038 143084E2 ADD R3,R4,#+20 \ 0000003C 0620A0E1 MOV R2,R6 \ 00000040 0C1086E2 ADD R1,R6,#+12 \ 00000044 B800A0E3 MOV R0,#+184 \ 00000048 400D80E3 ORR R0,R0,#0x1000 \ 0000004C 050080E0 ADD R0,R0,R5 \ 00000050 160000EF SWI +22 2700 patch_header(&contact_list_HDR); \ 00000054 140086E2 ADD R0,R6,#+20 \ 00000058 ........ _BLF patch_header,??patch_header??rA 2701 return CreateMenu(0,0,&contact_list_MNU,&contact_list_HDR,0,_MAX,0,0); \ 0000005C 0000A0E3 MOV R0,#+0 \ 00000060 01002DE9 PUSH {R0} \ 00000064 01002DE9 PUSH {R0} \ 00000068 143086E2 ADD R3,R6,#+20 \ 0000006C 282086E2 ADD R2,R6,#+40 \ 00000070 0010A0E3 MOV R1,#+0 \ 00000074 0400A0E3 MOV R0,#+4 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 0000A0E3 MOV R0,#+0 \ 00000080 01002DE9 PUSH {R0} \ 00000084 520100EF SWI +338 \ 00000088 10D08DE2 ADD SP,SP,#+16 \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return \ ??CreateContactMenu_0: \ 00000090 ........ DC32 `?` 2702 } 2703 2704 //--------------------------------------------------------------------// 2705 2706 char hostbuf2[128]; 2707 \ In segment CODE, align 4, keep-with-next 2708 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 2709 { \ contactlist_menu_onkey: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 2710 CLIST *t; 2711 int i; 2712 i=GetCurMenuItem(data); \ 00000008 8F0100EF SWI +399 2713 t=FindContactByN(i); \ 0000000C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000010 0090A0E1 MOV R9,R0 2714 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 2715 { 2716 ShowMainMenu(); \ 00000024 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 2717 return(-1); \ 00000028 C80000EA B ??contactlist_menu_onkey_2 2718 } 2719 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_1: \ 0000002C ........ LDR R6,??DataTable50 ;; S_ICONS \ 00000030 EC50A0E3 MOV R5,#+236 \ 00000034 405E85E3 ORR R5,R5,#0x400 \ 00000038 3D0050E3 CMP R0,#+61 \ 0000003C 2300001A BNE ??contactlist_menu_onkey_3 2720 { 2721 if (t) \ 00000040 000059E3 CMP R9,#+0 \ 00000044 2B00000A BEQ ??contactlist_menu_onkey_4 2722 { 2723 if (t->isgroup) \ 00000048 080099E5 LDR R0,[R9, #+8] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 0700000A BEQ ??contactlist_menu_onkey_5 2724 { 2725 t->state^=0xFFFF; \ 00000054 B405D9E1 LDRH R0,[R9, #+84] \ 00000058 FF10A0E3 MOV R1,#+255 \ 0000005C FF1C81E3 ORR R1,R1,#0xFF00 \ 00000060 000021E0 EOR R0,R1,R0 \ 00000064 B405C9E1 STRH R0,[R9, #+84] 2726 RecountMenu(t,1); \ 00000068 0110A0E3 MOV R1,#+1 \ 0000006C 0900A0E1 MOV R0,R9 \ 00000070 1F0000EA B ??contactlist_menu_onkey_6 2727 return(-1); 2728 } 2729 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_5: \ 00000074 060085E0 ADD R0,R5,R6 \ 00000078 1B0000EF SWI +27 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 0500000A BEQ ??contactlist_menu_onkey_7 2730 { 2731 ClearContactT9Key(); \ 00000084 2010A0E3 MOV R1,#+32 \ 00000088 060085E0 ADD R0,R5,R6 \ 0000008C 1D0100EF SWI +285 2732 RecountMenu(NULL,1); \ 00000090 0110A0E3 MOV R1,#+1 \ 00000094 0000A0E3 MOV R0,#+0 \ 00000098 ........ BL RecountMenu 2733 } 2734 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_3: \ 000000D0 010050E3 CMP R0,#+1 \ 000000D4 0900001A BNE ??contactlist_menu_onkey_9 2740 { 2741 if (strlen(ContactT9Key)) \ 000000D8 060085E0 ADD R0,R5,R6 \ 000000DC 1B0000EF SWI +27 \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 0500000A BEQ ??contactlist_menu_onkey_9 2742 { 2743 BackSpaceContactT9(); \ 000000E8 ........ BL BackSpaceContactT9 2744 RecountMenu(NULL,1); \ 000000EC 0110A0E3 MOV R1,#+1 \ 000000F0 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_6: \ 000000F4 ........ BL RecountMenu 2745 return(-1); \ ??contactlist_menu_onkey_4: \ 000000F8 0000E0E3 MVN R0,#+0 \ 000000FC F68FBDE8 POP {R1,R2,R4-R11,PC} 2746 } 2747 } 2748 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_9: \ 00000100 04009DE5 LDR R0,[SP, #+4] \ 00000104 00A0A0E3 MOV R10,#+0 \ 00000108 041090E5 LDR R1,[R0, #+4] \ 0000010C 0140A0E3 MOV R4,#+1 \ 00000110 F200D1E1 LDRSH R0,[R1, #+2] \ 00000114 9320A0E3 MOV R2,#+147 \ 00000118 402F82E3 ORR R2,R2,#0x100 \ 0000011C 020050E1 CMP R0,R2 \ 00000120 8C00001A BNE ??contactlist_menu_onkey_10 2749 { 2750 int key=msg->gbsmsg->submess; \ 00000124 040091E5 LDR R0,[R1, #+4] 2751 if ((key>='0')&&(key<='9')) \ 00000128 300050E3 CMP R0,#+48 \ 0000012C 060000BA BLT ??contactlist_menu_onkey_11 \ 00000130 3A0050E3 CMP R0,#+58 \ 00000134 0B0000AA BGE ??contactlist_menu_onkey_12 2752 { 2753 AddContactT9Key(key); \ 00000138 ........ BL AddContactT9Key 2754 RecountMenu(NULL,1); \ 0000013C 0110A0E3 MOV R1,#+1 \ 00000140 0A00A0E1 MOV R0,R10 \ 00000144 ........ BL RecountMenu \ 00000148 150000EA B ??contactlist_menu_onkey_13 2755 return(-1); 2756 } 2757 #ifdef ELKA 2758 if (key==VOL_UP_BUTTON && isVolUpButton) 2759 { 2760 char *small_info=malloc(256); 2761 sprintf(small_info, "Время в онлайн:\n" 2762 "%02d:%02d:%02d\n" 2763 "Сервер:\n%s" 2764 ,uptimeHour, uptimeMin, uptimeSec, hostbuf2); 2765 ShowMSG(1,(int)small_info); 2766 mfree(small_info); 2767 } 2768 2769 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) 2770 { 2771 if(!away_m) 2772 { 2773 away_m=!away_m; 2774 GBS_StopTimer(&away_tmr); 2775 msg_away_timer=AUTO_ENGADE; 2776 away_timer(); 2777 main_d=1; 2778 InputAwayMsg(); 2779 } 2780 else 2781 { 2782 msg_away_timer=0; 2783 away_m=!away_m; 2784 } 2785 UpdateCLheader(); 2786 RefreshGUI(); 2787 } 2788 #endif 2789 if (key==GREEN_BUTTON) \ ??contactlist_menu_onkey_11: \ 0000014C 0B0050E3 CMP R0,#+11 \ 00000150 2D00001A BNE ??contactlist_menu_onkey_14 2790 { 2791 #ifdef kluchnik 2792 Show_XTX=!(Show_XTX); 2793 if(Show_XTX) 2794 ShowMSG(1,(int)"Show x-status"); 2795 else 2796 ShowMSG(1,(int)"Show time"); 2797 UpdateCLheader(); 2798 #else 2799 IsActiveUp=!IsActiveUp; \ 00000154 200296E5 LDR R0,[R6, #+544] \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 0040A013 MOVNE R4,#+0 \ 00000160 204286E5 STR R4,[R6, #+544] 2800 RecountMenu(NULL,1); \ 00000164 150100EA B ??contactlist_menu_onkey_15 2801 #endif 2802 return(-1); 2803 } 2804 if (key==LEFT_BUTTON) \ ??contactlist_menu_onkey_12: \ 00000168 3D0050E3 CMP R0,#+61 \ 0000016C 1100000A BEQ ??contactlist_menu_onkey_16 2805 { 2806 while(t=(CLIST *)(t->next)) 2807 { 2808 if (t->isunread) goto doit; 2809 } 2810 t=(CLIST *)(&cltop); 2811 while(t=(CLIST *)(t->next)) 2812 { 2813 if (t->isunread) goto doit; 2814 } 2815 if (t && Is_Show_Groups) {//???? ??????? ? ?????????? ??????? 2816 if (!t->isgroup) 2817 t=FindGroupByID(t->group); 2818 if (t && !t->state) {//?????? ??????? ? ??? ???????? 2819 t->state^=0xFFFF; 2820 goto does; 2821 } 2822 } 2823 doit: 2824 { 2825 CLIST *g=FindGroupByID(t->group); 2826 if (g) 2827 { 2828 if (g->state) 2829 { 2830 g->state=0; 2831 } 2832 } 2833 } 2834 does: 2835 RecountMenu(t,1); 2836 return(-1); 2837 } 2838 if (key=='*') 2839 { 2840 while(t=(CLIST *)(t->next)) 2841 { 2842 if (t->just_now) goto doit3; 2843 } 2844 t=(CLIST *)(&cltop); 2845 while(t=(CLIST *)(t->next)) 2846 { 2847 if (t->just_now) goto doit3; 2848 } 2849 return(-1); 2850 doit3: 2851 { 2852 CLIST *g=FindGroupByID(t->group); 2853 if (g) 2854 { 2855 if (g->state) 2856 { 2857 g->state=0; 2858 } 2859 } 2860 } 2861 RecountMenu(t,1); 2862 return(-1); 2863 } 2864 2865 if (key=='#') 2866 { 2867 if(ActionResh) 2868 { 2869 while(t=(CLIST *)(t->next)) 2870 { 2871 if (t->isactive) goto doit4; 2872 } 2873 t=(CLIST *)(&cltop); 2874 while(t=(CLIST *)(t->next)) 2875 { 2876 if (t->isactive) goto doit4; 2877 } 2878 return(-1); 2879 doit4: 2880 { 2881 CLIST *g=FindGroupByID(t->group); 2882 if (g) 2883 { 2884 if (g->state) 2885 { 2886 g->state=0; 2887 } 2888 } 2889 } 2890 RecountMenu(t,1); 2891 } 2892 else 2893 { 2894 if(t->log && !(t->just_now)) 2895 { 2896 FreeLOGQ(&t->log); 2897 t->msg_count=0; 2898 t->isactive=0; 2899 } 2900 2901 if(t->just_now) 2902 { 2903 CLIST *tt; 2904 tt=FindContactByUin(t->uin); 2905 tt->just_now=0; 2906 } 2907 2908 if(t->uin==UIN) 2909 { 2910 CLIST *tt; 2911 tt=(CLIST *)(&cltop); 2912 while(tt=(CLIST *)(tt->next)) 2913 { 2914 if(tt->just_now) tt->just_now=0; 2915 } 2916 } 2917 2918 if(strlen(ContactT9Key)) 2919 ClearContactT9Key(); 2920 RecountMenu(NULL,0); 2921 } 2922 return(-1); 2923 } 2924 if (key==RIGHT_BUTTON) \ 00000170 3E0050E3 CMP R0,#+62 \ 00000174 7700001A BNE ??contactlist_menu_onkey_10 2925 { 2926 //Послать запрос текста XStatus 2927 if (t) \ 00000178 000059E3 CMP R9,#+0 \ 0000017C 7500000A BEQ ??contactlist_menu_onkey_10 2928 { 2929 if (!t->isgroup) \ 00000180 080099E5 LDR R0,[R9, #+8] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 7200001A BNE ??contactlist_menu_onkey_10 2930 { 2931 FreeXText(t); \ 0000018C 0900A0E1 MOV R0,R9 \ 00000190 ........ _BLF FreeXText,??FreeXText??rA 2932 t->req_xtext=0; \ 00000194 9CA089E5 STR R10,[R9, #+156] 2933 RequestXText(t->uin); \ 00000198 0C0099E5 LDR R0,[R9, #+12] \ 0000019C ........ BL RequestXText 2934 RefreshGUI(); \ 000001A0 960100EF SWI +406 2935 return(-1); \ ??contactlist_menu_onkey_13: \ 000001A4 000064E2 RSB R0,R4,#+0 \ 000001A8 F68FBDE8 POP {R1,R2,R4-R11,PC} 2936 } 2937 } 2938 } \ ??contactlist_menu_onkey_17: \ 000001AC 700099E5 LDR R0,[R9, #+112] \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 0900001A BNE ??contactlist_menu_onkey_18 \ ??contactlist_menu_onkey_16: \ 000001B8 009099E5 LDR R9,[R9, #+0] \ 000001BC 000059E3 CMP R9,#+0 \ 000001C0 F9FFFF1A BNE ??contactlist_menu_onkey_17 \ 000001C4 AD9F86E2 ADD R9,R6,#+692 \ ??contactlist_menu_onkey_19: \ 000001C8 009099E5 LDR R9,[R9, #+0] \ 000001CC 000059E3 CMP R9,#+0 \ 000001D0 0200000A BEQ ??contactlist_menu_onkey_18 \ 000001D4 700099E5 LDR R0,[R9, #+112] \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC F9FFFF0A BEQ ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_18: \ 000001E0 100099E5 LDR R0,[R9, #+16] \ 000001E4 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC B415D011 LDRHNE R1,[R0, #+84] \ 000001F0 00005113 CMPNE R1,#+0 \ 000001F4 B4A5C011 STRHNE R10,[R0, #+84] \ 000001F8 0110A0E3 MOV R1,#+1 \ 000001FC 0900A0E1 MOV R0,R9 \ 00000200 ........ BL RecountMenu \ 00000204 000064E2 RSB R0,R4,#+0 \ 00000208 F68FBDE8 POP {R1,R2,R4-R11,PC} \ ??contactlist_menu_onkey_14: \ 0000020C 2A0050E3 CMP R0,#+42 \ 00000210 1D00000A BEQ ??contactlist_menu_onkey_20 \ 00000214 230050E3 CMP R0,#+35 \ 00000218 4E00001A BNE ??contactlist_menu_onkey_10 \ 0000021C 480196E5 LDR R0,[R6, #+328] \ 00000220 000050E3 CMP R0,#+0 \ 00000224 2600001A BNE ??contactlist_menu_onkey_21 \ 00000228 800099E5 LDR R0,[R9, #+128] \ 0000022C 000050E3 CMP R0,#+0 \ 00000230 0600000A BEQ ??contactlist_menu_onkey_22 \ 00000234 680099E5 LDR R0,[R9, #+104] \ 00000238 000050E3 CMP R0,#+0 \ 0000023C 0300001A BNE ??contactlist_menu_onkey_22 \ 00000240 800089E2 ADD R0,R9,#+128 \ 00000244 ........ BL FreeLOGQ \ 00000248 90A089E5 STR R10,[R9, #+144] \ 0000024C 8CA089E5 STR R10,[R9, #+140] \ ??contactlist_menu_onkey_22: \ 00000250 680099E5 LDR R0,[R9, #+104] \ 00000254 000050E3 CMP R0,#+0 \ 00000258 0200000A BEQ ??contactlist_menu_onkey_23 \ 0000025C 0C0099E5 LDR R0,[R9, #+12] \ 00000260 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000264 68A080E5 STR R10,[R0, #+104] \ ??contactlist_menu_onkey_23: \ 00000268 0C0099E5 LDR R0,[R9, #+12] \ 0000026C 241196E5 LDR R1,[R6, #+292] \ 00000270 010050E1 CMP R0,R1 \ 00000274 2B00001A BNE ??contactlist_menu_onkey_24 \ 00000278 AD0F86E2 ADD R0,R6,#+692 \ 0000027C 260000EA B ??contactlist_menu_onkey_25 \ ??contactlist_menu_onkey_26: \ 00000280 680099E5 LDR R0,[R9, #+104] \ 00000284 000050E3 CMP R0,#+0 \ 00000288 D4FFFF1A BNE ??contactlist_menu_onkey_18 \ ??contactlist_menu_onkey_20: \ 0000028C 009099E5 LDR R9,[R9, #+0] \ 00000290 000059E3 CMP R9,#+0 \ 00000294 F9FFFF1A BNE ??contactlist_menu_onkey_26 \ 00000298 AD9F86E2 ADD R9,R6,#+692 \ ??contactlist_menu_onkey_27: \ 0000029C 009099E5 LDR R9,[R9, #+0] \ 000002A0 000059E3 CMP R9,#+0 \ 000002A4 93FFFF0A BEQ ??contactlist_menu_onkey_4 \ 000002A8 680099E5 LDR R0,[R9, #+104] \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 F9FFFF0A BEQ ??contactlist_menu_onkey_27 \ 000002B4 C9FFFFEA B ??contactlist_menu_onkey_18 \ ??contactlist_menu_onkey_28: \ 000002B8 8C0099E5 LDR R0,[R9, #+140] \ 000002BC 000050E3 CMP R0,#+0 \ 000002C0 0900001A BNE ??contactlist_menu_onkey_29 \ ??contactlist_menu_onkey_21: \ 000002C4 009099E5 LDR R9,[R9, #+0] \ 000002C8 000059E3 CMP R9,#+0 \ 000002CC F9FFFF1A BNE ??contactlist_menu_onkey_28 \ 000002D0 AD9F86E2 ADD R9,R6,#+692 \ ??contactlist_menu_onkey_30: \ 000002D4 009099E5 LDR R9,[R9, #+0] \ 000002D8 000059E3 CMP R9,#+0 \ 000002DC 85FFFF0A BEQ ??contactlist_menu_onkey_4 \ 000002E0 8C0099E5 LDR R0,[R9, #+140] \ 000002E4 000050E3 CMP R0,#+0 \ 000002E8 F9FFFF0A BEQ ??contactlist_menu_onkey_30 \ ??contactlist_menu_onkey_29: \ 000002EC 100099E5 LDR R0,[R9, #+16] \ 000002F0 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 B415D011 LDRHNE R1,[R0, #+84] \ 000002FC 00005113 CMPNE R1,#+0 \ 00000300 B4A5C011 STRHNE R10,[R0, #+84] \ 00000304 0110A0E3 MOV R1,#+1 \ 00000308 0900A0E1 MOV R0,R9 \ 0000030C 0E0000EA B ??contactlist_menu_onkey_31 \ ??contactlist_menu_onkey_32: \ 00000310 681090E5 LDR R1,[R0, #+104] \ 00000314 000051E3 CMP R1,#+0 \ 00000318 68A08015 STRNE R10,[R0, #+104] \ ??contactlist_menu_onkey_25: \ 0000031C 000090E5 LDR R0,[R0, #+0] \ 00000320 000050E3 CMP R0,#+0 \ 00000324 F9FFFF1A BNE ??contactlist_menu_onkey_32 \ ??contactlist_menu_onkey_24: \ 00000328 060085E0 ADD R0,R5,R6 \ 0000032C 1B0000EF SWI +27 \ 00000330 000050E3 CMP R0,#+0 \ 00000334 0200000A BEQ ??contactlist_menu_onkey_33 \ 00000338 2010A0E3 MOV R1,#+32 \ 0000033C 060085E0 ADD R0,R5,R6 \ 00000340 1D0100EF SWI +285 \ ??contactlist_menu_onkey_33: \ 00000344 0010A0E3 MOV R1,#+0 \ 00000348 0100A0E1 MOV R0,R1 \ ??contactlist_menu_onkey_31: \ 0000034C ........ BL RecountMenu \ ??contactlist_menu_onkey_2: \ 00000350 0000E0E3 MVN R0,#+0 \ 00000354 F68FBDE8 POP {R1,R2,R4-R11,PC} 2939 /* 2940 if (key==0x19) 2941 { 2942 CreateScreenSelectGUI(); 2943 // GeneralFuncF1(1); 2944 return(-1); 2945 }*/ 2946 } 2947 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_10: \ 00000358 F200D1E1 LDRSH R0,[R1, #+2] \ 0000035C 022082E2 ADD R2,R2,#+2 \ 00000360 020050E1 CMP R0,R2 \ 00000364 E000001A BNE ??contactlist_menu_onkey_34 2948 { 2949 if (msg->gbsmsg->submess=='#') \ 00000368 040091E5 LDR R0,[R1, #+4] \ 0000036C ........ LDR R7,??DataTable53 ;; `?gbsmsg->submess=='*') \ ??contactlist_menu_onkey_35: \ 000003E0 2A0050E3 CMP R0,#+42 \ 000003E4 1200001A BNE ??contactlist_menu_onkey_36 2969 { 2970 ClearContactT9Key(); \ 000003E8 2010A0E3 MOV R1,#+32 \ 000003EC 060085E0 ADD R0,R5,R6 \ 000003F0 1D0100EF SWI +285 2971 RecountMenu(NULL,1); \ 000003F4 0110A0E3 MOV R1,#+1 \ 000003F8 0A00A0E1 MOV R0,R10 \ 000003FC ........ BL RecountMenu 2972 silenthide=1; \ 00000400 604286E5 STR R4,[R6, #+608] 2973 gipc.name_to=ipc_xtask_name; \ 00000404 9F0F85E2 ADD R0,R5,#+636 \ 00000408 070080E0 ADD R0,R0,R7 \ 0000040C 740086E5 STR R0,[R6, #+116] 2974 gipc.name_from=ipc_my_name; \ 00000410 970F85E2 ADD R0,R5,#+604 \ 00000414 070080E0 ADD R0,R0,R7 \ 00000418 780086E5 STR R0,[R6, #+120] 2975 gipc.data=0; \ 0000041C 7CA086E5 STR R10,[R6, #+124] 2976 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000420 743086E2 ADD R3,R6,#+116 \ 00000424 0420A0E1 MOV R2,R4 \ 00000428 0B10A0E1 MOV R1,R11 \ 0000042C 0800A0E1 MOV R0,R8 \ 00000430 000100EF SWI +256 2977 } 2978 2979 if (msg->gbsmsg->submess==RIGHT_BUTTON) \ ??contactlist_menu_onkey_36: \ 00000434 04009DE5 LDR R0,[SP, #+4] \ 00000438 040090E5 LDR R0,[R0, #+4] \ 0000043C 040090E5 LDR R0,[R0, #+4] \ 00000440 3E0050E3 CMP R0,#+62 \ 00000444 0100001A BNE ??contactlist_menu_onkey_37 2980 { 2981 CreateContactMenu(t); \ 00000448 0900A0E1 MOV R0,R9 \ 0000044C ........ BL CreateContactMenu 2982 } 2983 2984 //-------------------- LONG PRESS ACTION ON CL --------------------// 2985 2986 switch(msg->gbsmsg->submess) \ ??contactlist_menu_onkey_37: \ 00000450 04009DE5 LDR R0,[SP, #+4] \ 00000454 98829FE5 LDR R8,??contactlist_menu_onkey_38 ;; WriteDefSettings \ 00000458 040090E5 LDR R0,[R0, #+4] \ 0000045C 040090E5 LDR R0,[R0, #+4] \ 00000460 310040E2 SUB R0,R0,#+49 \ 00000464 080050E3 CMP R0,#+8 \ 00000468 9100008A BHI ??contactlist_menu_onkey_39 \ 0000046C 011F8FE2 ADR R1,??contactlist_menu_onkey_0 \ 00000470 0010D1E7 LDRB R1,[R1, R0] \ 00000474 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??contactlist_menu_onkey_0: \ 00000478 02101F2D DC8 +2,+16,+31,+45 \ 0000047C 3E56677A DC8 +62,+86,+103,+122 \ 00000480 80000000 DC8 +128,+0,+0,+0 2987 { 2988 case '1': 2989 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??contactlist_menu_onkey_40: \ 00000484 680296E5 LDR R0,[R6, #+616] \ 00000488 000050E3 CMP R0,#+0 \ 0000048C 0040A013 MOVNE R4,#+0 \ 00000490 684286E5 STR R4,[R6, #+616] 2990 // if(isShowMsgLongPress) 2991 // { 2992 if(Is_Sounds_Enabled) \ 00000494 000054E3 CMP R4,#+0 2993 ShowMSG(1,(int)"Sound 0n"); \ 00000498 940F8512 ADDNE R0,R5,#+592 \ 0000049C 07108010 ADDNE R1,R0,R7 2994 else 2995 ShowMSG(1,(int)"Sound Off"); \ 000004A0 731E8702 ADDEQ R1,R7,#+1840 \ 000004A4 0100A0E3 MOV R0,#+1 \ 000004A8 480100EF SWI +328 2996 // } 2997 SUBPROC((void*)WriteDefSettings); \ 000004AC 0800A0E1 MOV R0,R8 \ 000004B0 710100EF SWI +369 2998 RefreshGUI(); \ 000004B4 960100EF SWI +406 \ 000004B8 7D0000EA B ??contactlist_menu_onkey_39 2999 break; 3000 case '2': 3001 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??contactlist_menu_onkey_41: \ 000004BC 240296E5 LDR R0,[R6, #+548] \ 000004C0 000050E3 CMP R0,#+0 \ 000004C4 0040A013 MOVNE R4,#+0 \ 000004C8 244286E5 STR R4,[R6, #+548] 3002 SUBPROC((void*)WriteDefSettings); \ 000004CC 0800A0E1 MOV R0,R8 \ 000004D0 710100EF SWI +369 3003 RefreshGUI(); \ 000004D4 960100EF SWI +406 3004 // if(isShowMsgLongPress) 3005 // { 3006 if(Is_Vibra_Enabled) \ 000004D8 240296E5 LDR R0,[R6, #+548] \ 000004DC 000050E3 CMP R0,#+0 \ 000004E0 8E0F8502 ADDEQ R0,R5,#+568 \ 000004E4 07108000 ADDEQ R1,R0,R7 3007 ShowMSG(1,(int)"Vibra On"); \ 000004E8 48108712 ADDNE R1,R7,#+72 \ ??contactlist_menu_onkey_42: \ 000004EC 0100A0E3 MOV R0,#+1 \ ??contactlist_menu_onkey_43: \ 000004F0 480100EF SWI +328 \ 000004F4 6E0000EA B ??contactlist_menu_onkey_39 3008 else 3009 ShowMSG(1,(int)"Vibra Off"); 3010 // } 3011 break; 3012 case '3': 3013 if(CurrentPrivateStatus!=1) \ ??contactlist_menu_onkey_44: \ 000004F8 780296E5 LDR R0,[R6, #+632] \ 000004FC 010050E3 CMP R0,#+1 \ 00000500 0500000A BEQ ??contactlist_menu_onkey_45 3014 { 3015 SetPrivateStatus(1);//Инвиз \ 00000504 0100A0E3 MOV R0,#+1 \ 00000508 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 3016 // if(isShowMsgLongPress) 3017 ShowMSG(1,(int)"Инвиз включен"); \ 0000050C 8A0F85E2 ADD R0,R5,#+552 \ 00000510 071080E0 ADD R1,R0,R7 \ 00000514 0400A0E1 MOV R0,R4 \ ??contactlist_menu_onkey_46: \ 00000518 F4FFFFEA B ??contactlist_menu_onkey_43 3018 } 3019 else 3020 { 3021 SetPrivateStatus(3);//не инвиз:) \ ??contactlist_menu_onkey_45: \ 0000051C 0300A0E3 MOV R0,#+3 \ 00000520 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 3022 // if(isShowMsgLongPress) 3023 ShowMSG(1,(int)"Инвиз выключен"); \ 00000524 860F85E2 ADD R0,R5,#+536 \ 00000528 071080E0 ADD R1,R0,R7 \ 0000052C EEFFFFEA B ??contactlist_menu_onkey_42 3024 } 3025 break; 3026 case '4': 3027 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??contactlist_menu_onkey_47: \ 00000530 0C0296E5 LDR R0,[R6, #+524] \ 00000534 000050E3 CMP R0,#+0 \ 00000538 0040A013 MOVNE R4,#+0 \ 0000053C 0C4286E5 STR R4,[R6, #+524] 3028 SUBPROC((void*)WriteDefSettings); \ 00000540 0800A0E1 MOV R0,R8 \ 00000544 710100EF SWI +369 3029 RefreshGUI(); \ 00000548 960100EF SWI +406 3030 // if(isShowMsgLongPress) 3031 // { 3032 if(Is_Double_Vibra_On) \ 0000054C 0C0296E5 LDR R0,[R6, #+524] \ 00000550 000050E3 CMP R0,#+0 \ 00000554 0300000A BEQ ??contactlist_menu_onkey_48 3033 ShowMSG(1,(int)"Vibra rem On"); \ 00000558 820F85E2 ADD R0,R5,#+520 \ 0000055C 071080E0 ADD R1,R0,R7 \ 00000560 0100A0E3 MOV R0,#+1 \ 00000564 E1FFFFEA B ??contactlist_menu_onkey_43 3034 else 3035 ShowMSG(1,(int)"Vibra rem Off"); \ ??contactlist_menu_onkey_48: \ 00000568 7E0F85E2 ADD R0,R5,#+504 \ 0000056C 071080E0 ADD R1,R0,R7 \ 00000570 DDFFFFEA B ??contactlist_menu_onkey_42 3036 // } 3037 break; 3038 case '5': 3039 { 3040 CLIST *cl; 3041 cl=(CLIST *)(&cltop); \ ??contactlist_menu_onkey_49: \ 00000574 AD4F86E2 ADD R4,R6,#+692 \ 00000578 060000EA B ??contactlist_menu_onkey_50 3042 while(cl=(CLIST *)(cl->next)) 3043 { 3044 if(cl->log) \ ??contactlist_menu_onkey_51: \ 0000057C 800094E5 LDR R0,[R4, #+128] \ 00000580 000050E3 CMP R0,#+0 \ 00000584 0300000A BEQ ??contactlist_menu_onkey_50 3045 { 3046 FreeLOGQ(&cl->log); \ 00000588 800084E2 ADD R0,R4,#+128 \ 0000058C ........ BL FreeLOGQ 3047 cl->msg_count=0; \ 00000590 90A084E5 STR R10,[R4, #+144] 3048 cl->isactive=0; \ 00000594 8CA084E5 STR R10,[R4, #+140] 3049 } 3050 } \ ??contactlist_menu_onkey_50: \ 00000598 004094E5 LDR R4,[R4, #+0] \ 0000059C 000054E3 CMP R4,#+0 \ 000005A0 F5FFFF1A BNE ??contactlist_menu_onkey_51 3051 3052 if(strlen(ContactT9Key)) \ 000005A4 060085E0 ADD R0,R5,R6 \ 000005A8 1B0000EF SWI +27 \ 000005AC 000050E3 CMP R0,#+0 \ 000005B0 0200000A BEQ ??contactlist_menu_onkey_15 3053 ClearContactT9Key(); \ 000005B4 2010A0E3 MOV R1,#+32 \ 000005B8 060085E0 ADD R0,R5,R6 \ 000005BC 1D0100EF SWI +285 3054 // t->isactive=0; 3055 RecountMenu(NULL,1); \ ??contactlist_menu_onkey_15: \ 000005C0 0110A0E3 MOV R1,#+1 \ 000005C4 0000A0E3 MOV R0,#+0 \ 000005C8 ........ BL RecountMenu 3056 return (-1); \ 000005CC 0A00E0E1 MVN R0,R10 \ 000005D0 F68FBDE8 POP {R1,R2,R4-R11,PC} 3057 } 3058 case '6': 3059 if(!away_m) \ ??contactlist_menu_onkey_52: \ 000005D4 340296E5 LDR R0,[R6, #+564] \ 000005D8 000050E3 CMP R0,#+0 \ 000005DC 0900001A BNE ??contactlist_menu_onkey_53 3060 { 3061 away_m=!away_m; \ 000005E0 344286E5 STR R4,[R6, #+564] 3062 GBS_StopTimer(&away_tmr); \ 000005E4 C800A0E3 MOV R0,#+200 \ 000005E8 D00E80E3 ORR R0,R0,#0xD00 \ 000005EC 060080E0 ADD R0,R0,R6 \ 000005F0 440100EF SWI +324 3063 msg_away_timer=AUTO_ENGADE; \ 000005F4 D80096E5 LDR R0,[R6, #+216] \ 000005F8 300286E5 STR R0,[R6, #+560] 3064 away_timer(); \ 000005FC ........ BL away_timer 3065 // ShowMSG(1,(int)"Автоответчик включен!"); 3066 InputAwayMsg(); \ 00000600 ........ BL InputAwayMsg \ 00000604 010000EA B ??contactlist_menu_onkey_54 3067 } 3068 else 3069 { 3070 msg_away_timer=0; \ ??contactlist_menu_onkey_53: \ 00000608 30A286E5 STR R10,[R6, #+560] 3071 away_m=!away_m; \ 0000060C 34A286E5 STR R10,[R6, #+564] 3072 // ShowMSG(1,(int)"Автоответчик выключен!"); 3073 } 3074 UpdateCLheader(); \ ??contactlist_menu_onkey_54: \ 00000610 ........ BL UpdateCLheader \ 00000614 260000EA B ??contactlist_menu_onkey_39 3075 break; 3076 case '7': 3077 { 3078 Show_XTX=!(Show_XTX); \ ??contactlist_menu_onkey_55: \ 00000618 400296E5 LDR R0,[R6, #+576] \ 0000061C 000050E3 CMP R0,#+0 \ 00000620 0040A013 MOVNE R4,#+0 \ 00000624 404286E5 STR R4,[R6, #+576] 3079 // if(isShowMsgLongPress) 3080 // { 3081 if(Show_XTX) \ 00000628 000054E3 CMP R4,#+0 3082 ShowMSG(1,(int)"Show x-status"); \ 0000062C 7A0F8512 ADDNE R0,R5,#+488 3083 else 3084 ShowMSG(1,(int)"Show time"); \ 00000630 770F8502 ADDEQ R0,R5,#+476 \ 00000634 071080E0 ADD R1,R0,R7 \ 00000638 0100A0E3 MOV R0,#+1 \ 0000063C 480100EF SWI +328 3085 //} 3086 } 3087 ClearContactT9Key(); \ 00000640 2010A0E3 MOV R1,#+32 \ 00000644 060085E0 ADD R0,R5,R6 \ 00000648 1D0100EF SWI +285 3088 UpdateCLheader(); \ 0000064C ........ BL UpdateCLheader 3089 RecountMenu(t,1); \ 00000650 0110A0E3 MOV R1,#+1 \ 00000654 0900A0E1 MOV R0,R9 \ 00000658 ........ BL RecountMenu \ 0000065C 0A00E0E1 MVN R0,R10 \ 00000660 F68FBDE8 POP {R1,R2,R4-R11,PC} 3090 return -1; 3091 case '8': 3092 { 3093 WSHDR *ws; 3094 ws=AllocWS(150); \ ??contactlist_menu_onkey_56: \ 00000664 9600A0E3 MOV R0,#+150 \ 00000668 250100EF SWI +293 \ 0000066C 0040A0E1 MOV R4,R0 3095 #ifdef NEWSGOLD 3096 str_2ws(ws,"4:\\zbin\\etc\\NATICQ.bcfg",128); 3097 #else 3098 str_2ws(ws,"0:\\zbin\\etc\\NATICQ.bcfg",128); \ 00000670 8020A0E3 MOV R2,#+128 \ 00000674 6B1E87E2 ADD R1,R7,#+1712 \ 00000678 060000EA B ??contactlist_menu_onkey_57 3099 #endif 3100 ExecuteFile(ws,0,0); 3101 FreeWS(ws); 3102 } 3103 break; 3104 case '9': 3105 { 3106 3107 WSHDR *ws; 3108 ws=AllocWS(150); \ ??contactlist_menu_onkey_58: \ 0000067C 9600A0E3 MOV R0,#+150 \ 00000680 250100EF SWI +293 \ 00000684 0040A0E1 MOV R4,R0 3109 #ifdef NEWSGOLD 3110 str_2ws(ws,"4:\\zbin\\etc\\NATICQMod.bcfg",128); 3111 #else 3112 str_2ws(ws,"0:\\zbin\\etc\\NATICQMod.bcfg",128); \ 00000688 8020A0E3 MOV R2,#+128 \ 0000068C 6A0F85E2 ADD R0,R5,#+424 \ 00000690 071080E0 ADD R1,R0,R7 \ 00000694 0400A0E1 MOV R0,R4 \ ??contactlist_menu_onkey_57: \ 00000698 6C0100EF SWI +364 3113 #endif 3114 ExecuteFile(ws,0,0); \ 0000069C 0020A0E3 MOV R2,#+0 \ 000006A0 0210A0E1 MOV R1,R2 \ 000006A4 0400A0E1 MOV R0,R4 \ 000006A8 940000EF SWI +148 3115 FreeWS(ws); \ 000006AC 0400A0E1 MOV R0,R4 \ 000006B0 290100EF SWI +297 3116 } 3117 break; 3118 } 3119 3120 int key=msg->gbsmsg->submess; \ ??contactlist_menu_onkey_39: \ 000006B4 04009DE5 LDR R0,[SP, #+4] \ 000006B8 040090E5 LDR R0,[R0, #+4] \ 000006BC 040090E5 LDR R0,[R0, #+4] 3121 if ((key>='0')&&(key<='9')) \ 000006C0 300050E3 CMP R0,#+48 \ 000006C4 080000BA BLT ??contactlist_menu_onkey_34 \ 000006C8 3A0050E3 CMP R0,#+58 \ 000006CC 060000AA BGE ??contactlist_menu_onkey_34 3122 { 3123 ClearContactT9Key(); \ 000006D0 2010A0E3 MOV R1,#+32 \ 000006D4 060085E0 ADD R0,R5,R6 \ 000006D8 1D0100EF SWI +285 3124 UpdateCLheader(); \ 000006DC ........ BL UpdateCLheader 3125 RecountMenu(NULL,1); \ 000006E0 0110A0E3 MOV R1,#+1 \ 000006E4 0000A0E3 MOV R0,#+0 \ 000006E8 ........ BL RecountMenu 3126 } 3127 } 3128 return(0); \ ??contactlist_menu_onkey_34: \ 000006EC 0000A0E3 MOV R0,#+0 \ 000006F0 F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return \ ??contactlist_menu_onkey_38: \ 000006F4 ........ DC32 WriteDefSettings 3129 } 3130 \ In segment CODE, align 4, keep-with-next 3131 void GetOnTotalContact(int group_id,int *_onlinetotal) 3132 { 3133 CLIST *t; 3134 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable52 ;; S_ICONS + 692 \ 00000004 30002DE9 PUSH {R4,R5} 3135 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 3136 while((t=t->next)) 3137 { 3138 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 3139 { 3140 total++; 3141 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 3142 } 3143 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 3144 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 3145 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 3146 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 3147 3148 \ In segment CODE, align 4, keep-with-next 3149 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 3150 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 3151 CLIST *t; 3152 #ifdef USE_MLMENU 3153 void *item=AllocMLMenuItem(data); 3154 #else 3155 void *item=AllocMenuItem(data); 3156 #endif 3157 int icon; 3158 3159 WSHDR *ws2; 3160 #ifdef USE_MLMENU 3161 WSHDR *ws4; 3162 #endif 3163 WSHDR ws1loc, *ws1; 3164 unsigned short num[128]; 3165 ws1=CreateLocalWS(&ws1loc,num,128); 3166 #ifdef USE_MLMENU 3167 WSHDR ws3loc, *ws3; 3168 unsigned short num3[128]; 3169 ws3=CreateLocalWS(&ws3loc,num3,128); 3170 char s[64]; 3171 #endif 3172 t=FindContactByN(curitem); \ 00000008 ........ LDR R10,??DataTable53 ;; `?just_now) \ 00000060 680098E5 LDR R0,[R8, #+104] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0F00000A BEQ ??contactlist_menu_iconhndl_2 3179 { 3180 char *test=malloc(64); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 00B0A0E1 MOV R11,R0 3181 sprintf(test, ">> %s <<", t->name); \ 00000078 142088E2 ADD R2,R8,#+20 \ 0000007C 8800A0E3 MOV R0,#+136 \ 00000080 600E80E3 ORR R0,R0,#0x600 \ 00000084 0A1080E0 ADD R1,R0,R10 \ 00000088 0B00A0E1 MOV R0,R11 \ 0000008C 160000EF SWI +22 3182 wsprintf(ws1,percent_t,test); \ 00000090 0B20A0E1 MOV R2,R11 \ 00000094 28108AE2 ADD R1,R10,#+40 \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C 240100EF SWI +292 3183 mfree(test); \ 000000A0 0B00A0E1 MOV R0,R11 \ 000000A4 150000EF SWI +21 \ 000000A8 030000EA B ??contactlist_menu_iconhndl_3 3184 } 3185 else 3186 wsprintf(ws1,percent_t,t->name); \ ??contactlist_menu_iconhndl_2: \ 000000AC 142088E2 ADD R2,R8,#+20 \ 000000B0 28108AE2 ADD R1,R10,#+40 \ 000000B4 0600A0E1 MOV R0,R6 \ 000000B8 240100EF SWI +292 3187 if (t->just_now) \ ??contactlist_menu_iconhndl_3: \ 000000BC 680098E5 LDR R0,[R8, #+104] \ 000000C0 08B0A0E3 MOV R11,#+8 \ 000000C4 E0BC8BE3 ORR R11,R11,#0xE000 \ 000000C8 000050E3 CMP R0,#+0 3188 { 3189 wsInsertChar(ws1,0x0004,1); \ 000000CC 0120A013 MOVNE R2,#+1 \ 000000D0 0410A013 MOVNE R1,#+4 \ 000000D4 0400001A BNE ??contactlist_menu_iconhndl_4 3190 wsInsertChar(ws1,0xE008,1); 3191 } 3192 else 3193 if (t->isactive) \ 000000D8 8C0098E5 LDR R0,[R8, #+140] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 0700000A BEQ ??contactlist_menu_iconhndl_5 3194 { 3195 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 3196 wsInsertChar(ws1,0xE008,1); \ 000000F4 0120A0E3 MOV R2,#+1 \ 000000F8 0B10A0E1 MOV R1,R11 \ 000000FC 0600A0E1 MOV R0,R6 \ 00000100 1D0000EF SWI +29 3197 } 3198 #ifdef USE_MLMENU 3199 if ((t->xtext && t->xtext[0]!=0) && (Show_XTX) && (t->state!=0xFFFF))//Если контакт онлайн и показывать хстатус \ ??contactlist_menu_iconhndl_5: \ 00000104 940098E5 LDR R0,[R8, #+148] \ 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 98019FE5 LDR R0,??contactlist_menu_iconhndl_7 ;; S_ICONS + 576 \ 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 3200 { 3201 int i; 3202 zeromem(s,64); \ 00000140 4010A0E3 MOV R1,#+64 \ 00000144 820F8DE2 ADD R0,SP,#+520 \ 00000148 1D0100EF SWI +285 3203 i=t->xtext[0]; \ 0000014C 940098E5 LDR R0,[R8, #+148] \ ??contactlist_menu_iconhndl_8: \ 00000150 0020D0E5 LDRB R2,[R0, #+0] 3204 if (i>63) i=63; 3205 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 3206 wsprintf(ws3,"%c%t",0xE012,s); \ 00000168 823F8DE2 ADD R3,SP,#+520 \ 0000016C 0B20A0E1 MOV R2,R11 \ 00000170 681E8AE2 ADD R1,R10,#+1664 \ 00000174 0700A0E1 MOV R0,R7 \ 00000178 240100EF SWI +292 \ 0000017C 0D0000EA B ??contactlist_menu_iconhndl_9 3207 } 3208 else 3209 if(t->xtext2 && t->xtext2[0]!=0) \ ??contactlist_menu_iconhndl_6: \ 00000180 980098E5 LDR R0,[R8, #+152] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 0000D015 LDRBNE R0,[R0, #+0] \ 0000018C 00005013 CMPNE R0,#+0 \ 00000190 0400000A BEQ ??contactlist_menu_iconhndl_10 3210 { 3211 int i; 3212 zeromem(s,64); \ 00000194 4010A0E3 MOV R1,#+64 \ 00000198 820F8DE2 ADD R0,SP,#+520 \ 0000019C 1D0100EF SWI +285 3213 i=t->xtext2[0]; \ 000001A0 980098E5 LDR R0,[R8, #+152] \ 000001A4 E9FFFFEA B ??contactlist_menu_iconhndl_8 3214 if (i>63) i=63; 3215 strncpy(s,t->xtext2+1,i); 3216 wsprintf(ws3,"%c%t",0xE012,s); 3217 } 3218 else 3219 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_10: \ 000001A8 0C2098E5 LDR R2,[R8, #+12] \ 000001AC 2B108AE2 ADD R1,R10,#+43 \ 000001B0 0700A0E1 MOV R0,R7 \ 000001B4 240100EF SWI +292 3220 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_9: \ 000001B8 B605D8E1 LDRH R0,[R8, #+86] \ 000001BC ........ LDR R2,??DataTable54 ;; total_xstatuses \ 000001C0 0010A0E1 MOV R1,R0 \ 000001C4 002092E5 LDR R2,[R2, #+0] \ 000001C8 020051E1 CMP R1,R2 \ 000001CC 1E0000AA BGE ??contactlist_menu_iconhndl_11 \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 1C00000A BEQ ??contactlist_menu_iconhndl_11 3221 { 3222 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 000001D8 0120A0E3 MOV R2,#+1 \ 000001DC 3700A0E3 MOV R0,#+55 \ 000001E0 E10C80E3 ORR R0,R0,#0xE100 \ 000001E4 011080E0 ADD R1,R0,R1 \ 000001E8 0700A0E1 MOV R0,R7 \ 000001EC 1D0000EF SWI +29 \ 000001F0 150000EA B ??contactlist_menu_iconhndl_11 3223 } 3224 #endif 3225 } 3226 else 3227 { 3228 int onlinetotal[2]; 3229 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 000001F4 100098E5 LDR R0,[R8, #+16] \ 000001F8 0D10A0E1 MOV R1,SP \ 000001FC ........ BL GetOnTotalContact 3230 #ifdef USE_MLMENU 3231 wsprintf(ws1,percent_t,t->name); \ 00000200 142088E2 ADD R2,R8,#+20 \ 00000204 28108AE2 ADD R1,R10,#+40 \ 00000208 0600A0E1 MOV R0,R6 \ 0000020C 240100EF SWI +292 3232 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 00000210 04309DE5 LDR R3,[SP, #+4] \ 00000214 00209DE5 LDR R2,[SP, #+0] \ 00000218 7800A0E3 MOV R0,#+120 \ 0000021C 600E80E3 ORR R0,R0,#0x600 \ 00000220 0A1080E0 ADD R1,R0,R10 \ 00000224 0700A0E1 MOV R0,R7 \ 00000228 240100EF SWI +292 3233 #else 3234 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 3235 #endif 3236 if (t->state) icon++; //Модификация иконки группы \ 0000022C B405D8E1 LDRH R0,[R8, #+84] \ 00000230 000050E3 CMP R0,#+0 \ 00000234 0400000A BEQ ??contactlist_menu_iconhndl_11 \ 00000238 019089E2 ADD R9,R9,#+1 \ 0000023C 020000EA B ??contactlist_menu_iconhndl_11 3237 } 3238 } 3239 else 3240 { 3241 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 00000240 671E8AE2 ADD R1,R10,#+1648 \ 00000244 0600A0E1 MOV R0,R6 \ 00000248 240100EF SWI +292 3242 } 3243 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ ??contactlist_menu_iconhndl_11: \ 0000024C 000096E5 LDR R0,[R6, #+0] \ 00000250 B010D0E1 LDRH R1,[R0, #+0] \ 00000254 0400A0E1 MOV R0,R4 \ 00000258 980100EF SWI +408 \ 0000025C 0080A0E1 MOV R8,R0 3244 wstrcpy(ws2,ws1); \ 00000260 0610A0E1 MOV R1,R6 \ 00000264 1F0100EF SWI +287 3245 3246 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 00000268 ........ LDR R0,??DataTable55 ;; S_ICONS \ 0000026C 0510A0E1 MOV R1,R5 \ 00000270 092180E0 ADD R2,R0,R9, LSL #+2 \ 00000274 0400A0E1 MOV R0,R4 \ 00000278 990100EF SWI +409 3247 #ifdef USE_MLMENU 3248 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 0000027C 000097E5 LDR R0,[R7, #+0] \ 00000280 B010D0E1 LDRH R1,[R0, #+0] \ 00000284 0400A0E1 MOV R0,R4 \ 00000288 980100EF SWI +408 \ 0000028C 0060A0E1 MOV R6,R0 3249 wstrcpy(ws4,ws3); \ 00000290 0710A0E1 MOV R1,R7 \ 00000294 1F0100EF SWI +287 3250 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 00000298 70029DE5 LDR R0,[SP, #+624] \ 0000029C 0630A0E1 MOV R3,R6 \ 000002A0 01002DE9 PUSH {R0} \ 000002A4 0820A0E1 MOV R2,R8 \ 000002A8 0510A0E1 MOV R1,R5 \ 000002AC 0400A0E1 MOV R0,R4 \ 000002B0 180200EF SWI +536 3251 #else 3252 SetMenuItemText(data, item, ws2, curitem); 3253 #endif 3254 } \ 000002B4 9EDF8DE2 ADD SP,SP,#+632 \ 000002B8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??contactlist_menu_iconhndl_7: \ 000002BC ........ DC32 S_ICONS + 576 3255 3256 //=============================================================================================== 3257 3258 int DNR_ID=0; 3259 int DNR_TRIES=3; 3260 3261 char hostname[128]; //2058 che toka 128? :) 3262 3263 int host_counter = 0; 3264 3265 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3266 const char *GetHost(int cnt, const char *str, char *buf) 3267 { 3268 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 3269 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 3270 { 3271 for(;cnt;cnt--) 3272 { 3273 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 3274 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 3275 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 3276 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 3277 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 3278 } 3279 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 3280 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 3281 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 3282 end = str; 3283 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 3295 } 3296 } 3297 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3298 int GetPort(int cnt, const char *str) 3299 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 3300 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 3301 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 3302 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 3303 { 3304 for(;cnt;cnt--) 3305 { 3306 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 3307 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 3308 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 3309 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 3310 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 3311 } 3312 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 3313 if(*str!=':') return NATICQ_PORT; \ 000000A8 ........ LDRB R0,[R1], #+1 \ 000000AC 3A0050E3 CMP R0,#+58 \ 000000B0 58009F15 LDRNE R0,??GetPort_6 ;; S_ICONS + 472 \ 000000B4 00009015 LDRNE R0,[R0, #+0] \ 000000B8 1680BD18 POPNE {R1,R2,R4,PC} 3314 str++; 3315 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 3316 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 3317 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 3318 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 + 472 3319 3320 } 3321 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 3322 int GetHostsCount(const char *str) 3323 { 3324 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 3325 for(;cnt;cnt++) 3326 { 3327 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 3328 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 3329 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 3330 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 3331 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 3332 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 3333 } 3334 //--------------------------------------------------------------------------- 3335 \ In segment CODE, align 4, keep-with-next 3336 void create_connect(void) 3337 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3338 // static int host_counter = 0; 3339 char hostbuf[128], buf[128]; 3340 int hostport; 3341 int ***p_res=NULL; 3342 void do_reconnect(void); 3343 SOCK_ADDR sa; 3344 //Устанавливаем соединение 3345 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable66 ;; S_ICONS 3346 int err; 3347 unsigned int ip; 3348 GBS_DelTimer(&reconnect_tmr); 3349 if (!IsGPRSEnabled()) \ 00000008 C4629FE5 LDR R6,??create_connect_0+0x4 ;; `? GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 3359 GetHost(host_counter, NATICQ_HOST, hostbuf); 3360 hostport = GetPort(host_counter, NATICQ_HOST); 3361 host_counter++; 3362 3363 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf 3364 strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 3365 strcpy(logmsg,buf); 3366 SMART_REDRAW(); 3367 3368 ip=str2ip(hostbuf); 3369 if (ip!=0xFFFFFFFF) \ 00000060 ........ LDR R8,??DataTable57 ;; do_reconnect \ 00000064 A17EA0E3 MOV R7,#+2576 \ 00000068 050087E0 ADD R0,R7,R5 \ 0000006C ........ BL GetHostsCount \ 00000070 4C1395E5 LDR R1,[R5, #+844] \ 00000074 010040E2 SUB R0,R0,#+1 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 4C4385B5 STRLT R4,[R5, #+844] \ 00000080 4C0395E5 LDR R0,[R5, #+844] \ 00000084 14208DE2 ADD R2,SP,#+20 \ 00000088 051087E0 ADD R1,R7,R5 \ 0000008C ........ BL GetHost \ 00000090 4C0395E5 LDR R0,[R5, #+844] \ 00000094 051087E0 ADD R1,R7,R5 \ 00000098 ........ BL GetPort \ 0000009C 0070A0E1 MOV R7,R0 \ 000000A0 4C0395E5 LDR R0,[R5, #+844] \ 000000A4 0730A0E1 MOV R3,R7 \ 000000A8 010080E2 ADD R0,R0,#+1 \ 000000AC 4C0385E5 STR R0,[R5, #+844] \ 000000B0 14208DE2 ADD R2,SP,#+20 \ 000000B4 A01086E2 ADD R1,R6,#+160 \ 000000B8 A80F8AE2 ADD R0,R10,#+672 \ 000000BC 050080E0 ADD R0,R0,R5 \ 000000C0 160000EF SWI +22 \ 000000C4 14108DE2 ADD R1,SP,#+20 \ 000000C8 880F8AE2 ADD R0,R10,#+544 \ 000000CC 050080E0 ADD R0,R0,R5 \ 000000D0 1A0000EF SWI +26 \ 000000D4 94108DE2 ADD R1,SP,#+148 \ 000000D8 05008AE0 ADD R0,R10,R5 \ 000000DC 1A0000EF SWI +26 \ 000000E0 ........ BL SMART_REDRAW \ 000000E4 14008DE2 ADD R0,SP,#+20 \ 000000E8 B70100EF SWI +439 \ 000000EC 0490E0E1 MVN R9,R4 \ 000000F0 090050E1 CMP R0,R9 \ 000000F4 0500000A BEQ ??create_connect_3 3370 { 3371 sa.ip=ip; \ 000000F8 08008DE5 STR R0,[SP, #+8] 3372 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 000000FC 901086E2 ADD R1,R6,#+144 \ 00000100 05008AE0 ADD R0,R10,R5 \ 00000104 1A0000EF SWI +26 3373 SMART_REDRAW(); \ 00000108 ........ BL SMART_REDRAW 3374 goto L_CONNECT; \ 0000010C 3A0000EA B ??create_connect_4 3375 } 3376 strcat(logmsg,"\n"); \ ??create_connect_3: \ 00000110 6EBF8FE2 ADR R11,??create_connect_0 ;; "\n" \ 00000114 0B10A0E1 MOV R1,R11 \ 00000118 05008AE0 ADD R0,R10,R5 \ 0000011C 170000EF SWI +23 3377 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 00000120 841086E2 ADD R1,R6,#+132 \ 00000124 05008AE0 ADD R0,R10,R5 \ 00000128 1A0000EF SWI +26 3378 SMART_REDRAW(); \ 0000012C ........ BL SMART_REDRAW 3379 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 00000130 D12F85E2 ADD R2,R5,#+836 \ 00000134 0D10A0E1 MOV R1,SP \ 00000138 14008DE2 ADD R0,SP,#+20 \ 0000013C B60100EF SWI +438 \ 00000140 0030B0E1 MOVS R3,R0 3380 if (err) \ 00000144 1600000A BEQ ??create_connect_5 3381 { 3382 if ((err==0xC9)||(err==0xD6)) \ 00000148 C90053E3 CMP R3,#+201 \ 0000014C D6005313 CMPNE R3,#+214 \ 00000150 0600001A BNE ??create_connect_6 3383 { 3384 if (DNR_ID) \ 00000154 440395E5 LDR R0,[R5, #+836] \ 00000158 000050E3 CMP R0,#+0 \ 0000015C 1000000A BEQ ??create_connect_5 3385 { 3386 host_counter--; \ 00000160 4C0395E5 LDR R0,[R5, #+844] \ 00000164 010040E2 SUB R0,R0,#+1 \ 00000168 4C0385E5 STR R0,[R5, #+844] 3387 return; //Ждем готовности DNR \ 0000016C 390000EA B ??create_connect_7 3388 } 3389 } 3390 else 3391 { 3392 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000170 742086E2 ADD R2,R6,#+116 \ 00000174 FF10A0E3 MOV R1,#+255 \ 00000178 05008AE0 ADD R0,R10,R5 \ 0000017C 1B0100EF SWI +283 3393 SMART_REDRAW(); \ 00000180 ........ BL SMART_REDRAW 3394 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 00000184 DC0195E5 LDR R0,[R5, #+476] \ 00000188 0820A0E1 MOV R2,R8 \ 0000018C D830A0E3 MOV R3,#+216 \ 00000190 930001E0 MUL R1,R3,R0 \ 00000194 F20E83E3 ORR R0,R3,#0xF20 \ 00000198 050080E0 ADD R0,R0,R5 \ 0000019C 4D0000EF SWI +77 3395 return; \ 000001A0 2C0000EA B ??create_connect_7 3396 } 3397 } 3398 if (p_res) \ ??create_connect_5: \ 000001A4 00009DE5 LDR R0,[SP, #+0] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 3D00000A BEQ ??create_connect_9 3399 { 3400 if (p_res[3]) \ 000001B0 0C0090E5 LDR R0,[R0, #+12] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 4200000A BEQ ??create_connect_10 3401 { 3402 strcpy(logmsg,buf); \ 000001BC 94108DE2 ADD R1,SP,#+148 \ 000001C0 05008AE0 ADD R0,R10,R5 \ 000001C4 1A0000EF SWI +26 3403 strcat(logmsg,"\n"); \ 000001C8 0B10A0E1 MOV R1,R11 \ 000001CC 05008AE0 ADD R0,R10,R5 \ 000001D0 170000EF SWI +23 3404 strcpy(logmsg,LG_GRDNROK); \ 000001D4 5C1086E2 ADD R1,R6,#+92 \ 000001D8 05008AE0 ADD R0,R10,R5 \ 000001DC 1A0000EF SWI +26 3405 SMART_REDRAW(); \ 000001E0 ........ BL SMART_REDRAW 3406 DNR_TRIES=0; \ 000001E4 484385E5 STR R4,[R5, #+840] 3407 sa.ip=p_res[3][0][0]; \ 000001E8 00109DE5 LDR R1,[SP, #+0] \ 000001EC 0C1091E5 LDR R1,[R1, #+12] \ 000001F0 001091E5 LDR R1,[R1, #+0] \ 000001F4 001091E5 LDR R1,[R1, #+0] \ 000001F8 08108DE5 STR R1,[SP, #+8] 3408 L_CONNECT: 3409 sock=socket(1,1,0); \ ??create_connect_4: \ 000001FC 0020A0E3 MOV R2,#+0 \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0100A0E1 MOV R0,R1 \ 00000208 730100EF SWI +371 \ 0000020C 900285E5 STR R0,[R5, #+656] 3410 if (sock!=-1) \ 00000210 090050E1 CMP R0,R9 \ 00000214 1A00000A BEQ ??create_connect_11 3411 { 3412 sa.family=1; \ 00000218 01A0A0E3 MOV R10,#+1 \ 0000021C B4A0CDE1 STRH R10,[SP, #+4] 3413 sa.port=htons(hostport); \ 00000220 0708A0E1 MOV R0,R7, LSL #+16 \ 00000224 2008A0E1 MOV R0,R0, LSR #+16 \ 00000228 7A0100EF SWI +378 \ 0000022C B600CDE1 STRH R0,[SP, #+6] 3414 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 3415 if (connect(sock,&sa,sizeof(sa))!=-1) \ 00000230 900295E5 LDR R0,[R5, #+656] \ 00000234 1020A0E3 MOV R2,#+16 \ 00000238 04108DE2 ADD R1,SP,#+4 \ 0000023C 740100EF SWI +372 \ 00000240 090050E1 CMP R0,R9 \ 00000244 0500000A BEQ ??create_connect_12 3416 { 3417 connect_state=1; \ 00000248 8CA285E5 STR R10,[R5, #+652] 3418 TOTALRECEIVED=0; \ 0000024C 944285E5 STR R4,[R5, #+660] 3419 TOTALSENDED=0; \ 00000250 984285E5 STR R4,[R5, #+664] 3420 SMART_REDRAW(); \ ??create_connect_2: \ 00000254 ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000258 45DF8DE2 ADD SP,SP,#+276 \ 0000025C F08FBDE8 POP {R4-R11,PC} 3421 } 3422 else 3423 { 3424 closesocket(sock); \ ??create_connect_12: \ 00000260 900295E5 LDR R0,[R5, #+656] \ 00000264 760100EF SWI +374 3425 sock=-1; \ 00000268 909285E5 STR R9,[R5, #+656] 3426 LockSched(); \ 0000026C 460100EF SWI +326 3427 ShowMSG(1,(int)LG_MSGCANTCONN); \ 00000270 401086E2 ADD R1,R6,#+64 \ 00000274 0100A0E3 MOV R0,#+1 \ 00000278 480100EF SWI +328 3428 UnlockSched(); \ 0000027C 470100EF SWI +327 3429 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000280 BFFFFFEA B ??create_connect_8 3430 3431 } 3432 } 3433 else 3434 { 3435 LockSched(); \ ??create_connect_11: \ 00000284 460100EF SWI +326 3436 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 00000288 141086E2 ADD R1,R6,#+20 \ 0000028C 0100A0E3 MOV R0,#+1 \ 00000290 480100EF SWI +328 3437 UnlockSched(); \ 00000294 470100EF SWI +327 3438 //Не осилили создания сокета, закрываем GPRS-сессию 3439 GPRS_OnOff(0,1); \ 00000298 0110A0E3 MOV R1,#+1 \ 0000029C 0000A0E3 MOV R0,#+0 \ 000002A0 8E0100EF SWI +398 \ 000002A4 EBFFFFEA B ??create_connect_7 3440 } 3441 } 3442 } 3443 else 3444 { 3445 DNR_TRIES--; \ ??create_connect_9: \ 000002A8 480395E5 LDR R0,[R5, #+840] \ 000002AC 010040E2 SUB R0,R0,#+1 \ 000002B0 480385E5 STR R0,[R5, #+840] 3446 LockSched(); \ 000002B4 460100EF SWI +326 3447 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002B8 0610A0E1 MOV R1,R6 \ 000002BC 0100A0E3 MOV R0,#+1 \ 000002C0 480100EF SWI +328 3448 UnlockSched(); \ 000002C4 470100EF SWI +327 \ ??create_connect_10: \ 000002C8 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002CC F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 000002D0 0A000000 DC8 "\n",+0,+0 \ 000002D4 ........ DC32 `?=0) \ 00000004 ........ LDR R4,??DataTable66 ;; S_ICONS \ 00000008 900294E5 LDR R0,[R4, #+656] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0300004A BMI ??end_socket_0 3469 { 3470 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 3471 closesocket(sock); \ 0000001C 900294E5 LDR R0,[R4, #+656] \ 00000020 760100EF SWI +374 3472 } 3473 #ifdef SEND_TIMER 3474 GBS_DelTimer(&send_tmr); \ ??end_socket_0: \ 00000024 F800A0E3 MOV R0,#+248 \ 00000028 440D80E3 ORR R0,R0,#0x1100 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 8C0100EF SWI +396 3475 #endif 3476 } \ 00000034 1080BDE8 POP {R4,PC} ;; return 3477 3478 #ifdef SEND_TIMER \ In segment CODE, align 4, keep-with-next 3479 static void resend(void) 3480 { 3481 void SendAnswer(int dummy, TPKT *p); 3482 SUBPROC((void*)SendAnswer,0,0); \ resend: \ 00000000 ........ LDR R0,??DataTable63 ;; SendAnswer \ 00000004 00402DE9 PUSH {LR} \ 00000008 0020A0E3 MOV R2,#+0 \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 710100EF SWI +369 3483 } \ 00000014 0080BDE8 POP {PC} ;; return 3484 #endif 3485 \ In segment CODE, align 4, keep-with-next 3486 void SendAnswer(int dummy, TPKT *p) 3487 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 3488 int i; 3489 int j; 3490 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable66 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 8C0294E5 LDR R0,[R4, #+652] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 3491 { 3492 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 3493 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 3494 } 3495 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 1E00000A BEQ ??SendAnswer_1 3496 { 3497 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 3498 TOTALSENDED+=j; \ 00000034 980294E5 LDR R0,[R4, #+664] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 980284E5 STR R0,[R4, #+664] 3499 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 A00294E5 LDR R0,[R4, #+672] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 A00284E5 STR R0,[R4, #+672] 3500 //Проверяем, не надо ли добавить в очередь 3501 if (sendq_p) \ 0000004C A80294E5 LDR R0,[R4, #+680] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 3502 { 3503 //Есть очередь, добавляем в нее 3504 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 A41294E5 LDR R1,[R4, #+676] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 A80284E5 STR R0,[R4, #+680] 3505 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 A40294E5 LDR R0,[R4, #+676] \ 0000006C A83294E5 LDR R3,[R4, #+680] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 3506 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 3507 sendq_l+=j; \ 00000088 A40294E5 LDR R0,[R4, #+676] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 A40284E5 STR R0,[R4, #+676] 3508 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 3509 } 3510 sendq_p=p; \ ??SendAnswer_2: \ 00000098 A86284E5 STR R6,[R4, #+680] 3511 sendq_l=j; \ 0000009C A45284E5 STR R5,[R4, #+676] \ 000000A0 000000EA B ??SendAnswer_1 3512 } 3513 //Отправляем уже существующее в очереди 3514 while((i=sendq_l)!=0) 3515 { 3516 if (i>0x400) i=0x400; 3517 j=send(sock,(void *)sendq_p,i,0); 3518 snprintf(logmsg,255,"send res %d",j); 3519 SMART_REDRAW(); 3520 if (j<0) 3521 { 3522 j=*socklasterr(); 3523 if ((j==0xC9)||(j==0xD6)) 3524 { 3525 //Передали что хотели 3526 strcpy(logmsg,"Send delayed..."); 3527 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 3528 } 3529 else 3530 { 3531 //Ошибка 3532 LockSched(); 3533 ShowMSG(1,(int)"Send error!"); 3534 UnlockSched(); 3535 end_socket(); 3536 return; 3537 } 3538 } 3539 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное 3540 if (j` \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 400E80E3 ORR R0,R0,#0x400 \ 000000C8 000057E1 CMP R7,R0 \ 000000CC 900294E5 LDR R0,[R4, #+656] \ 000000D0 407EA0A3 MOVGE R7,#+1024 \ 000000D4 0030A0E3 MOV R3,#+0 \ 000000D8 0720A0E1 MOV R2,R7 \ 000000DC 790100EF SWI +377 \ 000000E0 0050A0E1 MOV R5,R0 \ 000000E4 D880A0E3 MOV R8,#+216 \ 000000E8 E08E88E3 ORR R8,R8,#0xE00 \ 000000EC 0530A0E1 MOV R3,R5 \ 000000F0 1C2089E2 ADD R2,R9,#+28 \ 000000F4 FF10A0E3 MOV R1,#+255 \ 000000F8 040088E0 ADD R0,R8,R4 \ 000000FC 1B0100EF SWI +283 \ 00000100 ........ BL SMART_REDRAW \ 00000104 000055E3 CMP R5,#+0 \ 00000108 0F00005A BPL ??SendAnswer_6 \ 0000010C 7C8100EF SWI +33148 \ 00000110 005090E5 LDR R5,[R0, #+0] \ 00000114 C90055E3 CMP R5,#+201 \ 00000118 D6005513 CMPNE R5,#+214 \ 0000011C 0300001A BNE ??SendAnswer_7 \ 00000120 0C1089E2 ADD R1,R9,#+12 \ 00000124 040088E0 ADD R0,R8,R4 \ 00000128 1A0000EF SWI +26 \ 0000012C F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_7: \ 00000130 460100EF SWI +326 \ 00000134 0910A0E1 MOV R1,R9 \ 00000138 0100A0E3 MOV R0,#+1 \ 0000013C 480100EF SWI +328 \ 00000140 470100EF SWI +327 \ 00000144 ........ BL end_socket \ 00000148 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 0000014C A40294E5 LDR R0,[R4, #+676] \ 00000150 052040E0 SUB R2,R0,R5 \ 00000154 A42284E5 STR R2,[R4, #+676] \ 00000158 A80294E5 LDR R0,[R4, #+680] \ 0000015C 001085E0 ADD R1,R5,R0 \ 00000160 1E0100EF SWI +286 \ 00000164 070055E1 CMP R5,R7 \ 00000168 CDFFFFAA BGE ??SendAnswer_3 \ 0000016C 24209FE5 LDR R2,??SendAnswer_5+0x4 ;; resend \ 00000170 AA1E48E2 SUB R1,R8,#+2720 \ 00000174 DC0E81E2 ADD R0,R1,#+3520 \ 00000178 040080E0 ADD R0,R0,R4 \ 0000017C 4D0000EF SWI +77 \ 00000180 F083BDE8 POP {R4-R9,PC} 3549 } 3550 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000184 0100A0E1 MOV R0,R1 \ 00000188 150000EF SWI +21 3551 sendq_p=NULL; \ 0000018C A86284E5 STR R6,[R4, #+680] 3552 } \ 00000190 F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000194 ........ DC32 `?` \ 00000198 ........ DC32 resend 3553 3554 \ In segment CODE, align 4, keep-with-next 3555 void send_login(int dummy, TPKT *p) 3556 { 3557 connect_state=2; 3558 char rev[16]; 3559 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 3560 //А Вова будет банить на форуме! 3561 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,??DataTable66 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0050A0E1 MOV R5,R0 \ 00000014 0160A0E1 MOV R6,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 8C0284E5 STR R0,[R4, #+652] \ 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 3562 3563 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 3564 p2->pkt.uin=UIN; \ 00000040 240194E5 LDR R0,[R4, #+292] 3565 p2->pkt.type=T_SETCLIENT_ID; 3566 p2->pkt.data_len=8; 3567 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 3568 SendAnswer(0,p2); \ 00000068 0710A0E1 MOV R1,R7 \ 0000006C 0000A0E3 MOV R0,#+0 \ 00000070 ........ BL SendAnswer 3569 SendAnswer(dummy,p); \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C ........ BL SendAnswer 3570 RXstate=-(int)sizeof(PKT); \ 00000080 0700E0E3 MVN R0,#+7 \ 00000084 880284E5 STR R0,[R4, #+648] 3571 } \ 00000088 FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 0000008C ........ DC32 `?` 3572 \ In segment CODE, align 4, keep-with-next 3573 void do_ping(void) 3574 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 3575 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 3576 pingp->pkt.uin=UIN; \ 0000000C 20109FE5 LDR R1,??do_ping_0 ;; S_ICONS + 292 \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 3577 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 3578 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3579 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 + 292 3580 } 3581 \ In segment CODE, align 4, keep-with-next 3582 void SendMSGACK(int i) 3583 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3584 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3585 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 3586 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3587 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3588 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 3589 } 3590 \ In segment CODE, align 4, keep-with-next 3591 void RequestXText(unsigned int uin) 3592 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3593 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 3594 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 3595 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3596 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3597 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable63 ;; SendAnswer \ 0000002C 710100EF SWI +369 3598 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 3599 3600 extern int main2_count; 3601 3602 int ping_time; 3603 //#ifdef EVILFOX 3604 //#else 3605 3606 //#endif 3607 char I_UIN[9]; 3608 \ In segment CODE, align 4, keep-with-next 3609 void get_answer(void) 3610 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3611 void *p; 3612 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable66 ;; S_ICONS \ 00000008 18D04DE2 SUB SP,SP,#+24 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 3613 int j; 3614 int n; 3615 char rb[1024]; 3616 char *rp=rb; 3617 if (connect_state<2) return; \ 00000010 8C0295E5 LDR R0,[R5, #+652] \ 00000014 889295E5 LDR R9,[R5, #+648] \ 00000018 18608DE2 ADD R6,SP,#+24 \ 0000001C 020050E3 CMP R0,#+2 \ 00000020 5C0100BA BLT ??get_answer_1 \ 00000024 0A0079E3 CMN R9,#+10 \ 00000028 5A01000A BEQ ??get_answer_1 3618 if (i==EOP) return; 3619 j=recv(sock,rb,sizeof(rb),0); \ 0000002C 900295E5 LDR R0,[R5, #+656] \ 00000030 ........ LDR R10,??DataTable65 ;; `?0) 3621 { 3622 if (i<0) 3623 { 3624 //Принимаем заголовок 3625 n=-i; //Требуемое количество байт 3626 if (j=0) 3633 { 3634 //Принимаем тельце ;) 3635 n=RXbuf.pkt.data_len; //Всего в тельце 3636 if (n>16383) 3637 { 3638 //Слишком много 3639 strcpy(logmsg,LG_GRBADPACKET); 3640 end_socket(); 3641 RXstate=EOP; 3642 return; 3643 } 3644 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 3645 if (n>0) 3646 { 3647 if (jissound) 3727 Play(sndMsg); 3728 } 3729 else 3730 { 3731 uins=RXbuf.pkt.uin; 3732 volatile int hFile_ex; 3733 unsigned int io_error_ex = 0; 3734 sprintf(talk_sound, "%s%d.wav", sndMsg2, uins); 3735 hFile_ex = fopen(talk_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 3736 if(hFile_ex!=-1) 3737 { 3738 fclose(hFile_ex, &io_error_ex); 3739 Play(talk_sound); 3740 } 3741 else 3742 Play(sndMsg); 3743 } 3744 } 3745 break; 3746 case T_SSLRESP: 3747 LockSched(); 3748 ShowMSG(1,(int)RXbuf.data); 3749 UnlockSched(); 3750 break; 3751 case T_SRV_ACK: 3752 if (FindContactLOGQByAck(&RXbuf)) Play(sndMsgSent); 3753 case T_CLIENT_ACK: 3754 p=malloc(sizeof(PKT)+2); 3755 memcpy(p,&RXbuf,sizeof(PKT)+2); 3756 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); 3757 break; 3758 case T_ECHORET: 3759 { 3760 TDate d; 3761 TTime t; 3762 TTime *pt=(TTime *)(RXbuf.data); 3763 int s1; 3764 int s2; 3765 GetDateTime(&d,&t); 3766 s1=t.hour*3600+t.min*60+t.sec; 3767 s2=pt->hour*3600+pt->min*60+pt->sec; 3768 s1-=s2; 3769 if (s1<0) s1+=86400; 3770 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 3771 sprintf(PINGO, "Ping: %dsec",s1); 3772 LockSched(); 3773 if(janis==1) 3774 { 3775 ShowMSG(1,(int)logmsg); 3776 Play(pingsnd); 3777 janis=0; 3778 } 3779 else 3780 { 3781 if(ping_time==0) 3782 { 3783 ping_time=ping_time_config; 3784 Play(pingsnd); 3785 } 3786 else 3787 ping_time--; 3788 } 3789 UnlockSched(); 3790 } 3791 break; 3792 case T_LASTPRIVACY: 3793 n=i+sizeof(PKT); \ ??get_answer_3: \ 0000004C 0040A0E1 MOV R4,R0 3794 p=malloc(n); \ ??get_answer_4: \ 00000050 140000EF SWI +20 \ 00000054 00B0A0E1 MOV R11,R0 3795 memcpy(p,&RXbuf,n); \ 00000058 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 0000005C 0810A0E1 MOV R1,R8 \ 00000060 1E0100EF SWI +286 3796 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000064 900295E5 LDR R0,[R5, #+656] \ 00000068 0B30A0E1 MOV R3,R11 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 0020A0E3 MOV R2,#+0 \ 00000074 FC1FA0E3 MOV R1,#+1008 \ 00000078 0900A0E1 MOV R0,R9 \ 0000007C 000100EF SWI +256 \ ??get_answer_6: \ 00000080 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 3797 break; 3798 } 3799 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000084 0790E0E3 MVN R9,#+7 \ ??get_answer_2: \ 00000088 010057E3 CMP R7,#+1 \ 0000008C 400100BA BLT ??get_answer_8 \ 00000090 10859FE5 LDR R8,??get_answer_9+0x4 ;; RXbuf \ 00000094 000059E3 CMP R9,#+0 \ 00000098 0A00005A BPL ??get_answer_10 \ 0000009C 004069E2 RSB R4,R9,#+0 \ 000000A0 040057E1 CMP R7,R4 \ 000000A4 0740A0B1 MOVLT R4,R7 \ 000000A8 0420A0E1 MOV R2,R4 \ 000000AC 0610A0E1 MOV R1,R6 \ 000000B0 080089E0 ADD R0,R9,R8 \ 000000B4 080080E2 ADD R0,R0,#+8 \ 000000B8 1E0100EF SWI +286 \ 000000BC 099084E0 ADD R9,R4,R9 \ 000000C0 047047E0 SUB R7,R7,R4 \ 000000C4 066084E0 ADD R6,R4,R6 \ ??get_answer_10: \ 000000C8 000059E3 CMP R9,#+0 \ 000000CC EDFFFF4A BMI ??get_answer_2 \ 000000D0 B640D8E1 LDRH R4,[R8, #+6] \ 000000D4 400C54E3 CMP R4,#+16384 \ 000000D8 0C0000BA BLT ??get_answer_11 \ 000000DC 6400A0E3 MOV R0,#+100 \ 000000E0 600E80E3 ORR R0,R0,#0x600 \ 000000E4 0A1080E0 ADD R1,R0,R10 \ 000000E8 D800A0E3 MOV R0,#+216 \ 000000EC E00E80E3 ORR R0,R0,#0xE00 \ 000000F0 050080E0 ADD R0,R0,R5 \ 000000F4 1A0000EF SWI +26 \ 000000F8 ........ BL end_socket \ 000000FC 0900E0E3 MVN R0,#+9 \ 00000100 880285E5 STR R0,[R5, #+648] \ 00000104 18D08DE2 ADD SP,SP,#+24 \ 00000108 40DE8DE2 ADD SP,SP,#+1024 \ 0000010C F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 00000110 094044E0 SUB R4,R4,R9 \ 00000114 010054E3 CMP R4,#+1 \ 00000118 090000BA BLT ??get_answer_12 \ 0000011C 040057E1 CMP R7,R4 \ 00000120 0740A0B1 MOVLT R4,R7 \ 00000124 0420A0E1 MOV R2,R4 \ 00000128 0610A0E1 MOV R1,R6 \ 0000012C 080089E0 ADD R0,R9,R8 \ 00000130 080080E2 ADD R0,R0,#+8 \ 00000134 1E0100EF SWI +286 \ 00000138 099084E0 ADD R9,R4,R9 \ 0000013C 047047E0 SUB R7,R7,R4 \ 00000140 066084E0 ADD R6,R4,R6 \ ??get_answer_12: \ 00000144 B600D8E1 LDRH R0,[R8, #+6] \ 00000148 090050E1 CMP R0,R9 \ 0000014C CDFFFF1A BNE ??get_answer_2 \ 00000150 941295E5 LDR R1,[R5, #+660] \ 00000154 080089E2 ADD R0,R9,#+8 \ 00000158 011080E0 ADD R1,R0,R1 \ 0000015C 941285E5 STR R1,[R5, #+660] \ 00000160 9C1295E5 LDR R1,[R5, #+668] \ 00000164 0020A0E3 MOV R2,#+0 \ 00000168 011080E0 ADD R1,R0,R1 \ 0000016C 9C1285E5 STR R1,[R5, #+668] \ 00000170 081089E0 ADD R1,R9,R8 \ 00000174 0820C1E5 STRB R2,[R1, #+8] \ 00000178 B410D8E1 LDRH R1,[R8, #+4] \ 0000017C 094089E2 ADD R4,R9,#+9 \ 00000180 0990A0E3 MOV R9,#+9 \ 00000184 429C89E3 ORR R9,R9,#0x4200 \ 00000188 031041E2 SUB R1,R1,#+3 \ 0000018C 1C0051E3 CMP R1,#+28 \ 00000190 BBFFFF8A BHI ??get_answer_7 \ 00000194 022F8FE2 ADR R2,??get_answer_0 \ 00000198 8110A0E1 MOV R1,R1, LSL #+1 \ 0000019C F12092E1 LDRSH R2,[R2, R1] \ 000001A0 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 000001A4 4F000E00B7FF DC16 +79,+14,+65463,+70 \ 4600 \ 000001AC 2B00B7FF2D00 DC16 +43,+65463,+45,+65463 \ B7FF \ 000001B4 B7FFB7FFA800 DC16 +65463,+65463,+168,+65463 \ B7FF \ 000001BC B7FFAE00B400 DC16 +65463,+174,+180,+65463 \ B7FF \ 000001C4 B9002B002B00 DC16 +185,+43,+43,+65463 \ B7FF \ 000001CC B7FFB7FF2B00 DC16 +65463,+65463,+43,+65463 \ B7FF \ 000001D4 B7FFB7FFB7FF DC16 +65463,+65463,+65463,+65463 \ B7FF \ 000001DC A9FF0000 DC16 +65449,+0 \ ??get_answer_13: \ 000001E0 0400A0E1 MOV R0,R4 \ 000001E4 140000EF SWI +20 \ 000001E8 00B0A0E1 MOV R11,R0 \ 000001EC 0420A0E1 MOV R2,R4 \ 000001F0 0810A0E1 MOV R1,R8 \ 000001F4 1E0100EF SWI +286 \ 000001F8 900295E5 LDR R0,[R5, #+656] \ 000001FC 0B30A0E1 MOV R3,R11 \ 00000200 01002DE9 PUSH {R0} \ 00000204 0020A0E3 MOV R2,#+0 \ 00000208 FC1FA0E3 MOV R1,#+1008 \ 0000020C 0900A0E1 MOV R0,R9 \ 00000210 000100EF SWI +256 \ 00000214 690E85E2 ADD R0,R5,#+1680 \ 00000218 ........ BL Play \ 0000021C 083088E2 ADD R3,R8,#+8 \ 00000220 DF2F8FE2 ADR R2,??get_answer_9 ;; "%s" \ 00000224 FF10A0E3 MOV R1,#+255 \ 00000228 D800A0E3 MOV R0,#+216 \ 0000022C E00E80E3 ORR R0,R0,#0xE00 \ 00000230 050080E0 ADD R0,R0,R5 \ 00000234 1B0100EF SWI +283 \ 00000238 0300A0E3 MOV R0,#+3 \ 0000023C 8C0285E5 STR R0,[R5, #+652] \ 00000240 4C0395E5 LDR R0,[R5, #+844] \ 00000244 010040E2 SUB R0,R0,#+1 \ 00000248 4C0385E5 STR R0,[R5, #+844] \ 0000024C ........ BL SMART_REDRAW \ 00000250 8AFFFFEA B ??get_answer_6 \ ??get_answer_14: \ 00000254 0400A0E1 MOV R0,R4 \ 00000258 7CFFFFEA B ??get_answer_4 \ ??get_answer_15: \ 0000025C 0040A0E1 MOV R4,R0 \ 00000260 140000EF SWI +20 \ 00000264 00B0A0E1 MOV R11,R0 \ 00000268 0420A0E1 MOV R2,R4 \ 0000026C 0810A0E1 MOV R1,R8 \ 00000270 1E0100EF SWI +286 \ 00000274 B800D8E1 LDRH R0,[R8, #+8] \ 00000278 FF10A0E3 MOV R1,#+255 \ 0000027C 01002DE9 PUSH {R0} \ 00000280 003098E5 LDR R3,[R8, #+0] \ 00000284 5800A0E3 MOV R0,#+88 \ 00000288 600E80E3 ORR R0,R0,#0x600 \ 0000028C 0A2080E0 ADD R2,R0,R10 \ 00000290 880E80E3 ORR R0,R0,#0x880 \ 00000294 050080E0 ADD R0,R0,R5 \ 00000298 1B0100EF SWI +283 \ 0000029C 900295E5 LDR R0,[R5, #+656] \ 000002A0 0B30A0E1 MOV R3,R11 \ 000002A4 01002DE9 PUSH {R0} \ 000002A8 0020A0E3 MOV R2,#+0 \ 000002AC FC1FA0E3 MOV R1,#+1008 \ 000002B0 0900A0E1 MOV R0,R9 \ 000002B4 000100EF SWI +256 \ 000002B8 08D08DE2 ADD SP,SP,#+8 \ 000002BC 70FFFFEA B ??get_answer_7 \ ??get_answer_16: \ 000002C0 083088E2 ADD R3,R8,#+8 \ 000002C4 652E8AE2 ADD R2,R10,#+1616 \ 000002C8 FF10A0E3 MOV R1,#+255 \ 000002CC D800A0E3 MOV R0,#+216 \ 000002D0 E00E80E3 ORR R0,R0,#0xE00 \ 000002D4 050080E0 ADD R0,R0,R5 \ 000002D8 1B0100EF SWI +283 \ 000002DC ........ BL SMART_REDRAW \ 000002E0 67FFFFEA B ??get_answer_7 \ ??get_answer_17: \ 000002E4 0400A0E1 MOV R0,R4 \ 000002E8 140000EF SWI +20 \ 000002EC 00B0A0E1 MOV R11,R0 \ 000002F0 0420A0E1 MOV R2,R4 \ 000002F4 0810A0E1 MOV R1,R8 \ 000002F8 1E0100EF SWI +286 \ 000002FC 08008BE2 ADD R0,R11,#+8 \ 00000300 030000EA B ??get_answer_18 \ ??get_answer_19: \ 00000304 030051E3 CMP R1,#+3 \ 00000308 2010A0B3 MOVLT R1,#+32 \ 0000030C 0010C0B5 STRBLT R1,[R0, #+0] \ 00000310 010080E2 ADD R0,R0,#+1 \ ??get_answer_18: \ 00000314 0010D0E5 LDRB R1,[R0, #+0] \ 00000318 000051E3 CMP R1,#+0 \ 0000031C F8FFFF1A BNE ??get_answer_19 \ 00000320 002098E5 LDR R2,[R8, #+0] \ 00000324 0800A0E3 MOV R0,#+8 \ 00000328 480D80E3 ORR R0,R0,#0x1200 \ 0000032C 054080E0 ADD R4,R0,R5 \ 00000330 BC0E40E2 SUB R0,R0,#+3008 \ 00000334 0A1080E0 ADD R1,R0,R10 \ 00000338 0400A0E1 MOV R0,R4 \ 0000033C 160000EF SWI +22 \ 00000340 0410A0E1 MOV R1,R4 \ 00000344 7400A0E3 MOV R0,#+116 \ 00000348 500E80E3 ORR R0,R0,#0x500 \ 0000034C 050080E0 ADD R0,R0,R5 \ 00000350 180100EF SWI +280 \ 00000354 000050E3 CMP R0,#+0 \ 00000358 49FFFF1A BNE ??get_answer_7 \ 0000035C 080088E2 ADD R0,R8,#+8 \ 00000360 01002DE9 PUSH {R0} \ 00000364 003098E5 LDR R3,[R8, #+0] \ 00000368 FF10A0E3 MOV R1,#+255 \ 0000036C 794EA0E3 MOV R4,#+1936 \ 00000370 3C00A0E3 MOV R0,#+60 \ 00000374 600E80E3 ORR R0,R0,#0x600 \ 00000378 0A2080E0 ADD R2,R0,R10 \ 0000037C D800A0E3 MOV R0,#+216 \ 00000380 E00E80E3 ORR R0,R0,#0xE00 \ 00000384 050080E0 ADD R0,R0,R5 \ 00000388 1B0100EF SWI +283 \ 0000038C 940295E5 LDR R0,[R5, #+660] \ 00000390 ........ BL SendMSGACK \ 00000394 900295E5 LDR R0,[R5, #+656] \ 00000398 0B30A0E1 MOV R3,R11 \ 0000039C 01002DE9 PUSH {R0} \ 000003A0 0020A0E3 MOV R2,#+0 \ 000003A4 FC1FA0E3 MOV R1,#+1008 \ 000003A8 0900A0E1 MOV R0,R9 \ 000003AC 000100EF SWI +256 \ 000003B0 ........ BL SMART_REDRAW \ 000003B4 D00195E5 LDR R0,[R5, #+464] \ 000003B8 08D08DE2 ADD SP,SP,#+8 \ 000003BC 000050E3 CMP R0,#+0 \ 000003C0 000098E5 LDR R0,[R8, #+0] \ 000003C4 0600001A BNE ??get_answer_20 \ 000003C8 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000003CC 5C0090E5 LDR R0,[R0, #+92] \ 000003D0 000050E3 CMP R0,#+0 \ 000003D4 2AFFFF0A BEQ ??get_answer_7 \ 000003D8 050084E0 ADD R0,R4,R5 \ ??get_answer_21: \ 000003DC ........ BL Play \ 000003E0 27FFFFEA B ??get_answer_7 \ ??get_answer_20: \ 000003E4 F40185E5 STR R0,[R5, #+500] \ 000003E8 0010A0E3 MOV R1,#+0 \ 000003EC 04108DE5 STR R1,[SP, #+4] \ 000003F0 F43195E5 LDR R3,[R5, #+500] \ 000003F4 A98EA0E3 MOV R8,#+2704 \ 000003F8 7D2E85E2 ADD R2,R5,#+2000 \ 000003FC 631E8AE2 ADD R1,R10,#+1584 \ 00000400 050088E0 ADD R0,R8,R5 \ 00000404 160000EF SWI +22 \ 00000408 04308DE2 ADD R3,SP,#+4 \ 0000040C 8020A0E3 MOV R2,#+128 \ 00000410 801CA0E3 MOV R1,#+32768 \ 00000414 050088E0 ADD R0,R8,R5 \ 00000418 0A0000EF SWI +10 \ 0000041C 00008DE5 STR R0,[SP, #+0] \ 00000420 00009DE5 LDR R0,[SP, #+0] \ 00000424 010070E3 CMN R0,#+1 \ 00000428 0400000A BEQ ??get_answer_22 \ 0000042C 00009DE5 LDR R0,[SP, #+0] \ 00000430 04108DE2 ADD R1,SP,#+4 \ 00000434 0D0000EF SWI +13 \ 00000438 050088E0 ADD R0,R8,R5 \ 0000043C E6FFFFEA B ??get_answer_21 \ ??get_answer_22: \ 00000440 050084E0 ADD R0,R4,R5 \ 00000444 E4FFFFEA B ??get_answer_21 \ ??get_answer_23: \ 00000448 460100EF SWI +326 \ 0000044C 081088E2 ADD R1,R8,#+8 \ 00000450 0100A0E3 MOV R0,#+1 \ 00000454 480100EF SWI +328 \ ??get_answer_24: \ 00000458 470100EF SWI +327 \ 0000045C 08FFFFEA B ??get_answer_7 \ ??get_answer_25: \ 00000460 0800A0E1 MOV R0,R8 \ 00000464 ........ BL FindContactLOGQByAck \ 00000468 000050E3 CMP R0,#+0 \ 0000046C 0100000A BEQ ??get_answer_26 \ 00000470 810E85E2 ADD R0,R5,#+2064 \ 00000474 ........ BL Play \ ??get_answer_26: \ 00000478 0A00A0E3 MOV R0,#+10 \ 0000047C 140000EF SWI +20 \ 00000480 00B0A0E1 MOV R11,R0 \ 00000484 0A20A0E3 MOV R2,#+10 \ 00000488 F3FEFFEA B ??get_answer_5 \ ??get_answer_27: \ 0000048C 08108DE2 ADD R1,SP,#+8 \ 00000490 10008DE2 ADD R0,SP,#+16 \ 00000494 B40000EF SWI +180 \ 00000498 0800DDE5 LDRB R0,[SP, #+8] \ 0000049C 0920DDE5 LDRB R2,[SP, #+9] \ 000004A0 E11EA0E3 MOV R1,#+3600 \ 000004A4 3C30A0E3 MOV R3,#+60 \ 000004A8 930202E0 MUL R2,R3,R2 \ 000004AC 912020E0 MLA R0,R1,R0,R2 \ 000004B0 0A10DDE5 LDRB R1,[SP, #+10] \ 000004B4 E12EA0E3 MOV R2,#+3600 \ 000004B8 000081E0 ADD R0,R1,R0 \ 000004BC 0810D8E5 LDRB R1,[R8, #+8] \ 000004C0 920101E0 MUL R1,R2,R1 \ 000004C4 3C20A0E3 MOV R2,#+60 \ 000004C8 010040E0 SUB R0,R0,R1 \ 000004CC 0910D8E5 LDRB R1,[R8, #+9] \ 000004D0 920101E0 MUL R1,R2,R1 \ 000004D4 010040E0 SUB R0,R0,R1 \ 000004D8 0A10D8E5 LDRB R1,[R8, #+10] \ 000004DC C8809FE5 LDR R8,??get_answer_9+0x8 ;; janis \ 000004E0 014050E0 SUBS R4,R0,R1 \ 000004E4 500BA043 MOVMI R0,#+81920 \ 000004E8 460D8043 ORRMI R0,R0,#0x1180 \ 000004EC 04408040 ADDMI R4,R0,R4 \ 000004F0 010084E2 ADD R0,R4,#+1 \ 000004F4 01002DE9 PUSH {R0} \ 000004F8 0430A0E1 MOV R3,R4 \ 000004FC FF10A0E3 MOV R1,#+255 \ 00000500 5E0E82E2 ADD R0,R2,#+1504 \ 00000504 0A2080E0 ADD R2,R0,R10 \ 00000508 D800A0E3 MOV R0,#+216 \ 0000050C E00E80E3 ORR R0,R0,#0xE00 \ 00000510 050080E0 ADD R0,R0,R5 \ 00000514 1B0100EF SWI +283 \ 00000518 0420A0E1 MOV R2,R4 \ 0000051C 611E8AE2 ADD R1,R10,#+1552 \ 00000520 B60E85E2 ADD R0,R5,#+2912 \ 00000524 160000EF SWI +22 \ 00000528 460100EF SWI +326 \ 0000052C 000098E5 LDR R0,[R8, #+0] \ 00000530 854EA0E3 MOV R4,#+2128 \ 00000534 010050E3 CMP R0,#+1 \ 00000538 04D08DE2 ADD SP,SP,#+4 \ 0000053C 0900001A BNE ??get_answer_28 \ 00000540 D800A0E3 MOV R0,#+216 \ 00000544 E00E80E3 ORR R0,R0,#0xE00 \ 00000548 051080E0 ADD R1,R0,R5 \ 0000054C 0100A0E3 MOV R0,#+1 \ 00000550 480100EF SWI +328 \ 00000554 050084E0 ADD R0,R4,R5 \ 00000558 ........ BL Play \ 0000055C 0000A0E3 MOV R0,#+0 \ 00000560 000088E5 STR R0,[R8, #+0] \ 00000564 BBFFFFEA B ??get_answer_24 \ ??get_answer_28: \ 00000568 500395E5 LDR R0,[R5, #+848] \ 0000056C 000050E3 CMP R0,#+0 \ 00000570 0400001A BNE ??get_answer_29 \ 00000574 040195E5 LDR R0,[R5, #+260] \ 00000578 500385E5 STR R0,[R5, #+848] \ 0000057C 050084E0 ADD R0,R4,R5 \ 00000580 ........ BL Play \ 00000584 B3FFFFEA B ??get_answer_24 \ ??get_answer_29: \ 00000588 010040E2 SUB R0,R0,#+1 \ 0000058C 500385E5 STR R0,[R5, #+848] \ 00000590 B0FFFFEA B ??get_answer_24 3800 } 3801 } 3802 } 3803 RXstate=i; \ ??get_answer_8: \ 00000594 889285E5 STR R9,[R5, #+648] 3804 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 3805 // SMART_REDRAW(); 3806 } \ ??get_answer_1: \ 00000598 18D08DE2 ADD SP,SP,#+24 \ 0000059C 40DE8DE2 ADD SP,SP,#+1024 \ 000005A0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_9: \ 000005A4 25730000 DC8 "%s",+0 \ 000005A8 ........ DC32 RXbuf \ 000005AC ........ DC32 janis 3807 3808 3809 extern int main_count; 3810 3811 //=====================add to main info==================== 3812 3813 //Сюда я не лез...kluchnik 3814 3815 char a_txt[45]; 3816 char s_txt[45]; 3817 char d_txt[45]; 3818 char f_txt[45]; 3819 char g_txt[45]; 3820 //char de[64]; 3821 //char du[38]; 3822 3823 \ In segment CODE, align 4, keep-with-next 3824 void AddToMain(const char *nameu,char *si) 3825 { \ AddToMain: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3826 char *de=malloc(64); 3827 int text_l; 3828 int iz; 3829 int name_l; 3830 name_l=0; 3831 text_l=0; 3832 name_l=strlen(nameu); 3833 // char *du=malloc(64);a_txt 3834 iz=0; 3835 #ifdef ELKA 3836 text_l=main_lenght-name_l; 3837 #else 3838 text_l=main_lenght-name_l; \ 00000004 ........ LDR R6,??DataTable66 ;; 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 101196E5 LDR R1,[R6, #+272] \ 0000002C 0080A0E3 MOV R8,#+0 \ 00000030 00A041E0 SUB R10,R1,R0 3839 #endif 3840 3841 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 3842 { 3843 /* 3844 char *du=malloc(text_l); 3845 strncpy(du,si,text_l); 3846 sprintf(de,"%s%s",du,"..."); 3847 mfree(du); 3848 } 3849 */ 3850 while(text_l!=0) 3851 { 3852 de[iz]=si[iz]; 3853 iz++; 3854 text_l--; 3855 } 3856 if(use_cutter) 3857 { 3858 de[iz]='.'; 3859 iz++; 3860 de[iz]='.'; 3861 iz++; 3862 de[iz]='.'; 3863 iz++; 3864 } 3865 de[iz]='\0'; 3866 } 3867 else 3868 strcpy(de, si); \ 00000048 0910A0E1 MOV R1,R9 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 3869 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 141196E5 LDR R1,[R6, #+276] \ 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 3870 while(strlen(de)!=iz) 3871 { 3872 // if(d[i]==0x2A) d[i]=0x20; 3873 // if(d[i]==0x27) d[i]=0x20; 3874 // if(d[i]==0x22) d[i]=0x20; 3875 // if(d[i]==0x26) d[i]=0x20; 3876 // if(d[i]==0x3D) d[i]=0x20; 3877 // if(d[i]==0x3C) d[i]=0x20; 3878 // if(d[i]==0x3E) d[i]=0x20; 3879 // if(d[i]==0x7B) d[i]=0x20; 3880 // if(d[i]==0x7D) d[i]=0x20; 3881 // if(d[i]==0x5B) d[i]=0x20; 3882 // if(d[i]==0x5D) d[i]=0x20; 3883 // if(d[i]==0x23) d[i]=0x20; 3884 // if(d[i]==0x2F) d[i]=0x20; 3885 // if(d[i]==0x5C) d[i]=0x20; 3886 // if(d[i]==0x7E) d[i]=0x20; 3887 // if(d[i]==0x5E) d[i]=0x20; 3888 // if(d[i]==0xAC) d[i]=0x20; 3889 // if(d[i]==0xA3) d[i]=0x20; 3890 // if(d[i]==0x24) d[i]=0x20; 3891 // if(d[i]==0xA5) d[i]=0x20; 3892 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] 3893 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B4 0510D8E7 LDRB R1,[R8, +R5] \ 000000B8 0A0051E3 CMP R1,#+10 \ 000000BC 0500C807 STRBEQ R0,[R8, +R5] 3894 iz++; \ 000000C0 018088E2 ADD R8,R8,#+1 3895 } \ ??AddToMain_2: \ 000000C4 0500A0E1 MOV R0,R5 \ 000000C8 1B0000EF SWI +27 \ 000000CC 080050E1 CMP R0,R8 \ 000000D0 F3FFFF1A BNE ??AddToMain_5 3896 de[iz]='\0'; \ 000000D4 0570C8E7 STRB R7,[R8, +R5] 3897 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable67 ;; main_count \ 000000DC 44719FE5 LDR R7,??AddToMain_6 ;; `?` \ 000000E0 1410A0E3 MOV R1,#+20 \ 000000E4 481D81E3 ORR R1,R1,#0x1200 \ 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 3898 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000110 4410A0E3 MOV R1,#+68 \ 00000114 481D81E3 ORR R1,R1,#0x1200 \ 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 3899 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000140 7400A0E3 MOV R0,#+116 \ 00000144 480D80E3 ORR R0,R0,#0x1200 \ 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 3900 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 0000016C A400A0E3 MOV R0,#+164 \ 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 3901 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000198 D400A0E3 MOV R0,#+212 \ 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 3902 if(main_count>4) \ ??AddToMain_11: \ 000001C4 000098E5 LDR R0,[R8, #+0] \ 000001C8 050050E3 CMP R0,#+5 \ 000001CC 100000BA BLT ??AddToMain_12 3903 { 3904 strcpy(a_txt, s_txt); \ 000001D0 00109DE5 LDR R1,[SP, #+0] \ 000001D4 04009DE5 LDR R0,[SP, #+4] \ 000001D8 1A0000EF SWI +26 3905 strcpy(s_txt, d_txt); \ 000001DC 00009DE5 LDR R0,[SP, #+0] \ 000001E0 0910A0E1 MOV R1,R9 \ 000001E4 1A0000EF SWI +26 3906 strcpy(d_txt, f_txt); \ 000001E8 0A10A0E1 MOV R1,R10 \ 000001EC 0900A0E1 MOV R0,R9 \ 000001F0 1A0000EF SWI +26 3907 strcpy(f_txt, g_txt); \ 000001F4 0B10A0E1 MOV R1,R11 \ 000001F8 0A00A0E1 MOV R0,R10 \ 000001FC 1A0000EF SWI +26 3908 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 3909 } 3910 mfree(de); \ ??AddToMain_12: \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 150000EF SWI +21 3911 main_d=1; \ 0000021C 0100A0E3 MOV R0,#+1 \ 00000220 E00186E5 STR R0,[R6, #+480] 3912 } \ 00000224 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_6: \ 00000228 ........ DC32 `?` 3913 3914 //======================add to main info================ 3915 3916 int NEW_MSG; 3917 //int LOG_TIME_CONN=0;//not log online/offline time 3918 \ In segment CODE, align 4, keep-with-next 3919 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 3920 { \ AddStringToLog: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3921 char hs[128], *lastX; 3922 TTime tt; 3923 TDate d; 3924 GetDateTime(&d,&tt); 3925 int i; 3926 3927 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 3928 if ( code==3 && NOT_LOG_SAME_XTXT ) \ 00000004 ........ LDR R5,??DataTable76 ;; 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 A00195E5 LDR R0,[R5, #+416] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 1100000A BEQ ??AddStringToLog_0 3929 { 3930 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 3937 if(code != 3 || ((LOG_XTXT) && (flag)))//Нужно сохранять иксстатус \ 000000C4 030056E3 CMP R6,#+3 \ 000000C8 10D08DE2 ADD SP,SP,#+16 \ 000000CC 0300001A BNE ??AddStringToLog_4 \ 000000D0 A40195E5 LDR R0,[R5, #+420] \ 000000D4 000050E3 CMP R0,#+0 \ 000000D8 00005B13 CMPNE R11,#+0 \ 000000DC 0400000A BEQ ??AddStringToLog_5 3938 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 3939 3940 // ShowMSG(1,(int)t); 3941 // ShowMSG(1,(int)s); // Запись хистори 3942 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000F4 0A00A0E1 MOV R0,R10 \ 000000F8 ........ BL NewLOGQ \ 000000FC 00A0A0E1 MOV R10,R0 3943 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 3944 p->type=code; \ 00000130 0C608AE5 STR R6,[R10, #+12] 3945 p->ID=IDforACK; //0-32767 \ 00000134 08808AE5 STR R8,[R10, #+8] 3946 i=AddLOGQ(&t->log,p); \ 00000138 0A10A0E1 MOV R1,R10 \ 0000013C 800084E2 ADD R0,R4,#+128 \ 00000140 ........ BL AddLOGQ \ 00000144 0070A0E1 MOV R7,R0 \ 00000148 150057E3 CMP R7,#+21 \ 0000014C 10D08DE2 ADD SP,SP,#+16 \ 00000150 090000BA BLT ??AddStringToLog_6 3947 while(i>MAXLOGMSG) 3948 { 3949 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000154 880094E5 LDR R0,[R4, #+136] \ 00000158 801094E5 LDR R1,[R4, #+128] 3950 RemoveLOGQ(&t->log,t->log); 3951 i--; \ 0000015C 017047E2 SUB R7,R7,#+1 \ 00000160 000051E1 CMP R1,R0 \ 00000164 00009005 LDREQ R0,[R0, #+0] \ 00000168 88008405 STREQ R0,[R4, #+136] \ 0000016C 800084E2 ADD R0,R4,#+128 \ 00000170 ........ BL RemoveLOGQ 3952 } \ 00000174 150057E3 CMP R7,#+21 \ 00000178 F5FFFFAA BGE ??AddStringToLog_7 3953 t->msg_count=i; \ ??AddStringToLog_6: \ 0000017C 907084E5 STR R7,[R4, #+144] 3954 if (!t->last_log) t->last_log=p; \ 00000180 880094E5 LDR R0,[R4, #+136] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 88A08405 STREQ R10,[R4, #+136] 3955 if (code==3) \ 0000018C 030056E3 CMP R6,#+3 \ 00000190 0D00001A BNE ??AddStringToLog_8 3956 { 3957 if (edchat_id) \ 00000194 C00295E5 LDR R0,[R5, #+704] \ 00000198 000050E3 CMP R0,#+0 \ 0000019C 1C00000A BEQ ??AddStringToLog_9 3958 { 3959 void *data=FindGUIbyId(edchat_id,NULL); \ 000001A0 C00295E5 LDR R0,[R5, #+704] \ 000001A4 0010A0E3 MOV R1,#+0 \ 000001A8 090200EF SWI +521 3960 if (data) \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 1700000A BEQ ??AddStringToLog_9 3961 { 3962 EDCHAT_STRUCT *ed_struct; 3963 ed_struct=EDIT_GetUserPointer(data); \ 000001B4 DF0100EF SWI +479 3964 if (ed_struct) \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 1400000A BEQ ??AddStringToLog_9 3965 { 3966 if (ed_struct->ed_contact==t) \ 000001C0 000090E5 LDR R0,[R0, #+0] \ 000001C4 040050E1 CMP R0,R4 \ 000001C8 1100001A BNE ??AddStringToLog_9 3967 { 3968 goto L_INC; 3969 } 3970 } 3971 } 3972 } 3973 goto L_NOINC; 3974 } 3975 L_INC: 3976 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001CC 700094E5 LDR R0,[R4, #+112] \ 000001D0 000050E3 CMP R0,#+0 \ 000001D4 B0029505 LDREQ R0,[R5, #+688] \ 000001D8 01008002 ADDEQ R0,R0,#+1 \ 000001DC B0028505 STREQ R0,[R5, #+688] 3977 if(NEW_MSG==1) \ 000001E0 540395E5 LDR R0,[R5, #+852] \ 000001E4 010050E3 CMP R0,#+1 \ 000001E8 0700001A BNE ??AddStringToLog_10 3978 { 3979 t->unread_msg++; \ 000001EC 740094E5 LDR R0,[R4, #+116] \ 000001F0 010080E2 ADD R0,R0,#+1 \ 000001F4 740084E5 STR R0,[R4, #+116] 3980 total_unread2++; \ 000001F8 100295E5 LDR R0,[R5, #+528] \ 000001FC 010080E2 ADD R0,R0,#+1 \ 00000200 100285E5 STR R0,[R5, #+528] 3981 NEW_MSG=0; \ 00000204 0000A0E3 MOV R0,#+0 \ 00000208 540385E5 STR R0,[R5, #+852] 3982 } 3983 t->isunread=1; \ ??AddStringToLog_10: \ 0000020C 0100A0E3 MOV R0,#+1 \ 00000210 700084E5 STR R0,[R4, #+112] 3984 // if(saver_on) reftes(); 3985 L_NOINC: 3986 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000214 0400A0E1 MOV R0,R4 \ 00000218 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3987 } \ ??AddStringToLog_2: \ 0000021C 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 00000220 F08FBDE8 POP {R4-R11,PC} ;; return \ ??AddStringToLog_3: \ 00000224 ........ DC32 `?` 3988 3989 void ParseAnswer(WSHDR *ws, const char *s); 3990 3991 int time_to_stop_t9; 3992 \ In segment CODE, align 4, keep-with-next 3993 void ParseXStatusText(WSHDR *ws, const char *s, int color) 3994 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 3995 int c; 3996 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 3997 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 3998 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} 3999 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 4000 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 4001 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 4002 while((c=*s++)) 4003 { 4004 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 4005 { 4006 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 4007 { 4008 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 4009 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 4010 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 4011 } 4012 } 4013 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 4014 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 4015 } 4016 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 4017 void AddMsgToChat(void *data) 4018 { \ AddMsgToChat: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 4019 LOGQ *p; 4020 EDITCONTROL ec; 4021 EDITC_OPTIONS ec_options; 4022 EDCHAT_STRUCT *ed_struct; 4023 int j; 4024 int color, font, type; 4025 int zc; 4026 if (!data) return; \ 0000000C B900000A BEQ ??AddMsgToChat_0 4027 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0050B0E1 MOVS R5,R0 4028 if (!ed_struct) return; \ 00000018 B600000A BEQ ??AddMsgToChat_0 4029 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000095E5 LDR R0,[R5, #+0] \ 00000020 701090E5 LDR R1,[R0, #+112] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 B200000A BEQ ??AddMsgToChat_0 4030 4031 4032 p=ed_struct->ed_contact->last_log; \ 0000002C 886090E5 LDR R6,[R0, #+136] 4033 if (p) \ 00000030 ........ LDR R7,??DataTable76 ;; S_ICONS \ 00000034 000056E3 CMP R6,#+0 \ 00000038 9800000A BEQ ??AddMsgToChat_1 4034 { 4035 while(p) 4036 { 4037 font = ED_H_FONT_SIZE; 4038 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C 040096E5 LDR R0,[R6, #+4] \ 00000040 808197E5 LDR R8,[R7, #+384] \ 00000044 649197E5 LDR R9,[R7, #+356] \ 00000048 030010E2 ANDS R0,R0,#0x3 \ 0000004C 0300000A BEQ ??AddMsgToChat_3 4039 { 4040 if (zc==1) \ 00000050 010050E3 CMP R0,#+1 \ 00000054 1A00001A BNE ??AddMsgToChat_4 4041 color=ACK_COLOR; //Зеленый \ 00000058 949197E5 LDR R9,[R7, #+404] \ 0000005C 180000EA B ??AddMsgToChat_4 4042 else 4043 color=I_COLOR; 4044 //#endif 4045 } 4046 else 4047 { 4048 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 00000060 080096E5 LDR R0,[R6, #+8] \ 00000064 010070E3 CMN R0,#+1 \ 00000068 1400001A BNE ??AddMsgToChat_5 4049 { 4050 type = p->type&0x0F; \ 0000006C 0C0096E5 LDR R0,[R6, #+12] \ 00000070 0F1000E2 AND R1,R0,#0xF 4051 if(p->type&0x10) \ 00000074 100010E3 TST R0,#0x10 \ 00000078 0900000A BEQ ??AddMsgToChat_6 4052 { 4053 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 0000007C 010051E3 CMP R1,#+1 \ 00000080 70919705 LDREQ R9,[R7, #+368] \ 00000084 0400000A BEQ ??AddMsgToChat_7 \ 00000088 030051E3 CMP R1,#+3 \ 0000008C 78919705 LDREQ R9,[R7, #+376] \ 00000090 90819705 LDREQ R8,[R7, #+400] \ 00000094 0A00000A BEQ ??AddMsgToChat_4 \ 00000098 749197E5 LDR R9,[R7, #+372] \ ??AddMsgToChat_7: \ 0000009C 8C8197E5 LDR R8,[R7, #+396] \ 000000A0 070000EA B ??AddMsgToChat_4 4054 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 4055 } 4056 else 4057 { 4058 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 68919715 LDRNE R9,[R7, #+360] \ 000000B4 84819705 LDREQ R8,[R7, #+388] \ 000000B8 6C919705 LDREQ R9,[R7, #+364] \ 000000BC 000000EA B ??AddMsgToChat_4 4059 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 4060 } 4061 } 4062 else 4063 color=UNACK_COLOR; //????? \ ??AddMsgToChat_5: \ 000000C0 989197E5 LDR R9,[R7, #+408] 4064 } 4065 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 000000C4 10008DE2 ADD R0,SP,#+16 \ 000000C8 640100EF SWI +356 4066 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 4067 { 4068 ascii2ws(ews,p->hdr); \ 000000DC 2C0297E5 LDR R0,[R7, #+556] \ 000000E0 101086E2 ADD R1,R6,#+16 \ 000000E4 ........ _BLF ascii2ws,??ascii2ws??rA 4069 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000000E8 2C3297E5 LDR R3,[R7, #+556] \ 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 4070 } 4071 else 4072 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_8: \ 00000100 0000A0E3 MOV R0,#+0 \ 00000104 01002DE9 PUSH {R0} \ 00000108 2C3297E5 LDR R3,[R7, #+556] \ 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 4073 PrepareEditCOptions(&ec_options); \ 00000120 0D00A0E1 MOV R0,SP \ 00000124 C80100EF SWI +456 4074 SetPenColorToEditCOptions(&ec_options,color); \ 00000128 0910A0E1 MOV R1,R9 \ 0000012C 0D00A0E1 MOV R0,SP \ 00000130 CC0100EF SWI +460 4075 SetFontToEditCOptions(&ec_options,font); \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0D00A0E1 MOV R0,SP \ 0000013C CA0100EF SWI +458 4076 CopyOptionsToEditControl(&ec,&ec_options); \ 00000140 0D10A0E1 MOV R1,SP \ 00000144 10008DE2 ADD R0,SP,#+16 \ 00000148 CE0100EF SWI +462 4077 //AddEditControlToEditQend(eq,&ec,ma); 4078 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 4079 ed_struct->ed_answer++; \ 00000160 080095E5 LDR R0,[R5, #+8] \ 00000164 010080E2 ADD R0,R0,#+1 \ 00000168 080085E5 STR R0,[R5, #+8] 4080 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 4081 { 4082 ParseAnswer(ews,p->text); \ 0000017C 2C0297E5 LDR R0,[R7, #+556] \ 00000180 601086E2 ADD R1,R6,#+96 \ 00000184 ........ BL ParseAnswer \ 00000188 050000EA B ??AddMsgToChat_11 4083 } 4084 else 4085 { 4086 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_10: \ 0000018C 100010E3 TST R0,#0x10 \ 00000190 78219715 LDRNE R2,[R7, #+376] \ 00000194 2C0297E5 LDR R0,[R7, #+556] \ 00000198 6C219705 LDREQ R2,[R7, #+364] \ 0000019C 601086E2 ADD R1,R6,#+96 \ 000001A0 ........ BL ParseXStatusText 4087 } 4088 PrepareEditControl(&ec); \ ??AddMsgToChat_11: \ 000001A4 10008DE2 ADD R0,SP,#+16 \ 000001A8 640100EF SWI +356 4089 ConstructEditControl(&ec, 4090 ECT_NORMAL_TEXT, 4091 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 4092 ews,ews->wsbody[0]); \ 000001AC 2C3297E5 LDR R3,[R7, #+556] \ 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 4093 PrepareEditCOptions(&ec_options); \ 000001D8 04008DE2 ADD R0,SP,#+4 \ 000001DC C80100EF SWI +456 4094 //#ifdef M75 4095 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 4096 { 4097 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 000001F4 100010E3 TST R0,#0x10 \ 000001F8 7C119705 LDREQ R1,[R7, #+380] \ 000001FC 88119715 LDRNE R1,[R7, #+392] \ 00000200 080000EA B ??AddMsgToChat_13 4098 } 4099 else 4100 { 4101 SetPenColorToEditCOptions(&ec_options,(p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_12: \ 00000204 100010E3 TST R0,#0x10 \ 00000208 78119715 LDRNE R1,[R7, #+376] \ 0000020C 0D00A0E1 MOV R0,SP \ 00000210 6C119705 LDREQ R1,[R7, #+364] \ 00000214 CC0100EF SWI +460 4102 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 90119715 LDRNE R1,[R7, #+400] \ 00000224 84119705 LDREQ R1,[R7, #+388] \ ??AddMsgToChat_13: \ 00000228 0D00A0E1 MOV R0,SP \ 0000022C CA0100EF SWI +458 4103 } 4104 //#else 4105 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 4106 //#endif 4107 CopyOptionsToEditControl(&ec,&ec_options); \ 00000230 0D10A0E1 MOV R1,SP \ 00000234 10008DE2 ADD R0,SP,#+16 \ 00000238 CE0100EF SWI +462 4108 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 4109 ed_struct->ed_answer++; \ 00000250 080095E5 LDR R0,[R5, #+8] \ 00000254 010080E2 ADD R0,R0,#+1 \ 00000258 080085E5 STR R0,[R5, #+8] 4110 p=p->next; \ 0000025C 006096E5 LDR R6,[R6, #+0] 4111 } \ 00000260 000056E3 CMP R6,#+0 \ 00000264 74FFFF1A BNE ??AddMsgToChat_2 4112 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 00000268 001095E5 LDR R1,[R5, #+0] \ 0000026C 901091E5 LDR R1,[R1, #+144] \ 00000270 011081E2 ADD R1,R1,#+1 \ 00000274 8140A0E1 LSL R4,R1,#+1 \ 00000278 000054E1 CMP R4,R0 \ 0000027C 070000AA BGE ??AddMsgToChat_1 4113 while(jed_answer) 4114 { 4115 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_14: \ 00000280 040095E5 LDR R0,[R5, #+4] \ 00000284 0110A0E3 MOV R1,#+1 \ 00000288 D10100EF SWI +465 4116 ed_struct->ed_answer--; \ 0000028C 080095E5 LDR R0,[R5, #+8] \ 00000290 010040E2 SUB R0,R0,#+1 \ 00000294 080085E5 STR R0,[R5, #+8] 4117 } \ 00000298 000054E1 CMP R4,R0 \ 0000029C F7FFFFBA BLT ??AddMsgToChat_14 4118 } 4119 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002A0 000095E5 LDR R0,[R5, #+0] \ 000002A4 0040A0E3 MOV R4,#+0 \ 000002A8 884080E5 STR R4,[R0, #+136] 4120 if (IsGuiOnTop(edchat_id)) \ 000002AC C00297E5 LDR R0,[R7, #+704] \ 000002B0 350100EF SWI +309 \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0300000A BEQ ??AddMsgToChat_15 4121 { 4122 total_unread--; \ 000002BC B00297E5 LDR R0,[R7, #+688] \ 000002C0 010040E2 SUB R0,R0,#+1 \ 000002C4 B00287E5 STR R0,[R7, #+688] \ 000002C8 020000EA B ??AddMsgToChat_16 4123 } 4124 else 4125 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] 4126 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_16: \ 000002D8 000095E5 LDR R0,[R5, #+0] \ 000002DC 704080E5 STR R4,[R0, #+112] 4127 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 000002E0 101297E5 LDR R1,[R7, #+528] \ 000002E4 742090E5 LDR R2,[R0, #+116] \ 000002E8 021041E0 SUB R1,R1,R2 \ 000002EC 101287E5 STR R1,[R7, #+528] 4128 ed_struct->ed_contact->unread_msg=0; \ 000002F0 744080E5 STR R4,[R0, #+116] 4129 ChangeContactPos(ed_struct->ed_contact); \ 000002F4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4130 // EDIT_SetFocus(data,ed_struct->ed_answer); 4131 } \ ??AddMsgToChat_0: \ 000002F8 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 000002FC F083BDE8 POP {R4-R9,PC} ;; return 4132 4133 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 4134 void DrawAck(void *data) 4135 { \ DrawAck: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 4136 LOGQ *p; 4137 EDITCONTROL ec; 4138 EDITC_OPTIONS ec_options; 4139 EDCHAT_STRUCT *ed_struct; 4140 int j; 4141 int color; 4142 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 4143 if (!data) return; \ 00000010 4B00000A BEQ ??DrawAck_0 4144 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 4145 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4800000A BEQ ??DrawAck_0 4146 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 4147 j=ed_struct->ed_answer; 4148 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 805091E5 LDR R5,[R1, #+128] \ 0000002C 901091E5 LDR R1,[R1, #+144] \ 00000030 ........ LDR R8,??DataTable76 ;; 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 4149 while(p) 4150 { 4151 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000044 010057E3 CMP R7,#+1 \ 00000048 330000BA BLT ??DrawAck_3 4152 { 4153 if (!(p->acked&4)) \ 0000004C 040095E5 LDR R0,[R5, #+4] \ 00000050 040010E3 TST R0,#0x4 \ 00000054 3000001A BNE ??DrawAck_3 4154 { 4155 ExtractEditControl(data,j,&ec); \ 00000058 10208DE2 ADD R2,SP,#+16 \ 0000005C 0710A0E1 MOV R1,R7 \ 00000060 0400A0E1 MOV R0,R4 \ 00000064 690100EF SWI +361 4156 PrepareEditCOptions(&ec_options); \ 00000068 0D00A0E1 MOV R0,SP \ 0000006C C80100EF SWI +456 4157 if (p->acked) \ 00000070 040095E5 LDR R0,[R5, #+4] \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0400000A BEQ ??DrawAck_4 4158 { 4159 if (p->acked==1) \ 0000007C 010050E3 CMP R0,#+1 4160 color=ACK_COLOR; //Зеленый \ 00000080 94119805 LDREQ R1,[R8, #+404] \ 00000084 1100000A BEQ ??DrawAck_5 4161 else 4162 color=I_COLOR; \ ??DrawAck_6: \ 00000088 641198E5 LDR R1,[R8, #+356] \ 0000008C 0F0000EA B ??DrawAck_5 4163 } 4164 else 4165 { 4166 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000090 080095E5 LDR R0,[R5, #+8] \ 00000094 010070E3 CMN R0,#+1 \ 00000098 0B00001A BNE ??DrawAck_7 4167 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 74119815 LDRNE R1,[R8, #+372] \ 000000B4 70119805 LDREQ R1,[R8, #+368] \ 000000B8 040000EA B ??DrawAck_5 \ ??DrawAck_8: \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 F0FFFF0A BEQ ??DrawAck_6 \ 000000C4 681198E5 LDR R1,[R8, #+360] \ 000000C8 000000EA B ??DrawAck_5 4168 else 4169 color=UNACK_COLOR; //Серый \ ??DrawAck_7: \ 000000CC 981198E5 LDR R1,[R8, #+408] 4170 } 4171 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); \ ??DrawAck_5: \ 000000D0 0D00A0E1 MOV R0,SP \ 000000D4 CC0100EF SWI +460 4172 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); \ 000000D8 0C0095E5 LDR R0,[R5, #+12] 4173 CopyOptionsToEditControl(&ec,&ec_options); 4174 StoreEditControl(data,j,&ec); 4175 p->acked|=4; //Обработали 4176 dorefresh=1; \ 000000DC 0160A0E3 MOV R6,#+1 \ 000000E0 100010E3 TST R0,#0x10 \ 000000E4 8C119815 LDRNE R1,[R8, #+396] \ 000000E8 0D00A0E1 MOV R0,SP \ 000000EC 80119805 LDREQ R1,[R8, #+384] \ 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] 4177 } 4178 } 4179 j+=2; 4180 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 4181 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C5FFFF1A BNE ??DrawAck_2 4182 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C C00298E5 LDR R0,[R8, #+704] \ 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 4183 } 4184 \ In segment CODE, align 4, keep-with-next 4185 void ask_my_info(void) 4186 { 4187 /* TPKT *p; 4188 CLIST *t; 4189 p=malloc(sizeof(PKT)); 4190 p->pkt.uin=UIN; 4191 p->pkt.type=T_REQINFOSHORT; 4192 p->pkt.data_len=0; 4193 // AddStringToLog(t,0x01,"Request info...",I_str); 4194 SUBPROC((void *)SendAnswer,0,p);*/ 4195 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 4196 \ In segment CODE, align 4, keep-with-next 4197 void set_my_status(void) 4198 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 4199 TPKT *p; 4200 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 4201 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 4202 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 4203 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 4204 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 628 4205 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,??DataTable79 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 4206 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 628 4207 4208 extern int Send0; 4209 \ In segment CODE, align 4, keep-with-next 4210 void set_my_xstatus(void) 4211 { \ set_my_xstatus: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 4212 #ifdef NEWSGOLD 4213 if(Is_Id3tag_Enabled) 4214 { 4215 if(CurrentXStatus!=11) 4216 { 4217 #endif 4218 TPKT *p; 4219 char *s1; 4220 char *s2; 4221 int l1; 4222 int l2; 4223 p=malloc(sizeof(PKT)+1); 4224 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 4225 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 4226 p->pkt.data_len=1; // Длина пакета: 1 байт 4227 p->data[0]=CurrentXStatus; \ 00000004 ........ LDR R8,??DataTable76 ;; S_ICONS 4228 SUBPROC((void *)SendAnswer,0,p); \ 00000008 ........ LDR R6,??DataTable79 ;; SendAnswer \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 0900A0E3 MOV R0,#+9 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 0050A0E3 MOV R5,#+0 \ 00000020 005084E5 STR R5,[R4, #+0] \ 00000024 1600A0E3 MOV R0,#+22 \ 00000028 B400C4E1 STRH R0,[R4, #+4] \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 B600C4E1 STRH R0,[R4, #+6] \ 00000034 280298E5 LDR R0,[R8, #+552] \ 00000038 0420A0E1 MOV R2,R4 \ 0000003C 0800C4E5 STRB R0,[R4, #+8] \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 710100EF SWI +369 4229 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 0000004C 280298E5 LDR R0,[R8, #+552] \ 00000050 0D10A0E1 MOV R1,SP \ 00000054 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000058 010080E2 ADD R0,R0,#+1 \ 0000005C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000060 0070A0E1 MOV R7,R0 4230 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000064 280298E5 LDR R0,[R8, #+552] \ 00000068 04108DE2 ADD R1,SP,#+4 \ 0000006C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000070 020080E2 ADD R0,R0,#+2 \ 00000074 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000078 0080A0E1 MOV R8,R0 4231 if ((!s1)||(!s2)) return; \ 0000007C 000057E3 CMP R7,#+0 \ 00000080 00005813 CMPNE R8,#+0 \ 00000084 F781BD08 POPEQ {R0-R2,R4-R8,PC} 4232 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000088 00009DE5 LDR R0,[SP, #+0] \ 0000008C 04109DE5 LDR R1,[SP, #+4] \ 00000090 000081E0 ADD R0,R1,R0 \ 00000094 090080E2 ADD R0,R0,#+9 \ 00000098 140000EF SWI +20 \ 0000009C 0040A0E1 MOV R4,R0 4233 p->pkt.uin=0; \ 000000A0 005084E5 STR R5,[R4, #+0] 4234 p->pkt.type=T_XTEXT_SET; \ 000000A4 1A00A0E3 MOV R0,#+26 \ 000000A8 B400C4E1 STRH R0,[R4, #+4] 4235 p->pkt.data_len=l1+l2+1; \ 000000AC 00009DE5 LDR R0,[SP, #+0] \ 000000B0 04109DE5 LDR R1,[SP, #+4] \ 000000B4 000081E0 ADD R0,R1,R0 \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC B600C4E1 STRH R0,[R4, #+6] 4236 strncpy(p->data+0,s1,l1); \ 000000C0 00209DE5 LDR R2,[SP, #+0] \ 000000C4 0710A0E1 MOV R1,R7 \ 000000C8 080084E2 ADD R0,R4,#+8 \ 000000CC 160100EF SWI +278 4237 p->data[l1]=0; \ 000000D0 00009DE5 LDR R0,[SP, #+0] 4238 strncpy(p->data+l1+1,s2,l2); \ 000000D4 0810A0E1 MOV R1,R8 \ 000000D8 040080E0 ADD R0,R0,R4 \ 000000DC 0850C0E5 STRB R5,[R0, #+8] \ 000000E0 00009DE5 LDR R0,[SP, #+0] \ 000000E4 04209DE5 LDR R2,[SP, #+4] \ 000000E8 040080E0 ADD R0,R0,R4 \ 000000EC 090080E2 ADD R0,R0,#+9 \ 000000F0 160100EF SWI +278 4239 SUBPROC((void *)SendAnswer,0,p); \ 000000F4 0420A0E1 MOV R2,R4 \ 000000F8 0010A0E3 MOV R1,#+0 \ 000000FC 0600A0E1 MOV R0,R6 \ 00000100 710100EF SWI +369 4240 #ifdef NEWSGOLD 4241 } 4242 else 4243 { 4244 tracktimer=0; 4245 GetTags(); 4246 } 4247 } 4248 else 4249 { 4250 TPKT *p; 4251 char *s1; 4252 char *s2; 4253 int l1; 4254 int l2; 4255 p=malloc(sizeof(PKT)+1); 4256 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 4257 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 4258 p->pkt.data_len=1; // Длина пакета: 1 байт 4259 p->data[0]=CurrentXStatus; 4260 SUBPROC((void *)SendAnswer,0,p); 4261 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); 4262 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); 4263 if ((!s1)||(!s2)) return; 4264 p=malloc(sizeof(PKT)+l1+l2+1); 4265 p->pkt.uin=0; 4266 p->pkt.type=T_XTEXT_SET; 4267 p->pkt.data_len=l1+l2+1; 4268 strncpy(p->data+0,s1,l1); 4269 p->data[l1]=0; 4270 strncpy(p->data+l1+1,s2,l2); 4271 SUBPROC((void *)SendAnswer,0,p); 4272 tracktimer=0; 4273 GetTags(); 4274 } 4275 #endif 4276 } \ 00000104 F781BDE8 POP {R0-R2,R4-R8,PC} ;; return 4277 #ifdef NEWSGOLD 4278 4279 4280 void set_my_xstatus2(void) 4281 { 4282 TPKT *p; 4283 // char *s1; 4284 // char *s2; 4285 int l1; 4286 int l2; 4287 p=malloc(sizeof(PKT)+1); 4288 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 4289 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 4290 p->pkt.data_len=1; // Длина пакета: 1 байт 4291 p->data[0]=11; 4292 SUBPROC((void *)SendAnswer,0,p); 4293 // char *s1; 4294 char *sk2=malloc(256); 4295 // strcpy(s1, playing); 4296 // s1="Now playing:"; 4297 strcpy(sk2,teast2); 4298 l1=strlen(playing); 4299 l2=strlen(sk2); 4300 if ((!playing)||(!sk2)) return; 4301 p=malloc(sizeof(PKT)+l1+l2+1); 4302 p->pkt.uin=0; 4303 p->pkt.type=T_XTEXT_SET; 4304 p->pkt.data_len=l1+l2+1; 4305 strncpy(p->data+0,playing,l1); 4306 p->data[l1]=0; 4307 strncpy(p->data+l1+1,sk2,l2); 4308 mfree(sk2); 4309 SUBPROC((void *)SendAnswer,0,p); 4310 // mfree(s1); 4311 // mfree(s2); 4312 } 4313 #endif \ In segment CODE, align 4, keep-with-next 4314 void to_develop(void) 4315 { 4316 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable76 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 601290E5 LDR R1,[R0, #+608] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 4317 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable78 ;; `?ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 4334 { 4335 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 4336 { 4337 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 780084E5 STR R0,[R4, #+120] 4338 #ifdef EVILFOX 4339 time_to_stop_t9=2; 4340 #else 4341 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 580385E5 STR R0,[R5, #+856] \ 00000060 7080BDE8 POP {R4-R6,PC} 4342 #endif 4343 } 4344 else 4345 { 4346 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 4347 DirectRedrawGUI_ID(edchat_id); \ 0000006C C00295E5 LDR R0,[R5, #+704] \ 00000070 400100EF SWI +320 4348 } 4349 } 4350 } 4351 } 4352 } 4353 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 4354 4355 GBSTMR develop; 4356 \ In segment CODE, align 4, keep-with-next 4357 void begin_to_develop() 4358 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 4359 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 4360 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 4361 else 4362 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 + 4868 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 4363 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 S_ICONS + 4868 4364 ////=================================comand lists 4365 int comanda; 4366 4367 char requests1[]="Sending online time..."; 4368 char requests2[]="Sending msg info..."; 4369 char requests3[]="Sending battery info..."; 4370 char requests4[]="Sending mod info..."; 4371 char requests6[]="Sending offline info..."; 4372 char mod_info[264]; 4373 4374 const char ipc_game_name[]="Combats"; 4375 IPC_REQ game_gipc; 4376 #define IPC_GAME_DATA 24 4377 4378 \ In segment CODE, align 4, keep-with-next 4379 void CheckComand(char *txt, CLIST *t, char *ddd) 4380 { \ CheckComand: \ 00000000 F44F2DE9 PUSH {R2,R4-R11,LR} 4381 comanda=1; \ 00000004 ........ LDR R6,??DataTable83 ;; S_ICONS 4382 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 ........ LDR R7,??DataTable78 ;; `?pkt.uin=t->uin; \ 0000013C 0C0095E5 LDR R0,[R5, #+12] \ 00000140 000084E5 STR R0,[R4, #+0] 4403 p->pkt.type=T_SENDMSG; \ 00000144 B4A0C4E1 STRH R10,[R4, #+4] 4404 p->pkt.data_len=strlen(online); \ 00000148 20008DE2 ADD R0,SP,#+32 \ 0000014C 1B0000EF SWI +27 \ 00000150 B600C4E1 STRH R0,[R4, #+6] 4405 strcpy(p->data,online); \ 00000154 20108DE2 ADD R1,SP,#+32 \ 00000158 080084E2 ADD R0,R4,#+8 \ 0000015C 1A0000EF SWI +26 4406 #ifdef EVILFOX 4407 SENDMSGCOUNT++; 4408 #else 4409 if(show_send_info) \ 00000160 440196E5 LDR R0,[R6, #+324] \ 00000164 08D08DE2 ADD SP,SP,#+8 \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 1C0296E5 LDR R0,[R6, #+540] \ 00000170 010080E2 ADD R0,R0,#+1 \ 00000174 1C0286E5 STR R0,[R6, #+540] \ 00000178 0A00000A BEQ ??CheckComand_4 4410 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000017C 0110A0E3 MOV R1,#+1 \ 00000180 02002DE9 PUSH {R1} \ 00000184 000009E0 AND R0,R9,R0 \ 00000188 01002DE9 PUSH {R0} \ 0000018C 2F3087E2 ADD R3,R7,#+47 \ 00000190 1400A0E3 MOV R0,#+20 \ 00000194 4C0D80E3 ORR R0,R0,#0x1300 \ 00000198 062080E0 ADD R2,R0,R6 \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 ........ BL AddStringToLog \ 000001A4 08D08DE2 ADD SP,SP,#+8 4411 else 4412 SENDMSGCOUNT++; 4413 #endif 4414 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_4: \ 000001A8 0420A0E1 MOV R2,R4 \ 000001AC 0010A0E3 MOV R1,#+0 \ 000001B0 0800A0E1 MOV R0,R8 \ 000001B4 710100EF SWI +369 4415 return; \ ??CheckComand_1: \ 000001B8 47DF8DE2 ADD SP,SP,#+284 \ 000001BC F08FBDE8 POP {R4-R11,PC} 4416 } 4417 4418 if(!strcmp(txt, "GET_MSG_INFO") || !strcmp(txt, "__MSG")) \ ??CheckComand_3: \ 000001C0 2C00A0E3 MOV R0,#+44 \ 000001C4 500E80E3 ORR R0,R0,#0x500 \ 000001C8 071080E0 ADD R1,R0,R7 \ 000001CC 0400A0E1 MOV R0,R4 \ 000001D0 190000EF SWI +25 \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0600000A BEQ ??CheckComand_5 \ 000001DC 2400A0E3 MOV R0,#+36 \ 000001E0 500E80E3 ORR R0,R0,#0x500 \ 000001E4 071080E0 ADD R1,R0,R7 \ 000001E8 0400A0E1 MOV R0,R4 \ 000001EC 190000EF SWI +25 \ 000001F0 000050E3 CMP R0,#+0 \ 000001F4 2900001A BNE ??CheckComand_6 \ ??CheckComand_5: \ 000001F8 5C0386E5 STR R0,[R6, #+860] 4419 { 4420 comanda=0; 4421 TPKT *p; 4422 char *send_txt=malloc(64); \ 000001FC 4000A0E3 MOV R0,#+64 \ 00000200 140000EF SWI +20 \ 00000204 0040A0E1 MOV R4,R0 4423 sprintf(send_txt, "Отправлено сообщений: %d \n" 4424 "Принято сообщений: %d" 4425 , main2_count, main_count); \ 00000208 ........ LDR R0,??DataTable80 ;; main_count \ 0000020C 003090E5 LDR R3,[R0, #+0] \ 00000210 ........ LDR R0,??DataTable81 ;; main2_count \ 00000214 002090E5 LDR R2,[R0, #+0] \ 00000218 3C00A0E3 MOV R0,#+60 \ 0000021C 500E80E3 ORR R0,R0,#0x500 \ 00000220 071080E0 ADD R1,R0,R7 \ 00000224 0400A0E1 MOV R0,R4 \ 00000228 160000EF SWI +22 4426 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 0000022C 0400A0E1 MOV R0,R4 \ 00000230 1B0000EF SWI +27 \ 00000234 090080E2 ADD R0,R0,#+9 \ 00000238 140000EF SWI +20 \ 0000023C 00B0A0E1 MOV R11,R0 4427 p->pkt.uin=t->uin; \ 00000240 0C0095E5 LDR R0,[R5, #+12] \ 00000244 00008BE5 STR R0,[R11, #+0] 4428 p->pkt.type=T_SENDMSG; \ 00000248 B4A0CBE1 STRH R10,[R11, #+4] 4429 p->pkt.data_len=strlen(send_txt); \ 0000024C 0400A0E1 MOV R0,R4 \ 00000250 1B0000EF SWI +27 \ 00000254 B600CBE1 STRH R0,[R11, #+6] 4430 strcpy(p->data,send_txt); \ 00000258 0410A0E1 MOV R1,R4 \ 0000025C 08008BE2 ADD R0,R11,#+8 \ 00000260 1A0000EF SWI +26 4431 #ifdef EVILFOX 4432 SENDMSGCOUNT++; 4433 #else 4434 if(show_send_info) \ 00000264 440196E5 LDR R0,[R6, #+324] \ 00000268 000050E3 CMP R0,#+0 \ 0000026C 1C0296E5 LDR R0,[R6, #+540] \ 00000270 010080E2 ADD R0,R0,#+1 \ 00000274 1C0286E5 STR R0,[R6, #+540] \ 00000278 2D01000A BEQ ??CheckComand_7 4435 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000027C 0110A0E3 MOV R1,#+1 \ 00000280 02002DE9 PUSH {R1} \ 00000284 000009E0 AND R0,R9,R0 \ 00000288 01002DE9 PUSH {R0} \ 0000028C 2F3087E2 ADD R3,R7,#+47 \ 00000290 2C00A0E3 MOV R0,#+44 \ 00000294 4C0D80E3 ORR R0,R0,#0x1300 \ 00000298 062080E0 ADD R2,R0,R6 \ 0000029C 210100EA B ??CheckComand_8 4436 else 4437 SENDMSGCOUNT++; 4438 #endif 4439 SUBPROC((void *)SendAnswer,0,p); 4440 mfree(send_txt); 4441 return; 4442 } 4443 4444 //==========================windes commands begin ===================== 4445 4446 if(!strcmp(txt, "GET_PROVIDER") || !strcmp(txt, "__PROVIDER")) \ ??CheckComand_6: \ 000002A0 E800A0E3 MOV R0,#+232 \ 000002A4 400E80E3 ORR R0,R0,#0x400 \ 000002A8 071080E0 ADD R1,R0,R7 \ 000002AC 0400A0E1 MOV R0,R4 \ 000002B0 190000EF SWI +25 \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0600000A BEQ ??CheckComand_9 \ 000002BC DC00A0E3 MOV R0,#+220 \ 000002C0 400E80E3 ORR R0,R0,#0x400 \ 000002C4 071080E0 ADD R1,R0,R7 \ 000002C8 0400A0E1 MOV R0,R4 \ 000002CC 190000EF SWI +25 \ 000002D0 000050E3 CMP R0,#+0 \ 000002D4 3100001A BNE ??CheckComand_10 \ ??CheckComand_9: \ 000002D8 5C0386E5 STR R0,[R6, #+860] 4447 { 4448 comanda=0; 4449 TPKT *p; 4450 4451 WSHDR *ws=AllocWS(32); \ 000002DC 2000A0E3 MOV R0,#+32 \ 000002E0 250100EF SWI +293 \ 000002E4 00B0A0E1 MOV R11,R0 4452 GetProvider(ws,0); \ 000002E8 0010A0E3 MOV R1,#+0 \ 000002EC 410000EF SWI +65 4453 char prov[16]; 4454 ws_2str(ws,prov,wstrlen(ws)); \ 000002F0 0B00A0E1 MOV R0,R11 \ 000002F4 230100EF SWI +291 \ 000002F8 0020A0E1 MOV R2,R0 \ 000002FC 08108DE2 ADD R1,SP,#+8 \ 00000300 0B00A0E1 MOV R0,R11 \ 00000304 A30000EF SWI +163 4455 char *send_txt=malloc(32); \ 00000308 2000A0E3 MOV R0,#+32 \ 0000030C 140000EF SWI +20 \ 00000310 0040A0E1 MOV R4,R0 4456 sprintf(send_txt, "Оператор: %s", prov); \ 00000314 08208DE2 ADD R2,SP,#+8 \ 00000318 1400A0E3 MOV R0,#+20 \ 0000031C 500E80E3 ORR R0,R0,#0x500 \ 00000320 071080E0 ADD R1,R0,R7 \ 00000324 0400A0E1 MOV R0,R4 \ 00000328 160000EF SWI +22 4457 FreeWS(ws); \ 0000032C 0B00A0E1 MOV R0,R11 \ 00000330 290100EF SWI +297 4458 4459 p=malloc(sizeof(PKT)+28+1); \ 00000334 2500A0E3 MOV R0,#+37 \ 00000338 140000EF SWI +20 \ 0000033C 00B0A0E1 MOV R11,R0 4460 p->pkt.uin=t->uin; \ 00000340 0C0095E5 LDR R0,[R5, #+12] \ 00000344 00008BE5 STR R0,[R11, #+0] 4461 p->pkt.type=T_SENDMSG; \ 00000348 B4A0CBE1 STRH R10,[R11, #+4] 4462 p->pkt.data_len=strlen(send_txt); \ 0000034C 0400A0E1 MOV R0,R4 \ 00000350 1B0000EF SWI +27 \ 00000354 B600CBE1 STRH R0,[R11, #+6] 4463 strcpy(p->data,send_txt); \ 00000358 0410A0E1 MOV R1,R4 \ 0000035C 08008BE2 ADD R0,R11,#+8 \ 00000360 1A0000EF SWI +26 4464 if(show_send_info) \ 00000364 440196E5 LDR R0,[R6, #+324] \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 1C0296E5 LDR R0,[R6, #+540] \ 00000370 010080E2 ADD R0,R0,#+1 \ 00000374 1C0286E5 STR R0,[R6, #+540] \ 00000378 ED00000A BEQ ??CheckComand_7 4465 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000037C 0110A0E3 MOV R1,#+1 \ 00000380 02002DE9 PUSH {R1} \ 00000384 000009E0 AND R0,R9,R0 \ 00000388 01002DE9 PUSH {R0} \ 0000038C 2F3087E2 ADD R3,R7,#+47 \ 00000390 F800A0E3 MOV R0,#+248 \ 00000394 400E80E3 ORR R0,R0,#0x400 \ 00000398 072080E0 ADD R2,R0,R7 \ 0000039C E10000EA B ??CheckComand_8 4466 else 4467 SENDMSGCOUNT++; 4468 SUBPROC((void *)SendAnswer,0,p); 4469 mfree(send_txt); 4470 return; 4471 } 4472 4473 //----------------------------------------------------------------------- 4474 4475 if(!strcmp(txt, "GET_MOD_INFO") || !strcmp(txt, "__MOD")) \ ??CheckComand_10: \ 000003A0 B800A0E3 MOV R0,#+184 \ 000003A4 400E80E3 ORR R0,R0,#0x400 \ 000003A8 071080E0 ADD R1,R0,R7 \ 000003AC 0400A0E1 MOV R0,R4 \ 000003B0 190000EF SWI +25 \ 000003B4 000050E3 CMP R0,#+0 \ 000003B8 0400000A BEQ ??CheckComand_11 \ 000003BC 4B1E87E2 ADD R1,R7,#+1200 \ 000003C0 0400A0E1 MOV R0,R4 \ 000003C4 190000EF SWI +25 \ 000003C8 000050E3 CMP R0,#+0 \ 000003CC 3600001A BNE ??CheckComand_12 \ ??CheckComand_11: \ 000003D0 5C0386E5 STR R0,[R6, #+860] 4476 { 4477 comanda=0; 4478 TPKT *p; 4479 char *send_txt=malloc(256); \ 000003D4 400FA0E3 MOV R0,#+256 \ 000003D8 140000EF SWI +20 \ 000003DC 0040A0E1 MOV R4,R0 4480 // sprintf(I_UIN, "uin%d", t->uin); 4481 strcpy(I_UIN, t->name); \ 000003E0 0810A0E3 MOV R1,#+8 \ 000003E4 481D81E3 ORR R1,R1,#0x1200 \ 000003E8 061081E0 ADD R1,R1,R6 \ 000003EC 04108DE5 STR R1,[SP, #+4] \ 000003F0 04009DE5 LDR R0,[SP, #+4] \ 000003F4 141085E2 ADD R1,R5,#+20 \ 000003F8 1A0000EF SWI +26 4482 if(strstr(ignor_list,I_UIN)==0) \ 000003FC 04109DE5 LDR R1,[SP, #+4] \ 00000400 7400A0E3 MOV R0,#+116 \ 00000404 500E80E3 ORR R0,R0,#0x500 \ 00000408 060080E0 ADD R0,R0,R6 \ 0000040C 180100EF SWI +280 \ 00000410 000050E3 CMP R0,#+0 4483 { 4484 strcpy(send_txt, mod_info); \ 00000414 0B10A001 MOVEQ R1,R11 4485 } 4486 else 4487 strcpy(send_txt, "***Access denied***"); \ 00000418 C800A013 MOVNE R0,#+200 \ 0000041C 400E8013 ORRNE R0,R0,#0x400 \ 00000420 07108010 ADDNE R1,R0,R7 \ 00000424 0400A0E1 MOV R0,R4 \ 00000428 1A0000EF SWI +26 4488 4489 strcpy(send_txt, mod_info); \ 0000042C 0B10A0E1 MOV R1,R11 \ 00000430 0400A0E1 MOV R0,R4 \ 00000434 1A0000EF SWI +26 4490 4491 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 00000438 0400A0E1 MOV R0,R4 \ 0000043C 1B0000EF SWI +27 \ 00000440 090080E2 ADD R0,R0,#+9 \ 00000444 140000EF SWI +20 \ 00000448 00B0A0E1 MOV R11,R0 4492 p->pkt.uin=t->uin; \ 0000044C 0C0095E5 LDR R0,[R5, #+12] \ 00000450 00008BE5 STR R0,[R11, #+0] 4493 p->pkt.type=T_SENDMSG; \ 00000454 B4A0CBE1 STRH R10,[R11, #+4] 4494 p->pkt.data_len=strlen(send_txt); \ 00000458 0400A0E1 MOV R0,R4 \ 0000045C 1B0000EF SWI +27 \ 00000460 B600CBE1 STRH R0,[R11, #+6] 4495 strcpy(p->data,send_txt); \ 00000464 0410A0E1 MOV R1,R4 \ 00000468 08008BE2 ADD R0,R11,#+8 \ 0000046C 1A0000EF SWI +26 4496 #ifdef EVILFOX 4497 SENDMSGCOUNT++; 4498 #else 4499 if(show_send_info) \ 00000470 440196E5 LDR R0,[R6, #+324] \ 00000474 000050E3 CMP R0,#+0 \ 00000478 1C0296E5 LDR R0,[R6, #+540] \ 0000047C 010080E2 ADD R0,R0,#+1 \ 00000480 1C0286E5 STR R0,[R6, #+540] \ 00000484 AA00000A BEQ ??CheckComand_7 4500 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000488 0110A0E3 MOV R1,#+1 \ 0000048C 02002DE9 PUSH {R1} \ 00000490 000009E0 AND R0,R9,R0 \ 00000494 01002DE9 PUSH {R0} \ 00000498 2F3087E2 ADD R3,R7,#+47 \ 0000049C 5800A0E3 MOV R0,#+88 \ 000004A0 4C0D80E3 ORR R0,R0,#0x1300 \ 000004A4 062080E0 ADD R2,R0,R6 \ 000004A8 9E0000EA B ??CheckComand_8 4501 else 4502 SENDMSGCOUNT++; 4503 #endif 4504 SUBPROC((void *)SendAnswer,0,p); 4505 mfree(send_txt); 4506 return; 4507 } 4508 4509 if(!strcmp(txt, "GET_BAT_INFO") || !strcmp(txt, "__BAT")) \ ??CheckComand_12: \ 000004AC 8400A0E3 MOV R0,#+132 \ 000004B0 400E80E3 ORR R0,R0,#0x400 \ 000004B4 071080E0 ADD R1,R0,R7 \ 000004B8 0400A0E1 MOV R0,R4 \ 000004BC 190000EF SWI +25 \ 000004C0 000050E3 CMP R0,#+0 \ 000004C4 0600000A BEQ ??CheckComand_13 \ 000004C8 7C00A0E3 MOV R0,#+124 \ 000004CC 400E80E3 ORR R0,R0,#0x400 \ 000004D0 071080E0 ADD R1,R0,R7 \ 000004D4 0400A0E1 MOV R0,R4 \ 000004D8 190000EF SWI +25 \ 000004DC 000050E3 CMP R0,#+0 \ 000004E0 2400001A BNE ??CheckComand_14 \ ??CheckComand_13: \ 000004E4 5C0386E5 STR R0,[R6, #+860] 4510 { 4511 comanda=0; 4512 TPKT *p; 4513 int bat; 4514 bat=*RamCap(); \ 000004E8 C88000EF SWI +32968 \ 000004EC B0B0D0E1 LDRH R11,[R0, #+0] 4515 char *send_txt=malloc(64); \ 000004F0 4000A0E3 MOV R0,#+64 \ 000004F4 140000EF SWI +20 \ 000004F8 0040A0E1 MOV R4,R0 4516 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 000004FC 0B20A0E1 MOV R2,R11 \ 00000500 9400A0E3 MOV R0,#+148 \ 00000504 400E80E3 ORR R0,R0,#0x400 \ 00000508 071080E0 ADD R1,R0,R7 \ 0000050C 0400A0E1 MOV R0,R4 \ 00000510 160000EF SWI +22 4517 p=malloc(sizeof(PKT)+28+1); \ 00000514 2500A0E3 MOV R0,#+37 \ 00000518 140000EF SWI +20 \ 0000051C 00B0A0E1 MOV R11,R0 4518 p->pkt.uin=t->uin; \ 00000520 0C0095E5 LDR R0,[R5, #+12] \ 00000524 00008BE5 STR R0,[R11, #+0] 4519 p->pkt.type=T_SENDMSG; \ 00000528 B4A0CBE1 STRH R10,[R11, #+4] 4520 p->pkt.data_len=strlen(send_txt); \ 0000052C 0400A0E1 MOV R0,R4 \ 00000530 1B0000EF SWI +27 \ 00000534 B600CBE1 STRH R0,[R11, #+6] 4521 strcpy(p->data,send_txt); \ 00000538 0410A0E1 MOV R1,R4 \ 0000053C 08008BE2 ADD R0,R11,#+8 \ 00000540 1A0000EF SWI +26 4522 #ifdef EVILFOX 4523 SENDMSGCOUNT++; 4524 #else 4525 if(show_send_info) \ 00000544 440196E5 LDR R0,[R6, #+324] \ 00000548 000050E3 CMP R0,#+0 \ 0000054C 1C0296E5 LDR R0,[R6, #+540] \ 00000550 010080E2 ADD R0,R0,#+1 \ 00000554 1C0286E5 STR R0,[R6, #+540] \ 00000558 7500000A BEQ ??CheckComand_7 4526 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000055C 0110A0E3 MOV R1,#+1 \ 00000560 02002DE9 PUSH {R1} \ 00000564 000009E0 AND R0,R9,R0 \ 00000568 01002DE9 PUSH {R0} \ 0000056C 2F3087E2 ADD R3,R7,#+47 \ 00000570 4D2D86E2 ADD R2,R6,#+4928 \ 00000574 6B0000EA B ??CheckComand_8 4527 else 4528 SENDMSGCOUNT++; 4529 #endif 4530 SUBPROC((void *)SendAnswer,0,p); 4531 mfree(send_txt); 4532 return; 4533 } 4534 4535 if(away_m==1 || t->isautomsg) \ ??CheckComand_14: \ 00000578 340296E5 LDR R0,[R6, #+564] \ 0000057C 010050E3 CMP R0,#+1 \ 00000580 0300000A BEQ ??CheckComand_15 \ 00000584 600095E5 LDR R0,[R5, #+96] \ 00000588 000050E3 CMP R0,#+0 \ 0000058C 3200000A BEQ ??CheckComand_16 4536 { 4537 comanda=1; \ 00000590 0100A0E3 MOV R0,#+1 \ ??CheckComand_15: \ 00000594 5C0386E5 STR R0,[R6, #+860] \ 00000598 6800A0E3 MOV R0,#+104 \ 0000059C D00E80E3 ORR R0,R0,#0xD00 \ 000005A0 060080E0 ADD R0,R0,R6 \ 000005A4 01002DE9 PUSH {R0} \ 000005A8 461E87E2 ADD R1,R7,#+1120 \ 000005AC EB0F86E2 ADD R0,R6,#+940 \ 000005B0 01002DE9 PUSH {R0} \ 000005B4 20319DE5 LDR R3,[SP, #+288] \ 000005B8 5C00A0E3 MOV R0,#+92 \ 000005BC 500E80E3 ORR R0,R0,#0x500 \ 000005C0 062080E0 ADD R2,R0,R6 \ 000005C4 C60E86E2 ADD R0,R6,#+3168 4538 TPKT *p; 4539 // sprintf(hah,"online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 4540 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, ddd, awayMsg, away_msg_time); \ 000005C8 160000EF SWI +22 4541 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 000005CC C60E86E2 ADD R0,R6,#+3168 \ 000005D0 1B0000EF SWI +27 \ 000005D4 090080E2 ADD R0,R0,#+9 \ 000005D8 140000EF SWI +20 \ 000005DC 00B0A0E1 MOV R11,R0 4542 p->pkt.uin=t->uin; \ 000005E0 0C0095E5 LDR R0,[R5, #+12] \ 000005E4 00008BE5 STR R0,[R11, #+0] 4543 p->pkt.type=T_SENDMSG; \ 000005E8 B4A0CBE1 STRH R10,[R11, #+4] 4544 p->pkt.data_len=strlen(away_msg); \ 000005EC C60E86E2 ADD R0,R6,#+3168 \ 000005F0 1B0000EF SWI +27 \ 000005F4 B600CBE1 STRH R0,[R11, #+6] 4545 strcpy(p->data,away_msg); \ 000005F8 C61E86E2 ADD R1,R6,#+3168 \ 000005FC 08008BE2 ADD R0,R11,#+8 \ 00000600 1A0000EF SWI +26 4546 if(show_send_info) \ 00000604 440196E5 LDR R0,[R6, #+324] \ 00000608 08D08DE2 ADD SP,SP,#+8 \ 0000060C 000050E3 CMP R0,#+0 \ 00000610 1C0296E5 LDR R0,[R6, #+540] \ 00000614 010080E2 ADD R0,R0,#+1 \ 00000618 1C0286E5 STR R0,[R6, #+540] \ 0000061C 0A00000A BEQ ??CheckComand_17 4547 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000620 0110A0E3 MOV R1,#+1 \ 00000624 02002DE9 PUSH {R1} \ 00000628 000009E0 AND R0,R9,R0 \ 0000062C 01002DE9 PUSH {R0} \ 00000630 2F3087E2 ADD R3,R7,#+47 \ 00000634 6C00A0E3 MOV R0,#+108 \ 00000638 4C0D80E3 ORR R0,R0,#0x1300 \ 0000063C 062080E0 ADD R2,R0,R6 \ 00000640 0500A0E1 MOV R0,R5 \ 00000644 ........ BL AddStringToLog \ 00000648 08D08DE2 ADD SP,SP,#+8 4548 else 4549 SENDMSGCOUNT++; 4550 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_17: \ 0000064C 0B20A0E1 MOV R2,R11 \ 00000650 0010A0E3 MOV R1,#+0 \ 00000654 0800A0E1 MOV R0,R8 \ 00000658 710100EF SWI +369 4551 } 4552 4553 4554 //---------------------------------------------------------------------------// 4555 4556 4557 if(!strcmp(txt, "GET_URL_INFO") || !strcmp(txt, "__URL"))// by kluchnik 26.03.08 \ ??CheckComand_16: \ 0000065C A21F87E2 ADD R1,R7,#+648 \ 00000660 0400A0E1 MOV R0,R4 \ 00000664 190000EF SWI +25 \ 00000668 000050E3 CMP R0,#+0 \ 0000066C 0400000A BEQ ??CheckComand_18 \ 00000670 A01F87E2 ADD R1,R7,#+640 \ 00000674 0400A0E1 MOV R0,R4 \ 00000678 190000EF SWI +25 \ 0000067C 000050E3 CMP R0,#+0 \ 00000680 3100001A BNE ??CheckComand_19 \ ??CheckComand_18: \ 00000684 5C0386E5 STR R0,[R6, #+860] 4558 { 4559 comanda=0; 4560 TPKT *p; 4561 4562 char *send_txt=malloc(786); \ 00000688 C40F8AE3 ORR R0,R10,#0x310 \ 0000068C 140000EF SWI +20 \ 00000690 0040A0E1 MOV R4,R0 4563 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 4564 "http://windes.narod.ru/files/naticq_mod2058s.zip (sgold) (40kb)\n" 4565 "http://windes.narod.ru/files/naticq_mod2058n.zip (NewSGold) (40kb)\n" 4566 "http://windes.narod.ru/files/naticq_mod2058e.zip (elka) (40kb)\n" 4567 "files: http://windes.narod.ru/files/naticqmod_allfiles_w.zip (432kb)\n" 4568 "Status on iconbar http://windes.narod.ru/files/img16x16.zip (74kb)\n" 4569 "Так же все будет тут http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 00000694 AC00A0E3 MOV R0,#+172 \ 00000698 500E80E3 ORR R0,R0,#0x500 \ 0000069C 070080E0 ADD R0,R0,R7 \ 000006A0 01002DE9 PUSH {R0} \ 000006A4 AB2F87E2 ADD R2,R7,#+684 \ 000006A8 B800A0E3 MOV R0,#+184 \ 000006AC 500E80E3 ORR R0,R0,#0x500 \ 000006B0 073080E0 ADD R3,R0,R7 \ 000006B4 5F0F40E2 SUB R0,R0,#+380 \ 000006B8 071080E0 ADD R1,R0,R7 \ 000006BC 0400A0E1 MOV R0,R4 \ 000006C0 160000EF SWI +22 4570 4571 p=malloc(sizeof(PKT)+786); \ 000006C4 C60F8AE3 ORR R0,R10,#0x318 \ 000006C8 140000EF SWI +20 \ 000006CC 00B0A0E1 MOV R11,R0 4572 p->pkt.uin=t->uin; \ 000006D0 0C0095E5 LDR R0,[R5, #+12] \ 000006D4 00008BE5 STR R0,[R11, #+0] 4573 p->pkt.type=T_SENDMSG; \ 000006D8 B4A0CBE1 STRH R10,[R11, #+4] 4574 p->pkt.data_len=strlen(send_txt); \ 000006DC 0400A0E1 MOV R0,R4 \ 000006E0 1B0000EF SWI +27 \ 000006E4 B600CBE1 STRH R0,[R11, #+6] 4575 strcpy(p->data,send_txt); \ 000006E8 0410A0E1 MOV R1,R4 \ 000006EC 08008BE2 ADD R0,R11,#+8 \ 000006F0 1A0000EF SWI +26 4576 if(show_send_info) \ 000006F4 440196E5 LDR R0,[R6, #+324] \ 000006F8 04D08DE2 ADD SP,SP,#+4 \ 000006FC 000050E3 CMP R0,#+0 \ 00000700 1C0296E5 LDR R0,[R6, #+540] \ 00000704 010080E2 ADD R0,R0,#+1 \ 00000708 1C0286E5 STR R0,[R6, #+540] \ 0000070C 0800000A BEQ ??CheckComand_7 4577 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000710 0110A0E3 MOV R1,#+1 \ 00000714 02002DE9 PUSH {R1} \ 00000718 000009E0 AND R0,R9,R0 \ 0000071C 01002DE9 PUSH {R0} \ 00000720 2F3087E2 ADD R3,R7,#+47 \ 00000724 A62F87E2 ADD R2,R7,#+664 \ ??CheckComand_8: \ 00000728 0500A0E1 MOV R0,R5 \ 0000072C ........ BL AddStringToLog \ 00000730 08D08DE2 ADD SP,SP,#+8 4578 else 4579 SENDMSGCOUNT++; 4580 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_7: \ 00000734 0B20A0E1 MOV R2,R11 \ 00000738 0010A0E3 MOV R1,#+0 \ 0000073C 0800A0E1 MOV R0,R8 \ 00000740 710100EF SWI +369 4581 mfree(send_txt); \ 00000744 0400A0E1 MOV R0,R4 \ 00000748 150000EF SWI +21 4582 return; \ ??CheckComand_19: \ 0000074C 47DF8DE2 ADD SP,SP,#+284 ;; stack cleaning \ 00000750 F08FBDE8 POP {R4-R11,PC} ;; return 4583 } 4584 4585 // if((t->uin==AUTOBOT_UIN)&&(autobot)) 4586 #ifdef kluchnik // не доступно для всех,потому что имхо,будет еще большая перегрузка серверов!!!а оно нам надо? 4587 if(t->isautobot) 4588 { 4589 TPKT *p; 4590 int i=LoadBotMessage(t->uin); 4591 if(i==0) return;//если нет никаких файлов то просто возвращаемся 4592 char *pp=bot_lines[t->bot_msg]; 4593 t->bot_msg++; 4594 if(t->bot_msg==i) 4595 t->bot_msg=0; 4596 p=malloc(sizeof(PKT)+strlen(pp)+1); 4597 p->pkt.uin=t->uin; 4598 p->pkt.type=T_SENDMSG; 4599 p->pkt.data_len=strlen(pp); 4600 strcpy(p->data,pp); 4601 AddStringToLog(t,0x01,pp,"Autobot",(++SENDMSGCOUNT)&0x7FFF,1); 4602 SUBPROC((void *)SendAnswer,0,p); 4603 } 4604 #endif 4605 4606 } 4607 //===========================komand list end 4608 \ In segment DATA_Z, align 4, align-sorted 4609 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 4610 char show_nick[32]; 4611 int INC_show; 4612 4613 const char color[4]={255,255,255,100}; 4614 \ In segment CODE, align 4, keep-with-next 4615 void show_pp_sender() 4616 { \ show_pp_sender: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 4617 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable83 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 600394E5 LDR R0,[R4, #+864] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F383BDB8 POPLT {R0,R1,R4-R9,PC} 4618 { 4619 WSHDR *ws=AllocWS(256); 4620 ascii2ws(ws,show_nick); 4621 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 4622 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 8C00A0E3 MOV R0,#+140 \ 0000002C 500D80E3 ORR R0,R0,#0x1400 \ 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] 4623 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 4624 { 4625 extern void DrawScreenShot(); 4626 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 4627 } 4628 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 580294E5 LDR R0,[R4, #+600] \ 00000090 C50100EF SWI +453 \ 00000094 581294E5 LDR R1,[R4, #+600] \ 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 4629 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 580294E5 LDR R0,[R4, #+600] \ 000000D4 C50100EF SWI +453 \ 000000D8 581294E5 LDR R1,[R4, #+600] \ 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 581294E5 LDR R1,[R4, #+600] \ 0000010C 02002DE9 PUSH {R1} \ 00000110 011087E2 ADD R1,R7,#+1 \ 00000114 02002DE9 PUSH {R1} \ 00000118 0210A0E1 MOV R1,R2 \ 0000011C 4C0100EF SWI +332 4630 4631 FreeWS(ws); \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 290100EF SWI +297 4632 INC_show--; \ 00000128 600394E5 LDR R0,[R4, #+864] 4633 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 600384E5 STR R0,[R4, #+864] \ 00000138 0A10A0E3 MOV R1,#+10 \ 0000013C 0400A0E3 MOV R0,#+4 \ 00000140 4C0D80E3 ORR R0,R0,#0x1300 \ 00000144 040080E0 ADD R0,R0,R4 \ 00000148 4D0000EF SWI +77 \ 0000014C 20D08DE2 ADD SP,SP,#+32 4634 } 4635 } \ 00000150 F383BDE8 POP {R0,R1,R4-R9,PC} ;; return \ ??show_pp_sender_0: \ 00000154 ........ DC32 `?` \ 00000158 ........ DC32 show_pp_sender 4636 4637 4638 \ In segment CODE, align 4, keep-with-next 4639 void Get_Online_total() 4640 { 4641 CLIST *t; 4642 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable83 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 CC1280E5 STR R1,[R0, #+716] 4643 kopa_kontaktu=0; \ 0000000C D01280E5 STR R1,[R0, #+720] 4644 t=(CLIST *)(&cltop); \ 00000010 AD1F80E2 ADD R1,R0,#+692 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 4645 while(t=(CLIST *)(t->next)) 4646 { 4647 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 4648 { 4649 kopa_online++; \ 0000002C CC2290E5 LDR R2,[R0, #+716] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 CC2280E5 STR R2,[R0, #+716] 4650 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 D0229015 LDRNE R2,[R0, #+720] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 D0228015 STRNE R2,[R0, #+720] 4651 } 4652 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 4653 } \ 00000058 1EFF2FE1 BX LR ;; return 4654 4655 4656 //-------------------------------------------------------------------------------------------// 4657 4658 \ In segment CODE, align 4, keep-with-next 4659 void SetIndividStatus()//set to all contact to default vibra and sound by kluchnik 04.04.08 4660 { 4661 CLIST *t; 4662 t=(CLIST *)(&cltop); \ SetIndividStatus: \ 00000000 ........ LDR R0,??DataTable84 ;; S_ICONS + 692 \ 00000004 040000EA B ??SetIndividStatus_0 4663 while(t=(CLIST *)(t->next)) 4664 { 4665 if (!t->isgroup) \ ??SetIndividStatus_1: \ 00000008 081090E5 LDR R1,[R0, #+8] \ 0000000C 000051E3 CMP R1,#+0 4666 { 4667 t->isvibra=1; \ 00000010 0110A003 MOVEQ R1,#+1 \ 00000014 58108005 STREQ R1,[R0, #+88] 4668 t->issound=1; \ 00000018 5C108005 STREQ R1,[R0, #+92] 4669 } 4670 } \ ??SetIndividStatus_0: \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 F7FFFF1A BNE ??SetIndividStatus_1 4671 } \ 00000028 1EFF2FE1 BX LR ;; return 4672 4673 4674 //-------------------------------------------------------------------------------------------// 4675 4676 \ In segment CODE, align 4, keep-with-next 4677 ProcessPacket(TPKT *p) 4678 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 50DF4DE2 SUB SP,SP,#+320 4679 CLIST *t; 4680 LOGQ *q; 4681 char s[256]; 4682 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable91 ;; `?pkt.uin) \ ??ProcessPacket_3: \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 1800000A BEQ ??ProcessPacket_4 4690 { 4691 if ((t=FindContactByUin(p->pkt.uin))) \ 00000090 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000094 0090B0E1 MOVS R9,R0 \ 00000098 0E00000A BEQ ??ProcessPacket_5 4692 { 4693 // t->state=0xFFFF; 4694 if (!t->local) strncpy(t->name,p->data,63); \ 0000009C A00099E5 LDR R0,[R9, #+160] \ 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 4695 t->group=GROUP_CACHE; \ ??ProcessPacket_6: \ 000000B8 B80297E5 LDR R0,[R7, #+696] \ 000000BC 100089E5 STR R0,[R9, #+16] 4696 ChangeContactPos(t); \ ??ProcessPacket_7: \ 000000C0 0900A0E1 MOV R0,R9 \ 000000C4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4697 RecountMenu(t,1); \ 000000C8 0110A0E3 MOV R1,#+1 \ 000000CC 0900A0E1 MOV R0,R9 \ ??ProcessPacket_8: \ 000000D0 ........ BL RecountMenu \ 000000D4 4E0200EA B ??ProcessPacket_1 4698 } 4699 else 4700 { 4701 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_5: \ 000000D8 B82297E5 LDR R2,[R7, #+696] \ 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 4702 } 4703 } 4704 else 4705 { 4706 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000F4 280197E5 LDR R0,[R7, #+296] \ 000000F8 000050E3 CMP R0,#+0 \ 000000FC 0100000A BEQ ??ProcessPacket_9 4707 { 4708 vibra_count=1; \ 00000100 7C6287E5 STR R6,[R7, #+636] 4709 start_vibra(); \ 00000104 ........ BL start_vibra 4710 } 4711 GROUP_CACHE=0; \ ??ProcessPacket_9: \ 00000108 B88287E5 STR R8,[R7, #+696] 4712 ask_my_info(); 4713 if (contactlist_menu_id) \ 0000010C BC0297E5 LDR R0,[R7, #+700] \ 00000110 000050E3 CMP R0,#+0 \ 00000114 0200000A BEQ ??ProcessPacket_10 4714 { 4715 RecountMenu(NULL,1); \ 00000118 0110A0E3 MOV R1,#+1 \ 0000011C 0800A0E1 MOV R0,R8 \ ??ProcessPacket_11: \ 00000120 EAFFFFEA B ??ProcessPacket_8 4716 } 4717 else 4718 { 4719 create_contactlist_menu(); \ ??ProcessPacket_10: \ 00000124 ........ BL create_contactlist_menu 4720 SetIndividStatus(); \ 00000128 ........ BL SetIndividStatus \ 0000012C 380200EA B ??ProcessPacket_1 4721 // if(!dontLogOnConnect && isLogOnline) dontLogOnConnect=1; 4722 } 4723 } 4724 break; 4725 case T_GROUPID: 4726 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_12: \ 00000130 B80287E5 STR R0,[R7, #+696] \ 00000134 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000138 0090B0E1 MOVS R9,R0 \ 0000013C 0400000A BEQ ??ProcessPacket_13 4727 { 4728 strncpy(t->name,p->data,63); \ 00000140 3F20A0E3 MOV R2,#+63 \ 00000144 081084E2 ADD R1,R4,#+8 \ 00000148 140089E2 ADD R0,R9,#+20 \ 0000014C 160100EF SWI +278 4729 ChangeContactPos(t); \ 00000150 DAFFFFEA B ??ProcessPacket_7 4730 RecountMenu(t,1); 4731 } 4732 else 4733 { 4734 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_13: \ 00000154 000094E5 LDR R0,[R4, #+0] \ 00000158 081084E2 ADD R1,R4,#+8 \ 0000015C ........ _BLF AddGroup,??AddGroup??rA \ 00000160 0110A0E3 MOV R1,#+1 \ 00000164 D9FFFFEA B ??ProcessPacket_8 4735 } 4736 break; 4737 case T_GROUPFOLLOW: 4738 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_14: \ 00000168 B80287E5 STR R0,[R7, #+696] \ 0000016C 280200EA B ??ProcessPacket_1 4739 break; 4740 case T_STATUSCHANGE: 4741 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_15: \ 00000170 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000174 0090B0E1 MOVS R9,R0 4742 if (t) \ 00000178 D400000A BEQ ??ProcessPacket_16 4743 { 4744 int i=t->state; \ 0000017C B415D9E1 LDRH R1,[R9, #+84] 4745 CLIST *oldt=NULL; \ 00000180 00A0A0E3 MOV R10,#+0 \ 00000184 10108DE5 STR R1,[SP, #+16] \ 00000188 0A00D4E5 LDRB R0,[R4, #+10] \ 0000018C B615D9E1 LDRH R1,[R9, #+86] \ 00000190 000051E1 CMP R1,R0 \ 00000194 1B00000A BEQ ??ProcessPacket_17 4746 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 4747 { 4748 t->xstate=p->data[2]; \ 00000198 B605C9E1 STRH R0,[R9, #+86] 4749 FreeXText(t); \ 0000019C 0900A0E1 MOV R0,R9 \ 000001A0 ........ _BLF FreeXText,??FreeXText??rA 4750 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001A4 B605D9E1 LDRH R0,[R9, #+86] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 9C019715 LDRNE R0,[R7, #+412] \ 000001B0 00005013 CMPNE R0,#+0 \ 000001B4 1200000A BEQ ??ProcessPacket_18 4751 { 4752 t->req_xtext=1; \ 000001B8 9C6089E5 STR R6,[R9, #+156] 4753 if (edchat_id) // Если открыт чат \ 000001BC C00297E5 LDR R0,[R7, #+704] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 0F00000A BEQ ??ProcessPacket_17 4754 { 4755 void *data=FindGUIbyId(edchat_id,NULL); \ 000001C8 C00297E5 LDR R0,[R7, #+704] \ 000001CC 0010A0E3 MOV R1,#+0 \ 000001D0 090200EF SWI +521 4756 if (data) \ 000001D4 000050E3 CMP R0,#+0 \ 000001D8 0A00000A BEQ ??ProcessPacket_17 4757 { 4758 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001DC DF0100EF SWI +479 4759 if (ed_struct) \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 0700000A BEQ ??ProcessPacket_17 4760 { 4761 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001E8 000090E5 LDR R0,[R0, #+0] \ 000001EC 090050E1 CMP R0,R9 \ 000001F0 0400001A BNE ??ProcessPacket_17 4762 { 4763 t->req_xtext=0; \ 000001F4 9C8089E5 STR R8,[R9, #+156] 4764 RequestXText(t->uin); \ 000001F8 0C0099E5 LDR R0,[R9, #+12] \ 000001FC ........ BL RequestXText \ 00000200 000000EA B ??ProcessPacket_17 4765 } 4766 } 4767 } 4768 } 4769 } 4770 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 4771 { 4772 t->req_xtext=0; \ ??ProcessPacket_18: \ 00000204 9C8089E5 STR R8,[R9, #+156] 4773 } 4774 } 4775 if (contactlist_menu_id) \ ??ProcessPacket_17: \ 00000208 BC0297E5 LDR R0,[R7, #+700] \ 0000020C 000050E3 CMP R0,#+0 \ 00000210 0500000A BEQ ??ProcessPacket_19 4776 { 4777 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000214 BC0297E5 LDR R0,[R7, #+700] \ 00000218 0010A0E3 MOV R1,#+0 \ 0000021C 090200EF SWI +521 \ 00000220 8F0100EF SWI +399 \ 00000224 ........ _BLF FindContactByN,??FindContactByN??rA \ 00000228 00A0A0E1 MOV R10,R0 4778 } 4779 if(t->state==65535) t->change=1; \ ??ProcessPacket_19: \ 0000022C B405D9E1 LDRH R0,[R9, #+84] \ 00000230 FFB0A0E3 MOV R11,#+255 \ 00000234 FFBC8BE3 ORR R11,R11,#0xFF00 \ 00000238 0B0050E1 CMP R0,R11 \ 0000023C 6C608905 STREQ R6,[R9, #+108] 4780 t->state=*((unsigned short *)(p->data)); \ 00000240 B800D4E1 LDRH R0,[R4, #+8] \ 00000244 B405C9E1 STRH R0,[R9, #+84] 4781 if((t->state!=65535)&&(t->change==1)) \ 00000248 0B0050E1 CMP R0,R11 \ 0000024C 0400000A BEQ ??ProcessPacket_20 \ 00000250 6C0099E5 LDR R0,[R9, #+108] \ 00000254 010050E3 CMP R0,#+1 4782 { 4783 t->just_now=2; \ 00000258 0200A003 MOVEQ R0,#+2 \ 0000025C 68008905 STREQ R0,[R9, #+104] 4784 t->change=0; \ 00000260 6C808905 STREQ R8,[R9, #+108] 4785 } 4786 LogStatusChange(t); \ ??ProcessPacket_20: \ 00000264 0900A0E1 MOV R0,R9 \ 00000268 ........ _BLF LogStatusChange,??LogStatusChange??rA 4787 ChangeContactPos(t); \ 0000026C 0900A0E1 MOV R0,R9 \ 00000270 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4788 RecountMenu(oldt,1); \ 00000274 0110A0E3 MOV R1,#+1 \ 00000278 0A00A0E1 MOV R0,R10 \ 0000027C ........ BL RecountMenu 4789 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ 00000280 B405D9E1 LDRH R0,[R9, #+84] \ 00000284 0B0050E1 CMP R0,R11 \ 00000288 5600000A BEQ ??ProcessPacket_21 \ 0000028C 10109DE5 LDR R1,[SP, #+16] \ 00000290 0B0051E1 CMP R1,R11 \ 00000294 5300001A BNE ??ProcessPacket_21 4790 { 4791 //#ifdef kluchnik 4792 INC_show2=20; \ 00000298 1400A0E3 MOV R0,#+20 \ 0000029C 540287E5 STR R0,[R7, #+596] 4793 sprintf(onContact,">%s<",t->name); \ 000002A0 142089E2 ADD R2,R9,#+20 \ 000002A4 9E1F85E2 ADD R1,R5,#+632 \ 000002A8 8800A0E3 MOV R0,#+136 \ 000002AC E00E80E3 ORR R0,R0,#0xE00 \ 000002B0 070080E0 ADD R0,R0,R7 \ 000002B4 160000EF SWI +22 4794 show_on_contact(); \ 000002B8 ........ BL show_on_contact 4795 if(!t->isactive)//на всякий случай \ 000002BC 8C0099E5 LDR R0,[R9, #+140] \ 000002C0 000050E3 CMP R0,#+0 4796 { 4797 t->isvibra=1; \ 000002C4 58608905 STREQ R6,[R9, #+88] 4798 t->issound=1; \ 000002C8 5C608905 STREQ R6,[R9, #+92] 4799 } 4800 //#endif 4801 if(isLogOnline) //by kluchnik 26.03.08 \ 000002CC C00097E5 LDR R0,[R7, #+192] \ 000002D0 000050E3 CMP R0,#+0 \ 000002D4 2900000A BEQ ??ProcessPacket_22 4802 { 4803 FreeXText2(t); \ 000002D8 0900A0E1 MOV R0,R9 \ 000002DC ........ BL FreeXText2 4804 TTime time; 4805 TDate date; 4806 GetDateTime(&date,&time); \ 000002E0 0D10A0E1 MOV R1,SP \ 000002E4 08008DE2 ADD R0,SP,#+8 \ 000002E8 B40000EF SWI +180 4807 char *txt=malloc(64); \ 000002EC 4000A0E3 MOV R0,#+64 \ 000002F0 140000EF SWI +20 \ 000002F4 0060A0E1 MOV R6,R0 4808 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); \ 000002F8 0D00DDE5 LDRB R0,[SP, #+13] \ 000002FC 951F85E2 ADD R1,R5,#+596 \ 00000300 01002DE9 PUSH {R0} \ 00000304 1000DDE5 LDRB R0,[SP, #+16] \ 00000308 01002DE9 PUSH {R0} \ 0000030C 0A00DDE5 LDRB R0,[SP, #+10] \ 00000310 01002DE9 PUSH {R0} \ 00000314 0C20DDE5 LDRB R2,[SP, #+12] \ 00000318 0D30DDE5 LDRB R3,[SP, #+13] \ 0000031C 0600A0E1 MOV R0,R6 \ 00000320 160000EF SWI +22 4809 4810 t->xtext2=malloc(64); \ 00000324 4000A0E3 MOV R0,#+64 \ 00000328 140000EF SWI +20 \ 0000032C 980089E5 STR R0,[R9, #+152] 4811 snprintf(t->xtext2,64,txt); \ 00000330 0620A0E1 MOV R2,R6 \ 00000334 4010A0E3 MOV R1,#+64 \ 00000338 1B0100EF SWI +283 4812 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); \ 0000033C 0000A0E3 MOV R0,#+0 \ 00000340 01002DE9 PUSH {R0} \ 00000344 773E85E2 ADD R3,R5,#+1904 \ 00000348 0620A0E1 MOV R2,R6 \ 0000034C 0310A0E3 MOV R1,#+3 \ 00000350 0000E0E1 MVN R0,R0 \ 00000354 01002DE9 PUSH {R0} \ 00000358 0900A0E1 MOV R0,R9 \ 0000035C ........ BL AddStringToLog 4813 ReqAddMsgToChat(t); \ 00000360 0900A0E1 MOV R0,R9 \ 00000364 ........ BL ReqAddMsgToChat 4814 RecountMenu(NULL, 0); \ 00000368 0810A0E1 MOV R1,R8 \ 0000036C 0100A0E1 MOV R0,R1 \ 00000370 ........ BL RecountMenu 4815 mfree(txt); \ 00000374 0600A0E1 MOV R0,R6 \ 00000378 150000EF SWI +21 \ 0000037C 14D08DE2 ADD SP,SP,#+20 4816 } 4817 if(!extended_sounds) \ ??ProcessPacket_22: \ 00000380 D00197E5 LDR R0,[R7, #+464] \ 00000384 716EA0E3 MOV R6,#+1808 \ 00000388 000050E3 CMP R0,#+0 \ 0000038C 0200001A BNE ??ProcessPacket_23 4818 { 4819 Play(sndGlobal); \ 00000390 070086E0 ADD R0,R6,R7 \ ??ProcessPacket_24: \ 00000394 ........ BL Play \ 00000398 480000EA B ??ProcessPacket_25 4820 } 4821 else 4822 { 4823 FSTATS stat; 4824 int fsize; 4825 unsigned int ul = 0; \ ??ProcessPacket_23: \ 0000039C 14808DE5 STR R8,[SP, #+20] 4826 uins=t->uin; \ 000003A0 0C0099E5 LDR R0,[R9, #+12] 4827 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ 000003A4 A98EA0E3 MOV R8,#+2704 \ 000003A8 F40187E5 STR R0,[R7, #+500] \ 000003AC 0030A0E1 MOV R3,R0 \ 000003B0 752E87E2 ADD R2,R7,#+1872 \ 000003B4 631E85E2 ADD R1,R5,#+1584 \ 000003B8 070088E0 ADD R0,R8,R7 \ 000003BC 160000EF SWI +22 4828 GetFileStats(talk_sound,&stat,&ul); \ 000003C0 14208DE2 ADD R2,SP,#+20 \ 000003C4 461F8DE2 ADD R1,SP,#+280 \ 000003C8 070088E0 ADD R0,R8,R7 \ 000003CC 840000EF SWI +132 4829 fsize=stat.size; 4830 if(fsize>0) \ 000003D0 1C019DE5 LDR R0,[SP, #+284] \ 000003D4 010050E3 CMP R0,#+1 4831 Play(talk_sound); \ 000003D8 070088A0 ADDGE R0,R8,R7 \ 000003DC ECFFFFAA BGE ??ProcessPacket_24 4832 else 4833 Play(sndGlobal); \ 000003E0 070086E0 ADD R0,R6,R7 \ 000003E4 EAFFFFEA B ??ProcessPacket_24 4834 } 4835 } 4836 4837 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_21: \ 000003E8 10109DE5 LDR R1,[SP, #+16] \ 000003EC 0B0051E1 CMP R1,R11 \ 000003F0 3200000A BEQ ??ProcessPacket_25 \ 000003F4 0B0050E1 CMP R0,R11 \ 000003F8 3000001A BNE ??ProcessPacket_25 4838 { 4839 Play(sndSrvMsg); \ 000003FC 6D0E87E2 ADD R0,R7,#+1744 \ 00000400 ........ BL Play 4840 4841 //-------------------- Log offline ----------------------// 4842 4843 if(t->isactive && isLogOffline) // by kluchnik 26.03.08 \ 00000404 8C0099E5 LDR R0,[R9, #+140] \ 00000408 000050E3 CMP R0,#+0 \ 0000040C BC009715 LDRNE R0,[R7, #+188] \ 00000410 00005013 CMPNE R0,#+0 \ 00000414 2900000A BEQ ??ProcessPacket_25 4844 { 4845 FreeXText2(t); \ 00000418 0900A0E1 MOV R0,R9 \ 0000041C ........ BL FreeXText2 4846 TTime time; 4847 TDate date; 4848 GetDateTime(&date,&time); \ 00000420 0D10A0E1 MOV R1,SP \ 00000424 08008DE2 ADD R0,SP,#+8 \ 00000428 B40000EF SWI +180 4849 char *txt=malloc(64); \ 0000042C 4000A0E3 MOV R0,#+64 \ 00000430 140000EF SWI +20 \ 00000434 0060A0E1 MOV R6,R0 4850 sprintf(txt," Offline: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); \ 00000438 0D00DDE5 LDRB R0,[SP, #+13] \ 0000043C 8C1F85E2 ADD R1,R5,#+560 \ 00000440 01002DE9 PUSH {R0} \ 00000444 1000DDE5 LDRB R0,[SP, #+16] \ 00000448 01002DE9 PUSH {R0} \ 0000044C 0A00DDE5 LDRB R0,[SP, #+10] \ 00000450 01002DE9 PUSH {R0} \ 00000454 0C20DDE5 LDRB R2,[SP, #+12] \ 00000458 0D30DDE5 LDRB R3,[SP, #+13] \ 0000045C 0600A0E1 MOV R0,R6 \ 00000460 160000EF SWI +22 4851 4852 t->xtext2=malloc(64); \ 00000464 4000A0E3 MOV R0,#+64 \ 00000468 140000EF SWI +20 \ 0000046C 980089E5 STR R0,[R9, #+152] 4853 snprintf(t->xtext2,64,txt); \ 00000470 0620A0E1 MOV R2,R6 \ 00000474 4010A0E3 MOV R1,#+64 \ 00000478 1B0100EF SWI +283 4854 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); \ 0000047C 0000A0E3 MOV R0,#+0 \ 00000480 01002DE9 PUSH {R0} \ 00000484 773E85E2 ADD R3,R5,#+1904 \ 00000488 0620A0E1 MOV R2,R6 \ 0000048C 0310A0E3 MOV R1,#+3 \ 00000490 0000E0E1 MVN R0,R0 \ 00000494 01002DE9 PUSH {R0} \ 00000498 0900A0E1 MOV R0,R9 \ 0000049C ........ BL AddStringToLog 4855 ReqAddMsgToChat(t); \ 000004A0 0900A0E1 MOV R0,R9 \ 000004A4 ........ BL ReqAddMsgToChat 4856 // RecountMenu(t, 1); 4857 RecountMenu(NULL, 0); \ 000004A8 0810A0E1 MOV R1,R8 \ 000004AC 0100A0E1 MOV R0,R1 \ 000004B0 ........ BL RecountMenu 4858 mfree(txt); \ 000004B4 0600A0E1 MOV R0,R6 \ 000004B8 150000EF SWI +21 \ 000004BC 14D08DE2 ADD SP,SP,#+20 4859 } 4860 } 4861 4862 //------------------------------------------------------------// 4863 4864 if(TIME_OR_MSG==2) \ ??ProcessPacket_25: \ 000004C0 000197E5 LDR R0,[R7, #+256] \ 000004C4 020050E3 CMP R0,#+2 \ 000004C8 0000001A BNE ??ProcessPacket_16 4865 Get_Online_total(); \ 000004CC ........ BL Get_Online_total 4866 } 4867 if (edchat_id) \ ??ProcessPacket_16: \ 000004D0 C00297E5 LDR R0,[R7, #+704] \ 000004D4 000050E3 CMP R0,#+0 \ 000004D8 4D01000A BEQ ??ProcessPacket_1 4868 { 4869 void *data=FindGUIbyId(edchat_id,NULL); \ 000004DC C00297E5 LDR R0,[R7, #+704] \ 000004E0 0010A0E3 MOV R1,#+0 \ 000004E4 090200EF SWI +521 4870 { 4871 EDCHAT_STRUCT *ed_struct; 4872 ed_struct=EDIT_GetUserPointer(data); \ 000004E8 DF0100EF SWI +479 4873 if (ed_struct) \ 000004EC 000050E3 CMP R0,#+0 \ 000004F0 4701000A BEQ ??ProcessPacket_1 4874 { 4875 if (ed_struct->ed_contact==t) \ 000004F4 000090E5 LDR R0,[R0, #+0] \ 000004F8 090050E1 CMP R0,R9 \ 000004FC 4401001A BNE ??ProcessPacket_1 4876 { 4877 DirectRedrawGUI_ID(edchat_id); \ 00000500 C00297E5 LDR R0,[R7, #+704] \ 00000504 400100EF SWI +320 \ 00000508 410100EA B ??ProcessPacket_1 4878 } 4879 } 4880 } 4881 } 4882 break; 4883 case T_RECVMSG: 4884 NEW_MSG=1; \ ??ProcessPacket_26: \ 0000050C 546387E5 STR R6,[R7, #+852] 4885 t=FindContactByUin(p->pkt.uin); \ 00000510 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000514 0090B0E1 MOVS R9,R0 4886 if (!t) \ 00000518 0900001A BNE ??ProcessPacket_27 4887 { 4888 sprintf(s,percent_d,p->pkt.uin); \ 0000051C 002094E5 LDR R2,[R4, #+0] \ 00000520 2B1085E2 ADD R1,R5,#+43 \ 00000524 18008DE2 ADD R0,SP,#+24 \ 00000528 160000EF SWI +22 4889 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 0000052C B82297E5 LDR R2,[R7, #+696] \ 00000530 000094E5 LDR R0,[R4, #+0] \ 00000534 0030A0E3 MOV R3,#+0 \ 00000538 18108DE2 ADD R1,SP,#+24 \ 0000053C ........ _BLF AddContact,??AddContact??rA \ 00000540 0090A0E1 MOV R9,R0 4890 } 4891 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ 00000574 5A0FA013 MOVNE R0,#+360 \ 00000578 8C008915 STRNE R0,[R9, #+140] 4894 // ChangeContactPos(t); 4895 //#ifdef kluchnik 4896 if(t->isvibra) \ 0000057C 580099E5 LDR R0,[R9, #+88] \ 00000580 000050E3 CMP R0,#+0 \ 00000584 0500000A BEQ ??ProcessPacket_29 4897 { 4898 if(VIBR_TYPE) \ 00000588 300197E5 LDR R0,[R7, #+304] \ 0000058C 000050E3 CMP R0,#+0 4899 vibra_count=2; \ 00000590 0200A013 MOVNE R0,#+2 \ 00000594 7C028715 STRNE R0,[R7, #+636] 4900 else 4901 vibra_count=1; \ 00000598 7C628705 STREQ R6,[R7, #+636] 4902 start_vibra(); \ 0000059C ........ BL start_vibra 4903 } 4904 //#else 4905 /* if(VIBR_TYPE) 4906 vibra_count=2; 4907 else 4908 vibra_count=1; 4909 start_vibra();*/ 4910 //#endif 4911 #ifdef ELKA 4912 if(SLI_TYPE) 4913 SLI_Timer(); 4914 #endif 4915 if(Is_Double_Vibra_On) \ ??ProcessPacket_29: \ 000005A0 0C0297E5 LDR R0,[R7, #+524] \ 000005A4 000050E3 CMP R0,#+0 \ 000005A8 0000000A BEQ ??ProcessPacket_30 4916 Reminder_timer(); \ 000005AC ........ BL Reminder_timer 4917 if (Is_ILU_On) \ ??ProcessPacket_30: \ 000005B0 080297E5 LDR R0,[R7, #+520] \ 000005B4 000050E3 CMP R0,#+0 \ 000005B8 0400000A BEQ ??ProcessPacket_31 4918 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000005BC C83197E5 LDR R3,[R7, #+456] \ 000005C0 B42197E5 LDR R2,[R7, #+436] \ 000005C4 B01197E5 LDR R1,[R7, #+432] \ 000005C8 AC0197E5 LDR R0,[R7, #+428] \ 000005CC ........ BL IlluminationOn 4919 if (t->name[0]=='#') \ ??ProcessPacket_31: \ 000005D0 1400D9E5 LDRB R0,[R9, #+20] \ 000005D4 230050E3 CMP R0,#+35 \ 000005D8 1700001A BNE ??ProcessPacket_32 4920 { 4921 //Если это конференция, патчим имя 4922 char *s=strchr(p->data,'>'); \ 000005DC 3E10A0E3 MOV R1,#+62 \ 000005E0 080084E2 ADD R0,R4,#+8 \ 000005E4 180000EF SWI +24 4923 //Если нашли символ > и после него пробел и ник короче 16 символов 4924 if (s) \ 000005E8 000050E3 CMP R0,#+0 \ 000005EC 1200000A BEQ ??ProcessPacket_32 4925 { 4926 if ((s[1]==' ')&&((s-p->data)<16)) \ 000005F0 0110D0E5 LDRB R1,[R0, #+1] \ 000005F4 200051E3 CMP R1,#+32 \ 000005F8 0F00001A BNE ??ProcessPacket_32 \ 000005FC 081084E2 ADD R1,R4,#+8 \ 00000600 011040E0 SUB R1,R0,R1 \ 00000604 100051E3 CMP R1,#+16 \ 00000608 0B0000AA BGE ??ProcessPacket_32 4927 { 4928 *s=0; //Режем строку \ 0000060C 0080C0E5 STRB R8,[R0, #+0] 4929 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 00000610 0110A0E3 MOV R1,#+1 \ 00000614 02002DE9 PUSH {R1} \ 00000618 083084E2 ADD R3,R4,#+8 \ 0000061C 022080E2 ADD R2,R0,#+2 \ 00000620 0900A0E1 MOV R0,R9 \ 00000624 001061E2 RSB R1,R1,#+0 \ 00000628 02002DE9 PUSH {R1} \ 0000062C 0210A0E3 MOV R1,#+2 \ 00000630 ........ BL AddStringToLog 4930 goto L1; \ 00000634 08D08DE2 ADD SP,SP,#+8 \ 00000638 2A0000EA B ??ProcessPacket_33 4931 } 4932 } 4933 } 4934 4935 //=================== tas bus jautri ===================// 4936 4937 comanda=1; \ ??ProcessPacket_32: \ 0000063C 5C6387E5 STR R6,[R7, #+860] 4938 // if(UIN!=t->uin) 4939 CheckComand(p->data, t, t->name); \ 00000640 142089E2 ADD R2,R9,#+20 \ 00000644 0910A0E1 MOV R1,R9 \ 00000648 080084E2 ADD R0,R4,#+8 \ 0000064C ........ BL CheckComand 4940 if(comanda==1) \ 00000650 5C0397E5 LDR R0,[R7, #+860] \ 00000654 010050E3 CMP R0,#+1 \ 00000658 2200001A BNE ??ProcessPacket_33 4941 { 4942 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 0000065C 01002DE9 PUSH {R0} \ 00000660 143089E2 ADD R3,R9,#+20 \ 00000664 082084E2 ADD R2,R4,#+8 \ 00000668 0210A0E3 MOV R1,#+2 \ 0000066C 000066E2 RSB R0,R6,#+0 \ 00000670 01002DE9 PUSH {R0} \ 00000674 0900A0E1 MOV R0,R9 \ 00000678 ........ BL AddStringToLog 4943 main_count++; \ 0000067C ........ LDR R0,??DataTable87 ;; main_count \ 00000680 001090E5 LDR R1,[R0, #+0] \ 00000684 011081E2 ADD R1,R1,#+1 \ 00000688 001080E5 STR R1,[R0, #+0] 4944 if(Is_INC_On) \ 0000068C 040297E5 LDR R0,[R7, #+516] \ 00000690 08D08DE2 ADD SP,SP,#+8 \ 00000694 000050E3 CMP R0,#+0 \ 00000698 0C00000A BEQ ??ProcessPacket_34 4945 { 4946 strcpy(show_nick, t->name); \ 0000069C 141089E2 ADD R1,R9,#+20 \ 000006A0 8C00A0E3 MOV R0,#+140 \ 000006A4 500D80E3 ORR R0,R0,#0x1400 \ 000006A8 070080E0 ADD R0,R0,R7 \ 000006AC 1A0000EF SWI +26 4947 if(!IsIdleUiOnTop()&&(!saver_on)) \ 000006B0 ........ BL IsIdleUiOnTop \ 000006B4 000050E3 CMP R0,#+0 \ 000006B8 F8019705 LDREQ R0,[R7, #+504] \ 000006BC 00005003 CMPEQ R0,#+0 \ 000006C0 0200001A BNE ??ProcessPacket_34 4948 { 4949 //int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 4950 // char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 4951 // if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) 4952 // { 4953 INC_show=15; \ 000006C4 0F00A0E3 MOV R0,#+15 \ 000006C8 600387E5 STR R0,[R7, #+864] 4954 show_pp_sender(); \ 000006CC ........ BL show_pp_sender 4955 //} 4956 } 4957 } 4958 if(Is_SMARTCPU_On) \ ??ProcessPacket_34: \ 000006D0 000297E5 LDR R0,[R7, #+512] \ 000006D4 000050E3 CMP R0,#+0 \ 000006D8 0200000A BEQ ??ProcessPacket_33 4959 AddToMain(t->name,p->data); \ 000006DC 081084E2 ADD R1,R4,#+8 \ 000006E0 140089E2 ADD R0,R9,#+20 \ 000006E4 ........ BL AddToMain 4960 } 4961 // if((Is_SMARTCPU_On)&&(comanda==1)) 4962 // AddToMain(t->name,p->data); 4963 L1: 4964 //Разворачиваем группу, в которой пришло сообщение 4965 { 4966 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_33: \ 000006E8 100099E5 LDR R0,[R9, #+16] \ 000006EC ........ _BLF FindGroupByID,??FindGroupByID??rA 4967 if (g) \ 000006F0 000050E3 CMP R0,#+0 4968 { 4969 if (g->state) \ 000006F4 B415D011 LDRHNE R1,[R0, #+84] \ 000006F8 00005113 CMPNE R1,#+0 4970 { 4971 g->state=0; \ 000006FC B485C011 STRHNE R8,[R0, #+84] 4972 } 4973 } 4974 } 4975 // if(comanda==1) 4976 // { 4977 ReqAddMsgToChat(t); \ 00000700 0900A0E1 MOV R0,R9 \ 00000704 ........ BL ReqAddMsgToChat 4978 RecountMenu(t,1); \ 00000708 0110A0E3 MOV R1,#+1 \ 0000070C 0900A0E1 MOV R0,R9 \ 00000710 ........ BL RecountMenu 4979 4980 switch (DEVELOP_IF) \ 00000714 340197E5 LDR R0,[R7, #+308] \ 00000718 000050E3 CMP R0,#+0 \ 0000071C 0400000A BEQ ??ProcessPacket_35 \ 00000720 010050E2 SUBS R0,R0,#+1 \ 00000724 0B00000A BEQ ??ProcessPacket_36 \ 00000728 020050E2 SUBS R0,R0,#+2 \ 0000072C 1300000A BEQ ??ProcessPacket_37 \ 00000730 B70000EA B ??ProcessPacket_1 4981 { 4982 case 0: 4983 #ifdef EVILFOX 4984 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) GBS_StartTimerProc(&develop, 216*2, to_develop); 4985 #else 4986 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_35: \ 00000734 068100EF SWI +33030 \ 00000738 080090E5 LDR R0,[R0, #+8] \ 0000073C 141297E5 LDR R1,[R7, #+532] \ 00000740 0C0090E5 LDR R0,[R0, #+12] \ 00000744 0C0090E5 LDR R0,[R0, #+12] \ 00000748 010050E1 CMP R0,R1 \ ??ProcessPacket_38: \ 0000074C B000000A BEQ ??ProcessPacket_1 \ 00000750 ........ BL to_develop \ 00000754 AE0000EA B ??ProcessPacket_1 4987 #endif 4988 break; 4989 case 1: 4990 #ifdef EVILFOX 4991 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) GBS_StartTimerProc(&develop, 216*2, to_develop); 4992 #else 4993 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_36: \ 00000758 068100EF SWI +33030 \ 0000075C 080090E5 LDR R0,[R0, #+8] \ 00000760 141297E5 LDR R1,[R7, #+532] \ 00000764 0C0090E5 LDR R0,[R0, #+12] \ 00000768 0C0090E5 LDR R0,[R0, #+12] \ 0000076C 010050E1 CMP R0,R1 \ 00000770 A700000A BEQ ??ProcessPacket_1 \ 00000774 430000EF SWI +67 \ 00000778 000050E3 CMP R0,#+0 \ 0000077C F2FFFFEA B ??ProcessPacket_38 4994 #endif 4995 break; 4996 case 2: 4997 break; 4998 case 3: 4999 GBS_DelTimer(&develop); \ ??ProcessPacket_37: \ 00000780 0400A0E3 MOV R0,#+4 \ 00000784 4C0D80E3 ORR R0,R0,#0x1300 \ 00000788 070080E0 ADD R0,R0,R7 \ 0000078C 8C0100EF SWI +396 5000 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 00000790 068100EF SWI +33030 \ 00000794 080090E5 LDR R0,[R0, #+8] \ 00000798 141297E5 LDR R1,[R7, #+532] \ 0000079C 0C0090E5 LDR R0,[R0, #+12] \ 000007A0 0C0090E5 LDR R0,[R0, #+12] \ 000007A4 010050E1 CMP R0,R1 \ 000007A8 9900000A BEQ ??ProcessPacket_1 \ 000007AC 430000EF SWI +67 \ 000007B0 000050E3 CMP R0,#+0 \ 000007B4 9600001A BNE ??ProcessPacket_1 \ 000007B8 ........ BL begin_to_develop \ 000007BC 940000EA B ??ProcessPacket_1 5001 break; 5002 } 5003 // } 5004 break; 5005 case T_SRV_ACK: 5006 case T_CLIENT_ACK: 5007 q=FindContactLOGQByAck(p); \ ??ProcessPacket_39: \ 000007C0 0400A0E1 MOV R0,R4 \ 000007C4 ........ BL FindContactLOGQByAck 5008 /* if (q&&(p->pkt.type==T_SRV_ACK)) 5009 { 5010 if (Is_ILU_On) 5011 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); 5012 }//Illumination by BoBa 19.04.2007 */ 5013 /* if (( 5014 IsGuiOnTop(contactlist_menu_id)|| 5015 IsGuiOnTop(edchat_id) 5016 )&&(q)) 5017 { 5018 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 5019 GetPaletteAdrByColorIndex(0), 5020 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 5021 }*/ 5022 if (q) \ 000007C8 000050E3 CMP R0,#+0 \ 000007CC 9000000A BEQ ??ProcessPacket_1 5023 { 5024 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 000007D0 B410D4E1 LDRH R1,[R4, #+4] \ 000007D4 100051E3 CMP R1,#+16 \ 000007D8 0110A003 MOVEQ R1,#+1 \ 000007DC 0210A013 MOVNE R1,#+2 \ 000007E0 041080E5 STR R1,[R0, #+4] 5025 t=FindContactByUin(p->pkt.uin); \ 000007E4 000094E5 LDR R0,[R4, #+0] \ 000007E8 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000007EC 0090A0E1 MOV R9,R0 5026 if (edchat_id) \ 000007F0 C00297E5 LDR R0,[R7, #+704] \ 000007F4 000050E3 CMP R0,#+0 \ 000007F8 8500000A BEQ ??ProcessPacket_1 5027 { 5028 void *data=FindGUIbyId(edchat_id,NULL); \ 000007FC C00297E5 LDR R0,[R7, #+704] \ 00000800 0010A0E3 MOV R1,#+0 \ 00000804 090200EF SWI +521 \ 00000808 0050B0E1 MOVS R5,R0 5029 if (data) \ 0000080C 8000000A BEQ ??ProcessPacket_1 5030 { 5031 EDCHAT_STRUCT *ed_struct; 5032 ed_struct=EDIT_GetUserPointer(data); \ 00000810 DF0100EF SWI +479 5033 if (ed_struct) \ 00000814 000050E3 CMP R0,#+0 \ 00000818 7D00000A BEQ ??ProcessPacket_1 5034 { 5035 if (ed_struct->ed_contact==t) \ 0000081C 000090E5 LDR R0,[R0, #+0] \ 00000820 090050E1 CMP R0,R9 \ 00000824 7A00001A BNE ??ProcessPacket_1 5036 { 5037 if (EDIT_IsBusy(data)) \ 00000828 0500A0E1 MOV R0,R5 \ 0000082C 1C0200EF SWI +540 \ 00000830 000050E3 CMP R0,#+0 \ 00000834 0300000A BEQ ??ProcessPacket_40 5038 { 5039 t->req_drawack=1; \ 00000838 7C6089E5 STR R6,[R9, #+124] 5040 #ifdef EVILFOX 5041 time_to_stop_t9=2; 5042 #else 5043 time_to_stop_t9=3; \ 0000083C 0300A0E3 MOV R0,#+3 \ 00000840 580387E5 STR R0,[R7, #+856] \ 00000844 720000EA B ??ProcessPacket_1 5044 #endif 5045 } 5046 else { 5047 DrawAck(data); \ ??ProcessPacket_40: \ 00000848 0500A0E1 MOV R0,R5 \ 0000084C ........ BL DrawAck 5048 if (p->pkt.type==T_SRV_ACK) \ 00000850 B400D4E1 LDRH R0,[R4, #+4] \ 00000854 100050E3 CMP R0,#+16 \ 00000858 6D00001A BNE ??ProcessPacket_1 5049 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 0000085C C83197E5 LDR R3,[R7, #+456] \ 00000860 C02197E5 LDR R2,[R7, #+448] \ 00000864 BC1197E5 LDR R1,[R7, #+444] \ 00000868 B80197E5 LDR R0,[R7, #+440] \ 0000086C ........ BL IlluminationOn \ 00000870 670000EA B ??ProcessPacket_1 5050 } 5051 } 5052 } 5053 } 5054 } 5055 } 5056 break; 5057 case T_XTEXT_ACK: 5058 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_41: \ 00000874 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000878 0090B0E1 MOVS R9,R0 5059 if (t) \ 0000087C 6400000A BEQ ??ProcessPacket_1 5060 { 5061 int i; 5062 int j; 5063 FreeXText(t); \ 00000880 ........ _BLF FreeXText,??FreeXText??rA 5064 i=p->pkt.data_len; \ 00000884 B660D4E1 LDRH R6,[R4, #+6] 5065 memcpy(t->xtext=malloc(i),p->data,i); \ 00000888 0600A0E1 MOV R0,R6 \ 0000088C 140000EF SWI +20 \ 00000890 940089E5 STR R0,[R9, #+148] \ 00000894 0620A0E1 MOV R2,R6 \ 00000898 081084E2 ADD R1,R4,#+8 \ 0000089C 1E0100EF SWI +286 5066 zeromem(s,256); \ 000008A0 401FA0E3 MOV R1,#+256 \ 000008A4 18008DE2 ADD R0,SP,#+24 \ 000008A8 1D0100EF SWI +285 5067 strcpy(s,t->name); \ 000008AC 141089E2 ADD R1,R9,#+20 \ 000008B0 18008DE2 ADD R0,SP,#+24 \ 000008B4 1A0000EF SWI +26 5068 strcat(s,":\n"); \ 000008B8 591F8FE2 ADR R1,??ProcessPacket_42 ;; ":\n" \ 000008BC 18008DE2 ADD R0,SP,#+24 \ 000008C0 170000EF SWI +23 5069 i=strlen(s); \ 000008C4 18008DE2 ADD R0,SP,#+24 \ 000008C8 1B0000EF SWI +27 5070 j=p->data[0]; \ 000008CC 0860D4E5 LDRB R6,[R4, #+8] \ 000008D0 0070A0E1 MOV R7,R0 5071 if (j>(255-i)) j=255-i; \ 000008D4 FF0067E2 RSB R0,R7,#+255 \ 000008D8 060050E1 CMP R0,R6 \ 000008DC 0060A0B1 MOVLT R6,R0 5072 strncpy(s+i,p->data+1,j); \ 000008E0 0620A0E1 MOV R2,R6 \ 000008E4 091084E2 ADD R1,R4,#+9 \ 000008E8 18008DE2 ADD R0,SP,#+24 \ 000008EC 000087E0 ADD R0,R7,R0 \ 000008F0 160100EF SWI +278 5073 i+=j; \ 000008F4 070086E0 ADD R0,R6,R7 5074 if (i<255) \ 000008F8 FF0050E3 CMP R0,#+255 \ 000008FC 100000AA BGE ??ProcessPacket_43 5075 { 5076 s[i]='\n'; \ 00000900 18108DE2 ADD R1,SP,#+24 \ 00000904 0A20A0E3 MOV R2,#+10 \ 00000908 0120C0E7 STRB R2,[R0, +R1] 5077 i++; \ 0000090C 0810D4E5 LDRB R1,[R4, #+8] \ 00000910 B620D4E1 LDRH R2,[R4, #+6] \ 00000914 010080E2 ADD R0,R0,#+1 5078 j=p->pkt.data_len-p->data[0]-1; 5079 if (j>(255-i)) j=255-i; 5080 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000918 18308DE2 ADD R3,SP,#+24 \ 0000091C 012042E0 SUB R2,R2,R1 \ 00000920 016042E2 SUB R6,R2,#+1 \ 00000924 FF2060E2 RSB R2,R0,#+255 \ 00000928 060052E1 CMP R2,R6 \ 0000092C 0260A0B1 MOVLT R6,R2 \ 00000930 0620A0E1 MOV R2,R6 \ 00000934 041081E0 ADD R1,R1,R4 \ 00000938 091081E2 ADD R1,R1,#+9 \ 0000093C 030080E0 ADD R0,R0,R3 \ 00000940 160100EF SWI +278 5081 } 5082 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 5083 //if (!edchat_id && // Только если редактор не наверху 5084 // strlen(p->data)) // и x-status не пустой 5085 // ShowMSG(0,(int)s); 5086 5087 /* 5088 #ifdef EVILFOX 5089 #else 5090 if (!edchat_id) ShowMSG(0,(int)s); // Только если редактор не наверху 5091 #endif 5092 */ 5093 zeromem(s,256); \ ??ProcessPacket_43: \ 00000944 401FA0E3 MOV R1,#+256 \ 00000948 18008DE2 ADD R0,SP,#+24 \ 0000094C 1D0100EF SWI +285 5094 i=0; 5095 j=p->data[0]; \ 00000950 0860D4E5 LDRB R6,[R4, #+8] 5096 if (j>(255-i)) j=255-i; 5097 strncpy(s,p->data+1,j); \ 00000954 091084E2 ADD R1,R4,#+9 \ 00000958 18008DE2 ADD R0,SP,#+24 \ 0000095C 400F56E3 CMP R6,#+256 \ 00000960 FF60A0A3 MOVGE R6,#+255 \ 00000964 0620A0E1 MOV R2,R6 \ 00000968 160100EF SWI +278 5098 i+=j; 5099 if (i<255) \ 0000096C FF0056E3 CMP R6,#+255 \ 00000970 100000AA BGE ??ProcessPacket_44 5100 { 5101 s[i++]=13; \ 00000974 18108DE2 ADD R1,SP,#+24 \ 00000978 0D20A0E3 MOV R2,#+13 \ 0000097C 0120C6E7 STRB R2,[R6, +R1] \ 00000980 0810D4E5 LDRB R1,[R4, #+8] \ 00000984 B620D4E1 LDRH R2,[R4, #+6] \ 00000988 010086E2 ADD R0,R6,#+1 5102 j=p->pkt.data_len-p->data[0]-1; 5103 if (j>(255-i)) j=255-i; 5104 strncpy(s+i,p->data+p->data[0]+1,j); \ 0000098C 18308DE2 ADD R3,SP,#+24 \ 00000990 012042E0 SUB R2,R2,R1 \ 00000994 016042E2 SUB R6,R2,#+1 \ 00000998 FF2060E2 RSB R2,R0,#+255 \ 0000099C 060052E1 CMP R2,R6 \ 000009A0 0260A0B1 MOVLT R6,R2 \ 000009A4 0620A0E1 MOV R2,R6 \ 000009A8 041081E0 ADD R1,R1,R4 \ 000009AC 091081E2 ADD R1,R1,#+9 \ 000009B0 030080E0 ADD R0,R0,R3 \ 000009B4 160100EF SWI +278 5105 } 5106 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_44: \ 000009B8 0100A0E3 MOV R0,#+1 \ 000009BC 01002DE9 PUSH {R0} \ 000009C0 773E85E2 ADD R3,R5,#+1904 \ 000009C4 0310A0E3 MOV R1,#+3 \ 000009C8 000060E2 RSB R0,R0,#+0 \ 000009CC 01002DE9 PUSH {R0} \ 000009D0 20208DE2 ADD R2,SP,#+32 \ 000009D4 0900A0E1 MOV R0,R9 \ 000009D8 ........ BL AddStringToLog 5107 ReqAddMsgToChat(t); \ 000009DC 0900A0E1 MOV R0,R9 \ 000009E0 ........ BL ReqAddMsgToChat 5108 if (strlen(p->data)) // Если x-status не пустой \ 000009E4 080084E2 ADD R0,R4,#+8 \ 000009E8 1B0000EF SWI +27 \ 000009EC 000050E3 CMP R0,#+0 \ 000009F0 08D08DE2 ADD SP,SP,#+8 5109 RecountMenu(t, 1); \ 000009F4 0110A013 MOVNE R1,#+1 \ 000009F8 0900A011 MOVNE R0,R9 \ 000009FC B3FDFF1A BNE ??ProcessPacket_8 5110 else 5111 RecountMenu(NULL, 0); \ 00000A00 0010A0E3 MOV R1,#+0 \ 00000A04 0100A0E1 MOV R0,R1 \ 00000A08 B0FDFFEA B ??ProcessPacket_8 5112 } 5113 break; 5114 case T_LASTPRIVACY: 5115 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_45: \ 00000A0C 0800D4E5 LDRB R0,[R4, #+8] \ 00000A10 780287E5 STR R0,[R7, #+632] 5116 break; 5117 } 5118 mfree(p); \ ??ProcessPacket_1: \ 00000A14 0400A0E1 MOV R0,R4 \ 00000A18 150000EF SWI +21 5119 } \ 00000A1C 50DF8DE2 ADD SP,SP,#+320 \ 00000A20 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_42: \ 00000A24 3A0A0000 DC8 ":\n",+0 5120 5121 5122 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 5123 void process_active_timer(void) 5124 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5125 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable95 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 8C0295E5 LDR R0,[R5, #+652] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 5126 { 5127 if (++tenseconds_to_ping>12) \ 00000018 C80295E5 LDR R0,[R5, #+712] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 C80285E5 STR R0,[R5, #+712] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 5128 { 5129 tenseconds_to_ping=0; 5130 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 C84285E5 STR R4,[R5, #+712] \ 00000034 710100EF SWI +369 5131 } 5132 } 5133 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable91 ;; `?ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000008 ........ LDR R7,??DataTable91 ;; `?ws1,"\nLoading images..."); 5170 5171 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 5172 { 5173 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001C8 002090E5 LDR R2,[R0, #+0] \ 000001CC 300094E5 LDR R0,[R4, #+48] \ 000001D0 791F87E2 ADD R1,R7,#+484 \ 000001D4 160200EF SWI +534 5174 } 5175 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 5176 { 5177 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001E8 ........ LDR R0,??DataTable93 ;; total_xstatuses \ 000001EC 341087E2 ADD R1,R7,#+52 \ 000001F0 002090E5 LDR R2,[R0, #+0] \ 000001F4 300094E5 LDR R0,[R4, #+48] \ 000001F8 160200EF SWI +534 5178 } 5179 } 5180 #ifdef kluchnik 5181 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5182 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5183 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 5184 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5185 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5186 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 5187 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5188 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5189 int y=140; 5190 char A[]="[A] %s"; 5191 char I[]="[I]"; 5192 char V[]="[V]"; 5193 char S[]="[S]"; 5194 // char Vr[]="[Vr]; 5195 if(CurrentPrivateStatus==1) 5196 { 5197 wsprintf(data->ws2,I); 5198 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5199 y+=GetFontYSIZE(11)+5; 5200 } 5201 5202 if(Is_Vibra_Enabled) 5203 { 5204 wsprintf(data->ws2,V); 5205 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5206 y+=GetFontYSIZE(11)+5; 5207 } 5208 5209 if(Is_Sounds_Enabled) 5210 { 5211 wsprintf(data->ws2,S); 5212 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5213 y+=GetFontYSIZE(11)+5; 5214 } 5215 5216 if(Is_Double_Vibra_On) 5217 { 5218 wsprintf(data->ws2,"[Vr]"); 5219 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5220 } 5221 5222 if(away_m) 5223 { 5224 wsprintf(data->ws2,A,away_msg_time_dace); 5225 DrawString(data->ws2,2,y,ScreenW()-1,y+GetFontYSIZE(11),11,0,GetPaletteAdrByColorIndex(2),GetPaletteAdrByColorIndex(23)); 5226 y+=GetFontYSIZE(11)+5; 5227 } 5228 5229 //wsprintf(data->ws2,percent_s,onlineTime); 5230 // onlineTime 5231 if(connect_state==3) 5232 { 5233 wsprintf(data->ws2,"Online: %02d:%02d:%02d", uptimeHour, uptimeMin, uptimeSec); 5234 } 5235 else 5236 wsprintf(data->ws2,"Offline"); 5237 DrawString(data->ws2,1,scr_h-4-3*GetFontYSIZE(FONT_SMALL_BOLD)+1,ScreenW()-1,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD)-3 5238 ,FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 5239 5240 #else 5241 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5242 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_1: \ 000001FC 1700A0E3 MOV R0,#+23 \ 00000200 2E0100EF SWI +302 \ 00000204 0080A0E1 MOV R8,R0 \ 00000208 0000A0E3 MOV R0,#+0 \ 0000020C 2E0100EF SWI +302 \ 00000210 0090A0E1 MOV R9,R0 \ 00000214 0300A0E3 MOV R0,#+3 \ 00000218 C50100EF SWI +453 \ 0000021C 04109DE5 LDR R1,[SP, #+4] \ 00000220 00012DE9 PUSH {R8} \ 00000224 04A041E2 SUB R10,R1,#+4 \ 00000228 00022DE9 PUSH {R9} \ 0000022C 0010A0E3 MOV R1,#+0 \ 00000230 02002DE9 PUSH {R1} \ 00000234 04B045E2 SUB R11,R5,#+4 \ 00000238 00004BE0 SUB R0,R11,R0 \ 0000023C 0A30A0E1 MOV R3,R10 \ 00000240 0710A0E3 MOV R1,#+7 \ 00000244 02002DE9 PUSH {R1} \ 00000248 01002DE9 PUSH {R0} \ 0000024C 300094E5 LDR R0,[R4, #+48] \ 00000250 0320A0E3 MOV R2,#+3 \ 00000254 0310A0E3 MOV R1,#+3 \ 00000258 4C0100EF SWI +332 5243 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 0000025C B40296E5 LDR R0,[R6, #+692] \ 00000260 14D08DE2 ADD SP,SP,#+20 \ 00000264 000050E3 CMP R0,#+0 \ 00000268 340094E5 LDR R0,[R4, #+52] \ 0000026C 772F8712 ADDNE R2,R7,#+476 \ 00000270 2E208702 ADDEQ R2,R7,#+46 \ 00000274 281087E2 ADD R1,R7,#+40 \ 00000278 240100EF SWI +292 5244 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5245 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 0000027C 1700A0E3 MOV R0,#+23 \ 00000280 2E0100EF SWI +302 \ 00000284 0060A0E1 MOV R6,R0 \ 00000288 0000A0E3 MOV R0,#+0 \ 0000028C 2E0100EF SWI +302 \ 00000290 0080A0E1 MOV R8,R0 \ 00000294 0300A0E3 MOV R0,#+3 \ 00000298 C50100EF SWI +453 \ 0000029C 04109DE5 LDR R1,[SP, #+4] \ 000002A0 40002DE9 PUSH {R6} \ 000002A4 C150A0E1 ASR R5,R1,#+1 \ 000002A8 00012DE9 PUSH {R8} \ 000002AC 0410A0E3 MOV R1,#+4 \ 000002B0 02002DE9 PUSH {R1} \ 000002B4 0A30A0E1 MOV R3,R10 \ 000002B8 00204BE0 SUB R2,R11,R0 \ 000002BC 0310A0E3 MOV R1,#+3 \ 000002C0 02002DE9 PUSH {R1} \ 000002C4 0B10A0E1 MOV R1,R11 \ 000002C8 02002DE9 PUSH {R1} \ 000002CC 340094E5 LDR R0,[R4, #+52] \ 000002D0 0510A0E1 MOV R1,R5 \ 000002D4 4C0100EF SWI +332 5246 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 000002D8 340094E5 LDR R0,[R4, #+52] \ 000002DC 752F87E2 ADD R2,R7,#+468 \ 000002E0 281087E2 ADD R1,R7,#+40 \ 000002E4 240100EF SWI +292 5247 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 5248 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 000002E8 1700A0E3 MOV R0,#+23 \ 000002EC 2E0100EF SWI +302 \ 000002F0 0060A0E1 MOV R6,R0 \ 000002F4 0000A0E3 MOV R0,#+0 \ 000002F8 2E0100EF SWI +302 \ 000002FC 0070A0E1 MOV R7,R0 \ 00000300 0300A0E3 MOV R0,#+3 \ 00000304 C50100EF SWI +453 \ 00000308 40002DE9 PUSH {R6} \ 0000030C 80002DE9 PUSH {R7} \ 00000310 0110A0E3 MOV R1,#+1 \ 00000314 02002DE9 PUSH {R1} \ 00000318 0530A0E1 MOV R3,R5 \ 0000031C 00204BE0 SUB R2,R11,R0 \ 00000320 0310A0E3 MOV R1,#+3 \ 00000324 02002DE9 PUSH {R1} \ 00000328 0B10A0E1 MOV R1,R11 \ 0000032C 02002DE9 PUSH {R1} \ 00000330 340094E5 LDR R0,[R4, #+52] \ 00000334 0310A0E3 MOV R1,#+3 \ 00000338 4C0100EF SWI +332 \ 0000033C 28D08DE2 ADD SP,SP,#+40 5249 #endif 5250 } \ 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 5251 \ In segment CODE, align 4, keep-with-next 5252 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 5253 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5254 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 300084E5 STR R0,[R4, #+48] 5255 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 340084E5 STR R0,[R4, #+52] 5256 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 5257 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 5258 \ In segment CODE, align 4, keep-with-next 5259 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 5260 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5261 FreeWS(data->ws1); \ 00000008 300094E5 LDR R0,[R4, #+48] \ 0000000C 290100EF SWI +297 5262 FreeWS(data->ws2); \ 00000010 340094E5 LDR R0,[R4, #+52] \ 00000014 290100EF SWI +297 5263 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 5264 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 5265 \ In segment CODE, align 4, keep-with-next 5266 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 5267 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 5268 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 5269 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 5270 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 5271 \ In segment CODE, align 4, keep-with-next 5272 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 5273 { 5274 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 5275 return; 5276 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 5277 } \ 00000010 1EFF2FE1 BX LR ;; return 5278 \ In segment CODE, align 4, keep-with-next 5279 int method5(MAIN_GUI *data,GUI_MSG *msg) 5280 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 5281 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 5282 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 9320A0E3 MOV R2,#+147 \ 00000018 F210D0E1 LDRSH R1,[R0, #+2] \ 0000001C 402F82E3 ORR R2,R2,#0x100 \ 00000020 020051E1 CMP R1,R2 \ 00000024 2700001A BNE ??method5_0 5283 { 5284 switch(msg->gbsmsg->submess) \ 00000028 040090E5 LDR R0,[R0, #+4] \ 0000002C ........ LDR R5,??DataTable115 ;; create_connect \ 00000030 ........ LDR R4,??DataTable95 ;; S_ICONS \ 00000034 0360A0E3 MOV R6,#+3 \ 00000038 F870A0E3 MOV R7,#+248 \ 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 5285 { 5286 #ifdef kluchnik 5287 case LEFT_SOFT: 5288 if (cltop) create_contactlist_menu(); 5289 unhooked2=1; 5290 // if (cltop) remake_clmenu(); 5291 break; 5292 case RIGHT_SOFT: 5293 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 5294 #else 5295 case LEFT_SOFT: 5296 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_1: \ 00000064 0100A0E3 MOV R0,#+1 \ 00000068 F280BDE8 POP {R1,R4-R7,PC} 5297 case RIGHT_SOFT: 5298 // if (cltop) remake_clmenu(); 5299 unhooked2=1; \ ??method5_2: \ 0000006C 0100A0E3 MOV R0,#+1 \ 00000070 380384E5 STR R0,[R4, #+824] 5300 if (cltop) create_contactlist_menu(); \ 00000074 B40294E5 LDR R0,[R4, #+692] \ 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} 5301 break; 5302 #endif 5303 case GREEN_BUTTON: 5304 disautorecconect=0; \ ??method5_3: \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 640284E5 STR R0,[R4, #+612] 5305 if ((connect_state==0)&&(sock==-1)) \ 00000094 8C0294E5 LDR R0,[R4, #+652] \ 00000098 000050E3 CMP R0,#+0 \ 0000009C 90029405 LDREQ R0,[R4, #+656] \ 000000A0 01007003 CMNEQ R0,#+1 \ 000000A4 0700001A BNE ??method5_0 5306 { 5307 GBS_DelTimer(&reconnect_tmr); \ 000000A8 010000EA B ??method5_6 5308 DNR_TRIES=3; 5309 SUBPROC((void *)create_connect); 5310 } 5311 break; 5312 case '0': 5313 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000AC ........ LDR R0,??DataTable117 ;; end_socket \ 000000B0 710100EF SWI +369 5314 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000B4 040087E0 ADD R0,R7,R4 \ 000000B8 8C0100EF SWI +396 5315 DNR_TRIES=3; \ 000000BC 486384E5 STR R6,[R4, #+840] 5316 SUBPROC((void *)create_connect); \ 000000C0 0500A0E1 MOV R0,R5 \ 000000C4 710100EF SWI +369 5317 break; 5318 } 5319 } 5320 return(0); \ ??method5_0: \ 000000C8 0000A0E3 MOV R0,#+0 \ 000000CC F280BDE8 POP {R1,R4-R7,PC} ;; return 5321 } 5322 \ In segment CODE, align 4, keep-with-next 5323 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5324 \ In segment CODE, align 4, keep-with-next 5325 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 5326 5327 const void * const gui_methods[11]={ 5328 (void *)method0, //Redraw 5329 (void *)method1, //Create 5330 (void *)method2, //Close 5331 (void *)method3, //Focus 5332 (void *)method4, //Unfocus 5333 (void *)method5, //OnKey 5334 0, 5335 (void *)kill_data, //method7, //Destroy 5336 (void *)method8, 5337 (void *)method9, 5338 0 5339 }; 5340 5341 \ In segment CODE, align 4, keep-with-next 5342 int my_keyhook(int key, int m) 5343 { \ my_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} 5344 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 5345 { 5346 if(change_back_status==1) \ 00000014 ........ LDR R5,??DataTable119 ;; S_ICONS \ 00000018 0040A0E3 MOV R4,#+0 \ 0000001C 3C0295E5 LDR R0,[R5, #+572] \ 00000020 010050E3 CMP R0,#+1 \ 00000024 0300001A BNE ??my_keyhook_1 5347 { 5348 CurrentStatus=status_rem; \ 00000028 380295E5 LDR R0,[R5, #+568] \ 0000002C 740285E5 STR R0,[R5, #+628] 5349 set_my_status(); \ 00000030 ........ BL set_my_status 5350 // SUBPROC((void*)WriteDefSettings); 5351 change_back_status=0; \ 00000034 3C4285E5 STR R4,[R5, #+572] 5352 } 5353 #ifdef EVILFOX 5354 if ((key==VOL_UP_BUTTON)&&(IsIdleUiOnTop())) 5355 { 5356 if(autobot==1) 5357 { 5358 autobot=0; 5359 ShowMSG(1,(int)"Autobot Off"); 5360 } 5361 else 5362 { 5363 autobot=1; 5364 ShowMSG(1,(int)"Autobot On"); 5365 } 5366 } 5367 #endif 5368 #ifdef ELKA 5369 #ifdef EVILFOX 5370 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) 5371 #else 5372 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) 5373 #endif 5374 { 5375 GBS_StopTimer(&away_tmr); 5376 msg_away_timer=AUTO_ENGADE; 5377 away_timer(); 5378 main_d=1; 5379 } 5380 else 5381 { 5382 #endif 5383 if(Reset_timer) \ ??my_keyhook_1: \ 00000038 180195E5 LDR R0,[R5, #+280] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 3080BD08 POPEQ {R4,R5,PC} 5384 { 5385 msg_away_timer=0; \ 00000044 304285E5 STR R4,[R5, #+560] 5386 away_m=0; \ 00000048 344285E5 STR R4,[R5, #+564] 5387 } 5388 #ifdef ELKA 5389 } 5390 #endif 5391 } 5392 return 0; \ ??my_keyhook_0: \ 0000004C 0000A0E3 MOV R0,#+0 \ 00000050 3080BDE8 POP {R4,R5,PC} ;; return 5393 } \ In segment DATA_C, align 4, align-sorted \ `?` \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 `?` \ percent_t: \ 00000028 257400 DC8 "%t" \ percent_d: \ 0000002B 256400 DC8 "%d" \ empty_str: \ 0000002E 00 DC8 "" \ I_str: \ 0000002F 4900 DC8 "I" \ 00000031 000000 DC8 0, 0, 0 \ 00000034 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 00000047 00 DC8 0 \ 00000048 566962726120 DC8 "Vibra On" \ 4F6E00 \ 00000051 000000 DC8 0, 0, 0 \ 00000054 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 0000006B 00 DC8 0 \ 0000006C 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 00000077 00 DC8 0 \ 00000078 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 00000090 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000000A0 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000000AC 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000000B5 000000 DC8 0, 0, 0 \ 000000B8 CDE5E2E5F0ED DC8 "\315\345\342\345\360\355\356\345 \361\356\356\341\371\345\355\350\345 ENIP_SOCK_CONNECTED!" \ EEE520F1EEEE \ E1F9E5EDE8E5 \ 20454E49505F \ 534F434B5F43 \ 4F4E4E454354 \ 45442100 \ 000000E0 CDE5E2E5F0ED DC8 "\315\345\342\345\360\355\356\345 \361\356\356\341\371\345\355\350\345 ENIP_DATA_READ" \ EEE520F1EEEE \ E1F9E5EDE8E5 \ 20454E49505F \ 444154415F52 \ 45414400 \ 00000102 0000 DC8 0, 0 \ 00000104 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 00000127 00 DC8 0 \ 00000128 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 00000147 00 DC8 0 \ 00000148 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 00000152 0000 DC8 0, 0 \ 00000154 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ 00000168 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 00000175 000000 DC8 0, 0, 0 \ 00000178 526571756573 DC8 "Request info..." \ 7420696E666F \ 2E2E2E00 \ 00000188 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000198 49646C655570 DC8 "IdleUpd" \ 6400 \ 000001A0 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 000001AB 00 DC8 0 \ 000001AC 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 000001D4 4578697400 DC8 "Exit" \ 000001D9 000000 DC8 0, 0, 0 \ 000001DC 434C69737400 DC8 "CList" \ 000001E2 0000 DC8 0, 0 \ 000001E4 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 000001F6 0000 DC8 0, 0 \ 000001F8 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 00000200 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 00000208 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 00000210 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 00000218 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 00000220 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 00000228 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 0000022E 0000 DC8 0, 0 \ 00000230 204F66666C69 DC8 " Offline: %02d:%02d:%02d %02d-%02d" \ 6E653A202530 \ 32643A253032 \ 643A25303264 \ 20253032642D \ 2530326400 \ 00000253 00 DC8 0 \ 00000254 204F6E6C696E DC8 " Online: %02d:%02d:%02d %02d-%02d" \ 653A20253032 \ 643A25303264 \ 3A2530326420 \ 253032642D25 \ 30326400 \ 00000276 0000 DC8 0, 0 \ 00000278 3E25733C00 DC8 ">%s<" \ 0000027D 000000 DC8 0, 0, 0 \ 00000280 5F5F55524C00 DC8 "__URL" \ 00000286 0000 DC8 0, 0 \ 00000288 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 00000295 000000 DC8 0, 0, 0 \ 00000298 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 000002AC 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 000002B4 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 000002BC 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 000002C4 696C65732F6E DC8 69H, 6CH, 65H, 73H, 2FH, 6EH, 61H, 74H \ 6174 \ 000002CC 6963715F6D6F DC8 69H, 63H, 71H, 5FH, 6DH, 6FH, 64H, 32H \ 6432 \ 000002D4 303538732E7A DC8 30H, 35H, 38H, 73H, 2EH, 7AH, 69H, 70H \ 6970 \ 000002DC 202873676F6C DC8 20H, 28H, 73H, 67H, 6FH, 6CH, 64H, 29H \ 6429 \ 000002E4 202020202834 DC8 20H, 20H, 20H, 20H, 28H, 34H, 30H, 6BH \ 306B \ 000002EC 62290A687474 DC8 62H, 29H, 0AH, 68H, 74H, 74H, 70H, 3AH \ 703A \ 000002F4 2F2F77696E64 DC8 2FH, 2FH, 77H, 69H, 6EH, 64H, 65H, 73H \ 6573 \ 000002FC 2E6E61726F64 DC8 2EH, 6EH, 61H, 72H, 6FH, 64H, 2EH, 72H \ 2E72 \ 00000304 752F66696C65 DC8 75H, 2FH, 66H, 69H, 6CH, 65H, 73H, 2FH \ 732F \ 0000030C 6E6174696371 DC8 6EH, 61H, 74H, 69H, 63H, 71H, 5FH, 6DH \ 5F6D \ 00000314 6F6432303538 DC8 6FH, 64H, 32H, 30H, 35H, 38H, 6EH, 2EH \ 6E2E \ 0000031C 7A697020284E DC8 7AH, 69H, 70H, 20H, 28H, 4EH, 65H, 77H \ 6577 \ 00000324 53476F6C6429 DC8 53H, 47H, 6FH, 6CH, 64H, 29H, 20H, 28H \ 2028 \ 0000032C 34306B62290A DC8 34H, 30H, 6BH, 62H, 29H, 0AH, 68H, 74H \ 6874 \ 00000334 74703A2F2F77 DC8 74H, 70H, 3AH, 2FH, 2FH, 77H, 69H, 6EH \ 696E \ 0000033C 6465732E6E61 DC8 64H, 65H, 73H, 2EH, 6EH, 61H, 72H, 6FH \ 726F \ 00000344 642E72752F66 DC8 64H, 2EH, 72H, 75H, 2FH, 66H, 69H, 6CH \ 696C \ 0000034C 65732F6E6174 DC8 65H, 73H, 2FH, 6EH, 61H, 74H, 69H, 63H \ 6963 \ 00000354 715F6D6F6432 DC8 71H, 5FH, 6DH, 6FH, 64H, 32H, 30H, 35H \ 3035 \ 0000035C 38652E7A6970 DC8 38H, 65H, 2EH, 7AH, 69H, 70H, 20H, 28H \ 2028 \ 00000364 656C6B612920 DC8 65H, 6CH, 6BH, 61H, 29H, 20H, 20H, 20H \ 2020 \ 0000036C 20202834306B DC8 20H, 20H, 28H, 34H, 30H, 6BH, 62H, 29H \ 6229 \ 00000374 0A66696C6573 DC8 0AH, 66H, 69H, 6CH, 65H, 73H, 3AH, 20H \ 3A20 \ 0000037C 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 00000384 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 0000038C 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 00000394 696C65732F6E DC8 69H, 6CH, 65H, 73H, 2FH, 6EH, 61H, 74H \ 6174 \ 0000039C 6963716D6F64 DC8 69H, 63H, 71H, 6DH, 6FH, 64H, 5FH, 61H \ 5F61 \ 000003A4 6C6C66696C65 DC8 6CH, 6CH, 66H, 69H, 6CH, 65H, 73H, 5FH \ 735F \ 000003AC 772E7A697020 DC8 77H, 2EH, 7AH, 69H, 70H, 20H, 28H, 34H \ 2834 \ 000003B4 33326B62290A DC8 33H, 32H, 6BH, 62H, 29H, 0AH, 53H, 74H \ 5374 \ 000003BC 61747573206F DC8 61H, 74H, 75H, 73H, 20H, 6FH, 6EH, 20H \ 6E20 \ 000003C4 69636F6E6261 DC8 69H, 63H, 6FH, 6EH, 62H, 61H, 72H, 20H \ 7220 \ 000003CC 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 000003D4 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 000003DC 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 000003E4 696C65732F69 DC8 69H, 6CH, 65H, 73H, 2FH, 69H, 6DH, 67H \ 6D67 \ 000003EC 31367831362E DC8 31H, 36H, 78H, 31H, 36H, 2EH, 7AH, 69H \ 7A69 \ 000003F4 70202837346B DC8 70H, 20H, 28H, 37H, 34H, 6BH, 62H, 29H \ 6229 \ 000003FC 0AD2E0EA20E6 DC8 0AH, 0D2H, 0E0H, 0EAH, 20H, 0E6H, 0E5H, 20H \ E520 \ 00000404 E2F1E520E1F3 DC8 0E2H, 0F1H, 0E5H, 20H, 0E1H, 0F3H, 0E4H, 0E5H \ E4E5 \ 0000040C F220F2F3F220 DC8 0F2H, 20H, 0F2H, 0F3H, 0F2H, 20H, 68H, 74H \ 6874 \ 00000414 74703A2F2F6B DC8 74H, 70H, 3AH, 2FH, 2FH, 6BH, 6CH, 75H \ 6C75 \ 0000041C 63686E696B2E DC8 63H, 68H, 6EH, 69H, 6BH, 2EH, 6AH, 69H \ 6A69 \ 00000424 6E6F2D6E6574 DC8 6EH, 6FH, 2DH, 6EH, 65H, 74H, 2EH, 72H \ 2E72 \ 0000042C 752F6E617469 DC8 75H, 2FH, 6EH, 61H, 74H, 69H, 63H, 71H \ 6371 \ 00000434 6D6F642F00 DC8 6DH, 6FH, 64H, 2FH, 0 \ 00000439 000000 DC8 0, 0, 0 \ 0000043C 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 0000045F 00 DC8 0 \ 00000460 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 0000047B 00 DC8 0 \ 0000047C 5F5F42415400 DC8 "__BAT" \ 00000482 0000 DC8 0, 0 \ 00000484 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 00000491 000000 DC8 0, 0, 0 \ 00000494 C7E0F0FFE420 DC8 "\307\340\360\377\344 \341\340\362\340\360\345\350: %d \357\360\356\366\345\355\362\356\342" \ E1E0F2E0F0E5 \ E83A20256420 \ EFF0EEF6E5ED \ F2EEE200 \ 000004B0 5F5F4D4F4400 DC8 "__MOD" \ 000004B6 0000 DC8 0, 0 \ 000004B8 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 000004C5 000000 DC8 0, 0, 0 \ 000004C8 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 000004DC 5F5F50524F56 DC8 "__PROVIDER" \ 4944455200 \ 000004E7 00 DC8 0 \ 000004E8 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 000004F5 000000 DC8 0, 0, 0 \ 000004F8 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 00000511 000000 DC8 0, 0, 0 \ 00000514 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 00000521 000000 DC8 0, 0, 0 \ 00000524 5F5F4D534700 DC8 "__MSG" \ 0000052A 0000 DC8 0, 0 \ 0000052C 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 00000539 000000 DC8 0, 0, 0 \ 0000053C CEF2EFF0E0E2 DC8 "\316\362\357\360\340\342\353\345\355\356 \361\356\356\341\371\345\355\350\351: %d \012\317\360\350\355\377\362\356 \361\356\356\341\371\345\355\350\351: %d" \ EBE5EDEE20F1 \ EEEEE1F9E5ED \ E8E93A202564 \ 200ACFF0E8ED \ FFF2EE20F1EE \ EEE1F9E5EDE8 \ E93A20256400 \ 0000056C 5F5F4F4E4C49 DC8 "__ONLINE" \ 4E4500 \ 00000575 000000 DC8 0, 0, 0 \ 00000578 C2F0E5ECFF20 DC8 "\302\360\345\354\377 \342 \356\355\353\340\351\355: %02d:%02d:%02d \012\321\345\360\342\345\360: %s" \ E220EEEDEBE0 \ E9ED3A202530 \ 32643A253032 \ 643A25303264 \ 200AD1E5F0E2 \ E5F03A202573 \ 00 \ 000005A3 00 DC8 0 \ 000005A4 47414D453A00 DC8 "GAME:" \ 000005AA 0000 DC8 0, 0 \ 000005AC 32313A31313A DC8 "21:11:58" \ 353800 \ 000005B5 000000 DC8 0, 0, 0 \ 000005B8 417072202034 DC8 "Apr 4 2008" \ 203230303800 \ 000005C4 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 000005CC 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 2CH, 6BH \ 2C6B \ 000005D4 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 2CH \ 6B2C \ 000005DC 77696E646573 DC8 77H, 69H, 6EH, 64H, 65H, 73H, 20H, 62H \ 2062 \ 000005E4 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 000005EC 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 000005F4 20323035382C DC8 20H, 32H, 30H, 35H, 38H, 2CH, 20H, 6DH \ 206D \ 000005FC 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 00000604 202573206174 DC8 20H, 25H, 73H, 20H, 61H, 74H, 20H, 25H \ 2025 \ 0000060C 732000 DC8 73H, 20H, 0 \ 0000060F 00 DC8 0 \ 00000610 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ 0000061C 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000630 257325642E77 DC8 "%s%d.wav" \ 617600 \ 00000639 000000 DC8 0, 0, 0 \ 0000063C 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 00000646 0000 DC8 0, 0 \ 00000648 75696E256400 DC8 "uin%d" \ 0000064E 0000 DC8 0, 0 \ 00000650 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000658 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 00000663 00 DC8 0 \ 00000664 426164207061 DC8 "Bad packet" \ 636B657400 \ 0000066F 00 DC8 0 \ 00000670 EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 00000677 00 DC8 0 \ 00000678 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 00000680 2563257400 DC8 "%c%t" \ 00000685 000000 DC8 0, 0, 0 \ 00000688 3E3E20257320 DC8 ">> %s <<" \ 3C3C00 \ 00000691 000000 DC8 0, 0, 0 \ 00000694 303A5C7A6269 DC8 "0:\\zbin\\etc\\NATICQMod.bcfg" \ 6E5C6574635C \ 4E4154494351 \ 4D6F642E6263 \ 666700 \ 000006AF 00 DC8 0 \ 000006B0 303A5C7A6269 DC8 "0:\\zbin\\etc\\NATICQ.bcfg" \ 6E5C6574635C \ 4E4154494351 \ 2E6263666700 \ 000006C8 53686F772074 DC8 "Show time" \ 696D6500 \ 000006D2 0000 DC8 0, 0 \ 000006D4 53686F772078 DC8 "Show x-status" \ 2D7374617475 \ 7300 \ 000006E2 0000 DC8 0, 0 \ 000006E4 566962726120 DC8 "Vibra rem Off" \ 72656D204F66 \ 6600 \ 000006F2 0000 DC8 0, 0 \ 000006F4 566962726120 DC8 "Vibra rem On" \ 72656D204F6E \ 00 \ 00000701 000000 DC8 0, 0, 0 \ 00000704 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\373\352\353\376\367\345\355" \ E2FBEAEBFEF7 \ E5ED00 \ 00000713 00 DC8 0 \ 00000714 C8EDE2E8E720 DC8 "\310\355\342\350\347 \342\352\353\376\367\345\355" \ E2EAEBFEF7E5 \ ED00 \ 00000722 0000 DC8 0, 0 \ 00000724 566962726120 DC8 "Vibra Off" \ 4F666600 \ 0000072E 0000 DC8 0, 0 \ 00000730 536F756E6420 DC8 "Sound Off" \ 4F666600 \ 0000073A 0000 DC8 0, 0 \ 0000073C 536F756E6420 DC8 "Sound 0n" \ 306E00 \ 00000745 000000 DC8 0, 0, 0 \ ipc_my_name: \ 00000748 4E6174494351 DC8 "NatICQ" \ 00 \ 0000074F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000075F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 00000768 585461736B00 DC8 "XTask" \ 0000076E 0000 DC8 0, 0 \ x_status_change: \ 00000770 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ ipc_game_name: \ 00000780 436F6D626174 DC8 "Combats" \ 7300 \ gui_methods: \ 00000788 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 000007A4 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ In segment DATA_C, align 4, align-sorted \ ipc_test_name: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 070000006400 DC32 7, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 D1EEEEE1F9E5 DC8 "\321\356\356\341\371\345\355\350\345:\012" \ EDE8E53A0A00 \ input_awaymsg_hdr: \ 00000044 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 0000004C 00000000.... DC32 0H, `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ clmenu_sk: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 clmenu_sk_r \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ clmenu_skt: \ 00000000 ........0000 DC32 clmenu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE20EA DC8 "\314\345\355\376 \352o\355\362." \ 6FEDF22E00 \ 0000000B 00 DC8 0 \ 0000000C 257420257300 DC8 "%t %s" \ 00000012 0000 DC8 0, 0 \ 00000014 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 0000001C 00000000.... DC32 0H, cont_hdr, 32767 \ ....FF7F0000 \ 00000028 08000000.... DC32 8, contact_keyhook, contact_list_ghook, 0H, _softkeys, _skt, 17 \ ............ \ 00000000.... \ ............ \ 11000000 \ 00000044 ........0000 DC32 contacthandler, 0H, 0H, 4 \ 000000000000 \ 04000000 \ In segment DATA_C, align 4, align-sorted \ _softkeys: \ 00000000 000000000100 DC32 0, 1, 2 \ 000002000000 \ In segment DATA_C, align 4, align-sorted \ _sk: \ 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_C, align 4, align-sorted \ _skt: \ 00000000 ........0000 DC32 _sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ color: \ 00000008 FFFFFF64 DC8 255, 255, 255, 100 5396 \ In segment CODE, align 4, keep-with-next 5397 void maincsm_oncreate(CSM_RAM *data) 5398 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 5399 // UpdateConfig(); 5400 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 3C00A0E3 MOV R0,#+60 5401 MAIN_CSM*csm=(MAIN_CSM*)data; 5402 zeromem(main_gui,sizeof(MAIN_GUI)); 5403 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 0000000C 0070A0E3 MOV R7,#+0 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 3C10A0E3 MOV R1,#+60 \ 0000001C 1D0100EF SWI +285 \ 00000020 898100EF SWI +33161 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 011044E2 SUB R1,R4,#+1 \ 00000030 ........ LDR R4,??DataTable121 ;; `?gui.canvas=(void *)(&Canvas); \ 00000044 100084E2 ADD R0,R4,#+16 \ 00000048 000086E5 STR R0,[R6, #+0] 5405 // main_gui->gui.flag30=2; 5406 main_gui->gui.methods=(void *)gui_methods; \ 0000004C 8800A0E3 MOV R0,#+136 \ 00000050 700E80E3 ORR R0,R0,#0x700 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 040086E5 STR R0,[R6, #+4] 5407 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000005C 158000EF SWI +32789 \ 00000060 1C0086E5 STR R0,[R6, #+28] 5408 csm->csm.state=0; \ 00000064 107085E5 STR R7,[R5, #+16] 5409 csm->csm.unk1=0; \ 00000068 147085E5 STR R7,[R5, #+20] 5410 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,??DataTable119 ;; S_ICONS \ 0000007C 180285E5 STR R0,[R5, #+536] 5411 ews=AllocWS(16384); \ 00000080 400CA0E3 MOV R0,#+16384 \ 00000084 250100EF SWI +293 \ 00000088 2C0285E5 STR R0,[R5, #+556] 5412 // MutexCreate(&contactlist_mtx); 5413 DNR_TRIES=3; \ 0000008C 0300A0E3 MOV R0,#+3 \ 00000090 480385E5 STR R0,[R5, #+840] 5414 // SUBPROC((void *)InitSmiles); 5415 // SUBPROC((void *)create_connect); 5416 wsBuffer=AllocWS(10240); \ 00000094 A00DA0E3 MOV R0,#+10240 \ 00000098 250100EF SWI +293 5417 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 0000009C ........ LDR R2,??DataTable100 ;; process_active_timer \ 000000A0 F00185E5 STR R0,[R5, #+496] \ 000000A4 871EA0E3 MOV R1,#+2160 \ 000000A8 0800A0E3 MOV R0,#+8 \ 000000AC 400D80E3 ORR R0,R0,#0x1000 \ 000000B0 050080E0 ADD R0,R0,R5 \ 000000B4 4D0000EF SWI +77 5418 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000B8 242195E5 LDR R2,[R5, #+292] \ 000000BC 2B1084E2 ADD R1,R4,#+43 \ 000000C0 4E00A0E3 MOV R0,#+78 \ 000000C4 700E80E3 ORR R0,R0,#0x700 \ 000000C8 040080E0 ADD R0,R0,R4 \ 000000CC 160000EF SWI +22 5419 gipc.name_to=ipc_my_name; \ 000000D0 4800A0E3 MOV R0,#+72 \ 000000D4 700E80E3 ORR R0,R0,#0x700 \ 000000D8 041080E0 ADD R1,R0,R4 \ 000000DC 741085E5 STR R1,[R5, #+116] 5420 gipc.name_from=ipc_my_name; \ 000000E0 040080E0 ADD R0,R0,R4 \ 000000E4 780085E5 STR R0,[R5, #+120] 5421 gipc.data=(void *)-1; \ 000000E8 0700E0E1 MVN R0,R7 \ 000000EC 7C0085E5 STR R0,[R5, #+124] 5422 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000F0 743085E2 ADD R3,R5,#+116 \ 000000F4 0120A0E3 MOV R2,#+1 \ 000000F8 F210A0E3 MOV R1,#+242 \ 000000FC C01F81E3 ORR R1,R1,#0x300 \ 00000100 0900A0E3 MOV R0,#+9 \ 00000104 420C80E3 ORR R0,R0,#0x4200 \ 00000108 000100EF SWI +256 5423 /* 5424 InitXStatusesImg(); 5425 //InitSmiles(); Это вызовется из InitXStatusesImg 5426 create_connect(); 5427 silenthide=1; 5428 gipc.name_to=ipc_xtask_name; 5429 gipc.name_from=ipc_my_name; 5430 gipc.data=0; 5431 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 5432 */ 5433 } \ 0000010C F080BDE8 POP {R4-R7,PC} ;; return 5434 \ In segment CODE, align 4, keep-with-next 5435 void maincsm_onclose(CSM_RAM *csm) 5436 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 5437 WriteDefSettings(); 5438 FreeWS(wsBuffer); \ 00000004 ........ LDR R4,??DataTable119 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C F00194E5 LDR R0,[R4, #+496] \ 00000010 290100EF SWI +297 5439 // SaveConfigData(successed_config_filename); 5440 5441 /* 5442 #pragma segment="CONFIG_C" 5443 unsigned int ul; 5444 int f; 5445 extern const CFG_HDR cfghdr0; //first var in CONFIG 5446 void *cfg=(void*)&cfghdr0; 5447 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 5448 5449 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 5450 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 5451 } 5452 fwrite(f,cfg,len,&ul); 5453 fclose(f,&ul); 5454 */ 5455 5456 // GBS_DelTimer(&tmr_dorecv); 5457 RemoveKeybMsgHook((void *)my_keyhook); \ 00000014 ........ LDR R0,??DataTable124 ;; my_keyhook \ 00000018 2D0100EF SWI +301 5458 GBS_DelTimer(&tmr_active); \ 0000001C 0800A0E3 MOV R0,#+8 \ 00000020 400D80E3 ORR R0,R0,#0x1000 \ 00000024 040080E0 ADD R0,R0,R4 \ 00000028 8C0100EF SWI +396 5459 GBS_DelTimer(&tmr_vibra); \ 0000002C E800A0E3 MOV R0,#+232 \ 00000030 F00E80E3 ORR R0,R0,#0xF00 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 5460 GBS_DelTimer(&reconnect_tmr); \ 0000003C F800A0E3 MOV R0,#+248 \ 00000040 F00E80E3 ORR R0,R0,#0xF00 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 5461 GBS_DelTimer(&tmr_illumination); \ 0000004C D800A0E3 MOV R0,#+216 \ 00000050 F00E80E3 ORR R0,R0,#0xF00 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 5462 GBS_DelTimer(&mytmr); \ 0000005C D800A0E3 MOV R0,#+216 \ 00000060 D00E80E3 ORR R0,R0,#0xD00 \ 00000064 040080E0 ADD R0,R0,R4 \ 00000068 8C0100EF SWI +396 5463 GBS_DelTimer(&mytmr2); \ 0000006C E800A0E3 MOV R0,#+232 \ 00000070 D00E80E3 ORR R0,R0,#0xD00 \ 00000074 040080E0 ADD R0,R0,R4 \ 00000078 8C0100EF SWI +396 5464 GBS_DelTimer(&mytmr3); \ 0000007C B50E84E2 ADD R0,R4,#+2896 \ 00000080 8C0100EF SWI +396 5465 GBS_DelTimer(&mytmr4); \ 00000084 F800A0E3 MOV R0,#+248 \ 00000088 D00E80E3 ORR R0,R0,#0xD00 \ 0000008C 040080E0 ADD R0,R0,R4 \ 00000090 8C0100EF SWI +396 5466 GBS_DelTimer(&statusTmr); \ 00000094 6800A0E3 MOV R0,#+104 \ 00000098 400D80E3 ORR R0,R0,#0x1000 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 8C0100EF SWI +396 5467 #ifdef NEWSGOLD 5468 GBS_DelTimer(&tracktmr); 5469 #endif 5470 GBS_DelTimer(&incs2); \ 000000A4 C800A0E3 MOV R0,#+200 \ 000000A8 E00E80E3 ORR R0,R0,#0xE00 \ 000000AC 040080E0 ADD R0,R0,R4 \ 000000B0 8C0100EF SWI +396 5471 GBS_DelTimer(&develop); \ 000000B4 0400A0E3 MOV R0,#+4 \ 000000B8 4C0D80E3 ORR R0,R0,#0x1300 \ 000000BC 040080E0 ADD R0,R0,R4 \ 000000C0 8C0100EF SWI +396 5472 GBS_DelTimer(&away_tmr); \ 000000C4 C800A0E3 MOV R0,#+200 \ 000000C8 D00E80E3 ORR R0,R0,#0xD00 \ 000000CC 040080E0 ADD R0,R0,R4 \ 000000D0 8C0100EF SWI +396 5473 SetVibration(0); \ 000000D4 0000A0E3 MOV R0,#+0 \ 000000D8 7C0000EF SWI +124 5474 FreeTemplates(); \ 000000DC ........ BL FreeTemplates 5475 #ifdef kluchnik 5476 FreeBotMessage(); 5477 #endif 5478 FreeCLIST(); \ 000000E0 ........ _BLF FreeCLIST,??FreeCLIST??rA 5479 free_ICONS(); \ 000000E4 ........ BL free_ICONS 5480 // FreeSmiles(); 5481 FreeWS(ews); \ 000000E8 2C0294E5 LDR R0,[R4, #+556] \ 000000EC 290100EF SWI +297 5482 FreeXStatusText(); \ 000000F0 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 5483 // MutexDestroy(&contactlist_mtx); 5484 SUBPROC((void *)FreeSmiles); \ 000000F4 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 000000F8 710100EF SWI +369 5485 SUBPROC((void *)FreeXStatusesImg); \ 000000FC 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 00000100 710100EF SWI +369 5486 SUBPROC((void *)end_socket); \ 00000104 ........ LDR R0,??DataTable117 ;; end_socket \ 00000108 710100EF SWI +369 5487 SUBPROC((void *)ClearSendQ); \ 0000010C ........ LDR R0,??DataTable118 ;; ClearSendQ \ 00000110 710100EF SWI +369 5488 SUBPROC((void *)ElfKiller); \ 00000114 ........ LDR R0,??DataTable122 ;; ElfKiller \ 00000118 710100EF SWI +369 5489 } \ 0000011C 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000120 ........ DC32 FreeSmiles \ 00000124 ........ DC32 FreeXStatusesImg 5490 \ In segment CODE, align 4, keep-with-next 5491 void do_reconnect(void) 5492 { 5493 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable119 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 AC1290E5 LDR R1,[R0, #+684] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 5494 { 5495 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 481380E5 STR R1,[R0, #+840] 5496 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable115 ;; create_connect \ 00000020 710100EF SWI +369 5497 } 5498 } \ 00000024 0080BDE8 POP {PC} ;; return 5499 \ In segment CODE, align 4, keep-with-next 5500 void CheckDoubleRun(void) 5501 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 5502 int csm_id; 5503 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable119 ;; S_ICONS \ 00000008 7C0094E5 LDR R0,[R4, #+124] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1400000A BEQ ??CheckDoubleRun_0 5504 { 5505 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable121 ;; `?msg==MSG_IPC) 5537 { 5538 IPC_REQ *ipc; 5539 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 088094E5 LDR R8,[R4, #+8] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 8300000A BEQ ??maincsm_onmessage_2 5540 { 5541 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C 48A0A0E3 MOV R10,#+72 \ 00000040 70AE8AE3 ORR R10,R10,#0x700 \ 00000044 07108AE0 ADD R1,R10,R7 \ 00000048 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 7C00001A BNE ??maincsm_onmessage_2 5542 { 5543 switch (msg->submess) \ 00000054 041094E5 LDR R1,[R4, #+4] \ 00000058 040098E5 LDR R0,[R8, #+4] \ 0000005C 011041E2 SUB R1,R1,#+1 \ 00000060 040051E3 CMP R1,#+4 \ 00000064 7700008A BHI ??maincsm_onmessage_2 \ 00000068 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 0000006C 0120D2E7 LDRB R2,[R2, R1] \ 00000070 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000074 010A1116 DC8 +1,+10,+17,+22 \ 00000078 4F000000 DC8 +79,+0,+0,+0 5544 { 5545 case IPC_CHECK_DOUBLERUN: 5546 //Если приняли свое собственное сообщение, значит запускаем чекер 5547 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 0000007C 07108AE0 ADD R1,R10,R7 \ 00000080 010050E1 CMP R0,R1 \ 00000084 0200001A BNE ??maincsm_onmessage_4 \ 00000088 C8099FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000008C 710100EF SWI +369 \ 00000090 6C0000EA B ??maincsm_onmessage_2 5548 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 00000094 140295E5 LDR R0,[R5, #+532] \ 00000098 080088E5 STR R0,[R8, #+8] \ 0000009C 690000EA B ??maincsm_onmessage_2 5549 break; 5550 case IPC_SMILE_PROCESSED: 5551 //Только собственные смайлы ;) 5552 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000A0 07108AE0 ADD R1,R10,R7 \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 0100001A BNE ??maincsm_onmessage_7 \ 000000AC A8099FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000B0 710100EF SWI +369 5553 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000B4 ........ BL SMART_REDRAW \ 000000B8 620000EA B ??maincsm_onmessage_2 5554 break; 5555 case IPC_XSTATUSIMG_PROCESSED: 5556 //Только собственные иксстатусы ;) 5557 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_9: \ 000000BC 07108AE0 ADD R1,R10,R7 \ 000000C0 010050E1 CMP R0,R1 \ 000000C4 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000C8 90099FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000CC F7FFFFEA B ??maincsm_onmessage_8 5558 SMART_REDRAW(); 5559 break; 5560 case IPC_GAME: 5561 { 5562 5563 } 5564 break; 5565 case IPC_TENSECONDS: 5566 //Только свое сообщение 5567 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000D0 07108AE0 ADD R1,R10,R7 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 5A00001A BNE ??maincsm_onmessage_2 5568 { 5569 CLIST *t=(CLIST *)cltop; \ 000000DC B48295E5 LDR R8,[R5, #+692] 5570 int f=0; \ 000000E0 00A0A0E3 MOV R10,#+0 \ 000000E4 000058E3 CMP R8,#+0 \ 000000E8 2500000A BEQ ??maincsm_onmessage_11 5571 while(t) 5572 { 5573 if(t->just_now) \ ??maincsm_onmessage_12: \ 000000EC 680098E5 LDR R0,[R8, #+104] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0200000A BEQ ??maincsm_onmessage_13 5574 { 5575 if (!(--(t->just_now))) f=1; \ 000000F8 010050E2 SUBS R0,R0,#+1 \ 000000FC 680088E5 STR R0,[R8, #+104] \ 00000100 01A0A003 MOVEQ R10,#+1 5576 } 5577 if (t->isactive) \ ??maincsm_onmessage_13: \ 00000104 8C0098E5 LDR R0,[R8, #+140] \ 00000108 000050E3 CMP R0,#+0 \ 0000010C 0C00000A BEQ ??maincsm_onmessage_14 5578 { 5579 if (!(--(t->isactive))) \ 00000110 010050E2 SUBS R0,R0,#+1 \ 00000114 8C0088E5 STR R0,[R8, #+140] \ 00000118 0900001A BNE ??maincsm_onmessage_14 5580 { 5581 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 5582 if ((t->log)&&(!t->isunread)) \ 0000011C 800098E5 LDR R0,[R8, #+128] \ 00000120 01A0A0E3 MOV R10,#+1 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0500000A BEQ ??maincsm_onmessage_14 \ 0000012C 700098E5 LDR R0,[R8, #+112] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0200001A BNE ??maincsm_onmessage_14 5583 { 5584 FreeLOGQ(&t->log); \ 00000138 800088E2 ADD R0,R8,#+128 \ 0000013C ........ BL FreeLOGQ 5585 t->msg_count=0; \ 00000140 906088E5 STR R6,[R8, #+144] 5586 } 5587 } 5588 } 5589 t=(CLIST *)(t->next); \ ??maincsm_onmessage_14: \ 00000144 008098E5 LDR R8,[R8, #+0] 5590 } \ 00000148 000058E3 CMP R8,#+0 \ 0000014C E6FFFF1A BNE ??maincsm_onmessage_12 5591 if (f) \ 00000150 00005AE3 CMP R10,#+0 \ 00000154 0A00000A BEQ ??maincsm_onmessage_11 5592 { 5593 CLIST *oldt=NULL; 5594 if (contactlist_menu_id) \ 00000158 BC1295E5 LDR R1,[R5, #+700] \ 0000015C 0000A0E3 MOV R0,#+0 \ 00000160 000051E3 CMP R1,#+0 \ 00000164 0400000A BEQ ??maincsm_onmessage_15 5595 { 5596 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000168 BC0295E5 LDR R0,[R5, #+700] \ 0000016C 0010A0E3 MOV R1,#+0 \ 00000170 090200EF SWI +521 \ 00000174 8F0100EF SWI +399 \ 00000178 ........ _BLF FindContactByN,??FindContactByN??rA 5597 } 5598 RecountMenu(oldt,1); \ ??maincsm_onmessage_15: \ 0000017C 0110A0E3 MOV R1,#+1 \ 00000180 ........ BL RecountMenu 5599 } 5600 if (time_to_stop_t9) \ ??maincsm_onmessage_11: \ 00000184 580395E5 LDR R0,[R5, #+856] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 2D00000A BEQ ??maincsm_onmessage_2 5601 { 5602 if (!(--time_to_stop_t9)) \ 00000190 010050E2 SUBS R0,R0,#+1 \ 00000194 580385E5 STR R0,[R5, #+856] \ 00000198 2A00001A BNE ??maincsm_onmessage_2 5603 { 5604 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 0000019C C00295E5 LDR R0,[R5, #+704] \ 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 5605 } 5606 } 5607 } 5608 break; 5609 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 5610 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_16: \ 000001B4 080098E5 LDR R0,[R8, #+8] \ 000001B8 040090E5 LDR R0,[R0, #+4] \ 000001BC 1B0000EF SWI +27 \ 000001C0 00A0A0E1 MOV R10,R0 5611 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 000001C4 26008AE2 ADD R0,R10,#+38 \ 000001C8 140000EF SWI +20 \ 000001CC 00B0A0E1 MOV R11,R0 5612 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 000001D0 080098E5 LDR R0,[R8, #+8] 5613 msg->pkt.type=T_SENDMSG; 5614 msg->pkt.data_len=l; 5615 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 000001D4 0A20A0E1 MOV R2,R10 \ 000001D8 000090E5 LDR R0,[R0, #+0] \ 000001DC 00008BE5 STR R0,[R11, #+0] \ 000001E0 0200A0E3 MOV R0,#+2 \ 000001E4 B400CBE1 STRH R0,[R11, #+4] \ 000001E8 B6A0CBE1 STRH R10,[R11, #+6] \ 000001EC 080098E5 LDR R0,[R8, #+8] \ 000001F0 041090E5 LDR R1,[R0, #+4] \ 000001F4 08008BE2 ADD R0,R11,#+8 \ 000001F8 1E0100EF SWI +286 5616 //slientsend=1; 5617 if(strstr(msg->data,PASS)==0) \ 000001FC 8400A0E3 MOV R0,#+132 \ 00000200 600E80E3 ORR R0,R0,#0x600 \ 00000204 051080E0 ADD R1,R0,R5 \ 00000208 08008BE2 ADD R0,R11,#+8 \ 0000020C 180100EF SWI +280 \ 00000210 000050E3 CMP R0,#+0 \ 00000214 0400000A BEQ ??maincsm_onmessage_17 5618 { 5619 SENDMSGCOUNT++; //Номер сообщения 5620 SUBPROC((void *)SendAnswer,0,msg); 5621 } 5622 else 5623 { 5624 msg->pkt.data_len=40; \ 00000218 2800A0E3 MOV R0,#+40 \ 0000021C B600CBE1 STRH R0,[R11, #+6] 5625 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 00000220 6B1F87E2 ADD R1,R7,#+428 \ 00000224 08008BE2 ADD R0,R11,#+8 \ 00000228 1A0000EF SWI +26 5626 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_17: \ 0000022C 1C0295E5 LDR R0,[R5, #+540] 5627 SUBPROC((void *)SendAnswer,0,msg); \ 00000230 0B20A0E1 MOV R2,R11 \ 00000234 010080E2 ADD R0,R0,#+1 \ 00000238 1C0285E5 STR R0,[R5, #+540] \ 0000023C ........ LDR R0,??DataTable116 ;; SendAnswer \ 00000240 0010A0E3 MOV R1,#+0 \ 00000244 710100EF SWI +369 5628 } 5629 break; 5630 } 5631 } 5632 } 5633 } 5634 //Нарисуем иконочку моего статуса 5635 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 5636 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 00000248 068100EF SWI +33030 \ 0000024C 040090E5 LDR R0,[R0, #+4] 5637 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 00000250 0180A0E3 MOV R8,#+1 \ 00000254 080100EF SWI +264 \ 00000258 280090E5 LDR R0,[R0, #+40] \ 0000025C 350100EF SWI +309 \ 00000260 000050E3 CMP R0,#+0 \ 00000264 4A00000A BEQ ??maincsm_onmessage_18 5638 { 5639 GUI *igui=GetTopGUI(); 5640 if (igui) //И он существует \ 00000268 4D0100EF SWI +333 \ 0000026C 000050E3 CMP R0,#+0 \ 00000270 4800000A BEQ ??maincsm_onmessage_19 5641 { 5642 //#ifdef ELKA 5643 INC_show=0; \ 00000274 606385E5 STR R6,[R5, #+864] 5644 //#endif 5645 canvasdata=BuildCanvas(); //void * - belyj fon! \ 00000278 F18000EF SWI +33009 \ 0000027C E80185E5 STR R0,[R5, #+488] 5646 int icn; 5647 // if(ShowStatusIcon==0 || ShowStatusIcon==3) 5648 // { 5649 if(total_unread) \ 00000280 B00295E5 LDR R0,[R5, #+688] \ 00000284 000050E3 CMP R0,#+0 5650 icn=IS_MSG; \ 00000288 0D00A013 MOVNE R0,#+13 \ 0000028C 0500001A BNE ??maincsm_onmessage_20 5651 else 5652 { 5653 switch(connect_state) \ 00000290 8C0295E5 LDR R0,[R5, #+652] \ 00000294 000050E3 CMP R0,#+0 \ 00000298 0200000A BEQ ??maincsm_onmessage_20 \ 0000029C 030050E2 SUBS R0,R0,#+3 5654 { 5655 case 0: 5656 icn=IS_OFFLINE; break; 5657 case 3: 5658 icn=CurrentStatus; //IS_ONLINE; \ 000002A0 74029505 LDREQ R0,[R5, #+628] 5659 break; 5660 default: 5661 icn=IS_UNKNOWN; break; \ 000002A4 0E00A013 MOVNE R0,#+14 5662 } 5663 } 5664 //} 5665 //Тут трохи поменял 5666 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 5667 // __root const CFG_CBOX_ITEM cfgcbox9_1[5]={"On main screen","Iconbar","Iconbar except idle","All","Nothing"}; 5668 #ifdef ELKA 5669 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 5670 { 5671 #endif 5672 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 5673 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ ??maincsm_onmessage_20: \ 000002A8 00A185E0 ADD R10,R5,R0, LSL #+2 \ 000002AC 00009AE5 LDR R0,[R10, #+0] \ 000002B0 210000EF SWI +33 \ 000002B4 00B0A0E1 MOV R11,R0 \ 000002B8 00009AE5 LDR R0,[R10, #+0] \ 000002BC 220000EF SWI +34 \ 000002C0 541195E5 LDR R1,[R5, #+340] \ 000002C4 582195E5 LDR R2,[R5, #+344] \ 000002C8 0130A0E3 MOV R3,#+1 \ 000002CC 08002DE9 PUSH {R3} \ 000002D0 010080E0 ADD R0,R0,R1 \ 000002D4 02308BE0 ADD R3,R11,R2 \ 000002D8 013043E2 SUB R3,R3,#+1 \ 000002DC 08002DE9 PUSH {R3} \ 000002E0 013040E2 SUB R3,R0,#+1 \ 000002E4 E80195E5 LDR R0,[R5, #+488] \ 000002E8 250000EF SWI +37 5674 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 000002EC 00209AE5 LDR R2,[R10, #+0] \ 000002F0 581195E5 LDR R1,[R5, #+344] \ 000002F4 540195E5 LDR R0,[R5, #+340] \ 000002F8 230000EF SWI +35 5675 #ifdef ELKA 5676 } 5677 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 5678 #else 5679 if(show_xstatus==1) //kluchnik 26.03.08 \ 000002FC B80095E5 LDR R0,[R5, #+184] \ 00000300 08D08DE2 ADD SP,SP,#+8 \ 00000304 010050E3 CMP R0,#+1 \ 00000308 2200001A BNE ??maincsm_onmessage_19 5680 #endif 5681 { 5682 PNGTOP_DESC *pltop=PNG_TOP(); 5683 pltop->dyn_pltop=XStatusesImgList; 5684 DisableIDLETMR(); 5685 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 5686 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 0000030C 50A79FE5 LDR R10,??maincsm_onmessage_5+0xC ;; XStatusesIconArray \ 00000310 B98100EF SWI +33209 \ 00000314 ........ LDR R1,??DataTable113 ;; XStatusesImgList \ 00000318 001091E5 LDR R1,[R1, #+0] \ 0000031C 081080E5 STR R1,[R0, #+8] \ 00000320 7F0100EF SWI +383 \ 00000324 280295E5 LDR R0,[R5, #+552] \ 00000328 00109AE5 LDR R1,[R10, #+0] \ 0000032C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000330 210000EF SWI +33 \ 00000334 00109AE5 LDR R1,[R10, #+0] \ 00000338 00B0A0E1 MOV R11,R0 \ 0000033C 280295E5 LDR R0,[R5, #+552] \ 00000340 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000344 220000EF SWI +34 \ 00000348 5C1195E5 LDR R1,[R5, #+348] \ 0000034C 602195E5 LDR R2,[R5, #+352] \ 00000350 0130A0E3 MOV R3,#+1 \ 00000354 08002DE9 PUSH {R3} \ 00000358 010080E0 ADD R0,R0,R1 \ 0000035C 02308BE0 ADD R3,R11,R2 \ 00000360 013043E2 SUB R3,R3,#+1 \ 00000364 08002DE9 PUSH {R3} \ 00000368 013040E2 SUB R3,R0,#+1 \ 0000036C E80195E5 LDR R0,[R5, #+488] \ 00000370 250000EF SWI +37 5687 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 00000374 280295E5 LDR R0,[R5, #+552] \ 00000378 00109AE5 LDR R1,[R10, #+0] \ 0000037C 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 00000380 601195E5 LDR R1,[R5, #+352] \ 00000384 5C0195E5 LDR R0,[R5, #+348] \ 00000388 230000EF SWI +35 \ 0000038C 08D08DE2 ADD SP,SP,#+8 \ 00000390 000000EA B ??maincsm_onmessage_19 5688 } 5689 #ifdef EVILFOX 5690 DrawImg(IDLEICON_X-1,IDLEICON_Y-8,(int)"4:\\zbin\\naticq\\img\\naticq_ms.png"); 5691 #endif 5692 /* 5693 #ifdef EVILFOX 5694 #else 5695 if(strlen(fontpath)>5) 5696 { 5697 #endif 5698 */ 5699 5700 #ifdef ELKA 5701 if (total_unread) 5702 SLI_On(); 5703 #endif 5704 } 5705 } 5706 else 5707 { 5708 main_d=1; \ ??maincsm_onmessage_18: \ 00000394 E08185E5 STR R8,[R5, #+480] 5709 } 5710 } 5711 5712 //---------------------------------------------------// 5713 5714 if(msg->msg == MSG_IPC) //kluchnik 26.03.08 \ ??maincsm_onmessage_19: \ 00000398 F200D4E1 LDRSH R0,[R4, #+2] \ 0000039C 090050E1 CMP R0,R9 \ 000003A0 B000001A BNE ??maincsm_onmessage_21 5715 { 5716 IPC_REQ *ipc; 5717 if ((ipc=(IPC_REQ*)msg->data0)) \ 000003A4 080094E5 LDR R0,[R4, #+8] \ 000003A8 000050E3 CMP R0,#+0 \ 000003AC 0701000A BEQ ??maincsm_onmessage_22 5718 { 5719 if (strcmp_nocase(ipc->name_to,"IdleUpd")==0) \ 000003B0 000090E5 LDR R0,[R0, #+0] \ 000003B4 661F87E2 ADD R1,R7,#+408 \ 000003B8 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000003BC 000050E3 CMP R0,#+0 5720 { 5721 switch (msg->submess) \ 000003C0 04009405 LDREQ R0,[R4, #+4] \ 000003C4 00005003 CMPEQ R0,#+0 \ 000003C8 A600001A BNE ??maincsm_onmessage_21 5722 { 5723 case 0: 5724 { 5725 if (main_d==1) \ 000003CC E00195E5 LDR R0,[R5, #+480] \ 000003D0 010050E3 CMP R0,#+1 \ 000003D4 8000001A BNE ??maincsm_onmessage_23 5726 { 5727 ClearScreen(); \ 000003D8 ........ _BLF ClearScreen,??ClearScreen??rA 5728 if(Is_SMARTCPU_On) \ 000003DC 000295E5 LDR R0,[R5, #+512] \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 7B00000A BEQ ??maincsm_onmessage_24 5729 { 5730 if(fonto==1) \ 000003E8 080195E5 LDR R0,[R5, #+264] \ 000003EC 0C1195E5 LDR R1,[R5, #+268] \ 000003F0 E43195E5 LDR R3,[R5, #+484] \ 000003F4 D4C095E5 LDR R12,[R5, #+212] \ 000003F8 CCE095E5 LDR LR,[R5, #+204] \ 000003FC D490A0E3 MOV R9,#+212 \ 00000400 489D89E3 ORR R9,R9,#0x1200 \ 00000404 059089E0 ADD R9,R9,R5 \ 00000408 08908DE5 STR R9,[SP, #+8] \ 0000040C 00102DE9 PUSH {R12} \ 00000410 A420A0E3 MOV R2,#+164 \ 00000414 482D82E3 ORR R2,R2,#0x1200 \ 00000418 059082E0 ADD R9,R2,R5 \ 0000041C 302042E2 SUB R2,R2,#+48 \ 00000420 05A082E0 ADD R10,R2,R5 \ 00000424 3020C2E3 BIC R2,R2,#0x30 \ 00000428 05B082E0 ADD R11,R2,R5 \ 0000042C 302042E2 SUB R2,R2,#+48 \ 00000430 052082E0 ADD R2,R2,R5 \ 00000434 01005EE3 CMP LR,#+1 \ 00000438 2E00001A BNE ??maincsm_onmessage_25 5731 { 5732 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 0000043C 01C0A0E3 MOV R12,#+1 \ 00000440 00102DE9 PUSH {R12} \ 00000444 ........ _BLF PrintField,??PrintField??rA 5733 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 00000448 D40095E5 LDR R0,[R5, #+212] \ 0000044C 0B20A0E1 MOV R2,R11 \ 00000450 01002DE9 PUSH {R0} \ 00000454 CC0095E5 LDR R0,[R5, #+204] \ 00000458 01002DE9 PUSH {R0} \ 0000045C EC1195E5 LDR R1,[R5, #+492] \ 00000460 E43195E5 LDR R3,[R5, #+484] \ 00000464 0C0195E5 LDR R0,[R5, #+268] \ 00000468 001081E0 ADD R1,R1,R0 \ 0000046C 080195E5 LDR R0,[R5, #+264] \ 00000470 ........ _BLF PrintField,??PrintField??rA 5734 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 00000474 D40095E5 LDR R0,[R5, #+212] \ 00000478 0A20A0E1 MOV R2,R10 \ 0000047C 01002DE9 PUSH {R0} \ 00000480 CC0095E5 LDR R0,[R5, #+204] \ 00000484 01002DE9 PUSH {R0} \ 00000488 EC1195E5 LDR R1,[R5, #+492] \ 0000048C E43195E5 LDR R3,[R5, #+484] \ 00000490 0C0195E5 LDR R0,[R5, #+268] \ 00000494 811080E0 ADD R1,R0,R1, LSL #+1 \ 00000498 080195E5 LDR R0,[R5, #+264] \ 0000049C ........ _BLF PrintField,??PrintField??rA 5735 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 000004A0 D40095E5 LDR R0,[R5, #+212] \ 000004A4 0920A0E1 MOV R2,R9 \ 000004A8 01002DE9 PUSH {R0} \ 000004AC CC0095E5 LDR R0,[R5, #+204] \ 000004B0 01002DE9 PUSH {R0} \ 000004B4 EC1195E5 LDR R1,[R5, #+492] \ 000004B8 E43195E5 LDR R3,[R5, #+484] \ 000004BC 0C0195E5 LDR R0,[R5, #+268] \ 000004C0 811081E0 ADD R1,R1,R1, LSL #+1 \ 000004C4 001081E0 ADD R1,R1,R0 \ 000004C8 080195E5 LDR R0,[R5, #+264] \ 000004CC ........ _BLF PrintField,??PrintField??rA 5736 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 000004D0 D40095E5 LDR R0,[R5, #+212] \ 000004D4 01002DE9 PUSH {R0} \ 000004D8 CC0095E5 LDR R0,[R5, #+204] \ 000004DC 01002DE9 PUSH {R0} \ 000004E0 EC1195E5 LDR R1,[R5, #+492] \ 000004E4 E43195E5 LDR R3,[R5, #+484] \ 000004E8 30209DE5 LDR R2,[SP, #+48] \ 000004EC 0C0195E5 LDR R0,[R5, #+268] \ 000004F0 011180E0 ADD R1,R0,R1, LSL #+2 \ 000004F4 340000EA B ??maincsm_onmessage_26 5737 } 5738 else 5739 { 5740 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_25: \ 000004F8 00402DE9 PUSH {LR} \ 000004FC ........ _BLF PrintField,??PrintField??rA 5741 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000500 EC0195E5 LDR R0,[R5, #+492] \ 00000504 C50100EF SWI +453 \ 00000508 D41095E5 LDR R1,[R5, #+212] \ 0000050C 0B20A0E1 MOV R2,R11 \ 00000510 02002DE9 PUSH {R1} \ 00000514 CC1095E5 LDR R1,[R5, #+204] \ 00000518 02002DE9 PUSH {R1} \ 0000051C E43195E5 LDR R3,[R5, #+484] \ 00000520 0C1195E5 LDR R1,[R5, #+268] \ 00000524 010080E0 ADD R0,R0,R1 \ 00000528 011080E2 ADD R1,R0,#+1 \ 0000052C 080195E5 LDR R0,[R5, #+264] \ 00000530 ........ _BLF PrintField,??PrintField??rA 5742 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 00000534 EC0195E5 LDR R0,[R5, #+492] \ 00000538 C50100EF SWI +453 \ 0000053C D41095E5 LDR R1,[R5, #+212] \ 00000540 0A20A0E1 MOV R2,R10 \ 00000544 02002DE9 PUSH {R1} \ 00000548 CC1095E5 LDR R1,[R5, #+204] \ 0000054C 02002DE9 PUSH {R1} \ 00000550 E43195E5 LDR R3,[R5, #+484] \ 00000554 0C1195E5 LDR R1,[R5, #+268] \ 00000558 800081E0 ADD R0,R1,R0, LSL #+1 \ 0000055C 021080E2 ADD R1,R0,#+2 \ 00000560 080195E5 LDR R0,[R5, #+264] \ 00000564 ........ _BLF PrintField,??PrintField??rA 5743 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 00000568 EC0195E5 LDR R0,[R5, #+492] \ 0000056C C50100EF SWI +453 \ 00000570 D41095E5 LDR R1,[R5, #+212] \ 00000574 0920A0E1 MOV R2,R9 \ 00000578 02002DE9 PUSH {R1} \ 0000057C CC1095E5 LDR R1,[R5, #+204] \ 00000580 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000584 02002DE9 PUSH {R1} \ 00000588 E43195E5 LDR R3,[R5, #+484] \ 0000058C 0C1195E5 LDR R1,[R5, #+268] \ 00000590 010080E0 ADD R0,R0,R1 \ 00000594 031080E2 ADD R1,R0,#+3 \ 00000598 080195E5 LDR R0,[R5, #+264] \ 0000059C ........ _BLF PrintField,??PrintField??rA 5744 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 000005A0 EC0195E5 LDR R0,[R5, #+492] \ 000005A4 C50100EF SWI +453 \ 000005A8 D41095E5 LDR R1,[R5, #+212] \ 000005AC 02002DE9 PUSH {R1} \ 000005B0 CC1095E5 LDR R1,[R5, #+204] \ 000005B4 02002DE9 PUSH {R1} \ 000005B8 E43195E5 LDR R3,[R5, #+484] \ 000005BC 30209DE5 LDR R2,[SP, #+48] \ 000005C0 0C1195E5 LDR R1,[R5, #+268] \ 000005C4 000181E0 ADD R0,R1,R0, LSL #+2 \ 000005C8 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_26: \ 000005CC 080195E5 LDR R0,[R5, #+264] \ 000005D0 ........ _BLF PrintField,??PrintField??rA \ 000005D4 28D08DE2 ADD SP,SP,#+40 5745 } 5746 } 5747 main_d=0; \ ??maincsm_onmessage_24: \ 000005D8 E06185E5 STR R6,[R5, #+480] 5748 } 5749 if(Is_UPTIME_On) \ ??maincsm_onmessage_23: \ 000005DC 440295E5 LDR R0,[R5, #+580] \ 000005E0 000050E3 CMP R0,#+0 \ 000005E4 0100000A BEQ ??maincsm_onmessage_27 5750 DrawOnlineTime(canvasdata); \ 000005E8 E80195E5 LDR R0,[R5, #+488] \ 000005EC ........ BL DrawOnlineTime 5751 if(Is_PING_On) \ ??maincsm_onmessage_27: \ 000005F0 FC0195E5 LDR R0,[R5, #+508] \ 000005F4 000050E3 CMP R0,#+0 \ 000005F8 0100000A BEQ ??maincsm_onmessage_28 5752 DrawPing(canvasdata); \ 000005FC E80195E5 LDR R0,[R5, #+488] \ 00000600 ........ BL DrawPing 5753 5754 if(Auto_Status && showAwayIdle) \ ??maincsm_onmessage_28: \ 00000604 F80095E5 LDR R0,[R5, #+248] \ 00000608 000050E3 CMP R0,#+0 \ 0000060C EC009515 LDRNE R0,[R5, #+236] \ 00000610 00005013 CMPNE R0,#+0 \ 00000614 0100000A BEQ ??maincsm_onmessage_29 5755 DrawAutoMSG(canvasdata); \ 00000618 E80195E5 LDR R0,[R5, #+488] \ 0000061C ........ BL DrawAutoMSG 5756 if(Is_Unread_On) \ ??maincsm_onmessage_29: \ 00000620 DC0095E5 LDR R0,[R5, #+220] \ 00000624 000050E3 CMP R0,#+0 \ 00000628 0E00000A BEQ ??maincsm_onmessage_21 5757 { 5758 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 0000062C 102295E5 LDR R2,[R5, #+528] \ 00000630 B19EA0E3 MOV R9,#+2832 \ 00000634 681F87E2 ADD R1,R7,#+416 \ 00000638 050089E0 ADD R0,R9,R5 \ 0000063C 160000EF SWI +22 5759 #ifdef EVILFOX 5760 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, space); 5761 #else 5762 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 00000640 D00095E5 LDR R0,[R5, #+208] \ 00000644 052089E0 ADD R2,R9,R5 \ 00000648 01002DE9 PUSH {R0} \ 0000064C CC0095E5 LDR R0,[R5, #+204] \ 00000650 01002DE9 PUSH {R0} \ 00000654 E43195E5 LDR R3,[R5, #+484] \ 00000658 B41095E5 LDR R1,[R5, #+180] \ 0000065C B00095E5 LDR R0,[R5, #+176] \ 00000660 ........ _BLF PrintField,??PrintField??rA \ 00000664 08D08DE2 ADD SP,SP,#+8 5763 #endif 5764 } 5765 } 5766 } 5767 } 5768 } 5769 } 5770 5771 //-----------------------------------------------------------// 5772 5773 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_21: \ 00000668 F200D4E1 LDRSH R0,[R4, #+2] \ 0000066C FC1F88E3 ORR R1,R8,#0x3F0 \ 00000670 010050E1 CMP R0,R1 \ 00000674 3200001A BNE ??maincsm_onmessage_30 5774 { 5775 //if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) 5776 #ifdef NEWSGOLD 5777 if( (strcmp_nocase("4:\\zbin\\etc\\NATICQ.bcfg",(char *)msg->data0)==0) 5778 || (strcmp_nocase("4:\\zbin\\etc\\NATICQMod.bcfg",(char *)msg->data0)==0)) 5779 #else 5780 if( (strcmp_nocase("0:\\zbin\\etc\\NATICQ.bcfg",(char *)msg->data0)==0) 5781 || (strcmp_nocase("0:\\zbin\\etc\\NATICQMod.bcfg",(char *)msg->data0)==0)) \ 00000678 081094E5 LDR R1,[R4, #+8] \ 0000067C 6B0E87E2 ADD R0,R7,#+1712 \ 00000680 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000684 000050E3 CMP R0,#+0 \ 00000688 0600000A BEQ ??maincsm_onmessage_31 \ 0000068C 081094E5 LDR R1,[R4, #+8] \ 00000690 9400A0E3 MOV R0,#+148 \ 00000694 600E80E3 ORR R0,R0,#0x600 \ 00000698 070080E0 ADD R0,R0,R7 \ 0000069C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 000006A0 000050E3 CMP R0,#+0 \ 000006A4 2600001A BNE ??maincsm_onmessage_30 5782 #endif 5783 { 5784 ShowMSG(1,(int)"NatICQ config updated!"); \ ??maincsm_onmessage_31: \ 000006A8 541087E2 ADD R1,R7,#+84 \ 000006AC 0100A0E3 MOV R0,#+1 \ 000006B0 480100EF SWI +328 5785 // InitConfig(); 5786 UpdateConfig(); \ 000006B4 ........ BL UpdateConfig 5787 #ifdef NEWSGOLD 5788 initTags(); 5789 #endif 5790 PrintLibInit(1); \ 000006B8 0800A0E1 MOV R0,R8 \ 000006BC ........ _BLF PrintLibInit,??PrintLibInit??rA 5791 FontPathInit((char *)fontpath, 1); \ 000006C0 519EA0E3 MOV R9,#+1296 \ 000006C4 0810A0E1 MOV R1,R8 \ 000006C8 050089E0 ADD R0,R9,R5 \ 000006CC ........ _BLF FontPathInit,??FontPathInit??rA 5792 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 000006D0 0820A0E1 MOV R2,R8 \ 000006D4 EA0F82E3 ORR R0,R2,#0x3A8 \ 000006D8 051080E0 ADD R1,R0,R5 \ 000006DC EA0F85E2 ADD R0,R5,#+936 \ 000006E0 ........ _BLF SetFontColor,??SetFontColor??rA 5793 //#ifdef ELKA 5794 if(fonto==1) \ 000006E4 CC0095E5 LDR R0,[R5, #+204] \ 000006E8 010050E3 CMP R0,#+1 \ 000006EC 0B00001A BNE ??maincsm_onmessage_32 5795 { 5796 char *heght=malloc(64); \ 000006F0 4000A0E3 MOV R0,#+64 \ 000006F4 140000EF SWI +20 \ 000006F8 00A0A0E1 MOV R10,R0 5797 sprintf(heght, "%s2240.png", fontpath); \ 000006FC 052089E0 ADD R2,R9,R5 \ 00000700 6C1087E2 ADD R1,R7,#+108 \ 00000704 160000EF SWI +22 5798 paused_height=GetImgHeight((int)heght); \ 00000708 0A00A0E1 MOV R0,R10 \ 0000070C 210000EF SWI +33 \ 00000710 EC0185E5 STR R0,[R5, #+492] 5799 mfree(heght); \ 00000714 0A00A0E1 MOV R0,R10 \ 00000718 150000EF SWI +21 \ 0000071C 010000EA B ??maincsm_onmessage_33 5800 } 5801 else 5802 paused_height=fonto-100; \ ??maincsm_onmessage_32: \ 00000720 640040E2 SUB R0,R0,#+100 \ 00000724 EC0185E5 STR R0,[R5, #+492] 5803 //#endif 5804 free_ICONS(); \ ??maincsm_onmessage_33: \ 00000728 ........ BL free_ICONS 5805 setup_ICONS(); \ 0000072C ........ BL setup_ICONS 5806 ResortCL(); \ 00000730 ........ _BLF ResortCL,??ResortCL??rA 5807 RecountMenu(NULL,1); \ 00000734 0110A0E3 MOV R1,#+1 \ 00000738 0600A0E1 MOV R0,R6 \ 0000073C ........ BL RecountMenu 5808 init_time_zone(); \ 00000740 ........ BL init_time_zone 5809 // InitSmiles(); 5810 } 5811 } 5812 5813 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_30: \ 00000744 F200D4E1 LDRSH R0,[R4, #+2] \ 00000748 980050E3 CMP R0,#+152 \ 0000074C 0E00001A BNE ??maincsm_onmessage_34 5814 { 5815 if ((int)msg->data0==csm->gui_id) \ 00000750 10109DE5 LDR R1,[SP, #+16] \ 00000754 080094E5 LDR R0,[R4, #+8] \ 00000758 281091E5 LDR R1,[R1, #+40] \ 0000075C 010050E1 CMP R0,R1 5816 { 5817 csm->csm.state=-3; \ 00000760 10009D05 LDREQ R0,[SP, #+16] \ 00000764 0210E003 MVNEQ R1,#+2 \ 00000768 10108005 STREQ R1,[R0, #+16] 5818 } 5819 if ((int)msg->data0==contactlist_menu_id) \ 0000076C 080094E5 LDR R0,[R4, #+8] \ 00000770 BC1295E5 LDR R1,[R5, #+700] \ 00000774 010050E1 CMP R0,R1 5820 { 5821 contactlist_menu_id=0; \ 00000778 BC628505 STREQ R6,[R5, #+700] 5822 prev_clmenu_itemcount=0; \ 0000077C C4628505 STREQ R6,[R5, #+708] 5823 } 5824 if ((int)msg->data0==edchat_id) \ 00000780 C01295E5 LDR R1,[R5, #+704] \ 00000784 010050E1 CMP R0,R1 5825 { 5826 edchat_id=0; \ 00000788 C0628505 STREQ R6,[R5, #+704] 5827 } 5828 } 5829 5830 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_34: \ 0000078C F200D4E1 LDRSH R0,[R4, #+2] \ 00000790 FC0F50E3 CMP R0,#+1008 \ 00000794 0D00001A BNE ??maincsm_onmessage_22 5831 { 5832 switch((int)msg->data0) \ 00000798 080094E5 LDR R0,[R4, #+8] \ 0000079C 0C1094E5 LDR R1,[R4, #+12] \ 000007A0 ........ LDR R9,??DataTable114 ;; do_reconnect \ 000007A4 F840A0E3 MOV R4,#+248 \ 000007A8 F04E84E3 ORR R4,R4,#0xF00 \ 000007AC 48AFC4E3 BIC R10,R4,#0x120 \ 000007B0 802050E2 SUBS R2,R0,#+128 \ 000007B4 0800000A BEQ ??maincsm_onmessage_35 \ 000007B8 022052E2 SUBS R2,R2,#+2 \ 000007BC 0200000A BEQ ??maincsm_onmessage_36 \ 000007C0 122052E2 SUBS R2,R2,#+18 \ 000007C4 1100000A BEQ ??maincsm_onmessage_37 \ 000007C8 1B0000EA B ??maincsm_onmessage_38 5833 { 5834 case LMAN_DISCONNECT_IND: 5835 is_gprs_online=0; \ ??maincsm_onmessage_36: \ 000007CC AC6285E5 STR R6,[R5, #+684] 5836 return(1); \ ??maincsm_onmessage_22: \ 000007D0 0100A0E3 MOV R0,#+1 \ 000007D4 14D08DE2 ADD SP,SP,#+20 \ 000007D8 F08FBDE8 POP {R4-R11,PC} ;; return 5837 case LMAN_CONNECT_CNF: 5838 vibra_count=1; \ ??maincsm_onmessage_35: \ 000007DC 7C8285E5 STR R8,[R5, #+636] 5839 start_vibra(); \ 000007E0 ........ BL start_vibra 5840 is_gprs_online=1; \ 000007E4 AC8285E5 STR R8,[R5, #+684] 5841 strcpy(logmsg,LG_GRGPRSUP); \ 000007E8 781087E2 ADD R1,R7,#+120 \ 000007EC 05008AE0 ADD R0,R10,R5 \ 000007F0 1A0000EF SWI +26 5842 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000007F4 DC0195E5 LDR R0,[R5, #+476] \ 000007F8 0920A0E1 MOV R2,R9 \ 000007FC D830A0E3 MOV R3,#+216 \ 00000800 930001E0 MUL R1,R3,R0 \ 00000804 050084E0 ADD R0,R4,R5 \ 00000808 4D0000EF SWI +77 5843 return(1); \ 0000080C 070000EA B ??maincsm_onmessage_39 5844 case ENIP_DNR_HOST_BY_NAME: 5845 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_37: \ 00000810 440395E5 LDR R0,[R5, #+836] \ 00000814 000051E1 CMP R1,R0 \ 00000818 ECFFFF1A BNE ??maincsm_onmessage_22 5846 { 5847 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 0000081C 480395E5 LDR R0,[R5, #+840] \ 00000820 000050E3 CMP R0,#+0 \ 00000824 E9FFFF0A BEQ ??maincsm_onmessage_22 \ 00000828 ........ LDR R0,??DataTable115 ;; create_connect \ ??maincsm_onmessage_40: \ 0000082C 710100EF SWI +369 5848 } 5849 return(1); \ ??maincsm_onmessage_39: \ 00000830 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_41: \ 00000834 14D08DE2 ADD SP,SP,#+20 \ 00000838 F08FBDE8 POP {R4-R11,PC} 5850 } 5851 if ((int)msg->data1==sock) \ ??maincsm_onmessage_38: \ 0000083C 902295E5 LDR R2,[R5, #+656] \ 00000840 020051E1 CMP R1,R2 \ 00000844 E1FFFF1A BNE ??maincsm_onmessage_22 5852 { 5853 //Если наш сокет 5854 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000848 201EA0E1 LSR R1,R0,#+28 \ 0000084C 0A0051E3 CMP R1,#+10 \ 00000850 0200001A BNE ??maincsm_onmessage_42 5855 { 5856 //Принят пакет 5857 ProcessPacket((TPKT *)msg->data0); \ 00000854 ........ BL ProcessPacket 5858 return(0); \ 00000858 0000A0E3 MOV R0,#+0 \ 0000085C F4FFFFEA B ??maincsm_onmessage_41 5859 } 5860 switch((int)msg->data0) \ ??maincsm_onmessage_42: \ 00000860 8C1295E5 LDR R1,[R5, #+652] \ 00000864 8A0040E2 SUB R0,R0,#+138 \ 00000868 050050E3 CMP R0,#+5 \ 0000086C D7FFFF8A BHI ??maincsm_onmessage_22 \ 00000870 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000874 D02092E1 LDRSB R2,[R2, R0] \ 00000878 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 0000087C 43433E01 DC8 +67,+67,+62,+1 \ 00000880 4C480000 DC8 +76,+72,+0,+0 5861 { 5862 case ENIP_SOCK_CONNECTED: 5863 if (connect_state==1) \ ??maincsm_onmessage_43: \ 00000884 010051E3 CMP R1,#+1 \ 00000888 3600001A BNE ??maincsm_onmessage_44 5864 { 5865 if(VIBR_ON_CONNECT) \ 0000088C 280195E5 LDR R0,[R5, #+296] \ 00000890 000050E3 CMP R0,#+0 5866 vibra_count=2; \ 00000894 0200A013 MOVNE R0,#+2 \ 00000898 7C028515 STRNE R0,[R5, #+636] 5867 else 5868 vibra_count=1; \ 0000089C 7C828505 STREQ R8,[R5, #+636] 5869 start_vibra(); \ 000008A0 ........ BL start_vibra 5870 //Соединение установленно, посылаем пакет login 5871 strcpy(logmsg, LG_GRTRYLOGIN); \ 000008A4 901087E2 ADD R1,R7,#+144 \ 000008A8 05008AE0 ADD R0,R10,R5 \ 000008AC 1A0000EF SWI +26 5872 { 5873 int i=strlen(PASS); \ 000008B0 8400A0E3 MOV R0,#+132 \ 000008B4 600E80E3 ORR R0,R0,#0x600 \ 000008B8 050080E0 ADD R0,R0,R5 \ 000008BC 1B0000EF SWI +27 \ 000008C0 0040A0E1 MOV R4,R0 5874 TPKT *p=malloc(sizeof(PKT)+i); \ 000008C4 080084E2 ADD R0,R4,#+8 \ 000008C8 140000EF SWI +20 \ 000008CC 0090A0E1 MOV R9,R0 5875 p->pkt.uin=UIN; \ 000008D0 240195E5 LDR R0,[R5, #+292] 5876 p->pkt.type=T_REQLOGIN; 5877 p->pkt.data_len=i; 5878 memcpy(p->data,PASS,i); \ 000008D4 0420A0E1 MOV R2,R4 \ 000008D8 000089E5 STR R0,[R9, #+0] \ 000008DC B480C9E1 STRH R8,[R9, #+4] \ 000008E0 B640C9E1 STRH R4,[R9, #+6] \ 000008E4 8400A0E3 MOV R0,#+132 \ 000008E8 600E80E3 ORR R0,R0,#0x600 \ 000008EC 051080E0 ADD R1,R0,R5 \ 000008F0 080089E2 ADD R0,R9,#+8 \ 000008F4 1E0100EF SWI +286 5879 SUBPROC((void *)send_login,0,p); \ 000008F8 68019FE5 LDR R0,??maincsm_onmessage_5+0x10 ;; send_login \ 000008FC 0920A0E1 MOV R2,R9 \ 00000900 0010A0E3 MOV R1,#+0 \ 00000904 710100EF SWI +369 5880 } 5881 GROUP_CACHE=0; \ 00000908 B86285E5 STR R6,[R5, #+696] 5882 SENDMSGCOUNT=0; //Начинаем отсчет \ 0000090C 1C6285E5 STR R6,[R5, #+540] 5883 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 00000910 0600A0E1 MOV R0,R6 \ 00000914 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000918 000050E3 CMP R0,#+0 \ 0000091C 0100001A BNE ??maincsm_onmessage_45 \ 00000920 A01087E2 ADD R1,R7,#+160 \ 00000924 ........ _BLF AddGroup,??AddGroup??rA 5884 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_45: \ 00000928 240195E5 LDR R0,[R5, #+292] \ 0000092C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000930 000050E3 CMP R0,#+0 \ 00000934 0700001A BNE ??maincsm_onmessage_46 \ 00000938 C80095E5 LDR R0,[R5, #+200] \ 0000093C 000050E3 CMP R0,#+0 \ 00000940 0400000A BEQ ??maincsm_onmessage_46 \ 00000944 240195E5 LDR R0,[R5, #+292] \ 00000948 0130A0E3 MOV R3,#+1 \ 0000094C 0620A0E1 MOV R2,R6 \ 00000950 AC1087E2 ADD R1,R7,#+172 \ 00000954 ........ _BLF AddContact,??AddContact??rA 5885 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_46: \ 00000958 0C019FE5 LDR R0,??maincsm_onmessage_5+0x14 ;; LoadLocalCL \ 0000095C 710100EF SWI +369 5886 SMART_REDRAW(); \ 00000960 ........ BL SMART_REDRAW \ 00000964 B1FFFFEA B ??maincsm_onmessage_39 5887 } 5888 else 5889 { 5890 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_44: \ 00000968 B81087E2 ADD R1,R7,#+184 \ ??maincsm_onmessage_47: \ 0000096C 0100A0E3 MOV R0,#+1 \ 00000970 480100EF SWI +328 \ 00000974 ADFFFFEA B ??maincsm_onmessage_39 5891 } 5892 break; 5893 case ENIP_SOCK_DATA_READ: 5894 if (connect_state>=2) \ ??maincsm_onmessage_48: \ 00000978 020051E3 CMP R1,#+2 5895 { 5896 //Если посылали send 5897 SUBPROC((void *)get_answer); \ 0000097C EC009FA5 LDRGE R0,??maincsm_onmessage_5+0x18 ;; get_answer \ 00000980 A9FFFFAA BGE ??maincsm_onmessage_40 5898 //SMART_REDRAW(); 5899 } 5900 else 5901 { 5902 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000984 E01087E2 ADD R1,R7,#+224 \ 00000988 F7FFFFEA B ??maincsm_onmessage_47 5903 } 5904 break; 5905 case ENIP_BUFFER_FREE: 5906 case ENIP_BUFFER_FREE1: 5907 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_49: \ 0000098C ........ LDR R0,??DataTable116 ;; SendAnswer \ 00000990 0020A0E3 MOV R2,#+0 \ 00000994 0210A0E1 MOV R1,R2 \ 00000998 710100EF SWI +369 \ 0000099C A3FFFFEA B ??maincsm_onmessage_39 5908 break; 5909 case ENIP_SOCK_REMOTE_CLOSED: 5910 //Закрыт со стороны сервера 5911 if (connect_state) \ ??maincsm_onmessage_50: \ 000009A0 000051E3 CMP R1,#+0 \ 000009A4 89FFFF0A BEQ ??maincsm_onmessage_22 5912 SUBPROC((void *)end_socket); \ 000009A8 ........ LDR R0,??DataTable117 ;; end_socket \ 000009AC 9EFFFFEA B ??maincsm_onmessage_40 5913 break; 5914 case ENIP_SOCK_CLOSED: 5915 //strcpy(logmsg, "No connection"); 5916 //Dump not received 5917 /* if (RXstate>(-(int)sizeof(PKT))) 5918 { 5919 unsigned int err; 5920 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 5921 if (f!=-1) 5922 { 5923 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 5924 fclose(f,&err); 5925 } 5926 }*/ 5927 FillAllOffline(); \ ??maincsm_onmessage_51: \ 000009B0 ........ _BLF FillAllOffline,??FillAllOffline??rA 5928 RecountMenu(NULL,1); \ 000009B4 0110A0E3 MOV R1,#+1 \ 000009B8 0600A0E1 MOV R0,R6 \ 000009BC ........ BL RecountMenu 5929 connect_state=0; 5930 sock=-1; \ 000009C0 0600E0E1 MVN R0,R6 \ 000009C4 900285E5 STR R0,[R5, #+656] 5931 if(VIBR_ON_CONNECT) \ 000009C8 280195E5 LDR R0,[R5, #+296] \ 000009CC 8C6285E5 STR R6,[R5, #+652] \ 000009D0 000050E3 CMP R0,#+0 5932 vibra_count=4; \ 000009D4 0400A013 MOVNE R0,#+4 \ 000009D8 7C028515 STRNE R0,[R5, #+636] 5933 else 5934 vibra_count=1; \ 000009DC 7C828505 STREQ R8,[R5, #+636] 5935 5936 start_vibra(); \ 000009E0 ........ BL start_vibra 5937 if (sendq_p) \ 000009E4 A80295E5 LDR R0,[R5, #+680] \ 000009E8 000050E3 CMP R0,#+0 \ 000009EC 0400000A BEQ ??maincsm_onmessage_52 5938 { 5939 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 000009F0 A43295E5 LDR R3,[R5, #+676] \ 000009F4 412F87E2 ADD R2,R7,#+260 \ 000009F8 FF10A0E3 MOV R1,#+255 \ 000009FC 05008AE0 ADD R0,R10,R5 \ 00000A00 1B0100EF SWI +283 5940 } 5941 SMART_REDRAW(); \ ??maincsm_onmessage_52: \ 00000A04 ........ BL SMART_REDRAW 5942 SUBPROC((void *)ClearSendQ); \ 00000A08 ........ LDR R0,??DataTable118 ;; ClearSendQ \ 00000A0C 710100EF SWI +369 5943 #ifdef EVILFOX 5944 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 5945 #else 5946 if (!disautorecconect) \ 00000A10 640295E5 LDR R0,[R5, #+612] \ 00000A14 000050E3 CMP R0,#+0 \ 00000A18 6CFFFF1A BNE ??maincsm_onmessage_22 5947 { 5948 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000A1C DC0195E5 LDR R0,[R5, #+476] \ 00000A20 0920A0E1 MOV R2,R9 \ 00000A24 D830A0E3 MOV R3,#+216 \ 00000A28 930001E0 MUL R1,R3,R0 \ 00000A2C 050084E0 ADD R0,R4,R5 \ 00000A30 4D0000EF SWI +77 5949 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000A34 DC0195E5 LDR R0,[R5, #+476] \ 00000A38 05308AE0 ADD R3,R10,R5 \ 00000A3C 01002DE9 PUSH {R0} \ 00000A40 4A2F87E2 ADD R2,R7,#+296 \ 00000A44 FF10A0E3 MOV R1,#+255 \ 00000A48 05008AE0 ADD R0,R10,R5 \ 00000A4C 1B0100EF SWI +283 \ 00000A50 04D08DE2 ADD SP,SP,#+4 \ 00000A54 75FFFFEA B ??maincsm_onmessage_39 \ ??maincsm_onmessage_5: \ 00000A58 ........ DC32 CheckDoubleRun \ 00000A5C ........ DC32 ProcessNextSmile \ 00000A60 ........ DC32 ProcessNextXStatImg \ 00000A64 ........ DC32 XStatusesIconArray \ 00000A68 ........ DC32 send_login \ 00000A6C ........ DC32 LoadLocalCL \ 00000A70 ........ DC32 get_answer 5950 } 5951 5952 #endif 5953 break; 5954 } 5955 } 5956 } 5957 return(1); 5958 } 5959 5960 5961 //-------------------- ICON IN ICONBAR ------------// 5962 5963 //kluchnik 26.03.08 5964 #ifdef ELKA 5965 #pragma swi_number=0x27 5966 __swi __arm void AddIconToIconBar(int pic, short *num); 5967 5968 5969 void addIconBar(short* num) 5970 { 5971 int icn; 5972 if(ShowStatusIcon==1 || ShowStatusIcon==3) 5973 { 5974 if(total_unread) 5975 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 5976 else 5977 { 5978 switch(connect_state) 5979 { 5980 case 0: 5981 icn=IS_OFFLINE; break; 5982 case 3: 5983 icn=CurrentStatus; //IS_ONLINE; 5984 break; 5985 default: 5986 icn=IS_UNKNOWN; break; 5987 } 5988 AddIconToIconBar(NumStatusToIconBar + icn, num); 5989 } 5990 } 5991 else 5992 { 5993 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 5994 { 5995 if(!(IsIdleUiOnTop())) 5996 { 5997 if(total_unread) 5998 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 5999 else 6000 { 6001 switch(connect_state) 6002 { 6003 case 0: 6004 icn=IS_OFFLINE; break; 6005 case 3: 6006 icn=CurrentStatus; //IS_ONLINE; 6007 break; 6008 default: 6009 icn=IS_UNKNOWN; break; 6010 } 6011 AddIconToIconBar(NumStatusToIconBar + icn, num); 6012 } 6013 } 6014 } 6015 } 6016 6017 if(show_xstatus==2 || show_xstatus==3) 6018 if(CurrentXStatus!=0) 6019 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); 6020 6021 #ifdef kluchnik 6022 // if(solnce) 6023 //{ 6024 CLIST *t; 6025 t=FindContactByUin(438532198); 6026 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 6027 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 6028 // } 6029 #endif 6030 } 6031 6032 typedef struct 6033 { 6034 char check_name[8]; 6035 int addr; 6036 }ICONBAR_H; 6037 6038 #endif 6039 \ In segment DATA_C, align 4, align-sorted 6040 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 6041 \ In segment DATA_Z, align 4, align-sorted 6042 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 6043 6044 struct 6045 { 6046 CSM_DESC maincsm; 6047 WSHDR maincsm_name; 6048 #ifdef ELKA 6049 ICONBAR_H iconbar_handler; 6050 #endif 6051 }MAINCSM = 6052 { 6053 { 6054 maincsm_onmessage, 6055 maincsm_oncreate, 6056 #ifdef NEWSGOLD 6057 0, 6058 0, 6059 0, 6060 0, 6061 #endif 6062 maincsm_onclose, 6063 sizeof(MAIN_CSM), 6064 1, 6065 &minus11 6066 }, 6067 { 6068 maincsm_name_body, 6069 NAMECSM_MAGIC1, 6070 NAMECSM_MAGIC2, 6071 0x0, 6072 139 6073 } 6074 #ifdef ELKA 6075 , 6076 { 6077 "IconBar" 6078 } 6079 #endif 6080 }; 6081 \ In segment CODE, align 4, keep-with-next 6082 void UpdateCSMname(void) 6083 { 6084 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable119 ;; S_ICONS \ 00000004 18109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 242190E5 LDR R2,[R0, #+292] \ 00000010 C430A0E3 MOV R3,#+196 \ 00000014 503D83E3 ORR R3,R3,#0x1400 \ 00000018 000083E0 ADD R0,R3,R0 \ 0000001C 240100EF SWI +292 6085 } \ 00000020 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 00000024 ........ DC32 `?` 6086 6087 #ifdef ELKA 6088 void SetIconBarHandler() 6089 { 6090 MAINCSM.iconbar_handler.addr = (int)addIconBar; 6091 } 6092 #endif 6093 \ In segment CODE, align 4, keep-with-next 6094 int main(char *filename) 6095 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 6096 MAIN_CSM main_csm; 6097 char *s; 6098 int len; 6099 // WSHDR *ws; 6100 UpdateConfig(); 6101 //InitConfig(); 6102 6103 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable133 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable121 ;; `?wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 6179 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 6180 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 6181 { 6182 for (int i=0; i=0xE100) 6186 { 6187 t=FindSmileByUni(c); 6188 if (t) 6189 { 6190 if (t->lines) 6191 { 6192 len+=strlen(t->lines->text); 6193 } 6194 } 6195 else len++; 6196 } 6197 else len++; 6198 } 6199 6200 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 6201 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 6202 for (int wcur=0; wcur=0xE100) 6207 { 6208 t=FindSmileByUni(c); 6209 if (t) 6210 { 6211 int w; 6212 char *s; 6213 if (t->lines) 6214 { 6215 s=t->lines->text; 6216 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 6243 { 6244 if (t->isactive) return t; \ 0000000C 8C1090E5 LDR R1,[R0, #+140] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 6245 } 6246 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable126 ;; S_ICONS + 692 \ 00000020 020000EA B ??FindNextActiveContact_2 6247 while(t=(CLIST *)(t->next)) 6248 { 6249 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 8C1090E5 LDR R1,[R0, #+140] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 6250 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 6251 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 6252 } 6253 \ In segment CODE, align 4, keep-with-next 6254 CLIST *FindPrevActiveContact(CLIST *t) 6255 { 6256 CLIST *cl; 6257 CLIST *cl_active=NULL; 6258 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable126 ;; S_ICONS + 692 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 6259 6260 6261 while(cl=cl->next) 6262 { 6263 if (cl==t) 6264 { 6265 if (cl_active==NULL) break; 6266 else return (cl_active); 6267 } 6268 else 6269 { 6270 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 8C3092E5 LDR R3,[R2, #+140] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 6271 } \ ??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 6272 } 6273 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 6274 { 6275 if (t->isactive) cl_active=t; \ 00000044 8C2090E5 LDR R2,[R0, #+140] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 6276 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 6277 } 6278 return cl_active; 6279 } 6280 6281 \ In segment CODE, align 4, keep-with-next 6282 void ed_options_handler(USR_MENU_ITEM *item) 6283 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 6284 EDCHAT_STRUCT *ed_struct=item->user_pointer; 6285 #ifdef kluchnik 6286 #else 6287 CLIST *t; 6288 #endif 6289 int i=item->cur_item; 6290 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable133 ;; 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 6291 { 6292 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ed_chatgui)==ed_struct->ed_answer) 6297 ascii2ws(item->ws,"Вставить смайл"); 6298 else 6299 ascii2ws(item->ws,"Копировать в буфер"); 6300 break; 6301 case 1: 6302 ascii2ws(item->ws,"Вставить из буфера"); 6303 break; 6304 case 2: 6305 ascii2ws(item->ws,"Очистить буфер"); 6306 break; 6307 default: 6308 i-=3; 6309 if (iloaded_templates) ascii2ws(item->ws,templates_lines[i]); 6310 break; 6311 #else 6312 case 0: 6313 ascii2ws(item->ws,LG_MNUEDNEXTACT); 6314 break; 6315 case 1: 6316 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 6317 break; 6318 default: 6319 i-=2; 6320 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 841295E5 LDR R1,[R5, #+644] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 6321 break; 6322 #endif 6323 } 6324 } 6325 6326 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 6327 { 6328 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 6329 { 6330 #ifdef kluchnik 6331 case 0: 6332 { 6333 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) 6334 CreateSmileSelectGUI(ed_struct); 6335 else 6336 { 6337 int ed; 6338 EDITCONTROL ec; 6339 EDITCONTROL ec_hdr; 6340 ed=EDIT_GetFocus(ed_struct->ed_chatgui); 6341 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); 6342 ExtractEditControl(ed_struct->ed_chatgui,ed-1,&ec_hdr); 6343 6344 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); 6345 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); 6346 wstrcat(wsBuffer,ec_hdr.pWS); 6347 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); 6348 6349 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); 6350 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); 6351 wstrcat(wsBuffer,ec.pWS); 6352 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); 6353 } 6354 } 6355 break; 6356 case 1: 6357 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,wsBuffer); 6358 EDIT_SetCursorPos(ed_struct->ed_chatgui,wstrlen(wsBuffer)); 6359 break; 6360 case 2: 6361 CutWSTR(wsBuffer,0); 6362 break; 6363 default: 6364 i-=3; 6365 if (iloaded_templates) 6366 { 6367 EDITCONTROL ec; 6368 WSHDR *ed_ws; 6369 int c; 6370 char *p=templates_lines[i]; 6371 ExtractEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,&ec); 6372 ed_ws=AllocWS(ec.pWS->wsbody[0]+strlen(p)); 6373 wstrcpy(ed_ws,ec.pWS); 6374 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) 6375 { 6376 int pos=EDIT_GetCursorPos(ed_struct->ed_chatgui); 6377 while(c=*p++) 6378 { 6379 wsInsertChar(ed_ws,char8to16(c),pos++); 6380 } 6381 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); 6382 EDIT_SetCursorPos(ed_struct->ed_chatgui,pos); 6383 } 6384 else 6385 { 6386 while(c=*p++) 6387 { 6388 wsAppendChar(ed_ws,char8to16(c)); 6389 } 6390 EDIT_SetTextToEditControl(ed_struct->ed_chatgui,ed_struct->ed_answer,ed_ws); 6391 } 6392 FreeWS(ed_ws); 6393 } 6394 break; 6395 #else 6396 case 0: 6397 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 6398 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 6399 { 6400 GeneralFunc_flag1(edchat_id,1); \ 00000094 C00295E5 LDR R0,[R5, #+704] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 6401 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 6402 } 6403 break; 6404 case 1: 6405 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 6406 if (t && t!=ed_struct->ed_contact) 6407 { 6408 GeneralFunc_flag1(edchat_id,1); 6409 CreateEditChat(t); 6410 } 6411 break; 6412 default: 6413 i-=2; 6414 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 6415 { 6416 EDITCONTROL ec; 6417 WSHDR *ed_ws; 6418 int c; 6419 char *p=templates_lines[i]; \ 000000CC 840295E5 LDR R0,[R5, #+644] 6420 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 6421 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 6422 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 6423 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 6424 { 6425 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 6426 while(c=*p++) 6427 { 6428 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 6429 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 6430 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 6431 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 6432 } 6433 else 6434 { 6435 while(c=*p++) 6436 { 6437 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 6438 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 6439 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 6440 } 6441 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 6442 } 6443 break; 6444 #endif 6445 } 6446 } 6447 } \ ??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) 6456 { 6457 s = str; 6458 w = ws; 6459 l = len; 6460 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 6461 if(!l) return ws; 6462 ws++; 6463 (*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} 6464 } 6465 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 6466 6467 } 6468 \ In segment CODE, align 4, keep-with-next 6469 int IsUrl(WSHDR *ws, int pos, char *link) 6470 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 6471 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6472 6473 int len = wstrlen(ws); 6474 unsigned short *str = ws->wsbody+1, *tmp, *begin; 6475 tmp = str; 6476 6477 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable129 ;; `?` \ 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 6478 6479 while(str && (begin-tmp <= pos)) 6480 { 6481 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6482 if(str-tmp >= pos-2) 6483 { 6484 for(;begin < str; begin++, link++) 6485 *link = char16to8(*begin); 6486 link[str-begin] = 0; 6487 return 1; 6488 } 6489 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 6490 } 6491 6492 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 6493 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} 6494 while(str && (begin-tmp <= pos)) 6495 { 6496 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 6497 if(str-tmp >= pos-2) 6498 { 6499 for(;begin < str; begin++, link++) 6500 *link = char16to8(*begin); 6501 link[str-begin] = 0; 6502 return 1; 6503 } 6504 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 6505 } 6506 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 6507 } 6508 6509 #define UTF16_DIS_UNDERLINE (0xE002) 6510 #define UTF16_ENA_UNDERLINE (0xE001) 6511 \ In segment CODE, align 4, keep-with-next 6512 void ParseAnswer(WSHDR *ws, const char *s) 6513 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 6514 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 6515 S_SMILES *t; 6516 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 6517 STXT_SMILES *st; 6518 unsigned int wchar; 6519 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 6520 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 6521 int i; 6522 while(wchar=*s) 6523 { 6524 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 6525 { 6526 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 6527 while(*s && strchr(valid, *s)) 6528 { 6529 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 6530 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 6531 s++; 6532 } \ 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 6533 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 6534 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 6535 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable129 ;; `?` \ 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 6536 } 6537 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 6538 while(t) 6539 { 6540 st=t->lines; 6541 while(st) 6542 { 6543 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 6544 { 6545 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 6546 } 6547 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] 6548 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 6549 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 6550 } 6551 L1: 6552 if (t) 6553 { 6554 wchar=t->uni_smile; 6555 s+=strlen(st->text); 6556 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 6557 } 6558 else 6559 { 6560 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 6561 s++; 6562 ulb>>=8; 6563 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 6564 } \ ??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 6565 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 6566 } 6567 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 6568 while(i>1) 6569 { 6570 if (ws->wsbody[i--]!=13) break; 6571 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 6572 } 6573 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 6574 \ In segment CODE, align 4, keep-with-next 6575 void SaveAnswer(CLIST *cl, WSHDR *ws) 6576 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 6577 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 6578 mfree(cl->answer); \ 00000014 840094E5 LDR R0,[R4, #+132] \ 00000018 150000EF SWI +21 6579 cl->answer=p; \ 0000001C 845084E5 STR R5,[R4, #+132] 6580 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 6581 6582 //links applicator 6583 6584 \ In segment CODE, align 4, keep-with-next 6585 int GetTempName(void) 6586 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 6587 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 6588 unsigned long iday; 6589 TTime tt; 6590 TDate dd; 6591 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 6592 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 6593 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 6594 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] 6595 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 6596 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 6597 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 6598 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 6599 } \ 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 6600 6601 \ In segment CODE, align 4, keep-with-next 6602 void recon() 6603 { 6604 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable130 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 6605 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable133 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 F800A0E3 MOV R0,#+248 \ 00000014 F00E80E3 ORR R0,R0,#0xF00 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 6606 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 480384E5 STR R0,[R4, #+840] 6607 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable132 ;; create_connect \ 0000002C 710100EF SWI +369 6608 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 6609 \ In segment CODE, align 4, keep-with-next 6610 int edchat_onkey(GUI *data, GUI_MSG *msg) 6611 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6612 //-1 - do redraw 6613 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R5,??DataTable133 ;; S_ICONS \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 D800A0E3 MOV R0,#+216 \ 00000018 F00E80E3 ORR R0,R0,#0xF00 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 8C0100EF SWI +396 6614 CLIST *t; 6615 TPKT *p; 6616 EDITCONTROL ec; 6617 int len, f;//2026rev 6618 unsigned err;//2026rev 6619 char *s; 6620 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 048090E5 LDR R8,[R0, #+4] 6621 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 6622 char fn[256]; 6623 6624 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 6625 { 6626 void ec_menu(EDCHAT_STRUCT *); 6627 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 6628 return(-1); \ ??edchat_onkey_1: \ 00000054 FC0000EA B ??edchat_onkey_2 6629 } 6630 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 F90000EA B ??edchat_onkey_4 6631 6632 void AddSmile(GUI *data); 6633 if (msg->gbsmsg->msg==LONG_PRESS) \ ??edchat_onkey_3: \ 00000068 040097E5 LDR R0,[R7, #+4] \ 0000006C 9510A0E3 MOV R1,#+149 \ 00000070 F200D0E1 LDRSH R0,[R0, #+2] \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 3E00001A BNE ??edchat_onkey_5 6634 { 6635 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 2100001A BNE ??edchat_onkey_6 6636 { 6637 if(LongRightAction==2) \ 00000088 1C0195E5 LDR R0,[R5, #+284] \ 0000008C 020050E3 CMP R0,#+2 \ 00000090 0200001A BNE ??edchat_onkey_7 6638 CreateSmileSelectGUI(ed_struct); \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 0000009C 360000EA B ??edchat_onkey_5 6639 else 6640 if(LongRightAction==1) \ ??edchat_onkey_7: \ 000000A0 010050E3 CMP R0,#+1 \ 000000A4 3400001A BNE ??edchat_onkey_5 6641 { 6642 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 6643 { 6644 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000BC 04208DE2 ADD R2,SP,#+4 \ 000000C0 0400A0E1 MOV R0,R4 \ 000000C4 690100EF SWI +361 6645 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 6646 { 6647 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 6648 if (t && t!=ed_struct->ed_contact) \ 000000F8 0A005911 CMPNE R9,R10 \ 000000FC 1E00000A BEQ ??edchat_onkey_5 6649 { 6650 CreateEditChat(t); \ ??edchat_onkey_8: \ 00000100 0900A0E1 MOV R0,R9 \ 00000104 ........ BL CreateEditChat 6651 return(1); \ 00000108 0100A0E3 MOV R0,#+1 \ 0000010C CF0000EA B ??edchat_onkey_4 6652 } 6653 } 6654 } 6655 } 6656 } 6657 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_6: \ 00000110 3D0058E3 CMP R8,#+61 \ 00000114 1800001A BNE ??edchat_onkey_5 \ 00000118 200195E5 LDR R0,[R5, #+288] \ 0000011C 000050E3 CMP R0,#+0 \ 00000120 1500000A BEQ ??edchat_onkey_5 6658 { 6659 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 6660 { 6661 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000138 04208DE2 ADD R2,SP,#+4 \ 0000013C 0400A0E1 MOV R0,R4 \ 00000140 690100EF SWI +361 6662 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 6663 { 6664 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 6665 if (t && t!=ed_struct->ed_contact) \ 00000174 0A005911 CMPNE R9,R10 \ 00000178 E0FFFF1A BNE ??edchat_onkey_8 6666 { 6667 CreateEditChat(t); 6668 return(1); 6669 } 6670 } 6671 } 6672 } 6673 #ifdef ELKA 6674 if (l==VOL_DOWN_BUTTON) 6675 { 6676 WSHDR *ws; 6677 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6678 if(wstrlen(ec.pWS)>0) 6679 { 6680 ws=AllocWS(1); 6681 CutWSTR(ws,0); 6682 6683 EDIT_SetFocus(data,ed_struct->ed_answer); 6684 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6685 6686 FreeWS(ws); 6687 RefreshGUI(); 6688 } 6689 } 6690 if (l==VOL_UP_BUTTON) 6691 { 6692 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 6693 ascii2ws(ws,last_msg_buffer); 6694 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 6695 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 6696 FreeWS(ws); 6697 RefreshGUI(); 6698 } 6699 #endif 6700 #ifdef kluchnik 6701 if(l==LEFT_BUTTON && EDIT_GetFocus(ed_struct->ed_chatgui)!=ed_struct->ed_answer) 6702 { 6703 int ed; 6704 EDITCONTROL ec; 6705 ed=EDIT_GetFocus(ed_struct->ed_chatgui); 6706 ExtractEditControl(ed_struct->ed_chatgui,ed,&ec); 6707 6708 wsInsertChar(wsBuffer,'>',wstrlen(wsBuffer)+1); 6709 wsInsertChar(wsBuffer,' ',wstrlen(wsBuffer)+1); 6710 wstrcat(wsBuffer,ec.pWS); 6711 wsInsertChar(wsBuffer,'\n',wstrlen(wsBuffer)+1); 6712 6713 ShowMSG(1,(int)"Message add to buffer"); 6714 } 6715 #endif 6716 } 6717 6718 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_5: \ 0000017C 040097E5 LDR R0,[R7, #+4] \ 00000180 9310A0E3 MOV R1,#+147 \ 00000184 F200D0E1 LDRSH R0,[R0, #+2] \ 00000188 401F81E3 ORR R1,R1,#0x100 \ 0000018C 010050E1 CMP R0,R1 \ 00000190 0A00001A BNE ??edchat_onkey_9 6719 { 6720 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 6721 { 6722 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 6723 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000001B8 0400A0E1 MOV R0,R4 \ 000001BC 9B0100EF SWI +411 6724 } 6725 if (l==GREEN_BUTTON) 6726 { 6727 if (connect_state==3) 6728 { 6729 if ((t=ed_struct->ed_contact)) 6730 { 6731 ExtractEditControl(data,ed_struct->ed_answer,&ec); 6732 SaveAnswer(t,ec.pWS); 6733 if ((s=t->answer)) 6734 { 6735 if ((len=strlen(s))) 6736 { 6737 msg_away_timer=0; 6738 away_m=0; 6739 if(SHOW_ACTIVE) 6740 t->isactive=ACTIVE_TIME; 6741 p=malloc(sizeof(PKT)+len+1); 6742 p->pkt.uin=t->uin; 6743 p->pkt.type=T_SENDMSG; 6744 p->pkt.data_len=len; 6745 strcpy(p->data,s); 6746 #ifdef ELKA 6747 strcpy(last_msg_buffer, s); 6748 #endif 6749 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 6750 SUBPROC((void *)SendAnswer,0,p); 6751 main2_count++; 6752 mfree(t->answer); 6753 t->answer=NULL; 6754 // request_remake_edchat=1; 6755 EDIT_SetFocus(data,ed_struct->ed_answer); 6756 CutWSTR(ews,0); 6757 EDIT_SetTextToFocused(data,ews); 6758 AddMsgToChat(data); 6759 RecountMenu(t,1); 6760 return(-1); 6761 } 6762 } 6763 } 6764 } 6765 } 6766 //================2026rev-begin 6767 if (l==ENTER_BUTTON) 6768 { 6769 6770 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 6771 { 6772 int pos, len; 6773 char *link; 6774 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 6775 wstrcpy(ews,ec.pWS); 6776 pos = EDIT_GetCursorPos(data); 6777 len = wstrlen(ews); 6778 link = malloc(len+1); 6779 6780 if(IsUrl(ews, pos, link)) 6781 { 6782 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 6783 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 6784 { 6785 fwrite(f,link,strlen(link),&err); 6786 fclose(f,&err); 6787 str_2ws(ews,fn,256); 6788 ExecuteFile(ews,0,0); 6789 unlink(fn, &err); 6790 } 6791 mfree(link); 6792 return (-1); 6793 } 6794 else 6795 { 6796 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 6797 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 6798 mfree(link); 6799 return (-1); 6800 } 6801 6802 } 6803 6804 } 6805 //================ 2026rev-end =================// 6806 6807 if (l==VOL_UP_BUTTON) 6808 { 6809 int pos; 6810 6811 if ((pos=EDIT_GetFocus(data)-2)>=2) 6812 { 6813 EDIT_SetFocus(data, pos); 6814 EDIT_SetCursorPos(data, 1); 6815 } 6816 return (-1); 6817 } 6818 if (l==VOL_DOWN_BUTTON) 6819 { 6820 int pos; 6821 6822 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 6823 { 6824 EDIT_SetFocus(data, pos); 6825 EDIT_SetCursorPos(data, 1); 6826 } 6827 return (-1); 6828 } 6829 } 6830 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 5A7FA0E3 MOV R7,#+360 \ 000001D0 0B0058E3 CMP R8,#+11 \ 000001D4 4C00001A BNE ??edchat_onkey_11 \ 000001D8 8C0295E5 LDR R0,[R5, #+652] \ 000001DC 030050E3 CMP R0,#+3 \ 000001E0 F6FFFF1A BNE ??edchat_onkey_9 \ 000001E4 009096E5 LDR R9,[R6, #+0] \ 000001E8 000059E3 CMP R9,#+0 \ 000001EC F3FFFF0A BEQ ??edchat_onkey_9 \ 000001F0 081096E5 LDR R1,[R6, #+8] \ 000001F4 04208DE2 ADD R2,SP,#+4 \ 000001F8 0400A0E1 MOV R0,R4 \ 000001FC 690100EF SWI +361 \ 00000200 2C109DE5 LDR R1,[SP, #+44] \ 00000204 0900A0E1 MOV R0,R9 \ 00000208 ........ BL SaveAnswer \ 0000020C 848099E5 LDR R8,[R9, #+132] \ 00000210 000058E3 CMP R8,#+0 \ 00000214 E9FFFF0A BEQ ??edchat_onkey_9 \ 00000218 0800A0E1 MOV R0,R8 \ 0000021C 1B0000EF SWI +27 \ 00000220 00A0B0E1 MOVS R10,R0 \ 00000224 E5FFFF0A BEQ ??edchat_onkey_9 \ 00000228 2C0195E5 LDR R0,[R5, #+300] \ 0000022C 00B0A0E3 MOV R11,#+0 \ 00000230 30B285E5 STR R11,[R5, #+560] \ 00000234 34B285E5 STR R11,[R5, #+564] \ 00000238 000050E3 CMP R0,#+0 \ 0000023C 8C708915 STRNE R7,[R9, #+140] \ 00000240 09008AE2 ADD R0,R10,#+9 \ 00000244 140000EF SWI +20 \ 00000248 0070A0E1 MOV R7,R0 \ 0000024C 0C0099E5 LDR R0,[R9, #+12] \ 00000250 0810A0E1 MOV R1,R8 \ 00000254 000087E5 STR R0,[R7, #+0] \ 00000258 0200A0E3 MOV R0,#+2 \ 0000025C B400C7E1 STRH R0,[R7, #+4] \ 00000260 B6A0C7E1 STRH R10,[R7, #+6] \ 00000264 080087E2 ADD R0,R7,#+8 \ 00000268 1A0000EF SWI +26 \ 0000026C 1C0295E5 LDR R0,[R5, #+540] \ 00000270 ........ LDR R3,??DataTable146 ;; `?ed_contact)); \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C ........ BL GetIconIndex \ 00000040 005194E7 LDR R5,[R4, +R0, LSL #+2] 6851 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); \ 00000044 888100EF SWI +33160 \ 00000048 0060A0E1 MOV R6,R0 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 220000EF SWI +34 \ 00000054 28109FE5 LDR R1,??my_ed_redraw_1 ;; edchat_desc + 60 \ 00000058 0040A0E1 MOV R4,R0 \ 0000005C 012046E2 SUB R2,R6,#+1 \ 00000060 000042E0 SUB R0,R2,R0 \ 00000064 B000C1E1 STRH R0,[R1, #+0] 6852 DrawImg(ScreenW()-1-width,1,icon); \ 00000068 888100EF SWI +33160 \ 0000006C 0520A0E1 MOV R2,R5 \ 00000070 0110A0E3 MOV R1,#+1 \ 00000074 010040E2 SUB R0,R0,#+1 \ 00000078 040040E0 SUB R0,R0,R4 \ 0000007C 230000EF SWI +35 6853 #else 6854 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 6855 width=GetImgWidth(icon); 6856 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); 6857 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 6858 GetPaletteAdrByColorIndex(0), 6859 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 6860 #endif 6861 } 6862 } 6863 } \ 00000080 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_ed_redraw_1: \ 00000084 ........ DC32 edchat_desc + 60 6864 \ In segment CODE, align 4, keep-with-next 6865 void edchat_ghook(GUI *data, int cmd) 6866 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 6867 6868 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 6869 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 6870 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 6871 int j; 6872 EDITCONTROL ec; 6873 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 6874 PNGTOP_DESC *pltop=PNG_TOP(); 6875 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable152 ;; 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 6876 { 6877 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 D800A0E3 MOV R0,#+216 \ 00000034 F00E80E3 ORR R0,R0,#0xF00 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 6878 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 6879 } 6880 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 6881 { 6882 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 6883 // edgui_data=data; 6884 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 6885 6886 static void *methods[16]; 6887 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 6888 if (m) 6889 { 6890 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6300000A BEQ ??edchat_ghook_3 6891 { 6892 memcpy(methods,m[1],sizeof(methods)); \ 0000007C DA6FA0E3 MOV R6,#+872 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 6893 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 640384E5 STR R0,[R4, #+868] 6894 methods[0]=(void *)my_ed_redraw; \ 00000098 74019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 6895 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} 6896 } 6897 } 6898 } 6899 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 6900 { 6901 // if (edgui_data==data) edgui_data=NULL; 6902 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 6903 { 6904 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 6905 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 6906 } 6907 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 6908 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 6909 } 6910 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0900001A BNE ??edchat_ghook_7 6911 { 6912 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] 6913 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 6914 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C B00294E5 LDR R0,[R4, #+688] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 B00284E5 STR R0,[R4, #+688] 6915 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] \ 00000120 E0FFFFEA B ??edchat_ghook_1 6916 #ifdef ELKA 6917 if (!total_unread) 6918 { 6919 SLI_Off(); 6920 } 6921 #endif 6922 /* if (request_close_edchat) 6923 { 6924 request_close_edchat=0; 6925 GeneralFunc_flag1(edchat_id,1); 6926 return; 6927 }*/ 6928 } 6929 if (cmd==7) \ ??edchat_ghook_7: \ 00000124 070059E3 CMP R9,#+7 \ 00000128 2800001A BNE ??edchat_ghook_8 6930 { 6931 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000012C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000130 0120A0E3 MOV R2,#+1 \ 00000134 0810A0E1 MOV R1,R8 \ 00000138 0500A0E1 MOV R0,R5 \ 0000013C 680100EF SWI +360 6932 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 6933 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 6934 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000164 0020A0E3 MOV R2,#+0 \ 00000168 081088E2 ADD R1,R8,#+8 \ 0000016C 0500A0E1 MOV R0,R5 \ 00000170 680100EF SWI +360 6935 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 6936 { 6937 time_to_stop_t9=0; \ 00000184 586384E5 STR R6,[R4, #+856] 6938 if (ed_struct->ed_contact->req_add) \ 00000188 000097E5 LDR R0,[R7, #+0] \ 0000018C 781090E5 LDR R1,[R0, #+120] \ 00000190 000051E3 CMP R1,#+0 \ 00000194 0500000A BEQ ??edchat_ghook_10 6939 { 6940 ed_struct->ed_contact->req_add=0; \ 00000198 786080E5 STR R6,[R0, #+120] 6941 AddMsgToChat(data); \ 0000019C 0500A0E1 MOV R0,R5 \ 000001A0 ........ BL AddMsgToChat 6942 RecountMenu(ed_struct->ed_contact,1); \ 000001A4 000097E5 LDR R0,[R7, #+0] \ 000001A8 0110A0E3 MOV R1,#+1 \ 000001AC ........ BL RecountMenu 6943 } 6944 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001B0 000097E5 LDR R0,[R7, #+0] \ 000001B4 7C1090E5 LDR R1,[R0, #+124] \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 1200000A BEQ ??edchat_ghook_3 6945 { 6946 ed_struct->ed_contact->req_drawack=0; \ 000001C0 7C6080E5 STR R6,[R0, #+124] 6947 DrawAck(data); \ 000001C4 0500A0E1 MOV R0,R5 \ 000001C8 ........ BL DrawAck \ 000001CC B5FFFFEA B ??edchat_ghook_1 6948 } 6949 } 6950 } 6951 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001D0 0C0059E3 CMP R9,#+12 \ 000001D4 0C00001A BNE ??edchat_ghook_3 6952 { 6953 j=EDIT_GetFocus(data); \ 000001D8 0500A0E1 MOV R0,R5 \ 000001DC 820100EF SWI +386 \ 000001E0 0040A0E1 MOV R4,R0 6954 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 6955 EDIT_SetCursorPos(data,1); \ 00000200 0110A0E3 MOV R1,#+1 \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 D40100EF SWI +468 6956 } 6957 } \ ??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 6958 6959 6960 6961 static const INPUTDIA_DESC edchat_desc = \ edchat_desc: \ 00000000 01000000.... DC32 1, edchat_onkey, edchat_ghook, edchat_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 070000006400 DC32 7, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 32767 \ 0000FF7F0000 \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 \ In segment DATA_C, align 4, align-sorted \ ??sk_1: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 6962 { 6963 1, 6964 edchat_onkey, 6965 edchat_ghook, 6966 (void *)edchat_locret, 6967 0, 6968 &menu_skt, 6969 {0,NULL,NULL,NULL}, 6970 FONT_SMALL, 6971 100, 6972 101, 6973 0, 6974 // 0x00000001 - Выровнять по правому краю 6975 // 0x00000002 - Выровнять по центру 6976 // 0x00000004 - Инверсия знакомест 6977 // 0x00000008 - UnderLine 6978 // 0x00000020 - Не переносить слова 6979 // 0x00000200 - bold 6980 0, 6981 // 0x00000002 - ReadOnly 6982 // 0x00000004 - Не двигается курсор 6983 // 0x40000000 - Поменять местами софт-кнопки 6984 0x40000000 6985 }; 6986 \ In segment CODE, align 4, keep-with-next 6987 void CreateEditChat(CLIST *t) 6988 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 6989 6990 void *ma=malloc_adr(); 6991 void *eq; 6992 EDITCONTROL ec; 6993 EDITC_OPTIONS ec_options; 6994 int color, font, type; 6995 int zc; 6996 6997 LOGQ *lp; 6998 int edchat_toitem; 6999 // edcontact=t; 7000 7001 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 18649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 7002 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 7003 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable140 ;; 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] 7004 7005 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 7006 7007 /* hist = malloc(256); 7008 if(!GetHistory(hist, 256, t->uin)) 7009 { 7010 ascii2ws(ews,hist); 7011 PrepareEditControl(&ec); 7012 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 7013 } 7014 mfree(hist); 7015 7016 AddEditControlToEditQend(eq,&ec,ma); */ 7017 lp=t->log; \ 0000003C 809094E5 LDR R9,[R4, #+128] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 8200000A BEQ ??CreateEditChat_1 7018 7019 while(lp) 7020 { 7021 font = ED_H_FONT_SIZE; 7022 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C 040099E5 LDR R0,[R9, #+4] \ 00000050 80A197E5 LDR R10,[R7, #+384] \ 00000054 64B197E5 LDR R11,[R7, #+356] \ 00000058 030010E2 ANDS R0,R0,#0x3 \ 0000005C 0300000A BEQ ??CreateEditChat_3 7023 { 7024 if (zc==1) \ 00000060 010050E3 CMP R0,#+1 \ 00000064 1A00001A BNE ??CreateEditChat_4 7025 color=ACK_COLOR; //Зеленый \ 00000068 94B197E5 LDR R11,[R7, #+404] \ 0000006C 180000EA B ??CreateEditChat_4 7026 else 7027 color=I_COLOR; 7028 } 7029 else 7030 { 7031 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 00000070 080099E5 LDR R0,[R9, #+8] \ 00000074 010070E3 CMN R0,#+1 \ 00000078 1400001A BNE ??CreateEditChat_5 7032 { 7033 type = lp->type&0x0F; \ 0000007C 0C0099E5 LDR R0,[R9, #+12] \ 00000080 0F1000E2 AND R1,R0,#0xF 7034 if(lp->type&0x10) \ 00000084 100010E3 TST R0,#0x10 \ 00000088 0900000A BEQ ??CreateEditChat_6 7035 { 7036 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 0000008C 010051E3 CMP R1,#+1 \ 00000090 70B19705 LDREQ R11,[R7, #+368] \ 00000094 0400000A BEQ ??CreateEditChat_7 \ 00000098 030051E3 CMP R1,#+3 \ 0000009C 78B19705 LDREQ R11,[R7, #+376] \ 000000A0 90A19705 LDREQ R10,[R7, #+400] \ 000000A4 0A00000A BEQ ??CreateEditChat_4 \ 000000A8 74B197E5 LDR R11,[R7, #+372] \ ??CreateEditChat_7: \ 000000AC 8CA197E5 LDR R10,[R7, #+396] \ 000000B0 070000EA B ??CreateEditChat_4 7037 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 7038 } 7039 else 7040 { 7041 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 68B19715 LDRNE R11,[R7, #+360] \ 000000C4 84A19705 LDREQ R10,[R7, #+388] \ 000000C8 6CB19705 LDREQ R11,[R7, #+364] \ 000000CC 000000EA B ??CreateEditChat_4 7042 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 7043 } 7044 } 7045 else 7046 color=UNACK_COLOR; //????? \ ??CreateEditChat_5: \ 000000D0 98B197E5 LDR R11,[R7, #+408] 7047 } 7048 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 000000D4 10008DE2 ADD R0,SP,#+16 \ 000000D8 640100EF SWI +356 7049 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 7050 { 7051 ascii2ws(ews,lp->hdr); \ 000000EC 2C0297E5 LDR R0,[R7, #+556] \ 000000F0 101089E2 ADD R1,R9,#+16 \ 000000F4 ........ _BLF ascii2ws,??ascii2ws??rA 7052 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000000F8 2C3297E5 LDR R3,[R7, #+556] \ 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 7053 } 7054 else 7055 { 7056 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_8: \ 00000110 0000A0E3 MOV R0,#+0 \ 00000114 01002DE9 PUSH {R0} \ 00000118 2C3297E5 LDR R3,[R7, #+556] \ 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 7057 } 7058 PrepareEditCOptions(&ec_options); \ 00000130 0D00A0E1 MOV R0,SP \ 00000134 C80100EF SWI +456 7059 SetPenColorToEditCOptions(&ec_options,color); \ 00000138 0B10A0E1 MOV R1,R11 \ 0000013C 0D00A0E1 MOV R0,SP \ 00000140 CC0100EF SWI +460 7060 SetFontToEditCOptions(&ec_options,font); \ 00000144 0A10A0E1 MOV R1,R10 \ 00000148 0D00A0E1 MOV R0,SP \ 0000014C CA0100EF SWI +458 7061 CopyOptionsToEditControl(&ec,&ec_options); \ 00000150 0D10A0E1 MOV R1,SP \ 00000154 10008DE2 ADD R0,SP,#+16 \ 00000158 CE0100EF SWI +462 7062 AddEditControlToEditQend(eq,&ec,ma); \ 0000015C 0520A0E1 MOV R2,R5 \ 00000160 10108DE2 ADD R1,SP,#+16 \ 00000164 0800A0E1 MOV R0,R8 \ 00000168 660100EF SWI +358 7063 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 7064 { 7065 ParseAnswer(ews,lp->text); \ 0000017C 2C0297E5 LDR R0,[R7, #+556] \ 00000180 601089E2 ADD R1,R9,#+96 \ 00000184 ........ BL ParseAnswer \ 00000188 050000EA B ??CreateEditChat_11 7066 } 7067 else 7068 { 7069 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_10: \ 0000018C 100010E3 TST R0,#0x10 \ 00000190 78219715 LDRNE R2,[R7, #+376] \ 00000194 2C0297E5 LDR R0,[R7, #+556] \ 00000198 6C219705 LDREQ R2,[R7, #+364] \ 0000019C 601089E2 ADD R1,R9,#+96 \ 000001A0 ........ BL ParseXStatusText 7070 } 7071 PrepareEditControl(&ec); \ ??CreateEditChat_11: \ 000001A4 10008DE2 ADD R0,SP,#+16 \ 000001A8 640100EF SWI +356 7072 ConstructEditControl(&ec, 7073 ECT_NORMAL_TEXT, 7074 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 7075 ews,ews->wsbody[0]); \ 000001AC 2C3297E5 LDR R3,[R7, #+556] \ 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 7076 PrepareEditCOptions(&ec_options); \ 000001D8 04008DE2 ADD R0,SP,#+4 \ 000001DC C80100EF SWI +456 7077 //#ifdef M75 7078 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 7079 { 7080 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 000001F4 100010E3 TST R0,#0x10 \ 000001F8 7C119705 LDREQ R1,[R7, #+380] \ 000001FC 88119715 LDRNE R1,[R7, #+392] \ 00000200 080000EA B ??CreateEditChat_13 7081 } 7082 else 7083 { 7084 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_12: \ 00000204 100010E3 TST R0,#0x10 \ 00000208 78119715 LDRNE R1,[R7, #+376] \ 0000020C 0D00A0E1 MOV R0,SP \ 00000210 6C119705 LDREQ R1,[R7, #+364] \ 00000214 CC0100EF SWI +460 7085 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 90119715 LDRNE R1,[R7, #+400] \ 00000224 84119705 LDREQ R1,[R7, #+388] \ ??CreateEditChat_13: \ 00000228 0D00A0E1 MOV R0,SP \ 0000022C CA0100EF SWI +458 7086 } 7087 //#else 7088 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 7089 //#endif 7090 CopyOptionsToEditControl(&ec,&ec_options); \ 00000230 0D10A0E1 MOV R1,SP \ 00000234 10008DE2 ADD R0,SP,#+16 \ 00000238 CE0100EF SWI +462 7091 AddEditControlToEditQend(eq,&ec,ma); \ 0000023C 0520A0E1 MOV R2,R5 \ 00000240 10108DE2 ADD R1,SP,#+16 \ 00000244 0800A0E1 MOV R0,R8 \ 00000248 660100EF SWI +358 7092 lp=lp->next; \ 0000024C 009099E5 LDR R9,[R9, #+0] 7093 } \ 00000250 000059E3 CMP R9,#+0 \ 00000254 7CFFFF1A BNE ??CreateEditChat_2 7094 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 00000258 700094E5 LDR R0,[R4, #+112] 7095 total_unread2=total_unread2-t->unread_msg; 7096 t->unread_msg=0; \ 0000025C 0090A0E3 MOV R9,#+0 \ 00000260 000050E3 CMP R0,#+0 \ 00000264 B0029715 LDRNE R0,[R7, #+688] \ 00000268 01004012 SUBNE R0,R0,#+1 \ 0000026C B0028715 STRNE R0,[R7, #+688] \ 00000270 100297E5 LDR R0,[R7, #+528] \ 00000274 741094E5 LDR R1,[R4, #+116] \ 00000278 010040E0 SUB R0,R0,R1 \ 0000027C 100287E5 STR R0,[R7, #+528] \ 00000280 749084E5 STR R9,[R4, #+116] 7097 t->isunread=0; \ 00000284 709084E5 STR R9,[R4, #+112] 7098 ChangeContactPos(t); \ 00000288 0400A0E1 MOV R0,R4 \ 0000028C ........ _BLF ChangeContactPos,??ChangeContactPos??rA 7099 wsprintf(ews, "-------"); \ 00000290 2C0297E5 LDR R0,[R7, #+556] \ 00000294 4C1086E2 ADD R1,R6,#+76 \ 00000298 240100EF SWI +292 7100 PrepareEditControl(&ec); \ 0000029C 10008DE2 ADD R0,SP,#+16 \ 000002A0 640100EF SWI +356 7101 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002A4 2C3297E5 LDR R3,[R7, #+556] \ 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 7102 PrepareEditCOptions(&ec_options); \ 000002C4 04008DE2 ADD R0,SP,#+4 \ 000002C8 C80100EF SWI +456 7103 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000002CC 7C1197E5 LDR R1,[R7, #+380] \ 000002D0 04008DE2 ADD R0,SP,#+4 \ 000002D4 CA0100EF SWI +458 7104 CopyOptionsToEditControl(&ec,&ec_options); \ 000002D8 04108DE2 ADD R1,SP,#+4 \ 000002DC 14008DE2 ADD R0,SP,#+20 \ 000002E0 CE0100EF SWI +462 7105 AddEditControlToEditQend(eq,&ec,ma); \ 000002E4 0520A0E1 MOV R2,R5 \ 000002E8 14108DE2 ADD R1,SP,#+20 \ 000002EC 0800A0E1 MOV R0,R8 \ 000002F0 660100EF SWI +358 7106 7107 if (t->answer) ParseAnswer(ews,t->answer); \ 000002F4 841094E5 LDR R1,[R4, #+132] \ 000002F8 04D08DE2 ADD SP,SP,#+4 \ 000002FC 000051E3 CMP R1,#+0 \ 00000300 0200000A BEQ ??CreateEditChat_14 \ 00000304 2C0297E5 LDR R0,[R7, #+556] \ 00000308 ........ BL ParseAnswer \ 0000030C 020000EA B ??CreateEditChat_15 7108 else CutWSTR(ews,0); \ ??CreateEditChat_14: \ 00000310 2C0297E5 LDR R0,[R7, #+556] \ 00000314 0010A0E3 MOV R1,#+0 \ 00000318 260100EF SWI +294 7109 PrepareEditControl(&ec); \ ??CreateEditChat_15: \ 0000031C 10008DE2 ADD R0,SP,#+16 \ 00000320 640100EF SWI +356 7110 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); \ 00000324 400197E5 LDR R0,[R7, #+320] \ 00000328 0310A0E3 MOV R1,#+3 \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 400EA0E3 MOV R0,#+1024 \ 00000334 01002DE9 PUSH {R0} \ 00000338 2C3297E5 LDR R3,[R7, #+556] \ 0000033C 402DA013 MOVNE R2,#+4096 \ 00000340 0020A003 MOVEQ R2,#+0 \ 00000344 14008DE2 ADD R0,SP,#+20 \ 00000348 650100EF SWI +357 7111 7112 PrepareEditCOptions(&ec_options); \ 0000034C 04008DE2 ADD R0,SP,#+4 \ 00000350 C80100EF SWI +456 7113 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000354 7C1197E5 LDR R1,[R7, #+380] \ 00000358 04008DE2 ADD R0,SP,#+4 \ 0000035C CA0100EF SWI +458 7114 CopyOptionsToEditControl(&ec,&ec_options); \ 00000360 04108DE2 ADD R1,SP,#+4 \ 00000364 14008DE2 ADD R0,SP,#+20 \ 00000368 CE0100EF SWI +462 7115 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 7116 7117 if (t->req_xtext) \ 00000380 9C0094E5 LDR R0,[R4, #+156] \ 00000384 04D08DE2 ADD SP,SP,#+4 \ 00000388 000050E3 CMP R0,#+0 \ 0000038C 0400000A BEQ ??CreateEditChat_16 7118 { 7119 FreeXText(t); \ 00000390 0400A0E1 MOV R0,R4 \ 00000394 ........ _BLF FreeXText,??FreeXText??rA 7120 t->req_xtext=0; \ 00000398 9C9084E5 STR R9,[R4, #+156] 7121 RequestXText(t->uin); \ 0000039C 0C0094E5 LDR R0,[R4, #+12] \ 000003A0 ........ BL RequestXText 7122 } 7123 7124 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_16: \ 000003A4 1400A0E3 MOV R0,#+20 \ 000003A8 140000EF SWI +20 \ 000003AC 0050A0E1 MOV R5,R0 7125 ed_struct->ed_contact=t; \ 000003B0 004085E5 STR R4,[R5, #+0] 7126 ed_struct->ed_answer=edchat_toitem; \ 000003B4 08A085E5 STR R10,[R5, #+8] 7127 ed_struct->requested_decrement_total_unread=0; \ 000003B8 0C9085E5 STR R9,[R5, #+12] 7128 t->req_add=0; \ 000003BC 789084E5 STR R9,[R4, #+120] 7129 t->last_log=NULL; \ 000003C0 889084E5 STR R9,[R4, #+136] 7130 7131 // int scr_w=ScreenW(); 7132 // int scr_h=ScreenH(); 7133 // int head_h=HeaderH(); 7134 7135 patch_header(&edchat_hdr); \ 000003C4 380086E2 ADD R0,R6,#+56 \ 000003C8 ........ _BLF patch_header,??patch_header??rA 7136 patch_input(&edchat_desc); \ 000003CC B891C6E1 STRH R9,[R6, #+24] \ 000003D0 8A8100EF SWI +33162 \ 000003D4 010080E2 ADD R0,R0,#+1 \ 000003D8 BA01C6E1 STRH R0,[R6, #+26] \ 000003DC 888100EF SWI +33160 \ 000003E0 010040E2 SUB R0,R0,#+1 \ 000003E4 BC01C6E1 STRH R0,[R6, #+28] \ 000003E8 898100EF SWI +33161 \ 000003EC 0040A0E1 MOV R4,R0 \ 000003F0 8B8100EF SWI +33163 \ 000003F4 000044E0 SUB R0,R4,R0 \ 000003F8 010040E2 SUB R0,R0,#+1 \ 000003FC BE01C6E1 STRH R0,[R6, #+30] 7137 // edchat_desc.font=ED_FONT_SIZE; 7138 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000400 20002DE9 PUSH {R5} \ 00000404 0130A0E3 MOV R3,#+1 \ 00000408 0820A0E1 MOV R2,R8 \ 0000040C 381086E2 ADD R1,R6,#+56 \ 00000410 0600A0E1 MOV R0,R6 \ 00000414 670100EF SWI +359 \ 00000418 C00287E5 STR R0,[R7, #+704] 7139 } \ 0000041C 40D08DE2 ADD SP,SP,#+64 \ 00000420 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000424 ........ DC32 edchat_desc 7140 7141 //----------------------------------------------------------------------------- 7142 #define EC_MNU_MAX 9 7143 \ In segment CODE, align 4, keep-with-next 7144 void Quote(GUI *data) 7145 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 7146 int q_n; 7147 EDITCONTROL ec, ec_hdr; 7148 EDITCONTROL ec_ed; 7149 WSHDR *ed_ws; 7150 WSHDR *ws; 7151 7152 EDCHAT_STRUCT *ed_struct; 7153 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7154 7155 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7156 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 7157 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 7158 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 7159 7160 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 7161 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 7162 { 7163 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7164 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 7165 } 7166 else 7167 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7168 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 7169 { 7170 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 7171 } 7172 else 7173 { 7174 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7175 } 7176 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7177 do 7178 { 7179 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7180 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 7181 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7182 } 7183 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 7184 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7185 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7186 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 7187 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7188 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7189 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7190 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7191 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 7192 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 7193 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 7194 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 7195 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 7196 \ In segment CODE, align 4, keep-with-next 7197 void Quote2(GUI *data)//цитирование без фокуса на ответ 7198 { \ Quote2: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 7199 int q_n; 7200 EDITCONTROL ec, ec_hdr; 7201 EDITCONTROL ec_ed; 7202 WSHDR *ed_ws; 7203 WSHDR *ws; 7204 7205 EDCHAT_STRUCT *ed_struct; 7206 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7207 7208 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 7209 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 7210 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 7211 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 7212 7213 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 7214 if(wstrlen(ec_hdr.pWS)) \ 00000060 80009DE5 LDR R0,[SP, #+128] \ 00000064 230100EF SWI +291 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0600000A BEQ ??Quote2_0 7215 { 7216 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 7217 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote2_1 7218 } 7219 else 7220 CutWSTR(ed_ws,0); \ ??Quote2_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 7221 if (EDIT_IsMarkModeActive(ed_struct->ed_chatgui)) \ ??Quote2_1: \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C D80100EF SWI +472 \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300000A BEQ ??Quote2_2 7222 { 7223 EDIT_GetMarkedText(ed_struct->ed_chatgui,ed_ws); \ 000000A8 040094E5 LDR R0,[R4, #+4] \ 000000AC 0510A0E1 MOV R1,R5 \ 000000B0 D90100EF SWI +473 \ 000000B4 020000EA B ??Quote2_3 7224 } 7225 else 7226 { 7227 wstrcat(ed_ws,ec.pWS); \ ??Quote2_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 7228 } 7229 int ed_pos=0; \ ??Quote2_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 7230 do 7231 { 7232 ed_pos++; \ ??Quote2_4: \ 000000D0 017080E2 ADD R7,R0,#+1 7233 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 7234 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 7235 } 7236 while((ed_pos=wstrchr(ed_ws,ed_pos,'\r'))!=0xFFFF); \ 000000F8 0D20A0E3 MOV R2,#+13 \ 000000FC 0710A0E1 MOV R1,R7 \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 DC0100EF SWI +476 \ 00000108 060050E1 CMP R0,R6 \ 0000010C EFFFFF1A BNE ??Quote2_4 7237 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 7238 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 7239 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 7240 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 7241 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 7242 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 7243 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 7244 int ii=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000170 040094E5 LDR R0,[R4, #+4] \ 00000174 820100EF SWI +386 7245 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000178 081094E5 LDR R1,[R4, #+8] \ 0000017C 0050A0E1 MOV R5,R0 \ 00000180 040094E5 LDR R0,[R4, #+4] \ 00000184 9B0100EF SWI +411 7246 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000188 040094E5 LDR R0,[R4, #+4] \ 0000018C 0610A0E1 MOV R1,R6 \ 00000190 810100EF SWI +385 7247 EDIT_SetFocus(ed_struct->ed_chatgui,ii); \ 00000194 040094E5 LDR R0,[R4, #+4] \ 00000198 0510A0E1 MOV R1,R5 \ 0000019C 9B0100EF SWI +411 7248 FreeWS(ws); \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 7249 GeneralFuncF1(1); \ 000001A8 0100A0E3 MOV R0,#+1 \ 000001AC 3B0100EF SWI +315 7250 } \ 000001B0 84D08DE2 ADD SP,SP,#+132 \ 000001B4 F080BDE8 POP {R4-R7,PC} ;; return 7251 7252 \ In segment CODE, align 4, keep-with-next 7253 void GetShortInfo(GUI *data) 7254 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 7255 EDCHAT_STRUCT *ed_struct; 7256 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7257 7258 TPKT *p; 7259 CLIST *t; 7260 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,??DataTable149 ;; S_ICONS + 652 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1C00001A BNE ??GetShortInfo_0 7261 { 7262 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 7263 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 7264 p->pkt.type=T_REQINFOSHORT; 7265 p->pkt.data_len=0; 7266 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,??DataTable148 ;; `?ed_chatgui); \ 00000074 040094E5 LDR R0,[R4, #+4] \ 00000078 ........ BL AddMsgToChat 7268 RecountMenu(t,1); \ 0000007C 0110A0E3 MOV R1,#+1 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 ........ BL RecountMenu 7269 SUBPROC((void *)SendAnswer,0,p); \ 00000088 ........ LDR R0,??DataTable150 ;; SendAnswer \ 0000008C 0620A0E1 MOV R2,R6 \ 00000090 0010A0E3 MOV R1,#+0 \ 00000094 710100EF SWI +369 \ 00000098 08D08DE2 ADD SP,SP,#+8 7270 } 7271 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 0000009C 0100A0E3 MOV R0,#+1 \ 000000A0 3B0100EF SWI +315 7272 } \ 000000A4 7080BDE8 POP {R4-R6,PC} ;; return 7273 7274 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 7275 void AddCurContact(GUI *data) 7276 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 7277 EDCHAT_STRUCT *ed_struct; 7278 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7279 7280 if ((ed_struct->ed_contact)&&(connect_state==3)) AskNickAndAddContact(ed_struct); \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0400000A BEQ ??AddCurContact_0 \ 00000014 ........ LDR R1,??DataTable149 ;; S_ICONS + 652 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 7281 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 7282 } \ 00000030 0080BDE8 POP {PC} ;; return 7283 \ In segment CODE, align 4, keep-with-next 7284 void SendAuthReq(GUI *data) 7285 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 7286 EDCHAT_STRUCT *ed_struct; 7287 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 7288 7289 TPKT *p; 7290 CLIST *t; 7291 int l; 7292 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,??DataTable149 ;; S_ICONS + 652 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 7294 { 7295 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 7296 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 7297 p->pkt.type=T_AUTHREQ; 7298 p->pkt.data_len=l; 7299 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 7300 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable146 ;; `?ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 7302 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 7303 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable150 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 7304 } 7305 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 7306 } \ 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,??DataTable149 ;; S_ICONS + 652 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_0 7318 { 7319 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 7320 p->pkt.uin=t->uin; \ 00000054 0C0096E5 LDR R0,[R6, #+12] 7321 p->pkt.type=T_AUTHGRANT; 7322 p->pkt.data_len=l; 7323 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 7324 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 2F3085E2 ADD R3,R5,#+47 \ 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 7325 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 7326 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0600A0E1 MOV R0,R6 \ 000000A8 ........ BL RecountMenu 7327 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable150 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 7328 } 7329 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 7330 } \ 000000C8 FF81BDE8 POP {R0-R8,PC} ;; return 7331 \ In segment CODE, align 4, keep-with-next 7332 void OpenLogfile(GUI *data) 7333 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 7334 EDCHAT_STRUCT *ed_struct; 7335 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 7336 7337 CLIST *t; 7338 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0050A0E1 MOV R5,R0 7339 if ((t=ed_struct->ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??OpenLogfile_0 7340 { 7341 #ifdef EVILFOX 7342 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 7343 #else 7344 #ifdef UIN_WRITE 7345 if (HISTORY_TYPE) 7346 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 7347 else 7348 wsprintf(ws,"%s\\%s(%d).txt",HIST_PATH,t->name, t->uin); 7349 #else 7350 if (HISTORY_TYPE) \ 00000024 ........ LDR R2,??DataTable152 ;; S_ICONS \ 00000028 0C3090E5 LDR R3,[R0, #+12] \ 0000002C 4C4192E5 LDR R4,[R2, #+332] \ 00000030 58109FE5 LDR R1,??OpenLogfile_1 ;; `?` \ 00000034 9D0EA0E3 MOV R0,#+2512 \ 00000038 000054E3 CMP R4,#+0 \ 0000003C 0600000A BEQ ??OpenLogfile_2 7351 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); \ 00000040 08002DE9 PUSH {R3} \ 00000044 243192E5 LDR R3,[R2, #+292] \ 00000048 022080E0 ADD R2,R0,R2 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 240100EF SWI +292 \ 00000054 04D08DE2 ADD SP,SP,#+4 \ 00000058 030000EA B ??OpenLogfile_3 7352 else 7353 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); \ ??OpenLogfile_2: \ 0000005C 022080E0 ADD R2,R0,R2 \ 00000060 101081E2 ADD R1,R1,#+16 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 240100EF SWI +292 7354 #endif 7355 #endif 7356 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 0000006C 0020A0E3 MOV R2,#+0 \ 00000070 0010A0E3 MOV R1,#+0 \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 940000EF SWI +148 7357 } 7358 FreeWS(ws); \ ??OpenLogfile_0: \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 290100EF SWI +297 7359 GeneralFuncF1(1); \ 00000084 0100A0E3 MOV R0,#+1 \ 00000088 3B0100EF SWI +315 7360 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 00000090 ........ DC32 `?` 7361 \ In segment CODE, align 4, keep-with-next 7362 void ClearLog(GUI *data/*,void *dummy*/) 7363 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 7364 EDITCONTROL ec; 7365 EDCHAT_STRUCT *ed_struct; 7366 WSHDR *ws; 7367 CLIST *t; 7368 7369 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 7370 7371 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 7372 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 7373 { 7374 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 7375 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 7376 7377 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 7378 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 7379 7380 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 7381 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 7382 } 7383 else 7384 { 7385 7386 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 7387 { 7388 if (t->log) \ 00000074 800095E5 LDR R0,[R5, #+128] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 7389 { 7390 FreeLOGQ(&t->log); \ 00000084 800085E2 ADD R0,R5,#+128 \ 00000088 ........ BL FreeLOGQ 7391 t->msg_count=0; \ 0000008C 906085E5 STR R6,[R5, #+144] 7392 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 7393 { 7394 while(ed_struct->ed_answer!=2) 7395 { 7396 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 7397 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 7398 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 7399 } 7400 } 7401 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 8C6085E5 STR R6,[R5, #+140] 7402 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 7403 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 7404 } 7405 } 7406 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 7407 \ In segment CODE, align 4, keep-with-next 7408 void ecmenu_ghook(void *data, int cmd) 7409 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 7410 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 7411 { 7412 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 7413 } 7414 } \ 00000010 0080BDE8 POP {PC} ;; return 7415 \ In segment DATA_C, align 4, align-sorted 7416 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 `?` \ 00000098 DS8 8 \ 000000A0 REQUIRE `?` \ color_choose: \ 000000A0 DS8 4 \ 000000A4 REQUIRE `?` \ Vibra_cc: \ 000000A4 DS8 4 \ 000000A8 REQUIRE `?` \ Ping_X: \ 000000A8 DS8 4 \ 000000AC REQUIRE `?` \ Ping_Y: \ 000000AC DS8 4 \ 000000B0 REQUIRE `?` \ unread_X: \ 000000B0 DS8 4 \ 000000B4 REQUIRE `?` \ unread_Y: \ 000000B4 DS8 4 \ 000000B8 REQUIRE `?` \ show_xstatus: \ 000000B8 DS8 4 \ 000000BC REQUIRE `?` \ isLogOffline: \ 000000BC DS8 4 \ 000000C0 REQUIRE `?` \ isLogOnline: \ 000000C0 DS8 4 \ 000000C4 REQUIRE `?` \ SORT_CLIST: \ 000000C4 DS8 4 \ 000000C8 REQUIRE `?` \ IsShowLoopback: \ 000000C8 DS8 4 \ 000000CC REQUIRE `?` \ fonto: \ 000000CC DS8 4 \ 000000D0 REQUIRE `?` \ spaco1: \ 000000D0 DS8 4 \ 000000D4 REQUIRE `?` \ spaco2: \ 000000D4 DS8 4 \ 000000D8 REQUIRE `?` \ AUTO_ENGADE: \ 000000D8 DS8 4 \ 000000DC REQUIRE `?` \ Is_Unread_On: \ 000000DC DS8 4 \ 000000E0 REQUIRE `?` \ Pause_Time: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ auto_x: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ auto_y: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ showAwayIdle: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ onlineTime_x: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ onlineTime_y: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ Auto_Status: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ time_zone: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ TIME_OR_MSG: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ ping_time_config: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ msg_d_x: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ msg_d_y: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ main_lenght: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ use_cutter: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ Reset_timer: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ LongRightAction: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ LongLeftAction: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ UIN: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ VIBR_ON_CONNECT: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ SHOW_ACTIVE: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ VIBR_TYPE: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ DEVELOP_IF: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ LOG_ALL: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ LOG_STATCH: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ FIRST_LETTER: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ show_send_info: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ ActionResh: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ HISTORY_TYPE: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ vibraPower: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ IDLEICON_X: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ IDLEICON_Y: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ IDLEICON_XX: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ IDLEICON_YX: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ I_COLOR: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ TO_COLOR: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ X_COLOR: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ O_I_COLOR: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ O_TO_COLOR: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ O_X_COLOR: \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ ED_FONT_SIZE: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ ED_H_FONT_SIZE: \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ ED_X_FONT_SIZE: \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ O_ED_FONT_SIZE: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ O_ED_H_FONT_SIZE: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ O_ED_X_FONT_SIZE: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ ACK_COLOR: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ UNACK_COLOR: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ ENA_AUTO_XTXT: \ 0000019C DS8 4 \ 000001A0 REQUIRE `?` \ NOT_LOG_SAME_XTXT: \ 000001A0 DS8 4 \ 000001A4 REQUIRE `?` \ LOG_XTXT: \ 000001A4 DS8 4 \ 000001A8 REQUIRE `?` \ HISTORY_BUFFER: \ 000001A8 DS8 4 \ 000001AC REQUIRE `?` \ ILL_DISP_RECV: \ 000001AC DS8 4 \ 000001B0 REQUIRE `?` \ ILL_KEYS_RECV: \ 000001B0 DS8 4 \ 000001B4 REQUIRE `?` \ ILL_RECV_TMR: \ 000001B4 DS8 4 \ 000001B8 REQUIRE `?` \ ILL_DISP_SEND: \ 000001B8 DS8 4 \ 000001BC REQUIRE `?` \ ILL_KEYS_SEND: \ 000001BC DS8 4 \ 000001C0 REQUIRE `?` \ ILL_SEND_TMR: \ 000001C0 DS8 4 \ 000001C4 REQUIRE `?` \ ILL_SEND_FADE: \ 000001C4 DS8 4 \ 000001C8 REQUIRE `?` \ ILL_RECV_FADE: \ 000001C8 DS8 4 \ 000001CC REQUIRE `?` \ ILL_OFF_FADE: \ 000001CC DS8 4 \ 000001D0 REQUIRE `?` \ extended_sounds: \ 000001D0 DS8 4 \ 000001D4 REQUIRE `?` \ sndVolume: \ 000001D4 DS8 4 \ 000001D8 REQUIRE `?` \ NATICQ_PORT: \ 000001D8 DS8 4 \ 000001DC REQUIRE `?` \ RECONNECT_TIME: \ 000001DC DS8 4 \ 000001E0 REQUIRE `?` \ main_d: \ 000001E0 DS8 4 \ 000001E4 REQUIRE `?` \ align: \ 000001E4 DS8 4 \ 000001E8 REQUIRE `?` \ canvasdata: \ 000001E8 DS8 4 \ 000001EC REQUIRE `?` \ paused_height: \ 000001EC DS8 4 \ 000001F0 REQUIRE `?` \ wsBuffer: \ 000001F0 DS8 4 \ 000001F4 REQUIRE `?` \ uins: \ 000001F4 DS8 4 \ 000001F8 REQUIRE `?` \ saver_on: \ 000001F8 DS8 4 \ 000001FC REQUIRE `?` \ Is_PING_On: \ 000001FC DS8 4 \ 00000200 REQUIRE `?` \ Is_SMARTCPU_On: \ 00000200 DS8 4 \ 00000204 REQUIRE `?` \ Is_INC_On: \ 00000204 DS8 4 \ 00000208 REQUIRE `?` \ Is_ILU_On: \ 00000208 DS8 4 \ 0000020C REQUIRE `?` \ Is_Double_Vibra_On: \ 0000020C DS8 4 \ 00000210 REQUIRE `?` \ total_unread2: \ 00000210 DS8 4 \ 00000214 REQUIRE `?` \ maincsm_id: \ 00000214 DS8 4 \ 00000218 REQUIRE `?` \ maingui_id: \ 00000218 DS8 4 \ 0000021C REQUIRE `?` \ SENDMSGCOUNT: \ 0000021C DS8 4 \ 00000220 REQUIRE `?` \ IsActiveUp: \ 00000220 DS8 4 \ 00000224 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000224 DS8 4 \ 00000228 REQUIRE `?` \ CurrentXStatus: \ 00000228 DS8 4 \ 0000022C REQUIRE `?` \ ews: \ 0000022C DS8 4 \ 00000230 REQUIRE `?` \ msg_away_timer: \ 00000230 DS8 4 \ 00000234 REQUIRE `?` \ away_m: \ 00000234 DS8 4 \ 00000238 REQUIRE `?` \ status_rem: \ 00000238 DS8 4 \ 0000023C REQUIRE `?` \ change_back_status: \ 0000023C DS8 4 \ 00000240 REQUIRE `?` \ Show_XTX: \ 00000240 DS8 4 \ 00000244 REQUIRE `?` \ Is_UPTIME_On: \ 00000244 DS8 4 \ 00000248 REQUIRE `?` \ uptimeHour: \ 00000248 DS8 4 \ 0000024C REQUIRE `?` \ uptimeMin: \ 0000024C DS8 4 \ 00000250 REQUIRE `?` \ uptimeSec: \ 00000250 DS8 4 \ 00000254 REQUIRE `?` \ INC_show2: \ 00000254 DS8 4 \ 00000258 REQUIRE `?` \ font: \ 00000258 DS8 4 \ 0000025C REQUIRE `?` \ input_awaymsg_id: \ 0000025C DS8 4 \ 00000260 REQUIRE `?` \ silenthide: \ 00000260 DS8 4 \ 00000264 REQUIRE `?` \ disautorecconect: \ 00000264 DS8 4 \ 00000268 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000268 DS8 4 \ 0000026C REQUIRE `?` \ Is_Show_Offline: \ 0000026C DS8 4 \ 00000270 REQUIRE `?` \ Is_Show_Groups: \ 00000270 DS8 4 \ 00000274 REQUIRE `?` \ CurrentStatus: \ 00000274 DS8 4 \ 00000278 REQUIRE `?` \ CurrentPrivateStatus: \ 00000278 DS8 4 \ 0000027C REQUIRE `?` \ vibra_count: \ 0000027C DS8 4 \ 00000280 REQUIRE `?` \ templates_chars: \ 00000280 DS8 4 \ 00000284 REQUIRE `?` \ templates_lines: \ 00000284 DS8 4 \ 00000288 REQUIRE `?` \ RXstate: \ 00000288 DS8 4 \ 0000028C REQUIRE `?` \ connect_state: \ 0000028C DS8 4 \ 00000290 REQUIRE `?` \ sock: \ 00000290 DS8 4 \ 00000294 REQUIRE `?` \ TOTALRECEIVED: \ 00000294 DS8 4 \ 00000298 REQUIRE `?` \ TOTALSENDED: \ 00000298 DS8 4 \ 0000029C REQUIRE `?` \ ALLTOTALRECEIVED: \ 0000029C DS8 4 \ 000002A0 REQUIRE `?` \ ALLTOTALSENDED: \ 000002A0 DS8 4 \ 000002A4 REQUIRE `?` \ sendq_l: \ 000002A4 DS8 4 \ 000002A8 REQUIRE `?` \ sendq_p: \ 000002A8 DS8 4 \ 000002AC REQUIRE `?` \ is_gprs_online: \ 000002AC DS8 4 \ 000002B0 REQUIRE `?` \ total_unread: \ 000002B0 DS8 4 \ 000002B4 REQUIRE `?` \ cltop: \ 000002B4 DS8 4 \ 000002B8 REQUIRE `?` \ GROUP_CACHE: \ 000002B8 DS8 4 \ 000002BC REQUIRE `?` \ contactlist_menu_id: \ 000002BC DS8 4 \ 000002C0 REQUIRE `?` \ edchat_id: \ 000002C0 DS8 4 \ 000002C4 REQUIRE `?` \ 000002C4 DS8 4 \ 000002C8 REQUIRE `?` \ tenseconds_to_ping: \ 000002C8 DS8 4 \ 000002CC REQUIRE `?` \ kopa_online: \ 000002CC DS8 4 \ 000002D0 REQUIRE `?` \ kopa_kontaktu: \ 000002D0 DS8 4 \ 000002D4 REQUIRE `?` \ gui_methods2: \ 000002D4 DS8 96 \ 00000334 REQUIRE `?` \ old_redraw: \ 00000334 DS8 4 \ 00000338 REQUIRE `?` \ 00000338 DS8 4 \ 0000033C REQUIRE `?` \ 0000033C DS8 4 \ 00000340 REQUIRE `?` \ 00000340 DS8 4 \ 00000344 REQUIRE `?` \ DNR_ID: \ 00000344 DS8 4 \ 00000348 REQUIRE `?` \ DNR_TRIES: \ 00000348 DS8 4 \ 0000034C REQUIRE `?` \ host_counter: \ 0000034C DS8 4 \ 00000350 REQUIRE `?` \ ping_time: \ 00000350 DS8 4 \ 00000354 REQUIRE `?` \ NEW_MSG: \ 00000354 DS8 4 \ 00000358 REQUIRE `?` \ time_to_stop_t9: \ 00000358 DS8 4 \ 0000035C REQUIRE `?` \ comanda: \ 0000035C DS8 4 \ 00000360 REQUIRE `?` \ INC_show: \ 00000360 DS8 4 \ 00000364 REQUIRE `?` \ old_ed_redraw: \ 00000364 DS8 4 \ 00000368 REQUIRE `?` \ 00000368 DS8 64 \ 000003A8 REQUIRE `?` \ fontColor: \ 000003A8 DS8 1 \ 000003A9 REQUIRE `?` \ bgrColor: \ 000003A9 DS8 1 \ 000003AA REQUIRE `?` \ 000003AA DS8 2 \ awayMsg: \ 000003AC DS8 64 \ 000003EC REQUIRE `?` \ elf_path: \ 000003EC DS8 256 \ 000004EC REQUIRE `?` \ ContactT9Key: \ 000004EC DS8 32 \ 0000050C REQUIRE `?` \ per_s: \ 0000050C DS8 3 \ 0000050F REQUIRE `?` \ 0000050F DS8 1 \ fontpath: \ 00000510 DS8 64 \ 00000550 REQUIRE `?` \ CsmAdr: \ 00000550 DS8 12 \ 0000055C REQUIRE `?` \ awayHelloMsg: \ 0000055C DS8 24 \ 00000574 REQUIRE `?` \ ignor_list: \ 00000574 DS8 256 \ 00000674 REQUIRE `?` \ playing: \ 00000674 DS8 16 \ 00000684 REQUIRE `?` \ PASS: \ 00000684 DS8 12 \ 00000690 REQUIRE `?` \ sndStartup: \ 00000690 DS8 64 \ 000006D0 REQUIRE `?` \ sndSrvMsg: \ 000006D0 DS8 64 \ 00000710 REQUIRE `?` \ sndGlobal: \ 00000710 DS8 64 \ 00000750 REQUIRE `?` \ sndGlobal2: \ 00000750 DS8 64 \ 00000790 REQUIRE `?` \ sndMsg: \ 00000790 DS8 64 \ 000007D0 REQUIRE `?` \ sndMsg2: \ 000007D0 DS8 64 \ 00000810 REQUIRE `?` \ sndMsgSent: \ 00000810 DS8 64 \ 00000850 REQUIRE `?` \ pingsnd: \ 00000850 DS8 64 \ 00000890 REQUIRE `?` \ SMILE_FILE: \ 00000890 DS8 64 \ 000008D0 REQUIRE `?` \ TEMPLATES_PATH: \ 000008D0 DS8 64 \ 00000910 REQUIRE `?` \ ICON_PATH: \ 00000910 DS8 64 \ 00000950 REQUIRE `?` \ SMILE_PATH: \ 00000950 DS8 64 \ 00000990 REQUIRE `?` \ XSTATUSES_PATH: \ 00000990 DS8 64 \ 000009D0 REQUIRE `?` \ HIST_PATH: \ 000009D0 DS8 64 \ 00000A10 REQUIRE `?` \ NATICQ_HOST: \ 00000A10 DS8 128 \ 00000A90 REQUIRE `?` \ talk_sound: \ 00000A90 DS8 128 \ 00000B10 REQUIRE `?` \ unread_msg_info: \ 00000B10 DS8 64 \ 00000B50 REQUIRE `?` \ mytmr3: \ 00000B50 DS8 16 \ 00000B60 REQUIRE `?` \ PINGO: \ 00000B60 DS8 256 \ 00000C60 REQUIRE `?` \ away_msg: \ 00000C60 DS8 264 \ 00000D68 REQUIRE `?` \ away_msg_time: \ 00000D68 DS8 64 \ 00000DA8 REQUIRE `?` \ away_msg_time_dace: \ 00000DA8 DS8 16 \ 00000DB8 REQUIRE `?` \ tim_zone: \ 00000DB8 DS8 16 \ 00000DC8 REQUIRE `?` \ away_tmr: \ 00000DC8 DS8 16 \ 00000DD8 REQUIRE `?` \ mytmr: \ 00000DD8 DS8 16 \ 00000DE8 REQUIRE `?` \ mytmr2: \ 00000DE8 DS8 16 \ 00000DF8 REQUIRE `?` \ mytmr4: \ 00000DF8 DS8 16 \ 00000E08 REQUIRE `?` \ onlineTime: \ 00000E08 DS8 128 \ 00000E88 REQUIRE `?` \ onContact: \ 00000E88 DS8 64 \ 00000EC8 REQUIRE `?` \ incs2: \ 00000EC8 DS8 16 \ 00000ED8 REQUIRE `?` \ logmsg: \ 00000ED8 DS8 256 \ 00000FD8 REQUIRE `?` \ tmr_illumination: \ 00000FD8 DS8 16 \ 00000FE8 REQUIRE `?` \ tmr_vibra: \ 00000FE8 DS8 16 \ 00000FF8 REQUIRE `?` \ reconnect_tmr: \ 00000FF8 DS8 16 \ 00001008 REQUIRE `?` \ tmr_active: \ 00001008 DS8 16 \ 00001018 REQUIRE `?` \ clm_hdr_text: \ 00001018 DS8 64 \ 00001058 REQUIRE `?` \ clmenu_sk_r: \ 00001058 DS8 16 \ 00001068 REQUIRE `?` \ statusTmr: \ 00001068 DS8 16 \ 00001078 REQUIRE `?` \ status: \ 00001078 DS8 64 \ 000010B8 REQUIRE `?` \ cont_hdr: \ 000010B8 DS8 64 \ 000010F8 REQUIRE `?` \ hostbuf2: \ 000010F8 DS8 128 \ 00001178 REQUIRE `?` \ hostname: \ 00001178 DS8 128 \ 000011F8 REQUIRE `?` \ send_tmr: \ 000011F8 DS8 16 \ 00001208 REQUIRE `?` \ I_UIN: \ 00001208 DS8 12 \ 00001214 REQUIRE `?` \ a_txt: \ 00001214 DS8 48 \ 00001244 REQUIRE `?` \ s_txt: \ 00001244 DS8 48 \ 00001274 REQUIRE `?` \ d_txt: \ 00001274 DS8 48 \ 000012A4 REQUIRE `?` \ f_txt: \ 000012A4 DS8 48 \ 000012D4 REQUIRE `?` \ g_txt: \ 000012D4 DS8 48 \ 00001304 REQUIRE `?` \ develop: \ 00001304 DS8 16 \ 00001314 REQUIRE `?` \ requests1: \ 00001314 DS8 24 \ 0000132C REQUIRE `?` \ requests2: \ 0000132C DS8 20 \ 00001340 REQUIRE `?` \ requests3: \ 00001340 DS8 24 \ 00001358 REQUIRE `?` \ requests4: \ 00001358 DS8 20 \ 0000136C REQUIRE `?` \ requests6: \ 0000136C DS8 24 \ 00001384 REQUIRE `?` \ mod_info: \ 00001384 DS8 264 \ 0000148C REQUIRE `?` \ show_nick: \ 0000148C DS8 32 \ 000014AC REQUIRE `?` \ MAINCSM: \ 000014AC DS8 44 \ 000014D8 REQUIRE `?` 7431 { 7432 Quote, 7433 Quote2, 7434 AddSmile, 7435 GetShortInfo, 7436 AddCurContact, 7437 SendAuthReq, 7438 SendAuthGrant, 7439 OpenLogfile, 7440 ClearLog, 7441 }; 7442 7443 char ecm_contactname[64]; \ ecm_contactname: \ 000014D8 DS8 64 \ 00001518 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ ??sk: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ menuproc: \ 00000000 DS8 16 \ 00000010 REQUIRE `?` 7444 \ In segment DATA_C, align 4, align-sorted 7445 static const HEADER_DESC ecmenu_HDR={0,0,NULL,NULL,NULL,(int)ecm_contactname,LGP_NULL}; \ ecmenu_HDR: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, ecm_contactname, 32767 \ ....FF7F0000 \ 00000014 080000000000 DC32 8, 0H, ecmenu_ghook, 0H, menusoftkeys, menu_skt, 0, 0H \ 0000........ \ 00000000.... \ ............ \ 000000000000 \ 0000 \ 00000034 ............ DC32 ecmenu_ITEMS, ecmenu_HNDLS, 9 \ ....09000000 7446 7447 static const MENU_DESC ecmenu_STRUCT= 7448 { 7449 8,NULL,ecmenu_ghook,NULL, 7450 menusoftkeys, 7451 &menu_skt, 7452 0, 7453 NULL, 7454 ecmenu_ITEMS, 7455 ecmenu_HNDLS, 7456 EC_MNU_MAX 7457 }; 7458 \ In segment CODE, align 4, keep-with-next 7459 void ec_menu(EDCHAT_STRUCT *ed_struct) 7460 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 28D04DE2 SUB SP,SP,#+40 \ 00000008 0040A0E1 MOV R4,R0 7461 CLIST *t; 7462 int to_remove[EC_MNU_MAX+1]; 7463 int remove=0; 7464 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4800000A BEQ ??ec_menu_0 7465 { 7466 if (t->name) \ 00000018 ........ LDR R5,??DataTable152 ;; S_ICONS \ 0000001C D800A0E3 MOV R0,#+216 \ 00000020 500D80E3 ORR R0,R0,#0x1400 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 7467 { 7468 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 7469 } 7470 else 7471 { 7472 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 3E1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 7473 } 7474 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 820100EF SWI +386 \ 00000054 082094E5 LDR R2,[R4, #+8] \ 00000058 0210A0E3 MOV R1,#+2 \ 0000005C 020050E1 CMP R0,R2 \ 00000060 0500001A BNE ??ec_menu_4 7475 { 7476 to_remove[++remove]=0; \ 00000064 0020A0E3 MOV R2,#+0 \ 00000068 04208DE5 STR R2,[SP, #+4] 7477 to_remove[++remove]=1; \ 0000006C 0260A0E3 MOV R6,#+2 \ 00000070 0120A0E3 MOV R2,#+1 \ 00000074 08208DE5 STR R2,[SP, #+8] \ 00000078 010000EA B ??ec_menu_5 7478 } 7479 else 7480 { 7481 // to_remove[++remove]=1; 7482 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000007C 0160A0E3 MOV R6,#+1 \ 00000080 04108DE5 STR R1,[SP, #+4] 7483 } 7484 7485 if (ed_struct->ed_answer<=2) \ ??ec_menu_5: \ 00000084 080094E5 LDR R0,[R4, #+8] \ 00000088 030050E3 CMP R0,#+3 \ 0000008C 030000AA BGE ??ec_menu_6 7486 to_remove[++remove]=7; \ 00000090 016086E2 ADD R6,R6,#+1 \ 00000094 0D00A0E1 MOV R0,SP \ 00000098 0720A0E3 MOV R2,#+7 \ 0000009C 062180E7 STR R2,[R0, +R6, LSL #+2] 7487 7488 if (!ed_struct->ed_contact || connect_state!=3) \ ??ec_menu_6: \ 000000A0 000094E5 LDR R0,[R4, #+0] \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 0200000A BEQ ??ec_menu_7 \ 000000AC 8C0295E5 LDR R0,[R5, #+652] \ 000000B0 030050E3 CMP R0,#+3 \ 000000B4 1000000A BEQ ??ec_menu_8 7489 { 7490 to_remove[++remove]=2; \ ??ec_menu_7: \ 000000B8 010086E2 ADD R0,R6,#+1 \ 000000BC 0D20A0E1 MOV R2,SP \ 000000C0 001182E7 STR R1,[R2, +R0, LSL #+2] 7491 to_remove[++remove]=3; \ 000000C4 010080E2 ADD R0,R0,#+1 \ 000000C8 0D10A0E1 MOV R1,SP \ 000000CC 0320A0E3 MOV R2,#+3 \ 000000D0 002181E7 STR R2,[R1, +R0, LSL #+2] 7492 to_remove[++remove]=4; \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 0420A0E3 MOV R2,#+4 \ 000000DC 002181E7 STR R2,[R1, +R0, LSL #+2] 7493 to_remove[++remove]=5; \ 000000E0 010080E2 ADD R0,R0,#+1 \ 000000E4 0520A0E3 MOV R2,#+5 \ 000000E8 002181E7 STR R2,[R1, +R0, LSL #+2] 7494 to_remove[++remove]=6; \ 000000EC 016080E2 ADD R6,R0,#+1 \ 000000F0 0D00A0E1 MOV R0,SP \ 000000F4 0610A0E3 MOV R1,#+6 \ 000000F8 061180E7 STR R1,[R0, +R6, LSL #+2] 7495 } 7496 7497 patch_header(&ecmenu_HDR); \ ??ec_menu_8: \ 000000FC 44509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 00000100 0500A0E1 MOV R0,R5 \ 00000104 ........ _BLF patch_header,??patch_header??rA 7498 to_remove[0]=remove; \ 00000108 00608DE5 STR R6,[SP, #+0] 7499 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 0000010C 0D00A0E1 MOV R0,SP \ 00000110 01002DE9 PUSH {R0} \ 00000114 10002DE9 PUSH {R4} \ 00000118 0530A0E1 MOV R3,R5 \ 0000011C 0900A0E3 MOV R0,#+9 \ 00000120 01002DE9 PUSH {R0} \ 00000124 142085E2 ADD R2,R5,#+20 \ 00000128 0010A0E3 MOV R1,#+0 \ 0000012C 0000A0E3 MOV R0,#+0 \ 00000130 01002DE9 PUSH {R0} \ 00000134 520100EF SWI +338 \ 00000138 10D08DE2 ADD SP,SP,#+16 7500 } 7501 } \ ??ec_menu_0: \ 0000013C 28D08DE2 ADD SP,SP,#+40 ;; stack cleaning \ 00000140 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000144 25750000 DC8 "%u",+0 \ 00000148 ........ DC32 ecmenu_HDR 7502 7503 \ In segment CODE, align 4, keep-with-next 7504 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 7505 { 7506 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 7507 } 7508 \ In segment CODE, align 4, keep-with-next 7509 void AddSmile(GUI *data) 7510 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 7511 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 7512 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 7513 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 7514 } \ 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 \ ??DataTable19: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable24: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable40: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable46: \ 00000000 ........ DC32 S_ICONS + 832 \ In segment CODE, align 4, keep-with-next \ ??DataTable50: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable52: \ 00000000 ........ DC32 S_ICONS + 692 \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable130: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable132: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable133: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable136: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable140: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable146: \ 00000000 ........ DC32 `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000074 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000080 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 0000008C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000098 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 000000A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000100 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000104 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000108 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000010C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000110 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000114 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000118 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000011C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000120 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000124 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000130 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000134 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000138 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000013C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000140 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000144 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000148 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000014C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000150 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000154 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000158 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000015C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000160 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000164 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000168 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000016C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000170 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000174 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000178 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000017C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000180 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000184 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000188 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000018C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000190 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000194 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000198 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000019C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E4 00000000 DC32 0 \ `?`: \ 000001E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000200 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000204 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000208 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000020C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000210 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000214 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000218 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000021C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000220 00000000 DC32 0 \ `?`: \ 00000224 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000228 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000022C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000230 00000000 DC32 0 \ `?`: \ 00000234 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000238 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000023C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000240 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000244 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000248 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000024C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000250 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000254 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000258 04000000 DC32 4 \ `?`: \ 0000025C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000260 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000264 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000268 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000026C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000270 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000274 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000278 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000027C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000280 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000284 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000288 F6FFFFFF DC32 -10 \ `?`: \ 0000028C 00000000 DC32 0 \ `?`: \ 00000290 FFFFFFFF DC32 -1 \ `?`: \ 00000294 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000298 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000029C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002A4 00000000 DC32 0 \ `?`: \ 000002A8 00000000 DC32 0H \ `?`: \ 000002AC 01000000 DC32 1 \ `?`: \ 000002B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000002D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000304 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000314 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000324 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000334 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000338 01000000 DC32 1 \ `?`: \ 0000033C 01000000 DC32 1 \ `?`: \ 00000340 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000344 00000000 DC32 0 \ `?`: \ 00000348 03000000 DC32 3 \ `?`: \ 0000034C 00000000 DC32 0 \ `?`: \ 00000350 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000354 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000358 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000035C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000360 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000364 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000368 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000378 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000388 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000398 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003A8 00 DC8 0 \ `?`: \ 000003A9 00 DC8 0 \ 000003AA 0000 DC8 0, 0 \ `?`: \ 000003AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000040C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000041C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000042C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000043C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000044C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000045C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000046C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000047C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000048C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000049C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000004EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000050C 257300 DC8 "%s" \ 0000050F 00 DC8 0 \ `?`: \ 00000510 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000520 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000530 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000540 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000550 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 0000055C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000056C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000574 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000584 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000594 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000604 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000614 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000624 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000634 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000644 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000654 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000664 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000674 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000684 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00000690 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000006D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000700 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000710 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000720 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000730 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000740 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000750 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000760 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000770 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000780 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000790 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000007D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000800 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000810 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000820 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000830 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000840 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000850 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000860 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000870 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000880 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000890 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000008D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000900 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000910 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000920 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000930 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000940 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000950 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000960 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000970 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000980 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000990 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000009D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000A10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000A90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000B10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000B50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000B60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000C60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00000D68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000DF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000E08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000E88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000EC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000ED8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000FD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000FE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000FF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001008 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001018 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001028 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001038 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001048 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001058 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001068 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001078 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001088 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001098 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000010B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000010F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001108 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001118 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001128 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001138 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001148 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001158 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001168 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 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 \ 000000000000 \ `?`: \ 00001214 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001224 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001234 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001244 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001254 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001264 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001274 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001284 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001294 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000012A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000012D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001304 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001314 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 0000132B 00 DC8 0 \ `?`: \ 0000132C 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001340 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00001358 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 0000136C 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 00001384 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001394 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001404 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001414 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001424 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001434 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001444 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001454 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001464 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001474 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001484 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 0000148C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000149C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000014AC ............ DC32 maincsm_onmessage, maincsm_oncreate, maincsm_onclose, 44, 1 \ ............ \ 2C0000000100 \ 0000 \ 000014C0 ............ DC32 minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ ....CCCCAA55 \ 55AA33330000 \ 0000 \ 000014D4 8B00 DC16 139 \ 000014D6 0000 DC8 0, 0 \ `?`: \ 000014D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001508 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 input_awaymsg_sk, 0 \ 0000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ............ DC32 ChangeVibraContact, ChangeSoundContact, ChangeAutoMsg, RqtXText \ ............ \ ........ \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EFF0EEF1 DC8 "\307\340\357\360\356\361 xtext" \ 207874657874 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E2F3EA00 DC8 "\307\342\363\352" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2E8E1F0E000 DC8 "\302\350\341\360\340" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEEFF6E8E800 DC8 "\316\357\366\350\350" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CBE5E200 DC8 "\313\345\342" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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\\%u.txt" \ 25752E747874 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ 00000010 25735C25752E DC8 "%s\\%u.txt" \ 74787400 \ 0000001A 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 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 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 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 \ `?_1`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ 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 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ 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 \ `?`: \ 00000000 C2FBE1F0E0F2 DC8 "\302\373\341\360\340\362\374" \ FC00 Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 92 AddSmile 4 AddStringToLog 196 AddToMain 44 AskNickAndAddContact 4 BackSpaceContactT9 8 ChangeAutoMsg 4 ChangeSound 4 ChangeSoundContact 4 ChangeVibra 4 ChangeVibraContact 4 CheckComand 328 CheckDoubleRun 8 ClearContactT9Key 4 ClearLog 60 ClearSendQ 8 CreateContactMenu 32 CreateEditChat 100 DrawAck 84 DrawAutoMSG 80 DrawOnlineTime 20 DrawPing 12 ElfKiller 4 ExtractAnswer 36 FindContactLOGQByAck 12 FindNextActiveContact 0 FindPrevActiveContact 0 FreeLOGQ 8 FreeTemplates 8 FreeXText2 8 GetHost 0 GetHostsCount 0 GetIconIndex 0 GetLastXTextLOGQ 0 GetOnTotalContact 8 GetPort 16 GetShortInfo 24 GetTempName 20 Get_Online_total 0 IlluminationOff 8 IlluminationOn 28 InputAwayMsg 80 IsIdleUiOnTop 4 IsUrl 44 LastLOGQ 0 LoadTemplates 332 NewLOGQ 12 OpenLogfile 16 ParseAnswer 36 ParseXStatusText 20 Pinger2 20 Play 228 ProcessPacket 376 Quote 152 Quote2 152 ReadDefSettings 160 RecountMenu 20 Remind_Timer2 8 Reminder_timer 4 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 RqtXText 4 SMART_REDRAW 8 SaveAnswer 12 SendAnswer 28 SendAuthGrant 48 SendAuthReq 48 SendMSGACK 8 SetIndividStatus 0 UpdateCLheader 68 UpdateCSMname 4 UpdateConfig 32 UptimeMinHour 0 WriteDefSettings 160 ask_my_info 0 atoi 4 away_timer 24 begin_to_develop 4 contact_keyhook 4 contact_list_ghook 4 contacthandler 28 contactlist_menu_ghook 28 contactlist_menu_iconhndl 668 contactlist_menu_onkey 44 create_connect 312 create_contactlist_menu 24 do_ping 4 do_reconnect 4 ec_menu 72 ecmenu_ghook 4 ed_options_handler 64 edchat_ghook 72 edchat_locret 0 edchat_onkey 348 end_socket 8 free_ICONS 16 get_answer 1092 get_file_size 48 init_time_zone 4 input_awaymsg_ghook 4 input_awaymsg_locret 0 input_awaymsg_onkey 64 main 64 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 96 method0 96 method1 8 method2 8 method3 8 method4 0 method5 24 method8 0 method9 0 my_ed_redraw 16 my_keyhook 12 new_redraw 100 patch_header 8 process_active_timer 12 recon 8 resend 4 send_login 36 set_my_status 4 set_my_xstatus 36 setup_ICONS 12 show_on_contact 64 show_pp_sender 68 start_vibra 8 start_vibra2 8 stop_vibra 4 stop_vibra2 4 to_develop 4 upTime 16 wstrstr 32 Segment part sizes: Function/Label Bytes -------------- ----- patch_header 48 disk 4 UpdateConfig 1396 get_file_size 40 Pinger2 136 SMART_REDRAW 48 Is_Id3tag_Enabled 4 IsIdleUiOnTop 36 timeh 4 timemin 4 FreeXText2 36 away_timer 216 init_time_zone 368 DrawPing 48 Remind_Timer2 64 Reminder_timer 32 UptimeMinHour 64 upTime 84 DrawOnlineTime 120 show_on_contact 364 DrawAutoMSG 108 input_awaymsg_onkey 192 input_awaymsg_ghook 68 input_awaymsg_locret 4 InputAwayMsg 312 setup_ICONS 68 free_ICONS 44 IlluminationOff 52 IlluminationOn 124 ReadDefSettings 304 WriteDefSettings 284 Play 280 start_vibra 92 stop_vibra 84 start_vibra2 60 stop_vibra2 84 ChangeVibra 56 ChangeSound 56 FreeTemplates 56 LoadTemplates 396 RXbuf 16392 TXbuf 16392 ElfKiller 32 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 new_redraw 132 UpdateCLheader 716 ClearContactT9Key 24 AddContactT9Key 44 BackSpaceContactT9 44 create_contactlist_menu 76 contactlist_menu_ghook 180 RecountMenu 160 ChangeVibraContact 44 ChangeSoundContact 44 ChangeAutoMsg 44 RqtXText 28 contact_list_ghook 20 contact_keyhook 48 contacthandler 220 CreateContactMenu 148 contactlist_menu_onkey 1784 GetOnTotalContact 92 contactlist_menu_iconhndl 704 GetHost 192 atoi 84 GetPort 276 GetHostsCount 120 create_connect 728 ClearSendQ 48 end_socket 56 resend 24 SendAnswer 412 send_login 144 do_ping 56 SendMSGACK 52 RequestXText 52 get_answer 1456 AddToMain 556 AddStringToLog 552 ParseXStatusText 152 AddMsgToChat 768 DrawAck 332 ask_my_info 4 set_my_status 72 set_my_xstatus 264 to_develop 92 ReqAddMsgToChat 120 begin_to_develop 52 CheckComand 1876 INC_Nick 32 show_pp_sender 348 Get_Online_total 92 SetIndividStatus 44 ProcessPacket 2600 process_active_timer 148 method0 856 method1 44 method2 36 method3 24 method4 20 method5 208 method8 8 method9 8 my_keyhook 84 ? 84 _softkeys 12 _sk 24 _skt 8 ? 12 maincsm_oncreate 272 maincsm_onclose 296 do_reconnect 40 CheckDoubleRun 116 maincsm_onmessage 2676 minus11 4 maincsm_name_body 280 UpdateCSMname 40 main 352 edchat_locret 4 ExtractAnswer 280 ??FindNextActiveContact_0 64 FindPrevActiveContact 88 ed_options_handler 436 wstrstr 124 IsUrl 424 ParseAnswer 548 SaveAnswer 36 GetTempName 172 DMonth 52 recon 52 edchat_onkey 1204 my_ed_redraw 136 edchat_ghook 544 edchat_desc 84 sk 16 CreateEditChat 1064 Quote 416 Quote2 440 GetShortInfo 168 AddCurContact 52 SendAuthReq 212 SendAuthGrant 204 OpenLogfile 148 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 252 ecmenu_HNDLS 36 S_ICONS 5400 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 menuproc 16 ecmenu_HDR 64 ec_menu 332 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable4 4 ??DataTable10 4 ??DataTable19 4 ??DataTable20 4 ??DataTable24 4 ??DataTable40 4 ??DataTable41 4 ??DataTable46 4 ??DataTable50 4 ??DataTable52 4 ??DataTable53 4 ??DataTable54 4 ??DataTable55 4 ??DataTable57 4 ??DataTable63 4 ??DataTable65 4 ??DataTable66 4 ??DataTable67 4 ??DataTable76 4 ??DataTable78 4 ??DataTable79 4 ??DataTable80 4 ??DataTable81 4 ??DataTable83 4 ??DataTable84 4 ??DataTable87 4 ??DataTable91 4 ??DataTable92 4 ??DataTable93 4 ??DataTable95 4 ??DataTable100 4 ??DataTable110 4 ??DataTable113 4 ??DataTable114 4 ??DataTable115 4 ??DataTable116 4 ??DataTable117 4 ??DataTable118 4 ??DataTable119 4 ??DataTable121 4 ??DataTable122 4 ??DataTable123 4 ??DataTable124 4 ??DataTable126 4 ??DataTable129 4 ??DataTable130 4 ??DataTable132 4 ??DataTable133 4 ??DataTable136 4 ??DataTable140 4 ??DataTable146 4 ??DataTable148 4 ??DataTable149 4 ??DataTable150 4 ??DataTable152 4 ? 5400 ? 8 ? 24 ? 8 ? 16 ? 16 ? 8 ? 8 ? 8 ? 8 ? 8 ? 4 ? 12 ? 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 ? 28 ? 3 ? 3 ? 52 ? 8 ? 3 ? 12 ? 40 ? 2 ? 12 ? 4 ? 4 ? 4 ? 4 ? 4 ? 12 ? 16 ? 3 ? 16 ?_1 8 ? 32 ? 396 ? 8 ? 40 ? 8 Others 1064 36 588 bytes in segment CODE 5 061 bytes in segment DATA_C 5 456 bytes in segment DATA_I 5 456 bytes in segment DATA_ID 33 112 bytes in segment DATA_Z 24 bytes in segment INITTAB 35 500 bytes of CODE memory (+ 1 112 bytes shared) 10 517 bytes of CONST memory 38 568 bytes of DATA memory Errors: none Warnings: none