############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.41A/W32 EVALUATION 26/Feb/2008 18:28:56 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\main.c # # Command line = "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\main.c" -D EVILFOX --preprocess # # "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\X65\List\" -lC # # "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\X65\List\" -o # # "D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\X65\Obj\" -s9 --no_unroll --cpu_mode # # arm --endian little --cpu ARM926EJ-S --stack_align # # 4 --interwork -e --fpu None --dlib_config # # "D:\Pasha\ARM_Embedded_Workbench\Embedded Workbench # # 4.0 Evaluation\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\ARM_Embedded_Workbench\Embedded Workbench # # 4.0 Evaluation\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\X65\List\main.lst # # Object file = D:\Pasha\elf\mod_src\naticq_2nd_mod to # # all(17.02.08)\X65\Obj\main.r79 # # # # # ############################################################################## D:\Pasha\elf\mod_src\naticq_2nd_mod to all(17.02.08)\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 "manage_cl.h" 16 #include "cl_work.h" 17 #include "select_smile.h" 18 #include "revision.h" 19 #ifdef EVILFOX 20 #include "print.h" 21 #endif 22 23 #ifndef NEWSGOLD 24 #define SEND_TIMER 25 #endif 26 27 int total_unread; 28 #define EOP -10 29 int CurrentStatus; 30 int CurrentXStatus; 31 volatile CLIST *cltop; 32 33 #ifdef EVILFOX 34 //=========================mod definitions 35 #ifdef ELKA 36 #pragma swi_number=54 37 __swi __arm void SLI_SetState(unsigned char state); //for sli usage 38 #endif 39 #ifdef NEWSGOLD 40 #pragma swi_number=0x0C5 41 __swi __arm int IsIdleUiOnTop(); //for check if idlegui 42 #endif 43 char upcoming[64]; //for nick that comes online 44 int total_unread2; //for total unread mesages 45 int total_c_online; //for count of contacts who just came online 46 #ifdef ELKA 47 int Is_SLI_On; //for checking if is active sli 48 GBSTMR mytmr; //timer for sli 49 #endif 50 //extern const int SLI_TYPE; //for check where to activate sli 51 int Is_ILU_On; // for ilumination use 52 int seconds; //sekundes 53 int minutes; //minuutes 54 int hours; //hours 55 GBSTMR ctmr; //time counter 56 char online_txt[18]; //online txt 57 extern const unsigned int ONTIME_X; //cordinates for online time ms 58 extern const unsigned int ONTIME_Y; //cordinates for online time ms 59 extern const int Pause_Time; // for time refresher 60 int align=0; //align for png font 61 extern const unsigned int fonto; // font number 62 extern const unsigned int spaco1; // space between letters in png font 63 extern const unsigned int spaco2; // space between letters in png font 64 extern const unsigned int system_color; //system font color 65 int spaco1r; //display 66 extern const char fontpath[64]; //font path for png 67 int time_draw; //refresh for mainscreen 68 void *canvasdata; //just canvasdata 69 int show_ping; //for autoping not show 70 int ping_sec; //for autoping engaging 71 extern const int Show_Ping; //do ping if 1 72 extern const unsigned int PING_X; //cordinates for ping ms 73 extern const unsigned int PING_Y; //cordinates for ping ms 74 char ping_txt[16]; // ping txt 75 extern const unsigned int UNREAD_X; //cordinates for unread ms 76 extern const unsigned int UNREAD_Y; //cordinates for unread ms 77 char unread_txt[16]; //unread msg txt 78 extern const int Is_Unread_On; //show/hide unread on ms 79 extern const int Is_Online_On; //show/hide online time on ms 80 int INC_show; //for popup sender counter 81 char show_nick[64]; //nick save for popup sender 82 int Is_INC_On; // show//hide popup sender 83 GBSTMR incs; // popup sendet timer 84 #ifdef ELKA 85 int font=9; // font for popup sender 86 #else 87 #ifdef NEWSGOLD 88 int font=11; // font for popup sender 89 #else 90 int font=7; // font for popup sender 91 #endif 92 #endif 93 //const char color[4]={255,255,255,100}; // color for popup sender 94 int pp_color; // color for popup sender 95 extern const int Is_DRAWMAIN_On; //show/hide main msg 96 int main_d; // refresher for main msg 97 extern const unsigned int MSG_Y; // cordinates for main msg 98 extern const unsigned int MSG_X; // cordinates for main msg 99 int paused_height; // vertical height of font 100 int in_count; // count incoming messages 101 int out_count; // count outgoing messages 102 #ifdef ELKA 103 char last_msg_buffer[3072]; // last message buffer 104 #endif 105 int comanda; //for check comand to add it to log 106 int msg_away_timer; // time for autostatus 107 extern const unsigned int AUTO_ENGADE; //time to start autostatus 108 int change_back_status; //to do changeback or not 109 int status_rem; //remember your status before change 110 char away_msg_time[64]; //away time char 111 char away_msg[256]; // away txt 112 int away_m; //use to check if auto time engaged 113 extern const int Auto_Status; //use autostatus or not to use 114 extern const char away_msg1[24]; //for hello msg in autostatus 115 extern const char away_msg2[64]; //for automsg txt 116 extern const int time_zone; //for time zone initialization 117 char tim_zone[24]; //timezone txt \ In segment DATA_Z, align 4, align-sorted 118 int In_EXT_On; //to initialize extended sounds \ In_EXT_On: \ 00000000 DS8 4 119 char ext_sound[128]; //path to play or init ext sound 120 extern const char sndMsg2[64]; //path to extended sounds 121 int total_count; //counter for extender sound info display 122 int in_ext; //counter for extender sound info display 123 char LG_MENU2[32]; //moved menu name here for my needs 124 extern const unsigned int main_draw_l; // lenght of txt to draw on main 125 extern const int TIME_OR_MSG; // for check what to draw with main header 126 int icon_change; //for icon change on ms 127 int icon_change2; //for icon change on ms 128 extern int *XStatusesIconArray; // strange need but ok 129 char mod_info[]="2nd generation mod based on revision 1848! mod date: 19.02.08 14:02!"; //just info for mod info 130 //=========================end 131 #endif 132 133 #ifdef EVILFOX 134 //=========================modification functions 135 #ifdef ELKA 136 void SLI_Off(void); 137 void SLI_On() 138 { 139 if (total_unread) 140 { 141 SLI_SetState(1); 142 GBS_StartTimerProc(&mytmr, 21, SLI_Off); 143 } 144 else 145 SLI_SetState(0); 146 } 147 148 void SLI_Off() 149 { 150 SLI_SetState(2); 151 if (total_unread) 152 GBS_StartTimerProc(&mytmr, 21, SLI_On); //26*SLI_time2 153 else 154 SLI_SetState(0); 155 } 156 157 void SLI_Timer() 158 { 159 if(Is_SLI_On) 160 GBS_StartTimerProc(&mytmr, 262, SLI_On); //262*SLI_time 161 } 162 #endif 163 //===============time count========= \ In segment CODE, align 4, keep-with-next 164 void time_count() 165 { 166 seconds++; \ time_count: \ 00000000 ........ LDR R0,??DataTable26 ;; S_ICONS \ 00000004 A01090E5 LDR R1,[R0, #+160] 167 if(seconds==60) \ 00000008 A42090E5 LDR R2,[R0, #+164] \ 0000000C 011081E2 ADD R1,R1,#+1 \ 00000010 3C0051E3 CMP R1,#+60 168 { 169 seconds=0; \ 00000014 0010A003 MOVEQ R1,#+0 170 minutes++; \ 00000018 01208202 ADDEQ R2,R2,#+1 \ 0000001C A01080E5 STR R1,[R0, #+160] 171 } 172 if(minutes==60) \ 00000020 3C0052E3 CMP R2,#+60 \ 00000024 0300001A BNE ??time_count_0 173 { 174 minutes=0; 175 hours++; \ 00000028 A81090E5 LDR R1,[R0, #+168] \ 0000002C 0020A0E3 MOV R2,#+0 \ 00000030 011081E2 ADD R1,R1,#+1 \ 00000034 A81080E5 STR R1,[R0, #+168] \ ??time_count_0: \ 00000038 A42080E5 STR R2,[R0, #+164] 176 } 177 } \ 0000003C 1EFF2FE1 BX LR ;; return 178 \ In segment CODE, align 4, keep-with-next 179 void time_counter() 180 { \ time_counter: \ 00000000 70402DE9 PUSH {R4-R6,LR} 181 if(connect_state==3) \ 00000004 4C509FE5 LDR R5,??time_counter_0 ;; time_counter \ 00000008 ........ LDR R6,??DataTable26 ;; S_ICONS \ 0000000C CF4FA0E3 MOV R4,#+828 \ 00000010 500196E5 LDR R0,[R6, #+336] \ 00000014 030050E3 CMP R0,#+3 \ 00000018 0100001A BNE ??time_counter_1 182 { 183 time_count(); \ 0000001C ........ BL time_count 184 GBS_StartTimerProc(&ctmr, 216, time_counter); \ 00000020 050000EA B ??time_counter_2 185 } 186 else 187 { 188 if(!Pause_Time) \ ??time_counter_1: \ 00000024 30009FE5 LDR R0,??time_counter_0+0x4 ;; Pause_Time \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 000050E3 CMP R0,#+0 189 { 190 seconds=0; \ 00000030 A0008605 STREQ R0,[R6, #+160] 191 minutes=0; \ 00000034 A4008605 STREQ R0,[R6, #+164] 192 hours=0; \ 00000038 A8008605 STREQ R0,[R6, #+168] 193 } 194 GBS_StartTimerProc(&ctmr, 216, time_counter); \ ??time_counter_2: \ 0000003C 0520A0E1 MOV R2,R5 \ 00000040 D810A0E3 MOV R1,#+216 \ 00000044 060084E0 ADD R0,R4,R6 \ 00000048 4D0000EF SWI +77 195 } 196 time_draw=1; \ 0000004C 0100A0E3 MOV R0,#+1 \ 00000050 B40086E5 STR R0,[R6, #+180] 197 } \ 00000054 7080BDE8 POP {R4-R6,PC} ;; return \ ??time_counter_0: \ 00000058 ........ DC32 time_counter \ 0000005C ........ DC32 Pause_Time 198 //=========================time count===== 199 //=========================mainscreen ping=============== 200 static void PingToServer2(void) 201 { 202 TPKT *p; 203 p=malloc(sizeof(PKT)+sizeof(TTime)); 204 GetDateTime(NULL,(TTime *)p->data); 205 p->pkt.uin=0; 206 p->pkt.type=T_ECHO; 207 p->pkt.data_len=sizeof(TTime); 208 SUBPROC((void *)SendAnswer,0,p); 209 } 210 //=========================mainscreen ping============== 211 212 //=========================popup sender========================= \ In segment CODE, align 4, keep-with-next 213 void show_pp_sender() 214 { \ show_pp_sender: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 215 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable26 ;; S_ICONS \ 00000008 C40094E5 LDR R0,[R4, #+196] \ 0000000C 010050E3 CMP R0,#+1 \ 00000010 F081BDB8 POPLT {R4-R8,PC} 216 { 217 WSHDR *ws=AllocWS(64); \ 00000014 4000A0E3 MOV R0,#+64 \ 00000018 250100EF SWI +293 \ 0000001C 0050A0E1 MOV R5,R0 218 ascii2ws(ws,show_nick); \ 00000020 E01F84E2 ADD R1,R4,#+896 \ 00000024 ........ _BLF ascii2ws,??ascii2ws??rA 219 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 2E0100EF SWI +302 \ 00000030 0060A0E1 MOV R6,R0 \ 00000034 0100A0E3 MOV R0,#+1 \ 00000038 2E0100EF SWI +302 \ 0000003C 0070A0E1 MOV R7,R0 \ 00000040 CC0094E5 LDR R0,[R4, #+204] \ 00000044 C50100EF SWI +453 \ 00000048 CC1094E5 LDR R1,[R4, #+204] \ 0000004C 0080A0E1 MOV R8,R0 \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 080200EF SWI +520 \ 00000058 40002DE9 PUSH {R6} \ 0000005C 80002DE9 PUSH {R7} \ 00000060 0010A0E3 MOV R1,#+0 \ 00000064 02002DE9 PUSH {R1} \ 00000068 023088E2 ADD R3,R8,#+2 \ 0000006C 022080E2 ADD R2,R0,#+2 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 B40100EF SWI +436 220 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,GetPaletteAdrByColorIndex(pp_color),GetPaletteAdrByColorIndex(23)); \ 00000078 1700A0E3 MOV R0,#+23 \ 0000007C 2E0100EF SWI +302 \ 00000080 0060A0E1 MOV R6,R0 \ 00000084 D00094E5 LDR R0,[R4, #+208] \ 00000088 2E0100EF SWI +302 \ 0000008C 0070A0E1 MOV R7,R0 \ 00000090 CC0094E5 LDR R0,[R4, #+204] \ 00000094 C50100EF SWI +453 \ 00000098 CC1094E5 LDR R1,[R4, #+204] \ 0000009C 0080A0E1 MOV R8,R0 \ 000000A0 0500A0E1 MOV R0,R5 \ 000000A4 080200EF SWI +520 \ 000000A8 40002DE9 PUSH {R6} \ 000000AC 80002DE9 PUSH {R7} \ 000000B0 0010A0E3 MOV R1,#+0 \ 000000B4 02002DE9 PUSH {R1} \ 000000B8 CC1094E5 LDR R1,[R4, #+204] \ 000000BC 033080E2 ADD R3,R0,#+3 \ 000000C0 02002DE9 PUSH {R1} \ 000000C4 0120A0E3 MOV R2,#+1 \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 011088E2 ADD R1,R8,#+1 \ 000000D0 02002DE9 PUSH {R1} \ 000000D4 0210A0E1 MOV R1,R2 \ 000000D8 4C0100EF SWI +332 221 FreeWS(ws); \ 000000DC 0500A0E1 MOV R0,R5 \ 000000E0 290100EF SWI +297 222 INC_show--; \ 000000E4 C40094E5 LDR R0,[R4, #+196] 223 GBS_StartTimerProc(&incs, 5, show_pp_sender); \ 000000E8 18209FE5 LDR R2,??show_pp_sender_0 ;; show_pp_sender \ 000000EC 010040E2 SUB R0,R0,#+1 \ 000000F0 C40084E5 STR R0,[R4, #+196] \ 000000F4 0510A0E3 MOV R1,#+5 \ 000000F8 F00F84E2 ADD R0,R4,#+960 \ 000000FC 4D0000EF SWI +77 \ 00000100 20D08DE2 ADD SP,SP,#+32 224 } 225 } \ 00000104 F081BDE8 POP {R4-R8,PC} ;; return \ ??show_pp_sender_0: \ 00000108 ........ DC32 show_pp_sender 226 //==================================popup sender=============== 227 //===========================main msg add=================== 228 char a_txt[64]; 229 char s_txt[64]; 230 char d_txt[64]; 231 char f_txt[64]; 232 char g_txt[64]; 233 \ In segment CODE, align 4, keep-with-next 234 static AddToMain(const char *nameu,const char *si) 235 { \ AddToMain: \ 00000000 F0412DE9 PUSH {R4-R8,LR} \ 00000004 80D04DE2 SUB SP,SP,#+128 \ 00000008 0040A0E1 MOV R4,R0 236 char de[64]; 237 char du[64]; 238 int text_l=0; 239 int iz=0; 240 int name_l=0; 241 name_l=strlen(nameu); 242 text_l=main_draw_l-name_l; 243 244 if(strlen(si)>text_l) \ 0000000C 0C519FE5 LDR R5,??AddToMain_0+0x4 ;; `?` \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 1B0000EF SWI +27 \ 00000018 04119FE5 LDR R1,??AddToMain_0+0x8 ;; main_draw_l \ 0000001C 0060A0E3 MOV R6,#+0 \ 00000020 001091E5 LDR R1,[R1, #+0] \ 00000024 008041E0 SUB R8,R1,R0 \ 00000028 0700A0E1 MOV R0,R7 \ 0000002C 1B0000EF SWI +27 \ 00000030 000058E1 CMP R8,R0 \ 00000034 0B00002A BCS ??AddToMain_1 245 { 246 strncpy(du,si,text_l); \ 00000038 0820A0E1 MOV R2,R8 \ 0000003C 0710A0E1 MOV R1,R7 \ 00000040 40008DE2 ADD R0,SP,#+64 \ 00000044 160100EF SWI +278 247 du[text_l]='\0'; \ 00000048 40008DE2 ADD R0,SP,#+64 \ 0000004C 0060C8E7 STRB R6,[R8, +R0] 248 sprintf(de,"%s%s",du,"..."); \ 00000050 313F8FE2 ADR R3,??AddToMain_0 ;; "..." \ 00000054 40208DE2 ADD R2,SP,#+64 \ 00000058 0510A0E1 MOV R1,R5 \ 0000005C 0D00A0E1 MOV R0,SP \ 00000060 160000EF SWI +22 \ 00000064 020000EA B ??AddToMain_2 249 } 250 else 251 strcpy(de, si); \ ??AddToMain_1: \ 00000068 0710A0E1 MOV R1,R7 \ 0000006C 0D00A0E1 MOV R0,SP \ 00000070 1A0000EF SWI +26 252 iz=0; \ ??AddToMain_2: \ 00000074 0070A0E3 MOV R7,#+0 \ 00000078 0D80A0E1 MOV R8,SP \ 0000007C 060000EA B ??AddToMain_3 253 while(strlen(de)!=iz) 254 { 255 if((de[iz]==0x0D)||(de[iz]==0x0A)) de[iz]=0x20; \ ??AddToMain_4: \ 00000080 0000D8E5 LDRB R0,[R8, #+0] 256 iz++; \ 00000084 017087E2 ADD R7,R7,#+1 \ 00000088 0D0050E3 CMP R0,#+13 \ 0000008C 0A005013 CMPNE R0,#+10 \ 00000090 2000A003 MOVEQ R0,#+32 \ 00000094 0000C805 STRBEQ R0,[R8, #+0] \ 00000098 018088E2 ADD R8,R8,#+1 257 } \ ??AddToMain_3: \ 0000009C 0D00A0E1 MOV R0,SP \ 000000A0 1B0000EF SWI +27 \ 000000A4 070050E1 CMP R0,R7 \ 000000A8 F4FFFF1A BNE ??AddToMain_4 258 de[iz]='\0'; \ 000000AC 0D00A0E1 MOV R0,SP \ 000000B0 0060C7E7 STRB R6,[R7, +R0] 259 strcpy(a_txt, s_txt); \ 000000B4 ........ LDR R7,??DataTable26 ;; S_ICONS \ 000000B8 656EA0E3 MOV R6,#+1616 \ 000000BC 071086E0 ADD R1,R6,R7 \ 000000C0 610E87E2 ADD R0,R7,#+1552 \ 000000C4 1A0000EF SWI +26 260 strcpy(s_txt, d_txt); \ 000000C8 698EA0E3 MOV R8,#+1680 \ 000000CC 071088E0 ADD R1,R8,R7 \ 000000D0 070086E0 ADD R0,R6,R7 \ 000000D4 1A0000EF SWI +26 261 strcpy(d_txt, f_txt); \ 000000D8 6D6EA0E3 MOV R6,#+1744 \ 000000DC 071086E0 ADD R1,R6,R7 \ 000000E0 070088E0 ADD R0,R8,R7 \ 000000E4 1A0000EF SWI +26 262 strcpy(f_txt, g_txt); \ 000000E8 718EA0E3 MOV R8,#+1808 \ 000000EC 071088E0 ADD R1,R8,R7 \ 000000F0 070086E0 ADD R0,R6,R7 \ 000000F4 1A0000EF SWI +26 263 sprintf(g_txt, "%s: %s", nameu,de); \ 000000F8 0D30A0E1 MOV R3,SP \ 000000FC 0420A0E1 MOV R2,R4 \ 00000100 081085E2 ADD R1,R5,#+8 \ 00000104 070088E0 ADD R0,R8,R7 \ 00000108 160000EF SWI +22 264 main_d=1; \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 D40087E5 STR R0,[R7, #+212] 265 } \ 00000114 80D08DE2 ADD SP,SP,#+128 \ 00000118 F081BDE8 POP {R4-R8,PC} ;; return \ ??AddToMain_0: \ 0000011C 2E2E2E00 DC8 "..." \ 00000120 ........ DC32 `?` \ 00000124 ........ DC32 main_draw_l 266 //=================================main msg add============ 267 //==================================autostatus============= \ In segment CODE, align 4, keep-with-next 268 void away_engage() 269 { \ away_engage: \ 00000000 30402DE9 PUSH {R4,R5,LR} 270 TTime tt; 271 GetDateTime(NULL,&tt); 272 sprintf(away_msg_time, "(away since %02d : %02d ( %s ) )", tt.hour, tt.min, tim_zone); \ 00000004 ........ LDR R4,??DataTable26 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C 0D10A0E1 MOV R1,SP \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 B40000EF SWI +180 \ 00000018 44109FE5 LDR R1,??away_engage_0 ;; `?` \ 0000001C 510E84E2 ADD R0,R4,#+1296 \ 00000020 01002DE9 PUSH {R0} \ 00000024 0530DDE5 LDRB R3,[SP, #+5] \ 00000028 0420DDE5 LDRB R2,[SP, #+4] 273 away_m=1; \ 0000002C 0150A0E3 MOV R5,#+1 \ 00000030 F40F84E2 ADD R0,R4,#+976 \ 00000034 160000EF SWI +22 274 if(CurrentStatus!=2) \ 00000038 340194E5 LDR R0,[R4, #+308] \ 0000003C F45084E5 STR R5,[R4, #+244] \ 00000040 020050E3 CMP R0,#+2 \ 00000044 04D08DE2 ADD SP,SP,#+4 \ 00000048 3380BD08 POPEQ {R0,R1,R4,R5,PC} 275 { 276 status_rem=CurrentStatus; \ 0000004C F00084E5 STR R0,[R4, #+240] 277 CurrentStatus=2; \ 00000050 0200A0E3 MOV R0,#+2 \ 00000054 340184E5 STR R0,[R4, #+308] 278 set_my_status(); \ 00000058 ........ BL set_my_status 279 change_back_status=1; \ 0000005C EC5084E5 STR R5,[R4, #+236] 280 } 281 } \ 00000060 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??away_engage_0: \ 00000064 ........ DC32 `?` 282 \ In segment CODE, align 4, keep-with-next 283 int my_keyhook(int key, int m) 284 { \ my_keyhook: \ 00000000 30402DE9 PUSH {R4,R5,LR} 285 if (m==KEY_DOWN) \ 00000004 9300A0E3 MOV R0,#+147 \ 00000008 400F80E3 ORR R0,R0,#0x100 \ 0000000C 000051E1 CMP R1,R0 \ 00000010 0A00001A BNE ??my_keyhook_0 286 { 287 if(change_back_status==1) \ 00000014 ........ LDR R5,??DataTable26 ;; S_ICONS \ 00000018 0040A0E3 MOV R4,#+0 \ 0000001C EC0095E5 LDR R0,[R5, #+236] \ 00000020 010050E3 CMP R0,#+1 \ 00000024 0300001A BNE ??my_keyhook_1 288 { 289 CurrentStatus=status_rem; \ 00000028 F00095E5 LDR R0,[R5, #+240] \ 0000002C 340185E5 STR R0,[R5, #+308] 290 set_my_status(); \ 00000030 ........ BL set_my_status 291 change_back_status=0; \ 00000034 EC4085E5 STR R4,[R5, #+236] 292 } 293 #ifdef ELKA 294 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) 295 { 296 msg_away_timer=AUTO_ENGADE; 297 away_engage(); 298 } 299 else 300 #endif 301 msg_away_timer=away_m=0; \ ??my_keyhook_1: \ 00000038 F44085E5 STR R4,[R5, #+244] \ 0000003C E84085E5 STR R4,[R5, #+232] 302 } 303 return 0; \ ??my_keyhook_0: \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 3080BDE8 POP {R4,R5,PC} ;; return 304 } 305 \ In segment CODE, align 4, keep-with-next 306 void init_time_zone() 307 { 308 switch(time_zone) \ init_time_zone: \ 00000000 60319FE5 LDR R3,??init_time_zone_1 ;; time_zone \ 00000004 ........ LDR R2,??DataTable26 ;; S_ICONS \ 00000008 5C119FE5 LDR R1,??init_time_zone_1+0x4 ;; `?` \ 0000000C 00402DE9 PUSH {LR} \ 00000010 003093E5 LDR R3,[R3, #+0] \ 00000014 510EA0E3 MOV R0,#+1296 \ 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 0D080C10 DC8 +13,+8,+12,+16 \ 00000030 12141618 DC8 +18,+20,+22,+24 \ 00000034 1A1C1E20 DC8 +26,+28,+30,+32 \ 00000038 22242628 DC8 +34,+36,+38,+40 \ 0000003C 2A2C2E30 DC8 +42,+44,+46,+48 \ 00000040 32343638 DC8 +50,+52,+54,+56 \ 00000044 3A3C3E40 DC8 +58,+60,+62,+64 \ 00000048 42444648 DC8 +66,+68,+70,+72 \ 0000004C 4A000000 DC8 +74,+0,+0,+0 309 { 310 case 0: 311 sprintf(tim_zone, "GMT -12:00"); 312 break; 313 case 1: 314 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_2: \ 00000050 0C1081E2 ADD R1,R1,#+12 \ 00000054 020080E0 ADD R0,R0,R2 \ 00000058 160000EF SWI +22 \ 0000005C 0080BDE8 POP {PC} 315 break; 316 case 2: 317 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_3: \ 00000060 181081E2 ADD R1,R1,#+24 \ ??init_time_zone_4: \ 00000064 020080E0 ADD R0,R0,R2 \ 00000068 160000EF SWI +22 \ 0000006C 0080BDE8 POP {PC} 318 break; 319 case 3: 320 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_5: \ 00000070 241081E2 ADD R1,R1,#+36 \ 00000074 FAFFFFEA B ??init_time_zone_4 321 break; 322 case 4: 323 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_6: \ 00000078 781081E2 ADD R1,R1,#+120 \ 0000007C F8FFFFEA B ??init_time_zone_4 324 break; 325 case 5: 326 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_7: \ 00000080 301081E2 ADD R1,R1,#+48 \ 00000084 F6FFFFEA B ??init_time_zone_4 327 break; 328 case 6: 329 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 00000088 3C1081E2 ADD R1,R1,#+60 \ 0000008C F4FFFFEA B ??init_time_zone_4 330 break; 331 case 7: 332 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000090 481081E2 ADD R1,R1,#+72 \ 00000094 F2FFFFEA B ??init_time_zone_4 333 break; 334 case 8: 335 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 00000098 541081E2 ADD R1,R1,#+84 \ 0000009C F0FFFFEA B ??init_time_zone_4 336 break; 337 case 9: 338 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 000000A0 601081E2 ADD R1,R1,#+96 \ 000000A4 EEFFFFEA B ??init_time_zone_4 339 break; 340 case 10: 341 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 000000A8 6C1081E2 ADD R1,R1,#+108 \ 000000AC ECFFFFEA B ??init_time_zone_4 342 break; 343 case 11: 344 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000B0 841081E2 ADD R1,R1,#+132 \ 000000B4 EAFFFFEA B ??init_time_zone_4 345 break; 346 case 12: 347 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000B8 901081E2 ADD R1,R1,#+144 \ 000000BC E8FFFFEA B ??init_time_zone_4 348 break; 349 case 13: 350 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000C0 9C1081E2 ADD R1,R1,#+156 \ 000000C4 E6FFFFEA B ??init_time_zone_4 351 break; 352 case 14: 353 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000C8 A81081E2 ADD R1,R1,#+168 \ 000000CC E4FFFFEA B ??init_time_zone_4 354 break; 355 case 15: 356 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000D0 B41081E2 ADD R1,R1,#+180 \ 000000D4 E2FFFFEA B ??init_time_zone_4 357 break; 358 case 16: 359 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000D8 C01081E2 ADD R1,R1,#+192 \ 000000DC E0FFFFEA B ??init_time_zone_4 360 break; 361 case 17: 362 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000E0 CC1081E2 ADD R1,R1,#+204 \ 000000E4 DEFFFFEA B ??init_time_zone_4 363 break; 364 case 18: 365 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000E8 D81081E2 ADD R1,R1,#+216 \ 000000EC DCFFFFEA B ??init_time_zone_4 366 break; 367 case 19: 368 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000F0 E41081E2 ADD R1,R1,#+228 \ 000000F4 DAFFFFEA B ??init_time_zone_4 369 break; 370 case 20: 371 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000F8 F01081E2 ADD R1,R1,#+240 \ 000000FC D8FFFFEA B ??init_time_zone_4 372 break; 373 case 21: 374 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 00000100 FC1081E2 ADD R1,R1,#+252 \ 00000104 D6FFFFEA B ??init_time_zone_4 375 break; 376 case 22: 377 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 00000108 421F81E2 ADD R1,R1,#+264 \ 0000010C D4FFFFEA B ??init_time_zone_4 378 break; 379 case 23: 380 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000110 451F81E2 ADD R1,R1,#+276 \ 00000114 D2FFFFEA B ??init_time_zone_4 381 break; 382 case 24: 383 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 00000118 481F81E2 ADD R1,R1,#+288 \ 0000011C D0FFFFEA B ??init_time_zone_4 384 break; 385 case 25: 386 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000120 4B1F81E2 ADD R1,R1,#+300 \ 00000124 CEFFFFEA B ??init_time_zone_4 387 break; 388 case 26: 389 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 00000128 4E1F81E2 ADD R1,R1,#+312 \ 0000012C CCFFFFEA B ??init_time_zone_4 390 break; 391 case 27: 392 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000130 511F81E2 ADD R1,R1,#+324 \ 00000134 CAFFFFEA B ??init_time_zone_4 393 break; 394 case 28: 395 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 00000138 541F81E2 ADD R1,R1,#+336 \ 0000013C C8FFFFEA B ??init_time_zone_4 396 break; 397 case 29: 398 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000140 571F81E2 ADD R1,R1,#+348 \ 00000144 C6FFFFEA B ??init_time_zone_4 399 break; 400 case 30: 401 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 00000148 5A1F81E2 ADD R1,R1,#+360 \ 0000014C C4FFFFEA B ??init_time_zone_4 402 break; 403 case 31: 404 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000150 5D1F81E2 ADD R1,R1,#+372 \ 00000154 C2FFFFEA B ??init_time_zone_4 405 break; 406 case 32: 407 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 00000158 601F81E2 ADD R1,R1,#+384 \ 0000015C 020080E0 ADD R0,R0,R2 \ 00000160 160000EF SWI +22 408 break; 409 } 410 } \ ??init_time_zone_35: \ 00000164 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000168 ........ DC32 time_zone \ 0000016C ........ DC32 `?` 411 //==================================autostatus============= 412 //============================init extended sounds============= \ In segment CODE, align 4, keep-with-next 413 void Init_Ext_Sounds(void) 414 { \ Init_Ext_Sounds: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 415 total_count=0; \ 00000004 ........ LDR R4,??DataTable26 ;; S_ICONS 416 in_ext=0; 417 // unsigned int uli; 418 char msgboxer[64]; 419 CLIST *t; 420 t=(CLIST *)(&cltop); \ 00000008 ........ LDR R7,??DataTable8 ;; `?` \ 0000000C 48D04DE2 SUB SP,SP,#+72 \ 00000010 0050A0E3 MOV R5,#+0 \ 00000014 F85084E5 STR R5,[R4, #+248] \ 00000018 FC5084E5 STR R5,[R4, #+252] \ 0000001C 906084E2 ADD R6,R4,#+144 \ 00000020 2880A0E3 MOV R8,#+40 \ 00000024 508E88E3 ORR R8,R8,#0x500 \ 00000028 070000EA B ??Init_Ext_Sounds_0 421 while(t=(CLIST *)(t->next)) 422 { 423 if(!t->isgroup) 424 { 425 total_count++; 426 volatile int hFile_ex; 427 unsigned int io_error_ex = 0; 428 sprintf(ext_sound, "%s%d.wav", sndMsg2, t->uin); 429 hFile_ex = fopen(ext_sound,A_ReadOnly + A_BIN,P_READ, &io_error_ex); 430 if(hFile_ex!=-1) 431 { 432 in_ext++; \ ??Init_Ext_Sounds_1: \ 0000002C FC0094E5 LDR R0,[R4, #+252] 433 t->ext_snd=1; 434 fclose(hFile_ex, &io_error_ex); \ 00000030 04108DE2 ADD R1,SP,#+4 \ 00000034 010080E2 ADD R0,R0,#+1 \ 00000038 FC0084E5 STR R0,[R4, #+252] \ 0000003C 0100A0E3 MOV R0,#+1 \ 00000040 600086E5 STR R0,[R6, #+96] \ 00000044 00009DE5 LDR R0,[SP, #+0] \ 00000048 0D0000EF SWI +13 435 } \ ??Init_Ext_Sounds_0: \ 0000004C 006096E5 LDR R6,[R6, #+0] \ 00000050 000056E3 CMP R6,#+0 \ 00000054 1600000A BEQ ??Init_Ext_Sounds_2 \ 00000058 080096E5 LDR R0,[R6, #+8] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 F9FFFF1A BNE ??Init_Ext_Sounds_0 \ 00000064 F80094E5 LDR R0,[R4, #+248] \ 00000068 ........ LDR R2,??DataTable9 ;; sndMsg2 \ 0000006C 010080E2 ADD R0,R0,#+1 \ 00000070 F80084E5 STR R0,[R4, #+248] \ 00000074 04508DE5 STR R5,[SP, #+4] \ 00000078 0C3096E5 LDR R3,[R6, #+12] \ 0000007C 181087E2 ADD R1,R7,#+24 \ 00000080 040088E0 ADD R0,R8,R4 \ 00000084 160000EF SWI +22 \ 00000088 04308DE2 ADD R3,SP,#+4 \ 0000008C 8020A0E3 MOV R2,#+128 \ 00000090 801CA0E3 MOV R1,#+32768 \ 00000094 040088E0 ADD R0,R8,R4 \ 00000098 0A0000EF SWI +10 \ 0000009C 00008DE5 STR R0,[SP, #+0] \ 000000A0 00009DE5 LDR R0,[SP, #+0] \ 000000A4 010070E3 CMN R0,#+1 \ 000000A8 DFFFFF1A BNE ??Init_Ext_Sounds_1 436 else 437 t->ext_snd=0; \ 000000AC 605086E5 STR R5,[R6, #+96] \ 000000B0 E5FFFFEA B ??Init_Ext_Sounds_0 438 } 439 } 440 sprintf(msgboxer, "Complete!\n" 441 "Enabled for:\n" 442 "%d / %d contacts", 443 in_ext, total_count); \ ??Init_Ext_Sounds_2: \ 000000B4 F83094E5 LDR R3,[R4, #+248] \ 000000B8 FC2094E5 LDR R2,[R4, #+252] \ 000000BC 241087E2 ADD R1,R7,#+36 \ 000000C0 08008DE2 ADD R0,SP,#+8 \ 000000C4 160000EF SWI +22 444 sprintf(LG_MENU2, "Меню ", in_ext, total_count); \ 000000C8 F83094E5 LDR R3,[R4, #+248] \ 000000CC FC2094E5 LDR R2,[R4, #+252] \ 000000D0 4C1087E2 ADD R1,R7,#+76 \ 000000D4 800088E3 ORR R0,R8,#0x80 \ 000000D8 040080E0 ADD R0,R0,R4 \ 000000DC 160000EF SWI +22 445 ShowMSG(1,(int)msgboxer); \ 000000E0 08108DE2 ADD R1,SP,#+8 \ 000000E4 0100A0E3 MOV R0,#+1 \ 000000E8 480100EF SWI +328 446 } \ 000000EC 48D08DE2 ADD SP,SP,#+72 \ 000000F0 F081BDE8 POP {R4-R8,PC} ;; return 447 //============================init extended sounds============= 448 //=========================end of modification functions 449 #endif 450 451 char hostname[128]; 452 extern volatile int total_smiles; 453 extern volatile int total_xstatuses; 454 extern volatile int xstatuses_load; 455 456 #define USE_MLMENU 457 458 #define TMR_SECOND 216 459 460 //IPC 461 const char ipc_my_name[32]=IPC_NATICQ_NAME; 462 const char ipc_xtask_name[]=IPC_XTASK_NAME; 463 IPC_REQ gipc; 464 465 466 char elf_path[256]; 467 int maincsm_id; 468 int maingui_id; 469 \ In segment CODE, align 4, keep-with-next 470 void SMART_REDRAW(void) 471 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 472 int f; 473 LockSched(); \ 00000004 460100EF SWI +326 474 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 268 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 475 UnlockSched(); \ 00000018 470100EF SWI +327 476 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 477 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 268 478 479 //По 10 секунд 480 #ifdef EVILFOX 481 #define ACTIVE_TIME 30 482 #else 483 #define ACTIVE_TIME 360 484 #endif 485 486 //Максимальное количество сообщений в логе 487 #define MAXLOGMSG (20) 488 489 // Строковые описания статусов 490 491 const char S_OFFLINE[]="Offline"; 492 const char S_INVISIBLE[]="Invisible"; 493 const char S_AWAY[]="Away"; 494 const char S_NA[]="N/A"; 495 const char S_OCCUPIED[]="Occupied"; 496 const char S_DND[]="DND"; 497 const char S_ONLINE[]="Online"; 498 const char S_FFC[]="FFC"; 499 500 volatile int SENDMSGCOUNT; 501 502 int IsActiveUp=0; 503 504 int Is_Vibra_Enabled; 505 unsigned int Is_Sounds_Enabled; 506 int Is_Show_Offline; 507 int Is_Show_Groups; 508 509 int S_ICONS[TOTAL_ICONS+1]; 510 511 512 513 WSHDR *ews; 514 515 extern const unsigned int UIN; 516 extern const char PASS[]; 517 518 static const char * const icons_names[TOTAL_ICONS]= 519 { 520 "offline.png", 521 "invisible.png", 522 "away.png", 523 "na.png", 524 "occupied.png", 525 "dnd.png", 526 "depression.png", 527 "evil.png", 528 "home.png", 529 "lunch.png", 530 "work.png", 531 "online.png", 532 "ffc.png", 533 "message.png", 534 "unknown.png", 535 "groupon.png", 536 "groupoff.png", 537 "null.png", 538 "addcont.png", 539 "head.png", 540 "logo.png", 541 "ping.png", 542 "settings.png", 543 "vis1.png", 544 "vis2.png", 545 "vis3.png", 546 "vis4.png", 547 "vis5.png" 548 }; 549 550 extern const char ICON_PATH[]; 551 \ In segment CODE, align 4, keep-with-next 552 void setup_ICONS(void) 553 { \ setup_ICONS: \ 00000000 70402DE9 PUSH {R4-R6,LR} 554 int i=0; \ 00000004 ........ LDR R4,??DataTable11 ;; S_ICONS \ 00000008 34509FE5 LDR R5,??setup_ICONS_0 ;; icons_names \ 0000000C 1C60A0E3 MOV R6,#+28 555 do 556 { 557 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_1: \ 00000010 000094E5 LDR R0,[R4, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0400001A BNE ??setup_ICONS_2 \ 0000001C 24009FE5 LDR R0,??setup_ICONS_0+0x4 ;; ICON_PATH \ 00000020 002095E5 LDR R2,[R5, #+0] \ 00000024 5C10A0E3 MOV R1,#+92 \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 000084E5 STR R0,[R4, #+0] 558 i++; 559 } 560 while(i>2,stop_vibra); \ 00000044 3610A0E3 MOV R1,#+54 \ 00000048 000000EA B ??start_vibra_2 791 else 792 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 0000004C 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000050 040080E0 ADD R0,R0,R4 \ 00000054 4D0000EF SWI +77 793 } 794 } \ 00000058 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 0000005C ........ DC32 vibraPower \ 00000060 ........ DC32 stop_vibra 795 \ In segment CODE, align 4, keep-with-next 796 void stop_vibra(void) 797 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 798 extern const int VIBR_TYPE; 799 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 800 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable26 ;; S_ICONS \ 00000010 401190E5 LDR R1,[R0, #+320] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 401180E5 STR R1,[R0, #+320] \ 0000001C 0080BD08 POPEQ {PC} 801 { 802 if(VIBR_TYPE) \ 00000020 ........ LDR R1,??DataTable22 ;; VIBR_TYPE \ 00000024 24209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000028 001091E5 LDR R1,[R1, #+0] \ 0000002C 8E3EA0E3 MOV R3,#+2272 \ 00000030 000051E3 CMP R1,#+0 \ 00000034 0100000A BEQ ??stop_vibra_1 803 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000038 0610A0E3 MOV R1,#+6 \ 0000003C 000000EA B ??stop_vibra_2 804 else 805 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 806 } 807 } \ 0000004C 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000050 ........ DC32 start_vibra 808 \ In segment CODE, align 4, keep-with-next 809 void ChangeVibra(void) 810 { 811 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable26 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 241190E5 LDR R1,[R0, #+292] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeTemplates \ 00000014 70119FE5 LDR R1,??LoadTemplates_0+0x4 ;; TEMPLATES_PATH \ 00000018 2C008DE2 ADD R0,SP,#+44 \ 0000001C 1A0000EF SWI +26 \ 00000020 2C008DE2 ADD R0,SP,#+44 \ 00000024 1B0000EF SWI +27 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 2C008DE2 ADD R0,SP,#+44 \ 00000030 005087E0 ADD R5,R7,R0 \ 00000034 0420A0E1 MOV R2,R4 \ 00000038 0610A0E1 MOV R1,R6 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 160000EF SWI +22 855 if (GetFileStats(fn,&stat,&ul)==-1) goto L1; \ 00000044 0040E0E3 MVN R4,#+0 \ 00000048 0D20A0E1 MOV R2,SP \ 0000004C 04108DE2 ADD R1,SP,#+4 \ 00000050 2C008DE2 ADD R0,SP,#+44 \ 00000054 840000EF SWI +132 \ 00000058 040050E1 CMP R0,R4 \ 0000005C 0A00000A BEQ ??LoadTemplates_1 856 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 857 if ((f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul))==-1) \ 0000006C 0D30A0E1 MOV R3,SP \ 00000070 8020A0E3 MOV R2,#+128 \ 00000074 801CA0E3 MOV R1,#+32768 \ 00000078 2C008DE2 ADD R0,SP,#+44 \ 0000007C 0A0000EF SWI +10 \ 00000080 0080A0E1 MOV R8,R0 \ 00000084 040058E1 CMP R8,R4 \ 00000088 1400001A BNE ??LoadTemplates_2 858 { 859 L1: 860 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 861 if (GetFileStats(fn,&stat,&ul)==-1) return 0; \ 00000098 0D20A0E1 MOV R2,SP \ 0000009C 04108DE2 ADD R1,SP,#+4 \ 000000A0 2C008DE2 ADD R0,SP,#+44 \ 000000A4 840000EF SWI +132 \ 000000A8 040050E1 CMP R0,R4 \ 000000AC 0200001A BNE ??LoadTemplates_3 \ ??LoadTemplates_4: \ 000000B0 0000A0E3 MOV R0,#+0 \ ??LoadTemplates_5: \ 000000B4 4BDF8DE2 ADD SP,SP,#+300 ;; stack cleaning \ 000000B8 F087BDE8 POP {R4-R10,PC} ;; return 862 if ((fsize=stat.size)<=0) return 0; \ ??LoadTemplates_3: \ 000000BC 08709DE5 LDR R7,[SP, #+8] \ 000000C0 010057E3 CMP R7,#+1 \ 000000C4 F9FFFFBA BLT ??LoadTemplates_4 863 f=fopen(fn,A_ReadOnly+A_BIN,P_READ,&ul); \ 000000C8 0D30A0E1 MOV R3,SP \ 000000CC 8020A0E3 MOV R2,#+128 \ 000000D0 801CA0E3 MOV R1,#+32768 \ 000000D4 2C008DE2 ADD R0,SP,#+44 \ 000000D8 0A0000EF SWI +10 \ 000000DC 0080A0E1 MOV R8,R0 864 } 865 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 866 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable26 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 440184E5 STR R0,[R4, #+324] \ 000000F8 0060A0E1 MOV R6,R0 867 p[fread(f,p,fsize,&ul)]=0; \ 000000FC 0050A0E3 MOV R5,#+0 \ 00000100 0D30A0E1 MOV R3,SP \ 00000104 0720A0E1 MOV R2,R7 \ 00000108 0610A0E1 MOV R1,R6 \ 0000010C 0800A0E1 MOV R0,R8 \ 00000110 0B0000EF SWI +11 \ 00000114 0650C0E7 STRB R5,[R0, +R6] 868 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 869 i=0; \ 00000124 0070A0E3 MOV R7,#+0 870 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 871 for(;;) 872 { 873 c=*p; 874 if (c<32) 875 { 876 if (pp&&(pp!=p)) 877 { 878 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 879 templates_lines[i++]=pp; 880 } 881 pp=NULL; 882 if (!c) break; 883 *p=0; 884 } 885 else 886 { 887 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 888 } 889 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 480194E5 LDR R0,[R4, #+328] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 480184E5 STR R0,[R4, #+328] \ 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 890 } 891 return i; \ 00000178 0700A001 MOVEQ R0,R7 \ 0000017C CCFFFF0A BEQ ??LoadTemplates_5 \ 00000180 0050C6E5 STRB R5,[R6, #+0] \ 00000184 EBFFFFEA B ??LoadTemplates_8 \ ??LoadTemplates_0: \ 00000188 ........ DC32 `?` \ 0000018C ........ DC32 TEMPLATES_PATH 892 } 893 894 895 //=================================================================== 896 897 typedef struct 898 { 899 CSM_RAM csm; 900 int gui_id; 901 }MAIN_CSM; 902 903 typedef struct 904 { 905 GUI gui; 906 WSHDR *ws1; 907 WSHDR *ws2; 908 int i1; 909 }MAIN_GUI; 910 911 912 913 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 914 \ In segment DATA_Z, align 4, align-sorted 915 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 916 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 917 918 int connect_state=0; 919 920 int sock=-1; 921 922 volatile unsigned long TOTALRECEIVED; 923 volatile unsigned long TOTALSENDED; 924 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 925 volatile unsigned long ALLTOTALSENDED; 926 927 volatile int sendq_l=0; //Длинна очереди для send 928 volatile void *sendq_p=NULL; //указатель очереди 929 930 volatile int is_gprs_online=1; 931 932 GBSTMR reconnect_tmr; 933 934 extern void kill_data(void *p,void (*func_p)(void *)); 935 \ In segment CODE, align 4, keep-with-next 936 void ElfKiller(void) 937 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 938 extern void *ELF_BEGIN; 939 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000004 158000EF SWI +32789 \ 00000008 0010A0E1 MOV R1,R0 \ 0000000C 04009FE5 LDR R0,??ElfKiller_0 ;; ELF_BEGIN \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 00000018 ........ DC32 ELF_BEGIN 940 } 941 942 943 944 //=============================================================================================== 945 #pragma inline 946 void patch_rect(RECT*rc,int x,int y, int x2, int y2) 947 { 948 rc->x=x; 949 rc->y=y; 950 rc->x2=x2; 951 rc->y2=y2; 952 } 953 954 #pragma inline 955 void patch_header(const HEADER_DESC* head) 956 { 957 ((HEADER_DESC*)head)->rc.x=0; 958 ((HEADER_DESC*)head)->rc.y=YDISP; 959 ((HEADER_DESC*)head)->rc.x2=ScreenW()-1; 960 ((HEADER_DESC*)head)->rc.y2=HeaderH()+YDISP-1; 961 } 962 #pragma inline 963 void patch_input(const INPUTDIA_DESC* inp) 964 { 965 ((INPUTDIA_DESC*)inp)->rc.x=0; 966 ((INPUTDIA_DESC*)inp)->rc.y=HeaderH()+1+YDISP; 967 ((INPUTDIA_DESC*)inp)->rc.x2=ScreenW()-1; 968 ((INPUTDIA_DESC*)inp)->rc.y2=ScreenH()-SoftkeyH()-1; 969 } 970 //=============================================================================================== 971 972 973 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 974 975 volatile int contactlist_menu_id; 976 977 GBSTMR tmr_active; 978 979 volatile int edchat_id; 980 981 //Применяется для добавления сообщений 982 //CLIST *edcontact; 983 //void *edgui_data; 984 985 static int prev_clmenu_itemcount; 986 987 char clm_hdr_text[48]; 988 static const char def_clm_hdr_text[] = LG_CLTITLE; 989 static const char key_clm_hdr_text[] = LG_CLT9INP; 990 991 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 992 static const int menusoftkeys[] = {0,1,2}; 993 static const SOFTKEY_DESC menu_sk[] = 994 { 995 {0x0018, 0x0000, (int)LG_SELECT}, 996 {0x0001, 0x0000, (int)LG_CLOSE}, 997 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 998 }; 999 1000 char clmenu_sk_r[16]; 1001 static const char def_clmenu_sk_r[] = LG_CLOSE; 1002 static const char key_clmenu_sk_r[] = LG_CLEAR; 1003 1004 static const SOFTKEY_DESC clmenu_sk[]= 1005 { 1006 {0x0018, 0x0000, (int)LG_OPTIONS}, 1007 {0x0001, 0x0000, (int)clmenu_sk_r}, 1008 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1009 }; 1010 1011 const SOFTKEYSTAB menu_skt = 1012 { 1013 menu_sk, 0 1014 }; 1015 1016 static const SOFTKEYSTAB clmenu_skt = 1017 { 1018 clmenu_sk, 0 1019 }; 1020 1021 void contactlist_menu_ghook(void *data, int cmd); 1022 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 1023 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 1024 1025 #ifdef USE_MLMENU 1026 static const ML_MENU_DESC contactlist_menu= 1027 { 1028 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1029 menusoftkeys, 1030 &clmenu_skt, 1031 0x11, //+0x400 1032 contactlist_menu_iconhndl, 1033 NULL, //Items 1034 NULL, //Procs 1035 0, //n 1036 1 //Добавочных строк 1037 }; 1038 #else 1039 static const MENU_DESC contactlist_menu= 1040 { 1041 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1042 menusoftkeys, 1043 &clmenu_skt, 1044 0x11, //+0x400 1045 contactlist_menu_iconhndl, 1046 NULL, //Items 1047 NULL, //Procs 1048 0 //n 1049 }; 1050 #endif 1051 1052 //GBSTMR tmr_ping; 1053 int tenseconds_to_ping; 1054 \ In segment CODE, align 4, keep-with-next 1055 LOGQ *NewLOGQ(const char *s) 1056 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1057 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 1058 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1059 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1060 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1061 } 1062 \ In segment CODE, align 4, keep-with-next 1063 LOGQ *LastLOGQ(LOGQ **pp) 1064 { 1065 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1066 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1067 { 1068 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 1069 } 1070 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1071 } 1072 1073 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1074 void FreeLOGQ(LOGQ **pp) 1075 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1076 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1077 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1078 while(p) 1079 { 1080 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1081 mfree(p); \ 00000020 150000EF SWI +21 1082 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1083 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1084 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1085 1086 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1087 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1088 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1089 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1090 LOGQ *qp; 1091 while(qp=q->next) 1092 { 1093 if (qp==p) 1094 { 1095 q->next=p->next; 1096 break; 1097 } 1098 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] 1099 } 1100 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1101 } \ 00000030 0080BDE8 POP {PC} ;; return 1102 1103 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1104 int AddLOGQ(LOGQ **queue, LOGQ *p) 1105 { 1106 LOGQ *q=(LOGQ *)queue; 1107 LOGQ *qp; 1108 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1109 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 1110 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1111 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1112 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1113 } 1114 1115 //Получаем последний полученный X-статус \ In segment CODE, align 4, keep-with-next 1116 char *GetLastXTextLOGQ(CLIST *t) 1117 { 1118 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 701090E5 LDR R1,[R0, #+112] 1119 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1120 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1121 while(p->next) 1122 { 1123 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1124 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1125 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1126 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1127 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1128 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1129 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1130 } 1131 \ In segment CODE, align 4, keep-with-next 1132 int GetIconIndex(CLIST *t) 1133 { 1134 unsigned short s; 1135 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1136 { 1137 s=t->state; 1138 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 1139 if (t->isunread) \ 0000001C 580090E5 LDR R0,[R0, #+88] \ 00000020 000050E3 CMP R0,#+0 1140 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1141 else 1142 { 1143 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 1144 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 1145 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1146 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1147 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1148 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 1149 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 1150 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1151 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1152 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1153 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1154 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1155 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1156 } 1157 } 1158 else 1159 { 1160 return(IS_UNKNOWN); 1161 } 1162 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1163 } 1164 \ In segment CODE, align 4, keep-with-next 1165 LOGQ *FindContactLOGQByAck(TPKT *p) 1166 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1167 CLIST *t; 1168 LockSched(); \ 00000008 460100EF SWI +326 1169 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1170 UnlockSched(); \ 00000018 470100EF SWI +327 1171 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1172 LOGQ *q; 1173 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1174 LockSched(); \ 0000002C 460100EF SWI +326 1175 q=t->log; \ 00000030 705095E5 LDR R5,[R5, #+112] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1176 while(q) 1177 { 1178 if (q->ID==id) break; 1179 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 1180 } 1181 UnlockSched(); \ 0000004C 470100EF SWI +327 1182 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1183 } 1184 1185 1186 char ContactT9Key[32]; 1187 \ In segment CODE, align 4, keep-with-next 1188 void UpdateCLheader(void) 1189 { \ UpdateCLheader: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 1190 if (strlen(ContactT9Key)) \ 00000004 FC609FE5 LDR R6,??UpdateCLheader_0 ;; key_clmenu_sk_r \ 00000008 ........ LDR R7,??DataTable43 ;; S_ICONS \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 944EA0E3 MOV R4,#+2368 \ 00000014 915EA0E3 MOV R5,#+2320 \ 00000018 B78FA0E3 MOV R8,#+732 \ 0000001C 070088E0 ADD R0,R8,R7 \ 00000020 1B0000EF SWI +27 \ 00000024 000050E3 CMP R0,#+0 \ 00000028 0900000A BEQ ??UpdateCLheader_1 1191 { 1192 strcpy(clm_hdr_text,key_clm_hdr_text); \ 0000002C 541086E2 ADD R1,R6,#+84 \ 00000030 070085E0 ADD R0,R5,R7 \ 00000034 1A0000EF SWI +26 1193 strcat(clm_hdr_text,ContactT9Key); \ 00000038 071088E0 ADD R1,R8,R7 \ 0000003C 070085E0 ADD R0,R5,R7 \ 00000040 170000EF SWI +23 1194 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000044 0610A0E1 MOV R1,R6 \ 00000048 070084E0 ADD R0,R4,R7 \ 0000004C 1A0000EF SWI +26 \ 00000050 F381BDE8 POP {R0,R1,R4-R8,PC} 1195 } 1196 else 1197 { 1198 #ifdef EVILFOX 1199 if(TIME_OR_MSG) \ ??UpdateCLheader_1: \ 00000054 B0009FE5 LDR R0,??UpdateCLheader_0+0x4 ;; TIME_OR_MSG \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 1000000A BEQ ??UpdateCLheader_2 1200 { 1201 if(total_c_online>0) \ 00000064 981097E5 LDR R1,[R7, #+152] \ 00000068 8C3097E5 LDR R3,[R7, #+140] \ 0000006C 940097E5 LDR R0,[R7, #+148] \ 00000070 010051E3 CMP R1,#+1 \ 00000074 070000BA BLT ??UpdateCLheader_3 1202 sprintf(clm_hdr_text, "%s(%d/%d) On:%02d",def_clm_hdr_text,total_unread,total_unread2, total_c_online); \ 00000078 02002DE9 PUSH {R1} \ 0000007C 01002DE9 PUSH {R0} \ 00000080 4C2086E2 ADD R2,R6,#+76 \ 00000084 041086E2 ADD R1,R6,#+4 \ ??UpdateCLheader_4: \ 00000088 070085E0 ADD R0,R5,R7 \ 0000008C 160000EF SWI +22 \ 00000090 08D08DE2 ADD SP,SP,#+8 \ 00000094 170000EA B ??UpdateCLheader_5 1203 else 1204 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_3: \ 00000098 01002DE9 PUSH {R0} \ 0000009C 4C2086E2 ADD R2,R6,#+76 \ 000000A0 181086E2 ADD R1,R6,#+24 \ 000000A4 100000EA B ??UpdateCLheader_6 1205 } 1206 else 1207 { 1208 TTime the; 1209 GetDateTime(NULL,&the); \ ??UpdateCLheader_2: \ 000000A8 0D10A0E1 MOV R1,SP \ 000000AC B40000EF SWI +180 1210 if(total_c_online>0) \ 000000B0 980097E5 LDR R0,[R7, #+152] \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 060000BA BLT ??UpdateCLheader_7 1211 sprintf(clm_hdr_text, "%s(%02d:%02d) On:%02d",def_clm_hdr_text, the.hour, the.min, total_c_online); \ 000000BC 01002DE9 PUSH {R0} \ 000000C0 4C2086E2 ADD R2,R6,#+76 \ 000000C4 0500DDE5 LDRB R0,[SP, #+5] \ 000000C8 241086E2 ADD R1,R6,#+36 \ 000000CC 01002DE9 PUSH {R0} \ 000000D0 0830DDE5 LDRB R3,[SP, #+8] \ 000000D4 EBFFFFEA B ??UpdateCLheader_4 1212 else 1213 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ ??UpdateCLheader_7: \ 000000D8 0100DDE5 LDRB R0,[SP, #+1] \ 000000DC 4C2086E2 ADD R2,R6,#+76 \ 000000E0 3C1086E2 ADD R1,R6,#+60 \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 0430DDE5 LDRB R3,[SP, #+4] \ ??UpdateCLheader_6: \ 000000EC 070085E0 ADD R0,R5,R7 \ 000000F0 160000EF SWI +22 \ 000000F4 04D08DE2 ADD SP,SP,#+4 1214 } 1215 #else 1216 strcpy(clm_hdr_text,def_clm_hdr_text); 1217 #endif 1218 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_5: \ 000000F8 601086E2 ADD R1,R6,#+96 \ 000000FC 070084E0 ADD R0,R4,R7 \ 00000100 1A0000EF SWI +26 1219 } 1220 } \ 00000104 F381BDE8 POP {R0,R1,R4-R8,PC} ;; return \ ??UpdateCLheader_0: \ 00000108 ........ DC32 key_clmenu_sk_r \ 0000010C ........ DC32 TIME_OR_MSG 1221 \ In segment CODE, align 4, keep-with-next 1222 void ClearContactT9Key(void) 1223 { 1224 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 732 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1225 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 732 1226 \ In segment CODE, align 4, keep-with-next 1227 void AddContactT9Key(int chr) 1228 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1229 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable43 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C B70F85E2 ADD R0,R5,#+732 \ 00000010 1B0000EF SWI +27 1230 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 1231 { 1232 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C DC42C035 STRBCC R4,[R0, #+732] 1233 } 1234 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 1235 \ In segment CODE, align 4, keep-with-next 1236 void BackSpaceContactT9(void) 1237 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1238 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable43 ;; S_ICONS \ 00000008 B70F84E2 ADD R0,R4,#+732 \ 0000000C 1B0000EF SWI +27 1239 if (l) \ 00000010 000050E3 CMP R0,#+0 1240 { 1241 l--; 1242 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C DB12C015 STRBNE R1,[R0, #+731] 1243 } 1244 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1245 \ In segment CODE, align 4, keep-with-next 1246 void create_contactlist_menu(void) 1247 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1248 int i; 1249 i=CountContacts(); 1250 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable43 ;; S_ICONS 1251 UpdateCLheader(); 1252 patch_header(&contactlist_menuhdr); \ 00000008 50609FE5 LDR R6,??create_contactlist_menu_0 ;; contactlist_menuhdr \ 0000000C ........ _BLF CountContacts,??CountContacts??rA \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 804185E5 STR R4,[R5, #+384] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 000086E5 STR R0,[R6, #+0] \ 00000024 888100EF SWI +33160 \ 00000028 010040E2 SUB R0,R0,#+1 \ 0000002C B400C6E1 STRH R0,[R6, #+4] \ 00000030 8A8100EF SWI +33162 \ 00000034 010040E2 SUB R0,R0,#+1 \ 00000038 B600C6E1 STRH R0,[R6, #+6] 1253 #ifdef USE_MLMENU 1254 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); \ 0000003C 10002DE9 PUSH {R4} \ 00000040 0000A0E3 MOV R0,#+0 \ 00000044 01002DE9 PUSH {R0} \ 00000048 0630A0E1 MOV R3,R6 \ 0000004C 142086E2 ADD R2,R6,#+20 \ 00000050 0010A0E3 MOV R1,#+0 \ 00000054 170200EF SWI +535 \ 00000058 780185E5 STR R0,[R5, #+376] 1255 #else 1256 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 1257 #endif 1258 } \ 0000005C 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000060 ........ DC32 contactlist_menuhdr 1259 \ In segment CODE, align 4, keep-with-next 1260 void contactlist_menu_ghook(void *data, int cmd) 1261 { \ contactlist_menu_ghook: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 1262 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 1263 if (cmd==9) \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 090054E3 CMP R4,#+9 1264 { 1265 pltop->dyn_pltop=NULL; \ 00000014 08108005 STREQ R1,[R0, #+8] \ 00000018 1080BD08 POPEQ {R4,PC} 1266 } 1267 if (cmd==0x0A) \ 0000001C 0A0054E3 CMP R4,#+10 \ 00000020 1080BD18 POPNE {R4,PC} 1268 { 1269 silenthide=0; \ 00000024 14209FE5 LDR R2,??contactlist_menu_ghook_0 ;; S_ICONS + 284 \ 00000028 001082E5 STR R1,[R2, #+0] 1270 pltop->dyn_pltop=XStatusesImgList; \ 0000002C ........ LDR R1,??DataTable31 ;; XStatusesImgList \ 00000030 001091E5 LDR R1,[R1, #+0] \ 00000034 081080E5 STR R1,[R0, #+8] 1271 DisableIDLETMR(); \ 00000038 7F0100EF SWI +383 1272 } 1273 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??contactlist_menu_ghook_0: \ 00000040 ........ DC32 S_ICONS + 284 1274 \ In segment CODE, align 4, keep-with-next 1275 void RecountMenu(CLIST *req, int needfocus) 1276 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1277 int i; 1278 int j; 1279 void *data; 1280 UpdateCLheader(); 1281 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable43 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 780196E5 LDR R0,[R6, #+376] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 1282 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 780196E5 LDR R0,[R6, #+376] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 1283 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 1284 { 1285 j=0; 1286 } 1287 else 1288 { 1289 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 1290 } 1291 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 1292 if (j>=i) j=i-1; 1293 if (j<0) j=0; 1294 if (i!=prev_clmenu_itemcount) \ 00000048 801196E5 LDR R1,[R6, #+384] \ 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 1295 { 1296 prev_clmenu_itemcount=i; \ 00000064 800186E5 STR R0,[R6, #+384] 1297 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 1298 } 1299 if(needfocus) SetCursorToMenuItem(data,j); \ ??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 1300 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 780196E5 LDR R0,[R6, #+376] \ 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 1301 } 1302 \ In segment CODE, align 4, keep-with-next 1303 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 1304 { \ contactlist_menu_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 0140A0E1 MOV R4,R1 1305 CLIST *t; 1306 int i; 1307 i=GetCurMenuItem(data); \ 00000008 8F0100EF SWI +399 1308 t=FindContactByN(i); \ 0000000C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000010 0050A0E1 MOV R5,R0 1309 if (msg->keys==0x18) \ 00000014 F200D4E1 LDRSH R0,[R4, #+2] \ 00000018 180050E3 CMP R0,#+24 \ 0000001C 0100001A BNE ??contactlist_menu_onkey_0 1310 { 1311 ShowMainMenu(); \ 00000020 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 1312 return(-1); \ 00000024 270000EA B ??contactlist_menu_onkey_1 1313 } 1314 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_0: \ 00000028 ........ LDR R8,??DataTable43 ;; S_ICONS \ 0000002C FF60A0E3 MOV R6,#+255 \ 00000030 FF6C86E3 ORR R6,R6,#0xFF00 \ 00000034 B77FA0E3 MOV R7,#+732 \ 00000038 3D0050E3 CMP R0,#+61 \ 0000003C 2300001A BNE ??contactlist_menu_onkey_2 1315 { 1316 if (t) \ 00000040 000055E3 CMP R5,#+0 \ 00000044 2B00000A BEQ ??contactlist_menu_onkey_3 1317 { 1318 if (t->isgroup) \ 00000048 080095E5 LDR R0,[R5, #+8] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 0500000A BEQ ??contactlist_menu_onkey_4 1319 { 1320 t->state^=0xFFFF; \ 00000054 B405D5E1 LDRH R0,[R5, #+84] 1321 RecountMenu(t, 1); \ 00000058 0110A0E3 MOV R1,#+1 \ 0000005C 000026E0 EOR R0,R6,R0 \ 00000060 B405C5E1 STRH R0,[R5, #+84] \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 210000EA B ??contactlist_menu_onkey_5 1322 return(-1); 1323 } 1324 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_4: \ 0000006C 080087E0 ADD R0,R7,R8 \ 00000070 1B0000EF SWI +27 \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0500000A BEQ ??contactlist_menu_onkey_6 1325 { 1326 ClearContactT9Key(); \ 0000007C 2010A0E3 MOV R1,#+32 \ 00000080 080087E0 ADD R0,R7,R8 \ 00000084 1D0100EF SWI +285 1327 RecountMenu(NULL, 1); \ 00000088 0110A0E3 MOV R1,#+1 \ 0000008C 0000A0E3 MOV R0,#+0 \ 00000090 ........ BL RecountMenu 1328 } 1329 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_2: \ 000000D0 010050E3 CMP R0,#+1 \ 000000D4 0900001A BNE ??contactlist_menu_onkey_8 1335 { 1336 if (strlen(ContactT9Key)) \ 000000D8 080087E0 ADD R0,R7,R8 \ 000000DC 1B0000EF SWI +27 \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 0500000A BEQ ??contactlist_menu_onkey_8 1337 { 1338 BackSpaceContactT9(); \ 000000E8 ........ BL BackSpaceContactT9 1339 RecountMenu(NULL, 1); \ 000000EC 0110A0E3 MOV R1,#+1 \ 000000F0 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_5: \ 000000F4 ........ BL RecountMenu 1340 return(-1); \ ??contactlist_menu_onkey_3: \ 000000F8 0000E0E3 MVN R0,#+0 \ 000000FC F08FBDE8 POP {R4-R11,PC} 1341 } 1342 } 1343 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_8: \ 00000100 040094E5 LDR R0,[R4, #+4] \ 00000104 ........ LDR R9,??DataTable38 ;; `?` \ 00000108 F210D0E1 LDRSH R1,[R0, #+2] \ 0000010C 00A0A0E3 MOV R10,#+0 \ 00000110 01B0A0E3 MOV R11,#+1 \ 00000114 9320A0E3 MOV R2,#+147 \ 00000118 402F82E3 ORR R2,R2,#0x100 \ 0000011C 020051E1 CMP R1,R2 \ 00000120 1A00001A BNE ??contactlist_menu_onkey_9 1344 { 1345 int key=msg->gbsmsg->submess; \ 00000124 040090E5 LDR R0,[R0, #+4] 1346 #ifdef EVILFOX 1347 if ((key>='0')&&(key<='9')) \ 00000128 300050E3 CMP R0,#+48 \ 0000012C 030000BA BLT ??contactlist_menu_onkey_10 \ 00000130 3A0050E3 CMP R0,#+58 \ 00000134 370000AA BGE ??contactlist_menu_onkey_11 1348 #else 1349 if (((key>='0')&&(key<='9'))||(key=='#')||(key=='*')) 1350 #endif 1351 { 1352 AddContactT9Key(key); \ 00000138 ........ BL AddContactT9Key 1353 RecountMenu(NULL, 1); \ 0000013C 940000EA B ??contactlist_menu_onkey_12 1354 return(-1); 1355 } 1356 if (key==VOL_UP_BUTTON) \ ??contactlist_menu_onkey_10: \ 00000140 0D0050E3 CMP R0,#+13 \ 00000144 6B00001A BNE ??contactlist_menu_onkey_13 1357 { 1358 char *small_info=malloc(256); \ 00000148 400FA0E3 MOV R0,#+256 \ 0000014C 140000EF SWI +20 \ 00000150 0050A0E1 MOV R5,R0 1359 sprintf(small_info, "Online time:\n" 1360 "%02d:%02d:%02d\n" 1361 "Server:\n" 1362 "%s" 1363 , hours, minutes, seconds, hostname); \ 00000154 750E88E2 ADD R0,R8,#+1872 \ 00000158 01002DE9 PUSH {R0} \ 0000015C A00098E5 LDR R0,[R8, #+160] \ 00000160 601089E2 ADD R1,R9,#+96 \ 00000164 01002DE9 PUSH {R0} \ 00000168 A43098E5 LDR R3,[R8, #+164] \ 0000016C A82098E5 LDR R2,[R8, #+168] \ 00000170 0500A0E1 MOV R0,R5 \ 00000174 160000EF SWI +22 1364 ShowMSG(1,(int)small_info); \ 00000178 0510A0E1 MOV R1,R5 \ 0000017C 0100A0E3 MOV R0,#+1 \ 00000180 480100EF SWI +328 1365 mfree(small_info); \ 00000184 0500A0E1 MOV R0,R5 \ 00000188 150000EF SWI +21 \ 0000018C 08D08DE2 ADD SP,SP,#+8 1366 } 1367 if (key==LEFT_BUTTON) 1368 { 1369 #ifdef EVILFOX 1370 while(t=(CLIST *)(t->next)) 1371 { 1372 if (t->isunread) goto doit; 1373 } 1374 t=(CLIST *)(&cltop); 1375 while(t=(CLIST *)(t->next)) 1376 { 1377 if (t->isunread) goto doit; 1378 } 1379 t=(CLIST *)(&cltop); 1380 if(Is_Show_Groups) 1381 { 1382 while(t=(CLIST *)(t->next)) 1383 { 1384 if (t->isgroup) 1385 { 1386 if(!t->state) 1387 t->state^=0xFFFF; 1388 } 1389 } 1390 } 1391 goto doit2; 1392 doit: 1393 { 1394 CLIST *g=FindGroupByID(t->group); 1395 if (g) 1396 { 1397 if (g->state) 1398 { 1399 g->state=0; 1400 } 1401 } 1402 } 1403 doit2: 1404 RecountMenu(t, 1); 1405 #else 1406 IsActiveUp=!IsActiveUp; 1407 RecountMenu(NULL, 1); 1408 #endif 1409 return(-1); 1410 } 1411 #ifdef EVILFOX 1412 if (key=='*') 1413 { 1414 while(t=(CLIST *)(t->next)) 1415 { 1416 if (t->just_now) goto doit3; 1417 } 1418 t=(CLIST *)(&cltop); 1419 while(t=(CLIST *)(t->next)) 1420 { 1421 if (t->just_now) goto doit3; 1422 } 1423 return(-1); 1424 doit3: 1425 { 1426 CLIST *g=FindGroupByID(t->group); 1427 if (g) 1428 { 1429 if (g->state) 1430 { 1431 g->state=0; 1432 } 1433 } 1434 } 1435 RecountMenu(t, 1); 1436 return(-1); 1437 } 1438 if (key=='#') 1439 { 1440 while(t=(CLIST *)(t->next)) 1441 { 1442 if (t->isactive) goto doit4; 1443 } 1444 t=(CLIST *)(&cltop); 1445 while(t=(CLIST *)(t->next)) 1446 { 1447 if (t->isactive) goto doit4; 1448 } 1449 return(-1); 1450 doit4: 1451 { 1452 CLIST *g=FindGroupByID(t->group); 1453 if (g) 1454 { 1455 if (g->state) 1456 { 1457 g->state=0; 1458 } 1459 } 1460 } 1461 RecountMenu(t, 1); 1462 return(-1); 1463 } 1464 #endif 1465 if (key==RIGHT_BUTTON) 1466 { 1467 //Послать запрос текста XStatus 1468 if (t) 1469 { 1470 if (!t->isgroup) 1471 { 1472 FreeXText(t); 1473 t->req_xtext=0; 1474 RequestXText(t->uin); 1475 RefreshGUI(); 1476 return(-1); 1477 } 1478 } 1479 } 1480 if (key==GREEN_BUTTON) 1481 { 1482 #ifdef EVILFOX 1483 IsActiveUp=!IsActiveUp; 1484 RecountMenu(NULL, 1); 1485 #else 1486 if (t && Is_Show_Groups) {//есть контакт и показываем группы? 1487 if (!t->isgroup) 1488 t=FindGroupByID(t->group); 1489 if (t && !t->state) {//группа нашлась и она открыта? 1490 t->state^=0xFFFF; 1491 RecountMenu(t, 1); 1492 } 1493 } 1494 #endif 1495 return(-1); 1496 } 1497 } 1498 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_9: \ 00000190 040094E5 LDR R0,[R4, #+4] \ 00000194 652F8BE3 ORR R2,R11,#0x194 \ 00000198 F210D0E1 LDRSH R1,[R0, #+2] \ 0000019C 020051E1 CMP R1,R2 \ 000001A0 9300001A BNE ??contactlist_menu_onkey_14 1499 { 1500 if (msg->gbsmsg->submess=='#') \ 000001A4 041090E5 LDR R1,[R0, #+4] \ 000001A8 0940A0E3 MOV R4,#+9 \ 000001AC 424C84E3 ORR R4,R4,#0x4200 \ 000001B0 F250A0E3 MOV R5,#+242 \ 000001B4 C05F85E3 ORR R5,R5,#0x300 \ 000001B8 AA6FA0E3 MOV R6,#+680 \ 000001BC 230051E3 CMP R1,#+35 \ 000001C0 7800001A BNE ??contactlist_menu_onkey_15 1501 { 1502 ClearContactT9Key(); \ 000001C4 2010A0E3 MOV R1,#+32 \ 000001C8 080087E0 ADD R0,R7,R8 \ 000001CC 1D0100EF SWI +285 1503 RecountMenu(NULL, 1); \ 000001D0 0110A0E3 MOV R1,#+1 \ 000001D4 0A00A0E1 MOV R0,R10 \ 000001D8 ........ BL RecountMenu 1504 gipc.name_to=ipc_xtask_name; \ 000001DC 090086E0 ADD R0,R6,R9 \ 000001E0 740088E5 STR R0,[R8, #+116] 1505 gipc.name_from=ipc_my_name; \ 000001E4 A20F89E2 ADD R0,R9,#+648 \ 000001E8 780088E5 STR R0,[R8, #+120] 1506 gipc.data=0; \ 000001EC 7CA088E5 STR R10,[R8, #+124] 1507 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000001F0 743088E2 ADD R3,R8,#+116 \ 000001F4 0B20A0E1 MOV R2,R11 \ 000001F8 0510A0E1 MOV R1,R5 \ 000001FC 0400A0E1 MOV R0,R4 \ 00000200 000100EF SWI +256 1508 if (IsUnlocked()) \ 00000204 430000EF SWI +67 \ 00000208 000050E3 CMP R0,#+0 \ 0000020C B9FFFF0A BEQ ??contactlist_menu_onkey_3 1509 { 1510 KbdLock(); \ 00000210 A90000EF SWI +169 \ 00000214 ABFFFFEA B ??contactlist_menu_onkey_1 1511 } 1512 return(-1); 1513 } \ ??contactlist_menu_onkey_11: \ 00000218 3D0050E3 CMP R0,#+61 \ 0000021C 1000000A BEQ ??contactlist_menu_onkey_16 \ 00000220 3E0050E3 CMP R0,#+62 \ 00000224 D9FFFF1A BNE ??contactlist_menu_onkey_9 \ 00000228 000055E3 CMP R5,#+0 \ 0000022C D7FFFF0A BEQ ??contactlist_menu_onkey_9 \ 00000230 080095E5 LDR R0,[R5, #+8] \ 00000234 000050E3 CMP R0,#+0 \ 00000238 D4FFFF1A BNE ??contactlist_menu_onkey_9 \ 0000023C 0500A0E1 MOV R0,R5 \ 00000240 ........ _BLF FreeXText,??FreeXText??rA \ 00000244 88A085E5 STR R10,[R5, #+136] \ 00000248 0C0095E5 LDR R0,[R5, #+12] \ 0000024C ........ BL RequestXText \ 00000250 960100EF SWI +406 \ 00000254 250000EA B ??contactlist_menu_onkey_17 \ ??contactlist_menu_onkey_18: \ 00000258 580095E5 LDR R0,[R5, #+88] \ 0000025C 000050E3 CMP R0,#+0 \ 00000260 1900001A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_16: \ 00000264 005095E5 LDR R5,[R5, #+0] \ 00000268 000055E3 CMP R5,#+0 \ 0000026C F9FFFF1A BNE ??contactlist_menu_onkey_18 \ 00000270 905088E2 ADD R5,R8,#+144 \ 00000274 020000EA B ??contactlist_menu_onkey_20 \ ??contactlist_menu_onkey_21: \ 00000278 580095E5 LDR R0,[R5, #+88] \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 1100001A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_20: \ 00000284 005095E5 LDR R5,[R5, #+0] \ 00000288 000055E3 CMP R5,#+0 \ 0000028C F9FFFF1A BNE ??contactlist_menu_onkey_21 \ 00000290 300198E5 LDR R0,[R8, #+304] \ 00000294 905088E2 ADD R5,R8,#+144 \ 00000298 000050E3 CMP R0,#+0 \ 0000029C 1000000A BEQ ??contactlist_menu_onkey_22 \ ??contactlist_menu_onkey_23: \ 000002A0 005095E5 LDR R5,[R5, #+0] \ 000002A4 000055E3 CMP R5,#+0 \ 000002A8 0D00000A BEQ ??contactlist_menu_onkey_22 \ 000002AC 080095E5 LDR R0,[R5, #+8] \ 000002B0 000050E3 CMP R0,#+0 \ 000002B4 F9FFFF0A BEQ ??contactlist_menu_onkey_23 \ 000002B8 B405D5E1 LDRH R0,[R5, #+84] \ 000002BC 000050E3 CMP R0,#+0 \ 000002C0 F6FFFF1A BNE ??contactlist_menu_onkey_23 \ 000002C4 B465C5E1 STRH R6,[R5, #+84] \ 000002C8 F4FFFFEA B ??contactlist_menu_onkey_23 \ ??contactlist_menu_onkey_19: \ 000002CC 100095E5 LDR R0,[R5, #+16] \ 000002D0 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000002D4 000050E3 CMP R0,#+0 \ 000002D8 B415D011 LDRHNE R1,[R0, #+84] \ 000002DC 00005113 CMPNE R1,#+0 \ 000002E0 B4A5C011 STRHNE R10,[R0, #+84] \ ??contactlist_menu_onkey_22: \ 000002E4 0110A0E3 MOV R1,#+1 \ 000002E8 0500A0E1 MOV R0,R5 \ 000002EC ........ BL RecountMenu \ ??contactlist_menu_onkey_17: \ 000002F0 0A00E0E1 MVN R0,R10 \ 000002F4 F08FBDE8 POP {R4-R11,PC} \ ??contactlist_menu_onkey_13: \ 000002F8 2A0050E3 CMP R0,#+42 \ 000002FC 0A00000A BEQ ??contactlist_menu_onkey_24 \ 00000300 230050E3 CMP R0,#+35 \ 00000304 1600000A BEQ ??contactlist_menu_onkey_25 \ 00000308 0B0050E3 CMP R0,#+11 \ 0000030C 9FFFFF1A BNE ??contactlist_menu_onkey_9 \ 00000310 140198E5 LDR R0,[R8, #+276] \ 00000314 000050E3 CMP R0,#+0 \ 00000318 00B0A013 MOVNE R11,#+0 \ 0000031C 1B0000EA B ??contactlist_menu_onkey_26 \ ??contactlist_menu_onkey_27: \ 00000320 5C0095E5 LDR R0,[R5, #+92] \ 00000324 000050E3 CMP R0,#+0 \ 00000328 E7FFFF1A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_24: \ 0000032C 005095E5 LDR R5,[R5, #+0] \ 00000330 000055E3 CMP R5,#+0 \ 00000334 F9FFFF1A BNE ??contactlist_menu_onkey_27 \ 00000338 905088E2 ADD R5,R8,#+144 \ ??contactlist_menu_onkey_28: \ 0000033C 005095E5 LDR R5,[R5, #+0] \ 00000340 000055E3 CMP R5,#+0 \ 00000344 6BFFFF0A BEQ ??contactlist_menu_onkey_3 \ 00000348 5C0095E5 LDR R0,[R5, #+92] \ 0000034C 000050E3 CMP R0,#+0 \ 00000350 F9FFFF0A BEQ ??contactlist_menu_onkey_28 \ 00000354 DCFFFFEA B ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_29: \ 00000358 7C0095E5 LDR R0,[R5, #+124] \ 0000035C 000050E3 CMP R0,#+0 \ 00000360 D9FFFF1A BNE ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_25: \ 00000364 005095E5 LDR R5,[R5, #+0] \ 00000368 000055E3 CMP R5,#+0 \ 0000036C F9FFFF1A BNE ??contactlist_menu_onkey_29 \ 00000370 905088E2 ADD R5,R8,#+144 \ ??contactlist_menu_onkey_30: \ 00000374 005095E5 LDR R5,[R5, #+0] \ 00000378 000055E3 CMP R5,#+0 \ 0000037C 5DFFFF0A BEQ ??contactlist_menu_onkey_3 \ 00000380 7C0095E5 LDR R0,[R5, #+124] \ 00000384 000050E3 CMP R0,#+0 \ 00000388 F9FFFF0A BEQ ??contactlist_menu_onkey_30 \ 0000038C CEFFFFEA B ??contactlist_menu_onkey_19 \ ??contactlist_menu_onkey_26: \ 00000390 14B188E5 STR R11,[R8, #+276] \ ??contactlist_menu_onkey_12: \ 00000394 0110A0E3 MOV R1,#+1 \ 00000398 0000A0E3 MOV R0,#+0 \ 0000039C ........ BL RecountMenu \ 000003A0 0A00E0E1 MVN R0,R10 \ 000003A4 F08FBDE8 POP {R4-R11,PC} 1514 if (msg->gbsmsg->submess=='*'){ \ ??contactlist_menu_onkey_15: \ 000003A8 2A0051E3 CMP R1,#+42 \ 000003AC 1000001A BNE ??contactlist_menu_onkey_14 1515 ClearContactT9Key(); \ 000003B0 2010A0E3 MOV R1,#+32 \ 000003B4 080087E0 ADD R0,R7,R8 \ 000003B8 1D0100EF SWI +285 1516 RecountMenu(NULL, 1); \ 000003BC 0110A0E3 MOV R1,#+1 \ 000003C0 0A00A0E1 MOV R0,R10 \ 000003C4 ........ BL RecountMenu 1517 silenthide=1; \ 000003C8 1CB188E5 STR R11,[R8, #+284] 1518 gipc.name_to=ipc_xtask_name; \ 000003CC 090086E0 ADD R0,R6,R9 \ 000003D0 740088E5 STR R0,[R8, #+116] 1519 gipc.name_from=ipc_my_name; \ 000003D4 A20F89E2 ADD R0,R9,#+648 \ 000003D8 780088E5 STR R0,[R8, #+120] 1520 gipc.data=0; \ 000003DC 7CA088E5 STR R10,[R8, #+124] 1521 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000003E0 743088E2 ADD R3,R8,#+116 \ 000003E4 0B20A0E1 MOV R2,R11 \ 000003E8 0510A0E1 MOV R1,R5 \ 000003EC 0400A0E1 MOV R0,R4 \ 000003F0 000100EF SWI +256 1522 } 1523 } 1524 return(0); \ ??contactlist_menu_onkey_14: \ 000003F4 0000A0E3 MOV R0,#+0 \ 000003F8 F08FBDE8 POP {R4-R11,PC} ;; return 1525 } 1526 \ In segment CODE, align 4, keep-with-next 1527 void GetOnTotalContact(int group_id,int *_onlinetotal) 1528 { 1529 CLIST *t; 1530 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable36 ;; S_ICONS + 144 \ 00000004 30002DE9 PUSH {R4,R5} 1531 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 1532 while((t=t->next)) 1533 { 1534 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 1535 { 1536 total++; 1537 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 1538 } 1539 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 1540 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 1541 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 1542 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 1543 1544 \ In segment CODE, align 4, keep-with-next 1545 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 1546 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 1547 CLIST *t; 1548 #ifdef USE_MLMENU 1549 void *item=AllocMLMenuItem(data); 1550 #else 1551 void *item=AllocMenuItem(data); 1552 #endif 1553 int icon; 1554 1555 WSHDR *ws2; 1556 #ifdef USE_MLMENU 1557 WSHDR *ws4; 1558 #endif 1559 WSHDR ws1loc, *ws1; 1560 unsigned short num[128]; 1561 ws1=CreateLocalWS(&ws1loc,num,128); 1562 #ifdef USE_MLMENU 1563 WSHDR ws3loc, *ws3; 1564 unsigned short num3[128]; 1565 ws3=CreateLocalWS(&ws3loc,num3,128); 1566 char s[64]; 1567 #endif 1568 t=FindContactByN(curitem); 1569 if (t) \ 00000008 ........ LDR R8,??DataTable37 ;; S_ICONS \ 0000000C ........ LDR R11,??DataTable38 ;; `?` \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 190200EF SWI +537 \ 00000018 0050A0E1 MOV R5,R0 \ 0000001C 8020A0E3 MOV R2,#+128 \ 00000020 08108DE2 ADD R1,SP,#+8 \ 00000024 920F8DE2 ADD R0,SP,#+584 \ 00000028 270100EF SWI +295 \ 0000002C 0060A0E1 MOV R6,R0 \ 00000030 8020A0E3 MOV R2,#+128 \ 00000034 421F8DE2 ADD R1,SP,#+264 \ 00000038 970F8DE2 ADD R0,SP,#+604 \ 0000003C 270100EF SWI +295 \ 00000040 0070A0E1 MOV R7,R0 \ 00000044 70029DE5 LDR R0,[SP, #+624] \ 00000048 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000004C 00A0B0E1 MOVS R10,R0 \ 00000050 5500000A BEQ ??contactlist_menu_iconhndl_0 1570 { 1571 icon=GetIconIndex(t); \ 00000054 ........ BL GetIconIndex \ 00000058 0090A0E1 MOV R9,R0 1572 if (icon!=IS_GROUP) \ 0000005C 0F0059E3 CMP R9,#+15 \ 00000060 4000000A BEQ ??contactlist_menu_iconhndl_1 1573 { 1574 #ifdef EVILFOX 1575 if(t->just_now) \ 00000064 5C009AE5 LDR R0,[R10, #+92] \ 00000068 14208AE2 ADD R2,R10,#+20 \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 0300000A BEQ ??contactlist_menu_iconhndl_2 \ 00000074 88108BE2 ADD R1,R11,#+136 \ 00000078 BF0F88E2 ADD R0,R8,#+764 1576 { 1577 // char *test=malloc(64); 1578 sprintf(upcoming, ">> %s <<", t->name); \ 0000007C 160000EF SWI +22 1579 wsprintf(ws1,percent_t,upcoming); \ 00000080 BF2F88E2 ADD R2,R8,#+764 1580 // mfree(test); 1581 } 1582 else 1583 wsprintf(ws1,percent_t,t->name); \ ??contactlist_menu_iconhndl_2: \ 00000084 10108BE2 ADD R1,R11,#+16 \ 00000088 0600A0E1 MOV R0,R6 \ 0000008C 240100EF SWI +292 1584 if (t->just_now) \ 00000090 5C009AE5 LDR R0,[R10, #+92] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 0900000A BEQ ??contactlist_menu_iconhndl_3 1585 { 1586 wsInsertChar(ws1,0x0004,1); \ 0000009C 0120A0E3 MOV R2,#+1 \ 000000A0 0410A0E3 MOV R1,#+4 \ 000000A4 0600A0E1 MOV R0,R6 \ 000000A8 1D0000EF SWI +29 1587 wsInsertChar(ws1,0xE008,1); \ 000000AC 0120A0E3 MOV R2,#+1 \ 000000B0 0810A0E3 MOV R1,#+8 \ 000000B4 E01C81E3 ORR R1,R1,#0xE000 \ 000000B8 0600A0E1 MOV R0,R6 \ 000000BC 1D0000EF SWI +29 \ 000000C0 190000EA B ??contactlist_menu_iconhndl_4 1588 } 1589 else 1590 #else 1591 wsprintf(ws1,percent_t,t->name); 1592 #endif 1593 /* if (t->isactive) 1594 { 1595 wsInsertChar(ws1,0x0002,1); 1596 wsInsertChar(ws1,0xE008,1); 1597 }*/ 1598 #ifdef USE_MLMENU 1599 if (t->xtext && t->xtext[0]!=0) \ ??contactlist_menu_iconhndl_3: \ 000000C4 84009AE5 LDR R0,[R10, #+132] \ 000000C8 000050E3 CMP R0,#+0 \ 000000CC 0000D015 LDRBNE R0,[R0, #+0] \ 000000D0 00005013 CMPNE R0,#+0 \ 000000D4 1000000A BEQ ??contactlist_menu_iconhndl_5 1600 { 1601 int i; 1602 zeromem(s,64); \ 000000D8 4010A0E3 MOV R1,#+64 \ 000000DC 820F8DE2 ADD R0,SP,#+520 \ 000000E0 1D0100EF SWI +285 1603 i=t->xtext[0]; \ 000000E4 84009AE5 LDR R0,[R10, #+132] \ 000000E8 0020D0E5 LDRB R2,[R0, #+0] 1604 if (i>63) i=63; 1605 strncpy(s,t->xtext+1,i); \ 000000EC 011080E2 ADD R1,R0,#+1 \ 000000F0 820F8DE2 ADD R0,SP,#+520 \ 000000F4 400052E3 CMP R2,#+64 \ 000000F8 3F20A0A3 MOVGE R2,#+63 \ 000000FC 160100EF SWI +278 1606 wsprintf(ws3,"%c%t",0xE012,s); \ 00000100 823F8DE2 ADD R3,SP,#+520 \ 00000104 1220A0E3 MOV R2,#+18 \ 00000108 E02C82E3 ORR R2,R2,#0xE000 \ 0000010C 94108BE2 ADD R1,R11,#+148 \ 00000110 0700A0E1 MOV R0,R7 \ 00000114 240100EF SWI +292 \ 00000118 030000EA B ??contactlist_menu_iconhndl_4 1607 } 1608 else 1609 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_5: \ 0000011C 0C209AE5 LDR R2,[R10, #+12] \ 00000120 13108BE2 ADD R1,R11,#+19 \ 00000124 0700A0E1 MOV R0,R7 \ 00000128 240100EF SWI +292 1610 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_4: \ 0000012C B605DAE1 LDRH R0,[R10, #+86] \ 00000130 ........ LDR R2,??DataTable39 ;; total_xstatuses \ 00000134 0010A0E1 MOV R1,R0 \ 00000138 002092E5 LDR R2,[R2, #+0] \ 0000013C 020051E1 CMP R1,R2 \ 00000140 1C0000AA BGE ??contactlist_menu_iconhndl_6 \ 00000144 000050E3 CMP R0,#+0 \ 00000148 1A00000A BEQ ??contactlist_menu_iconhndl_6 1611 { 1612 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 0000014C 0120A0E3 MOV R2,#+1 \ 00000150 3700A0E3 MOV R0,#+55 \ 00000154 E10C80E3 ORR R0,R0,#0xE100 \ 00000158 011080E0 ADD R1,R0,R1 \ 0000015C 0700A0E1 MOV R0,R7 \ 00000160 1D0000EF SWI +29 \ 00000164 130000EA B ??contactlist_menu_iconhndl_6 1613 } 1614 #endif 1615 } 1616 else 1617 { 1618 int onlinetotal[2]; 1619 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 00000168 10009AE5 LDR R0,[R10, #+16] \ 0000016C 0D10A0E1 MOV R1,SP \ 00000170 ........ BL GetOnTotalContact 1620 #ifdef USE_MLMENU 1621 wsprintf(ws1,percent_t,t->name); \ 00000174 14208AE2 ADD R2,R10,#+20 \ 00000178 10108BE2 ADD R1,R11,#+16 \ 0000017C 0600A0E1 MOV R0,R6 \ 00000180 240100EF SWI +292 1622 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 00000184 04309DE5 LDR R3,[SP, #+4] \ 00000188 00209DE5 LDR R2,[SP, #+0] \ 0000018C 9C108BE2 ADD R1,R11,#+156 \ 00000190 0700A0E1 MOV R0,R7 \ 00000194 240100EF SWI +292 1623 #else 1624 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 1625 #endif 1626 if (t->state) icon++; //Модификация иконки группы \ 00000198 B405DAE1 LDRH R0,[R10, #+84] \ 0000019C 000050E3 CMP R0,#+0 \ 000001A0 0400000A BEQ ??contactlist_menu_iconhndl_6 \ 000001A4 019089E2 ADD R9,R9,#+1 \ 000001A8 020000EA B ??contactlist_menu_iconhndl_6 1627 } 1628 } 1629 else 1630 { 1631 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 000001AC A4108BE2 ADD R1,R11,#+164 \ 000001B0 0600A0E1 MOV R0,R6 \ 000001B4 240100EF SWI +292 1632 } 1633 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ ??contactlist_menu_iconhndl_6: \ 000001B8 000096E5 LDR R0,[R6, #+0] \ 000001BC B010D0E1 LDRH R1,[R0, #+0] \ 000001C0 0400A0E1 MOV R0,R4 \ 000001C4 980100EF SWI +408 \ 000001C8 00A0A0E1 MOV R10,R0 1634 wstrcpy(ws2,ws1); \ 000001CC 0610A0E1 MOV R1,R6 \ 000001D0 1F0100EF SWI +287 1635 1636 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 000001D4 092188E0 ADD R2,R8,R9, LSL #+2 \ 000001D8 0510A0E1 MOV R1,R5 \ 000001DC 0400A0E1 MOV R0,R4 \ 000001E0 990100EF SWI +409 1637 #ifdef USE_MLMENU 1638 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 000001E4 000097E5 LDR R0,[R7, #+0] \ 000001E8 B010D0E1 LDRH R1,[R0, #+0] \ 000001EC 0400A0E1 MOV R0,R4 \ 000001F0 980100EF SWI +408 \ 000001F4 0060A0E1 MOV R6,R0 1639 wstrcpy(ws4,ws3); \ 000001F8 0710A0E1 MOV R1,R7 \ 000001FC 1F0100EF SWI +287 1640 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 00000200 70029DE5 LDR R0,[SP, #+624] \ 00000204 0630A0E1 MOV R3,R6 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 0A20A0E1 MOV R2,R10 \ 00000210 0510A0E1 MOV R1,R5 \ 00000214 0400A0E1 MOV R0,R4 \ 00000218 180200EF SWI +536 1641 #else 1642 SetMenuItemText(data, item, ws2, curitem); 1643 #endif 1644 } \ 0000021C 9EDF8DE2 ADD SP,SP,#+632 \ 00000220 F08FBDE8 POP {R4-R11,PC} ;; return 1645 1646 //=============================================================================================== 1647 int DNR_ID=0; 1648 int DNR_TRIES=3; 1649 1650 extern const char NATICQ_HOST[]; 1651 extern const unsigned int NATICQ_PORT; 1652 1653 int host_counter = 0; 1654 1655 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1656 const char *GetHost(int cnt, const char *str, char *buf) 1657 { 1658 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 1659 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0E00001A BNE ??GetHost_0 1660 { 1661 for(;cnt;cnt--) 1662 { 1663 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); 1664 if(!*str) str = tmp; 1665 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); 1666 if(!*str) str = tmp; 1667 } 1668 } 1669 tmp = buf; \ ??GetHost_1: \ 0000000C 0200A0E1 MOV R0,R2 1670 begin = str; \ 00000010 0130A0E1 MOV R3,R1 \ 00000014 1B0000EA B ??GetHost_2 \ ??GetHost_3: \ 00000018 011081E2 ADD R1,R1,#+1 \ ??GetHost_4: \ 0000001C 00C0D1E5 LDRB R12,[R1, #+0] \ 00000020 3B005CE3 CMP R12,#+59 \ 00000024 20005C13 CMPNE R12,#+32 \ 00000028 0D005C13 CMPNE R12,#+13 \ 0000002C 0A005C13 CMPNE R12,#+10 \ 00000030 0100001A BNE ??GetHost_5 \ 00000034 00005CE3 CMP R12,#+0 \ 00000038 F6FFFF1A BNE ??GetHost_3 \ ??GetHost_5: \ 0000003C 00005CE3 CMP R12,#+0 \ 00000040 0310A001 MOVEQ R1,R3 \ 00000044 010040E2 SUB R0,R0,#+1 \ ??GetHost_0: \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0100001A BNE ??GetHost_6 \ 00000050 EDFFFFEA B ??GetHost_1 \ ??GetHost_7: \ 00000054 011081E2 ADD R1,R1,#+1 \ ??GetHost_6: \ 00000058 00C0D1E5 LDRB R12,[R1, #+0] \ 0000005C 3B005CE3 CMP R12,#+59 \ 00000060 20005C13 CMPNE R12,#+32 \ 00000064 0D005C13 CMPNE R12,#+13 \ 00000068 0A005C13 CMPNE R12,#+10 \ 0000006C 00005C13 CMPNE R12,#+0 \ 00000070 F7FFFF1A BNE ??GetHost_7 \ 00000074 00005CE3 CMP R12,#+0 \ 00000078 E7FFFF1A BNE ??GetHost_4 \ 0000007C 0310A0E1 MOV R1,R3 \ 00000080 E5FFFFEA B ??GetHost_4 1671 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_8: \ 00000084 011081E2 ADD R1,R1,#+1 \ ??GetHost_2: \ 00000088 00C0D1E5 LDRB R12,[R1, #+0] \ 0000008C 3B005CE3 CMP R12,#+59 \ 00000090 3A005C13 CMPNE R12,#+58 \ 00000094 20005C13 CMPNE R12,#+32 \ 00000098 0D005C13 CMPNE R12,#+13 \ 0000009C 0A005C13 CMPNE R12,#+10 \ 000000A0 00005C13 CMPNE R12,#+0 \ 000000A4 F6FFFF1A BNE ??GetHost_8 1672 end = str; 1673 for(;begin0x2F && attr[k]<0x3A) {ret=ret*10+attr[k]-0x30;} else { if ( attr[k]=='-') {neg=-1;} else {return(ret*neg);}} \ ??atoi_1: \ 00000010 3A0053E3 CMP R3,#+58 \ 00000014 0800002A BCS ??atoi_2 \ 00000018 9C3121E0 MLA R1,R12,R1,R3 \ 0000001C 301041E2 SUB R1,R1,#+48 \ ??atoi_3: \ 00000020 010080E2 ADD R0,R0,#+1 \ ??atoi_0: \ 00000024 0030D0E5 LDRB R3,[R0, #+0] \ 00000028 300053E3 CMP R3,#+48 \ 0000002C F7FFFF2A BCS ??atoi_1 \ 00000030 2D0053E3 CMP R3,#+45 \ 00000034 0020E003 MVNEQ R2,#+0 \ 00000038 F8FFFF0A BEQ ??atoi_3 \ ??atoi_2: \ 0000003C 920100E0 MUL R0,R2,R1 \ 00000040 1EFF2FE1 BX LR ;; return 1685 } 1686 } 1687 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1688 int GetPort(int cnt, const char *str) 1689 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 1690 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 1691 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 1692 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0C00001A BNE ??GetPort_0 \ 0000001C 1B0000EA B ??GetPort_1 1693 { 1694 for(;cnt;cnt--) 1695 { 1696 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); 1697 if(!*str) str = tmp; 1698 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetPort_2: \ 00000020 011081E2 ADD R1,R1,#+1 \ ??GetPort_3: \ 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 0100001A BNE ??GetPort_4 \ 0000003C 000054E3 CMP R4,#+0 \ 00000040 F6FFFF1A BNE ??GetPort_2 1699 if(!*str) str = tmp; \ ??GetPort_4: \ 00000044 000054E3 CMP R4,#+0 \ 00000048 0C10A001 MOVEQ R1,R12 \ 0000004C 010040E2 SUB R0,R0,#+1 \ ??GetPort_0: \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0100001A BNE ??GetPort_5 \ 00000058 0C0000EA B ??GetPort_1 \ ??GetPort_6: \ 0000005C 011081E2 ADD R1,R1,#+1 \ ??GetPort_5: \ 00000060 0040D1E5 LDRB R4,[R1, #+0] \ 00000064 3B0054E3 CMP R4,#+59 \ 00000068 20005413 CMPNE R4,#+32 \ 0000006C 0D005413 CMPNE R4,#+13 \ 00000070 0A005413 CMPNE R4,#+10 \ 00000074 00005413 CMPNE R4,#+0 \ 00000078 F7FFFF1A BNE ??GetPort_6 \ 0000007C 000054E3 CMP R4,#+0 \ 00000080 E7FFFF1A BNE ??GetPort_3 \ 00000084 0C10A0E1 MOV R1,R12 \ 00000088 E5FFFFEA B ??GetPort_3 1700 } 1701 } 1702 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_7: \ 0000008C 011081E2 ADD R1,R1,#+1 \ ??GetPort_1: \ 00000090 0000D1E5 LDRB R0,[R1, #+0] \ 00000094 3B0050E3 CMP R0,#+59 \ 00000098 3A005013 CMPNE R0,#+58 \ 0000009C 20005013 CMPNE R0,#+32 \ 000000A0 0D005013 CMPNE R0,#+13 \ 000000A4 0A005013 CMPNE R0,#+10 \ 000000A8 00005013 CMPNE R0,#+0 \ 000000AC F6FFFF1A BNE ??GetPort_7 1703 if(*str!=':') return NATICQ_PORT; \ 000000B0 ........ LDRB R0,[R1], #+1 \ 000000B4 3A0050E3 CMP R0,#+58 \ 000000B8 58009F15 LDRNE R0,??GetPort_8 ;; NATICQ_PORT \ 000000BC 00009015 LDRNE R0,[R0, #+0] \ 000000C0 1680BD18 POPNE {R1,R2,R4,PC} 1704 str++; 1705 numbuf[5] = 0; \ 000000C4 0520CDE5 STRB R2,[SP, #+5] \ 000000C8 030000EA B ??GetPort_9 1706 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str && numcnt<5; numbuf[numcnt] = *str, str++, numcnt++); \ ??GetPort_10: \ 000000CC ........ LDRB R4,[R1], #+1 \ 000000D0 013083E2 ADD R3,R3,#+1 \ 000000D4 FF3003E2 AND R3,R3,#0xFF \ 000000D8 0040C0E5 STRB R4,[R0, #+0] \ ??GetPort_9: \ 000000DC 0D40A0E1 MOV R4,SP \ 000000E0 040083E0 ADD R0,R3,R4 \ 000000E4 0040D1E5 LDRB R4,[R1, #+0] \ 000000E8 3B0054E3 CMP R4,#+59 \ 000000EC 20005413 CMPNE R4,#+32 \ 000000F0 0D005413 CMPNE R4,#+13 \ 000000F4 0A005413 CMPNE R4,#+10 \ 000000F8 00005413 CMPNE R4,#+0 \ 000000FC 0100000A BEQ ??GetPort_11 \ 00000100 050053E3 CMP R3,#+5 \ 00000104 F0FFFF3A BCC ??GetPort_10 1707 numbuf[numcnt] = 0; \ ??GetPort_11: \ 00000108 0020C0E5 STRB R2,[R0, #+0] 1708 return atoi(numbuf); \ 0000010C 0D00A0E1 MOV R0,SP \ 00000110 ........ BL atoi \ 00000114 1680BDE8 POP {R1,R2,R4,PC} ;; return \ ??GetPort_8: \ 00000118 ........ DC32 NATICQ_PORT 1709 1710 } 1711 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 1712 int GetHostsCount(const char *str) 1713 { 1714 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 1715 for(;cnt;cnt++) 1716 { 1717 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 1718 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 1719 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 1720 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 1721 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 1722 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 1723 1724 } 1725 //--------------------------------------------------------------------------- 1726 \ In segment CODE, align 4, keep-with-next 1727 void create_connect(void) 1728 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1729 char hostbuf[128]; 1730 int hostport; 1731 int ***p_res=NULL; 1732 void do_reconnect(void); 1733 SOCK_ADDR sa; 1734 //Устанавливаем соединение 1735 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable43 ;; S_ICONS 1736 int err; 1737 unsigned int ip; 1738 GBS_DelTimer(&reconnect_tmr); 1739 if (!IsGPRSEnabled()) \ 00000008 5C829FE5 LDR R8,??create_connect_0 ;; `?` \ 0000000C 94D04DE2 SUB SP,SP,#+148 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 504185E5 STR R4,[R5, #+336] \ 0000001C 8F6EA0E3 MOV R6,#+2288 \ 00000020 050086E0 ADD R0,R6,R5 \ 00000024 8C0100EF SWI +396 \ 00000028 7D7EA0E3 MOV R7,#+2000 \ 0000002C A70000EF SWI +167 \ 00000030 000050E3 CMP R0,#+0 \ 00000034 0400001A BNE ??create_connect_1 1740 { 1741 is_gprs_online=0; \ 00000038 704185E5 STR R4,[R5, #+368] 1742 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000003C 0810A0E1 MOV R1,R8 \ 00000040 050087E0 ADD R0,R7,R5 \ 00000044 1A0000EF SWI +26 1743 SMART_REDRAW(); \ 00000048 680000EA B ??create_connect_2 1744 return; 1745 } 1746 DNR_ID=0; 1747 *socklasterr()=0; 1748 1749 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; \ ??create_connect_1: \ 0000004C 1C929FE5 LDR R9,??create_connect_0+0x4 ;; NATICQ_HOST 1750 GetHost(host_counter, NATICQ_HOST, hostbuf); 1751 hostport = GetPort(host_counter, NATICQ_HOST); 1752 host_counter++; 1753 1754 // sprintf(hostname, "%s:%d", hostbuf, hostport); 1755 strcpy(hostname, hostbuf); 1756 1757 SMART_REDRAW(); 1758 1759 ip=str2ip(hostbuf); 1760 if (ip!=0xFFFFFFFF) \ 00000050 ........ LDR R10,??DataTable41 ;; do_reconnect \ 00000054 884185E5 STR R4,[R5, #+392] \ 00000058 7C8100EF SWI +33148 \ 0000005C 004080E5 STR R4,[R0, #+0] \ 00000060 0900A0E1 MOV R0,R9 \ 00000064 ........ BL GetHostsCount \ 00000068 901195E5 LDR R1,[R5, #+400] \ 0000006C 010040E2 SUB R0,R0,#+1 \ 00000070 010050E1 CMP R0,R1 \ 00000074 904185B5 STRLT R4,[R5, #+400] \ 00000078 900195E5 LDR R0,[R5, #+400] \ 0000007C 14208DE2 ADD R2,SP,#+20 \ 00000080 0910A0E1 MOV R1,R9 \ 00000084 ........ BL GetHost \ 00000088 900195E5 LDR R0,[R5, #+400] \ 0000008C 0910A0E1 MOV R1,R9 \ 00000090 ........ BL GetPort \ 00000094 0090A0E1 MOV R9,R0 \ 00000098 900195E5 LDR R0,[R5, #+400] \ 0000009C 14108DE2 ADD R1,SP,#+20 \ 000000A0 010080E2 ADD R0,R0,#+1 \ 000000A4 900185E5 STR R0,[R5, #+400] \ 000000A8 750E85E2 ADD R0,R5,#+1872 \ 000000AC 1A0000EF SWI +26 \ 000000B0 ........ BL SMART_REDRAW \ 000000B4 14008DE2 ADD R0,SP,#+20 \ 000000B8 B70100EF SWI +439 \ 000000BC 04B0E0E1 MVN R11,R4 \ 000000C0 0B0050E1 CMP R0,R11 \ 000000C4 0500000A BEQ ??create_connect_3 1761 { 1762 sa.ip=ip; \ 000000C8 08008DE5 STR R0,[SP, #+8] 1763 strcpy(logmsg,"\nConnect by IP!"); \ 000000CC 181088E2 ADD R1,R8,#+24 \ 000000D0 050087E0 ADD R0,R7,R5 \ 000000D4 1A0000EF SWI +26 1764 SMART_REDRAW(); \ 000000D8 ........ BL SMART_REDRAW 1765 goto L_CONNECT; \ 000000DC 2D0000EA B ??create_connect_4 1766 } 1767 strcpy(logmsg,LG_GRSENDDNR); \ ??create_connect_3: \ 000000E0 281088E2 ADD R1,R8,#+40 \ 000000E4 050087E0 ADD R0,R7,R5 \ 000000E8 1A0000EF SWI +26 1768 SMART_REDRAW(); \ 000000EC ........ BL SMART_REDRAW 1769 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 000000F0 622F85E2 ADD R2,R5,#+392 \ 000000F4 0D10A0E1 MOV R1,SP \ 000000F8 14008DE2 ADD R0,SP,#+20 \ 000000FC B60100EF SWI +438 \ 00000100 0030B0E1 MOVS R3,R0 1770 if (err) \ 00000104 1300000A BEQ ??create_connect_5 1771 { 1772 if ((err==0xC9)||(err==0xD6)) \ 00000108 C90053E3 CMP R3,#+201 \ 0000010C D6005313 CMPNE R3,#+214 \ 00000110 0600001A BNE ??create_connect_6 1773 { 1774 if (DNR_ID) \ 00000114 880195E5 LDR R0,[R5, #+392] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0D00000A BEQ ??create_connect_5 1775 { 1776 host_counter--; \ 00000120 900195E5 LDR R0,[R5, #+400] \ 00000124 010040E2 SUB R0,R0,#+1 \ 00000128 900185E5 STR R0,[R5, #+400] 1777 return; //Ждем готовности DNR \ 0000012C 300000EA B ??create_connect_7 1778 } 1779 } 1780 else 1781 { 1782 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 00000130 342088E2 ADD R2,R8,#+52 \ 00000134 FF10A0E3 MOV R1,#+255 \ 00000138 050087E0 ADD R0,R7,R5 \ 0000013C 1B0100EF SWI +283 1783 SMART_REDRAW(); \ 00000140 ........ BL SMART_REDRAW 1784 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ ??create_connect_8: \ 00000144 0A20A0E1 MOV R2,R10 \ 00000148 871EA0E3 MOV R1,#+2160 \ 0000014C 050086E0 ADD R0,R6,R5 \ 00000150 4D0000EF SWI +77 1785 return; \ 00000154 260000EA B ??create_connect_7 1786 } 1787 } 1788 if (p_res) \ ??create_connect_5: \ 00000158 00009DE5 LDR R0,[SP, #+0] \ 0000015C 000050E3 CMP R0,#+0 \ 00000160 3700000A BEQ ??create_connect_9 1789 { 1790 if (p_res[3]) \ 00000164 0C0090E5 LDR R0,[R0, #+12] \ 00000168 000050E3 CMP R0,#+0 \ 0000016C 3C00000A BEQ ??create_connect_10 1791 { 1792 strcpy(logmsg,LG_GRDNROK); \ 00000170 441088E2 ADD R1,R8,#+68 \ 00000174 050087E0 ADD R0,R7,R5 \ 00000178 1A0000EF SWI +26 1793 SMART_REDRAW(); \ 0000017C ........ BL SMART_REDRAW 1794 DNR_TRIES=0; \ 00000180 8C4185E5 STR R4,[R5, #+396] 1795 sa.ip=p_res[3][0][0]; \ 00000184 00109DE5 LDR R1,[SP, #+0] \ 00000188 0C1091E5 LDR R1,[R1, #+12] \ 0000018C 001091E5 LDR R1,[R1, #+0] \ 00000190 001091E5 LDR R1,[R1, #+0] \ 00000194 08108DE5 STR R1,[SP, #+8] 1796 L_CONNECT: 1797 sock=socket(1,1,0); \ ??create_connect_4: \ 00000198 0020A0E3 MOV R2,#+0 \ 0000019C 0110A0E3 MOV R1,#+1 \ 000001A0 0100A0E1 MOV R0,R1 \ 000001A4 730100EF SWI +371 \ 000001A8 540185E5 STR R0,[R5, #+340] 1798 if (sock!=-1) \ 000001AC 0B0050E1 CMP R0,R11 \ 000001B0 1A00000A BEQ ??create_connect_11 1799 { 1800 sa.family=1; \ 000001B4 0170A0E3 MOV R7,#+1 \ 000001B8 B470CDE1 STRH R7,[SP, #+4] 1801 sa.port=htons(hostport); \ 000001BC 0908A0E1 MOV R0,R9, LSL #+16 \ 000001C0 2008A0E1 MOV R0,R0, LSR #+16 \ 000001C4 7A0100EF SWI +378 \ 000001C8 B600CDE1 STRH R0,[SP, #+6] 1802 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 1803 if (connect(sock,&sa,sizeof(sa))!=-1) \ 000001CC 540195E5 LDR R0,[R5, #+340] \ 000001D0 1020A0E3 MOV R2,#+16 \ 000001D4 04108DE2 ADD R1,SP,#+4 \ 000001D8 740100EF SWI +372 \ 000001DC 0B0050E1 CMP R0,R11 \ 000001E0 0500000A BEQ ??create_connect_12 1804 { 1805 connect_state=1; \ 000001E4 507185E5 STR R7,[R5, #+336] 1806 TOTALRECEIVED=0; \ 000001E8 584185E5 STR R4,[R5, #+344] 1807 TOTALSENDED=0; \ 000001EC 5C4185E5 STR R4,[R5, #+348] 1808 SMART_REDRAW(); \ ??create_connect_2: \ 000001F0 ........ BL SMART_REDRAW \ ??create_connect_7: \ 000001F4 94D08DE2 ADD SP,SP,#+148 \ 000001F8 F08FBDE8 POP {R4-R11,PC} 1809 } 1810 else 1811 { 1812 closesocket(sock); \ ??create_connect_12: \ 000001FC 540195E5 LDR R0,[R5, #+340] \ 00000200 760100EF SWI +374 1813 sock=-1; \ 00000204 54B185E5 STR R11,[R5, #+340] 1814 LockSched(); \ 00000208 460100EF SWI +326 1815 ShowMSG(1,(int)LG_MSGCANTCONN); \ 0000020C 5C1088E2 ADD R1,R8,#+92 \ 00000210 0100A0E3 MOV R0,#+1 \ 00000214 480100EF SWI +328 1816 UnlockSched(); \ 00000218 470100EF SWI +327 1817 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ 0000021C C8FFFFEA B ??create_connect_8 1818 } 1819 } 1820 else 1821 { 1822 LockSched(); \ ??create_connect_11: \ 00000220 460100EF SWI +326 1823 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 00000224 781088E2 ADD R1,R8,#+120 \ 00000228 0100A0E3 MOV R0,#+1 \ 0000022C 480100EF SWI +328 1824 UnlockSched(); \ 00000230 470100EF SWI +327 1825 //Не осилили создания сокета, закрываем GPRS-сессию 1826 GPRS_OnOff(0,1); \ 00000234 0110A0E3 MOV R1,#+1 \ 00000238 0000A0E3 MOV R0,#+0 \ 0000023C 8E0100EF SWI +398 \ 00000240 EBFFFFEA B ??create_connect_7 1827 } 1828 } 1829 } 1830 else 1831 { 1832 DNR_TRIES--; \ ??create_connect_9: \ 00000244 8C0195E5 LDR R0,[R5, #+396] \ 00000248 010040E2 SUB R0,R0,#+1 \ 0000024C 8C0185E5 STR R0,[R5, #+396] 1833 LockSched(); \ 00000250 460100EF SWI +326 1834 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 00000254 A41088E2 ADD R1,R8,#+164 \ 00000258 0100A0E3 MOV R0,#+1 \ 0000025C 480100EF SWI +328 1835 UnlockSched(); \ 00000260 470100EF SWI +327 \ ??create_connect_10: \ 00000264 94D08DE2 ADD SP,SP,#+148 ;; stack cleaning \ 00000268 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 0000026C ........ DC32 `?` \ 00000270 ........ DC32 NATICQ_HOST 1836 } 1837 } 1838 1839 #ifdef SEND_TIMER 1840 GBSTMR send_tmr; 1841 #endif 1842 \ In segment CODE, align 4, keep-with-next 1843 void ClearSendQ(void) 1844 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 1845 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable43 ;; S_ICONS \ 00000008 6C0194E5 LDR R0,[R4, #+364] \ 0000000C 150000EF SWI +21 1846 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 6C0184E5 STR R0,[R4, #+364] 1847 sendq_l=NULL; \ 00000018 680184E5 STR R0,[R4, #+360] 1848 #ifdef SEND_TIMER 1849 GBS_DelTimer(&send_tmr); \ 0000001C 950E84E2 ADD R0,R4,#+2384 \ 00000020 8C0100EF SWI +396 1850 #endif 1851 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 1852 \ In segment CODE, align 4, keep-with-next 1853 void end_socket(void) 1854 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 1855 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable43 ;; S_ICONS \ 00000008 540194E5 LDR R0,[R4, #+340] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0300004A BMI ??end_socket_0 1856 { 1857 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 1858 closesocket(sock); \ 0000001C 540194E5 LDR R0,[R4, #+340] \ 00000020 760100EF SWI +374 1859 } 1860 #ifdef SEND_TIMER 1861 GBS_DelTimer(&send_tmr); \ ??end_socket_0: \ 00000024 950E84E2 ADD R0,R4,#+2384 \ 00000028 8C0100EF SWI +396 1862 #endif 1863 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1864 1865 #ifdef SEND_TIMER \ In segment CODE, align 4, keep-with-next 1866 static void resend(void) 1867 { 1868 void SendAnswer(int dummy, TPKT *p); 1869 SUBPROC((void*)SendAnswer,0,0); \ resend: \ 00000000 ........ LDR R0,??DataTable77 ;; SendAnswer \ 00000004 00402DE9 PUSH {LR} \ 00000008 0020A0E3 MOV R2,#+0 \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 710100EF SWI +369 1870 } \ 00000014 0080BDE8 POP {PC} ;; return 1871 #endif 1872 \ In segment CODE, align 4, keep-with-next 1873 void SendAnswer(int dummy, TPKT *p) 1874 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 1875 int i; 1876 int j; 1877 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable53 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 500194E5 LDR R0,[R4, #+336] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 1878 { 1879 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 1880 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 1881 } 1882 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 1E00000A BEQ ??SendAnswer_1 1883 { 1884 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 1885 TOTALSENDED+=j; \ 00000034 5C0194E5 LDR R0,[R4, #+348] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 5C0184E5 STR R0,[R4, #+348] 1886 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 640194E5 LDR R0,[R4, #+356] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 640184E5 STR R0,[R4, #+356] 1887 //Проверяем, не надо ли добавить в очередь 1888 if (sendq_p) \ 0000004C 6C0194E5 LDR R0,[R4, #+364] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 1889 { 1890 //Есть очередь, добавляем в нее 1891 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 681194E5 LDR R1,[R4, #+360] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 6C0184E5 STR R0,[R4, #+364] 1892 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 680194E5 LDR R0,[R4, #+360] \ 0000006C 6C3194E5 LDR R3,[R4, #+364] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 1893 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 1894 sendq_l+=j; \ 00000088 680194E5 LDR R0,[R4, #+360] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 680184E5 STR R0,[R4, #+360] 1895 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 1896 } 1897 sendq_p=p; \ ??SendAnswer_2: \ 00000098 6C6184E5 STR R6,[R4, #+364] 1898 sendq_l=j; \ 0000009C 685184E5 STR R5,[R4, #+360] \ 000000A0 000000EA B ??SendAnswer_1 1899 } 1900 //Отправляем уже существующее в очереди 1901 while((i=sendq_l)!=0) 1902 { 1903 if (i>0x400) i=0x400; 1904 j=send(sock,(void *)sendq_p,i,0); 1905 snprintf(logmsg,255,"send res %d",j); 1906 SMART_REDRAW(); 1907 if (j<0) 1908 { 1909 j=*socklasterr(); 1910 if ((j==0xC9)||(j==0xD6)) 1911 { 1912 //Передали что хотели 1913 strcpy(logmsg,"Send delayed..."); 1914 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 1915 } 1916 else 1917 { 1918 //Ошибка 1919 LockSched(); 1920 ShowMSG(1,(int)"Send error!"); 1921 UnlockSched(); 1922 end_socket(); 1923 return; 1924 } 1925 } 1926 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное 1927 if (j` \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 400E80E3 ORR R0,R0,#0x400 \ 000000C8 000057E1 CMP R7,R0 \ 000000CC 540194E5 LDR R0,[R4, #+340] \ 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 7D8EA0E3 MOV R8,#+2000 \ 000000E8 0530A0E1 MOV R3,R5 \ 000000EC 0920A0E1 MOV R2,R9 \ 000000F0 FF10A0E3 MOV R1,#+255 \ 000000F4 040088E0 ADD R0,R8,R4 \ 000000F8 1B0100EF SWI +283 \ 000000FC ........ BL SMART_REDRAW \ 00000100 000055E3 CMP R5,#+0 \ 00000104 0F00005A BPL ??SendAnswer_6 \ 00000108 7C8100EF SWI +33148 \ 0000010C 005090E5 LDR R5,[R0, #+0] \ 00000110 C90055E3 CMP R5,#+201 \ 00000114 D6005513 CMPNE R5,#+214 \ 00000118 0300001A BNE ??SendAnswer_7 \ 0000011C 0C1089E2 ADD R1,R9,#+12 \ 00000120 040088E0 ADD R0,R8,R4 \ 00000124 1A0000EF SWI +26 \ 00000128 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_7: \ 0000012C 460100EF SWI +326 \ 00000130 1C1089E2 ADD R1,R9,#+28 \ 00000134 0100A0E3 MOV R0,#+1 \ 00000138 480100EF SWI +328 \ 0000013C 470100EF SWI +327 \ 00000140 ........ BL end_socket \ 00000144 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 00000148 680194E5 LDR R0,[R4, #+360] \ 0000014C 052040E0 SUB R2,R0,R5 \ 00000150 682184E5 STR R2,[R4, #+360] \ 00000154 6C0194E5 LDR R0,[R4, #+364] \ 00000158 001085E0 ADD R1,R5,R0 \ 0000015C 1E0100EF SWI +286 \ 00000160 070055E1 CMP R5,R7 \ 00000164 CEFFFFAA BGE ??SendAnswer_3 \ 00000168 20209FE5 LDR R2,??SendAnswer_5+0x4 ;; resend \ 0000016C E61F48E2 SUB R1,R8,#+920 \ 00000170 950E84E2 ADD R0,R4,#+2384 \ 00000174 4D0000EF SWI +77 \ 00000178 F083BDE8 POP {R4-R9,PC} 1936 } 1937 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 0000017C 0100A0E1 MOV R0,R1 \ 00000180 150000EF SWI +21 1938 sendq_p=NULL; \ 00000184 6C6184E5 STR R6,[R4, #+364] 1939 } \ 00000188 F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 0000018C ........ DC32 `?` \ 00000190 ........ DC32 resend 1940 \ In segment CODE, align 4, keep-with-next 1941 void send_login(int dummy, TPKT *p) 1942 { 1943 connect_state=2; 1944 char rev[16]; 1945 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 1946 //А Вова будет банить на форуме! 1947 snprintf(rev,9,"Sie_%04d",__SVN_REVISION__); \ send_login: \ 00000000 88209FE5 LDR R2,??send_login_0 ;; `?` \ 00000004 F0402DE9 PUSH {R4-R7,LR} \ 00000008 ........ LDR R6,??DataTable53 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 500186E5 STR R0,[R6, #+336] \ 00000020 3830A0E3 MOV R3,#+56 \ 00000024 703E83E3 ORR R3,R3,#0x700 \ 00000028 0910A0E3 MOV R1,#+9 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 1B0100EF SWI +283 1948 1949 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 1950 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable48 ;; UIN 1951 p2->pkt.type=T_SETCLIENT_ID; 1952 p2->pkt.data_len=8; 1953 memcpy(p2->data,rev,8); \ 00000044 0820A0E3 MOV R2,#+8 \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 000087E5 STR R0,[R7, #+0] \ 00000054 2000A0E3 MOV R0,#+32 \ 00000058 B400C7E1 STRH R0,[R7, #+4] \ 0000005C 0800A0E3 MOV R0,#+8 \ 00000060 B600C7E1 STRH R0,[R7, #+6] \ 00000064 080087E2 ADD R0,R7,#+8 \ 00000068 1E0100EF SWI +286 1954 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 1955 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 1956 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 4C0186E5 STR R0,[R6, #+332] 1957 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 1958 \ In segment CODE, align 4, keep-with-next 1959 void do_ping(void) 1960 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 1961 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 1962 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable48 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 1963 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 1964 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1965 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 1966 } 1967 \ In segment CODE, align 4, keep-with-next 1968 void SendMSGACK(int i) 1969 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1970 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 1971 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 1972 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 1973 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1974 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 1975 } 1976 \ In segment CODE, align 4, keep-with-next 1977 void RequestXText(unsigned int uin) 1978 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 1979 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 1980 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 1981 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 1982 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 1983 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable77 ;; SendAnswer \ 0000002C 710100EF SWI +369 1984 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 1985 \ In segment CODE, align 4, keep-with-next 1986 void get_answer(void) 1987 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1988 void *p; 1989 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable53 ;; S_ICONS \ 00000008 41DE4DE2 SUB SP,SP,#+1040 1990 int j; 1991 int n; 1992 char rb[1024]; 1993 char *rp=rb; 1994 if (connect_state<2) return; \ 0000000C 500195E5 LDR R0,[R5, #+336] \ 00000010 4CA195E5 LDR R10,[R5, #+332] \ 00000014 10908DE2 ADD R9,SP,#+16 \ 00000018 020050E3 CMP R0,#+2 \ 0000001C FA0000BA BLT ??get_answer_1 \ 00000020 0A007AE3 CMN R10,#+10 \ 00000024 F800000A BEQ ??get_answer_1 1995 if (i==EOP) return; 1996 j=recv(sock,rb,sizeof(rb),0); \ 00000028 540195E5 LDR R0,[R5, #+340] \ 0000002C E4639FE5 LDR R6,??get_answer_2+0x4 ;; RXbuf \ 00000030 0030A0E3 MOV R3,#+0 \ 00000034 402EA0E3 MOV R2,#+1024 \ 00000038 10108DE2 ADD R1,SP,#+16 \ 0000003C 780100EF SWI +376 \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 7D7EA0E3 MOV R7,#+2000 \ 00000048 0E0000EA B ??get_answer_3 1997 while(j>0) 1998 { 1999 if (i<0) 2000 { 2001 //Принимаем заголовок 2002 n=-i; //Требуемое количество байт 2003 if (j=0) 2010 { 2011 //Принимаем тельце ;) 2012 n=RXbuf.pkt.data_len; //Всего в тельце 2013 if (n>16383) 2014 { 2015 //Слишком много 2016 strcpy(logmsg,LG_GRBADPACKET); 2017 end_socket(); 2018 RXstate=EOP; 2019 return; 2020 } 2021 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2022 if (n>0) 2023 { 2024 if (jhour*3600+pt->min*60+pt->sec; 2120 s1-=s2; 2121 if (s1<0) s1+=86400; 2122 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 2123 sprintf(ping_txt, "Ping: %dsec",s1); 2124 LockSched(); 2125 if (show_ping==1) 2126 { 2127 ShowMSG(1,(int)logmsg); 2128 show_ping=0; 2129 } 2130 UnlockSched(); 2131 } 2132 break; 2133 case T_LASTPRIVACY: 2134 n=i+sizeof(PKT); \ ??get_answer_4: \ 0000004C 0040A0E1 MOV R4,R0 2135 p=malloc(n); \ ??get_answer_5: \ 00000050 140000EF SWI +20 \ 00000054 00B0A0E1 MOV R11,R0 2136 memcpy(p,&RXbuf,n); \ 00000058 0420A0E1 MOV R2,R4 \ ??get_answer_6: \ 0000005C 0610A0E1 MOV R1,R6 \ 00000060 1E0100EF SWI +286 2137 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000064 540195E5 LDR R0,[R5, #+340] \ 00000068 0B30A0E1 MOV R3,R11 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 0020A0E3 MOV R2,#+0 \ 00000074 FC1FA0E3 MOV R1,#+1008 \ 00000078 0A00A0E1 MOV R0,R10 \ 0000007C 000100EF SWI +256 \ ??get_answer_7: \ 00000080 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 2138 break; 2139 } 2140 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_8: \ 00000084 07A0E0E3 MVN R10,#+7 \ ??get_answer_3: \ 00000088 010058E3 CMP R8,#+1 \ 0000008C DD0000BA BLT ??get_answer_9 \ 00000090 00005AE3 CMP R10,#+0 \ 00000094 0A00005A BPL ??get_answer_10 \ 00000098 00406AE2 RSB R4,R10,#+0 \ 0000009C 040058E1 CMP R8,R4 \ 000000A0 0840A0B1 MOVLT R4,R8 \ 000000A4 0420A0E1 MOV R2,R4 \ 000000A8 0910A0E1 MOV R1,R9 \ 000000AC 06008AE0 ADD R0,R10,R6 \ 000000B0 080080E2 ADD R0,R0,#+8 \ 000000B4 1E0100EF SWI +286 \ 000000B8 0AA084E0 ADD R10,R4,R10 \ 000000BC 048048E0 SUB R8,R8,R4 \ 000000C0 099084E0 ADD R9,R4,R9 \ ??get_answer_10: \ 000000C4 00005AE3 CMP R10,#+0 \ 000000C8 EEFFFF4A BMI ??get_answer_3 \ 000000CC B640D6E1 LDRH R4,[R6, #+6] \ 000000D0 400C54E3 CMP R4,#+16384 \ 000000D4 070000BA BLT ??get_answer_11 \ 000000D8 3C139FE5 LDR R1,??get_answer_2+0x8 ;; `?` \ 000000DC 050087E0 ADD R0,R7,R5 \ 000000E0 1A0000EF SWI +26 \ 000000E4 ........ BL end_socket \ 000000E8 0900E0E3 MVN R0,#+9 \ 000000EC 4C0185E5 STR R0,[R5, #+332] \ 000000F0 41DE8DE2 ADD SP,SP,#+1040 \ 000000F4 F08FBDE8 POP {R4-R11,PC} \ ??get_answer_11: \ 000000F8 0A4044E0 SUB R4,R4,R10 \ 000000FC 010054E3 CMP R4,#+1 \ 00000100 090000BA BLT ??get_answer_12 \ 00000104 040058E1 CMP R8,R4 \ 00000108 0840A0B1 MOVLT R4,R8 \ 0000010C 0420A0E1 MOV R2,R4 \ 00000110 0910A0E1 MOV R1,R9 \ 00000114 06008AE0 ADD R0,R10,R6 \ 00000118 080080E2 ADD R0,R0,#+8 \ 0000011C 1E0100EF SWI +286 \ 00000120 0AA084E0 ADD R10,R4,R10 \ 00000124 048048E0 SUB R8,R8,R4 \ 00000128 099084E0 ADD R9,R4,R9 \ ??get_answer_12: \ 0000012C B600D6E1 LDRH R0,[R6, #+6] \ 00000130 0A0050E1 CMP R0,R10 \ 00000134 D3FFFF1A BNE ??get_answer_3 \ 00000138 581195E5 LDR R1,[R5, #+344] \ 0000013C 08008AE2 ADD R0,R10,#+8 \ 00000140 011080E0 ADD R1,R0,R1 \ 00000144 581185E5 STR R1,[R5, #+344] \ 00000148 601195E5 LDR R1,[R5, #+352] \ 0000014C 00B0A0E3 MOV R11,#+0 \ 00000150 011080E0 ADD R1,R0,R1 \ 00000154 601185E5 STR R1,[R5, #+352] \ 00000158 06108AE0 ADD R1,R10,R6 \ 0000015C 08B0C1E5 STRB R11,[R1, #+8] \ 00000160 B410D6E1 LDRH R1,[R6, #+4] \ 00000164 09408AE2 ADD R4,R10,#+9 \ 00000168 09A0A0E3 MOV R10,#+9 \ 0000016C 42AC8AE3 ORR R10,R10,#0x4200 \ 00000170 031041E2 SUB R1,R1,#+3 \ 00000174 1C0051E3 CMP R1,#+28 \ 00000178 C1FFFF8A BHI ??get_answer_8 \ 0000017C 012F8FE2 ADR R2,??get_answer_0 \ 00000180 D12092E1 LDRSB R2,[R2, R1] \ 00000184 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??get_answer_0: \ 00000188 4107BE3A DC8 +65,+7,+190,+58 \ 0000018C 22BE24BE DC8 +34,+190,+36,+190 \ 00000190 BEBE62BE DC8 +190,+190,+98,+190 \ 00000194 BE686EBE DC8 +190,+104,+110,+190 \ 00000198 732222BE DC8 +115,+34,+34,+190 \ 0000019C BEBE22BE DC8 +190,+190,+34,+190 \ 000001A0 BEBEBEBE DC8 +190,+190,+190,+190 \ 000001A4 B0000000 DC8 +176,+0,+0,+0 \ ??get_answer_13: \ 000001A8 0400A0E1 MOV R0,R4 \ 000001AC 140000EF SWI +20 \ 000001B0 00B0A0E1 MOV R11,R0 \ 000001B4 0420A0E1 MOV R2,R4 \ 000001B8 0610A0E1 MOV R1,R6 \ 000001BC 1E0100EF SWI +286 \ 000001C0 540195E5 LDR R0,[R5, #+340] \ 000001C4 0B30A0E1 MOV R3,R11 \ 000001C8 01002DE9 PUSH {R0} \ 000001CC 0020A0E3 MOV R2,#+0 \ 000001D0 FC1FA0E3 MOV R1,#+1008 \ 000001D4 0A00A0E1 MOV R0,R10 \ 000001D8 000100EF SWI +256 \ 000001DC 3C029FE5 LDR R0,??get_answer_2+0xC ;; sndStartup \ 000001E0 ........ BL Play \ 000001E4 083086E2 ADD R3,R6,#+8 \ 000001E8 892F8FE2 ADR R2,??get_answer_2 ;; "%s" \ 000001EC FF10A0E3 MOV R1,#+255 \ 000001F0 050087E0 ADD R0,R7,R5 \ 000001F4 1B0100EF SWI +283 \ 000001F8 0300A0E3 MOV R0,#+3 \ 000001FC 500185E5 STR R0,[R5, #+336] \ 00000200 900195E5 LDR R0,[R5, #+400] \ 00000204 010040E2 SUB R0,R0,#+1 \ 00000208 900185E5 STR R0,[R5, #+400] \ 0000020C ........ BL SMART_REDRAW \ 00000210 9AFFFFEA B ??get_answer_7 \ ??get_answer_14: \ 00000214 0400A0E1 MOV R0,R4 \ 00000218 8CFFFFEA B ??get_answer_5 \ ??get_answer_15: \ 0000021C 0040A0E1 MOV R4,R0 \ 00000220 140000EF SWI +20 \ 00000224 00B0A0E1 MOV R11,R0 \ 00000228 0420A0E1 MOV R2,R4 \ 0000022C 0610A0E1 MOV R1,R6 \ 00000230 1E0100EF SWI +286 \ 00000234 B800D6E1 LDRH R0,[R6, #+8] \ 00000238 E4219FE5 LDR R2,??get_answer_2+0x10 ;; `?` + 12 \ 0000023C FF10A0E3 MOV R1,#+255 \ 00000240 01002DE9 PUSH {R0} \ 00000244 003096E5 LDR R3,[R6, #+0] \ 00000248 050087E0 ADD R0,R7,R5 \ 0000024C 1B0100EF SWI +283 \ 00000250 540195E5 LDR R0,[R5, #+340] \ 00000254 0B30A0E1 MOV R3,R11 \ 00000258 01002DE9 PUSH {R0} \ 0000025C 0020A0E3 MOV R2,#+0 \ 00000260 FC1FA0E3 MOV R1,#+1008 \ 00000264 0A00A0E1 MOV R0,R10 \ 00000268 000100EF SWI +256 \ ??get_answer_16: \ 0000026C 08D08DE2 ADD SP,SP,#+8 ;; stack cleaning \ 00000270 83FFFFEA B ??get_answer_8 \ ??get_answer_17: \ 00000274 AC219FE5 LDR R2,??get_answer_2+0x14 ;; `?` + 24 \ 00000278 083086E2 ADD R3,R6,#+8 \ 0000027C FF10A0E3 MOV R1,#+255 \ 00000280 050087E0 ADD R0,R7,R5 \ 00000284 1B0100EF SWI +283 \ 00000288 ........ BL SMART_REDRAW \ 0000028C 7CFFFFEA B ??get_answer_8 \ ??get_answer_18: \ 00000290 0400A0E1 MOV R0,R4 \ 00000294 140000EF SWI +20 \ 00000298 00B0A0E1 MOV R11,R0 \ 0000029C 0420A0E1 MOV R2,R4 \ 000002A0 0610A0E1 MOV R1,R6 \ 000002A4 1E0100EF SWI +286 \ 000002A8 08008BE2 ADD R0,R11,#+8 \ 000002AC 030000EA B ??get_answer_19 \ ??get_answer_20: \ 000002B0 030051E3 CMP R1,#+3 \ 000002B4 2010A0B3 MOVLT R1,#+32 \ 000002B8 0010C0B5 STRBLT R1,[R0, #+0] \ 000002BC 010080E2 ADD R0,R0,#+1 \ ??get_answer_19: \ 000002C0 0010D0E5 LDRB R1,[R0, #+0] \ 000002C4 000051E3 CMP R1,#+0 \ 000002C8 F8FFFF1A BNE ??get_answer_20 \ 000002CC 58219FE5 LDR R2,??get_answer_2+0x18 ;; `?` + 32 \ 000002D0 080086E2 ADD R0,R6,#+8 \ 000002D4 01002DE9 PUSH {R0} \ 000002D8 003096E5 LDR R3,[R6, #+0] \ 000002DC FF10A0E3 MOV R1,#+255 \ 000002E0 050087E0 ADD R0,R7,R5 \ 000002E4 1B0100EF SWI +283 \ 000002E8 580195E5 LDR R0,[R5, #+344] \ 000002EC ........ BL SendMSGACK \ 000002F0 540195E5 LDR R0,[R5, #+340] \ 000002F4 0B30A0E1 MOV R3,R11 \ 000002F8 01002DE9 PUSH {R0} \ 000002FC 0020A0E3 MOV R2,#+0 \ 00000300 FC1FA0E3 MOV R1,#+1008 \ 00000304 0A00A0E1 MOV R0,R10 \ 00000308 000100EF SWI +256 \ 0000030C ........ BL SMART_REDRAW \ 00000310 D5FFFFEA B ??get_answer_16 \ ??get_answer_21: \ 00000314 460100EF SWI +326 \ 00000318 081086E2 ADD R1,R6,#+8 \ 0000031C 0100A0E3 MOV R0,#+1 \ 00000320 480100EF SWI +328 \ ??get_answer_22: \ 00000324 470100EF SWI +327 \ 00000328 55FFFFEA B ??get_answer_8 \ ??get_answer_23: \ 0000032C 0600A0E1 MOV R0,R6 \ 00000330 ........ BL FindContactLOGQByAck \ 00000334 000050E3 CMP R0,#+0 \ 00000338 0100000A BEQ ??get_answer_24 \ 0000033C EC009FE5 LDR R0,??get_answer_2+0x1C ;; sndMsgSent \ 00000340 ........ BL Play \ ??get_answer_24: \ 00000344 0A00A0E3 MOV R0,#+10 \ 00000348 140000EF SWI +20 \ 0000034C 00B0A0E1 MOV R11,R0 \ 00000350 0A20A0E3 MOV R2,#+10 \ 00000354 40FFFFEA B ??get_answer_6 \ ??get_answer_25: \ 00000358 0D10A0E1 MOV R1,SP \ 0000035C 08008DE2 ADD R0,SP,#+8 \ 00000360 B40000EF SWI +180 \ 00000364 0000DDE5 LDRB R0,[SP, #+0] \ 00000368 0120DDE5 LDRB R2,[SP, #+1] \ 0000036C E11EA0E3 MOV R1,#+3600 \ 00000370 3C30A0E3 MOV R3,#+60 \ 00000374 930202E0 MUL R2,R3,R2 \ 00000378 912020E0 MLA R0,R1,R0,R2 \ 0000037C 0210DDE5 LDRB R1,[SP, #+2] \ 00000380 E12EA0E3 MOV R2,#+3600 \ 00000384 000081E0 ADD R0,R1,R0 \ 00000388 0810D6E5 LDRB R1,[R6, #+8] \ 0000038C 920101E0 MUL R1,R2,R1 \ 00000390 9C209FE5 LDR R2,??get_answer_2+0x20 ;; `?` + 44 \ 00000394 010040E0 SUB R0,R0,R1 \ 00000398 0910D6E5 LDRB R1,[R6, #+9] \ 0000039C 930101E0 MUL R1,R3,R1 \ 000003A0 010040E0 SUB R0,R0,R1 \ 000003A4 0A10D6E5 LDRB R1,[R6, #+10] \ 000003A8 014050E0 SUBS R4,R0,R1 \ 000003AC 500BA043 MOVMI R0,#+81920 \ 000003B0 460D8043 ORRMI R0,R0,#0x1180 \ 000003B4 04408040 ADDMI R4,R0,R4 \ 000003B8 010084E2 ADD R0,R4,#+1 \ 000003BC 01002DE9 PUSH {R0} \ 000003C0 0430A0E1 MOV R3,R4 \ 000003C4 FF10A0E3 MOV R1,#+255 \ 000003C8 050087E0 ADD R0,R7,R5 \ 000003CC 1B0100EF SWI +283 \ 000003D0 60109FE5 LDR R1,??get_answer_2+0x24 ;; `?` + 64 \ 000003D4 0420A0E1 MOV R2,R4 \ 000003D8 D80F85E2 ADD R0,R5,#+864 \ 000003DC 160000EF SWI +22 \ 000003E0 460100EF SWI +326 \ 000003E4 BC0095E5 LDR R0,[R5, #+188] \ 000003E8 04D08DE2 ADD SP,SP,#+4 \ 000003EC 010050E3 CMP R0,#+1 \ 000003F0 CBFFFF1A BNE ??get_answer_22 \ 000003F4 051087E0 ADD R1,R7,R5 \ 000003F8 0100A0E3 MOV R0,#+1 \ 000003FC 480100EF SWI +328 \ 00000400 BCB085E5 STR R11,[R5, #+188] \ 00000404 C6FFFFEA B ??get_answer_22 2141 } 2142 } 2143 } 2144 RXstate=i; \ ??get_answer_9: \ 00000408 4CA185E5 STR R10,[R5, #+332] 2145 // GBS_StartTimerProc(&tmr_dorecv,3000,dorecv); 2146 // SMART_REDRAW(); 2147 } \ ??get_answer_1: \ 0000040C 41DE8DE2 ADD SP,SP,#+1040 ;; stack cleaning \ 00000410 F08FBDE8 POP {R4-R11,PC} ;; return \ ??get_answer_2: \ 00000414 25730000 DC8 "%s",+0 \ 00000418 ........ DC32 RXbuf \ 0000041C ........ DC32 `?` \ 00000420 ........ DC32 sndStartup \ 00000424 ........ DC32 `?` + 12 \ 00000428 ........ DC32 `?` + 24 \ 0000042C ........ DC32 `?` + 32 \ 00000430 ........ DC32 sndMsgSent \ 00000434 ........ DC32 `?` + 44 \ 00000438 ........ DC32 `?` + 64 2148 \ In segment CODE, align 4, keep-with-next 2149 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK) 2150 { \ AddStringToLog: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 90D04DE2 SUB SP,SP,#+144 \ 00000008 AC809DE5 LDR R8,[SP, #+172] \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0150A0E1 MOV R5,R1 \ 00000014 0270A0E1 MOV R7,R2 \ 00000018 0360A0E1 MOV R6,R3 2151 char hs[128], *lastX; 2152 TTime tt; 2153 TDate d; 2154 GetDateTime(&d,&tt); \ 0000001C 0D10A0E1 MOV R1,SP \ 00000020 08008DE2 ADD R0,SP,#+8 \ 00000024 B40000EF SWI +180 2155 int i; 2156 2157 if (code==3 && NOT_LOG_SAME_XTXT) \ 00000028 030055E3 CMP R5,#+3 \ 0000002C 1600001A BNE ??AddStringToLog_0 \ 00000030 E0019FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 1200000A BEQ ??AddStringToLog_0 2158 { 2159 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 01002DE9 PUSH {R0} \ 00000098 1000DDE5 LDRB R0,[SP, #+16] \ 0000009C 0920A0E1 MOV R2,R9 \ 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 2166 if(code != 3 || LOG_XTXT) //Нужно сохранять иксстатус \ 000000C4 030055E3 CMP R5,#+3 \ 000000C8 10D08DE2 ADD SP,SP,#+16 \ 000000CC 0300001A BNE ??AddStringToLog_4 \ 000000D0 48019FE5 LDR R0,??AddStringToLog_1+0x8 ;; LOG_XTXT \ 000000D4 000090E5 LDR R0,[R0, #+0] \ 000000D8 000050E3 CMP R0,#+0 \ 000000DC 0400000A BEQ ??AddStringToLog_5 2167 Add2History(t, hs, s, code); // Запись хистори \ ??AddStringToLog_4: \ 000000E0 0530A0E1 MOV R3,R5 \ 000000E4 0720A0E1 MOV R2,R7 \ 000000E8 10108DE2 ADD R1,SP,#+16 \ 000000EC 0400A0E1 MOV R0,R4 \ 000000F0 ........ _BLF Add2History,??Add2History??rA 2168 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000F4 0700A0E1 MOV R0,R7 \ 000000F8 ........ BL NewLOGQ \ 000000FC 0070A0E1 MOV R7,R0 2169 snprintf(p->hdr,79,"%02d:%02d %02d-%02d %s:",tt.hour,tt.min,d.day,d.month,name); \ 00000100 40002DE9 PUSH {R6} \ 00000104 1000DDE5 LDRB R0,[SP, #+16] \ 00000108 1C2089E2 ADD R2,R9,#+28 \ 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 100087E2 ADD R0,R7,#+16 \ 0000012C 1B0100EF SWI +283 2170 p->type=code; \ 00000130 0C5087E5 STR R5,[R7, #+12] 2171 p->ID=IDforACK; //0-32767 \ 00000134 088087E5 STR R8,[R7, #+8] 2172 i=AddLOGQ(&t->log,p); \ 00000138 0710A0E1 MOV R1,R7 \ 0000013C 700084E2 ADD R0,R4,#+112 \ 00000140 ........ BL AddLOGQ \ 00000144 0060A0E1 MOV R6,R0 \ 00000148 150056E3 CMP R6,#+21 \ 0000014C 10D08DE2 ADD SP,SP,#+16 \ 00000150 090000BA BLT ??AddStringToLog_6 2173 while(i>MAXLOGMSG) 2174 { 2175 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 00000154 780094E5 LDR R0,[R4, #+120] \ 00000158 701094E5 LDR R1,[R4, #+112] 2176 RemoveLOGQ(&t->log,t->log); 2177 i--; \ 0000015C 016046E2 SUB R6,R6,#+1 \ 00000160 000051E1 CMP R1,R0 \ 00000164 00009005 LDREQ R0,[R0, #+0] \ 00000168 78008405 STREQ R0,[R4, #+120] \ 0000016C 700084E2 ADD R0,R4,#+112 \ 00000170 ........ BL RemoveLOGQ 2178 } \ 00000174 150056E3 CMP R6,#+21 \ 00000178 F5FFFFAA BGE ??AddStringToLog_7 2179 t->msg_count=i; \ ??AddStringToLog_6: \ 0000017C 806084E5 STR R6,[R4, #+128] 2180 if (!t->last_log) t->last_log=p; \ 00000180 780094E5 LDR R0,[R4, #+120] 2181 if (code==3) \ 00000184 ........ LDR R6,??DataTable53 ;; S_ICONS \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 78708405 STREQ R7,[R4, #+120] \ 00000190 0170A0E3 MOV R7,#+1 \ 00000194 030055E3 CMP R5,#+3 \ 00000198 0D00001A BNE ??AddStringToLog_8 2182 { 2183 if (edchat_id) \ 0000019C 7C0196E5 LDR R0,[R6, #+380] \ 000001A0 000050E3 CMP R0,#+0 \ 000001A4 1600000A BEQ ??AddStringToLog_9 2184 { 2185 void *data=FindGUIbyId(edchat_id,NULL); \ 000001A8 7C0196E5 LDR R0,[R6, #+380] \ 000001AC 0010A0E3 MOV R1,#+0 \ 000001B0 090200EF SWI +521 2186 if (data) \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1100000A BEQ ??AddStringToLog_9 2187 { 2188 EDCHAT_STRUCT *ed_struct; 2189 ed_struct=EDIT_GetUserPointer(data); \ 000001BC DF0100EF SWI +479 2190 if (ed_struct) \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 0E00000A BEQ ??AddStringToLog_9 2191 { 2192 if (ed_struct->ed_contact==t) \ 000001C8 000090E5 LDR R0,[R0, #+0] \ 000001CC 040050E1 CMP R0,R4 \ 000001D0 0B00001A BNE ??AddStringToLog_9 2193 { 2194 goto L_INC; 2195 } 2196 } 2197 } 2198 } 2199 goto L_NOINC; 2200 } 2201 L_INC: 2202 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001D4 580094E5 LDR R0,[R4, #+88] \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 8C009605 LDREQ R0,[R6, #+140] \ 000001E0 01008002 ADDEQ R0,R0,#+1 \ 000001E4 8C008605 STREQ R0,[R6, #+140] 2203 #ifdef EVILFOX 2204 t->unread_msg++; \ 000001E8 640094E5 LDR R0,[R4, #+100] \ 000001EC 010080E2 ADD R0,R0,#+1 \ 000001F0 640084E5 STR R0,[R4, #+100] 2205 total_unread2++; \ 000001F4 940096E5 LDR R0,[R6, #+148] \ 000001F8 010080E2 ADD R0,R0,#+1 \ 000001FC 940086E5 STR R0,[R6, #+148] 2206 #endif 2207 t->isunread=1; \ 00000200 587084E5 STR R7,[R4, #+88] 2208 L_NOINC: 2209 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000204 0400A0E1 MOV R0,R4 \ 00000208 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2210 time_draw=1; \ 0000020C B47086E5 STR R7,[R6, #+180] 2211 } \ ??AddStringToLog_3: \ 00000210 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 00000214 F083BDE8 POP {R4-R9,PC} ;; return \ ??AddStringToLog_1: \ 00000218 ........ DC32 NOT_LOG_SAME_XTXT \ 0000021C ........ DC32 `?` \ 00000220 ........ DC32 LOG_XTXT 2212 2213 void ParseAnswer(WSHDR *ws, const char *s); 2214 2215 int time_to_stop_t9; 2216 \ In segment CODE, align 4, keep-with-next 2217 void ParseXStatusText(WSHDR *ws, const char *s, int color) 2218 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 2219 int c; 2220 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 2221 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 2222 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} 2223 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 2224 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 2225 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 2226 while((c=*s++)) 2227 { 2228 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 2229 { 2230 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 2231 { 2232 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 2233 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 2234 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 2235 } 2236 } 2237 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 2238 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 2239 } 2240 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 2241 void AddMsgToChat(void *data) 2242 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 40D04DE2 SUB SP,SP,#+64 2243 LOGQ *p; 2244 EDITCONTROL ec; 2245 EDITC_OPTIONS ec_options; 2246 EDCHAT_STRUCT *ed_struct; 2247 int j; 2248 int color, font, type; 2249 int zc; 2250 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C900000A BEQ ??AddMsgToChat_0 2251 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0060B0E1 MOVS R6,R0 2252 if (!ed_struct) return; \ 00000018 C600000A BEQ ??AddMsgToChat_0 2253 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000096E5 LDR R0,[R6, #+0] \ 00000020 581090E5 LDR R1,[R0, #+88] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 C200000A BEQ ??AddMsgToChat_0 2254 2255 2256 p=ed_struct->ed_contact->last_log; \ 0000002C 787090E5 LDR R7,[R0, #+120] 2257 if (p) \ 00000030 ........ LDR R8,??DataTable53 ;; S_ICONS \ 00000034 000057E3 CMP R7,#+0 \ 00000038 A800000A BEQ ??AddMsgToChat_1 2258 { 2259 while(p) 2260 { 2261 font = ED_H_FONT_SIZE; 2262 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C ........ LDR R2,??DataTable54 ;; ED_X_FONT_SIZE \ 00000040 ........ LDR R0,??DataTable75 ;; ED_H_FONT_SIZE \ 00000044 002092E5 LDR R2,[R2, #+0] \ 00000048 ........ LDR R1,??DataTable56 ;; X_COLOR \ 0000004C 00A090E5 LDR R10,[R0, #+0] \ 00000050 040097E5 LDR R0,[R7, #+4] \ 00000054 00208DE5 STR R2,[SP, #+0] \ 00000058 004091E5 LDR R4,[R1, #+0] \ 0000005C ........ LDR R1,??DataTable57 ;; O_ED_X_FONT_SIZE \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 009091E5 LDR R9,[R1, #+0] \ 00000068 ........ LDR R1,??DataTable58 ;; O_X_COLOR \ 0000006C 005091E5 LDR R5,[R1, #+0] \ 00000070 ........ LDR R1,??DataTable73 ;; I_COLOR \ 00000074 00B091E5 LDR R11,[R1, #+0] \ 00000078 0300000A BEQ ??AddMsgToChat_3 2263 { 2264 if (zc==1) \ 0000007C 010050E3 CMP R0,#+1 \ 00000080 1E00001A BNE ??AddMsgToChat_4 2265 color=ACK_COLOR; //Зеленый \ 00000084 ........ LDR R0,??DataTable69 ;; ACK_COLOR \ 00000088 1B0000EA B ??AddMsgToChat_5 2266 else 2267 color=I_COLOR; 2268 } 2269 else 2270 { 2271 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 0000008C 080097E5 LDR R0,[R7, #+8] \ 00000090 010070E3 CMN R0,#+1 \ 00000094 1700001A BNE ??AddMsgToChat_6 2272 { 2273 type = p->type&0x0F; \ 00000098 0C0097E5 LDR R0,[R7, #+12] \ 0000009C 0F1000E2 AND R1,R0,#0xF 2274 if(p->type&0x10) \ 000000A0 100010E3 TST R0,#0x10 \ 000000A4 0B00000A BEQ ??AddMsgToChat_7 2275 { 2276 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000A8 010051E3 CMP R1,#+1 \ 000000AC ........ LDREQ R0,??DataTable71 ;; O_I_COLOR \ 000000B0 0400000A BEQ ??AddMsgToChat_8 \ 000000B4 030051E3 CMP R1,#+3 \ 000000B8 05B0A001 MOVEQ R11,R5 \ 000000BC 09A0A001 MOVEQ R10,R9 \ 000000C0 0E00000A BEQ ??AddMsgToChat_4 \ 000000C4 ........ LDR R0,??DataTable70 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000C8 00B090E5 LDR R11,[R0, #+0] \ 000000CC ........ LDR R0,??DataTable76 ;; O_ED_H_FONT_SIZE \ 000000D0 00A090E5 LDR R10,[R0, #+0] \ 000000D4 090000EA B ??AddMsgToChat_4 2277 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 2278 } 2279 else 2280 { 2281 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??AddMsgToChat_7: \ 000000D8 010051E3 CMP R1,#+1 \ 000000DC 0700000A BEQ ??AddMsgToChat_4 \ 000000E0 030051E3 CMP R1,#+3 \ 000000E4 04B0A001 MOVEQ R11,R4 \ 000000E8 02A0A001 MOVEQ R10,R2 \ 000000EC 0300000A BEQ ??AddMsgToChat_4 \ 000000F0 ........ LDR R0,??DataTable72 ;; TO_COLOR \ 000000F4 000000EA B ??AddMsgToChat_5 2282 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 2283 } 2284 } 2285 else 2286 color=UNACK_COLOR; //Серый \ ??AddMsgToChat_6: \ 000000F8 ........ LDR R0,??DataTable74 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000FC 00B090E5 LDR R11,[R0, #+0] 2287 } 2288 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 00000100 14008DE2 ADD R0,SP,#+20 \ 00000104 640100EF SWI +356 2289 if ((p->type&0x0F)!=3) \ 00000108 0C0097E5 LDR R0,[R7, #+12] \ 0000010C 0F0000E2 AND R0,R0,#0xF \ 00000110 030050E3 CMP R0,#+3 \ 00000114 0800000A BEQ ??AddMsgToChat_9 2290 { 2291 ascii2ws(ews,p->hdr); \ 00000118 180198E5 LDR R0,[R8, #+280] \ 0000011C 101087E2 ADD R1,R7,#+16 \ 00000120 ........ _BLF ascii2ws,??ascii2ws??rA 2292 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000124 183198E5 LDR R3,[R8, #+280] \ 00000128 4020A0E3 MOV R2,#+64 \ 0000012C 000093E5 LDR R0,[R3, #+0] \ 00000130 B000D0E1 LDRH R0,[R0, #+0] \ 00000134 01002DE9 PUSH {R0} \ 00000138 030000EA B ??AddMsgToChat_10 2293 } 2294 else 2295 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_9: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 01002DE9 PUSH {R0} \ 00000144 183198E5 LDR R3,[R8, #+280] \ 00000148 2020A0E3 MOV R2,#+32 \ ??AddMsgToChat_10: \ 0000014C 0110A0E3 MOV R1,#+1 \ 00000150 18008DE2 ADD R0,SP,#+24 \ 00000154 650100EF SWI +357 \ 00000158 04D08DE2 ADD SP,SP,#+4 2296 PrepareEditCOptions(&ec_options); \ 0000015C 04008DE2 ADD R0,SP,#+4 \ 00000160 C80100EF SWI +456 2297 SetPenColorToEditCOptions(&ec_options,color); \ 00000164 0B10A0E1 MOV R1,R11 \ 00000168 04008DE2 ADD R0,SP,#+4 \ 0000016C CC0100EF SWI +460 2298 SetFontToEditCOptions(&ec_options,font); \ 00000170 0A10A0E1 MOV R1,R10 \ 00000174 04008DE2 ADD R0,SP,#+4 \ 00000178 CA0100EF SWI +458 2299 CopyOptionsToEditControl(&ec,&ec_options); \ 0000017C 04108DE2 ADD R1,SP,#+4 \ 00000180 14008DE2 ADD R0,SP,#+20 \ 00000184 CE0100EF SWI +462 2300 //AddEditControlToEditQend(eq,&ec,ma); 2301 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 00000188 080096E5 LDR R0,[R6, #+8] \ 0000018C 14208DE2 ADD R2,SP,#+20 \ 00000190 011040E2 SUB R1,R0,#+1 \ 00000194 40009DE5 LDR R0,[SP, #+64] \ 00000198 D20100EF SWI +466 2302 ed_struct->ed_answer++; \ 0000019C 080096E5 LDR R0,[R6, #+8] \ 000001A0 010080E2 ADD R0,R0,#+1 \ 000001A4 080086E5 STR R0,[R6, #+8] 2303 if ((p->type&0x0F)!=3) \ 000001A8 0C0097E5 LDR R0,[R7, #+12] \ 000001AC 0F1000E2 AND R1,R0,#0xF \ 000001B0 030051E3 CMP R1,#+3 \ 000001B4 0300000A BEQ ??AddMsgToChat_11 2304 { 2305 ParseAnswer(ews,p->text); \ 000001B8 180198E5 LDR R0,[R8, #+280] \ 000001BC 601087E2 ADD R1,R7,#+96 \ 000001C0 ........ BL ParseAnswer \ 000001C4 050000EA B ??AddMsgToChat_12 2306 } 2307 else 2308 { 2309 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_11: \ 000001C8 100010E3 TST R0,#0x10 \ 000001CC 180198E5 LDR R0,[R8, #+280] \ 000001D0 0520A011 MOVNE R2,R5 \ 000001D4 0420A001 MOVEQ R2,R4 \ 000001D8 601087E2 ADD R1,R7,#+96 \ 000001DC ........ BL ParseXStatusText 2310 } 2311 PrepareEditControl(&ec); \ ??AddMsgToChat_12: \ 000001E0 14008DE2 ADD R0,SP,#+20 \ 000001E4 640100EF SWI +356 2312 ConstructEditControl(&ec, 2313 ECT_NORMAL_TEXT, 2314 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 2315 ews,ews->wsbody[0]); \ 000001E8 183198E5 LDR R3,[R8, #+280] \ 000001EC 000093E5 LDR R0,[R3, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000051E3 CMP R1,#+0 \ 000001F8 0100A0E1 MOV R0,R1 \ 000001FC 01002DE9 PUSH {R0} \ 00000200 812DA013 MOVNE R2,#+8256 \ 00000204 2020A003 MOVEQ R2,#+32 \ 00000208 0310A0E3 MOV R1,#+3 \ 0000020C 18008DE2 ADD R0,SP,#+24 \ 00000210 650100EF SWI +357 2316 PrepareEditCOptions(&ec_options); \ 00000214 08008DE2 ADD R0,SP,#+8 \ 00000218 C80100EF SWI +456 2317 //#ifdef M75 2318 if ((p->type&0x0F)!=3) \ 0000021C 0C0097E5 LDR R0,[R7, #+12] \ 00000220 04D08DE2 ADD SP,SP,#+4 \ 00000224 0F1000E2 AND R1,R0,#0xF \ 00000228 030051E3 CMP R1,#+3 \ 0000022C 0400000A BEQ ??AddMsgToChat_13 2319 { 2320 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable66 ;; O_ED_FONT_SIZE \ 00000238 ........ LDREQ R0,??DataTable67 ;; ED_FONT_SIZE \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 080000EA B ??AddMsgToChat_14 2321 } 2322 else 2323 { 2324 SetPenColorToEditCOptions(&ec_options,(p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_13: \ 00000244 100010E3 TST R0,#0x10 \ 00000248 0510A011 MOVNE R1,R5 \ 0000024C 0410A001 MOVEQ R1,R4 \ 00000250 04008DE2 ADD R0,SP,#+4 \ 00000254 CC0100EF SWI +460 2325 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000258 0C0097E5 LDR R0,[R7, #+12] \ 0000025C 100010E3 TST R0,#0x10 \ 00000260 00109D05 LDREQ R1,[SP, #+0] \ 00000264 0910A011 MOVNE R1,R9 \ ??AddMsgToChat_14: \ 00000268 04008DE2 ADD R0,SP,#+4 \ 0000026C CA0100EF SWI +458 2326 } 2327 //#else 2328 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 2329 //#endif 2330 CopyOptionsToEditControl(&ec,&ec_options); \ 00000270 04108DE2 ADD R1,SP,#+4 \ 00000274 14008DE2 ADD R0,SP,#+20 \ 00000278 CE0100EF SWI +462 2331 EDIT_InsertEditControl(data,ed_struct->ed_answer-1,&ec); \ 0000027C 080096E5 LDR R0,[R6, #+8] \ 00000280 14208DE2 ADD R2,SP,#+20 \ 00000284 011040E2 SUB R1,R0,#+1 \ 00000288 40009DE5 LDR R0,[SP, #+64] \ 0000028C D20100EF SWI +466 2332 ed_struct->ed_answer++; \ 00000290 080096E5 LDR R0,[R6, #+8] \ 00000294 010080E2 ADD R0,R0,#+1 \ 00000298 080086E5 STR R0,[R6, #+8] 2333 p=p->next; \ 0000029C 007097E5 LDR R7,[R7, #+0] 2334 } \ 000002A0 000057E3 CMP R7,#+0 \ 000002A4 64FFFF1A BNE ??AddMsgToChat_2 2335 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 000002A8 001096E5 LDR R1,[R6, #+0] \ 000002AC 801091E5 LDR R1,[R1, #+128] \ 000002B0 011081E2 ADD R1,R1,#+1 \ 000002B4 8140A0E1 LSL R4,R1,#+1 \ 000002B8 000054E1 CMP R4,R0 \ 000002BC 070000AA BGE ??AddMsgToChat_1 2336 while(jed_answer) 2337 { 2338 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_15: \ 000002C0 040096E5 LDR R0,[R6, #+4] \ 000002C4 0110A0E3 MOV R1,#+1 \ 000002C8 D10100EF SWI +465 2339 ed_struct->ed_answer--; \ 000002CC 080096E5 LDR R0,[R6, #+8] \ 000002D0 010040E2 SUB R0,R0,#+1 \ 000002D4 080086E5 STR R0,[R6, #+8] 2340 } \ 000002D8 000054E1 CMP R4,R0 \ 000002DC F7FFFFBA BLT ??AddMsgToChat_15 2341 } 2342 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002E0 000096E5 LDR R0,[R6, #+0] \ 000002E4 0040A0E3 MOV R4,#+0 \ 000002E8 784080E5 STR R4,[R0, #+120] 2343 if (IsGuiOnTop(edchat_id)) \ 000002EC 7C0198E5 LDR R0,[R8, #+380] \ 000002F0 350100EF SWI +309 \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 0300000A BEQ ??AddMsgToChat_16 2344 total_unread--; \ 000002FC 8C0098E5 LDR R0,[R8, #+140] \ 00000300 010040E2 SUB R0,R0,#+1 \ 00000304 8C0088E5 STR R0,[R8, #+140] \ 00000308 020000EA B ??AddMsgToChat_17 2345 else 2346 ed_struct->requested_decrement_total_unread++; \ ??AddMsgToChat_16: \ 0000030C 0C0096E5 LDR R0,[R6, #+12] \ 00000310 010080E2 ADD R0,R0,#+1 \ 00000314 0C0086E5 STR R0,[R6, #+12] 2347 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_17: \ 00000318 000096E5 LDR R0,[R6, #+0] \ 0000031C 584080E5 STR R4,[R0, #+88] 2348 #ifdef EVILFOX 2349 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 00000320 941098E5 LDR R1,[R8, #+148] \ 00000324 642090E5 LDR R2,[R0, #+100] \ 00000328 021041E0 SUB R1,R1,R2 \ 0000032C 941088E5 STR R1,[R8, #+148] 2350 ed_struct->ed_contact->unread_msg=0; \ 00000330 644080E5 STR R4,[R0, #+100] 2351 #endif 2352 ChangeContactPos(ed_struct->ed_contact); \ 00000334 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2353 // EDIT_SetFocus(data,ed_struct->ed_answer); 2354 } \ ??AddMsgToChat_0: \ 00000338 44D08DE2 ADD SP,SP,#+68 ;; stack cleaning \ 0000033C F08FBDE8 POP {R4-R11,PC} ;; return 2355 2356 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 2357 void DrawAck(void *data) 2358 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 2359 LOGQ *p; 2360 EDITCONTROL ec; 2361 EDITC_OPTIONS ec_options; 2362 EDCHAT_STRUCT *ed_struct; 2363 int j; 2364 int color; 2365 int dorefresh=0; \ 0000000C 0070A0E3 MOV R7,#+0 2366 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 2367 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 2368 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 2369 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 2370 j=ed_struct->ed_answer; 2371 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 705091E5 LDR R5,[R1, #+112] \ 0000002C 801091E5 LDR R1,[R1, #+128] \ 00000030 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000034 016040E2 SUB R6,R0,#+1 \ 00000038 0F0000EA B ??DrawAck_1 2372 while(p) 2373 { 2374 if (j>=1) //Пока возможно лишнее 2375 { 2376 if (!(p->acked&4)) 2377 { 2378 ExtractEditControl(data,j,&ec); 2379 PrepareEditCOptions(&ec_options); 2380 if (p->acked) 2381 { 2382 if (p->acked==1) 2383 color=ACK_COLOR; //Зеленый 2384 else 2385 color=I_COLOR; 2386 } 2387 else 2388 { 2389 if (p->ID==0xFFFFFFFF) 2390 color=(p->type&0x10)?(((p->type&0x0F)==1)?O_I_COLOR:O_TO_COLOR):(((p->type&0x0F)==1)?I_COLOR:TO_COLOR); 2391 else 2392 color=UNACK_COLOR; //Серый 2393 } 2394 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 2395 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); \ ??DrawAck_2: \ 0000003C 001090E5 LDR R1,[R0, #+0] \ 00000040 0D00A0E1 MOV R0,SP \ 00000044 CA0100EF SWI +458 2396 CopyOptionsToEditControl(&ec,&ec_options); \ 00000048 0D10A0E1 MOV R1,SP \ 0000004C 10008DE2 ADD R0,SP,#+16 \ 00000050 CE0100EF SWI +462 2397 StoreEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0610A0E1 MOV R1,R6 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 6A0100EF SWI +362 2398 p->acked|=4; //Обработали \ 00000064 040095E5 LDR R0,[R5, #+4] 2399 dorefresh=1; \ 00000068 0170A0E3 MOV R7,#+1 \ 0000006C 040080E3 ORR R0,R0,#0x4 \ 00000070 040085E5 STR R0,[R5, #+4] 2400 } 2401 } 2402 j+=2; 2403 p=p->next; \ ??DrawAck_3: \ 00000074 005095E5 LDR R5,[R5, #+0] \ 00000078 026086E2 ADD R6,R6,#+2 \ ??DrawAck_1: \ 0000007C 000055E3 CMP R5,#+0 \ 00000080 2900000A BEQ ??DrawAck_4 \ 00000084 010056E3 CMP R6,#+1 \ 00000088 F9FFFFBA BLT ??DrawAck_3 \ 0000008C 040095E5 LDR R0,[R5, #+4] \ 00000090 040010E3 TST R0,#0x4 \ 00000094 F6FFFF1A BNE ??DrawAck_3 \ 00000098 10208DE2 ADD R2,SP,#+16 \ 0000009C 0610A0E1 MOV R1,R6 \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 690100EF SWI +361 \ 000000A8 0D00A0E1 MOV R0,SP \ 000000AC C80100EF SWI +456 \ 000000B0 040095E5 LDR R0,[R5, #+4] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0300000A BEQ ??DrawAck_5 \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 ........ LDRNE R0,??DataTable73 ;; I_COLOR \ 000000C4 ........ LDREQ R0,??DataTable69 ;; ACK_COLOR \ 000000C8 0F0000EA B ??DrawAck_6 \ ??DrawAck_5: \ 000000CC 080095E5 LDR R0,[R5, #+8] \ 000000D0 010070E3 CMN R0,#+1 \ 000000D4 0B00001A BNE ??DrawAck_7 \ 000000D8 0C0095E5 LDR R0,[R5, #+12] \ 000000DC 100010E3 TST R0,#0x10 \ 000000E0 0F0000E2 AND R0,R0,#0xF \ 000000E4 0300000A BEQ ??DrawAck_8 \ 000000E8 010050E3 CMP R0,#+1 \ 000000EC ........ LDRNE R0,??DataTable70 ;; O_TO_COLOR \ 000000F0 ........ LDREQ R0,??DataTable71 ;; O_I_COLOR \ 000000F4 040000EA B ??DrawAck_6 \ ??DrawAck_8: \ 000000F8 010050E3 CMP R0,#+1 \ 000000FC ........ LDRNE R0,??DataTable72 ;; TO_COLOR \ 00000100 ........ LDREQ R0,??DataTable73 ;; I_COLOR \ 00000104 000000EA B ??DrawAck_6 \ ??DrawAck_7: \ 00000108 ........ LDR R0,??DataTable74 ;; UNACK_COLOR \ ??DrawAck_6: \ 0000010C 001090E5 LDR R1,[R0, #+0] \ 00000110 0D00A0E1 MOV R0,SP \ 00000114 CC0100EF SWI +460 \ 00000118 0C0095E5 LDR R0,[R5, #+12] \ 0000011C 100010E3 TST R0,#0x10 \ 00000120 ........ LDREQ R0,??DataTable75 ;; ED_H_FONT_SIZE \ 00000124 ........ LDRNE R0,??DataTable76 ;; O_ED_H_FONT_SIZE \ 00000128 C3FFFFEA B ??DrawAck_2 2404 } 2405 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_4: \ 0000012C 1C009FE5 LDR R0,??DrawAck_9 ;; S_ICONS + 380 \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 350100EF SWI +309 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 00005713 CMPNE R7,#+0 \ 00000140 0000000A BEQ ??DrawAck_0 \ 00000144 960100EF SWI +406 \ ??DrawAck_0: \ 00000148 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 0000014C F080BDE8 POP {R4-R7,PC} ;; return \ ??DrawAck_9: \ 00000150 ........ DC32 S_ICONS + 380 2406 } 2407 \ In segment CODE, align 4, keep-with-next 2408 void ask_my_info(void) 2409 { 2410 /* TPKT *p; 2411 CLIST *t; 2412 p=malloc(sizeof(PKT)); 2413 p->pkt.uin=UIN; 2414 p->pkt.type=T_REQINFOSHORT; 2415 p->pkt.data_len=0; 2416 // AddStringToLog(t,0x01,"Request info...",I_str); 2417 SUBPROC((void *)SendAnswer,0,p);*/ 2418 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 2419 \ In segment CODE, align 4, keep-with-next 2420 void set_my_status(void) 2421 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 2422 TPKT *p; 2423 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 2424 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 2425 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2426 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2427 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 308 2428 SUBPROC((void *)SendAnswer,0,p); \ 00000028 0020A0E1 MOV R2,R0 \ 0000002C 001091E5 LDR R1,[R1, #+0] \ 00000030 0810C0E5 STRB R1,[R0, #+8] \ 00000034 ........ LDR R0,??DataTable77 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 2429 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 308 2430 \ In segment CODE, align 4, keep-with-next 2431 void set_my_xstatus(void) 2432 { \ set_my_xstatus: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 2433 TPKT *p; 2434 char *s1; 2435 char *s2; 2436 int l1; 2437 int l2; 2438 p=malloc(sizeof(PKT)+1); 2439 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 2440 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 2441 p->pkt.data_len=1; // Длина пакета: 1 байт 2442 p->data[0]=CurrentXStatus; \ 00000004 ........ LDR R8,??DataTable92 ;; S_ICONS 2443 SUBPROC((void *)SendAnswer,0,p); \ 00000008 ........ LDR R6,??DataTable94 ;; 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 380198E5 LDR R0,[R8, #+312] \ 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 2444 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 0000004C 380198E5 LDR R0,[R8, #+312] \ 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 2445 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000064 380198E5 LDR R0,[R8, #+312] \ 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 2446 if ((!s1)||(!s2)) return; \ 0000007C 000057E3 CMP R7,#+0 \ 00000080 00005813 CMPNE R8,#+0 \ 00000084 F781BD08 POPEQ {R0-R2,R4-R8,PC} 2447 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 2448 p->pkt.uin=0; \ 000000A0 005084E5 STR R5,[R4, #+0] 2449 p->pkt.type=T_XTEXT_SET; \ 000000A4 1A00A0E3 MOV R0,#+26 \ 000000A8 B400C4E1 STRH R0,[R4, #+4] 2450 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] 2451 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 2452 p->data[l1]=0; \ 000000D0 00009DE5 LDR R0,[SP, #+0] 2453 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 2454 SUBPROC((void *)SendAnswer,0,p); \ 000000F4 0420A0E1 MOV R2,R4 \ 000000F8 0010A0E3 MOV R1,#+0 \ 000000FC 0600A0E1 MOV R0,R6 \ 00000100 710100EF SWI +369 2455 } \ 00000104 F781BDE8 POP {R0-R2,R4-R8,PC} ;; return 2456 \ In segment CODE, align 4, keep-with-next 2457 void to_develop(void) 2458 { 2459 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable92 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 1C1190E5 LDR R1,[R0, #+284] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 2460 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable95 ;; `?` 2461 gipc.name_from=ipc_my_name; 2462 gipc.data=(void *)maincsm_id; 2463 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 00000018 743080E2 ADD R3,R0,#+116 \ 0000001C AA2F81E2 ADD R2,R1,#+680 \ 00000020 A21F81E2 ADD R1,R1,#+648 \ 00000024 781080E5 STR R1,[R0, #+120] \ 00000028 081190E5 LDR R1,[R0, #+264] \ 0000002C 742080E5 STR R2,[R0, #+116] \ 00000030 7C1080E5 STR R1,[R0, #+124] \ 00000034 0220A0E3 MOV R2,#+2 \ 00000038 FC1F82E3 ORR R1,R2,#0x3F0 \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 420C80E3 ORR R0,R0,#0x4200 \ 00000044 000100EF SWI +256 2464 } \ 00000048 0080BDE8 POP {PC} ;; return 2465 \ In segment CODE, align 4, keep-with-next 2466 void ReqAddMsgToChat(CLIST *t) 2467 { \ ReqAddMsgToChat: \ 00000000 70402DE9 PUSH {R4-R6,LR} 2468 if (edchat_id) \ 00000004 ........ LDR R5,??DataTable92 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 7C0195E5 LDR R0,[R5, #+380] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 7080BD08 POPEQ {R4-R6,PC} 2469 { 2470 void *data=FindGUIbyId(edchat_id,NULL); \ 00000018 7C0195E5 LDR R0,[R5, #+380] \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 090200EF SWI +521 \ 00000024 0060A0E1 MOV R6,R0 2471 { 2472 EDCHAT_STRUCT *ed_struct; 2473 ed_struct=EDIT_GetUserPointer(data); \ 00000028 DF0100EF SWI +479 2474 if (ed_struct) \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 7080BD08 POPEQ {R4-R6,PC} 2475 { 2476 if (ed_struct->ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 2477 { 2478 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 2479 { 2480 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 680084E5 STR R0,[R4, #+104] 2481 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C 940185E5 STR R0,[R5, #+404] \ 00000060 7080BDE8 POP {R4-R6,PC} 2482 } 2483 else 2484 { 2485 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 2486 DirectRedrawGUI_ID(edchat_id); \ 0000006C 7C0195E5 LDR R0,[R5, #+380] \ 00000070 400100EF SWI +320 2487 } 2488 } 2489 } 2490 } 2491 } 2492 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 2493 \ In segment CODE, align 4, keep-with-next 2494 void CheckComand(char *txt, CLIST *t, char *ddd) 2495 { \ CheckComand: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 2496 comanda=1; \ 00000004 ........ LDR R5,??DataTable92 ;; S_ICONS 2497 if(!strcmp(txt, "GET_ONLINE_TIME")) \ 00000008 54829FE5 LDR R8,??CheckComand_0 ;; `?` \ 0000000C ........ LDR R6,??DataTable94 ;; SendAnswer \ 00000010 04D04DE2 SUB SP,SP,#+4 \ 00000014 0090A0E1 MOV R9,R0 \ 00000018 0140A0E1 MOV R4,R1 \ 0000001C 0100A0E3 MOV R0,#+1 \ 00000020 E40085E5 STR R0,[R5, #+228] \ 00000024 0270A0E3 MOV R7,#+2 \ 00000028 00A0A0E3 MOV R10,#+0 \ 0000002C 241088E2 ADD R1,R8,#+36 \ 00000030 0900A0E1 MOV R0,R9 \ 00000034 190000EF SWI +25 \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0900001A BNE ??CheckComand_1 2498 { 2499 comanda=0; \ 00000040 E4A085E5 STR R10,[R5, #+228] 2500 TPKT *p; 2501 sprintf(online_txt, "online: %02d:%02d:%02d \nServer: %s", hours, minutes, seconds, hostname); \ 00000044 750E85E2 ADD R0,R5,#+1872 \ 00000048 01002DE9 PUSH {R0} \ 0000004C A00095E5 LDR R0,[R5, #+160] \ 00000050 D39FA0E3 MOV R9,#+844 \ 00000054 01002DE9 PUSH {R0} \ 00000058 A43095E5 LDR R3,[R5, #+164] \ 0000005C A82095E5 LDR R2,[R5, #+168] \ 00000060 0810A0E1 MOV R1,R8 \ 00000064 650000EA B ??CheckComand_2 2502 p=malloc(sizeof(PKT)+strlen(online_txt)+1); 2503 p->pkt.uin=t->uin; 2504 p->pkt.type=T_SENDMSG; 2505 p->pkt.data_len=strlen(online_txt); 2506 strcpy(p->data,online_txt); 2507 SENDMSGCOUNT++; 2508 SUBPROC((void *)SendAnswer,0,p); 2509 return; 2510 } 2511 if(!strcmp(txt, "GET_MSG_INFO")) \ ??CheckComand_1: \ 00000068 4C1088E2 ADD R1,R8,#+76 \ 0000006C 0900A0E1 MOV R0,R9 \ 00000070 190000EF SWI +25 \ 00000074 000050E3 CMP R0,#+0 \ 00000078 0B00001A BNE ??CheckComand_3 2512 { 2513 comanda=0; \ 0000007C E4A085E5 STR R10,[R5, #+228] 2514 TPKT *p; 2515 char *send_txt=malloc(64); \ 00000080 4000A0E3 MOV R0,#+64 \ 00000084 140000EF SWI +20 2516 sprintf(send_txt, "sent: %d \n" 2517 "recieved: %d" 2518 , out_count, in_count); \ 00000088 DC3095E5 LDR R3,[R5, #+220] \ 0000008C E02095E5 LDR R2,[R5, #+224] \ 00000090 0090A0E1 MOV R9,R0 \ 00000094 341088E2 ADD R1,R8,#+52 \ 00000098 160000EF SWI +22 2519 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 0000009C 0900A0E1 MOV R0,R9 \ 000000A0 1B0000EF SWI +27 \ 000000A4 090080E2 ADD R0,R0,#+9 \ 000000A8 340000EA B ??CheckComand_4 2520 p->pkt.uin=t->uin; 2521 p->pkt.type=T_SENDMSG; 2522 p->pkt.data_len=strlen(send_txt); 2523 strcpy(p->data,send_txt); 2524 SENDMSGCOUNT++; 2525 SUBPROC((void *)SendAnswer,0,p); 2526 mfree(send_txt); 2527 return; 2528 } 2529 if(!strcmp(txt, "GET_MOD_INFO")) \ ??CheckComand_3: \ 000000AC 5C1088E2 ADD R1,R8,#+92 \ 000000B0 0900A0E1 MOV R0,R9 \ 000000B4 190000EF SWI +25 \ 000000B8 000050E3 CMP R0,#+0 \ 000000BC 2000001A BNE ??CheckComand_5 2530 { 2531 comanda=0; \ 000000C0 E4A085E5 STR R10,[R5, #+228] 2532 TPKT *p; 2533 char *send_txt=malloc(256); \ 000000C4 400FA0E3 MOV R0,#+256 \ 000000C8 140000EF SWI +20 \ 000000CC 0080A0E1 MOV R8,R0 2534 strcpy(send_txt, mod_info); \ 000000D0 C800A0E3 MOV R0,#+200 \ 000000D4 500E80E3 ORR R0,R0,#0x500 \ 000000D8 051080E0 ADD R1,R0,R5 \ 000000DC 0800A0E1 MOV R0,R8 \ 000000E0 1A0000EF SWI +26 2535 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000000E4 0800A0E1 MOV R0,R8 \ 000000E8 1B0000EF SWI +27 \ 000000EC 090080E2 ADD R0,R0,#+9 \ 000000F0 140000EF SWI +20 \ 000000F4 0090A0E1 MOV R9,R0 2536 p->pkt.uin=t->uin; \ 000000F8 0C0094E5 LDR R0,[R4, #+12] \ 000000FC 000089E5 STR R0,[R9, #+0] 2537 p->pkt.type=T_SENDMSG; \ 00000100 B470C9E1 STRH R7,[R9, #+4] 2538 p->pkt.data_len=strlen(send_txt); \ 00000104 0800A0E1 MOV R0,R8 \ 00000108 1B0000EF SWI +27 \ 0000010C B600C9E1 STRH R0,[R9, #+6] 2539 strcpy(p->data,send_txt); \ 00000110 0810A0E1 MOV R1,R8 \ 00000114 080089E2 ADD R0,R9,#+8 \ 00000118 1A0000EF SWI +26 2540 SENDMSGCOUNT++; \ 0000011C 100195E5 LDR R0,[R5, #+272] 2541 SUBPROC((void *)SendAnswer,0,p); \ 00000120 0920A0E1 MOV R2,R9 \ 00000124 010080E2 ADD R0,R0,#+1 \ 00000128 100185E5 STR R0,[R5, #+272] \ 0000012C 0010A0E3 MOV R1,#+0 \ 00000130 0600A0E1 MOV R0,R6 \ 00000134 710100EF SWI +369 2542 mfree(send_txt); \ 00000138 0800A0E1 MOV R0,R8 \ 0000013C 150000EF SWI +21 \ 00000140 F187BDE8 POP {R0,R4-R10,PC} 2543 return; 2544 } 2545 if(!strcmp(txt, "GET_BAT_INFO")) \ ??CheckComand_5: \ 00000144 841088E2 ADD R1,R8,#+132 \ 00000148 0900A0E1 MOV R0,R9 \ 0000014C 190000EF SWI +25 \ 00000150 000050E3 CMP R0,#+0 \ 00000154 1E00001A BNE ??CheckComand_6 2546 { 2547 comanda=0; \ 00000158 E4A085E5 STR R10,[R5, #+228] 2548 TPKT *p; 2549 int bat; 2550 bat=*RamCap(); \ 0000015C C88000EF SWI +32968 \ 00000160 B0A0D0E1 LDRH R10,[R0, #+0] 2551 char *send_txt=malloc(64); \ 00000164 4000A0E3 MOV R0,#+64 \ 00000168 140000EF SWI +20 \ 0000016C 0090A0E1 MOV R9,R0 2552 sprintf(send_txt, "battery: %d percents", bat); \ 00000170 0A20A0E1 MOV R2,R10 \ 00000174 6C1088E2 ADD R1,R8,#+108 \ 00000178 160000EF SWI +22 2553 p=malloc(sizeof(PKT)+21+1); \ 0000017C 1E00A0E3 MOV R0,#+30 \ ??CheckComand_4: \ 00000180 140000EF SWI +20 \ 00000184 0080A0E1 MOV R8,R0 2554 p->pkt.uin=t->uin; \ 00000188 0C0094E5 LDR R0,[R4, #+12] \ 0000018C 000088E5 STR R0,[R8, #+0] 2555 p->pkt.type=T_SENDMSG; \ 00000190 B470C8E1 STRH R7,[R8, #+4] 2556 p->pkt.data_len=strlen(send_txt); \ 00000194 0900A0E1 MOV R0,R9 \ 00000198 1B0000EF SWI +27 \ 0000019C B600C8E1 STRH R0,[R8, #+6] 2557 strcpy(p->data,send_txt); \ 000001A0 0910A0E1 MOV R1,R9 \ 000001A4 080088E2 ADD R0,R8,#+8 \ 000001A8 1A0000EF SWI +26 2558 SENDMSGCOUNT++; \ 000001AC 100195E5 LDR R0,[R5, #+272] 2559 SUBPROC((void *)SendAnswer,0,p); \ 000001B0 0820A0E1 MOV R2,R8 \ 000001B4 010080E2 ADD R0,R0,#+1 \ 000001B8 100185E5 STR R0,[R5, #+272] \ 000001BC 0010A0E3 MOV R1,#+0 \ 000001C0 0600A0E1 MOV R0,R6 \ 000001C4 710100EF SWI +369 2560 mfree(send_txt); \ 000001C8 0900A0E1 MOV R0,R9 \ 000001CC 150000EF SWI +21 2561 return; \ 000001D0 F187BDE8 POP {R0,R4-R10,PC} 2562 } 2563 if(away_m==1) \ ??CheckComand_6: \ 000001D4 F40095E5 LDR R0,[R5, #+244] \ 000001D8 010050E3 CMP R0,#+1 \ 000001DC F187BD18 POPNE {R0,R4-R10,PC} 2564 { 2565 TPKT *p; 2566 sprintf(away_msg, "AutoMsg: %s %s! im not here! %s %s",away_msg1, t->name, away_msg2, away_msg_time); \ 000001E0 80209FE5 LDR R2,??CheckComand_0+0x4 ;; away_msg1 \ 000001E4 F40F85E2 ADD R0,R5,#+976 \ 000001E8 01002DE9 PUSH {R0} \ 000001EC 78009FE5 LDR R0,??CheckComand_0+0x8 ;; away_msg2 \ 000001F0 419EA0E3 MOV R9,#+1040 \ 000001F4 01002DE9 PUSH {R0} \ 000001F8 143084E2 ADD R3,R4,#+20 \ 000001FC 941088E2 ADD R1,R8,#+148 \ ??CheckComand_2: \ 00000200 050089E0 ADD R0,R9,R5 \ 00000204 160000EF SWI +22 2567 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 00000208 050089E0 ADD R0,R9,R5 \ 0000020C 1B0000EF SWI +27 \ 00000210 090080E2 ADD R0,R0,#+9 \ 00000214 140000EF SWI +20 \ 00000218 0080A0E1 MOV R8,R0 2568 p->pkt.uin=t->uin; \ 0000021C 0C0094E5 LDR R0,[R4, #+12] \ 00000220 000088E5 STR R0,[R8, #+0] 2569 p->pkt.type=T_SENDMSG; \ 00000224 B470C8E1 STRH R7,[R8, #+4] 2570 p->pkt.data_len=strlen(away_msg); \ 00000228 050089E0 ADD R0,R9,R5 \ 0000022C 1B0000EF SWI +27 \ 00000230 B600C8E1 STRH R0,[R8, #+6] 2571 strcpy(p->data,away_msg); \ 00000234 051089E0 ADD R1,R9,R5 \ 00000238 080088E2 ADD R0,R8,#+8 \ 0000023C 1A0000EF SWI +26 2572 SENDMSGCOUNT++; \ 00000240 100195E5 LDR R0,[R5, #+272] 2573 SUBPROC((void *)SendAnswer,0,p); \ 00000244 0820A0E1 MOV R2,R8 \ 00000248 010080E2 ADD R0,R0,#+1 \ 0000024C 100185E5 STR R0,[R5, #+272] \ 00000250 0010A0E3 MOV R1,#+0 \ 00000254 0600A0E1 MOV R0,R6 \ 00000258 710100EF SWI +369 \ 0000025C 08D08DE2 ADD SP,SP,#+8 \ 00000260 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??CheckComand_0: \ 00000264 ........ DC32 `?` \ 00000268 ........ DC32 away_msg1 \ 0000026C ........ DC32 away_msg2 2574 } 2575 } 2576 \ In segment CODE, align 4, keep-with-next 2577 ProcessPacket(TPKT *p) 2578 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 43DF4DE2 SUB SP,SP,#+268 \ 00000008 ........ LDR R8,??DataTable95 ;; `?` \ 0000000C ........ LDR R6,??DataTable92 ;; S_ICONS \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 B400D4E1 LDRH R0,[R4, #+4] \ 00000018 0270A0E3 MOV R7,#+2 \ 0000001C 01B0A0E3 MOV R11,#+1 \ 00000020 0090A0E3 MOV R9,#+0 \ 00000024 030040E2 SUB R0,R0,#+3 \ 00000028 1C0050E3 CMP R0,#+28 \ 0000002C 1F02008A BHI ??ProcessPacket_1 \ 00000030 021F8FE2 ADR R1,??ProcessPacket_0 \ 00000034 8000A0E1 MOV R0,R0, LSL #+1 \ 00000038 B01091E1 LDRH R1,[R1, R0] \ 0000003C 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??ProcessPacket_0: \ 00000040 CF000E001B02 DC16 +207,+14,+539,+539 \ 1B02 \ 00000048 11001B024900 DC16 +17,+539,+73,+539 \ 1B02 \ 00000050 1B021B021B02 DC16 +539,+539,+539,+539 \ 1B02 \ 00000058 1B027E017E01 DC16 +539,+382,+382,+539 \ 1B02 \ 00000060 1B0237004600 DC16 +539,+55,+70,+539 \ 1B02 \ 00000068 1B021B02B401 DC16 +539,+539,+436,+539 \ 1B02 \ 00000070 1B021B021B02 DC16 +539,+539,+539,+539 \ 1B02 \ 00000078 19020000 DC16 +537,+0 2579 extern const int VIBR_TYPE, VIBR_ON_CONNECT; 2580 CLIST *t; 2581 LOGQ *q; 2582 char s[256]; 2583 switch(p->pkt.type) 2584 { 2585 case T_LOGIN: 2586 set_my_status(); \ ??ProcessPacket_2: \ 0000007C ........ BL set_my_status 2587 set_my_xstatus(); \ 00000080 ........ BL set_my_xstatus \ 00000084 090200EA B ??ProcessPacket_1 2588 break; 2589 case T_CLENTRY: 2590 if (p->pkt.uin) \ ??ProcessPacket_3: \ 00000088 000094E5 LDR R0,[R4, #+0] \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 1300000A BEQ ??ProcessPacket_4 2591 { 2592 if ((t=FindContactByUin(p->pkt.uin))) \ 00000094 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000098 0050B0E1 MOVS R5,R0 \ 0000009C 0B00000A BEQ ??ProcessPacket_5 2593 { 2594 // t->state=0xFFFF; 2595 strncpy(t->name,p->data,63); \ 000000A0 3F20A0E3 MOV R2,#+63 \ 000000A4 081084E2 ADD R1,R4,#+8 \ 000000A8 140085E2 ADD R0,R5,#+20 \ 000000AC 160100EF SWI +278 2596 t->group=GROUP_CACHE; \ 000000B0 740196E5 LDR R0,[R6, #+372] \ 000000B4 100085E5 STR R0,[R5, #+16] 2597 ChangeContactPos(t); \ ??ProcessPacket_6: \ 000000B8 0500A0E1 MOV R0,R5 \ 000000BC ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2598 RecountMenu(t, 1); \ 000000C0 0110A0E3 MOV R1,#+1 \ 000000C4 0500A0E1 MOV R0,R5 \ ??ProcessPacket_7: \ 000000C8 ........ BL RecountMenu \ 000000CC F70100EA B ??ProcessPacket_1 2599 } 2600 else 2601 { 2602 RecountMenu(AddContact(p->pkt.uin,p->data), 1); \ ??ProcessPacket_5: \ 000000D0 000094E5 LDR R0,[R4, #+0] \ 000000D4 081084E2 ADD R1,R4,#+8 \ 000000D8 ........ _BLF AddContact,??AddContact??rA \ 000000DC 0110A0E3 MOV R1,#+1 \ 000000E0 F8FFFFEA B ??ProcessPacket_7 2603 } 2604 } 2605 else 2606 { 2607 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000E4 ........ LDR R0,??DataTable87 ;; VIBR_ON_CONNECT \ 000000E8 000090E5 LDR R0,[R0, #+0] \ 000000EC 000050E3 CMP R0,#+0 \ 000000F0 0100000A BEQ ??ProcessPacket_8 2608 { 2609 vibra_count=1; \ 000000F4 40B186E5 STR R11,[R6, #+320] 2610 start_vibra(); \ 000000F8 ........ BL start_vibra 2611 } 2612 GROUP_CACHE=0; \ ??ProcessPacket_8: \ 000000FC 749186E5 STR R9,[R6, #+372] 2613 ask_my_info(); 2614 if (contactlist_menu_id) \ 00000100 780196E5 LDR R0,[R6, #+376] \ 00000104 000050E3 CMP R0,#+0 \ 00000108 0200000A BEQ ??ProcessPacket_9 2615 { 2616 RecountMenu(NULL, 1); \ 0000010C 0110A0E3 MOV R1,#+1 \ 00000110 0900A0E1 MOV R0,R9 \ ??ProcessPacket_10: \ 00000114 EBFFFFEA B ??ProcessPacket_7 2617 } 2618 else 2619 create_contactlist_menu(); \ ??ProcessPacket_9: \ 00000118 ........ BL create_contactlist_menu \ 0000011C E30100EA B ??ProcessPacket_1 2620 } 2621 break; 2622 case T_GROUPID: 2623 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_11: \ 00000120 000094E5 LDR R0,[R4, #+0] \ 00000124 740186E5 STR R0,[R6, #+372] \ 00000128 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 0000012C 0050B0E1 MOVS R5,R0 \ 00000130 0400000A BEQ ??ProcessPacket_12 2624 { 2625 strncpy(t->name,p->data,63); \ 00000134 3F20A0E3 MOV R2,#+63 \ 00000138 081084E2 ADD R1,R4,#+8 \ 0000013C 140085E2 ADD R0,R5,#+20 \ 00000140 160100EF SWI +278 2626 ChangeContactPos(t); \ 00000144 DBFFFFEA B ??ProcessPacket_6 2627 RecountMenu(t, 1); 2628 } 2629 else 2630 { 2631 RecountMenu(AddGroup(p->pkt.uin,p->data), 1); \ ??ProcessPacket_12: \ 00000148 000094E5 LDR R0,[R4, #+0] \ 0000014C 081084E2 ADD R1,R4,#+8 \ 00000150 ........ _BLF AddGroup,??AddGroup??rA \ 00000154 0110A0E3 MOV R1,#+1 \ 00000158 DAFFFFEA B ??ProcessPacket_7 2632 } 2633 break; 2634 case T_GROUPFOLLOW: 2635 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_13: \ 0000015C 000094E5 LDR R0,[R4, #+0] \ 00000160 740186E5 STR R0,[R6, #+372] \ 00000164 D10100EA B ??ProcessPacket_1 2636 break; 2637 case T_STATUSCHANGE: 2638 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_14: \ 00000168 000094E5 LDR R0,[R4, #+0] \ 0000016C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000170 0050B0E1 MOVS R5,R0 2639 if (t) \ 00000174 7200000A BEQ ??ProcessPacket_15 2640 { 2641 int i=t->state; \ 00000178 B415D5E1 LDRH R1,[R5, #+84] 2642 CLIST *oldt=NULL; \ 0000017C 00A0A0E3 MOV R10,#+0 \ 00000180 08108DE5 STR R1,[SP, #+8] \ 00000184 0A00D4E5 LDRB R0,[R4, #+10] \ 00000188 B615D5E1 LDRH R1,[R5, #+86] \ 0000018C 000051E1 CMP R1,R0 \ 00000190 1D00000A BEQ ??ProcessPacket_16 2643 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 2644 { 2645 t->xstate=p->data[2]; \ 00000194 B605C5E1 STRH R0,[R5, #+86] 2646 FreeXText(t); \ 00000198 0500A0E1 MOV R0,R5 \ 0000019C ........ _BLF FreeXText,??FreeXText??rA 2647 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001A0 B605D5E1 LDRH R0,[R5, #+86] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 1600000A BEQ ??ProcessPacket_17 \ 000001AC 10079FE5 LDR R0,??ProcessPacket_18+0x4 ;; ENA_AUTO_XTXT \ 000001B0 000090E5 LDR R0,[R0, #+0] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 1200000A BEQ ??ProcessPacket_17 2648 { 2649 t->req_xtext=1; \ 000001BC 88B085E5 STR R11,[R5, #+136] 2650 if (edchat_id) // Если открыт чат \ 000001C0 7C0196E5 LDR R0,[R6, #+380] \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 0F00000A BEQ ??ProcessPacket_16 2651 { 2652 void *data=FindGUIbyId(edchat_id,NULL); \ 000001CC 7C0196E5 LDR R0,[R6, #+380] \ 000001D0 0010A0E3 MOV R1,#+0 \ 000001D4 090200EF SWI +521 2653 if (data) \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 0A00000A BEQ ??ProcessPacket_16 2654 { 2655 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001E0 DF0100EF SWI +479 2656 if (ed_struct) \ 000001E4 000050E3 CMP R0,#+0 \ 000001E8 0700000A BEQ ??ProcessPacket_16 2657 { 2658 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001EC 000090E5 LDR R0,[R0, #+0] \ 000001F0 050050E1 CMP R0,R5 \ 000001F4 0400001A BNE ??ProcessPacket_16 2659 { 2660 t->req_xtext=0; \ 000001F8 889085E5 STR R9,[R5, #+136] 2661 RequestXText(t->uin); \ 000001FC 0C0095E5 LDR R0,[R5, #+12] \ 00000200 ........ BL RequestXText \ 00000204 000000EA B ??ProcessPacket_16 2662 } 2663 } 2664 } 2665 } 2666 } 2667 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 2668 { 2669 t->req_xtext=0; \ ??ProcessPacket_17: \ 00000208 889085E5 STR R9,[R5, #+136] 2670 } 2671 } 2672 if (contactlist_menu_id) \ ??ProcessPacket_16: \ 0000020C 780196E5 LDR R0,[R6, #+376] \ 00000210 000050E3 CMP R0,#+0 \ 00000214 0500000A BEQ ??ProcessPacket_19 2673 { 2674 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000218 780196E5 LDR R0,[R6, #+376] \ 0000021C 0010A0E3 MOV R1,#+0 \ 00000220 090200EF SWI +521 \ 00000224 8F0100EF SWI +399 \ 00000228 ........ _BLF FindContactByN,??FindContactByN??rA \ 0000022C 00A0A0E1 MOV R10,R0 2675 } 2676 t->state=*((unsigned short *)(p->data)); \ ??ProcessPacket_19: \ 00000230 B800D4E1 LDRH R0,[R4, #+8] \ 00000234 B405C5E1 STRH R0,[R5, #+84] 2677 LogStatusChange(t); \ 00000238 0500A0E1 MOV R0,R5 \ 0000023C ........ _BLF LogStatusChange,??LogStatusChange??rA 2678 ChangeContactPos(t); \ 00000240 0500A0E1 MOV R0,R5 \ 00000244 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2679 RecountMenu(oldt, 1); \ 00000248 0110A0E3 MOV R1,#+1 \ 0000024C 0A00A0E1 MOV R0,R10 \ 00000250 ........ BL RecountMenu 2680 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ 00000254 B405D5E1 LDRH R0,[R5, #+84] \ 00000258 FF10A0E3 MOV R1,#+255 \ 0000025C FF1C81E3 ORR R1,R1,#0xFF00 \ 00000260 010050E1 CMP R0,R1 \ 00000264 2F00000A BEQ ??ProcessPacket_20 \ 00000268 08209DE5 LDR R2,[SP, #+8] \ 0000026C 010052E1 CMP R2,R1 \ 00000270 2C00001A BNE ??ProcessPacket_20 2681 { 2682 #ifdef EVILFOX 2683 if(!t->just_now) \ 00000274 5C0095E5 LDR R0,[R5, #+92] \ 00000278 000050E3 CMP R0,#+0 \ 0000027C 0800001A BNE ??ProcessPacket_21 2684 { 2685 total_c_online++; \ 00000280 980096E5 LDR R0,[R6, #+152] \ 00000284 010080E2 ADD R0,R0,#+1 \ 00000288 980086E5 STR R0,[R6, #+152] 2686 UpdateCLheader(); \ 0000028C ........ BL UpdateCLheader 2687 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ 00000290 780196E5 LDR R0,[R6, #+376] \ 00000294 350100EF SWI +309 \ 00000298 000050E3 CMP R0,#+0 \ 0000029C 0000000A BEQ ??ProcessPacket_21 \ 000002A0 960100EF SWI +406 2688 } 2689 if(Is_INC_On) \ ??ProcessPacket_21: \ 000002A4 C80096E5 LDR R0,[R6, #+200] \ 000002A8 000050E3 CMP R0,#+0 \ 000002AC 1A00000A BEQ ??ProcessPacket_22 2690 { 2691 strcpy(show_nick, t->name); \ 000002B0 141085E2 ADD R1,R5,#+20 \ 000002B4 E00F86E2 ADD R0,R6,#+896 \ 000002B8 1A0000EF SWI +26 2692 #ifdef NEWSGOLD 2693 if(!IsIdleUiOnTop()) 2694 #else 2695 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 2696 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ 000002BC 068100EF SWI +33030 \ 000002C0 040090E5 LDR R0,[R0, #+4] \ 000002C4 080100EF SWI +264 2697 if (!IsGuiOnTop(idlegui_id)) \ 000002C8 280090E5 LDR R0,[R0, #+40] \ 000002CC 350100EF SWI +309 \ 000002D0 000050E3 CMP R0,#+0 \ 000002D4 1000001A BNE ??ProcessPacket_22 2698 #endif 2699 { 2700 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 000002D8 068100EF SWI +33030 \ 000002DC 080090E5 LDR R0,[R0, #+8] 2701 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 000002E0 0C0098E8 LDM R8,{R2,R3} \ 000002E4 0C0090E5 LDR R0,[R0, #+12] \ 000002E8 0D10A0E1 MOV R1,SP \ 000002EC 080090E5 LDR R0,[R0, #+8] \ 000002F0 040090E5 LDR R0,[R0, #+4] \ 000002F4 0C0081E8 STM R1,{R2,R3} \ 000002F8 010040E2 SUB R0,R0,#+1 2702 if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) \ 000002FC 0820A0E3 MOV R2,#+8 \ 00000300 1C0100EF SWI +284 \ 00000304 000050E3 CMP R0,#+0 \ 00000308 0300000A BEQ ??ProcessPacket_22 2703 { 2704 INC_show=15; \ 0000030C 0F00A0E3 MOV R0,#+15 \ 00000310 C40086E5 STR R0,[R6, #+196] 2705 pp_color=2; \ 00000314 D07086E5 STR R7,[R6, #+208] 2706 show_pp_sender(); \ 00000318 ........ BL show_pp_sender 2707 } 2708 } 2709 } 2710 t->just_now=2; 2711 2712 #endif 2713 Play(sndGlobal); \ ??ProcessPacket_22: \ 0000031C A4059FE5 LDR R0,??ProcessPacket_18+0x8 ;; sndGlobal \ 00000320 5C7085E5 STR R7,[R5, #+92] \ 00000324 050000EA B ??ProcessPacket_23 2714 } 2715 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_20: \ 00000328 08209DE5 LDR R2,[SP, #+8] \ 0000032C 010052E1 CMP R2,R1 \ 00000330 0300000A BEQ ??ProcessPacket_15 \ 00000334 010050E1 CMP R0,R1 \ 00000338 0100001A BNE ??ProcessPacket_15 2716 { 2717 Play(sndSrvMsg); \ 0000033C 88059FE5 LDR R0,??ProcessPacket_18+0xC ;; sndSrvMsg \ ??ProcessPacket_23: \ 00000340 ........ BL Play 2718 } 2719 } 2720 if (edchat_id) \ ??ProcessPacket_15: \ 00000344 7C0196E5 LDR R0,[R6, #+380] \ 00000348 000050E3 CMP R0,#+0 \ 0000034C 5701000A BEQ ??ProcessPacket_1 2721 { 2722 void *data=FindGUIbyId(edchat_id,NULL); \ 00000350 7C0196E5 LDR R0,[R6, #+380] \ 00000354 0010A0E3 MOV R1,#+0 \ 00000358 090200EF SWI +521 2723 { 2724 EDCHAT_STRUCT *ed_struct; 2725 ed_struct=EDIT_GetUserPointer(data); \ 0000035C DF0100EF SWI +479 2726 if (ed_struct) \ 00000360 000050E3 CMP R0,#+0 \ 00000364 5101000A BEQ ??ProcessPacket_1 2727 { 2728 if (ed_struct->ed_contact==t) \ 00000368 000090E5 LDR R0,[R0, #+0] \ 0000036C 050050E1 CMP R0,R5 \ 00000370 4E01001A BNE ??ProcessPacket_1 2729 { 2730 DirectRedrawGUI_ID(edchat_id); \ 00000374 7C0196E5 LDR R0,[R6, #+380] \ 00000378 400100EF SWI +320 \ 0000037C 4B0100EA B ??ProcessPacket_1 2731 } 2732 } 2733 } 2734 } 2735 break; 2736 case T_RECVMSG: 2737 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_24: \ 00000380 000094E5 LDR R0,[R4, #+0] \ 00000384 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000388 0050B0E1 MOVS R5,R0 2738 if (!t) \ 0000038C 0700001A BNE ??ProcessPacket_25 2739 { 2740 sprintf(s,percent_d,p->pkt.uin); \ 00000390 002094E5 LDR R2,[R4, #+0] \ 00000394 131088E2 ADD R1,R8,#+19 \ 00000398 0C008DE2 ADD R0,SP,#+12 \ 0000039C 160000EF SWI +22 2741 t=AddContact(p->pkt.uin,s); \ 000003A0 000094E5 LDR R0,[R4, #+0] \ 000003A4 0C108DE2 ADD R1,SP,#+12 \ 000003A8 ........ _BLF AddContact,??AddContact??rA \ 000003AC 0050A0E1 MOV R5,R0 2742 } 2743 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ ??ProcessPacket_26: \ 000003DC 1E00A0E3 MOV R0,#+30 \ 000003E0 7C0085E5 STR R0,[R5, #+124] 2745 #ifdef EVILFOX 2746 if(t->ext_snd) \ 000003E4 600095E5 LDR R0,[R5, #+96] \ 000003E8 000050E3 CMP R0,#+0 \ 000003EC 0800000A BEQ ??ProcessPacket_27 2747 { 2748 sprintf(ext_sound, "%s%d.wav", sndMsg2, t->uin); \ 000003F0 0C3095E5 LDR R3,[R5, #+12] \ 000003F4 ........ LDR R2,??DataTable89 ;; sndMsg2 \ 000003F8 28A0A0E3 MOV R10,#+40 \ 000003FC 50AE8AE3 ORR R10,R10,#0x500 \ 00000400 181088E2 ADD R1,R8,#+24 \ 00000404 06008AE0 ADD R0,R10,R6 \ 00000408 160000EF SWI +22 2749 Play(ext_sound); \ 0000040C 06008AE0 ADD R0,R10,R6 \ 00000410 000000EA B ??ProcessPacket_28 2750 } 2751 else 2752 Play(sndMsg); \ ??ProcessPacket_27: \ 00000414 B4049FE5 LDR R0,??ProcessPacket_18+0x10 ;; sndMsg \ ??ProcessPacket_28: \ 00000418 ........ BL Play 2753 #endif 2754 #ifdef ELKA 2755 SLI_Timer(); 2756 #endif 2757 if(VIBR_TYPE) \ 0000041C ........ LDR R0,??DataTable90 ;; VIBR_TYPE \ 00000420 000090E5 LDR R0,[R0, #+0] \ 00000424 000050E3 CMP R0,#+0 2758 vibra_count=2; \ 00000428 40718615 STRNE R7,[R6, #+320] 2759 else 2760 vibra_count=1; \ 0000042C 40B18605 STREQ R11,[R6, #+320] 2761 start_vibra(); \ 00000430 ........ BL start_vibra 2762 #ifdef EVILFOX 2763 if(Is_ILU_On) \ 00000434 9C0096E5 LDR R0,[R6, #+156] \ 00000438 000050E3 CMP R0,#+0 \ 0000043C 0800000A BEQ ??ProcessPacket_29 2764 #endif 2765 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000440 8C049FE5 LDR R0,??ProcessPacket_18+0x14 ;; ILL_RECV_FADE \ 00000444 003090E5 LDR R3,[R0, #+0] \ 00000448 88049FE5 LDR R0,??ProcessPacket_18+0x18 ;; ILL_RECV_TMR \ 0000044C 002090E5 LDR R2,[R0, #+0] \ 00000450 84049FE5 LDR R0,??ProcessPacket_18+0x1C ;; ILL_KEYS_RECV \ 00000454 001090E5 LDR R1,[R0, #+0] \ 00000458 80049FE5 LDR R0,??ProcessPacket_18+0x20 ;; ILL_DISP_RECV \ 0000045C 000090E5 LDR R0,[R0, #+0] \ 00000460 ........ BL IlluminationOn 2766 if (t->name[0]=='#') \ ??ProcessPacket_29: \ 00000464 1400D5E5 LDRB R0,[R5, #+20] \ 00000468 230050E3 CMP R0,#+35 \ 0000046C 1500001A BNE ??ProcessPacket_30 2767 { 2768 //Если это конференция, патчим имя 2769 char *s=strchr(p->data,'>'); \ 00000470 3E10A0E3 MOV R1,#+62 \ 00000474 080084E2 ADD R0,R4,#+8 \ 00000478 180000EF SWI +24 2770 //Если нашли символ > и после него пробел и ник короче 16 символов 2771 if (s) \ 0000047C 000050E3 CMP R0,#+0 \ 00000480 1000000A BEQ ??ProcessPacket_30 2772 { 2773 if ((s[1]==' ')&&((s-p->data)<16)) \ 00000484 0110D0E5 LDRB R1,[R0, #+1] \ 00000488 200051E3 CMP R1,#+32 \ 0000048C 0D00001A BNE ??ProcessPacket_30 \ 00000490 081084E2 ADD R1,R4,#+8 \ 00000494 011040E0 SUB R1,R0,R1 \ 00000498 100051E3 CMP R1,#+16 \ 0000049C 090000AA BGE ??ProcessPacket_30 2774 { 2775 *s=0; //Режем строку \ 000004A0 0090C0E5 STRB R9,[R0, #+0] 2776 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF); //Добавляем имя из текста сообщения \ 000004A4 0910E0E1 MVN R1,R9 \ 000004A8 02002DE9 PUSH {R1} \ 000004AC 083084E2 ADD R3,R4,#+8 \ 000004B0 022080E2 ADD R2,R0,#+2 \ 000004B4 0500A0E1 MOV R0,R5 \ 000004B8 0210A0E3 MOV R1,#+2 \ 000004BC ........ BL AddStringToLog 2777 goto L1; \ 000004C0 04D08DE2 ADD SP,SP,#+4 \ 000004C4 370000EA B ??ProcessPacket_31 2778 } 2779 } 2780 } 2781 #ifdef EVILFOX 2782 CheckComand(p->data, t, t->name); \ ??ProcessPacket_30: \ 000004C8 142085E2 ADD R2,R5,#+20 \ 000004CC 0510A0E1 MOV R1,R5 \ 000004D0 080084E2 ADD R0,R4,#+8 \ 000004D4 ........ BL CheckComand 2783 if(comanda) \ 000004D8 E40096E5 LDR R0,[R6, #+228] \ 000004DC 000050E3 CMP R0,#+0 \ 000004E0 3000000A BEQ ??ProcessPacket_31 2784 { 2785 #endif 2786 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF); \ 000004E4 0900E0E1 MVN R0,R9 \ 000004E8 01002DE9 PUSH {R0} \ 000004EC 143085E2 ADD R3,R5,#+20 \ 000004F0 082084E2 ADD R2,R4,#+8 \ 000004F4 0210A0E3 MOV R1,#+2 \ 000004F8 0500A0E1 MOV R0,R5 \ 000004FC ........ BL AddStringToLog 2787 in_count++; \ 00000500 DC0096E5 LDR R0,[R6, #+220] \ 00000504 010080E2 ADD R0,R0,#+1 \ 00000508 DC0086E5 STR R0,[R6, #+220] 2788 #ifdef EVILFOX 2789 if(Is_INC_On) \ 0000050C C80096E5 LDR R0,[R6, #+200] \ 00000510 04D08DE2 ADD SP,SP,#+4 \ 00000514 000050E3 CMP R0,#+0 \ 00000518 1B00000A BEQ ??ProcessPacket_32 2790 { 2791 strcpy(show_nick, t->name); \ 0000051C 141085E2 ADD R1,R5,#+20 \ 00000520 E00F86E2 ADD R0,R6,#+896 \ 00000524 1A0000EF SWI +26 2792 #ifdef NEWSGOLD 2793 if(!IsIdleUiOnTop()) 2794 #else 2795 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 2796 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ 00000528 068100EF SWI +33030 \ 0000052C 040090E5 LDR R0,[R0, #+4] \ 00000530 080100EF SWI +264 2797 if (!IsGuiOnTop(idlegui_id)) \ 00000534 280090E5 LDR R0,[R0, #+40] \ 00000538 350100EF SWI +309 \ 0000053C 000050E3 CMP R0,#+0 \ 00000540 1100001A BNE ??ProcessPacket_32 2798 #endif 2799 { 2800 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; \ 00000544 068100EF SWI +33030 \ 00000548 080090E5 LDR R0,[R0, #+8] 2801 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 0000054C 90239FE5 LDR R2,??ProcessPacket_18+0x24 ;; `?_1` \ 00000550 0C0090E5 LDR R0,[R0, #+12] \ 00000554 880092E8 LDM R2,{R3,R7} \ 00000558 080090E5 LDR R0,[R0, #+8] \ 0000055C 0D10A0E1 MOV R1,SP \ 00000560 040090E5 LDR R0,[R0, #+4] \ 00000564 880081E8 STM R1,{R3,R7} \ 00000568 010040E2 SUB R0,R0,#+1 2802 if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) \ 0000056C 0820A0E3 MOV R2,#+8 \ 00000570 1C0100EF SWI +284 \ 00000574 000050E3 CMP R0,#+0 \ 00000578 0300000A BEQ ??ProcessPacket_32 2803 { 2804 INC_show=15; \ 0000057C 0F00A0E3 MOV R0,#+15 \ 00000580 C40086E5 STR R0,[R6, #+196] 2805 pp_color=0; \ 00000584 D09086E5 STR R9,[R6, #+208] 2806 show_pp_sender(); \ 00000588 ........ BL show_pp_sender 2807 } 2808 } 2809 } 2810 if(Is_DRAWMAIN_On) \ ??ProcessPacket_32: \ 0000058C ........ LDR R0,??DataTable91 ;; Is_DRAWMAIN_On \ 00000590 000090E5 LDR R0,[R0, #+0] \ 00000594 000050E3 CMP R0,#+0 \ 00000598 0200000A BEQ ??ProcessPacket_31 2811 AddToMain(t->name,p->data); \ 0000059C 081084E2 ADD R1,R4,#+8 \ 000005A0 140085E2 ADD R0,R5,#+20 \ 000005A4 ........ BL AddToMain 2812 } 2813 #endif 2814 L1: 2815 //Разворачиваем группу, в которой пришло сообщение 2816 { 2817 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_31: \ 000005A8 100095E5 LDR R0,[R5, #+16] \ 000005AC ........ _BLF FindGroupByID,??FindGroupByID??rA 2818 if (g) \ 000005B0 000050E3 CMP R0,#+0 2819 { 2820 if (g->state) \ 000005B4 B415D011 LDRHNE R1,[R0, #+84] \ 000005B8 00005113 CMPNE R1,#+0 2821 { 2822 g->state=0; \ 000005BC B495C011 STRHNE R9,[R0, #+84] 2823 } 2824 } 2825 } 2826 ReqAddMsgToChat(t); \ 000005C0 0500A0E1 MOV R0,R5 \ 000005C4 ........ BL ReqAddMsgToChat 2827 RecountMenu(t, 1); \ 000005C8 0110A0E3 MOV R1,#+1 \ 000005CC 0500A0E1 MOV R0,R5 \ 000005D0 ........ BL RecountMenu 2828 extern const int DEVELOP_IF; 2829 switch (DEVELOP_IF) \ 000005D4 0C039FE5 LDR R0,??ProcessPacket_18+0x28 ;; DEVELOP_IF \ 000005D8 000090E5 LDR R0,[R0, #+0] \ 000005DC 000050E3 CMP R0,#+0 \ 000005E0 0200000A BEQ ??ProcessPacket_33 \ 000005E4 010050E2 SUBS R0,R0,#+1 \ 000005E8 0900000A BEQ ??ProcessPacket_34 \ 000005EC AF0000EA B ??ProcessPacket_1 2830 { 2831 case 0: 2832 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_33: \ 000005F0 068100EF SWI +33030 \ 000005F4 080090E5 LDR R0,[R0, #+8] \ 000005F8 081196E5 LDR R1,[R6, #+264] \ 000005FC 0C0090E5 LDR R0,[R0, #+12] \ 00000600 0C0090E5 LDR R0,[R0, #+12] \ 00000604 010050E1 CMP R0,R1 \ ??ProcessPacket_35: \ 00000608 A800000A BEQ ??ProcessPacket_1 \ 0000060C ........ BL to_develop \ 00000610 A60000EA B ??ProcessPacket_1 2833 break; 2834 case 1: 2835 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_34: \ 00000614 068100EF SWI +33030 \ 00000618 080090E5 LDR R0,[R0, #+8] \ 0000061C 081196E5 LDR R1,[R6, #+264] \ 00000620 0C0090E5 LDR R0,[R0, #+12] \ 00000624 0C0090E5 LDR R0,[R0, #+12] \ 00000628 010050E1 CMP R0,R1 \ 0000062C 9F00000A BEQ ??ProcessPacket_1 \ 00000630 430000EF SWI +67 \ 00000634 000050E3 CMP R0,#+0 \ 00000638 F2FFFFEA B ??ProcessPacket_35 2836 break; 2837 case 2: 2838 break; 2839 } 2840 break; 2841 case T_SRV_ACK: 2842 case T_CLIENT_ACK: 2843 q=FindContactLOGQByAck(p); \ ??ProcessPacket_36: \ 0000063C 0400A0E1 MOV R0,R4 \ 00000640 ........ BL FindContactLOGQByAck \ 00000644 0050B0E1 MOVS R5,R0 2844 if (q&&(p->pkt.type==T_SRV_ACK)&&Is_ILU_On) IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 00000648 9800000A BEQ ??ProcessPacket_1 \ 0000064C B400D4E1 LDRH R0,[R4, #+4] \ 00000650 100050E3 CMP R0,#+16 \ 00000654 0B00001A BNE ??ProcessPacket_37 \ 00000658 9C0096E5 LDR R0,[R6, #+156] \ 0000065C 000050E3 CMP R0,#+0 \ 00000660 0B00000A BEQ ??ProcessPacket_38 \ 00000664 68029FE5 LDR R0,??ProcessPacket_18+0x14 ;; ILL_RECV_FADE \ 00000668 003090E5 LDR R3,[R0, #+0] \ 0000066C 78029FE5 LDR R0,??ProcessPacket_18+0x2C ;; ILL_SEND_TMR \ 00000670 002090E5 LDR R2,[R0, #+0] \ 00000674 74029FE5 LDR R0,??ProcessPacket_18+0x30 ;; ILL_KEYS_SEND \ 00000678 001090E5 LDR R1,[R0, #+0] \ 0000067C 70029FE5 LDR R0,??ProcessPacket_18+0x34 ;; ILL_DISP_SEND \ 00000680 000090E5 LDR R0,[R0, #+0] \ 00000684 ........ BL IlluminationOn 2845 /* if (( 2846 IsGuiOnTop(contactlist_menu_id)|| 2847 IsGuiOnTop(edchat_id) 2848 )&&(q)) 2849 { 2850 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 2851 GetPaletteAdrByColorIndex(0), 2852 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 2853 }*/ 2854 if (q) 2855 { 2856 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ ??ProcessPacket_37: \ 00000688 B400D4E1 LDRH R0,[R4, #+4] \ 0000068C 100050E3 CMP R0,#+16 \ 00000690 0100001A BNE ??ProcessPacket_39 \ ??ProcessPacket_38: \ 00000694 0100A0E3 MOV R0,#+1 \ 00000698 000000EA B ??ProcessPacket_40 \ ??ProcessPacket_39: \ 0000069C 0200A0E3 MOV R0,#+2 \ ??ProcessPacket_40: \ 000006A0 040085E5 STR R0,[R5, #+4] 2857 t=FindContactByUin(p->pkt.uin); \ 000006A4 000094E5 LDR R0,[R4, #+0] \ 000006A8 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000006AC 0050A0E1 MOV R5,R0 2858 if (edchat_id) \ 000006B0 7C0196E5 LDR R0,[R6, #+380] \ 000006B4 000050E3 CMP R0,#+0 \ 000006B8 7C00000A BEQ ??ProcessPacket_1 2859 { 2860 void *data=FindGUIbyId(edchat_id,NULL); \ 000006BC 7C0196E5 LDR R0,[R6, #+380] \ 000006C0 0010A0E3 MOV R1,#+0 \ 000006C4 090200EF SWI +521 \ 000006C8 0070B0E1 MOVS R7,R0 2861 if (data) \ 000006CC 7700000A BEQ ??ProcessPacket_1 2862 { 2863 EDCHAT_STRUCT *ed_struct; 2864 ed_struct=EDIT_GetUserPointer(data); \ 000006D0 DF0100EF SWI +479 2865 if (ed_struct) \ 000006D4 000050E3 CMP R0,#+0 \ 000006D8 7400000A BEQ ??ProcessPacket_1 2866 { 2867 if (ed_struct->ed_contact==t) \ 000006DC 000090E5 LDR R0,[R0, #+0] \ 000006E0 050050E1 CMP R0,R5 \ 000006E4 7100001A BNE ??ProcessPacket_1 2868 { 2869 if (EDIT_IsBusy(data)) \ 000006E8 0700A0E1 MOV R0,R7 \ 000006EC 1C0200EF SWI +540 \ 000006F0 000050E3 CMP R0,#+0 \ 000006F4 0300000A BEQ ??ProcessPacket_41 2870 { 2871 t->req_drawack=1; \ 000006F8 6CB085E5 STR R11,[R5, #+108] 2872 time_to_stop_t9=3; \ 000006FC 0300A0E3 MOV R0,#+3 \ 00000700 940186E5 STR R0,[R6, #+404] \ 00000704 690000EA B ??ProcessPacket_1 2873 } 2874 else 2875 DrawAck(data); \ ??ProcessPacket_41: \ 00000708 0700A0E1 MOV R0,R7 \ 0000070C ........ BL DrawAck \ 00000710 660000EA B ??ProcessPacket_1 2876 } 2877 } 2878 } 2879 } 2880 } 2881 break; 2882 case T_XTEXT_ACK: 2883 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_42: \ 00000714 000094E5 LDR R0,[R4, #+0] \ 00000718 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 0000071C 0050B0E1 MOVS R5,R0 2884 if (t) \ 00000720 6200000A BEQ ??ProcessPacket_1 2885 { 2886 int i; 2887 int j; 2888 FreeXText(t); \ 00000724 ........ _BLF FreeXText,??FreeXText??rA 2889 i=p->pkt.data_len; \ 00000728 B660D4E1 LDRH R6,[R4, #+6] 2890 memcpy(t->xtext=malloc(i),p->data,i); \ 0000072C 0600A0E1 MOV R0,R6 \ 00000730 140000EF SWI +20 \ 00000734 840085E5 STR R0,[R5, #+132] \ 00000738 0620A0E1 MOV R2,R6 \ 0000073C 081084E2 ADD R1,R4,#+8 \ 00000740 1E0100EF SWI +286 2891 zeromem(s,256); \ 00000744 401FA0E3 MOV R1,#+256 \ 00000748 0C008DE2 ADD R0,SP,#+12 \ 0000074C 1D0100EF SWI +285 2892 strcpy(s,t->name); \ 00000750 141085E2 ADD R1,R5,#+20 \ 00000754 0C008DE2 ADD R0,SP,#+12 \ 00000758 1A0000EF SWI +26 2893 strcat(s,":\n"); \ 0000075C 571F8FE2 ADR R1,??ProcessPacket_18 ;; ":\n" \ 00000760 0C008DE2 ADD R0,SP,#+12 \ 00000764 170000EF SWI +23 2894 i=strlen(s); \ 00000768 0C008DE2 ADD R0,SP,#+12 \ 0000076C 1B0000EF SWI +27 2895 j=p->data[0]; \ 00000770 0860D4E5 LDRB R6,[R4, #+8] \ 00000774 0070A0E1 MOV R7,R0 2896 if (j>(255-i)) j=255-i; \ 00000778 FF0067E2 RSB R0,R7,#+255 \ 0000077C 060050E1 CMP R0,R6 \ 00000780 0060A0B1 MOVLT R6,R0 2897 strncpy(s+i,p->data+1,j); \ 00000784 0620A0E1 MOV R2,R6 \ 00000788 091084E2 ADD R1,R4,#+9 \ 0000078C 0C008DE2 ADD R0,SP,#+12 \ 00000790 000087E0 ADD R0,R7,R0 \ 00000794 160100EF SWI +278 2898 i+=j; \ 00000798 070086E0 ADD R0,R6,R7 2899 if (i<255) \ 0000079C FF0050E3 CMP R0,#+255 \ 000007A0 100000AA BGE ??ProcessPacket_43 2900 { 2901 s[i]='\n'; \ 000007A4 0C108DE2 ADD R1,SP,#+12 \ 000007A8 0A20A0E3 MOV R2,#+10 \ 000007AC 0120C0E7 STRB R2,[R0, +R1] 2902 i++; \ 000007B0 0810D4E5 LDRB R1,[R4, #+8] \ 000007B4 B620D4E1 LDRH R2,[R4, #+6] \ 000007B8 010080E2 ADD R0,R0,#+1 2903 j=p->pkt.data_len-p->data[0]-1; 2904 if (j>(255-i)) j=255-i; 2905 strncpy(s+i,p->data+p->data[0]+1,j); \ 000007BC 0C308DE2 ADD R3,SP,#+12 \ 000007C0 012042E0 SUB R2,R2,R1 \ 000007C4 016042E2 SUB R6,R2,#+1 \ 000007C8 FF2060E2 RSB R2,R0,#+255 \ 000007CC 060052E1 CMP R2,R6 \ 000007D0 0260A0B1 MOVLT R6,R2 \ 000007D4 0620A0E1 MOV R2,R6 \ 000007D8 041081E0 ADD R1,R1,R4 \ 000007DC 091081E2 ADD R1,R1,#+9 \ 000007E0 030080E0 ADD R0,R0,R3 \ 000007E4 160100EF SWI +278 2906 } 2907 #ifdef EVILFOX 2908 #else 2909 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 2910 if (!edchat_id && // Только если редактор не наверху 2911 strlen(p->data)) // и x-status не пустой 2912 ShowMSG(0,(int)s); 2913 #endif 2914 zeromem(s,256); \ ??ProcessPacket_43: \ 000007E8 401FA0E3 MOV R1,#+256 \ 000007EC 0C008DE2 ADD R0,SP,#+12 \ 000007F0 1D0100EF SWI +285 2915 i=0; 2916 j=p->data[0]; \ 000007F4 0860D4E5 LDRB R6,[R4, #+8] 2917 if (j>(255-i)) j=255-i; 2918 strncpy(s,p->data+1,j); \ 000007F8 091084E2 ADD R1,R4,#+9 \ 000007FC 0C008DE2 ADD R0,SP,#+12 \ 00000800 400F56E3 CMP R6,#+256 \ 00000804 FF60A0A3 MOVGE R6,#+255 \ 00000808 0620A0E1 MOV R2,R6 \ 0000080C 160100EF SWI +278 2919 i+=j; 2920 if (i<255) \ 00000810 FF0056E3 CMP R6,#+255 \ 00000814 100000AA BGE ??ProcessPacket_44 2921 { 2922 s[i++]=13; \ 00000818 0C108DE2 ADD R1,SP,#+12 \ 0000081C 0D20A0E3 MOV R2,#+13 \ 00000820 0120C6E7 STRB R2,[R6, +R1] \ 00000824 0810D4E5 LDRB R1,[R4, #+8] \ 00000828 B620D4E1 LDRH R2,[R4, #+6] \ 0000082C 010086E2 ADD R0,R6,#+1 2923 j=p->pkt.data_len-p->data[0]-1; 2924 if (j>(255-i)) j=255-i; 2925 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000830 0C308DE2 ADD R3,SP,#+12 \ 00000834 012042E0 SUB R2,R2,R1 \ 00000838 016042E2 SUB R6,R2,#+1 \ 0000083C FF2060E2 RSB R2,R0,#+255 \ 00000840 060052E1 CMP R2,R6 \ 00000844 0260A0B1 MOVLT R6,R2 \ 00000848 0620A0E1 MOV R2,R6 \ 0000084C 041081E0 ADD R1,R1,R4 \ 00000850 091081E2 ADD R1,R1,#+9 \ 00000854 030080E0 ADD R0,R0,R3 \ 00000858 160100EF SWI +278 2926 } 2927 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF); \ ??ProcessPacket_44: \ 0000085C 0900E0E1 MVN R0,R9 \ 00000860 01002DE9 PUSH {R0} \ 00000864 AC3F88E2 ADD R3,R8,#+688 \ 00000868 10208DE2 ADD R2,SP,#+16 \ 0000086C 0310A0E3 MOV R1,#+3 \ 00000870 0500A0E1 MOV R0,R5 \ 00000874 ........ BL AddStringToLog 2928 ReqAddMsgToChat(t); \ 00000878 0500A0E1 MOV R0,R5 \ 0000087C ........ BL ReqAddMsgToChat 2929 if (strlen(p->data)) // Если x-status не пустой \ 00000880 080084E2 ADD R0,R4,#+8 \ 00000884 1B0000EF SWI +27 \ 00000888 000050E3 CMP R0,#+0 \ 0000088C 04D08DE2 ADD SP,SP,#+4 2930 RecountMenu(t, 1); \ 00000890 0110A013 MOVNE R1,#+1 \ 00000894 0500A011 MOVNE R0,R5 \ 00000898 0AFEFF1A BNE ??ProcessPacket_7 2931 else 2932 RecountMenu(NULL, 0); \ 0000089C 0010A0E3 MOV R1,#+0 \ 000008A0 0100A0E1 MOV R0,R1 \ 000008A4 07FEFFEA B ??ProcessPacket_7 2933 } 2934 break; 2935 case T_LASTPRIVACY: 2936 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_45: \ 000008A8 0800D4E5 LDRB R0,[R4, #+8] \ 000008AC 3C0186E5 STR R0,[R6, #+316] 2937 break; 2938 } 2939 mfree(p); \ ??ProcessPacket_1: \ 000008B0 0400A0E1 MOV R0,R4 \ 000008B4 150000EF SWI +21 2940 } \ 000008B8 43DF8DE2 ADD SP,SP,#+268 \ 000008BC F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_18: \ 000008C0 3A0A0000 DC8 ":\n",+0 \ 000008C4 ........ DC32 ENA_AUTO_XTXT \ 000008C8 ........ DC32 sndGlobal \ 000008CC ........ DC32 sndSrvMsg \ 000008D0 ........ DC32 sndMsg \ 000008D4 ........ DC32 ILL_RECV_FADE \ 000008D8 ........ DC32 ILL_RECV_TMR \ 000008DC ........ DC32 ILL_KEYS_RECV \ 000008E0 ........ DC32 ILL_DISP_RECV \ 000008E4 ........ DC32 `?_1` \ 000008E8 ........ DC32 DEVELOP_IF \ 000008EC ........ DC32 ILL_SEND_TMR \ 000008F0 ........ DC32 ILL_KEYS_SEND \ 000008F4 ........ DC32 ILL_DISP_SEND 2941 2942 2943 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 2944 void process_active_timer(void) 2945 { 2946 #ifdef EVILFOX 2947 msg_away_timer++; 2948 if((msg_away_timer==AUTO_ENGADE)&&(Auto_Status==1)) \ process_active_timer: \ 00000000 14119FE5 LDR R1,??process_active_timer_0 ;; AUTO_ENGADE \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R4,??DataTable92 ;; S_ICONS \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 E80094E5 LDR R0,[R4, #+232] \ 00000014 010080E2 ADD R0,R0,#+1 \ 00000018 E80084E5 STR R0,[R4, #+232] \ 0000001C 010050E1 CMP R0,R1 \ 00000020 0400001A BNE ??process_active_timer_1 \ 00000024 F4009FE5 LDR R0,??process_active_timer_0+0x4 ;; Auto_Status \ 00000028 000090E5 LDR R0,[R0, #+0] \ 0000002C 010050E3 CMP R0,#+1 \ 00000030 0000001A BNE ??process_active_timer_1 2949 away_engage(); \ 00000034 ........ BL away_engage 2950 #endif 2951 if (connect_state>2) \ ??process_active_timer_1: \ 00000038 500194E5 LDR R0,[R4, #+336] \ 0000003C 0050A0E3 MOV R5,#+0 \ 00000040 030050E3 CMP R0,#+3 \ 00000044 070000BA BLT ??process_active_timer_2 2952 { 2953 if (++tenseconds_to_ping>12) \ 00000048 840194E5 LDR R0,[R4, #+388] \ 0000004C 010080E2 ADD R0,R0,#+1 \ 00000050 840184E5 STR R0,[R4, #+388] \ 00000054 0D0050E3 CMP R0,#+13 \ 00000058 020000BA BLT ??process_active_timer_2 2954 { 2955 tenseconds_to_ping=0; 2956 SUBPROC((void *)do_ping); \ 0000005C C0009FE5 LDR R0,??process_active_timer_0+0x8 ;; do_ping \ 00000060 845184E5 STR R5,[R4, #+388] \ 00000064 710100EF SWI +369 2957 } 2958 } 2959 #ifdef EVILFOX 2960 if((ping_sec>=6)&&(Show_Ping)) \ ??process_active_timer_2: \ 00000068 C00094E5 LDR R0,[R4, #+192] \ 0000006C 060050E3 CMP R0,#+6 \ 00000070 140000BA BLT ??process_active_timer_3 \ 00000074 ........ LDR R1,??DataTable93 ;; Show_Ping \ 00000078 001091E5 LDR R1,[R1, #+0] \ 0000007C 000051E3 CMP R1,#+0 \ 00000080 1000000A BEQ ??process_active_timer_3 2961 { 2962 ping_sec=0; \ 00000084 C05084E5 STR R5,[R4, #+192] 2963 PingToServer2(); \ 00000088 1000A0E3 MOV R0,#+16 \ 0000008C 140000EF SWI +20 \ 00000090 0060A0E1 MOV R6,R0 \ 00000094 081086E2 ADD R1,R6,#+8 \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C B40000EF SWI +180 \ 000000A0 005086E5 STR R5,[R6, #+0] \ 000000A4 1200A0E3 MOV R0,#+18 \ 000000A8 B400C6E1 STRH R0,[R6, #+4] \ 000000AC 0800A0E3 MOV R0,#+8 \ 000000B0 B600C6E1 STRH R0,[R6, #+6] \ 000000B4 ........ LDR R0,??DataTable94 ;; SendAnswer \ 000000B8 0620A0E1 MOV R2,R6 \ 000000BC 0510A0E1 MOV R1,R5 \ 000000C0 710100EF SWI +369 \ 000000C4 010000EA B ??process_active_timer_4 2964 } 2965 else 2966 ping_sec++; \ ??process_active_timer_3: \ 000000C8 010080E2 ADD R0,R0,#+1 \ 000000CC C00084E5 STR R0,[R4, #+192] 2967 #endif 2968 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_4: \ 000000D0 ........ LDR R1,??DataTable95 ;; `?` \ 000000D4 A20FA0E3 MOV R0,#+648 \ 000000D8 012080E0 ADD R2,R0,R1 \ 000000DC 802084E5 STR R2,[R4, #+128] 2969 tmr_gipc.name_from=ipc_my_name; \ 000000E0 010080E0 ADD R0,R0,R1 \ 000000E4 840084E5 STR R0,[R4, #+132] 2970 tmr_gipc.data=NULL; \ 000000E8 885084E5 STR R5,[R4, #+136] 2971 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_TENSECONDS,&tmr_gipc); \ 000000EC 803084E2 ADD R3,R4,#+128 \ 000000F0 0420A0E3 MOV R2,#+4 \ 000000F4 F210A0E3 MOV R1,#+242 \ 000000F8 C01F81E3 ORR R1,R1,#0x300 \ 000000FC 0900A0E3 MOV R0,#+9 \ 00000100 420C80E3 ORR R0,R0,#0x4200 \ 00000104 000100EF SWI +256 2972 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000108 ........ LDR R2,??DataTable105 ;; process_active_timer \ 0000010C 871EA0E3 MOV R1,#+2160 \ 00000110 900E84E2 ADD R0,R4,#+2304 \ 00000114 4D0000EF SWI +77 2973 } \ 00000118 7080BDE8 POP {R4-R6,PC} ;; return \ ??process_active_timer_0: \ 0000011C ........ DC32 AUTO_ENGADE \ 00000120 ........ DC32 Auto_Status \ 00000124 ........ DC32 do_ping 2974 2975 //=============================================================================================== \ In segment CODE, align 4, keep-with-next 2976 void method0(MAIN_GUI *data) 2977 { \ method0: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2978 int scr_w=ScreenW(); 2979 int scr_h=ScreenH(); 2980 /* DrawRoundedFrame(0,YDISP,scr_w-1,scr_h-1,0,0,0, 2981 GetPaletteAdrByColorIndex(0), 2982 GetPaletteAdrByColorIndex(20));*/ 2983 2984 DrawRectangle(0,YDISP,scr_w-1,scr_h-1,0, 2985 GetPaletteAdrByColorIndex(1), 2986 GetPaletteAdrByColorIndex(1)); 2987 #ifdef EVILFOX_2 2988 #else 2989 DrawImg(0,0,S_ICONS[ICON_LOGO]); 2990 #endif 2991 unsigned long RX=ALLTOTALRECEIVED; unsigned long TX=ALLTOTALSENDED; //by BoBa 10.07 2992 wsprintf(data->ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000004 ........ LDR R8,??DataTable115 ;; `?` \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 888100EF SWI +33160 \ 00000010 0050A0E1 MOV R5,R0 \ 00000014 898100EF SWI +33161 \ 00000018 0060A0E1 MOV R6,R0 \ 0000001C 0100A0E3 MOV R0,#+1 \ 00000020 2E0100EF SWI +302 \ 00000024 0070A0E1 MOV R7,R0 \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 2E0100EF SWI +302 \ 00000030 80002DE9 PUSH {R7} \ 00000034 ........ LDR R7,??DataTable98 ;; S_ICONS \ 00000038 01002DE9 PUSH {R0} \ 0000003C 013046E2 SUB R3,R6,#+1 \ 00000040 012045E2 SUB R2,R5,#+1 \ 00000044 0010A0E3 MOV R1,#+0 \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 B40100EF SWI +436 \ 00000054 502097E5 LDR R2,[R7, #+80] \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 0100A0E1 MOV R0,R1 \ 00000060 230000EF SWI +35 \ 00000064 600197E5 LDR R0,[R7, #+352] \ 00000068 641197E5 LDR R1,[R7, #+356] \ 0000006C 7D2E87E2 ADD R2,R7,#+2000 \ 00000070 04002DE9 PUSH {R2} \ 00000074 752E87E2 ADD R2,R7,#+1872 \ 00000078 04002DE9 PUSH {R2} \ 0000007C 682197E5 LDR R2,[R7, #+360] \ 00000080 04002DE9 PUSH {R2} \ 00000084 02002DE9 PUSH {R1} \ 00000088 01002DE9 PUSH {R0} \ 0000008C 4C3197E5 LDR R3,[R7, #+332] \ 00000090 502197E5 LDR R2,[R7, #+336] \ 00000094 300094E5 LDR R0,[R4, #+48] \ 00000098 AC1088E2 ADD R1,R8,#+172 \ 0000009C 240100EF SWI +292 2993 if (total_smiles) \ 000000A0 EC019FE5 LDR R0,??method0_0 ;; total_smiles \ 000000A4 001090E5 LDR R1,[R0, #+0] \ 000000A8 20D08DE2 ADD SP,SP,#+32 \ 000000AC 000051E3 CMP R1,#+0 \ 000000B0 0300000A BEQ ??method0_1 2994 { 2995 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000000B4 002090E5 LDR R2,[R0, #+0] \ 000000B8 300094E5 LDR R0,[R4, #+48] \ 000000BC E81088E2 ADD R1,R8,#+232 \ 000000C0 160200EF SWI +534 2996 } 2997 if (xstatuses_load) \ ??method0_1: \ 000000C4 CC019FE5 LDR R0,??method0_0+0x4 ;; xstatuses_load \ 000000C8 000090E5 LDR R0,[R0, #+0] \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 0400000A BEQ ??method0_2 2998 { 2999 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000000D4 ........ LDR R0,??DataTable99 ;; total_xstatuses \ 000000D8 FC1088E2 ADD R1,R8,#+252 \ 000000DC 002090E5 LDR R2,[R0, #+0] \ 000000E0 300094E5 LDR R0,[R4, #+48] \ 000000E4 160200EF SWI +534 3000 } 3001 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3002 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_2: \ 000000E8 1700A0E3 MOV R0,#+23 \ 000000EC 2E0100EF SWI +302 \ 000000F0 00A0A0E1 MOV R10,R0 \ 000000F4 0000A0E3 MOV R0,#+0 \ 000000F8 2E0100EF SWI +302 \ 000000FC 00B0A0E1 MOV R11,R0 \ 00000100 0300A0E3 MOV R0,#+3 \ 00000104 C50100EF SWI +453 \ 00000108 00042DE9 PUSH {R10} \ 0000010C 00082DE9 PUSH {R11} \ 00000110 0010A0E3 MOV R1,#+0 \ 00000114 02002DE9 PUSH {R1} \ 00000118 049046E2 SUB R9,R6,#+4 \ 0000011C 000049E0 SUB R0,R9,R0 \ 00000120 043045E2 SUB R3,R5,#+4 \ 00000124 0710A0E3 MOV R1,#+7 \ 00000128 02002DE9 PUSH {R1} \ 0000012C 01002DE9 PUSH {R0} \ 00000130 300094E5 LDR R0,[R4, #+48] \ 00000134 0320A0E3 MOV R2,#+3 \ 00000138 0310A0E3 MOV R1,#+3 \ 0000013C 4C0100EF SWI +332 3003 #ifdef EVILFOX 3004 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000140 340094E5 LDR R0,[R4, #+52] \ 00000144 442F88E2 ADD R2,R8,#+272 \ 00000148 101088E2 ADD R1,R8,#+16 \ 0000014C 240100EF SWI +292 3005 #else 3006 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 3007 #endif 3008 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3009 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000150 1700A0E3 MOV R0,#+23 \ 00000154 2E0100EF SWI +302 \ 00000158 00A0A0E1 MOV R10,R0 \ 0000015C 0000A0E3 MOV R0,#+0 \ 00000160 2E0100EF SWI +302 \ 00000164 00B0A0E1 MOV R11,R0 \ 00000168 0300A0E3 MOV R0,#+3 \ 0000016C C50100EF SWI +453 \ 00000170 00042DE9 PUSH {R10} \ 00000174 00082DE9 PUSH {R11} \ 00000178 0410A0E3 MOV R1,#+4 \ 0000017C 02002DE9 PUSH {R1} \ 00000180 043045E2 SUB R3,R5,#+4 \ 00000184 002049E0 SUB R2,R9,R0 \ 00000188 0310A0E3 MOV R1,#+3 \ 0000018C 02002DE9 PUSH {R1} \ 00000190 0910A0E1 MOV R1,R9 \ 00000194 02002DE9 PUSH {R1} \ 00000198 340094E5 LDR R0,[R4, #+52] \ 0000019C C510A0E1 ASR R1,R5,#+1 \ 000001A0 4C0100EF SWI +332 \ 000001A4 28D08DE2 ADD SP,SP,#+40 3010 #ifdef EVILFOX 3011 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 000001A8 900097E5 LDR R0,[R7, #+144] \ 000001AC 101088E2 ADD R1,R8,#+16 \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 340094E5 LDR R0,[R4, #+52] \ 000001B8 462F8812 ADDNE R2,R8,#+280 \ 000001BC 16208802 ADDEQ R2,R8,#+22 \ 000001C0 240100EF SWI +292 3012 #else 3013 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 3014 #endif 3015 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 3016 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 000001C4 1700A0E3 MOV R0,#+23 \ 000001C8 2E0100EF SWI +302 \ 000001CC 0070A0E1 MOV R7,R0 \ 000001D0 0000A0E3 MOV R0,#+0 \ 000001D4 2E0100EF SWI +302 \ 000001D8 00A0A0E1 MOV R10,R0 \ 000001DC 0300A0E3 MOV R0,#+3 \ 000001E0 C50100EF SWI +453 \ 000001E4 80002DE9 PUSH {R7} \ 000001E8 00042DE9 PUSH {R10} \ 000001EC 0110A0E3 MOV R1,#+1 \ 000001F0 02002DE9 PUSH {R1} \ 000001F4 C530A0E1 ASR R3,R5,#+1 \ 000001F8 002049E0 SUB R2,R9,R0 \ 000001FC 0310A0E3 MOV R1,#+3 \ 00000200 02002DE9 PUSH {R1} \ 00000204 0910A0E1 MOV R1,R9 \ 00000208 02002DE9 PUSH {R1} \ 0000020C 340094E5 LDR R0,[R4, #+52] \ 00000210 0310A0E3 MOV R1,#+3 \ 00000214 4C0100EF SWI +332 3017 #ifdef EVILFOX_2 3018 DrawImg(15,220,(int)"4:\\zbin\\naticq\\img\\smiles_logo.png"); 3019 #endif 3020 #ifdef EVILFOX 3021 wsprintf(data->ws2,percent_t,"Mod by Evilfox 2nd"); \ 00000218 340094E5 LDR R0,[R4, #+52] \ 0000021C 482F88E2 ADD R2,R8,#+288 \ 00000220 101088E2 ADD R1,R8,#+16 \ 00000224 240100EF SWI +292 3022 DrawString(data->ws2,3,scr_h-8-GetFontYSIZE(FONT_MEDIUM_BOLD)-GetFontYSIZE(FONT_MEDIUM_BOLD), 3023 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000228 1700A0E3 MOV R0,#+23 \ 0000022C 2E0100EF SWI +302 \ 00000230 0080A0E1 MOV R8,R0 \ 00000234 0000A0E3 MOV R0,#+0 \ 00000238 2E0100EF SWI +302 \ 0000023C 00A0A0E1 MOV R10,R0 \ 00000240 0300A0E3 MOV R0,#+3 \ 00000244 C50100EF SWI +453 \ 00000248 0070A0E1 MOV R7,R0 \ 0000024C 0300A0E3 MOV R0,#+3 \ 00000250 C50100EF SWI +453 \ 00000254 00012DE9 PUSH {R8} \ 00000258 00042DE9 PUSH {R10} \ 0000025C 0110A0E3 MOV R1,#+1 \ 00000260 02002DE9 PUSH {R1} \ 00000264 043045E2 SUB R3,R5,#+4 \ 00000268 0310A0E3 MOV R1,#+3 \ 0000026C 02002DE9 PUSH {R1} \ 00000270 00022DE9 PUSH {R9} \ 00000274 081046E2 SUB R1,R6,#+8 \ 00000278 071041E0 SUB R1,R1,R7 \ 0000027C 002041E0 SUB R2,R1,R0 \ 00000280 340094E5 LDR R0,[R4, #+52] \ 00000284 0310A0E3 MOV R1,#+3 \ 00000288 4C0100EF SWI +332 \ 0000028C 28D08DE2 ADD SP,SP,#+40 3024 #endif 3025 } \ 00000290 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_0: \ 00000294 ........ DC32 total_smiles \ 00000298 ........ DC32 xstatuses_load 3026 \ In segment CODE, align 4, keep-with-next 3027 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 3028 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3029 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 300084E5 STR R0,[R4, #+48] 3030 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 340084E5 STR R0,[R4, #+52] 3031 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 3032 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 3033 \ In segment CODE, align 4, keep-with-next 3034 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 3035 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3036 FreeWS(data->ws1); \ 00000008 300094E5 LDR R0,[R4, #+48] \ 0000000C 290100EF SWI +297 3037 FreeWS(data->ws2); \ 00000010 340094E5 LDR R0,[R4, #+52] \ 00000014 290100EF SWI +297 3038 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 3039 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 3040 \ In segment CODE, align 4, keep-with-next 3041 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 3042 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 3043 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 3044 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 3045 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 3046 \ In segment CODE, align 4, keep-with-next 3047 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 3048 { 3049 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 3050 return; 3051 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 3052 } \ 00000010 1EFF2FE1 BX LR ;; return 3053 \ In segment CODE, align 4, keep-with-next 3054 int method5(MAIN_GUI *data,GUI_MSG *msg) 3055 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 3056 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 3057 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 2400001A BNE ??method5_0 3058 { 3059 switch(msg->gbsmsg->submess) \ 00000028 040090E5 LDR R0,[R0, #+4] \ 0000002C ........ LDR R4,??DataTable128 ;; create_connect \ 00000030 ........ LDR R7,??DataTable136 ;; S_ICONS \ 00000034 0350A0E3 MOV R5,#+3 \ 00000038 8F6EA0E3 MOV R6,#+2288 \ 0000003C 010050E2 SUBS R0,R0,#+1 \ 00000040 0600000A BEQ ??method5_1 \ 00000044 030050E2 SUBS R0,R0,#+3 \ 00000048 0A00000A BEQ ??method5_2 \ 0000004C 070050E2 SUBS R0,R0,#+7 \ 00000050 0A00000A BEQ ??method5_3 \ 00000054 250050E2 SUBS R0,R0,#+37 \ 00000058 1000000A BEQ ??method5_4 \ 0000005C 030000EA B ??method5_5 3060 { 3061 case LEFT_SOFT: 3062 #ifdef EVILFOX 3063 if (cltop) create_contactlist_menu(); \ ??method5_1: \ 00000060 900097E5 LDR R0,[R7, #+144] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 F280BD08 POPEQ {R1,R4-R7,PC} \ 0000006C ........ BL create_contactlist_menu \ ??method5_5: \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 F280BDE8 POP {R1,R4-R7,PC} 3064 break; 3065 #else 3066 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 3067 #endif 3068 case RIGHT_SOFT: 3069 #ifdef EVILFOX 3070 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_2: \ 00000078 0100A0E3 MOV R0,#+1 \ 0000007C F280BDE8 POP {R1,R4-R7,PC} 3071 #else 3072 if (cltop) create_contactlist_menu(); 3073 break; 3074 #endif 3075 case GREEN_BUTTON: 3076 disautorecconect=0; \ ??method5_3: \ 00000080 0000A0E3 MOV R0,#+0 \ 00000084 200187E5 STR R0,[R7, #+288] 3077 if ((connect_state==0)&&(sock==-1)) \ 00000088 500197E5 LDR R0,[R7, #+336] \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 54019705 LDREQ R0,[R7, #+340] \ 00000094 01007003 CMNEQ R0,#+1 \ 00000098 0700001A BNE ??method5_0 3078 { 3079 GBS_DelTimer(&reconnect_tmr); \ 0000009C 010000EA B ??method5_6 3080 DNR_TRIES=3; 3081 SUBPROC((void *)create_connect); 3082 } 3083 break; 3084 case '0': 3085 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000A0 ........ LDR R0,??DataTable132 ;; end_socket \ 000000A4 710100EF SWI +369 3086 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000A8 070086E0 ADD R0,R6,R7 \ 000000AC 8C0100EF SWI +396 3087 DNR_TRIES=3; \ 000000B0 8C5187E5 STR R5,[R7, #+396] 3088 SUBPROC((void *)create_connect); \ 000000B4 0400A0E1 MOV R0,R4 \ 000000B8 710100EF SWI +369 3089 break; 3090 } 3091 } 3092 return(0); \ ??method5_0: \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 F280BDE8 POP {R1,R4-R7,PC} ;; return 3093 } 3094 \ In segment CODE, align 4, keep-with-next 3095 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 3096 \ In segment CODE, align 4, keep-with-next 3097 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 3098 3099 const void * const gui_methods[11]={ 3100 (void *)method0, //Redraw 3101 (void *)method1, //Create 3102 (void *)method2, //Close 3103 (void *)method3, //Focus 3104 (void *)method4, //Unfocus 3105 (void *)method5, //OnKey 3106 0, 3107 (void *)kill_data, //method7, //Destroy 3108 (void *)method8, 3109 (void *)method9, 3110 0 3111 }; 3112 3113 const RECT Canvas={0,0,0,0}; 3114 \ In segment CODE, align 4, keep-with-next 3115 void maincsm_oncreate(CSM_RAM *data) 3116 { \ maincsm_oncreate: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 3117 strcpy(LG_MENU2, "Меню"); \ 00000004 ........ LDR R5,??DataTable136 ;; S_ICONS \ 00000008 ........ LDR R6,??DataTable115 ;; `?` \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 4D1F86E2 ADD R1,R6,#+308 \ 00000014 A800A0E3 MOV R0,#+168 \ 00000018 500E80E3 ORR R0,R0,#0x500 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 1A0000EF SWI +26 3118 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000024 3C00A0E3 MOV R0,#+60 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 3119 MAIN_CSM*csm=(MAIN_CSM*)data; 3120 zeromem(main_gui,sizeof(MAIN_GUI)); \ 00000030 3C10A0E3 MOV R1,#+60 \ 00000034 1D0100EF SWI +285 3121 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 00000038 898100EF SWI +33161 \ 0000003C 0080A0E1 MOV R8,R0 \ 00000040 888100EF SWI +33160 \ 00000044 011048E2 SUB R1,R8,#+1 \ 00000048 010040E2 SUB R0,R0,#+1 \ 0000004C 0080A0E3 MOV R8,#+0 \ 00000050 088086E5 STR R8,[R6, #+8] \ 00000054 BC00C6E1 STRH R0,[R6, #+12] \ 00000058 BE10C6E1 STRH R1,[R6, #+14] 3122 main_gui->gui.canvas=(void *)(&Canvas); \ 0000005C 080086E2 ADD R0,R6,#+8 \ 00000060 000087E5 STR R0,[R7, #+0] 3123 // main_gui->gui.flag30=2; 3124 main_gui->gui.methods=(void *)gui_methods; \ 00000064 B00F86E2 ADD R0,R6,#+704 \ 00000068 040087E5 STR R0,[R7, #+4] 3125 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000006C 158000EF SWI +32789 \ 00000070 1C0087E5 STR R0,[R7, #+28] 3126 csm->csm.state=0; \ 00000074 108084E5 STR R8,[R4, #+16] 3127 csm->csm.unk1=0; \ 00000078 148084E5 STR R8,[R4, #+20] 3128 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 0000007C 0700A0E1 MOV R0,R7 \ 00000080 370100EF SWI +311 \ 00000084 280084E5 STR R0,[R4, #+40] \ 00000088 0C0185E5 STR R0,[R5, #+268] 3129 ews=AllocWS(16384); \ 0000008C 400CA0E3 MOV R0,#+16384 \ 00000090 250100EF SWI +293 3130 // MutexCreate(&contactlist_mtx); 3131 DNR_TRIES=3; 3132 // SUBPROC((void *)InitSmiles); 3133 // SUBPROC((void *)create_connect); 3134 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000094 ........ LDR R2,??DataTable105 ;; process_active_timer \ 00000098 180185E5 STR R0,[R5, #+280] \ 0000009C 0300A0E3 MOV R0,#+3 \ 000000A0 8C0185E5 STR R0,[R5, #+396] \ 000000A4 871EA0E3 MOV R1,#+2160 \ 000000A8 900E85E2 ADD R0,R5,#+2304 \ 000000AC 4D0000EF SWI +77 3135 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000B0 ........ LDR R0,??DataTable138 ;; UIN \ 000000B4 131086E2 ADD R1,R6,#+19 \ 000000B8 002090E5 LDR R2,[R0, #+0] \ 000000BC 8E00A0E3 MOV R0,#+142 \ 000000C0 800F80E3 ORR R0,R0,#0x200 \ 000000C4 060080E0 ADD R0,R0,R6 \ 000000C8 160000EF SWI +22 3136 gipc.name_to=ipc_my_name; \ 000000CC A20FA0E3 MOV R0,#+648 \ 000000D0 061080E0 ADD R1,R0,R6 \ 000000D4 741085E5 STR R1,[R5, #+116] 3137 gipc.name_from=ipc_my_name; \ 000000D8 060080E0 ADD R0,R0,R6 \ 000000DC 780085E5 STR R0,[R5, #+120] 3138 gipc.data=(void *)-1; \ 000000E0 0800E0E1 MVN R0,R8 \ 000000E4 7C0085E5 STR R0,[R5, #+124] 3139 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000E8 743085E2 ADD R3,R5,#+116 \ 000000EC 0120A0E3 MOV R2,#+1 \ 000000F0 F210A0E3 MOV R1,#+242 \ 000000F4 C01F81E3 ORR R1,R1,#0x300 \ 000000F8 0900A0E3 MOV R0,#+9 \ 000000FC 420C80E3 ORR R0,R0,#0x4200 \ 00000100 000100EF SWI +256 3140 } \ 00000104 F081BDE8 POP {R4-R8,PC} ;; return 3141 \ In segment CODE, align 4, keep-with-next 3142 void maincsm_onclose(CSM_RAM *csm) 3143 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 3144 WriteDefSettings(); 3145 // SaveConfigData(successed_config_filename); 3146 3147 /* 3148 #pragma segment="CONFIG_C" 3149 unsigned int ul; 3150 int f; 3151 extern const CFG_HDR cfghdr0; //first var in CONFIG 3152 void *cfg=(void*)&cfghdr0; 3153 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 3154 3155 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 3156 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 3157 } 3158 fwrite(f,cfg,len,&ul); 3159 fclose(f,&ul); 3160 */ 3161 3162 // GBS_DelTimer(&tmr_dorecv); 3163 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable136 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C 900E84E2 ADD R0,R4,#+2304 \ 00000010 8C0100EF SWI +396 3164 // GBS_DelTimer(&tmr_ping); 3165 #ifdef EVILFOX 3166 #ifdef ELKA 3167 GBS_DelTimer(&mytmr); 3168 #endif 3169 GBS_DelTimer(&ctmr); \ 00000014 CF0F84E2 ADD R0,R4,#+828 \ 00000018 8C0100EF SWI +396 3170 GBS_DelTimer(&incs); \ 0000001C F00F84E2 ADD R0,R4,#+960 \ 00000020 8C0100EF SWI +396 3171 RemoveKeybMsgHook((void *)my_keyhook); \ 00000024 ........ LDR R0,??DataTable145 ;; my_keyhook \ 00000028 2D0100EF SWI +301 3172 #endif 3173 GBS_DelTimer(&tmr_vibra); \ 0000002C 8E0E84E2 ADD R0,R4,#+2272 \ 00000030 8C0100EF SWI +396 3174 GBS_DelTimer(&reconnect_tmr); \ 00000034 8F0E84E2 ADD R0,R4,#+2288 \ 00000038 8C0100EF SWI +396 3175 GBS_DelTimer(&tmr_illumination); \ 0000003C 8D0E84E2 ADD R0,R4,#+2256 \ 00000040 8C0100EF SWI +396 3176 SetVibration(0); \ 00000044 0000A0E3 MOV R0,#+0 \ 00000048 7C0000EF SWI +124 3177 FreeTemplates(); \ 0000004C ........ BL FreeTemplates 3178 FreeCLIST(); \ 00000050 ........ _BLF FreeCLIST,??FreeCLIST??rA 3179 free_ICONS(); \ 00000054 ........ BL free_ICONS 3180 // FreeSmiles(); 3181 FreeWS(ews); \ 00000058 180194E5 LDR R0,[R4, #+280] \ 0000005C 290100EF SWI +297 3182 FreeXStatusText(); \ 00000060 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 3183 // MutexDestroy(&contactlist_mtx); 3184 SUBPROC((void *)FreeSmiles); \ 00000064 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 00000068 710100EF SWI +369 3185 SUBPROC((void *)FreeXStatusesImg); \ 0000006C 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 00000070 710100EF SWI +369 3186 SUBPROC((void *)end_socket); \ 00000074 ........ LDR R0,??DataTable132 ;; end_socket \ 00000078 710100EF SWI +369 3187 SUBPROC((void *)ClearSendQ); \ 0000007C ........ LDR R0,??DataTable133 ;; ClearSendQ \ 00000080 710100EF SWI +369 3188 SUBPROC((void *)ElfKiller); \ 00000084 ........ LDR R0,??DataTable140 ;; ElfKiller \ 00000088 710100EF SWI +369 3189 } \ 0000008C 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000090 ........ DC32 FreeSmiles \ 00000094 ........ DC32 FreeXStatusesImg 3190 \ In segment CODE, align 4, keep-with-next 3191 void do_reconnect(void) 3192 { 3193 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable136 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 701190E5 LDR R1,[R0, #+368] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 3194 { 3195 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 8C1180E5 STR R1,[R0, #+396] 3196 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable128 ;; create_connect \ 00000020 710100EF SWI +369 3197 } 3198 } \ 00000024 0080BDE8 POP {PC} ;; return 3199 \ In segment CODE, align 4, keep-with-next 3200 void CheckDoubleRun(void) 3201 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 3202 int csm_id; 3203 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable136 ;; S_ICONS \ 00000008 7C0094E5 LDR R0,[R4, #+124] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1000000A BEQ ??CheckDoubleRun_0 3204 { 3205 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable115 ;; `?` 3206 gipc.name_from=ipc_my_name; 3207 gipc.data=(void *)csm_id; \ 00000018 7C0084E5 STR R0,[R4, #+124] \ 0000001C AA2F81E2 ADD R2,R1,#+680 \ 00000020 742084E5 STR R2,[R4, #+116] \ 00000024 A21F81E2 ADD R1,R1,#+648 \ 00000028 781084E5 STR R1,[R4, #+120] 3208 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_SHOW_CSM,&gipc); \ 0000002C 743084E2 ADD R3,R4,#+116 \ 00000030 0220A0E3 MOV R2,#+2 \ 00000034 FC1F82E3 ORR R1,R2,#0x3F0 \ 00000038 0900A0E3 MOV R0,#+9 \ 0000003C 420C80E3 ORR R0,R0,#0x4200 \ 00000040 000100EF SWI +256 3209 LockSched(); \ 00000044 460100EF SWI +326 3210 CloseCSM(maincsm_id); \ 00000048 080194E5 LDR R0,[R4, #+264] \ 0000004C FC0100EF SWI +508 3211 //ShowMSG(1,(int)LG_ALREADY_STARTED); 3212 UnlockSched(); \ 00000050 470100EF SWI +327 \ 00000054 1080BDE8 POP {R4,PC} 3213 } 3214 else 3215 { 3216 InitXStatusesImg(); \ ??CheckDoubleRun_0: \ 00000058 ........ _BLF InitXStatusesImg,??InitXStatusesImg??rA 3217 //InitSmiles(); Это вызовется из InitXStatusesImg 3218 create_connect(); \ 0000005C ........ BL create_connect 3219 } 3220 } \ 00000060 1080BDE8 POP {R4,PC} ;; return 3221 \ In segment CODE, align 4, keep-with-next 3222 int maincsm_onmessage(CSM_RAM *data,GBS_MSG *msg) 3223 { \ maincsm_onmessage: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 0CD04DE2 SUB SP,SP,#+12 3224 extern const int VIBR_ON_CONNECT; 3225 3226 // char ss[100]; 3227 MAIN_CSM *csm=(MAIN_CSM*)data; 3228 { 3229 //IPC 3230 if (msg->msg==MSG_IPC) \ 00000008 ........ LDR R5,??DataTable116 ;; S_ICONS \ 0000000C ........ LDR R7,??DataTable137 ;; `?` \ 00000010 0140A0E1 MOV R4,R1 \ 00000014 F200D4E1 LDRSH R0,[R4, #+2] \ 00000018 0060A0E3 MOV R6,#+0 \ 0000001C F210A0E3 MOV R1,#+242 \ 00000020 C01F81E3 ORR R1,R1,#0x300 \ 00000024 010050E1 CMP R0,R1 \ 00000028 5900001A BNE ??maincsm_onmessage_1 3231 { 3232 IPC_REQ *ipc; 3233 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 088094E5 LDR R8,[R4, #+8] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 5600000A BEQ ??maincsm_onmessage_1 3234 { 3235 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C A29FA0E3 MOV R9,#+648 \ 00000040 071089E0 ADD R1,R9,R7 \ 00000044 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 5000001A BNE ??maincsm_onmessage_1 3236 { 3237 switch (msg->submess) \ 00000050 041094E5 LDR R1,[R4, #+4] \ 00000054 040098E5 LDR R0,[R8, #+4] \ 00000058 011051E2 SUBS R1,R1,#+1 \ 0000005C 0600000A BEQ ??maincsm_onmessage_2 \ 00000060 011051E2 SUBS R1,R1,#+1 \ 00000064 0D00000A BEQ ??maincsm_onmessage_3 \ 00000068 011051E2 SUBS R1,R1,#+1 \ 0000006C 1200000A BEQ ??maincsm_onmessage_4 \ 00000070 011051E2 SUBS R1,R1,#+1 \ 00000074 1500000A BEQ ??maincsm_onmessage_5 \ 00000078 450000EA B ??maincsm_onmessage_1 3238 { 3239 case IPC_CHECK_DOUBLERUN: 3240 //Если приняли свое собственное сообщение, значит запускаем чекер 3241 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_2: \ 0000007C 071089E0 ADD R1,R9,R7 \ 00000080 010050E1 CMP R0,R1 \ 00000084 0200001A BNE ??maincsm_onmessage_6 \ 00000088 7C099FE5 LDR R0,??maincsm_onmessage_7 ;; CheckDoubleRun \ 0000008C 710100EF SWI +369 \ 00000090 3F0000EA B ??maincsm_onmessage_1 3242 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_6: \ 00000094 080195E5 LDR R0,[R5, #+264] \ 00000098 080088E5 STR R0,[R8, #+8] \ 0000009C 3C0000EA B ??maincsm_onmessage_1 3243 break; 3244 case IPC_SMILE_PROCESSED: 3245 //Только собственные смайлы ;) 3246 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_3: \ 000000A0 071089E0 ADD R1,R9,R7 \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 0100001A BNE ??maincsm_onmessage_8 \ 000000AC 5C099FE5 LDR R0,??maincsm_onmessage_7+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_9: \ 000000B0 710100EF SWI +369 3247 SMART_REDRAW(); \ ??maincsm_onmessage_8: \ 000000B4 ........ BL SMART_REDRAW \ 000000B8 350000EA B ??maincsm_onmessage_1 3248 break; 3249 case IPC_XSTATUSIMG_PROCESSED: 3250 //Только собственные иксстатусы ;) 3251 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_4: \ 000000BC 071089E0 ADD R1,R9,R7 \ 000000C0 010050E1 CMP R0,R1 \ 000000C4 FAFFFF1A BNE ??maincsm_onmessage_8 \ 000000C8 44099FE5 LDR R0,??maincsm_onmessage_7+0x8 ;; ProcessNextXStatImg \ 000000CC F7FFFFEA B ??maincsm_onmessage_9 3252 SMART_REDRAW(); 3253 break; 3254 case IPC_TENSECONDS: 3255 //Только свое сообщение 3256 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_5: \ 000000D0 071089E0 ADD R1,R9,R7 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 2D00001A BNE ??maincsm_onmessage_1 3257 { 3258 CLIST *t=(CLIST *)cltop; \ 000000DC 900095E5 LDR R0,[R5, #+144] 3259 int f=0; \ 000000E0 0010A0E3 MOV R1,#+0 \ 000000E4 000050E3 CMP R0,#+0 \ 000000E8 1E00000A BEQ ??maincsm_onmessage_10 3260 while(t) 3261 { 3262 if(t->just_now) \ ??maincsm_onmessage_11: \ 000000EC 5C2090E5 LDR R2,[R0, #+92] \ 000000F0 000052E3 CMP R2,#+0 \ 000000F4 0600000A BEQ ??maincsm_onmessage_12 3263 { 3264 if (!(--(t->just_now))) { \ 000000F8 012052E2 SUBS R2,R2,#+1 \ 000000FC 5C2080E5 STR R2,[R0, #+92] \ 00000100 0300001A BNE ??maincsm_onmessage_12 3265 f=1; 3266 #ifdef EVILFOX 3267 total_c_online--; \ 00000104 982095E5 LDR R2,[R5, #+152] \ 00000108 0110A0E3 MOV R1,#+1 \ 0000010C 012042E2 SUB R2,R2,#+1 \ 00000110 982085E5 STR R2,[R5, #+152] 3268 #endif 3269 } 3270 } 3271 if (t->isactive) \ ??maincsm_onmessage_12: \ 00000114 7C2090E5 LDR R2,[R0, #+124] \ 00000118 000052E3 CMP R2,#+0 \ 0000011C 0200000A BEQ ??maincsm_onmessage_13 3272 { 3273 if (!(--(t->isactive))) f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню \ 00000120 012052E2 SUBS R2,R2,#+1 \ 00000124 7C2080E5 STR R2,[R0, #+124] \ 00000128 0110A003 MOVEQ R1,#+1 3274 } 3275 t=(CLIST *)(t->next); \ ??maincsm_onmessage_13: \ 0000012C 000090E5 LDR R0,[R0, #+0] 3276 } \ 00000130 000050E3 CMP R0,#+0 \ 00000134 ECFFFF1A BNE ??maincsm_onmessage_11 3277 if (f) \ 00000138 000051E3 CMP R1,#+0 \ 0000013C 0900000A BEQ ??maincsm_onmessage_10 3278 { 3279 CLIST *oldt=NULL; 3280 if (contactlist_menu_id) \ 00000140 781195E5 LDR R1,[R5, #+376] \ 00000144 000051E3 CMP R1,#+0 \ 00000148 0400000A BEQ ??maincsm_onmessage_14 3281 { 3282 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000014C 780195E5 LDR R0,[R5, #+376] \ 00000150 0010A0E3 MOV R1,#+0 \ 00000154 090200EF SWI +521 \ 00000158 8F0100EF SWI +399 \ 0000015C ........ _BLF FindContactByN,??FindContactByN??rA 3283 } 3284 RecountMenu(oldt, 1); \ ??maincsm_onmessage_14: \ 00000160 0110A0E3 MOV R1,#+1 \ 00000164 ........ BL RecountMenu 3285 } 3286 if (time_to_stop_t9) \ ??maincsm_onmessage_10: \ 00000168 940195E5 LDR R0,[R5, #+404] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0700000A BEQ ??maincsm_onmessage_1 3287 { 3288 if (!(--time_to_stop_t9)) \ 00000174 010050E2 SUBS R0,R0,#+1 \ 00000178 940185E5 STR R0,[R5, #+404] \ 0000017C 0400001A BNE ??maincsm_onmessage_1 3289 { 3290 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 00000180 7C0195E5 LDR R0,[R5, #+380] \ 00000184 350100EF SWI +309 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 0000000A BEQ ??maincsm_onmessage_1 \ 00000190 960100EF SWI +406 3291 } 3292 } 3293 } 3294 break; 3295 #ifdef EVILFOX 3296 #else 3297 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 3298 int l=strlen(((IPCMsg *)(ipc->data))->msg); 3299 TPKT *msg=malloc(sizeof(PKT)+l); 3300 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; 3301 msg->pkt.type=T_SENDMSG; 3302 msg->pkt.data_len=l; 3303 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); 3304 //slientsend=1; 3305 SENDMSGCOUNT++; //Номер сообщения 3306 SUBPROC((void *)SendAnswer,0,msg); 3307 break; 3308 #endif 3309 } 3310 } 3311 } 3312 } 3313 //Нарисуем иконочку моего статуса 3314 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 3315 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_1: \ 00000194 068100EF SWI +33030 \ 00000198 040090E5 LDR R0,[R0, #+4] 3316 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 0000019C 0180A0E3 MOV R8,#+1 \ 000001A0 080100EF SWI +264 \ 000001A4 280090E5 LDR R0,[R0, #+40] \ 000001A8 350100EF SWI +309 \ 000001AC 000050E3 CMP R0,#+0 \ 000001B0 2801000A BEQ ??maincsm_onmessage_15 3317 { 3318 GUI *igui=GetTopGUI(); 3319 if (igui) //И он существует \ 000001B4 4D0100EF SWI +333 \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 2701000A BEQ ??maincsm_onmessage_16 3320 { 3321 //// void *canvasdata=BuildCanvas(); 3322 canvasdata=BuildCanvas(); \ 000001C0 F18000EF SWI +33009 \ 000001C4 B80085E5 STR R0,[R5, #+184] 3323 int icn; 3324 #ifdef EVILFOX 3325 if(time_draw) \ 000001C8 B40095E5 LDR R0,[R5, #+180] \ 000001CC 000050E3 CMP R0,#+0 \ 000001D0 2201000A BEQ ??maincsm_onmessage_16 3326 { 3327 #endif 3328 if (total_unread) \ 000001D4 8C1095E5 LDR R1,[R5, #+140] \ 000001D8 500195E5 LDR R0,[R5, #+336] \ 000001DC 000051E3 CMP R1,#+0 3329 icn=IS_MSG; \ 000001E0 0D90A013 MOVNE R9,#+13 \ 000001E4 0900001A BNE ??maincsm_onmessage_17 3330 else 3331 { 3332 switch(connect_state) \ 000001E8 0020B0E1 MOVS R2,R0 \ 000001EC 0200000A BEQ ??maincsm_onmessage_18 \ 000001F0 032050E2 SUBS R2,R0,#+3 \ 000001F4 0200000A BEQ ??maincsm_onmessage_19 \ 000001F8 030000EA B ??maincsm_onmessage_20 3333 { 3334 case 0: 3335 icn=IS_OFFLINE; break; \ ??maincsm_onmessage_18: \ 000001FC 0090A0E3 MOV R9,#+0 \ 00000200 020000EA B ??maincsm_onmessage_17 3336 case 3: 3337 icn=CurrentStatus; //IS_ONLINE; \ ??maincsm_onmessage_19: \ 00000204 349195E5 LDR R9,[R5, #+308] \ 00000208 000000EA B ??maincsm_onmessage_17 3338 break; 3339 default: 3340 icn=IS_UNKNOWN; break; \ ??maincsm_onmessage_20: \ 0000020C 0E90A0E3 MOV R9,#+14 3341 } 3342 } 3343 3344 //Тут трохи поменял 3345 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 3346 if((icon_change)||(total_unread)||(connect_state!=3)) \ ??maincsm_onmessage_17: \ 00000210 002195E5 LDR R2,[R5, #+256] \ 00000214 000052E3 CMP R2,#+0 \ 00000218 00005103 CMPEQ R1,#+0 \ 0000021C 03005003 CMPEQ R0,#+3 \ 00000220 1600000A BEQ ??maincsm_onmessage_21 \ 00000224 090195E7 LDR R0,[R5, +R9, LSL #+2] 3347 { 3348 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 3349 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ 00000228 210000EF SWI +33 \ 0000022C 08008DE5 STR R0,[SP, #+8] \ 00000230 090195E7 LDR R0,[R5, +R9, LSL #+2] \ 00000234 220000EF SWI +34 \ 00000238 D8179FE5 LDR R1,??maincsm_onmessage_7+0xC ;; IDLEICON_X \ 0000023C 00A091E5 LDR R10,[R1, #+0] \ 00000240 D4179FE5 LDR R1,??maincsm_onmessage_7+0x10 ;; IDLEICON_Y \ 00000244 0A0080E0 ADD R0,R0,R10 \ 00000248 00B091E5 LDR R11,[R1, #+0] \ 0000024C 0110A0E3 MOV R1,#+1 \ 00000250 02002DE9 PUSH {R1} \ 00000254 0C109DE5 LDR R1,[SP, #+12] \ 00000258 013040E2 SUB R3,R0,#+1 \ 0000025C 0B20A0E1 MOV R2,R11 \ 00000260 0B1081E0 ADD R1,R1,R11 \ 00000264 011041E2 SUB R1,R1,#+1 \ 00000268 02002DE9 PUSH {R1} \ 0000026C B80095E5 LDR R0,[R5, #+184] \ 00000270 0A10A0E1 MOV R1,R10 \ 00000274 250000EF SWI +37 3350 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000278 092195E7 LDR R2,[R5, +R9, LSL #+2] \ 0000027C 210000EA B ??maincsm_onmessage_22 3351 } 3352 else 3353 { 3354 PNGTOP_DESC *pltop=PNG_TOP(); \ ??maincsm_onmessage_21: \ 00000280 B98100EF SWI +33209 3355 pltop->dyn_pltop=XStatusesImgList; \ 00000284 ........ LDR R1,??DataTable118 ;; XStatusesImgList \ 00000288 001091E5 LDR R1,[R1, #+0] \ 0000028C 081080E5 STR R1,[R0, #+8] \ 00000290 88179FE5 LDR R1,??maincsm_onmessage_7+0x14 ;; XStatusesIconArray \ 00000294 380195E5 LDR R0,[R5, #+312] \ 00000298 001091E5 LDR R1,[R1, #+0] \ 0000029C 000191E7 LDR R0,[R1, +R0, LSL #+2] 3356 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 3357 IDLEICON_Y+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 000002A0 210000EF SWI +33 \ 000002A4 74179FE5 LDR R1,??maincsm_onmessage_7+0x14 ;; XStatusesIconArray \ 000002A8 0090A0E1 MOV R9,R0 \ 000002AC 380195E5 LDR R0,[R5, #+312] \ 000002B0 001091E5 LDR R1,[R1, #+0] \ 000002B4 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 000002B8 220000EF SWI +34 \ 000002BC 54179FE5 LDR R1,??maincsm_onmessage_7+0xC ;; IDLEICON_X \ 000002C0 00A091E5 LDR R10,[R1, #+0] \ 000002C4 50179FE5 LDR R1,??maincsm_onmessage_7+0x10 ;; IDLEICON_Y \ 000002C8 0A0080E0 ADD R0,R0,R10 \ 000002CC 00B091E5 LDR R11,[R1, #+0] \ 000002D0 0110A0E3 MOV R1,#+1 \ 000002D4 02002DE9 PUSH {R1} \ 000002D8 013040E2 SUB R3,R0,#+1 \ 000002DC 0B20A0E1 MOV R2,R11 \ 000002E0 0B1089E0 ADD R1,R9,R11 \ 000002E4 011041E2 SUB R1,R1,#+1 \ 000002E8 02002DE9 PUSH {R1} \ 000002EC B80095E5 LDR R0,[R5, #+184] \ 000002F0 0A10A0E1 MOV R1,R10 \ 000002F4 250000EF SWI +37 3358 DrawImg(IDLEICON_X,IDLEICON_Y,XStatusesIconArray[CurrentXStatus]); \ 000002F8 20179FE5 LDR R1,??maincsm_onmessage_7+0x14 ;; XStatusesIconArray \ 000002FC 380195E5 LDR R0,[R5, #+312] \ 00000300 001091E5 LDR R1,[R1, #+0] \ 00000304 002191E7 LDR R2,[R1, +R0, LSL #+2] \ ??maincsm_onmessage_22: \ 00000308 0B10A0E1 MOV R1,R11 \ 0000030C 0A00A0E1 MOV R0,R10 \ 00000310 230000EF SWI +35 \ 00000314 08D08DE2 ADD SP,SP,#+8 3359 } 3360 #ifdef EVILFOX_2 3361 DrawImg(IDLEICON_X-1,IDLEICON_Y-8,(int)"4:\\zbin\\naticq\\img\\naticq_ms.png"); 3362 #endif 3363 #ifdef EVILFOX 3364 if(connect_state==3) \ 00000318 500195E5 LDR R0,[R5, #+336] \ 0000031C D3AFA0E3 MOV R10,#+844 \ 00000320 030050E3 CMP R0,#+3 \ 00000324 0800001A BNE ??maincsm_onmessage_23 3365 sprintf(online_txt, "online: %02d:%02d:%02d", hours, minutes, seconds); \ 00000328 A00095E5 LDR R0,[R5, #+160] \ 0000032C 4F1F87E2 ADD R1,R7,#+316 \ 00000330 01002DE9 PUSH {R0} \ 00000334 A43095E5 LDR R3,[R5, #+164] \ 00000338 A82095E5 LDR R2,[R5, #+168] \ 0000033C 05008AE0 ADD R0,R10,R5 \ 00000340 160000EF SWI +22 \ 00000344 04D08DE2 ADD SP,SP,#+4 \ 00000348 020000EA B ??maincsm_onmessage_24 3366 else 3367 sprintf(online_txt ,"Offline"); \ ??maincsm_onmessage_23: \ 0000034C 551F87E2 ADD R1,R7,#+340 \ 00000350 05008AE0 ADD R0,R10,R5 \ 00000354 160000EF SWI +22 3368 if(Is_Online_On) \ ??maincsm_onmessage_24: \ 00000358 ........ LDR R0,??DataTable142 ;; fonto \ 0000035C 009090E5 LDR R9,[R0, #+0] \ 00000360 BC069FE5 LDR R0,??maincsm_onmessage_7+0x18 ;; Is_Online_On \ 00000364 000090E5 LDR R0,[R0, #+0] \ 00000368 000050E3 CMP R0,#+0 \ 0000036C 0B00000A BEQ ??maincsm_onmessage_25 3369 PrintField(ONTIME_X,ONTIME_Y, online_txt, align, fonto, spaco1r); \ 00000370 B00095E5 LDR R0,[R5, #+176] \ 00000374 05208AE0 ADD R2,R10,R5 \ 00000378 01002DE9 PUSH {R0} \ 0000037C 0900A0E1 MOV R0,R9 \ 00000380 01002DE9 PUSH {R0} \ 00000384 AC3095E5 LDR R3,[R5, #+172] \ 00000388 98069FE5 LDR R0,??maincsm_onmessage_7+0x1C ;; ONTIME_Y \ 0000038C 001090E5 LDR R1,[R0, #+0] \ 00000390 94069FE5 LDR R0,??maincsm_onmessage_7+0x20 ;; ONTIME_X \ 00000394 000090E5 LDR R0,[R0, #+0] \ 00000398 ........ _BLF PrintField,??PrintField??rA \ 0000039C 08D08DE2 ADD SP,SP,#+8 3370 if(Show_Ping) \ ??maincsm_onmessage_25: \ 000003A0 ........ LDR R0,??DataTable120 ;; Show_Ping \ 000003A4 000090E5 LDR R0,[R0, #+0] \ 000003A8 000050E3 CMP R0,#+0 \ 000003AC 0B00000A BEQ ??maincsm_onmessage_26 3371 PrintField(PING_X,PING_Y, ping_txt, align, fonto, spaco1r); \ 000003B0 B00095E5 LDR R0,[R5, #+176] \ 000003B4 D82F85E2 ADD R2,R5,#+864 \ 000003B8 01002DE9 PUSH {R0} \ 000003BC 0900A0E1 MOV R0,R9 \ 000003C0 01002DE9 PUSH {R0} \ 000003C4 AC3095E5 LDR R3,[R5, #+172] \ 000003C8 60069FE5 LDR R0,??maincsm_onmessage_7+0x24 ;; PING_Y \ 000003CC 001090E5 LDR R1,[R0, #+0] \ 000003D0 5C069FE5 LDR R0,??maincsm_onmessage_7+0x28 ;; PING_X \ 000003D4 000090E5 LDR R0,[R0, #+0] \ 000003D8 ........ _BLF PrintField,??PrintField??rA \ 000003DC 08D08DE2 ADD SP,SP,#+8 3372 if(Is_Unread_On) \ ??maincsm_onmessage_26: \ 000003E0 50069FE5 LDR R0,??maincsm_onmessage_7+0x2C ;; Is_Unread_On \ 000003E4 000090E5 LDR R0,[R0, #+0] \ 000003E8 000050E3 CMP R0,#+0 \ 000003EC 1000000A BEQ ??maincsm_onmessage_27 3373 { 3374 sprintf(unread_txt, "Unread: %d", total_unread2); \ 000003F0 942095E5 LDR R2,[R5, #+148] \ 000003F4 DCAFA0E3 MOV R10,#+880 \ 000003F8 571F87E2 ADD R1,R7,#+348 \ 000003FC 05008AE0 ADD R0,R10,R5 \ 00000400 160000EF SWI +22 3375 PrintField(UNREAD_X,UNREAD_Y, unread_txt, align, fonto, spaco1r); \ 00000404 B00095E5 LDR R0,[R5, #+176] \ 00000408 05208AE0 ADD R2,R10,R5 \ 0000040C 01002DE9 PUSH {R0} \ 00000410 0900A0E1 MOV R0,R9 \ 00000414 01002DE9 PUSH {R0} \ 00000418 AC3095E5 LDR R3,[R5, #+172] \ 0000041C 18069FE5 LDR R0,??maincsm_onmessage_7+0x30 ;; UNREAD_Y \ 00000420 001090E5 LDR R1,[R0, #+0] \ 00000424 14069FE5 LDR R0,??maincsm_onmessage_7+0x34 ;; UNREAD_X \ 00000428 000090E5 LDR R0,[R0, #+0] \ 0000042C ........ _BLF PrintField,??PrintField??rA \ 00000430 08D08DE2 ADD SP,SP,#+8 3376 } 3377 if(Is_DRAWMAIN_On&&main_d) \ ??maincsm_onmessage_27: \ 00000434 ........ LDR R0,??DataTable121 ;; Is_DRAWMAIN_On \ 00000438 000090E5 LDR R0,[R0, #+0] \ 0000043C 000050E3 CMP R0,#+0 \ 00000440 D4009515 LDRNE R0,[R5, #+212] \ 00000444 00005013 CMPNE R0,#+0 \ 00000448 7400000A BEQ ??maincsm_onmessage_28 3378 { 3379 if(fonto==1) \ 0000044C F0059FE5 LDR R0,??maincsm_onmessage_7+0x38 ;; MSG_X \ 00000450 AC3095E5 LDR R3,[R5, #+172] \ 00000454 00A090E5 LDR R10,[R0, #+0] \ 00000458 E8059FE5 LDR R0,??maincsm_onmessage_7+0x3C ;; MSG_Y \ 0000045C 010059E3 CMP R9,#+1 \ 00000460 00B090E5 LDR R11,[R0, #+0] \ 00000464 610EA0E3 MOV R0,#+1552 \ 00000468 3200001A BNE ??maincsm_onmessage_29 3380 { 3381 PrintField(MSG_X,MSG_Y, a_txt, align, fonto, spaco2); \ 0000046C D8159FE5 LDR R1,??maincsm_onmessage_7+0x40 ;; spaco2 \ 00000470 052080E0 ADD R2,R0,R5 \ 00000474 009091E5 LDR R9,[R1, #+0] \ 00000478 0A00A0E1 MOV R0,R10 \ 0000047C 0910A0E1 MOV R1,R9 \ 00000480 02002DE9 PUSH {R1} \ 00000484 0110A0E3 MOV R1,#+1 \ 00000488 02002DE9 PUSH {R1} \ 0000048C 0B10A0E1 MOV R1,R11 \ 00000490 ........ _BLF PrintField,??PrintField??rA 3382 PrintField(MSG_X,MSG_Y+paused_height+1, s_txt, align, fonto, spaco2); \ 00000494 0900A0E1 MOV R0,R9 \ 00000498 01002DE9 PUSH {R0} \ 0000049C 652E85E2 ADD R2,R5,#+1616 \ 000004A0 0800A0E1 MOV R0,R8 \ 000004A4 01002DE9 PUSH {R0} \ 000004A8 AC3095E5 LDR R3,[R5, #+172] \ 000004AC D80095E5 LDR R0,[R5, #+216] \ 000004B0 0B0080E0 ADD R0,R0,R11 \ 000004B4 011080E2 ADD R1,R0,#+1 \ 000004B8 0A00A0E1 MOV R0,R10 \ 000004BC ........ _BLF PrintField,??PrintField??rA 3383 PrintField(MSG_X,MSG_Y+(2*paused_height)+2, d_txt, align, fonto, spaco2); \ 000004C0 0900A0E1 MOV R0,R9 \ 000004C4 01002DE9 PUSH {R0} \ 000004C8 692E85E2 ADD R2,R5,#+1680 \ 000004CC 0800A0E1 MOV R0,R8 \ 000004D0 01002DE9 PUSH {R0} \ 000004D4 AC3095E5 LDR R3,[R5, #+172] \ 000004D8 D80095E5 LDR R0,[R5, #+216] \ 000004DC 80008BE0 ADD R0,R11,R0, LSL #+1 \ 000004E0 021080E2 ADD R1,R0,#+2 \ 000004E4 0A00A0E1 MOV R0,R10 \ 000004E8 ........ _BLF PrintField,??PrintField??rA 3384 PrintField(MSG_X,MSG_Y+(3*paused_height)+3, f_txt, align, fonto, spaco2); \ 000004EC 0900A0E1 MOV R0,R9 \ 000004F0 01002DE9 PUSH {R0} \ 000004F4 6D2E85E2 ADD R2,R5,#+1744 \ 000004F8 0800A0E1 MOV R0,R8 \ 000004FC 01002DE9 PUSH {R0} \ 00000500 AC3095E5 LDR R3,[R5, #+172] \ 00000504 D80095E5 LDR R0,[R5, #+216] \ 00000508 800080E0 ADD R0,R0,R0, LSL #+1 \ 0000050C 0B0080E0 ADD R0,R0,R11 \ 00000510 031080E2 ADD R1,R0,#+3 \ 00000514 0A00A0E1 MOV R0,R10 \ 00000518 ........ _BLF PrintField,??PrintField??rA 3385 PrintField(MSG_X,MSG_Y+(4*paused_height)+4, g_txt, align, fonto, spaco2); \ 0000051C 00022DE9 PUSH {R9} \ 00000520 0800A0E1 MOV R0,R8 \ 00000524 01002DE9 PUSH {R0} \ 00000528 AC3095E5 LDR R3,[R5, #+172] \ 0000052C D80095E5 LDR R0,[R5, #+216] \ 00000530 712E85E2 ADD R2,R5,#+1808 \ 00000534 330000EA B ??maincsm_onmessage_30 3386 } 3387 else 3388 { 3389 PrintField(MSG_X,MSG_Y, a_txt, align, fonto, spaco1r); \ ??maincsm_onmessage_29: \ 00000538 B01095E5 LDR R1,[R5, #+176] \ 0000053C 052080E0 ADD R2,R0,R5 \ 00000540 02002DE9 PUSH {R1} \ 00000544 0A00A0E1 MOV R0,R10 \ 00000548 0910A0E1 MOV R1,R9 \ 0000054C 02002DE9 PUSH {R1} \ 00000550 0B10A0E1 MOV R1,R11 \ 00000554 ........ _BLF PrintField,??PrintField??rA 3390 PrintField(MSG_X,MSG_Y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco1r); \ 00000558 D80095E5 LDR R0,[R5, #+216] \ 0000055C C50100EF SWI +453 \ 00000560 B01095E5 LDR R1,[R5, #+176] \ 00000564 652E85E2 ADD R2,R5,#+1616 \ 00000568 02002DE9 PUSH {R1} \ 0000056C 0B0080E0 ADD R0,R0,R11 \ 00000570 0910A0E1 MOV R1,R9 \ 00000574 02002DE9 PUSH {R1} \ 00000578 AC3095E5 LDR R3,[R5, #+172] \ 0000057C 011080E2 ADD R1,R0,#+1 \ 00000580 0A00A0E1 MOV R0,R10 \ 00000584 ........ _BLF PrintField,??PrintField??rA 3391 PrintField(MSG_X,MSG_Y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco1r); \ 00000588 D80095E5 LDR R0,[R5, #+216] \ 0000058C C50100EF SWI +453 \ 00000590 B01095E5 LDR R1,[R5, #+176] \ 00000594 692E85E2 ADD R2,R5,#+1680 \ 00000598 02002DE9 PUSH {R1} \ 0000059C 80008BE0 ADD R0,R11,R0, LSL #+1 \ 000005A0 0910A0E1 MOV R1,R9 \ 000005A4 02002DE9 PUSH {R1} \ 000005A8 AC3095E5 LDR R3,[R5, #+172] \ 000005AC 021080E2 ADD R1,R0,#+2 \ 000005B0 0A00A0E1 MOV R0,R10 \ 000005B4 ........ _BLF PrintField,??PrintField??rA 3392 PrintField(MSG_X,MSG_Y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco1r); \ 000005B8 D80095E5 LDR R0,[R5, #+216] \ 000005BC C50100EF SWI +453 \ 000005C0 B01095E5 LDR R1,[R5, #+176] \ 000005C4 6D2E85E2 ADD R2,R5,#+1744 \ 000005C8 02002DE9 PUSH {R1} \ 000005CC 800080E0 ADD R0,R0,R0, LSL #+1 \ 000005D0 0B0080E0 ADD R0,R0,R11 \ 000005D4 0910A0E1 MOV R1,R9 \ 000005D8 02002DE9 PUSH {R1} \ 000005DC AC3095E5 LDR R3,[R5, #+172] \ 000005E0 031080E2 ADD R1,R0,#+3 \ 000005E4 0A00A0E1 MOV R0,R10 \ 000005E8 ........ _BLF PrintField,??PrintField??rA 3393 PrintField(MSG_X,MSG_Y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco1r); \ 000005EC D80095E5 LDR R0,[R5, #+216] \ 000005F0 C50100EF SWI +453 \ 000005F4 B01095E5 LDR R1,[R5, #+176] \ 000005F8 712E85E2 ADD R2,R5,#+1808 \ 000005FC 02002DE9 PUSH {R1} \ 00000600 00022DE9 PUSH {R9} \ 00000604 AC3095E5 LDR R3,[R5, #+172] \ ??maincsm_onmessage_30: \ 00000608 00018BE0 ADD R0,R11,R0, LSL #+2 \ 0000060C 041080E2 ADD R1,R0,#+4 \ 00000610 0A00A0E1 MOV R0,R10 \ 00000614 ........ _BLF PrintField,??PrintField??rA \ 00000618 28D08DE2 ADD SP,SP,#+40 3394 } 3395 main_d=0; \ 0000061C D46085E5 STR R6,[R5, #+212] 3396 } 3397 icon_change2=!(icon_change2); \ ??maincsm_onmessage_28: \ 00000620 040195E5 LDR R0,[R5, #+260] \ 00000624 000050E3 CMP R0,#+0 \ 00000628 0100A003 MOVEQ R0,#+1 \ 0000062C 0000A013 MOVNE R0,#+0 \ 00000630 040185E5 STR R0,[R5, #+260] 3398 if(icon_change2) \ 00000634 000050E3 CMP R0,#+0 \ 00000638 0400000A BEQ ??maincsm_onmessage_31 3399 icon_change=!(icon_change); \ 0000063C 000195E5 LDR R0,[R5, #+256] \ 00000640 000050E3 CMP R0,#+0 \ 00000644 0100A003 MOVEQ R0,#+1 \ 00000648 0000A013 MOVNE R0,#+0 \ 0000064C 000185E5 STR R0,[R5, #+256] 3400 time_draw=0; \ ??maincsm_onmessage_31: \ 00000650 B46085E5 STR R6,[R5, #+180] \ 00000654 010000EA B ??maincsm_onmessage_16 3401 } 3402 #endif 3403 } 3404 } 3405 #ifdef EVILFOX 3406 else 3407 { 3408 time_draw=1; \ ??maincsm_onmessage_15: \ 00000658 B48085E5 STR R8,[R5, #+180] 3409 main_d=1; \ 0000065C D48085E5 STR R8,[R5, #+212] 3410 } 3411 #endif 3412 } 3413 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_16: \ 00000660 F200D4E1 LDRSH R0,[R4, #+2] \ 00000664 FC1F88E3 ORR R1,R8,#0x3F0 \ 00000668 010050E1 CMP R0,R1 \ 0000066C 3200001A BNE ??maincsm_onmessage_32 3414 { 3415 extern const char *successed_config_filename; 3416 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 00000670 ........ LDR R0,??DataTable139 ;; successed_config_filename \ 00000674 081094E5 LDR R1,[R4, #+8] \ 00000678 000090E5 LDR R0,[R0, #+0] \ 0000067C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000680 000050E3 CMP R0,#+0 \ 00000684 2C00001A BNE ??maincsm_onmessage_32 3417 { 3418 ShowMSG(1,(int)"NatICQ config updated!"); \ 00000688 5A1F87E2 ADD R1,R7,#+360 3419 InitConfig(); 3420 #ifdef EVILFOX 3421 FontPathFree(); 3422 FontPathInit(fonto,(char *)fontpath, 0); \ 0000068C ........ LDR R10,??DataTable141 ;; fontpath \ 00000690 0100A0E3 MOV R0,#+1 \ 00000694 480100EF SWI +328 \ 00000698 ........ _BLF InitConfig,??InitConfig??rA \ 0000069C ........ _BLF FontPathFree,??FontPathFree??rA \ 000006A0 ........ LDR R0,??DataTable142 ;; fonto \ 000006A4 0620A0E1 MOV R2,R6 \ 000006A8 009090E5 LDR R9,[R0, #+0] \ 000006AC 0A10A0E1 MOV R1,R10 \ 000006B0 0900A0E1 MOV R0,R9 \ 000006B4 ........ _BLF FontPathInit,??FontPathInit??rA 3423 if(fonto==1) \ 000006B8 010059E3 CMP R9,#+1 \ 000006BC 0E00001A BNE ??maincsm_onmessage_33 3424 { 3425 spaco1r=spaco1; \ 000006C0 ........ LDR R0,??DataTable143 ;; spaco1 \ 000006C4 000090E5 LDR R0,[R0, #+0] \ 000006C8 B00085E5 STR R0,[R5, #+176] 3426 char *heght=malloc(64); \ 000006CC 4000A0E3 MOV R0,#+64 \ 000006D0 140000EF SWI +20 \ 000006D4 0090A0E1 MOV R9,R0 3427 sprintf(heght, "%s2240.png", fontpath); \ 000006D8 0A20A0E1 MOV R2,R10 \ 000006DC 601F87E2 ADD R1,R7,#+384 \ 000006E0 160000EF SWI +22 3428 paused_height=GetImgHeight((int)heght); \ 000006E4 0900A0E1 MOV R0,R9 \ 000006E8 210000EF SWI +33 \ 000006EC D80085E5 STR R0,[R5, #+216] 3429 mfree(heght); \ 000006F0 0900A0E1 MOV R0,R9 \ 000006F4 150000EF SWI +21 \ 000006F8 080000EA B ??maincsm_onmessage_34 3430 } 3431 else 3432 { 3433 spaco1r=10001+(system_color*100); \ ??maincsm_onmessage_33: \ 000006FC ........ LDR R0,??DataTable144 ;; system_color \ 00000700 6410A0E3 MOV R1,#+100 \ 00000704 000090E5 LDR R0,[R0, #+0] \ 00000708 1120A0E3 MOV R2,#+17 \ 0000070C 9C2D82E3 ORR R2,R2,#0x2700 \ 00000710 912020E0 MLA R0,R1,R0,R2 \ 00000714 B00085E5 STR R0,[R5, #+176] 3434 paused_height=fonto-100; \ 00000718 640049E2 SUB R0,R9,#+100 \ 0000071C D80085E5 STR R0,[R5, #+216] 3435 } 3436 init_time_zone(); \ ??maincsm_onmessage_34: \ 00000720 ........ BL init_time_zone 3437 #endif 3438 free_ICONS(); \ 00000724 ........ BL free_ICONS 3439 setup_ICONS(); \ 00000728 ........ BL setup_ICONS 3440 ResortCL(); \ 0000072C ........ _BLF ResortCL,??ResortCL??rA 3441 RecountMenu(NULL, 1); \ 00000730 0110A0E3 MOV R1,#+1 \ 00000734 0600A0E1 MOV R0,R6 \ 00000738 ........ BL RecountMenu 3442 // InitSmiles(); 3443 } 3444 } 3445 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_32: \ 0000073C F200D4E1 LDRSH R0,[R4, #+2] \ 00000740 980050E3 CMP R0,#+152 \ 00000744 0E00001A BNE ??maincsm_onmessage_35 3446 { 3447 if ((int)msg->data0==csm->gui_id) \ 00000748 0C109DE5 LDR R1,[SP, #+12] \ 0000074C 080094E5 LDR R0,[R4, #+8] \ 00000750 281091E5 LDR R1,[R1, #+40] \ 00000754 010050E1 CMP R0,R1 3448 { 3449 csm->csm.state=-3; \ 00000758 0C009D05 LDREQ R0,[SP, #+12] \ 0000075C 0210E003 MVNEQ R1,#+2 \ 00000760 10108005 STREQ R1,[R0, #+16] 3450 } 3451 if ((int)msg->data0==contactlist_menu_id) \ 00000764 080094E5 LDR R0,[R4, #+8] \ 00000768 781195E5 LDR R1,[R5, #+376] \ 0000076C 010050E1 CMP R0,R1 3452 { 3453 contactlist_menu_id=0; \ 00000770 78618505 STREQ R6,[R5, #+376] 3454 prev_clmenu_itemcount=0; \ 00000774 80618505 STREQ R6,[R5, #+384] 3455 } 3456 if ((int)msg->data0==edchat_id) \ 00000778 7C1195E5 LDR R1,[R5, #+380] \ 0000077C 010050E1 CMP R0,R1 3457 { 3458 edchat_id=0; \ 00000780 7C618505 STREQ R6,[R5, #+380] 3459 } 3460 } 3461 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_35: \ 00000784 F200D4E1 LDRSH R0,[R4, #+2] \ 00000788 FC0F50E3 CMP R0,#+1008 \ 0000078C 0C00001A BNE ??maincsm_onmessage_36 3462 { 3463 switch((int)msg->data0) \ 00000790 080094E5 LDR R0,[R4, #+8] \ 00000794 0C1094E5 LDR R1,[R4, #+12] \ 00000798 ........ LDR R9,??DataTable127 ;; do_reconnect \ 0000079C 8F4EA0E3 MOV R4,#+2288 \ 000007A0 7DAEA0E3 MOV R10,#+2000 \ 000007A4 802050E2 SUBS R2,R0,#+128 \ 000007A8 0800000A BEQ ??maincsm_onmessage_37 \ 000007AC 022052E2 SUBS R2,R2,#+2 \ 000007B0 0200000A BEQ ??maincsm_onmessage_38 \ 000007B4 122052E2 SUBS R2,R2,#+18 \ 000007B8 0F00000A BEQ ??maincsm_onmessage_39 \ 000007BC 190000EA B ??maincsm_onmessage_40 3464 { 3465 case LMAN_DISCONNECT_IND: 3466 is_gprs_online=0; \ ??maincsm_onmessage_38: \ 000007C0 706185E5 STR R6,[R5, #+368] 3467 return(1); \ ??maincsm_onmessage_36: \ 000007C4 0100A0E3 MOV R0,#+1 \ 000007C8 10D08DE2 ADD SP,SP,#+16 \ 000007CC F08FBDE8 POP {R4-R11,PC} ;; return 3468 case LMAN_CONNECT_CNF: 3469 vibra_count=1; \ ??maincsm_onmessage_37: \ 000007D0 408185E5 STR R8,[R5, #+320] 3470 start_vibra(); \ 000007D4 ........ BL start_vibra 3471 is_gprs_online=1; \ 000007D8 708185E5 STR R8,[R5, #+368] 3472 strcpy(logmsg,LG_GRGPRSUP); \ 000007DC 631F87E2 ADD R1,R7,#+396 \ 000007E0 05008AE0 ADD R0,R10,R5 \ 000007E4 1A0000EF SWI +26 3473 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ 000007E8 0920A0E1 MOV R2,R9 \ 000007EC 871EA0E3 MOV R1,#+2160 \ 000007F0 050084E0 ADD R0,R4,R5 \ 000007F4 4D0000EF SWI +77 3474 return(1); \ 000007F8 070000EA B ??maincsm_onmessage_41 3475 case ENIP_DNR_HOST_BY_NAME: 3476 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_39: \ 000007FC 880195E5 LDR R0,[R5, #+392] \ 00000800 000051E1 CMP R1,R0 \ 00000804 EEFFFF1A BNE ??maincsm_onmessage_36 3477 { 3478 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 00000808 8C0195E5 LDR R0,[R5, #+396] \ 0000080C 000050E3 CMP R0,#+0 \ 00000810 EBFFFF0A BEQ ??maincsm_onmessage_36 \ 00000814 ........ LDR R0,??DataTable128 ;; create_connect \ ??maincsm_onmessage_42: \ 00000818 710100EF SWI +369 3479 } 3480 return(1); \ ??maincsm_onmessage_41: \ 0000081C 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_43: \ 00000820 10D08DE2 ADD SP,SP,#+16 \ 00000824 F08FBDE8 POP {R4-R11,PC} 3481 } 3482 if ((int)msg->data1==sock) \ ??maincsm_onmessage_40: \ 00000828 542195E5 LDR R2,[R5, #+340] \ 0000082C 020051E1 CMP R1,R2 \ 00000830 E3FFFF1A BNE ??maincsm_onmessage_36 3483 { 3484 //Если наш сокет 3485 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000834 201EA0E1 LSR R1,R0,#+28 \ 00000838 0A0051E3 CMP R1,#+10 \ 0000083C 0200001A BNE ??maincsm_onmessage_44 3486 { 3487 //Принят пакет 3488 ProcessPacket((TPKT *)msg->data0); \ 00000840 ........ BL ProcessPacket 3489 return(0); \ 00000844 0000A0E3 MOV R0,#+0 \ 00000848 F4FFFFEA B ??maincsm_onmessage_43 3490 } 3491 switch((int)msg->data0) \ ??maincsm_onmessage_44: \ 0000084C ........ LDR R2,??DataTable129 ;; VIBR_ON_CONNECT \ 00000850 501195E5 LDR R1,[R5, #+336] \ 00000854 00B092E5 LDR R11,[R2, #+0] \ 00000858 8A0040E2 SUB R0,R0,#+138 \ 0000085C 050050E3 CMP R0,#+5 \ 00000860 D7FFFF8A BHI ??maincsm_onmessage_36 \ 00000864 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 00000868 D02092E1 LDRSB R2,[R2, R0] \ 0000086C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000870 39393401 DC8 +57,+57,+52,+1 \ 00000874 423E0000 DC8 +66,+62,+0,+0 3492 { 3493 case ENIP_SOCK_CONNECTED: 3494 if (connect_state==1) \ ??maincsm_onmessage_45: \ 00000878 010051E3 CMP R1,#+1 \ 0000087C 2C00001A BNE ??maincsm_onmessage_46 3495 { 3496 if(VIBR_ON_CONNECT) 3497 vibra_count=2; 3498 else 3499 vibra_count=1; 3500 start_vibra(); 3501 //Соединение установленно, посылаем пакет login 3502 strcpy(logmsg, LG_GRTRYLOGIN); 3503 { 3504 int i=strlen(PASS); \ 00000880 C8419FE5 LDR R4,??maincsm_onmessage_7+0x44 ;; PASS \ 00000884 00005BE3 CMP R11,#+0 \ 00000888 0200A013 MOVNE R0,#+2 \ 0000088C 40018515 STRNE R0,[R5, #+320] \ 00000890 40818505 STREQ R8,[R5, #+320] \ 00000894 ........ BL start_vibra \ 00000898 691F87E2 ADD R1,R7,#+420 \ 0000089C 05008AE0 ADD R0,R10,R5 \ 000008A0 1A0000EF SWI +26 \ 000008A4 0400A0E1 MOV R0,R4 \ 000008A8 1B0000EF SWI +27 \ 000008AC 0090A0E1 MOV R9,R0 3505 TPKT *p=malloc(sizeof(PKT)+i); \ 000008B0 080089E2 ADD R0,R9,#+8 \ 000008B4 140000EF SWI +20 \ 000008B8 00A0A0E1 MOV R10,R0 3506 p->pkt.uin=UIN; \ 000008BC ........ LDR R0,??DataTable138 ;; UIN 3507 p->pkt.type=T_REQLOGIN; 3508 p->pkt.data_len=i; 3509 memcpy(p->data,PASS,i); \ 000008C0 0920A0E1 MOV R2,R9 \ 000008C4 00B090E5 LDR R11,[R0, #+0] \ 000008C8 0410A0E1 MOV R1,R4 \ 000008CC 00B08AE5 STR R11,[R10, #+0] \ 000008D0 B480CAE1 STRH R8,[R10, #+4] \ 000008D4 B690CAE1 STRH R9,[R10, #+6] \ 000008D8 08008AE2 ADD R0,R10,#+8 \ 000008DC 1E0100EF SWI +286 3510 SUBPROC((void *)send_login,0,p); \ 000008E0 6C019FE5 LDR R0,??maincsm_onmessage_7+0x48 ;; send_login \ 000008E4 0A20A0E1 MOV R2,R10 \ 000008E8 0010A0E3 MOV R1,#+0 \ 000008EC 710100EF SWI +369 3511 } 3512 GROUP_CACHE=0; \ 000008F0 746185E5 STR R6,[R5, #+372] 3513 SENDMSGCOUNT=0; //Начинаем отсчет \ 000008F4 106185E5 STR R6,[R5, #+272] 3514 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 000008F8 0600A0E1 MOV R0,R6 \ 000008FC ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000900 000050E3 CMP R0,#+0 \ 00000904 0100001A BNE ??maincsm_onmessage_47 \ 00000908 6D1F87E2 ADD R1,R7,#+436 \ 0000090C ........ _BLF AddGroup,??AddGroup??rA 3515 if (!FindContactByUin(UIN)) AddContact(UIN, LG_CLLOOPBACK); \ ??maincsm_onmessage_47: \ 00000910 0B00A0E1 MOV R0,R11 \ 00000914 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000918 000050E3 CMP R0,#+0 \ 0000091C 0200001A BNE ??maincsm_onmessage_48 \ 00000920 701F87E2 ADD R1,R7,#+448 \ 00000924 0B00A0E1 MOV R0,R11 \ 00000928 ........ _BLF AddContact,??AddContact??rA 3516 SMART_REDRAW(); \ ??maincsm_onmessage_48: \ 0000092C ........ BL SMART_REDRAW \ 00000930 B9FFFFEA B ??maincsm_onmessage_41 3517 } 3518 else 3519 { 3520 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_46: \ 00000934 731F87E2 ADD R1,R7,#+460 \ ??maincsm_onmessage_49: \ 00000938 0100A0E3 MOV R0,#+1 \ 0000093C 480100EF SWI +328 \ 00000940 B5FFFFEA B ??maincsm_onmessage_41 3521 } 3522 break; 3523 case ENIP_SOCK_DATA_READ: 3524 if (connect_state>=2) \ ??maincsm_onmessage_50: \ 00000944 020051E3 CMP R1,#+2 3525 { 3526 //Если посылали send 3527 SUBPROC((void *)get_answer); \ 00000948 08019FA5 LDRGE R0,??maincsm_onmessage_7+0x4C ;; get_answer \ 0000094C B1FFFFAA BGE ??maincsm_onmessage_42 3528 //SMART_REDRAW(); 3529 } 3530 else 3531 { 3532 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000950 7D1F87E2 ADD R1,R7,#+500 \ 00000954 F7FFFFEA B ??maincsm_onmessage_49 3533 } 3534 break; 3535 case ENIP_BUFFER_FREE: 3536 case ENIP_BUFFER_FREE1: 3537 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_51: \ 00000958 ........ LDR R0,??DataTable151 ;; SendAnswer \ 0000095C 0020A0E3 MOV R2,#+0 \ 00000960 0210A0E1 MOV R1,R2 \ 00000964 710100EF SWI +369 \ 00000968 ABFFFFEA B ??maincsm_onmessage_41 3538 break; 3539 case ENIP_SOCK_REMOTE_CLOSED: 3540 //Закрыт со стороны сервера 3541 if (connect_state) \ ??maincsm_onmessage_52: \ 0000096C 000051E3 CMP R1,#+0 \ 00000970 93FFFF0A BEQ ??maincsm_onmessage_36 3542 SUBPROC((void *)end_socket); \ 00000974 ........ LDR R0,??DataTable132 ;; end_socket \ 00000978 A6FFFFEA B ??maincsm_onmessage_42 3543 break; 3544 case ENIP_SOCK_CLOSED: 3545 //strcpy(logmsg, "No connection"); 3546 //Dump not received 3547 /* if (RXstate>(-(int)sizeof(PKT))) 3548 { 3549 unsigned int err; 3550 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 3551 if (f!=-1) 3552 { 3553 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 3554 fclose(f,&err); 3555 } 3556 }*/ 3557 FillAllOffline(); \ ??maincsm_onmessage_53: \ 0000097C ........ _BLF FillAllOffline,??FillAllOffline??rA 3558 RecountMenu(NULL, 1); \ 00000980 0110A0E3 MOV R1,#+1 \ 00000984 0600A0E1 MOV R0,R6 \ 00000988 ........ BL RecountMenu 3559 connect_state=0; \ 0000098C 506185E5 STR R6,[R5, #+336] 3560 sock=-1; \ 00000990 0600E0E1 MVN R0,R6 \ 00000994 540185E5 STR R0,[R5, #+340] 3561 if(VIBR_ON_CONNECT) \ 00000998 00005BE3 CMP R11,#+0 3562 vibra_count=4; \ 0000099C 0400A013 MOVNE R0,#+4 \ 000009A0 40018515 STRNE R0,[R5, #+320] 3563 else 3564 vibra_count=1; \ 000009A4 40818505 STREQ R8,[R5, #+320] 3565 3566 start_vibra(); \ 000009A8 ........ BL start_vibra 3567 if (sendq_p) \ 000009AC 6C0195E5 LDR R0,[R5, #+364] \ 000009B0 000050E3 CMP R0,#+0 \ 000009B4 0400000A BEQ ??maincsm_onmessage_54 3568 { 3569 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 000009B8 683195E5 LDR R3,[R5, #+360] \ 000009BC 862F87E2 ADD R2,R7,#+536 \ 000009C0 FF10A0E3 MOV R1,#+255 \ 000009C4 05008AE0 ADD R0,R10,R5 \ 000009C8 1B0100EF SWI +283 3570 } 3571 SMART_REDRAW(); \ ??maincsm_onmessage_54: \ 000009CC ........ BL SMART_REDRAW 3572 SUBPROC((void *)ClearSendQ); \ 000009D0 ........ LDR R0,??DataTable133 ;; ClearSendQ \ 000009D4 710100EF SWI +369 3573 if (!disautorecconect) \ 000009D8 200195E5 LDR R0,[R5, #+288] \ 000009DC 000050E3 CMP R0,#+0 \ 000009E0 77FFFF1A BNE ??maincsm_onmessage_36 3574 { 3575 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*10,do_reconnect); \ 000009E4 0920A0E1 MOV R2,R9 \ 000009E8 871EA0E3 MOV R1,#+2160 \ 000009EC 050084E0 ADD R0,R4,R5 \ 000009F0 4D0000EF SWI +77 3576 snprintf(logmsg,255,"%s\nReconect after 10 second...",logmsg); \ 000009F4 05308AE0 ADD R3,R10,R5 \ 000009F8 8F2F87E2 ADD R2,R7,#+572 \ 000009FC FF10A0E3 MOV R1,#+255 \ 00000A00 05008AE0 ADD R0,R10,R5 \ 00000A04 1B0100EF SWI +283 \ 00000A08 83FFFFEA B ??maincsm_onmessage_41 \ ??maincsm_onmessage_7: \ 00000A0C ........ DC32 CheckDoubleRun \ 00000A10 ........ DC32 ProcessNextSmile \ 00000A14 ........ DC32 ProcessNextXStatImg \ 00000A18 ........ DC32 IDLEICON_X \ 00000A1C ........ DC32 IDLEICON_Y \ 00000A20 ........ DC32 XStatusesIconArray \ 00000A24 ........ DC32 Is_Online_On \ 00000A28 ........ DC32 ONTIME_Y \ 00000A2C ........ DC32 ONTIME_X \ 00000A30 ........ DC32 PING_Y \ 00000A34 ........ DC32 PING_X \ 00000A38 ........ DC32 Is_Unread_On \ 00000A3C ........ DC32 UNREAD_Y \ 00000A40 ........ DC32 UNREAD_X \ 00000A44 ........ DC32 MSG_X \ 00000A48 ........ DC32 MSG_Y \ 00000A4C ........ DC32 spaco2 \ 00000A50 ........ DC32 PASS \ 00000A54 ........ DC32 send_login \ 00000A58 ........ DC32 get_answer 3577 } 3578 break; 3579 } 3580 } 3581 } 3582 return(1); 3583 } 3584 3585 3586 const int minus11=-11; 3587 \ In segment DATA_Z, align 4, align-sorted 3588 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ Canvas: \ 00000008 000000000000 DC16 0, 0, 0, 0 \ 0000 \ percent_t: \ 00000010 257400 DC8 "%t" \ percent_d: \ 00000013 256400 DC8 "%d" \ empty_str: \ 00000016 00 DC8 "" \ 00000017 00 DC8 0 \ 00000018 257325642E77 DC8 "%s%d.wav" \ 617600 \ 00000021 000000 DC8 0, 0, 0 \ 00000024 436F6D706C65 DC8 "Complete!\012Enabled for:\012%d / %d contacts" \ 7465210A456E \ 61626C656420 \ 666F723A0A25 \ 64202F202564 \ 20636F6E7461 \ 63747300 \ 0000004C CCE5EDFE203C DC8 "\314\345\355\376 " \ 4578743A2564 \ 2F25643E00 \ 0000005D 000000 DC8 0, 0, 0 \ 00000060 4F6E6C696E65 DC8 "Online time:\012%02d:%02d:%02d\012Server:\012%s" \ 2074696D653A \ 0A253032643A \ 253032643A25 \ 3032640A5365 \ 727665723A0A \ 257300 \ 00000087 00 DC8 0 \ 00000088 3E3E20257320 DC8 ">> %s <<" \ 3C3C00 \ 00000091 000000 DC8 0, 0, 0 \ 00000094 2563257400 DC8 "%c%t" \ 00000099 000000 DC8 0, 0, 0 \ 0000009C 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000000A4 EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 000000AB 00 DC8 0 \ 000000AC 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 000000B4 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 000000BC 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 000000C4 783A20256462 DC8 78H, 3AH, 20H, 25H, 64H, 62H, 2CH, 20H \ 2C20 \ 000000CC 54783A202564 DC8 54H, 78H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 000000D4 51756575653A DC8 51H, 75H, 65H, 75H, 65H, 3AH, 20H, 25H \ 2025 \ 000000DC 64620A25730A DC8 64H, 62H, 0AH, 25H, 73H, 0AH, 25H, 74H \ 2574 \ 000000E4 00 DC8 0 \ 000000E5 000000 DC8 0, 0, 0 \ 000000E8 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 000000FA 0000 DC8 0, 0 \ 000000FC 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 0000010F 00 DC8 0 \ 00000110 4578697400 DC8 "Exit" \ 00000115 000000 DC8 0, 0, 0 \ 00000118 434C69737400 DC8 "CList" \ 0000011E 0000 DC8 0, 0 \ 00000120 4D6F64206279 DC8 "Mod by Evilfox 2nd" \ 204576696C66 \ 6F7820326E64 \ 00 \ 00000133 00 DC8 0 \ `?`: \ 00000134 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000139 000000 DC8 0, 0, 0 \ 0000013C 6F6E6C696E65 DC8 "online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 00000153 00 DC8 0 \ 00000154 4F66666C696E DC8 "Offline" \ 6500 \ 0000015C 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 00000167 00 DC8 0 \ 00000168 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 0000017F 00 DC8 0 \ 00000180 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 0000018B 00 DC8 0 \ 0000018C 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000001A4 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000001B4 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000001C0 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000001C9 000000 DC8 0, 0, 0 \ 000001CC 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 \ 000001F4 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 \ 00000216 0000 DC8 0, 0 \ 00000218 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 0000023B 00 DC8 0 \ 0000023C 25730A526563 DC8 "%s\012Reconect after 10 second..." \ 6F6E65637420 \ 616674657220 \ 313020736563 \ 6F6E642E2E2E \ 00 \ 0000025B 00 DC8 0 \ 0000025C 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 00000267 00 DC8 0 \ 00000268 C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ 0000027C 50696E673A20 DC8 "Ping: none" \ 6E6F6E6500 \ 00000287 00 DC8 0 \ ipc_my_name: \ 00000288 4E6174494351 DC8 "NatICQ" \ 00 \ 0000028F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000029F 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000002A8 585461736B00 DC8 "XTask" \ 000002AE 0000 DC8 0, 0 \ x_status_change: \ 000002B0 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ gui_methods: \ 000002C0 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 000002DC ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 3589 3590 const struct 3591 { 3592 CSM_DESC maincsm; 3593 WSHDR maincsm_name; 3594 }MAINCSM = \ MAINCSM: \ 000002EC ............ DC32 maincsm_onmessage, maincsm_oncreate, maincsm_onclose, 44, 1 \ ............ \ 2C0000000100 \ 0000 \ 00000300 ............ DC32 minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ ....CCCCAA55 \ 55AA33330000 \ 0000 \ 00000314 8B00 DC16 139 \ 00000316 0000 DC8 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 \ `?` \ 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 \ minus11: \ 00000000 F5FFFFFF DC32 -11 3595 { 3596 { 3597 maincsm_onmessage, 3598 maincsm_oncreate, 3599 #ifdef NEWSGOLD 3600 0, 3601 0, 3602 0, 3603 0, 3604 #endif 3605 maincsm_onclose, 3606 sizeof(MAIN_CSM), 3607 1, 3608 &minus11 3609 }, 3610 { 3611 maincsm_name_body, 3612 NAMECSM_MAGIC1, 3613 NAMECSM_MAGIC2, 3614 0x0, 3615 139 3616 } 3617 }; 3618 \ In segment CODE, align 4, keep-with-next 3619 void UpdateCSMname(void) 3620 { 3621 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable137 ;; `?` \ 00000004 ........ LDR R1,??DataTable138 ;; UIN \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002091E5 LDR R2,[R1, #+0] \ 00000010 971F80E2 ADD R1,R0,#+604 \ 00000014 C10F80E2 ADD R0,R0,#+772 \ 00000018 240100EF SWI +292 3622 } \ 0000001C 0080BDE8 POP {PC} ;; return 3623 3624 \ In segment CODE, align 4, keep-with-next 3625 int main(char *filename) 3626 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 3627 MAIN_CSM main_csm; 3628 char *s; 3629 int len; 3630 extern const char *successed_config_filename; 3631 WSHDR *ws; 3632 3633 InitConfig(); 3634 s=strrchr(filename,'\\'); 3635 len=(s-filename)+1; 3636 strncpy(elf_path,filename,len); \ 00000004 ........ LDR R4,??DataTable136 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 ........ _BLF InitConfig,??InitConfig??rA \ 00000014 5C10A0E3 MOV R1,#+92 \ 00000018 0500A0E1 MOV R0,R5 \ 0000001C 170100EF SWI +279 \ 00000020 050040E0 SUB R0,R0,R5 \ 00000024 016080E2 ADD R6,R0,#+1 \ 00000028 0620A0E1 MOV R2,R6 \ 0000002C 0510A0E1 MOV R1,R5 3637 elf_path[len]=0; 3638 if (!UIN) \ 00000030 ........ LDR R5,??DataTable137 ;; `?` \ 00000034 770F84E2 ADD R0,R4,#+476 \ 00000038 160100EF SWI +278 \ 0000003C 040086E0 ADD R0,R6,R4 \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 DC11C0E5 STRB R1,[R0, #+476] \ 00000048 ........ LDR R0,??DataTable138 ;; UIN \ 0000004C 000090E5 LDR R0,[R0, #+0] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 1500001A BNE ??main_0 3639 { 3640 LockSched(); \ 00000058 460100EF SWI +326 3641 ShowMSG(1,(int)LG_MSGNOUINPASS); \ 0000005C 9A1F85E2 ADD R1,R5,#+616 \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 480100EF SWI +328 3642 ws=AllocWS(150); \ 00000068 9600A0E3 MOV R0,#+150 \ 0000006C 250100EF SWI +293 \ 00000070 0040A0E1 MOV R4,R0 3643 str_2ws(ws,successed_config_filename,128); \ 00000074 ........ LDR R0,??DataTable139 ;; successed_config_filename \ 00000078 8020A0E3 MOV R2,#+128 \ 0000007C 001090E5 LDR R1,[R0, #+0] \ 00000080 0400A0E1 MOV R0,R4 \ 00000084 6C0100EF SWI +364 3644 ExecuteFile(ws,0,0); \ 00000088 0020A0E3 MOV R2,#+0 \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0400A0E1 MOV R0,R4 \ 00000094 940000EF SWI +148 3645 UnlockSched(); \ 00000098 470100EF SWI +327 3646 SUBPROC((void *)ElfKiller); \ 0000009C ........ LDR R0,??DataTable140 ;; ElfKiller \ 000000A0 710100EF SWI +369 3647 return 0; \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 3648 } 3649 ReadDefSettings(); 3650 setup_ICONS(); 3651 LoadXStatusText(); 3652 UpdateCSMname(); 3653 LockSched(); 3654 maincsm_id=CreateCSM(&MAINCSM.maincsm,&main_csm,0); 3655 UnlockSched(); 3656 #ifdef EVILFOX 3657 time_counter(); 3658 FontPathInit(fonto,(char *)fontpath, 1); \ ??main_0: \ 000000B0 ........ LDR R7,??DataTable141 ;; fontpath \ 000000B4 ........ BL ReadDefSettings \ 000000B8 ........ BL setup_ICONS \ 000000BC ........ _BLF LoadXStatusText,??LoadXStatusText??rA \ 000000C0 ........ BL UpdateCSMname \ 000000C4 460100EF SWI +326 \ 000000C8 0020A0E3 MOV R2,#+0 \ 000000CC 0D10A0E1 MOV R1,SP \ 000000D0 BB0F85E2 ADD R0,R5,#+748 \ 000000D4 070100EF SWI +263 \ 000000D8 080184E5 STR R0,[R4, #+264] \ 000000DC 470100EF SWI +327 \ 000000E0 ........ BL time_counter \ 000000E4 ........ LDR R0,??DataTable142 ;; fonto \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC 006090E5 LDR R6,[R0, #+0] \ 000000F0 0710A0E1 MOV R1,R7 \ 000000F4 0600A0E1 MOV R0,R6 \ 000000F8 ........ _BLF FontPathInit,??FontPathInit??rA 3659 if(fonto==1) \ 000000FC 010056E3 CMP R6,#+1 \ 00000100 0E00001A BNE ??main_1 3660 { 3661 spaco1r=spaco1; \ 00000104 ........ LDR R0,??DataTable143 ;; spaco1 \ 00000108 000090E5 LDR R0,[R0, #+0] \ 0000010C B00084E5 STR R0,[R4, #+176] 3662 char *heght=malloc(64); \ 00000110 4000A0E3 MOV R0,#+64 \ 00000114 140000EF SWI +20 \ 00000118 0060A0E1 MOV R6,R0 3663 sprintf(heght, "%s2240.png", fontpath); \ 0000011C 0720A0E1 MOV R2,R7 \ 00000120 601F85E2 ADD R1,R5,#+384 \ 00000124 160000EF SWI +22 3664 paused_height=GetImgHeight((int)heght); \ 00000128 0600A0E1 MOV R0,R6 \ 0000012C 210000EF SWI +33 \ 00000130 D80084E5 STR R0,[R4, #+216] 3665 mfree(heght); \ 00000134 0600A0E1 MOV R0,R6 \ 00000138 150000EF SWI +21 \ 0000013C 080000EA B ??main_2 3666 } 3667 else 3668 { 3669 spaco1r=10001+(system_color*100); \ ??main_1: \ 00000140 ........ LDR R0,??DataTable144 ;; system_color \ 00000144 6410A0E3 MOV R1,#+100 \ 00000148 000090E5 LDR R0,[R0, #+0] \ 0000014C 1120A0E3 MOV R2,#+17 \ 00000150 9C2D82E3 ORR R2,R2,#0x2700 \ 00000154 912020E0 MLA R0,R1,R0,R2 \ 00000158 B00084E5 STR R0,[R4, #+176] 3670 paused_height=fonto-100; \ 0000015C 640046E2 SUB R0,R6,#+100 \ 00000160 D80084E5 STR R0,[R4, #+216] 3671 } 3672 sprintf(ping_txt, "Ping: none"); \ ??main_2: \ 00000164 9F1F85E2 ADD R1,R5,#+636 \ 00000168 D80F84E2 ADD R0,R4,#+864 \ 0000016C 160000EF SWI +22 3673 init_time_zone(); \ 00000170 ........ BL init_time_zone 3674 AddKeybMsgHook((void *)my_keyhook); \ 00000174 ........ LDR R0,??DataTable145 ;; my_keyhook \ 00000178 2B0100EF SWI +299 3675 #endif 3676 return 0; \ 0000017C 0000A0E3 MOV R0,#+0 \ 00000180 2CD08DE2 ADD SP,SP,#+44 \ 00000184 F080BDE8 POP {R4-R7,PC} ;; return 3677 } 3678 3679 //=========================================================== 3680 // Edit chat 3681 //=========================================================== \ In segment CODE, align 4, keep-with-next 3682 void edchat_locret(void){} \ edchat_locret: \ 00000000 1EFF2FE1 BX LR ;; return 3683 \ In segment CODE, align 4, keep-with-next 3684 char *ExtractAnswer(WSHDR *ws) 3685 { \ ExtractAnswer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3686 S_SMILES *t; 3687 int c; 3688 int len=0; 3689 int scur; 3690 char *msg=NULL; 3691 unsigned short *wsbody=ws->wsbody; \ 00000004 008090E5 LDR R8,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 3692 int wslen=wsbody[0]; \ 0000000C B060D8E1 LDRH R6,[R8, #+0] \ 00000010 0050A0E3 MOV R5,#+0 3693 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 2E00000A BEQ ??ExtractAnswer_0 3694 { 3695 for (int i=0; i=0xE100) \ 00000030 E10C57E3 CMP R7,#+57600 \ 00000034 0A0000BA BLT ??ExtractAnswer_3 3699 { 3700 t=FindSmileByUni(c); \ 00000038 0700A0E1 MOV R0,R7 \ 0000003C ........ _BLF FindSmileByUni,??FindSmileByUni??rA 3701 if (t) \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0600000A BEQ ??ExtractAnswer_3 3702 { 3703 if (t->lines) \ 00000048 080090E5 LDR R0,[R0, #+8] \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 0400000A BEQ ??ExtractAnswer_4 3704 { 3705 len+=strlen(t->lines->text); \ 00000054 0C0080E2 ADD R0,R0,#+12 \ 00000058 1B0000EF SWI +27 \ 0000005C 044080E0 ADD R4,R0,R4 \ 00000060 000000EA B ??ExtractAnswer_4 3706 } 3707 } 3708 else len++; \ ??ExtractAnswer_3: \ 00000064 014084E2 ADD R4,R4,#+1 3709 } 3710 else len++; 3711 } \ ??ExtractAnswer_4: \ 00000068 025085E2 ADD R5,R5,#+2 \ 0000006C 019059E2 SUBS R9,R9,#+1 \ 00000070 EDFFFF1A BNE ??ExtractAnswer_2 3712 3713 msg=malloc(len+1); \ ??ExtractAnswer_1: \ 00000074 010084E2 ADD R0,R4,#+1 \ 00000078 140000EF SWI +20 \ 0000007C 0050A0E1 MOV R5,R0 3714 scur=0; \ 00000080 0090A0E3 MOV R9,#+0 3715 for (int wcur=0; wcur=0xE100) 3720 { 3721 t=FindSmileByUni(c); 3722 if (t) 3723 { 3724 int w; 3725 char *s; 3726 if (t->lines) 3727 { 3728 s=t->lines->text; 3729 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 3756 { 3757 if (t->isactive) return t; \ 0000000C 7C1090E5 LDR R1,[R0, #+124] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 3758 } 3759 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable147 ;; S_ICONS + 144 \ 00000020 020000EA B ??FindNextActiveContact_2 3760 while(t=(CLIST *)(t->next)) 3761 { 3762 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 7C1090E5 LDR R1,[R0, #+124] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 3763 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 3764 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 3765 } 3766 \ In segment CODE, align 4, keep-with-next 3767 CLIST *FindPrevActiveContact(CLIST *t) 3768 { 3769 CLIST *cl; 3770 CLIST *cl_active=NULL; 3771 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable147 ;; S_ICONS + 144 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 3772 3773 3774 while(cl=cl->next) 3775 { 3776 if (cl==t) 3777 { 3778 if (cl_active==NULL) break; 3779 else return (cl_active); 3780 } 3781 else 3782 { 3783 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 7C3092E5 LDR R3,[R2, #+124] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 3784 } \ ??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 3785 } 3786 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 3787 { 3788 if (t->isactive) cl_active=t; \ 00000044 7C2090E5 LDR R2,[R0, #+124] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 3789 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 3790 } 3791 return cl_active; 3792 } 3793 3794 \ In segment CODE, align 4, keep-with-next 3795 void ed_options_handler(USR_MENU_ITEM *item) 3796 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 3797 EDCHAT_STRUCT *ed_struct=item->user_pointer; 3798 CLIST *t; 3799 int i=item->cur_item; 3800 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable153 ;; 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 3801 { 3802 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ws,LG_MNUEDNEXTACT); 3806 break; 3807 case 1: 3808 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 3809 break; 3810 default: 3811 i-=2; 3812 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 481195E5 LDR R1,[R5, #+328] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 3813 break; 3814 } 3815 } 3816 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 3817 { 3818 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 3819 { 3820 case 0: 3821 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 3822 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 3823 { 3824 GeneralFunc_flag1(edchat_id,1); \ 00000094 7C0195E5 LDR R0,[R5, #+380] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 3825 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 3826 } 3827 break; 3828 case 1: 3829 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 3830 if (t && t!=ed_struct->ed_contact) 3831 { 3832 GeneralFunc_flag1(edchat_id,1); 3833 CreateEditChat(t); 3834 } 3835 break; 3836 default: 3837 i-=2; 3838 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 3839 { 3840 EDITCONTROL ec; 3841 WSHDR *ed_ws; 3842 int c; 3843 char *p=templates_lines[i]; \ 000000CC 480195E5 LDR R0,[R5, #+328] 3844 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 3845 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 3846 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 3847 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 3848 { 3849 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 3850 while(c=*p++) 3851 { 3852 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 3853 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 3854 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 3855 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 3856 } 3857 else 3858 { 3859 while(c=*p++) 3860 { 3861 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 3862 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 3863 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 3864 } 3865 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 3866 } 3867 break; 3868 } 3869 } 3870 } \ ??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 `?lines; 3887 while(st) 3888 { 3889 if ((ulb&st->mask)==st->key) 3890 { 3891 if (!strncmp(s,st->text,strlen(st->text))) goto L1; 3892 } 3893 st=st->next; 3894 } 3895 t=t->next; 3896 } 3897 L1: 3898 if (t) 3899 { 3900 wchar=t->uni_smile; \ ??ParseAnswer_2: \ 00000044 04909AE5 LDR R9,[R10, #+4] 3901 s+=strlen(st->text); \ 00000048 0C0084E2 ADD R0,R4,#+12 \ 0000004C 1B0000EF SWI +27 \ 00000050 066080E0 ADD R6,R0,R6 3902 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000054 0000D6E5 LDRB R0,[R6, #+0] \ 00000058 0110D6E5 LDRB R1,[R6, #+1] \ 0000005C 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000060 0210D6E5 LDRB R1,[R6, #+2] \ 00000064 010880E0 ADD R0,R0,R1, LSL #+16 \ 00000068 0310D6E5 LDRB R1,[R6, #+3] \ 0000006C 018C80E0 ADD R8,R0,R1, LSL #+24 3903 } 3904 else 3905 { 3906 wchar=char8to16(wchar); 3907 s++; 3908 ulb>>=8; 3909 ulb+=s[3]<<24; 3910 } 3911 if (wchar!=10) wsAppendChar(ws,wchar); \ ??ParseAnswer_3: \ 00000070 0A0059E3 CMP R9,#+10 \ 00000074 0200000A BEQ ??ParseAnswer_1 \ 00000078 0910A0E1 MOV R1,R9 \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 1C0000EF SWI +28 \ ??ParseAnswer_1: \ 00000084 0090D6E5 LDRB R9,[R6, #+0] \ 00000088 000059E3 CMP R9,#+0 \ 0000008C 2F00000A BEQ ??ParseAnswer_4 \ 00000090 07A0A0E1 MOV R10,R7 \ 00000094 220000EA B ??ParseAnswer_5 \ ??ParseAnswer_6: \ 00000098 0B00D4E5 LDRB R0,[R4, #+11] \ 0000009C 0A10D4E5 LDRB R1,[R4, #+10] \ 000000A0 0620D4E5 LDRB R2,[R4, #+6] \ 000000A4 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000A8 0910D4E5 LDRB R1,[R4, #+9] \ 000000AC 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000B0 0810D4E5 LDRB R1,[R4, #+8] \ 000000B4 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000B8 0710D4E5 LDRB R1,[R4, #+7] \ 000000BC 080000E0 AND R0,R0,R8 \ 000000C0 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000C4 0520D4E5 LDRB R2,[R4, #+5] \ 000000C8 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000CC 0420D4E5 LDRB R2,[R4, #+4] \ 000000D0 011482E1 ORR R1,R2,R1, LSL #+8 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 0700001A BNE ??ParseAnswer_7 \ 000000DC 0C0084E2 ADD R0,R4,#+12 \ 000000E0 1B0000EF SWI +27 \ 000000E4 0020A0E1 MOV R2,R0 \ 000000E8 0C1084E2 ADD R1,R4,#+12 \ 000000EC 0600A0E1 MOV R0,R6 \ 000000F0 150100EF SWI +277 \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 D1FFFF0A BEQ ??ParseAnswer_2 \ ??ParseAnswer_7: \ 000000FC 0D00A0E1 MOV R0,SP \ 00000100 0410A0E3 MOV R1,#+4 \ ??ParseAnswer_8: \ 00000104 ........ LDRB R2,[R4], #+1 \ 00000108 011051E2 SUBS R1,R1,#+1 \ 0000010C ........ STRB R2,[R0], #+1 \ 00000110 FBFFFF1A BNE ??ParseAnswer_8 \ 00000114 00409DE5 LDR R4,[SP, #+0] \ ??ParseAnswer_9: \ 00000118 000054E3 CMP R4,#+0 \ 0000011C DDFFFF1A BNE ??ParseAnswer_6 \ 00000120 00A09AE5 LDR R10,[R10, #+0] \ ??ParseAnswer_5: \ 00000124 00005AE3 CMP R10,#+0 \ 00000128 08409A15 LDRNE R4,[R10, #+8] \ 0000012C F9FFFF1A BNE ??ParseAnswer_9 \ 00000130 0900A0E1 MOV R0,R9 \ 00000134 ........ _BLF char8to16,??char8to16??rA \ 00000138 0090A0E1 MOV R9,R0 \ 0000013C 016086E2 ADD R6,R6,#+1 \ 00000140 0300D6E5 LDRB R0,[R6, #+3] \ 00000144 000CA0E1 LSL R0,R0,#+24 \ 00000148 288480E0 ADD R8,R0,R8, LSR #+8 \ 0000014C C7FFFFEA B ??ParseAnswer_3 3912 } 3913 i=ws->wsbody[0]; \ ??ParseAnswer_4: \ 00000150 000095E5 LDR R0,[R5, #+0] \ 00000154 B010D0E1 LDRH R1,[R0, #+0] \ 00000158 020051E3 CMP R1,#+2 \ 0000015C F187BDB8 POPLT {R0,R4-R10,PC} 3914 while(i>1) 3915 { 3916 if (ws->wsbody[i--]!=13) break; \ ??ParseAnswer_10: \ 00000160 0120A0E1 MOV R2,R1 \ 00000164 011042E2 SUB R1,R2,#+1 \ 00000168 822080E0 ADD R2,R0,R2, LSL #+1 \ 0000016C B020D2E1 LDRH R2,[R2, #+0] \ 00000170 0D0052E3 CMP R2,#+13 \ 00000174 F187BD18 POPNE {R0,R4-R10,PC} 3917 ws->wsbody[0]=i; \ 00000178 B010C0E1 STRH R1,[R0, #+0] 3918 } \ 0000017C 020051E3 CMP R1,#+2 \ 00000180 F6FFFFAA BGE ??ParseAnswer_10 3919 } \ 00000184 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000188 ........ DC32 s_top 3920 \ In segment CODE, align 4, keep-with-next 3921 void SaveAnswer(CLIST *cl, WSHDR *ws) 3922 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 3923 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 3924 mfree(cl->answer); \ 00000014 740094E5 LDR R0,[R4, #+116] \ 00000018 150000EF SWI +21 3925 cl->answer=p; \ 0000001C 745084E5 STR R5,[R4, #+116] 3926 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 3927 \ In segment CODE, align 4, keep-with-next 3928 int edchat_onkey(GUI *data, GUI_MSG *msg) 3929 { \ edchat_onkey: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3930 //-1 - do redraw 3931 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R7,??DataTable153 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 0190A0E1 MOV R9,R1 \ 00000014 8D0E87E2 ADD R0,R7,#+2256 \ 00000018 8C0100EF SWI +396 3932 CLIST *t; 3933 TPKT *p; 3934 EDITCONTROL ec; 3935 int len; 3936 char *s; 3937 int l=msg->gbsmsg->submess; \ 0000001C 040099E5 LDR R0,[R9, #+4] \ 00000020 048090E5 LDR R8,[R0, #+4] 3938 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 00000024 0500A0E1 MOV R0,R5 \ 00000028 DF0100EF SWI +479 \ 0000002C 0060A0E1 MOV R6,R0 3939 3940 if (msg->keys==0xFFF) \ 00000030 F200D9E1 LDRSH R0,[R9, #+2] \ 00000034 FF10A0E3 MOV R1,#+255 \ 00000038 F01E81E3 ORR R1,R1,#0xF00 \ 0000003C 010050E1 CMP R0,R1 \ 00000040 0200001A BNE ??edchat_onkey_0 3941 { 3942 void ec_menu(EDCHAT_STRUCT *); 3943 ec_menu(ed_struct); \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 ........ BL ec_menu 3944 return(-1); \ 0000004C 8B0000EA B ??edchat_onkey_1 3945 } 3946 if (msg->keys==0xFF0) return (1); \ ??edchat_onkey_0: \ 00000050 FF0E50E3 CMP R0,#+4080 \ 00000054 0100001A BNE ??edchat_onkey_2 \ 00000058 0100A0E3 MOV R0,#+1 \ 0000005C 880000EA B ??edchat_onkey_3 3947 if (msg->gbsmsg->msg==LONG_PRESS) \ ??edchat_onkey_2: \ 00000060 040099E5 LDR R0,[R9, #+4] \ 00000064 9510A0E3 MOV R1,#+149 \ 00000068 F200D0E1 LDRSH R0,[R0, #+2] \ 0000006C 401F81E3 ORR R1,R1,#0x100 \ 00000070 010050E1 CMP R0,R1 3948 { 3949 #ifdef ELKA 3950 if (l==VOL_DOWN_BUTTON) 3951 { 3952 WSHDR *ws; 3953 ExtractEditControl(data,ed_struct->ed_answer,&ec); 3954 if(wstrlen(ec.pWS)>0) 3955 { 3956 ws=AllocWS(1); 3957 CutWSTR(ws,0); 3958 3959 EDIT_SetFocus(data,ed_struct->ed_answer); 3960 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 3961 3962 FreeWS(ws); 3963 RefreshGUI(); 3964 } 3965 } 3966 if (l==VOL_UP_BUTTON) 3967 { 3968 // WSHDR *ws=AllocWS(strlen(ed_struct->ed_contact->last_msg_buffer)+1); 3969 // ascii2ws(ws,ed_struct->ed_contact->last_msg_buffer); 3970 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 3971 ascii2ws(ws,last_msg_buffer); 3972 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 3973 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 3974 FreeWS(ws); 3975 RefreshGUI(); 3976 } 3977 #else 3978 if (l==RIGHT_BUTTON) \ 00000074 3E005803 CMPEQ R8,#+62 \ 00000078 1800001A BNE ??edchat_onkey_4 3979 { 3980 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 820100EF SWI +386 \ 00000084 081096E5 LDR R1,[R6, #+8] \ 00000088 010050E1 CMP R0,R1 \ 0000008C 1300001A BNE ??edchat_onkey_4 3981 { 3982 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000090 0D20A0E1 MOV R2,SP \ 00000094 0500A0E1 MOV R0,R5 \ 00000098 690100EF SWI +361 3983 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 D30100EF SWI +467 \ 000000A4 28109DE5 LDR R1,[SP, #+40] \ 000000A8 010040E2 SUB R0,R0,#+1 \ 000000AC 001091E5 LDR R1,[R1, #+0] \ 000000B0 B010D1E1 LDRH R1,[R1, #+0] \ 000000B4 000051E1 CMP R1,R0 \ 000000B8 0800001A BNE ??edchat_onkey_4 3984 { 3985 t=FindNextActiveContact(ed_struct->ed_contact); \ 000000BC 00A096E5 LDR R10,[R6, #+0] \ 000000C0 0A00A0E1 MOV R0,R10 \ 000000C4 ........ BL FindNextActiveContact \ 000000C8 0040B0E1 MOVS R4,R0 3986 if (t && t!=ed_struct->ed_contact) \ 000000CC 0A005011 CMPNE R0,R10 \ 000000D0 0200000A BEQ ??edchat_onkey_4 3987 { 3988 CreateEditChat(t); \ 000000D4 ........ BL CreateEditChat 3989 return(1); \ 000000D8 0100A0E3 MOV R0,#+1 \ 000000DC 680000EA B ??edchat_onkey_3 3990 } 3991 } 3992 } 3993 } 3994 #endif 3995 } 3996 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_4: \ 000000E0 040099E5 LDR R0,[R9, #+4] \ 000000E4 9310A0E3 MOV R1,#+147 \ 000000E8 F200D0E1 LDRSH R0,[R0, #+2] \ 000000EC 401F81E3 ORR R1,R1,#0x100 \ 000000F0 010050E1 CMP R0,R1 \ 000000F4 0A00001A BNE ??edchat_onkey_5 3997 { 3998 if ((l>='0')&&(l<='9')) \ 000000F8 300058E3 CMP R8,#+48 \ 000000FC 0B0000BA BLT ??edchat_onkey_6 \ 00000100 3A0058E3 CMP R8,#+58 \ 00000104 060000AA BGE ??edchat_onkey_5 3999 { 4000 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000108 0500A0E1 MOV R0,R5 \ 0000010C 820100EF SWI +386 \ 00000110 081096E5 LDR R1,[R6, #+8] \ 00000114 010050E1 CMP R0,R1 \ 00000118 0100000A BEQ ??edchat_onkey_5 4001 EDIT_SetFocus(data,ed_struct->ed_answer); \ 0000011C 0500A0E1 MOV R0,R5 \ 00000120 9B0100EF SWI +411 4002 } 4003 if (l==GREEN_BUTTON) 4004 { 4005 if (connect_state==3) 4006 { 4007 if ((t=ed_struct->ed_contact)) 4008 { 4009 ExtractEditControl(data,ed_struct->ed_answer,&ec); 4010 SaveAnswer(t,ec.pWS); 4011 if ((s=t->answer)) 4012 { 4013 if ((len=strlen(s))) 4014 { 4015 t->isactive=ACTIVE_TIME; 4016 p=malloc(sizeof(PKT)+len+1); 4017 p->pkt.uin=t->uin; 4018 p->pkt.type=T_SENDMSG; 4019 p->pkt.data_len=len; 4020 strcpy(p->data,s); 4021 #ifdef ELKA 4022 strcpy(last_msg_buffer, s); 4023 #endif 4024 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF); //Номер сообщения 4025 out_count++; 4026 SUBPROC((void *)SendAnswer,0,p); 4027 mfree(t->answer); 4028 t->answer=NULL; 4029 // request_remake_edchat=1; 4030 EDIT_SetFocus(data,ed_struct->ed_answer); 4031 CutWSTR(ews,0); 4032 EDIT_SetTextToFocused(data,ews); 4033 AddMsgToChat(data); 4034 RecountMenu(t, 1); 4035 return(-1); 4036 } 4037 } 4038 } 4039 } 4040 } 4041 if (l==ENTER_BUTTON) 4042 { 4043 // t=FindNextActiveContact(ed_struct->ed_contact); 4044 // if ((t!=ed_struct->ed_contact) && t) 4045 { 4046 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 4047 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 4048 return (-1); 4049 } 4050 } 4051 if (l==VOL_UP_BUTTON) 4052 { 4053 int pos; 4054 4055 if ((pos=EDIT_GetFocus(data)-2)>=2) 4056 { 4057 EDIT_SetFocus(data, pos); 4058 EDIT_SetCursorPos(data, 1); 4059 } 4060 return (-1); 4061 } 4062 if (l==VOL_DOWN_BUTTON) 4063 { 4064 int pos; 4065 4066 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 4067 { 4068 EDIT_SetFocus(data, pos); 4069 EDIT_SetCursorPos(data, 1); 4070 } 4071 return (-1); 4072 } 4073 } 4074 return(0); //Do standart keys \ ??edchat_onkey_5: \ 00000124 0000A0E3 MOV R0,#+0 \ 00000128 2CD08DE2 ADD SP,SP,#+44 \ 0000012C F087BDE8 POP {R4-R10,PC} ;; return \ ??edchat_onkey_6: \ 00000130 004096E5 LDR R4,[R6, #+0] \ 00000134 0B0058E3 CMP R8,#+11 \ 00000138 4600001A BNE ??edchat_onkey_7 \ 0000013C 500197E5 LDR R0,[R7, #+336] \ 00000140 030050E3 CMP R0,#+3 \ 00000144 F6FFFF1A BNE ??edchat_onkey_5 \ 00000148 000054E3 CMP R4,#+0 \ 0000014C F4FFFF0A BEQ ??edchat_onkey_5 \ 00000150 081096E5 LDR R1,[R6, #+8] \ 00000154 0D20A0E1 MOV R2,SP \ 00000158 0500A0E1 MOV R0,R5 \ 0000015C 690100EF SWI +361 \ 00000160 28109DE5 LDR R1,[SP, #+40] \ 00000164 0400A0E1 MOV R0,R4 \ 00000168 ........ BL SaveAnswer \ 0000016C 748094E5 LDR R8,[R4, #+116] \ 00000170 000058E3 CMP R8,#+0 \ 00000174 EAFFFF0A BEQ ??edchat_onkey_5 \ 00000178 0800A0E1 MOV R0,R8 \ 0000017C 1B0000EF SWI +27 \ 00000180 0090B0E1 MOVS R9,R0 \ 00000184 E6FFFF0A BEQ ??edchat_onkey_5 \ 00000188 1E00A0E3 MOV R0,#+30 \ 0000018C 7C0084E5 STR R0,[R4, #+124] \ 00000190 090089E2 ADD R0,R9,#+9 \ 00000194 140000EF SWI +20 \ 00000198 00A0A0E1 MOV R10,R0 \ 0000019C 0C0094E5 LDR R0,[R4, #+12] \ 000001A0 0810A0E1 MOV R1,R8 \ 000001A4 00008AE5 STR R0,[R10, #+0] \ 000001A8 0200A0E3 MOV R0,#+2 \ 000001AC B400CAE1 STRH R0,[R10, #+4] \ 000001B0 B690CAE1 STRH R9,[R10, #+6] \ 000001B4 08008AE2 ADD R0,R10,#+8 \ 000001B8 1A0000EF SWI +26 \ 000001BC 100197E5 LDR R0,[R7, #+272] \ 000001C0 ........ LDR R3,??DataTable175 ;; `?ed_contact)); \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C ........ BL GetIconIndex \ 00000040 005194E7 LDR R5,[R4, +R0, LSL #+2] 4095 ((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] 4096 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 4097 #else 4098 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); 4099 width=GetImgWidth(icon); 4100 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); 4101 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 4102 GetPaletteAdrByColorIndex(0), 4103 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 4104 #endif 4105 } 4106 } 4107 } \ 00000080 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_ed_redraw_1: \ 00000084 ........ DC32 edchat_desc + 60 4108 \ In segment CODE, align 4, keep-with-next 4109 void edchat_ghook(GUI *data, int cmd) 4110 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 4111 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 4112 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 4113 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 4114 int j; 4115 EDITCONTROL ec; 4116 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 4117 PNGTOP_DESC *pltop=PNG_TOP(); 4118 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable153 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 0180A0E1 MOV R8,R1 \ 00000014 DF0100EF SWI +479 \ 00000018 0070A0E1 MOV R7,R0 \ 0000001C B98100EF SWI +33209 \ 00000020 0090A0E1 MOV R9,R0 \ 00000024 0060A0E3 MOV R6,#+0 \ 00000028 090058E3 CMP R8,#+9 \ 0000002C 0300001A BNE ??edchat_ghook_0 4119 { 4120 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 8D0E84E2 ADD R0,R4,#+2256 \ 00000034 8C0100EF SWI +396 4121 pltop->dyn_pltop=NULL; \ 00000038 086089E5 STR R6,[R9, #+8] \ 0000003C 170000EA B ??edchat_ghook_1 4122 } 4123 if (cmd==2) \ ??edchat_ghook_0: \ 00000040 081097E5 LDR R1,[R7, #+8] \ 00000044 020058E3 CMP R8,#+2 \ 00000048 1600001A BNE ??edchat_ghook_2 4124 { 4125 ed_struct->ed_chatgui=data; \ 0000004C 045087E5 STR R5,[R7, #+4] 4126 // edgui_data=data; 4127 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 9B0100EF SWI +411 4128 4129 static void *methods[16]; 4130 void **m=GetDataOfItemByID(data,2); \ 00000058 0210A0E3 MOV R1,#+2 \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 4F0100EF SWI +335 \ 00000064 0050B0E1 MOVS R5,R0 4131 if (m) 4132 { 4133 if (m[1]) \ 00000068 04009515 LDRNE R0,[R5, #+4] \ 0000006C 00005013 CMPNE R0,#+0 \ 00000070 6300000A BEQ ??edchat_ghook_3 4134 { 4135 memcpy(methods,m[1],sizeof(methods)); \ 00000074 676FA0E3 MOV R6,#+412 \ 00000078 4020A0E3 MOV R2,#+64 \ 0000007C 0010A0E1 MOV R1,R0 \ 00000080 040086E0 ADD R0,R6,R4 \ 00000084 1E0100EF SWI +286 4136 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000088 040096E7 LDR R0,[R6, +R4] \ 0000008C 980184E5 STR R0,[R4, #+408] 4137 methods[0]=(void *)my_ed_redraw; \ 00000090 74019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 00000094 040086E7 STR R0,[R6, +R4] 4138 m[1]=methods; \ 00000098 040086E0 ADD R0,R6,R4 \ 0000009C 040085E5 STR R0,[R5, #+4] \ ??edchat_ghook_1: \ 000000A0 2CD08DE2 ADD SP,SP,#+44 \ 000000A4 F083BDE8 POP {R4-R9,PC} 4139 } 4140 } 4141 } 4142 if (cmd==3) \ ??edchat_ghook_2: \ 000000A8 030058E3 CMP R8,#+3 \ 000000AC 0E00001A BNE ??edchat_ghook_5 4143 { 4144 // if (edgui_data==data) edgui_data=NULL; 4145 if (ed_struct->ed_contact) \ 000000B0 000097E5 LDR R0,[R7, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0500000A BEQ ??edchat_ghook_6 4146 { 4147 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000BC 0D20A0E1 MOV R2,SP \ 000000C0 0500A0E1 MOV R0,R5 \ 000000C4 690100EF SWI +361 4148 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000C8 28109DE5 LDR R1,[SP, #+40] \ 000000CC 000097E5 LDR R0,[R7, #+0] \ 000000D0 ........ BL SaveAnswer 4149 } 4150 RecountMenu(ed_struct->ed_contact, 1); \ ??edchat_ghook_6: \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 0110A0E3 MOV R1,#+1 \ 000000DC ........ BL RecountMenu 4151 mfree(ed_struct); \ 000000E0 0700A0E1 MOV R0,R7 \ 000000E4 150000EF SWI +21 \ 000000E8 ECFFFFEA B ??edchat_ghook_1 4152 } 4153 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000EC 0A0058E3 CMP R8,#+10 \ 000000F0 0900001A BNE ??edchat_ghook_7 4154 { 4155 pltop->dyn_pltop=SmilesImgList; \ 000000F4 14019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 000000F8 000090E5 LDR R0,[R0, #+0] \ 000000FC 080089E5 STR R0,[R9, #+8] 4156 DisableIDLETMR(); \ 00000100 7F0100EF SWI +383 4157 total_unread-=ed_struct->requested_decrement_total_unread; \ 00000104 8C0094E5 LDR R0,[R4, #+140] \ 00000108 0C1097E5 LDR R1,[R7, #+12] \ 0000010C 010040E0 SUB R0,R0,R1 \ 00000110 8C0084E5 STR R0,[R4, #+140] 4158 ed_struct->requested_decrement_total_unread=0; \ 00000114 0C6087E5 STR R6,[R7, #+12] \ 00000118 E0FFFFEA B ??edchat_ghook_1 4159 /* if (request_close_edchat) 4160 { 4161 request_close_edchat=0; 4162 GeneralFunc_flag1(edchat_id,1); 4163 return; 4164 }*/ 4165 } 4166 if (cmd==7) \ ??edchat_ghook_7: \ 0000011C 070058E3 CMP R8,#+7 \ 00000120 2800001A BNE ??edchat_ghook_8 4167 { 4168 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 00000124 E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk \ 00000128 0120A0E3 MOV R2,#+1 \ 0000012C 0810A0E1 MOV R1,R8 \ 00000130 0500A0E1 MOV R0,R5 \ 00000134 680100EF SWI +360 4169 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000138 081097E5 LDR R1,[R7, #+8] \ 0000013C 0D20A0E1 MOV R2,SP \ 00000140 0500A0E1 MOV R0,R5 \ 00000144 690100EF SWI +361 4170 if (ec.pWS->wsbody[0]==0) \ 00000148 28009DE5 LDR R0,[SP, #+40] \ 0000014C 000090E5 LDR R0,[R0, #+0] \ 00000150 B000D0E1 LDRH R0,[R0, #+0] \ 00000154 000050E3 CMP R0,#+0 \ 00000158 0300001A BNE ??edchat_ghook_9 4171 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 0000015C 0020A0E3 MOV R2,#+0 \ 00000160 081088E2 ADD R1,R8,#+8 \ 00000164 0500A0E1 MOV R0,R5 \ 00000168 680100EF SWI +360 4172 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 0000016C 0500A0E1 MOV R0,R5 \ 00000170 1C0200EF SWI +540 \ 00000174 000050E3 CMP R0,#+0 \ 00000178 2100001A BNE ??edchat_ghook_3 4173 { 4174 time_to_stop_t9=0; \ 0000017C 946184E5 STR R6,[R4, #+404] 4175 if (ed_struct->ed_contact->req_add) \ 00000180 000097E5 LDR R0,[R7, #+0] \ 00000184 681090E5 LDR R1,[R0, #+104] \ 00000188 000051E3 CMP R1,#+0 \ 0000018C 0500000A BEQ ??edchat_ghook_10 4176 { 4177 ed_struct->ed_contact->req_add=0; \ 00000190 686080E5 STR R6,[R0, #+104] 4178 AddMsgToChat(data); \ 00000194 0500A0E1 MOV R0,R5 \ 00000198 ........ BL AddMsgToChat 4179 RecountMenu(ed_struct->ed_contact, 1); \ 0000019C 000097E5 LDR R0,[R7, #+0] \ 000001A0 0110A0E3 MOV R1,#+1 \ 000001A4 ........ BL RecountMenu 4180 } 4181 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001A8 000097E5 LDR R0,[R7, #+0] \ 000001AC 6C1090E5 LDR R1,[R0, #+108] \ 000001B0 000051E3 CMP R1,#+0 \ 000001B4 1200000A BEQ ??edchat_ghook_3 4182 { 4183 ed_struct->ed_contact->req_drawack=0; \ 000001B8 6C6080E5 STR R6,[R0, #+108] 4184 DrawAck(data); \ 000001BC 0500A0E1 MOV R0,R5 \ 000001C0 ........ BL DrawAck \ 000001C4 B5FFFFEA B ??edchat_ghook_1 4185 } 4186 } 4187 } 4188 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001C8 0C0058E3 CMP R8,#+12 \ 000001CC 0C00001A BNE ??edchat_ghook_3 4189 { 4190 j=EDIT_GetFocus(data); \ 000001D0 0500A0E1 MOV R0,R5 \ 000001D4 820100EF SWI +386 \ 000001D8 0040A0E1 MOV R4,R0 4191 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001DC 0500A0E1 MOV R0,R5 \ 000001E0 830100EF SWI +387 \ 000001E4 040050E1 CMP R0,R4 \ 000001E8 050000AA BGE ??edchat_ghook_3 \ 000001EC 080097E5 LDR R0,[R7, #+8] \ 000001F0 000054E1 CMP R4,R0 \ 000001F4 0200000A BEQ ??edchat_ghook_3 4192 EDIT_SetCursorPos(data,1); \ 000001F8 0110A0E3 MOV R1,#+1 \ 000001FC 0500A0E1 MOV R0,R5 \ 00000200 D40100EF SWI +468 4193 } 4194 } \ ??edchat_ghook_3: \ 00000204 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000208 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 0000020C ........ DC32 my_ed_redraw \ 00000210 ........ DC32 SmilesImgList \ 00000214 ........ DC32 ??sk \ In segment DATA_C, align 4, align-sorted 4195 4196 4197 4198 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: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 4199 { 4200 1, 4201 edchat_onkey, 4202 edchat_ghook, 4203 (void *)edchat_locret, 4204 0, 4205 &menu_skt, 4206 {0,NULL,NULL,NULL}, 4207 FONT_SMALL, 4208 100, 4209 101, 4210 0, 4211 // 0x00000001 - Выровнять по правому краю 4212 // 0x00000002 - Выровнять по центру 4213 // 0x00000004 - Инверсия знакомест 4214 // 0x00000008 - UnderLine 4215 // 0x00000020 - Не переносить слова 4216 // 0x00000200 - bold 4217 0, 4218 // 0x00000002 - ReadOnly 4219 // 0x00000004 - Не двигается курсор 4220 // 0x40000000 - Поменять местами софт-кнопки 4221 0x40000000 4222 }; 4223 \ In segment CODE, align 4, keep-with-next 4224 void CreateEditChat(CLIST *t) 4225 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 4226 extern const int FIRST_LETTER; 4227 void *ma=malloc_adr(); 4228 void *eq; 4229 EDITCONTROL ec; 4230 EDITC_OPTIONS ec_options; 4231 int color, font, type; 4232 int zc; 4233 4234 LOGQ *lp; 4235 int edchat_toitem; 4236 // edcontact=t; 4237 4238 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 84649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 4239 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 4240 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable154 ;; S_ICONS \ 0000000C 4CD04DE2 SUB SP,SP,#+76 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 148000EF SWI +32788 \ 00000018 0050A0E1 MOV R5,R0 \ 0000001C 140084E2 ADD R0,R4,#+20 \ 00000020 440086E5 STR R0,[R6, #+68] \ 00000024 440087E2 ADD R0,R7,#+68 \ 00000028 400086E5 STR R0,[R6, #+64] 4241 4242 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 4243 4244 4245 lp=t->log; \ 0000003C 709094E5 LDR R9,[R4, #+112] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 9500000A BEQ ??CreateEditChat_1 4246 4247 while(lp) 4248 { 4249 font = ED_H_FONT_SIZE; 4250 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C ........ LDR R2,??DataTable155 ;; ED_X_FONT_SIZE \ 00000050 ........ LDR R0,??DataTable156 ;; ED_H_FONT_SIZE \ 00000054 002092E5 LDR R2,[R2, #+0] \ 00000058 00A090E5 LDR R10,[R0, #+0] \ 0000005C 040099E5 LDR R0,[R9, #+4] \ 00000060 ........ LDR R1,??DataTable157 ;; I_COLOR \ 00000064 1C208DE5 STR R2,[SP, #+28] \ 00000068 ........ LDR R2,??DataTable158 ;; X_COLOR \ 0000006C 030010E2 ANDS R0,R0,#0x3 \ 00000070 002092E5 LDR R2,[R2, #+0] \ 00000074 14208DE5 STR R2,[SP, #+20] \ 00000078 ........ LDR R2,??DataTable159 ;; O_ED_X_FONT_SIZE \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 18208DE5 STR R2,[SP, #+24] \ 00000084 ........ LDR R2,??DataTable160 ;; O_X_COLOR \ 00000088 002092E5 LDR R2,[R2, #+0] \ 0000008C 10208DE5 STR R2,[SP, #+16] \ 00000090 00B091E5 LDR R11,[R1, #+0] \ 00000094 0300000A BEQ ??CreateEditChat_3 4251 { 4252 if (zc==1) \ 00000098 010050E3 CMP R0,#+1 \ 0000009C 1E00001A BNE ??CreateEditChat_4 4253 color=ACK_COLOR; //Зеленый \ 000000A0 ........ LDR R0,??DataTable161 ;; ACK_COLOR \ 000000A4 1B0000EA B ??CreateEditChat_5 4254 else 4255 color=I_COLOR; 4256 } 4257 else 4258 { 4259 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 000000A8 080099E5 LDR R0,[R9, #+8] \ 000000AC 010070E3 CMN R0,#+1 \ 000000B0 1700001A BNE ??CreateEditChat_6 4260 { 4261 type = lp->type&0x0F; \ 000000B4 0C0099E5 LDR R0,[R9, #+12] \ 000000B8 0F1000E2 AND R1,R0,#0xF 4262 if(lp->type&0x10) \ 000000BC 100010E3 TST R0,#0x10 \ 000000C0 0B00000A BEQ ??CreateEditChat_7 4263 { 4264 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000C4 010051E3 CMP R1,#+1 \ 000000C8 ........ LDREQ R0,??DataTable162 ;; O_I_COLOR \ 000000CC 0400000A BEQ ??CreateEditChat_8 \ 000000D0 030051E3 CMP R1,#+3 \ 000000D4 18A09D05 LDREQ R10,[SP, #+24] \ 000000D8 02B0A001 MOVEQ R11,R2 \ 000000DC 0E00000A BEQ ??CreateEditChat_4 \ 000000E0 ........ LDR R0,??DataTable163 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000E4 00B090E5 LDR R11,[R0, #+0] \ 000000E8 ........ LDR R0,??DataTable164 ;; O_ED_H_FONT_SIZE \ 000000EC 00A090E5 LDR R10,[R0, #+0] \ 000000F0 090000EA B ??CreateEditChat_4 4265 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 4266 } 4267 else 4268 { 4269 color = (type==1)?I_COLOR:((type==3)?X_COLOR:TO_COLOR); \ ??CreateEditChat_7: \ 000000F4 010051E3 CMP R1,#+1 \ 000000F8 0700000A BEQ ??CreateEditChat_4 \ 000000FC 030051E3 CMP R1,#+3 \ 00000100 14B09D05 LDREQ R11,[SP, #+20] \ 00000104 1CA09D05 LDREQ R10,[SP, #+28] \ 00000108 0300000A BEQ ??CreateEditChat_4 \ 0000010C ........ LDR R0,??DataTable165 ;; TO_COLOR \ 00000110 000000EA B ??CreateEditChat_5 4270 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 4271 } 4272 } 4273 else 4274 color=UNACK_COLOR; //Серый \ ??CreateEditChat_6: \ 00000114 ........ LDR R0,??DataTable166 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 00000118 00B090E5 LDR R11,[R0, #+0] 4275 } 4276 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 0000011C 20008DE2 ADD R0,SP,#+32 \ 00000120 640100EF SWI +356 4277 if ((lp->type&0x0F)!=3) \ 00000124 0C0099E5 LDR R0,[R9, #+12] \ 00000128 0F0000E2 AND R0,R0,#0xF \ 0000012C 030050E3 CMP R0,#+3 \ 00000130 0800000A BEQ ??CreateEditChat_9 4278 { 4279 ascii2ws(ews,lp->hdr); \ 00000134 180197E5 LDR R0,[R7, #+280] \ 00000138 101089E2 ADD R1,R9,#+16 \ 0000013C ........ _BLF ascii2ws,??ascii2ws??rA 4280 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000140 183197E5 LDR R3,[R7, #+280] \ 00000144 4020A0E3 MOV R2,#+64 \ 00000148 000093E5 LDR R0,[R3, #+0] \ 0000014C B000D0E1 LDRH R0,[R0, #+0] \ 00000150 01002DE9 PUSH {R0} \ 00000154 030000EA B ??CreateEditChat_10 4281 } 4282 else 4283 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_9: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 183197E5 LDR R3,[R7, #+280] \ 00000164 2020A0E3 MOV R2,#+32 \ ??CreateEditChat_10: \ 00000168 0110A0E3 MOV R1,#+1 \ 0000016C 24008DE2 ADD R0,SP,#+36 \ 00000170 650100EF SWI +357 \ 00000174 04D08DE2 ADD SP,SP,#+4 4284 PrepareEditCOptions(&ec_options); \ 00000178 0D00A0E1 MOV R0,SP \ 0000017C C80100EF SWI +456 4285 SetPenColorToEditCOptions(&ec_options,color); \ 00000180 0B10A0E1 MOV R1,R11 \ 00000184 0D00A0E1 MOV R0,SP \ 00000188 CC0100EF SWI +460 4286 SetFontToEditCOptions(&ec_options,font); \ 0000018C 0A10A0E1 MOV R1,R10 \ 00000190 0D00A0E1 MOV R0,SP \ 00000194 CA0100EF SWI +458 4287 CopyOptionsToEditControl(&ec,&ec_options); \ 00000198 0D10A0E1 MOV R1,SP \ 0000019C 20008DE2 ADD R0,SP,#+32 \ 000001A0 CE0100EF SWI +462 4288 AddEditControlToEditQend(eq,&ec,ma); \ 000001A4 0520A0E1 MOV R2,R5 \ 000001A8 20108DE2 ADD R1,SP,#+32 \ 000001AC 0800A0E1 MOV R0,R8 \ 000001B0 660100EF SWI +358 4289 if ((lp->type&0x0F)!=3) \ 000001B4 0C0099E5 LDR R0,[R9, #+12] \ 000001B8 0F1000E2 AND R1,R0,#0xF \ 000001BC 030051E3 CMP R1,#+3 \ 000001C0 0300000A BEQ ??CreateEditChat_11 4290 { 4291 ParseAnswer(ews,lp->text); \ 000001C4 180197E5 LDR R0,[R7, #+280] \ 000001C8 601089E2 ADD R1,R9,#+96 \ 000001CC ........ BL ParseAnswer \ 000001D0 050000EA B ??CreateEditChat_12 4292 } 4293 else 4294 { 4295 ParseXStatusText(ews,lp->text,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_11: \ 000001D4 100010E3 TST R0,#0x10 \ 000001D8 10209D15 LDRNE R2,[SP, #+16] \ 000001DC 180197E5 LDR R0,[R7, #+280] \ 000001E0 14209D05 LDREQ R2,[SP, #+20] \ 000001E4 601089E2 ADD R1,R9,#+96 \ 000001E8 ........ BL ParseXStatusText 4296 } 4297 PrepareEditControl(&ec); \ ??CreateEditChat_12: \ 000001EC 20008DE2 ADD R0,SP,#+32 \ 000001F0 640100EF SWI +356 4298 ConstructEditControl(&ec, 4299 ECT_NORMAL_TEXT, 4300 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 4301 ews,ews->wsbody[0]); \ 000001F4 183197E5 LDR R3,[R7, #+280] \ 000001F8 000093E5 LDR R0,[R3, #+0] \ 000001FC B010D0E1 LDRH R1,[R0, #+0] \ 00000200 000051E3 CMP R1,#+0 \ 00000204 0100A0E1 MOV R0,R1 \ 00000208 01002DE9 PUSH {R0} \ 0000020C 812DA013 MOVNE R2,#+8256 \ 00000210 2020A003 MOVEQ R2,#+32 \ 00000214 0310A0E3 MOV R1,#+3 \ 00000218 24008DE2 ADD R0,SP,#+36 \ 0000021C 650100EF SWI +357 4302 PrepareEditCOptions(&ec_options); \ 00000220 04008DE2 ADD R0,SP,#+4 \ 00000224 C80100EF SWI +456 4303 //#ifdef M75 4304 if ((lp->type&0x0F)!=3) \ 00000228 0C0099E5 LDR R0,[R9, #+12] \ 0000022C 04D08DE2 ADD SP,SP,#+4 \ 00000230 0F1000E2 AND R1,R0,#0xF \ 00000234 030051E3 CMP R1,#+3 \ 00000238 0400000A BEQ ??CreateEditChat_13 4305 { 4306 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 0000023C 100010E3 TST R0,#0x10 \ 00000240 ........ LDRNE R0,??DataTable167 ;; O_ED_FONT_SIZE \ 00000244 ........ LDREQ R0,??DataTable169 ;; ED_FONT_SIZE \ 00000248 001090E5 LDR R1,[R0, #+0] \ 0000024C 080000EA B ??CreateEditChat_14 4307 } 4308 else 4309 { 4310 SetPenColorToEditCOptions(&ec_options,(lp->type&0x10)?O_X_COLOR:X_COLOR); \ ??CreateEditChat_13: \ 00000250 100010E3 TST R0,#0x10 \ 00000254 10109D15 LDRNE R1,[SP, #+16] \ 00000258 0D00A0E1 MOV R0,SP \ 0000025C 14109D05 LDREQ R1,[SP, #+20] \ 00000260 CC0100EF SWI +460 4311 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_X_FONT_SIZE:ED_X_FONT_SIZE); \ 00000264 0C0099E5 LDR R0,[R9, #+12] \ 00000268 100010E3 TST R0,#0x10 \ 0000026C 18109D15 LDRNE R1,[SP, #+24] \ 00000270 1C109D05 LDREQ R1,[SP, #+28] \ ??CreateEditChat_14: \ 00000274 0D00A0E1 MOV R0,SP \ 00000278 CA0100EF SWI +458 4312 } 4313 //#else 4314 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 4315 //#endif 4316 CopyOptionsToEditControl(&ec,&ec_options); \ 0000027C 0D10A0E1 MOV R1,SP \ 00000280 20008DE2 ADD R0,SP,#+32 \ 00000284 CE0100EF SWI +462 4317 AddEditControlToEditQend(eq,&ec,ma); \ 00000288 0520A0E1 MOV R2,R5 \ 0000028C 20108DE2 ADD R1,SP,#+32 \ 00000290 0800A0E1 MOV R0,R8 \ 00000294 660100EF SWI +358 4318 lp=lp->next; \ 00000298 009099E5 LDR R9,[R9, #+0] 4319 } \ 0000029C 000059E3 CMP R9,#+0 \ 000002A0 69FFFF1A BNE ??CreateEditChat_2 4320 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 000002A4 580094E5 LDR R0,[R4, #+88] 4321 t->isunread=0; \ 000002A8 0090A0E3 MOV R9,#+0 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 8C009715 LDRNE R0,[R7, #+140] \ 000002B4 01004012 SUBNE R0,R0,#+1 \ 000002B8 8C008715 STRNE R0,[R7, #+140] \ 000002BC 589084E5 STR R9,[R4, #+88] 4322 #ifdef EVILFOX 4323 total_unread2=total_unread2-t->unread_msg; \ 000002C0 940097E5 LDR R0,[R7, #+148] \ 000002C4 641094E5 LDR R1,[R4, #+100] \ 000002C8 010040E0 SUB R0,R0,R1 \ 000002CC 940087E5 STR R0,[R7, #+148] 4324 t->unread_msg=0; \ 000002D0 649084E5 STR R9,[R4, #+100] 4325 #endif 4326 ChangeContactPos(t); \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 4327 wsprintf(ews, "-------"); \ 000002DC 180197E5 LDR R0,[R7, #+280] \ 000002E0 4C1086E2 ADD R1,R6,#+76 \ 000002E4 240100EF SWI +292 4328 PrepareEditControl(&ec); \ 000002E8 20008DE2 ADD R0,SP,#+32 \ 000002EC 640100EF SWI +356 4329 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002F0 183197E5 LDR R3,[R7, #+280] \ 000002F4 4020A0E3 MOV R2,#+64 \ 000002F8 000093E5 LDR R0,[R3, #+0] \ 000002FC 0110A0E3 MOV R1,#+1 \ 00000300 B000D0E1 LDRH R0,[R0, #+0] \ 00000304 01002DE9 PUSH {R0} \ 00000308 24008DE2 ADD R0,SP,#+36 \ 0000030C 650100EF SWI +357 4330 PrepareEditCOptions(&ec_options); \ 00000310 04008DE2 ADD R0,SP,#+4 \ 00000314 C80100EF SWI +456 4331 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000318 ........ LDR R0,??DataTable169 ;; ED_FONT_SIZE \ 0000031C 00A090E5 LDR R10,[R0, #+0] \ 00000320 04008DE2 ADD R0,SP,#+4 \ 00000324 0A10A0E1 MOV R1,R10 \ 00000328 CA0100EF SWI +458 4332 CopyOptionsToEditControl(&ec,&ec_options); \ 0000032C 04108DE2 ADD R1,SP,#+4 \ 00000330 24008DE2 ADD R0,SP,#+36 \ 00000334 CE0100EF SWI +462 4333 AddEditControlToEditQend(eq,&ec,ma); \ 00000338 0520A0E1 MOV R2,R5 \ 0000033C 24108DE2 ADD R1,SP,#+36 \ 00000340 0800A0E1 MOV R0,R8 \ 00000344 660100EF SWI +358 4334 4335 if (t->answer) ParseAnswer(ews,t->answer); \ 00000348 741094E5 LDR R1,[R4, #+116] \ 0000034C 04D08DE2 ADD SP,SP,#+4 \ 00000350 000051E3 CMP R1,#+0 \ 00000354 0200000A BEQ ??CreateEditChat_15 \ 00000358 180197E5 LDR R0,[R7, #+280] \ 0000035C ........ BL ParseAnswer \ 00000360 020000EA B ??CreateEditChat_16 4336 else CutWSTR(ews,0); \ ??CreateEditChat_15: \ 00000364 180197E5 LDR R0,[R7, #+280] \ 00000368 0010A0E3 MOV R1,#+0 \ 0000036C 260100EF SWI +294 4337 PrepareEditControl(&ec); \ ??CreateEditChat_16: \ 00000370 20008DE2 ADD R0,SP,#+32 \ 00000374 640100EF SWI +356 4338 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); \ 00000378 14019FE5 LDR R0,??CreateEditChat_0+0x4 ;; FIRST_LETTER \ 0000037C 0310A0E3 MOV R1,#+3 \ 00000380 000090E5 LDR R0,[R0, #+0] \ 00000384 000050E3 CMP R0,#+0 \ 00000388 400EA0E3 MOV R0,#+1024 \ 0000038C 01002DE9 PUSH {R0} \ 00000390 183197E5 LDR R3,[R7, #+280] \ 00000394 402DA013 MOVNE R2,#+4096 \ 00000398 0020A003 MOVEQ R2,#+0 \ 0000039C 24008DE2 ADD R0,SP,#+36 \ 000003A0 650100EF SWI +357 4339 4340 PrepareEditCOptions(&ec_options); \ 000003A4 04008DE2 ADD R0,SP,#+4 \ 000003A8 C80100EF SWI +456 4341 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000003AC 0A10A0E1 MOV R1,R10 \ 000003B0 04008DE2 ADD R0,SP,#+4 \ 000003B4 CA0100EF SWI +458 4342 CopyOptionsToEditControl(&ec,&ec_options); \ 000003B8 04108DE2 ADD R1,SP,#+4 \ 000003BC 24008DE2 ADD R0,SP,#+36 \ 000003C0 CE0100EF SWI +462 4343 edchat_toitem=AddEditControlToEditQend(eq,&ec,ma); \ 000003C4 0520A0E1 MOV R2,R5 \ 000003C8 24108DE2 ADD R1,SP,#+36 \ 000003CC 0800A0E1 MOV R0,R8 \ 000003D0 660100EF SWI +358 \ 000003D4 00A0A0E1 MOV R10,R0 4344 4345 if (t->req_xtext) \ 000003D8 880094E5 LDR R0,[R4, #+136] \ 000003DC 04D08DE2 ADD SP,SP,#+4 \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 0400000A BEQ ??CreateEditChat_17 4346 { 4347 FreeXText(t); \ 000003E8 0400A0E1 MOV R0,R4 \ 000003EC ........ _BLF FreeXText,??FreeXText??rA 4348 t->req_xtext=0; \ 000003F0 889084E5 STR R9,[R4, #+136] 4349 RequestXText(t->uin); \ 000003F4 0C0094E5 LDR R0,[R4, #+12] \ 000003F8 ........ BL RequestXText 4350 } 4351 4352 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_17: \ 000003FC 1400A0E3 MOV R0,#+20 \ 00000400 140000EF SWI +20 \ 00000404 0050A0E1 MOV R5,R0 4353 ed_struct->ed_contact=t; \ 00000408 004085E5 STR R4,[R5, #+0] 4354 ed_struct->ed_answer=edchat_toitem; \ 0000040C 08A085E5 STR R10,[R5, #+8] 4355 ed_struct->requested_decrement_total_unread=0; \ 00000410 0C9085E5 STR R9,[R5, #+12] 4356 t->req_add=0; \ 00000414 689084E5 STR R9,[R4, #+104] 4357 t->last_log=NULL; \ 00000418 789084E5 STR R9,[R4, #+120] 4358 4359 // int scr_w=ScreenW(); 4360 // int scr_h=ScreenH(); 4361 // int head_h=HeaderH(); 4362 4363 patch_header(&edchat_hdr); \ 0000041C 389086E5 STR R9,[R6, #+56] \ 00000420 888100EF SWI +33160 \ 00000424 010040E2 SUB R0,R0,#+1 \ 00000428 BC03C6E1 STRH R0,[R6, #+60] \ 0000042C 8A8100EF SWI +33162 \ 00000430 010040E2 SUB R0,R0,#+1 \ 00000434 BE03C6E1 STRH R0,[R6, #+62] 4364 patch_input(&edchat_desc); \ 00000438 B891C6E1 STRH R9,[R6, #+24] \ 0000043C 8A8100EF SWI +33162 \ 00000440 010080E2 ADD R0,R0,#+1 \ 00000444 BA01C6E1 STRH R0,[R6, #+26] \ 00000448 888100EF SWI +33160 \ 0000044C 010040E2 SUB R0,R0,#+1 \ 00000450 BC01C6E1 STRH R0,[R6, #+28] \ 00000454 898100EF SWI +33161 \ 00000458 0040A0E1 MOV R4,R0 \ 0000045C 8B8100EF SWI +33163 \ 00000460 000044E0 SUB R0,R4,R0 \ 00000464 010040E2 SUB R0,R0,#+1 \ 00000468 BE01C6E1 STRH R0,[R6, #+30] 4365 // edchat_desc.font=ED_FONT_SIZE; 4366 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 0000046C 20002DE9 PUSH {R5} \ 00000470 0130A0E3 MOV R3,#+1 \ 00000474 0820A0E1 MOV R2,R8 \ 00000478 381086E2 ADD R1,R6,#+56 \ 0000047C 0600A0E1 MOV R0,R6 \ 00000480 670100EF SWI +359 \ 00000484 7C0187E5 STR R0,[R7, #+380] 4367 } \ 00000488 50D08DE2 ADD SP,SP,#+80 \ 0000048C F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000490 ........ DC32 edchat_desc \ 00000494 ........ DC32 FIRST_LETTER 4368 4369 //----------------------------------------------------------------------------- 4370 #define EC_MNU_MAX 8 4371 \ In segment CODE, align 4, keep-with-next 4372 void Quote(GUI *data) 4373 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 4374 int q_n; 4375 EDITCONTROL ec, ec_hdr; 4376 EDITCONTROL ec_ed; 4377 WSHDR *ed_ws; 4378 WSHDR *ws; 4379 4380 EDCHAT_STRUCT *ed_struct; 4381 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 4382 4383 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 4384 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 4385 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 4386 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 4387 4388 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 4389 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 4390 { 4391 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 4392 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 4393 } 4394 else 4395 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 4396 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 4397 { 4398 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 4399 } 4400 else 4401 { 4402 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 4403 } 4404 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 4405 do 4406 { 4407 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 4408 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 4409 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 4410 } 4411 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 4412 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 4413 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 4414 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 4415 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 4416 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 4417 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 4418 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 4419 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 4420 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 4421 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 4422 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 4423 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 4424 4425 \ In segment CODE, align 4, keep-with-next 4426 void GetShortInfo(GUI *data) 4427 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4428 EDCHAT_STRUCT *ed_struct; 4429 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 4430 4431 TPKT *p; 4432 CLIST *t; 4433 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 1E00000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable178 ;; S_ICONS + 336 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1A00001A BNE ??GetShortInfo_0 4434 { 4435 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 4436 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 4437 p->pkt.type=T_REQINFOSHORT; 4438 p->pkt.data_len=0; 4439 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF); \ 00000038 0010E0E3 MVN R1,#+0 \ 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,??DataTable177 ;; `?ed_chatgui); \ 0000006C 040094E5 LDR R0,[R4, #+4] \ 00000070 ........ BL AddMsgToChat 4441 RecountMenu(t, 1); \ 00000074 0110A0E3 MOV R1,#+1 \ 00000078 0500A0E1 MOV R0,R5 \ 0000007C ........ BL RecountMenu 4442 SUBPROC((void *)SendAnswer,0,p); \ 00000080 ........ LDR R0,??DataTable179 ;; SendAnswer \ 00000084 0620A0E1 MOV R2,R6 \ 00000088 0010A0E3 MOV R1,#+0 \ 0000008C 710100EF SWI +369 \ 00000090 04D08DE2 ADD SP,SP,#+4 4443 } 4444 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 00000094 0100A0E3 MOV R0,#+1 \ 00000098 3B0100EF SWI +315 4445 } \ 0000009C 7080BDE8 POP {R4-R6,PC} ;; return 4446 4447 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 4448 void AddCurContact(GUI *data) 4449 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 4450 EDCHAT_STRUCT *ed_struct; 4451 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 4452 4453 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,??DataTable178 ;; S_ICONS + 336 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 4454 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 4455 } \ 00000030 0080BDE8 POP {PC} ;; return 4456 \ In segment CODE, align 4, keep-with-next 4457 void SendAuthReq(GUI *data) 4458 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 4459 EDCHAT_STRUCT *ed_struct; 4460 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 4461 4462 TPKT *p; 4463 CLIST *t; 4464 int l; 4465 const char s[]=LG_AUTHREQ; \ 0000000C B4109FE5 LDR R1,??SendAuthReq_0 ;; `?ed_contact)&&(connect_state==3)) \ 00000020 005094E5 LDR R5,[R4, #+0] \ 00000024 000055E3 CMP R5,#+0 \ 00000028 2200000A BEQ ??SendAuthReq_1 \ 0000002C ........ LDR R0,??DataTable178 ;; S_ICONS + 336 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1E00001A BNE ??SendAuthReq_1 4467 { 4468 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 4469 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 4470 p->pkt.type=T_AUTHREQ; 4471 p->pkt.data_len=l; 4472 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 4473 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 ........ LDR R3,??DataTable175 ;; `?ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 4475 RecountMenu(t, 1); \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 ........ BL RecountMenu 4476 SUBPROC((void *)SendAnswer,0,p); \ 000000A4 ........ LDR R0,??DataTable179 ;; SendAnswer \ 000000A8 0720A0E1 MOV R2,R7 \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 710100EF SWI +369 \ 000000B4 04D08DE2 ADD SP,SP,#+4 4477 } 4478 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 3B0100EF SWI +315 4479 } \ 000000C0 14D08DE2 ADD SP,SP,#+20 \ 000000C4 F080BDE8 POP {R4-R7,PC} ;; return \ ??SendAuthReq_0: \ 000000C8 ........ DC32 `?ed_contact)&&(connect_state==3)) \ 00000020 006094E5 LDR R6,[R4, #+0] \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2200000A BEQ ??SendAuthGrant_0 \ 0000002C ........ LDR R0,??DataTable178 ;; S_ICONS + 336 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 1E00001A BNE ??SendAuthGrant_0 4491 { 4492 p=malloc(sizeof(PKT)+(l=strlen(s))+1); \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 1B0000EF SWI +27 \ 00000044 0070A0E1 MOV R7,R0 \ 00000048 090087E2 ADD R0,R7,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0080A0E1 MOV R8,R0 4493 p->pkt.uin=t->uin; \ 00000054 0C0096E5 LDR R0,[R6, #+12] 4494 p->pkt.type=T_AUTHGRANT; 4495 p->pkt.data_len=l; 4496 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000088E5 STR R0,[R8, #+0] \ 00000060 0E00A0E3 MOV R0,#+14 \ 00000064 B400C8E1 STRH R0,[R8, #+4] \ 00000068 B670C8E1 STRH R7,[R8, #+6] \ 0000006C 080088E2 ADD R0,R8,#+8 \ 00000070 1A0000EF SWI +26 4497 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF); \ 00000074 0000E0E3 MVN R0,#+0 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 103085E2 ADD R3,R5,#+16 \ 00000080 082088E2 ADD R2,R8,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 0600A0E1 MOV R0,R6 \ 0000008C ........ BL AddStringToLog 4498 AddMsgToChat(ed_struct->ed_chatgui); \ 00000090 040094E5 LDR R0,[R4, #+4] \ 00000094 ........ BL AddMsgToChat 4499 RecountMenu(t, 1); \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 0600A0E1 MOV R0,R6 \ 000000A0 ........ BL RecountMenu 4500 SUBPROC((void *)SendAnswer,0,p); \ 000000A4 ........ LDR R0,??DataTable179 ;; SendAnswer \ 000000A8 0820A0E1 MOV R2,R8 \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 710100EF SWI +369 \ 000000B4 04D08DE2 ADD SP,SP,#+4 4501 } 4502 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000B8 0100A0E3 MOV R0,#+1 \ 000000BC 3B0100EF SWI +315 4503 } \ 000000C0 FF81BDE8 POP {R0-R8,PC} ;; return 4504 \ In segment CODE, align 4, keep-with-next 4505 void OpenLogfile(GUI *data) 4506 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 4507 EDCHAT_STRUCT *ed_struct; 4508 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 4509 4510 extern const char HIST_PATH[64]; 4511 #ifdef EVILFOX_2 4512 #else 4513 extern const int HISTORY_TYPE; 4514 #endif 4515 CLIST *t; 4516 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0050A0E1 MOV R5,R0 4517 if ((t=ed_struct->ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??OpenLogfile_0 4518 { 4519 #ifdef EVILFOX_2 4520 wsprintf(ws,"%s\\%u\\%s.txt",HIST_PATH,UIN,t->name); 4521 #else 4522 if (HISTORY_TYPE) \ 00000024 64309FE5 LDR R3,??OpenLogfile_1 ;; HISTORY_TYPE \ 00000028 64109FE5 LDR R1,??OpenLogfile_1+0x4 ;; `?` \ 0000002C 003093E5 LDR R3,[R3, #+0] \ 00000030 60209FE5 LDR R2,??OpenLogfile_1+0x8 ;; HIST_PATH \ 00000034 000053E3 CMP R3,#+0 \ 00000038 0700000A BEQ ??OpenLogfile_2 4523 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); \ 0000003C 0C0090E5 LDR R0,[R0, #+12] \ 00000040 01002DE9 PUSH {R0} \ 00000044 ........ LDR R0,??DataTable180 ;; UIN \ 00000048 003090E5 LDR R3,[R0, #+0] \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 240100EF SWI +292 \ 00000054 04D08DE2 ADD SP,SP,#+4 \ 00000058 030000EA B ??OpenLogfile_3 4524 else 4525 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); \ ??OpenLogfile_2: \ 0000005C 0C3090E5 LDR R3,[R0, #+12] \ 00000060 101081E2 ADD R1,R1,#+16 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 240100EF SWI +292 4526 #endif 4527 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 4528 } 4529 FreeWS(ws); \ ??OpenLogfile_0: \ 0000007C 0500A0E1 MOV R0,R5 \ 00000080 290100EF SWI +297 4530 GeneralFuncF1(1); \ 00000084 0100A0E3 MOV R0,#+1 \ 00000088 3B0100EF SWI +315 4531 } \ 0000008C 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 00000090 ........ DC32 HISTORY_TYPE \ 00000094 ........ DC32 `?` \ 00000098 ........ DC32 HIST_PATH 4532 \ In segment CODE, align 4, keep-with-next 4533 void ClearLog(GUI *data/*,void *dummy*/) 4534 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 4535 EDITCONTROL ec; 4536 EDCHAT_STRUCT *ed_struct; 4537 WSHDR *ws; 4538 CLIST *t; 4539 4540 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 4541 4542 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 4543 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 4544 { 4545 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 4546 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 4547 4548 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 4549 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 4550 4551 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 4552 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 4553 } 4554 else 4555 { 4556 4557 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 4558 { 4559 if (t->log) \ 00000074 700095E5 LDR R0,[R5, #+112] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 4560 { 4561 FreeLOGQ(&t->log); \ 00000084 700085E2 ADD R0,R5,#+112 \ 00000088 ........ BL FreeLOGQ 4562 t->msg_count=0; \ 0000008C 806085E5 STR R6,[R5, #+128] 4563 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 4564 { 4565 while(ed_struct->ed_answer!=2) 4566 { 4567 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 4568 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 4569 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 4570 } 4571 } 4572 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 7C6085E5 STR R6,[R5, #+124] 4573 RecountMenu(t, 1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 4574 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 4575 } 4576 } 4577 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 4578 \ In segment CODE, align 4, keep-with-next 4579 void ecmenu_ghook(void *data, int cmd) 4580 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 4581 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 4582 { 4583 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 4584 } 4585 } \ 00000010 0080BDE8 POP {PC} ;; return 4586 \ In segment DATA_C, align 4, align-sorted 4587 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ gipc: \ 00000074 DS8 12 \ 00000080 REQUIRE `?` \ tmr_gipc: \ 00000080 DS8 12 \ 0000008C REQUIRE `?` \ total_unread: \ 0000008C DS8 4 \ 00000090 REQUIRE `?` \ cltop: \ 00000090 DS8 4 \ 00000094 REQUIRE `?` \ total_unread2: \ 00000094 DS8 4 \ 00000098 REQUIRE `?` \ total_c_online: \ 00000098 DS8 4 \ 0000009C REQUIRE `?` \ Is_ILU_On: \ 0000009C DS8 4 \ 000000A0 REQUIRE `?` \ seconds: \ 000000A0 DS8 4 \ 000000A4 REQUIRE `?` \ minutes: \ 000000A4 DS8 4 \ 000000A8 REQUIRE `?` \ hours: \ 000000A8 DS8 4 \ 000000AC REQUIRE `?` \ align: \ 000000AC DS8 4 \ 000000B0 REQUIRE `?` \ spaco1r: \ 000000B0 DS8 4 \ 000000B4 REQUIRE `?` \ time_draw: \ 000000B4 DS8 4 \ 000000B8 REQUIRE `?` \ canvasdata: \ 000000B8 DS8 4 \ 000000BC REQUIRE `?` \ show_ping: \ 000000BC DS8 4 \ 000000C0 REQUIRE `?` \ ping_sec: \ 000000C0 DS8 4 \ 000000C4 REQUIRE `?` \ INC_show: \ 000000C4 DS8 4 \ 000000C8 REQUIRE `?` \ Is_INC_On: \ 000000C8 DS8 4 \ 000000CC REQUIRE `?` \ font: \ 000000CC DS8 4 \ 000000D0 REQUIRE `?` \ pp_color: \ 000000D0 DS8 4 \ 000000D4 REQUIRE `?` \ main_d: \ 000000D4 DS8 4 \ 000000D8 REQUIRE `?` \ paused_height: \ 000000D8 DS8 4 \ 000000DC REQUIRE `?` \ in_count: \ 000000DC DS8 4 \ 000000E0 REQUIRE `?` \ out_count: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ comanda: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ msg_away_timer: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ change_back_status: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ status_rem: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ away_m: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ total_count: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ in_ext: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ icon_change: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ icon_change2: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ maincsm_id: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ maingui_id: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ SENDMSGCOUNT: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ IsActiveUp: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ ews: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ silenthide: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ disautorecconect: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ Is_Show_Offline: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ Is_Show_Groups: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ CurrentStatus: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ CurrentXStatus: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ CurrentPrivateStatus: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ vibra_count: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ templates_chars: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ templates_lines: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ RXstate: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ connect_state: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ sock: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ TOTALRECEIVED: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ TOTALSENDED: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ ALLTOTALRECEIVED: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ ALLTOTALSENDED: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ sendq_l: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ sendq_p: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ is_gprs_online: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ GROUP_CACHE: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ contactlist_menu_id: \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ edchat_id: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ tenseconds_to_ping: \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ DNR_ID: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ DNR_TRIES: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ host_counter: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ time_to_stop_t9: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ old_ed_redraw: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ 0000019C DS8 64 \ 000001DC REQUIRE `?` \ elf_path: \ 000001DC DS8 256 \ 000002DC REQUIRE `?` \ ContactT9Key: \ 000002DC DS8 32 \ 000002FC REQUIRE `?` \ upcoming: \ 000002FC DS8 64 \ 0000033C REQUIRE `?` \ ctmr: \ 0000033C DS8 16 \ 0000034C REQUIRE `?` \ online_txt: \ 0000034C DS8 20 \ 00000360 REQUIRE `?` \ ping_txt: \ 00000360 DS8 16 \ 00000370 REQUIRE `?` \ unread_txt: \ 00000370 DS8 16 \ 00000380 REQUIRE `?` \ show_nick: \ 00000380 DS8 64 \ 000003C0 REQUIRE `?` \ incs: \ 000003C0 DS8 16 \ 000003D0 REQUIRE `?` \ away_msg_time: \ 000003D0 DS8 64 \ 00000410 REQUIRE `?` \ away_msg: \ 00000410 DS8 256 \ 00000510 REQUIRE `?` \ tim_zone: \ 00000510 DS8 24 \ 00000528 REQUIRE `?` \ ext_sound: \ 00000528 DS8 128 \ 000005A8 REQUIRE `?` \ LG_MENU2: \ 000005A8 DS8 32 \ 000005C8 REQUIRE `?` \ mod_info: \ 000005C8 DS8 72 \ 00000610 REQUIRE `?` \ a_txt: \ 00000610 DS8 64 \ 00000650 REQUIRE `?` \ s_txt: \ 00000650 DS8 64 \ 00000690 REQUIRE `?` \ d_txt: \ 00000690 DS8 64 \ 000006D0 REQUIRE `?` \ f_txt: \ 000006D0 DS8 64 \ 00000710 REQUIRE `?` \ g_txt: \ 00000710 DS8 64 \ 00000750 REQUIRE `?` \ hostname: \ 00000750 DS8 128 \ 000007D0 REQUIRE `?` \ logmsg: \ 000007D0 DS8 256 \ 000008D0 REQUIRE `?` \ tmr_illumination: \ 000008D0 DS8 16 \ 000008E0 REQUIRE `?` \ tmr_vibra: \ 000008E0 DS8 16 \ 000008F0 REQUIRE `?` \ reconnect_tmr: \ 000008F0 DS8 16 \ 00000900 REQUIRE `?` \ tmr_active: \ 00000900 DS8 16 \ 00000910 REQUIRE `?` \ clm_hdr_text: \ 00000910 DS8 48 \ 00000940 REQUIRE `?` \ clmenu_sk_r: \ 00000940 DS8 16 \ 00000950 REQUIRE `?` \ send_tmr: \ 00000950 DS8 16 \ 00000960 REQUIRE `?` 4601 { 4602 Quote, 4603 AddSmile, 4604 GetShortInfo, 4605 AddCurContact, 4606 SendAuthReq, 4607 SendAuthGrant, 4608 OpenLogfile, 4609 ClearLog, 4610 }; 4611 4612 char ecm_contactname[64]; \ ecm_contactname: \ 00000960 DS8 64 \ 000009A0 REQUIRE `?` 4613 \ In segment DATA_C, align 4, align-sorted 4614 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, 8 \ ....08000000 4615 4616 static const MENU_DESC ecmenu_STRUCT= 4617 { 4618 8,NULL,ecmenu_ghook,NULL, 4619 menusoftkeys, 4620 &menu_skt, 4621 0, 4622 NULL, 4623 ecmenu_ITEMS, 4624 ecmenu_HNDLS, 4625 EC_MNU_MAX 4626 }; 4627 \ In segment CODE, align 4, keep-with-next 4628 void ec_menu(EDCHAT_STRUCT *ed_struct) 4629 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 \ 00000008 0040A0E1 MOV R4,R0 4630 CLIST *t; 4631 int to_remove[EC_MNU_MAX+1]; 4632 int remove=0; 4633 if ((t=ed_struct->ed_contact)) \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 4200000A BEQ ??ec_menu_0 4634 { 4635 if (t->name) \ 00000018 ........ LDR R5,??DataTable181 ;; S_ICONS \ 0000001C 963EA0E3 MOV R3,#+2400 \ 00000020 141090E2 ADDS R1,R0,#+20 \ 00000024 0300000A BEQ ??ec_menu_1 4636 { 4637 strncpy(ecm_contactname,t->name,63); \ 00000028 3F20A0E3 MOV R2,#+63 \ 0000002C 050083E0 ADD R0,R3,R5 \ 00000030 160100EF SWI +278 \ 00000034 030000EA B ??ec_menu_2 4638 } 4639 else 4640 { 4641 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000038 0C2090E5 LDR R2,[R0, #+12] \ 0000003C 3A1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000040 050083E0 ADD R0,R3,R5 \ 00000044 160000EF SWI +22 4642 } 4643 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 00000048 040094E5 LDR R0,[R4, #+4] \ 0000004C 0160A0E3 MOV R6,#+1 \ 00000050 820100EF SWI +386 \ 00000054 082094E5 LDR R2,[R4, #+8] \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 020050E1 CMP R0,R2 4644 { 4645 to_remove[++remove]=0; \ 00000060 04108D05 STREQ R1,[SP, #+4] 4646 } 4647 else 4648 { 4649 to_remove[++remove]=1; \ 00000064 0120A013 MOVNE R2,#+1 \ 00000068 04208D15 STRNE R2,[SP, #+4] 4650 } 4651 4652 if (ed_struct->ed_answer<=2) to_remove[++remove]=7; \ 0000006C 080094E5 LDR R0,[R4, #+8] \ 00000070 030050E3 CMP R0,#+3 \ 00000074 0720A0B3 MOVLT R2,#+7 \ 00000078 08208DB5 STRLT R2,[SP, #+8] 4653 if (!ed_struct->ed_contact || connect_state!=3) \ 0000007C 000094E5 LDR R0,[R4, #+0] \ 00000080 0260A0B3 MOVLT R6,#+2 \ 00000084 000050E3 CMP R0,#+0 \ 00000088 0200000A BEQ ??ec_menu_4 \ 0000008C 500195E5 LDR R0,[R5, #+336] \ 00000090 030050E3 CMP R0,#+3 \ 00000094 0D00000A BEQ ??ec_menu_5 4654 { 4655 to_remove[++remove]=2; \ ??ec_menu_4: \ 00000098 010086E2 ADD R0,R6,#+1 \ 0000009C 0D20A0E1 MOV R2,SP \ 000000A0 0230A0E3 MOV R3,#+2 \ 000000A4 003182E7 STR R3,[R2, +R0, LSL #+2] 4656 to_remove[++remove]=3; \ 000000A8 010080E2 ADD R0,R0,#+1 \ 000000AC 0330A0E3 MOV R3,#+3 \ 000000B0 003182E7 STR R3,[R2, +R0, LSL #+2] 4657 to_remove[++remove]=4; \ 000000B4 010080E2 ADD R0,R0,#+1 \ 000000B8 0430A0E3 MOV R3,#+4 \ 000000BC 003182E7 STR R3,[R2, +R0, LSL #+2] 4658 to_remove[++remove]=5; \ 000000C0 016080E2 ADD R6,R0,#+1 \ 000000C4 0D00A0E1 MOV R0,SP \ 000000C8 0520A0E3 MOV R2,#+5 \ 000000CC 062180E7 STR R2,[R0, +R6, LSL #+2] 4659 } 4660 4661 patch_header(&ecmenu_HDR); \ ??ec_menu_5: \ 000000D0 58509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 000000D4 001085E5 STR R1,[R5, #+0] \ 000000D8 888100EF SWI +33160 \ 000000DC 010040E2 SUB R0,R0,#+1 \ 000000E0 B400C5E1 STRH R0,[R5, #+4] \ 000000E4 8A8100EF SWI +33162 \ 000000E8 010040E2 SUB R0,R0,#+1 \ 000000EC B600C5E1 STRH R0,[R5, #+6] 4662 to_remove[0]=remove; \ 000000F0 00608DE5 STR R6,[SP, #+0] 4663 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 000000F4 0D00A0E1 MOV R0,SP \ 000000F8 01002DE9 PUSH {R0} \ 000000FC 10002DE9 PUSH {R4} \ 00000100 0530A0E1 MOV R3,R5 \ 00000104 0800A0E3 MOV R0,#+8 \ 00000108 01002DE9 PUSH {R0} \ 0000010C 142085E2 ADD R2,R5,#+20 \ 00000110 0010A0E3 MOV R1,#+0 \ 00000114 0000A0E3 MOV R0,#+0 \ 00000118 01002DE9 PUSH {R0} \ 0000011C 520100EF SWI +338 \ 00000120 10D08DE2 ADD SP,SP,#+16 4664 } 4665 } \ ??ec_menu_0: \ 00000124 24D08DE2 ADD SP,SP,#+36 ;; stack cleaning \ 00000128 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 0000012C 25750000 DC8 "%u",+0 \ 00000130 ........ DC32 ecmenu_HDR 4666 4667 \ In segment CODE, align 4, keep-with-next 4668 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 4669 { 4670 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 4671 } 4672 \ In segment CODE, align 4, keep-with-next 4673 void AddSmile(GUI *data) 4674 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 4675 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 4676 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 4677 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 4678 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable8: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable9: \ 00000000 ........ DC32 sndMsg2 \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable16: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable17: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable22: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable26: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable31: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable36: \ 00000000 ........ DC32 S_ICONS + 144 \ In segment CODE, align 4, keep-with-next \ ??DataTable37: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable38: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable39: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable43: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable51: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable54: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable56: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable57: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable66: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable67: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable69: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable70: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable71: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable72: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable73: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable74: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable75: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable76: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable77: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable87: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable88: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable89: \ 00000000 ........ DC32 sndMsg2 \ In segment CODE, align 4, keep-with-next \ ??DataTable90: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable91: \ 00000000 ........ DC32 Is_DRAWMAIN_On \ In segment CODE, align 4, keep-with-next \ ??DataTable92: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable93: \ 00000000 ........ DC32 Show_Ping \ In segment CODE, align 4, keep-with-next \ ??DataTable94: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable95: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable98: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable99: \ 00000000 ........ DC32 total_xstatuses \ In segment CODE, align 4, keep-with-next \ ??DataTable105: \ 00000000 ........ DC32 process_active_timer \ In segment CODE, align 4, keep-with-next \ ??DataTable115: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable116: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable118: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable120: \ 00000000 ........ DC32 Show_Ping \ In segment CODE, align 4, keep-with-next \ ??DataTable121: \ 00000000 ........ DC32 Is_DRAWMAIN_On \ In segment CODE, align 4, keep-with-next \ ??DataTable127: \ 00000000 ........ DC32 do_reconnect \ In segment CODE, align 4, keep-with-next \ ??DataTable128: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable129: \ 00000000 ........ DC32 VIBR_ON_CONNECT \ In segment CODE, align 4, keep-with-next \ ??DataTable132: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable133: \ 00000000 ........ DC32 ClearSendQ \ In segment CODE, align 4, keep-with-next \ ??DataTable136: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable137: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable138: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable139: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable140: \ 00000000 ........ DC32 ElfKiller \ In segment CODE, align 4, keep-with-next \ ??DataTable141: \ 00000000 ........ DC32 fontpath \ In segment CODE, align 4, keep-with-next \ ??DataTable142: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable143: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable144: \ 00000000 ........ DC32 system_color \ In segment CODE, align 4, keep-with-next \ ??DataTable145: \ 00000000 ........ DC32 my_keyhook \ In segment CODE, align 4, keep-with-next \ ??DataTable147: \ 00000000 ........ DC32 S_ICONS + 144 \ In segment CODE, align 4, keep-with-next \ ??DataTable151: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable153: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable154: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable155: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable156: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable157: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable158: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable159: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable160: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable161: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable162: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable163: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable164: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable165: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable166: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable167: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable169: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable175: \ 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 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000090 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000094 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000098 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000009C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000A8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000AC 00000000 DC32 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 07000000 DC32 7 \ `?`: \ 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 DC32 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 F6FFFFFF DC32 -10 \ `?`: \ 00000150 00000000 DC32 0 \ `?`: \ 00000154 FFFFFFFF DC32 -1 \ `?`: \ 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 DC32 0 \ `?`: \ 0000016C 00000000 DC32 0H \ `?`: \ 00000170 01000000 DC32 1 \ `?`: \ 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 DC32 0 \ `?`: \ 0000018C 03000000 DC32 3 \ `?`: \ 00000190 00000000 DC32 0 \ `?`: \ 00000194 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000198 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000019C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000001DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000001FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000020C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000021C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000022C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000023C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000024C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000025C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000026C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000027C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000028C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000029C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000002DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000002FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000030C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000031C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000032C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000033C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000034C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000360 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000370 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000380 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000390 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000400 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000410 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000420 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000430 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000440 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000450 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000460 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000470 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000480 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000490 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000500 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 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 \ 0000 \ `?`: \ 00000528 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000538 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000548 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000558 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000568 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000578 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000588 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000598 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000005A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000005C8 326E64206765 DC8 32H, 6EH, 64H, 20H, 67H, 65H, 6EH, 65H \ 6E65 \ 000005D0 726174696F6E DC8 72H, 61H, 74H, 69H, 6FH, 6EH, 20H, 6DH \ 206D \ 000005D8 6F6420626173 DC8 6FH, 64H, 20H, 62H, 61H, 73H, 65H, 64H \ 6564 \ 000005E0 206F6E207265 DC8 20H, 6FH, 6EH, 20H, 72H, 65H, 76H, 69H \ 7669 \ 000005E8 73696F6E2031 DC8 73H, 69H, 6FH, 6EH, 20H, 31H, 38H, 34H \ 3834 \ 000005F0 3821206D6F64 DC8 38H, 21H, 20H, 6DH, 6FH, 64H, 20H, 64H \ 2064 \ 000005F8 6174653A2031 DC8 61H, 74H, 65H, 3AH, 20H, 31H, 39H, 2EH \ 392E \ 00000600 30322E303820 DC8 30H, 32H, 2EH, 30H, 38H, 20H, 31H, 34H \ 3134 \ 00000608 3A30322100 DC8 3AH, 30H, 32H, 21H, 0 \ 0000060D 000000 DC8 0, 0, 0 \ `?`: \ 00000610 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000620 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000630 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000640 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000650 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000660 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000670 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000680 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 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 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.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 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEEFF6E8E800 DC8 "\316\357\366\350\350" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2573257300 DC8 "%s%s" \ 00000005 000000 DC8 0, 0, 0 \ 00000008 25733A202573 DC8 "%s: %s" \ 00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 2E2E2E00 DC8 "..." \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 286177617920 DC8 "(away since %02d : %02d ( %s ) )" \ 73696E636520 \ 25303264203A \ 202530326420 \ 282025732029 \ 202900 \ 00000021 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000077 00 DC8 0 \ 00000078 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 00000083 00 DC8 0 \ 00000084 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 0000008F 00 DC8 0 \ 00000090 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 0000009B 00 DC8 0 \ 0000009C 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 000000A6 0000 DC8 0, 0 \ 000000A8 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 000000EF 00 DC8 0 \ 000000F0 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 00000107 00 DC8 0 \ 00000108 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000113 00 DC8 0 \ 00000114 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 0000011F 00 DC8 0 \ 00000120 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 0000014F 00 DC8 0 \ 00000150 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ 00000008 5C302E747874 DC8 "\\0.txt" \ 00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 00000017 00 DC8 0 \ 00000018 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 00000028 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 00000034 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 00000042 0000 DC8 0, 0 \ 00000044 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 0000005A 0000 DC8 0, 0 \ 0000005C CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \357\356\344\352\353\376\367\350\362\374\361\377!" \ EEE6EDEE20EF \ EEE4EAEBFEF7 \ E8F2FCF1FF21 \ 00 \ 00000075 000000 DC8 0, 0, 0 \ 00000078 CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \361\356\347\344\340\362\374 \361\356\352\345\362, \357\345\360\345\347\340\357\363\361\352 GPRS!" \ EEE6EDEE20F1 \ EEE7E4E0F2FC \ 20F1EEEAE5F2 \ 2C20EFE5F0E5 \ E7E0EFF3F1EA \ 204750525321 \ 00 \ 000000A3 00 DC8 0 \ 000000A4 D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 000000B6 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73656E642072 DC8 "send res %d" \ 657320256400 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 53656E642065 DC8 "Send error!" \ 72726F722100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F2530 DC8 "Sie_%04d" \ 346400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 426164207061 DC8 "Bad packet" \ 636B657400 \ 0000000B 00 DC8 0 \ 0000000C 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 00000017 00 DC8 0 \ 00000018 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000020 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 0000002A 0000 DC8 0, 0 \ 0000002C 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000040 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d %02d-%02d %s:\015\012" \ 303264202530 \ 32642D253032 \ 642025733A0D \ 0A00 \ 0000001A 0000 DC8 0, 0 \ 0000001C 253032643A25 DC8 "%02d:%02d %02d-%02d %s:" \ 303264202530 \ 32642D253032 \ 642025733A00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online: %02d:%02d:%02d \012Server: %s" \ 3A2025303264 \ 3A253032643A \ 25303264200A \ 536572766572 \ 3A20257300 \ 00000023 00 DC8 0 \ 00000024 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000034 73656E743A20 DC8 "sent: %d \012recieved: %d" \ 2564200A7265 \ 636965766564 \ 3A20256400 \ 0000004B 00 DC8 0 \ 0000004C 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 00000059 000000 DC8 0, 0, 0 \ 0000005C 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 00000069 000000 DC8 0, 0, 0 \ 0000006C 626174746572 DC8 "battery: %d percents" \ 793A20256420 \ 70657263656E \ 747300 \ 00000081 000000 DC8 0, 0, 0 \ 00000084 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 00000091 000000 DC8 0, 0, 0 \ 00000094 4175746F4D73 DC8 "AutoMsg: %s %s! im not here! %s %s" \ 673A20257320 \ 25732120696D \ 206E6F742068 \ 657265212025 \ 7320257300 \ 000000B7 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 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ 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 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 4, align-sorted \ `?`: \ 00000000 6F66666C696E DC8 "offline.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 696E76697369 DC8 "invisible.png" \ 626C652E706E \ 6700 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 617761792E70 DC8 "away.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E612E706E67 DC8 "na.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6363757069 DC8 "occupied.png" \ 65642E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646E642E706E DC8 "dnd.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646570726573 DC8 "depression.png" \ 73696F6E2E70 \ 6E6700 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6576696C2E70 DC8 "evil.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 108 AddSmile 4 AddStringToLog 188 AddToMain 152 AskNickAndAddContact 4 BackSpaceContactT9 8 ChangeSound 4 ChangeVibra 4 CheckComand 44 CheckDoubleRun 8 ClearContactT9Key 4 ClearLog 60 ClearSendQ 8 CreateEditChat 116 DrawAck 80 ElfKiller 4 ExtractAnswer 36 FindContactLOGQByAck 12 FindNextActiveContact 0 FindPrevActiveContact 0 FreeLOGQ 8 FreeTemplates 8 GetHost 0 GetHostsCount 0 GetIconIndex 0 GetLastXTextLOGQ 0 GetOnTotalContact 8 GetPort 16 GetShortInfo 20 IlluminationOff 8 IlluminationOn 28 Init_Ext_Sounds 96 LastLOGQ 0 LoadTemplates 332 NewLOGQ 12 OpenLogfile 16 ParseAnswer 36 ParseXStatusText 20 Play 224 ProcessPacket 308 Quote 152 ReadDefSettings 152 RecountMenu 20 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SMART_REDRAW 8 SaveAnswer 12 SendAnswer 28 SendAuthGrant 44 SendAuthReq 44 SendMSGACK 8 UpdateCLheader 40 UpdateCSMname 4 WriteDefSettings 152 ask_my_info 0 atoi 0 away_engage 24 contactlist_menu_ghook 8 contactlist_menu_iconhndl 668 contactlist_menu_onkey 44 create_connect 184 create_contactlist_menu 24 do_ping 4 do_reconnect 4 ec_menu 68 ecmenu_ghook 4 ed_options_handler 64 edchat_ghook 72 edchat_locret 0 edchat_onkey 80 end_socket 8 free_ICONS 16 get_answer 1084 init_time_zone 4 main 64 maincsm_onclose 8 maincsm_oncreate 24 maincsm_onmessage 92 method0 76 method1 8 method2 8 method3 8 method4 0 method5 24 method8 0 method9 0 my_ed_redraw 16 my_keyhook 12 process_active_timer 16 resend 4 send_login 36 set_my_status 4 set_my_xstatus 36 setup_ICONS 16 show_pp_sender 56 start_vibra 8 stop_vibra 4 time_count 0 time_counter 16 to_develop 4 Segment part sizes: Function/Label Bytes -------------- ----- In_EXT_On 4 time_count 64 time_counter 96 show_pp_sender 268 AddToMain 296 away_engage 104 my_keyhook 72 init_time_zone 368 Init_Ext_Sounds 244 SMART_REDRAW 48 setup_ICONS 76 free_ICONS 40 IlluminationOff 60 IlluminationOn 120 ReadDefSettings 260 WriteDefSettings 252 Play 292 start_vibra 100 stop_vibra 84 ChangeVibra 56 ChangeSound 56 FreeTemplates 56 LoadTemplates 400 RXbuf 16392 TXbuf 16392 ElfKiller 28 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 UpdateCLheader 272 ClearContactT9Key 24 AddContactT9Key 36 BackSpaceContactT9 36 create_contactlist_menu 100 contactlist_menu_ghook 68 RecountMenu 160 contactlist_menu_onkey 1020 GetOnTotalContact 92 contactlist_menu_iconhndl 548 GetHost 196 atoi 68 GetPort 284 GetHostsCount 120 create_connect 628 ClearSendQ 40 end_socket 48 resend 24 SendAnswer 404 send_login 148 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1084 AddStringToLog 548 ParseXStatusText 152 AddMsgToChat 832 DrawAck 340 ask_my_info 4 set_my_status 72 set_my_xstatus 264 to_develop 76 ReqAddMsgToChat 120 CheckComand 624 ProcessPacket 2296 process_active_timer 296 method0 668 method1 44 method2 36 method3 24 method4 20 method5 196 method8 8 method9 8 maincsm_oncreate 264 maincsm_onclose 152 do_reconnect 40 CheckDoubleRun 100 maincsm_onmessage 2652 maincsm_name_body 280 ? 792 S_OFFLINE 8 S_INVISIBLE 12 S_AWAY 8 S_NA 4 S_OCCUPIED 12 S_DND 4 S_ONLINE 8 S_FFC 4 icons_names 112 ? 2464 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 8 ? 8 ? 16 ? 4 ? 36 ? 396 ? 16 ? 184 ? 40 ? 12 ? 76 ? 3 ? 52 ? 184 ?_1 8 ? 3 ? 12 ? 28 ? 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 Others 836 26 740 bytes in segment CODE 3 365 bytes in segment DATA_C 2 464 bytes in segment DATA_I 2 464 bytes in segment DATA_ID 33 068 bytes in segment DATA_Z 24 bytes in segment INITTAB 25 928 bytes of CODE memory (+ 836 bytes shared) 5 829 bytes of CONST memory 35 532 bytes of DATA memory Errors: none Warnings: none