############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 30/Mar/2008 21:11:01 # # Copyright 1999-2005 IAR Systems. All rights reserved. # # # # Cpu mode = interwork # # Endian = little # # Stack alignment = 4 # # Source file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c # # Command line = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c -D # # NEWSGOLD -D ELKA -D UIN_WRITE -D kluchnik # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kl # # uchnik\List\ -lC D:\Pasha\elf\_MY_PROJECT_\naticq_mo # # d\kluchnik\List\ -o D:\Pasha\elf\_MY_PROJECT_\naticq # # _mod\kluchnik\Obj\ -s9 --no_unroll --cpu_mode arm # # --endian little --cpu ARM926EJ-S --stack_align 4 # # --interwork -e --fpu None --dlib_config # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\LIB\dl5tpainl8n.h" -I # # "D:\Pasha\Embedded Workbench 4.0 # # Evaluation2\ARM\INC\" --inline_threshold=2 # # List file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kluchnik\List\m # # ain.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kluchnik\Obj\ma # # in.r79 # # # # # ############################################################################## D:\Pasha\elf\_MY_PROJECT_\naticq_mod\main.c 1 #include "../inc/swilib.h" 2 #include "../inc/cfg_items.h" 3 #include "../inc/pnglist.h" 4 #include "NatICQ.h" 5 #include "history.h" 6 #include "conf_loader.h" 7 #include "mainmenu.h" 8 #include "main.h" 9 #include "language.h" 10 #include "../inc/xtask_ipc.h" 11 #include "smiles.h" 12 #include "naticq_ipc.h" 13 #include "status_change.h" 14 #include "strings.h" 15 //#include "string_util_int.h" 16 #include "manage_cl.h" 17 #include "cl_work.h" 18 #include "select_smile.h" 19 #include "revision.h" 20 #include "print.h" 21 #include "screen_save.h" 22 #ifdef NEWSGOLD 23 #include "player_tags.h" 24 #endif 25 #include "swilib2.h" 26 #include "rect_patcher.h" 27 28 #ifndef NEWSGOLD 29 #define SEND_TIMER 30 #endif 31 extern const unsigned int Vibra_cc; 32 #ifdef ELKA 33 #pragma swi_number=54 34 __swi __arm void SLI_SetState(unsigned char state); 35 #endif 36 37 #define IN_TICKS(sec) (sec * TMR_SECOND) 38 extern int janis; 39 extern const unsigned int Ping_X; 40 extern const unsigned int Ping_Y; 41 extern const unsigned int unread_X; 42 extern const unsigned int unread_Y; 43 extern const int show_xstatus; 44 extern const char fontpath[64]; 45 extern const int ShowStatusIcon; 46 47 int main_d; 48 49 //For online/offline log 50 extern const int isLogOffline; 51 extern const int isLogOnline; 52 53 #ifdef ELKA 54 //If action vol up && vol down button on elka 55 extern const int isVolUpButton; 56 extern const int isVolDownButton; 57 #endif 58 59 //Autoaway message 60 extern const char awayHelloMsg[24];//hello msg 61 extern const char awayMsg[64];//message 62 63 extern const int IsShowLoopback;//Show Loopback contact in CL 64 //For png font 65 extern const unsigned int fonto; 66 extern const unsigned int spaco1; 67 extern const unsigned int spaco2; 68 //int spaco2=spaco1; 69 extern const char fontColor[];//Цвет для системного шрифта 70 extern const char bgrColor[]; 71 72 73 extern int *XStatusesIconArray; 74 int align=0; 75 //int space=1; 76 void *canvasdata; 77 int paused_height; 78 79 extern const unsigned int AUTO_ENGADE; 80 char talk_sound[128]; 81 int uins; 82 //char m_1[]="unofficial! private use only"; 83 //char m_2[]="mod by (c)Evilfox 315384924"; 84 char unread_msg_info[64]; 85 extern const int Is_Unread_On; 86 int saver_on; 87 88 #ifdef NEWSGOLD 89 extern char teast2[256]; 90 #endif 91 92 #ifdef ELKA 93 char last_msg_buffer[4048]; 94 #endif 95 96 97 ///////////////////////////////////////////////auto ping//////////////////// 98 GBSTMR mytmr3; 99 static void PingToServer2(void) 100 { 101 TPKT *p; 102 p=malloc(sizeof(PKT)+sizeof(TTime)); 103 GetDateTime(NULL,(TTime *)p->data); 104 p->pkt.uin=0; 105 p->pkt.type=T_ECHO; 106 p->pkt.data_len=sizeof(TTime); 107 SUBPROC((void *)SendAnswer,0,p); 108 } 109 110 int Is_PING_On; 111 \ In segment CODE, align 4, keep-with-next 112 void Pinger2() 113 { 114 if(Is_PING_On) \ Pinger2: \ 00000000 ........ LDR R0,??DataTable34 ;; S_ICONS \ 00000004 70402DE9 PUSH {R4-R6,LR} \ 00000008 ........ LDR R5,??DataTable1 ;; Pinger2 \ 0000000C E810A0E3 MOV R1,#+232 \ 00000010 4C1D81E3 ORR R1,R1,#0x1300 \ 00000014 004081E0 ADD R4,R1,R0 \ 00000018 F80090E5 LDR R0,[R0, #+248] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1500000A BEQ ??Pinger2_0 115 { 116 PingToServer2(); \ 00000024 1000A0E3 MOV R0,#+16 \ 00000028 140000EF SWI +20 \ 0000002C 0060A0E1 MOV R6,R0 \ 00000030 081086E2 ADD R1,R6,#+8 \ 00000034 0000A0E3 MOV R0,#+0 \ 00000038 B40000EF SWI +180 \ 0000003C 0000A0E3 MOV R0,#+0 \ 00000040 000086E5 STR R0,[R6, #+0] \ 00000044 1200A0E3 MOV R0,#+18 \ 00000048 B400C6E1 STRH R0,[R6, #+4] \ 0000004C 0800A0E3 MOV R0,#+8 \ 00000050 B600C6E1 STRH R0,[R6, #+6] \ 00000054 ........ LDR R0,??DataTable2 ;; SendAnswer \ 00000058 0620A0E1 MOV R2,R6 \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 710100EF SWI +369 117 GBS_StartTimerProc(&mytmr3, 12960, Pinger2); \ 00000064 0520A0E1 MOV R2,R5 \ 00000068 A010A0E3 MOV R1,#+160 \ 0000006C C81D81E3 ORR R1,R1,#0x3200 \ 00000070 0400A0E1 MOV R0,R4 \ 00000074 4D0000EF SWI +77 \ 00000078 7080BDE8 POP {R4-R6,PC} 118 } 119 else 120 GBS_StartTimerProc(&mytmr3, 2160, Pinger2); \ ??Pinger2_0: \ 0000007C 0520A0E1 MOV R2,R5 \ 00000080 871EA0E3 MOV R1,#+2160 \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 4D0000EF SWI +77 121 } \ 0000008C 7080BDE8 POP {R4-R6,PC} ;; return 122 123 //////////////////////////////////////auto ping///////////////////////////// 124 125 extern volatile int total_smiles; 126 extern volatile int total_xstatuses; 127 extern volatile int xstatuses_load; 128 extern volatile int pictures_max; //2026rev 129 extern volatile int pictures_loaded; //2026rev 130 131 #ifdef ELKA 132 int Is_SLI_On;//мигаем светодиодом 133 #endif 134 135 int Is_SMARTCPU_On;//Вывод сообщений на гэ 136 int Is_INC_On;//Popup message 137 int Is_ILU_On;//Режим подсветки 138 int Is_Double_Vibra_On;//Режим напоминания 139 int total_unread; 140 int total_unread2; 141 142 #ifdef ELKA \ In segment DATA_C, align 4, align-sorted 143 const int SLI_TYPE=1; \ SLI_TYPE: \ 00000000 01000000 DC32 1 144 #endif 145 146 char PINGO[256]; 147 148 #ifdef ELKA 149 extern const unsigned int SLI_time; 150 extern const unsigned int SLI_time2; 151 #endif 152 #define USE_MLMENU 153 154 #define TMR_SECOND 216 155 156 //IPC 157 const char ipc_my_name[32]=IPC_NATICQ_NAME; 158 const char ipc_xtask_name[]=IPC_XTASK_NAME; 159 const char ipc_test_name[]="test"; 160 IPC_REQ gipc; 161 162 163 char elf_path[256]; 164 int maincsm_id; 165 int maingui_id; 166 \ In segment CODE, align 4, keep-with-next 167 void SMART_REDRAW(void) 168 { \ SMART_REDRAW: \ 00000000 10402DE9 PUSH {R4,LR} 169 int f; 170 LockSched(); \ 00000004 460100EF SWI +326 171 f=IsGuiOnTop(maingui_id); \ 00000008 1C009FE5 LDR R0,??SMART_REDRAW_0 ;; S_ICONS + 280 \ 0000000C 000090E5 LDR R0,[R0, #+0] \ 00000010 350100EF SWI +309 \ 00000014 0040A0E1 MOV R4,R0 172 UnlockSched(); \ 00000018 470100EF SWI +327 173 if (f) REDRAW(); \ 0000001C 000054E3 CMP R4,#+0 \ 00000020 1080BD08 POPEQ {R4,PC} \ 00000024 720100EF SWI +370 174 } \ 00000028 1080BDE8 POP {R4,PC} ;; return \ ??SMART_REDRAW_0: \ 0000002C ........ DC32 S_ICONS + 280 175 176 //По 10 секунд 177 #define ACTIVE_TIME 360 178 179 //Максимальное количество сообщений в логе 180 #define MAXLOGMSG (20) 181 182 // Строковые описания статусов 183 184 const char S_OFFLINE[]="Offline"; 185 const char S_INVISIBLE[]="Invisible"; 186 const char S_AWAY[]="Away"; 187 const char S_NA[]="N/A"; 188 const char S_OCCUPIED[]="Occupied"; 189 const char S_DND[]="DND"; 190 const char S_ONLINE[]="Online"; 191 const char S_FFC[]="FFC"; 192 193 volatile int SENDMSGCOUNT; 194 #ifdef kluchnik 195 int IsActiveUp=1; 196 #else 197 int IsActiveUp=0; 198 #endif 199 int Is_Vibra_Enabled; 200 int Is_Id3tag_Enabled; 201 unsigned int Is_Sounds_Enabled; 202 int Is_Show_Offline; 203 int Is_Show_Groups; 204 205 int S_ICONS[TOTAL_ICONS+1]; 206 207 #define EOP -10 208 int CurrentStatus; 209 #ifdef NEWSGOLD 210 extern int CurrentXStatus; 211 #else 212 int CurrentXStatus; 213 #endif 214 215 WSHDR *ews; 216 217 extern const unsigned int UIN; 218 extern const char PASS[]; 219 220 static const char * const icons_names[TOTAL_ICONS]= 221 { 222 "offline.png", 223 "invisible.png", 224 "away.png", 225 "na.png", 226 "occupied.png", 227 "dnd.png", 228 "depression.png", 229 "evil.png", 230 "home.png", 231 "lunch.png", 232 "work.png", 233 "online.png", 234 "ffc.png", 235 "message.png", 236 "unknown.png", 237 "groupon.png", 238 "groupoff.png", 239 "null.png", 240 "addcont.png", 241 "head.png", 242 "logo.png", 243 "ping.png", 244 "settings.png", 245 "vis1.png", 246 "vis2.png", 247 "vis3.png", 248 "vis4.png", 249 "vis5.png" 250 }; 251 252 extern const char ICON_PATH[]; 253 254 ////=================================away_msg============== 255 256 #ifdef NEWSGOLD 257 #pragma swi_number=0x0C5 258 __swi __arm int IsIdleUiOnTop();//На сг нет этой функции 259 #else 260 int IsIdleUiOnTop(void) 261 { 262 void *icsm=FindCSMbyID(CSM_root()->idle_id); 263 if (IsGuiOnTop(((int*)icsm)[DISPLACE_OF_IDLEGUI_ID/4 ])) 264 return(1); 265 else 266 return(0); 267 } 268 #endif 269 270 int msg_away_timer=0;//Счетчик для автостатуса 271 char away_msg[264];//Само сообщение для ответа 272 char away_msg_time[64];//Время когда сработал таймер 273 char away_msg_time_dace[16];//время отсутвтвия для вывода на идле 274 char *inp_away_msg2;//Текст сообщения,если будем писать сами(на долгую 6 или VOL_DOWN_BUTTON),а не брать из конфига 275 char tim_zone[16]; 276 extern const int time_zone; \ In segment DATA_Z, align 4, align-sorted 277 int timeh; \ timeh: \ 00000000 DS8 4 \ In segment DATA_Z, align 4, align-sorted 278 int timemin; \ timemin: \ 00000000 DS8 4 279 int away_m; 280 int status_rem;//ДЛя сохранения текущего статуса 281 int change_back_status;//вернуть предыдущий статус или нет 282 GBSTMR away_tmr; 283 extern const int Auto_Status;//Включен автостатус или нет 284 285 int Show_XTX;//Показывать хстатус или время он лайн \ In segment CODE, align 4, keep-with-next 286 void FreeXText2(CLIST *t) 287 { \ FreeXText2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 288 if (t->xtext2) {mfree(t->xtext2);t->xtext2=NULL;} \ 00000008 8C0094E5 LDR R0,[R4, #+140] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 8C0084E5 STR R0,[R4, #+140] 289 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 290 \ In segment CODE, align 4, keep-with-next 291 void away_timer()//Таймер автостатуса 292 { 293 if(msg_away_timer==AUTO_ENGADE) \ away_timer: \ 00000000 ........ LDR R1,??DataTable3 ;; AUTO_ENGADE \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable34 ;; S_ICONS \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 280194E5 LDR R0,[R4, #+296] \ 00000014 001091E5 LDR R1,[R1, #+0] \ 00000018 010050E1 CMP R0,R1 \ 0000001C 1C00001A BNE ??away_timer_0 294 { 295 TTime tt; 296 GetDateTime(NULL,&tt); 297 sprintf(away_msg_time_dace, "%2d:%2d", tt.hour, tt.min); \ 00000020 A4509FE5 LDR R5,??away_timer_1 ;; `?` \ 00000024 0D10A0E1 MOV R1,SP \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C B40000EF SWI +180 \ 00000030 0130DDE5 LDRB R3,[SP, #+1] \ 00000034 0020DDE5 LDRB R2,[SP, #+0] \ 00000038 0510A0E1 MOV R1,R5 \ 0000003C 590D84E2 ADD R0,R4,#+5696 \ 00000040 160000EF SWI +22 298 sprintf(away_msg_time, "( отсутствую примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 00000044 5000A0E3 MOV R0,#+80 \ 00000048 580D80E3 ORR R0,R0,#0x1600 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 01002DE9 PUSH {R0} \ 00000054 0530DDE5 LDRB R3,[SP, #+5] \ 00000058 0420DDE5 LDRB R2,[SP, #+4] \ 0000005C 081085E2 ADD R1,R5,#+8 \ 00000060 580D84E2 ADD R0,R4,#+5632 \ 00000064 160000EF SWI +22 299 away_m=1; 300 if(CurrentStatus!=2) \ 00000068 700194E5 LDR R0,[R4, #+368] \ 0000006C 0150A0E3 MOV R5,#+1 \ 00000070 305184E5 STR R5,[R4, #+304] \ 00000074 020050E3 CMP R0,#+2 \ 00000078 04D08DE2 ADD SP,SP,#+4 \ 0000007C 0400000A BEQ ??away_timer_0 301 { 302 status_rem=CurrentStatus; \ 00000080 340184E5 STR R0,[R4, #+308] 303 CurrentStatus=2; \ 00000084 0200A0E3 MOV R0,#+2 \ 00000088 700184E5 STR R0,[R4, #+368] 304 set_my_status(); \ 0000008C ........ BL set_my_status 305 // SUBPROC((void*)WriteDefSettings); 306 change_back_status=1; \ 00000090 385184E5 STR R5,[R4, #+312] 307 } 308 } 309 310 if(Auto_Status) \ ??away_timer_0: \ 00000094 ........ LDR R0,??DataTable5 ;; Auto_Status 311 msg_away_timer++; 312 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 00000098 30209FE5 LDR R2,??away_timer_1+0x4 ;; away_timer \ 0000009C 000090E5 LDR R0,[R0, #+0] \ 000000A0 3810A0E3 MOV R1,#+56 \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 28019415 LDRNE R0,[R4, #+296] \ 000000AC 401E81E3 ORR R1,R1,#0x400 \ 000000B0 01008012 ADDNE R0,R0,#+1 \ 000000B4 28018415 STRNE R0,[R4, #+296] \ 000000B8 6000A0E3 MOV R0,#+96 \ 000000BC 580D80E3 ORR R0,R0,#0x1600 \ 000000C0 040080E0 ADD R0,R0,R4 \ 000000C4 4D0000EF SWI +77 313 } \ 000000C8 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??away_timer_1: \ 000000CC ........ DC32 `?` \ 000000D0 ........ DC32 away_timer 314 315 \ In segment CODE, align 4, keep-with-next 316 void init_time_zone() 317 { 318 switch(time_zone) \ init_time_zone: \ 00000000 50219FE5 LDR R2,??init_time_zone_1 ;; time_zone \ 00000004 50019FE5 LDR R0,??init_time_zone_1+0x4 ;; S_ICONS + 5712 \ 00000008 50119FE5 LDR R1,??init_time_zone_1+0x8 ;; `?` \ 0000000C 00402DE9 PUSH {LR} \ 00000010 002092E5 LDR R2,[R2, #+0] \ 00000014 200052E3 CMP R2,#+32 \ 00000018 0080BD88 POPHI {PC} \ 0000001C 013F8FE2 ADR R3,??init_time_zone_0 \ 00000020 0230D3E7 LDRB R3,[R3, R2] \ 00000024 03F18FE0 ADD PC,PC,R3, LSL #+2 \ ??init_time_zone_0: \ 00000028 0C080B0E DC8 +12,+8,+11,+14 \ 0000002C 10121416 DC8 +16,+18,+20,+22 \ 00000030 181A1C1E DC8 +24,+26,+28,+30 \ 00000034 20222426 DC8 +32,+34,+36,+38 \ 00000038 282A2C2E DC8 +40,+42,+44,+46 \ 0000003C 30323436 DC8 +48,+50,+52,+54 \ 00000040 383A3C3E DC8 +56,+58,+60,+62 \ 00000044 40424446 DC8 +64,+66,+68,+70 \ 00000048 48000000 DC8 +72,+0,+0,+0 319 { 320 case 0: 321 sprintf(tim_zone, "GMT -12:00"); 322 break; 323 case 1: 324 sprintf(tim_zone, "GMT -11:00"); \ ??init_time_zone_2: \ 0000004C 0C1081E2 ADD R1,R1,#+12 \ 00000050 160000EF SWI +22 \ 00000054 0080BDE8 POP {PC} 325 break; 326 case 2: 327 sprintf(tim_zone, "GMT -10:00"); \ ??init_time_zone_3: \ 00000058 181081E2 ADD R1,R1,#+24 \ ??init_time_zone_4: \ 0000005C 160000EF SWI +22 \ 00000060 0080BDE8 POP {PC} 328 break; 329 case 3: 330 sprintf(tim_zone, "GMT -09:00"); \ ??init_time_zone_5: \ 00000064 241081E2 ADD R1,R1,#+36 \ 00000068 FBFFFFEA B ??init_time_zone_4 331 break; 332 case 4: 333 sprintf(tim_zone, "GMT -08:00"); \ ??init_time_zone_6: \ 0000006C 301081E2 ADD R1,R1,#+48 \ 00000070 F9FFFFEA B ??init_time_zone_4 334 break; 335 case 5: 336 sprintf(tim_zone, "GMT -07:00"); \ ??init_time_zone_7: \ 00000074 3C1081E2 ADD R1,R1,#+60 \ 00000078 F7FFFFEA B ??init_time_zone_4 337 break; 338 case 6: 339 sprintf(tim_zone, "GMT -06:00"); \ ??init_time_zone_8: \ 0000007C 481081E2 ADD R1,R1,#+72 \ 00000080 F5FFFFEA B ??init_time_zone_4 340 break; 341 case 7: 342 sprintf(tim_zone, "GMT -05:00"); \ ??init_time_zone_9: \ 00000084 541081E2 ADD R1,R1,#+84 \ 00000088 F3FFFFEA B ??init_time_zone_4 343 break; 344 case 8: 345 sprintf(tim_zone, "GMT -04:00"); \ ??init_time_zone_10: \ 0000008C 601081E2 ADD R1,R1,#+96 \ 00000090 F1FFFFEA B ??init_time_zone_4 346 break; 347 case 9: 348 sprintf(tim_zone, "GMT -03:30"); \ ??init_time_zone_11: \ 00000094 6C1081E2 ADD R1,R1,#+108 \ 00000098 EFFFFFEA B ??init_time_zone_4 349 break; 350 case 10: 351 sprintf(tim_zone, "GMT -03:00"); \ ??init_time_zone_12: \ 0000009C 781081E2 ADD R1,R1,#+120 \ 000000A0 EDFFFFEA B ??init_time_zone_4 352 break; 353 case 11: 354 sprintf(tim_zone, "GMT -02:00"); \ ??init_time_zone_13: \ 000000A4 841081E2 ADD R1,R1,#+132 \ 000000A8 EBFFFFEA B ??init_time_zone_4 355 break; 356 case 12: 357 sprintf(tim_zone, "GMT -01:00"); \ ??init_time_zone_14: \ 000000AC 901081E2 ADD R1,R1,#+144 \ 000000B0 E9FFFFEA B ??init_time_zone_4 358 break; 359 case 13: 360 sprintf(tim_zone, "GMT 00:00"); \ ??init_time_zone_15: \ 000000B4 9C1081E2 ADD R1,R1,#+156 \ 000000B8 E7FFFFEA B ??init_time_zone_4 361 break; 362 case 14: 363 sprintf(tim_zone, "GMT +01:00"); \ ??init_time_zone_16: \ 000000BC A81081E2 ADD R1,R1,#+168 \ 000000C0 E5FFFFEA B ??init_time_zone_4 364 break; 365 case 15: 366 sprintf(tim_zone, "GMT +02:00"); \ ??init_time_zone_17: \ 000000C4 B41081E2 ADD R1,R1,#+180 \ 000000C8 E3FFFFEA B ??init_time_zone_4 367 break; 368 case 16: 369 sprintf(tim_zone, "GMT +03:00"); \ ??init_time_zone_18: \ 000000CC C01081E2 ADD R1,R1,#+192 \ 000000D0 E1FFFFEA B ??init_time_zone_4 370 break; 371 case 17: 372 sprintf(tim_zone, "GMT +03:30"); \ ??init_time_zone_19: \ 000000D4 CC1081E2 ADD R1,R1,#+204 \ 000000D8 DFFFFFEA B ??init_time_zone_4 373 break; 374 case 18: 375 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC D81081E2 ADD R1,R1,#+216 \ 000000E0 DDFFFFEA B ??init_time_zone_4 376 break; 377 case 19: 378 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 601F81E2 ADD R1,R1,#+384 \ 000000E8 DBFFFFEA B ??init_time_zone_4 379 break; 380 case 20: 381 sprintf(tim_zone, "GMT +05:00"); \ ??init_time_zone_22: \ 000000EC E41081E2 ADD R1,R1,#+228 \ 000000F0 D9FFFFEA B ??init_time_zone_4 382 break; 383 case 21: 384 sprintf(tim_zone, "GMT +05:30"); \ ??init_time_zone_23: \ 000000F4 F01081E2 ADD R1,R1,#+240 \ 000000F8 D7FFFFEA B ??init_time_zone_4 385 break; 386 case 22: 387 sprintf(tim_zone, "GMT +05:45"); \ ??init_time_zone_24: \ 000000FC FC1081E2 ADD R1,R1,#+252 \ 00000100 D5FFFFEA B ??init_time_zone_4 388 break; 389 case 23: 390 sprintf(tim_zone, "GMT +06:00"); \ ??init_time_zone_25: \ 00000104 421F81E2 ADD R1,R1,#+264 \ 00000108 D3FFFFEA B ??init_time_zone_4 391 break; 392 case 24: 393 sprintf(tim_zone, "GMT +06:30"); \ ??init_time_zone_26: \ 0000010C 451F81E2 ADD R1,R1,#+276 \ 00000110 D1FFFFEA B ??init_time_zone_4 394 break; 395 case 25: 396 sprintf(tim_zone, "GMT +07:00"); \ ??init_time_zone_27: \ 00000114 481F81E2 ADD R1,R1,#+288 \ 00000118 CFFFFFEA B ??init_time_zone_4 397 break; 398 case 26: 399 sprintf(tim_zone, "GMT +08:00"); \ ??init_time_zone_28: \ 0000011C 4B1F81E2 ADD R1,R1,#+300 \ 00000120 CDFFFFEA B ??init_time_zone_4 400 break; 401 case 27: 402 sprintf(tim_zone, "GMT +09:00"); \ ??init_time_zone_29: \ 00000124 4E1F81E2 ADD R1,R1,#+312 \ 00000128 CBFFFFEA B ??init_time_zone_4 403 break; 404 case 28: 405 sprintf(tim_zone, "GMT +09:30"); \ ??init_time_zone_30: \ 0000012C 511F81E2 ADD R1,R1,#+324 \ 00000130 C9FFFFEA B ??init_time_zone_4 406 break; 407 case 29: 408 sprintf(tim_zone, "GMT +10:00"); \ ??init_time_zone_31: \ 00000134 541F81E2 ADD R1,R1,#+336 \ 00000138 C7FFFFEA B ??init_time_zone_4 409 break; 410 case 30: 411 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 571F81E2 ADD R1,R1,#+348 \ 00000140 C5FFFFEA B ??init_time_zone_4 412 break; 413 case 31: 414 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 5A1F81E2 ADD R1,R1,#+360 \ 00000148 C3FFFFEA B ??init_time_zone_4 415 break; 416 case 32: 417 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 5D1F81E2 ADD R1,R1,#+372 \ 00000150 160000EF SWI +22 418 break; 419 } 420 } \ ??init_time_zone_35: \ 00000154 0080BDE8 POP {PC} ;; return \ ??init_time_zone_1: \ 00000158 ........ DC32 time_zone \ 0000015C ........ DC32 S_ICONS + 5712 \ 00000160 ........ DC32 `?` 421 422 //=================================away_msg=============== 423 //////////////////////////////////////////tozhe dlja auto ping/////////////// 424 \ In segment CODE, align 4, keep-with-next 425 void DrawPing(void *canv) 426 { 427 #ifdef EVILFOX 428 PrintField(date_X,date_Y, PINGO, align, fonto, space); 429 #else 430 PrintField(Ping_X,Ping_Y, PINGO, align, fonto, spaco1); \ DrawPing: \ 00000000 ........ LDR R1,??DataTable20 ;; spaco1 \ 00000004 ........ LDR R0,??DataTable34 ;; S_ICONS \ 00000008 00402DE9 PUSH {LR} \ 0000000C 001091E5 LDR R1,[R1, #+0] \ 00000010 02002DE9 PUSH {R1} \ 00000014 ........ LDR R1,??DataTable21 ;; fonto \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 02002DE9 PUSH {R1} \ 00000020 E43090E5 LDR R3,[R0, #+228] \ 00000024 F810A0E3 MOV R1,#+248 \ 00000028 4C1D81E3 ORR R1,R1,#0x1300 \ 0000002C 002081E0 ADD R2,R1,R0 \ 00000030 10009FE5 LDR R0,??DrawPing_0 ;; Ping_Y \ 00000034 001090E5 LDR R1,[R0, #+0] \ 00000038 0C009FE5 LDR R0,??DrawPing_0+0x4 ;; Ping_X \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 ........ _BLF PrintField,??PrintField??rA 431 #endif 432 } \ 00000044 0380BDE8 POP {R0,R1,PC} ;; return \ ??DrawPing_0: \ 00000048 ........ DC32 Ping_Y \ 0000004C ........ DC32 Ping_X 433 434 //////////////////////////////////////////tozhe dlja auto ping/////////////// 435 436 GBSTMR mytmr; 437 GBSTMR mytmr2; 438 volatile int vibra_count; 439 #ifdef ELKA 440 void SLI_Off(void); 441 #endif 442 void start_vibra2(void); 443 444 //////////////////////////reminder timer///////////////////////// 445 \ In segment CODE, align 4, keep-with-next 446 void Remind_Timer2() 447 { \ Remind_Timer2: \ 00000000 10402DE9 PUSH {R4,LR} 448 if (total_unread) \ 00000004 ........ LDR R4,??DataTable34 ;; S_ICONS \ 00000008 AC0194E5 LDR R0,[R4, #+428] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 449 { 450 vibra_count=Vibra_cc; \ 00000014 20009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 780184E5 STR R0,[R4, #+376] 451 start_vibra2(); \ 00000020 ........ BL start_vibra2 452 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ 00000024 ........ LDR R2,??DataTable11 ;; Remind_Timer2 \ 00000028 5010A0E3 MOV R1,#+80 \ 0000002C 641D81E3 ORR R1,R1,#0x1900 \ 00000030 5A0D84E2 ADD R0,R4,#+5760 \ 00000034 4D0000EF SWI +77 453 } 454 } \ 00000038 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 0000003C ........ DC32 Vibra_cc 455 \ In segment CODE, align 4, keep-with-next 456 void Reminder_timer() 457 { 458 GBS_StartTimerProc(&mytmr2, 6480, Remind_Timer2); \ Reminder_timer: \ 00000000 ........ LDR R2,??DataTable11 ;; Remind_Timer2 \ 00000004 10009FE5 LDR R0,??Reminder_timer_0 ;; S_ICONS + 5760 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 5010A0E3 MOV R1,#+80 \ 00000010 641D81E3 ORR R1,R1,#0x1900 \ 00000014 4D0000EF SWI +77 459 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??Reminder_timer_0: \ 0000001C ........ DC32 S_ICONS + 5760 460 //////////////////////////reminder timer///////////////////////// 461 462 //////////////////////////uptime////////////////////////// 463 int Is_UPTIME_On; 464 int xstatus_old; 465 int minimum_xstatus; 466 int maximum; 467 468 //Online time on idle 469 extern const unsigned int onlineTime_x; 470 extern const unsigned int onlineTime_y; 471 \ In segment CODE, align 4, keep-with-next 472 void xstatuse() 473 { \ xstatuse: \ 00000000 30402DE9 PUSH {R4,R5,LR} 474 maximum++; \ 00000004 ........ LDR R4,??DataTable34 ;; S_ICONS 475 if(maximum==60) \ 00000008 0050A0E3 MOV R5,#+0 \ 0000000C 4C0194E5 LDR R0,[R4, #+332] \ 00000010 010080E2 ADD R0,R0,#+1 \ 00000014 4C0184E5 STR R0,[R4, #+332] \ 00000018 3C0050E3 CMP R0,#+60 \ 0000001C 0700001A BNE ??xstatuse_0 476 { 477 if(saver_on) reftes(); \ 00000020 F40094E5 LDR R0,[R4, #+244] \ 00000024 000050E3 CMP R0,#+0 \ 00000028 0000000A BEQ ??xstatuse_1 \ 0000002C ........ _BLF reftes,??reftes??rA 478 maximum=0; 479 minimum_xstatus++; \ ??xstatuse_1: \ 00000030 480194E5 LDR R0,[R4, #+328] \ 00000034 4C5184E5 STR R5,[R4, #+332] \ 00000038 010080E2 ADD R0,R0,#+1 \ 0000003C 480184E5 STR R0,[R4, #+328] 480 } 481 if(minimum_xstatus==60) \ ??xstatuse_0: \ 00000040 480194E5 LDR R0,[R4, #+328] \ 00000044 3C0050E3 CMP R0,#+60 \ 00000048 3080BD18 POPNE {R4,R5,PC} 482 { 483 minimum_xstatus=0; 484 xstatus_old++; \ 0000004C 440194E5 LDR R0,[R4, #+324] \ 00000050 485184E5 STR R5,[R4, #+328] \ 00000054 010080E2 ADD R0,R0,#+1 \ 00000058 440184E5 STR R0,[R4, #+324] 485 } 486 } \ 0000005C 3080BDE8 POP {R4,R5,PC} ;; return 487 488 GBSTMR mytmr4; 489 #ifdef NEWSGOLD 490 GBSTMR tracktmr; 491 int tracktimer; 492 #endif 493 extern const int Pause_Time; 494 \ In segment CODE, align 4, keep-with-next 495 void x_zstatus() 496 { \ x_zstatus: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 497 if(connect_state==3) \ 00000004 ........ LDR R4,??DataTable34 ;; S_ICONS \ 00000008 84609FE5 LDR R6,??x_zstatus_0 ;; x_zstatus \ 0000000C 9000A0E3 MOV R0,#+144 \ 00000010 580D80E3 ORR R0,R0,#0x1600 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 880194E5 LDR R0,[R4, #+392] \ 0000001C 0070A0E3 MOV R7,#+0 \ 00000020 030050E3 CMP R0,#+3 \ 00000024 0F00001A BNE ??x_zstatus_1 498 { 499 xstatuse(); \ 00000028 ........ BL xstatuse 500 #ifdef NEWSGOLD 501 if (tracktimer>=10)/*&&(_GetPlayStatus()!=1))*/ \ 0000002C 500194E5 LDR R0,[R4, #+336] \ 00000030 0A0050E3 CMP R0,#+10 \ 00000034 070000BA BLT ??x_zstatus_2 502 { 503 GBS_StartTimerProc(&tracktmr, 216*5, GetTags); \ 00000038 ........ LDR R2,??DataTable14 ;; GetTags \ 0000003C 3810A0E3 MOV R1,#+56 \ 00000040 401E81E3 ORR R1,R1,#0x400 \ 00000044 A000A0E3 MOV R0,#+160 \ 00000048 580D80E3 ORR R0,R0,#0x1600 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 4D0000EF SWI +77 504 tracktimer=0; \ 00000054 507184E5 STR R7,[R4, #+336] 505 } 506 tracktimer++; \ ??x_zstatus_2: \ 00000058 500194E5 LDR R0,[R4, #+336] \ 0000005C 010080E2 ADD R0,R0,#+1 \ 00000060 500184E5 STR R0,[R4, #+336] 507 #endif 508 GBS_StartTimerProc(&mytmr4, 216, x_zstatus); \ 00000064 050000EA B ??x_zstatus_3 509 } 510 else 511 { 512 if(!Pause_Time) \ ??x_zstatus_1: \ 00000068 28009FE5 LDR R0,??x_zstatus_0+0x4 ;; Pause_Time \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 000050E3 CMP R0,#+0 513 { 514 xstatus_old=0; \ 00000074 44718405 STREQ R7,[R4, #+324] 515 minimum_xstatus=0; \ 00000078 48718405 STREQ R7,[R4, #+328] 516 maximum=0; \ 0000007C 4C718405 STREQ R7,[R4, #+332] 517 } 518 GBS_StartTimerProc(&mytmr4, 216, x_zstatus); \ ??x_zstatus_3: \ 00000080 0620A0E1 MOV R2,R6 \ 00000084 D810A0E3 MOV R1,#+216 \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 4D0000EF SWI +77 519 } 520 } \ 00000090 F080BDE8 POP {R4-R7,PC} ;; return \ ??x_zstatus_0: \ 00000094 ........ DC32 x_zstatus \ 00000098 ........ DC32 Pause_Time 521 522 char onlineTime[128]; \ In segment CODE, align 4, keep-with-next 523 void DrawOnlineTime(void *canv) 524 { 525 526 if(connect_state==3) \ DrawOnlineTime: \ 00000000 80109FE5 LDR R1,??DrawOnlineTime_0 ;; `?` \ 00000004 30402DE9 PUSH {R4,R5,LR} \ 00000008 ........ LDR R4,??DataTable34 ;; S_ICONS \ 0000000C B000A0E3 MOV R0,#+176 \ 00000010 580D80E3 ORR R0,R0,#0x1600 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 880194E5 LDR R0,[R4, #+392] \ 0000001C 030050E3 CMP R0,#+3 \ 00000020 0700001A BNE ??DrawOnlineTime_1 527 { 528 sprintf(onlineTime,"Online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); \ 00000024 4C0194E5 LDR R0,[R4, #+332] \ 00000028 01002DE9 PUSH {R0} \ 0000002C 483194E5 LDR R3,[R4, #+328] \ 00000030 442194E5 LDR R2,[R4, #+324] \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 160000EF SWI +22 \ 0000003C 04D08DE2 ADD SP,SP,#+4 \ 00000040 020000EA B ??DrawOnlineTime_2 529 } 530 else 531 sprintf(onlineTime,"Offline"); \ ??DrawOnlineTime_1: \ 00000044 181081E2 ADD R1,R1,#+24 \ 00000048 0500A0E1 MOV R0,R5 \ 0000004C 160000EF SWI +22 532 PrintField(onlineTime_x,onlineTime_y, onlineTime, align, fonto, spaco1); \ ??DrawOnlineTime_2: \ 00000050 ........ LDR R0,??DataTable20 ;; spaco1 \ 00000054 0520A0E1 MOV R2,R5 \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 01002DE9 PUSH {R0} \ 00000060 ........ LDR R0,??DataTable21 ;; fonto \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 01002DE9 PUSH {R0} \ 0000006C E43094E5 LDR R3,[R4, #+228] \ 00000070 14009FE5 LDR R0,??DrawOnlineTime_0+0x4 ;; onlineTime_y \ 00000074 001090E5 LDR R1,[R0, #+0] \ 00000078 10009FE5 LDR R0,??DrawOnlineTime_0+0x8 ;; onlineTime_x \ 0000007C 000090E5 LDR R0,[R0, #+0] \ 00000080 ........ _BLF PrintField,??PrintField??rA 533 } \ 00000084 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??DrawOnlineTime_0: \ 00000088 ........ DC32 `?` \ 0000008C ........ DC32 onlineTime_y \ 00000090 ........ DC32 onlineTime_x 534 535 //-------------------------- Вывод времени на идле -----------------// 536 537 extern const unsigned int auto_x; 538 extern const unsigned int auto_y; 539 extern const int showAwayIdle; 540 \ In segment CODE, align 4, keep-with-next 541 void DrawAutoMSG(void *canv) 542 { \ DrawAutoMSG: \ 00000000 10402DE9 PUSH {R4,LR} 543 char awayTime[64]; 544 if(away_m && showAwayIdle) \ 00000004 ........ LDR R4,??DataTable34 ;; S_ICONS \ 00000008 40D04DE2 SUB SP,SP,#+64 \ 0000000C 300194E5 LDR R0,[R4, #+304] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 1500000A BEQ ??DrawAutoMSG_0 \ 00000018 ........ LDR R0,??DataTable19 ;; showAwayIdle \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 1100000A BEQ ??DrawAutoMSG_0 545 { 546 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000028 48109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 0000002C 592D84E2 ADD R2,R4,#+5696 \ 00000030 0D00A0E1 MOV R0,SP \ 00000034 160000EF SWI +22 547 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000038 ........ LDR R0,??DataTable20 ;; spaco1 \ 0000003C 000090E5 LDR R0,[R0, #+0] \ 00000040 01002DE9 PUSH {R0} \ 00000044 ........ LDR R0,??DataTable21 ;; fonto \ 00000048 000090E5 LDR R0,[R0, #+0] \ 0000004C 01002DE9 PUSH {R0} \ 00000050 E43094E5 LDR R3,[R4, #+228] \ 00000054 20009FE5 LDR R0,??DrawAutoMSG_1+0x4 ;; auto_y \ 00000058 08208DE2 ADD R2,SP,#+8 \ 0000005C 001090E5 LDR R1,[R0, #+0] \ 00000060 18009FE5 LDR R0,??DrawAutoMSG_1+0x8 ;; auto_x \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 ........ _BLF PrintField,??PrintField??rA \ 0000006C 08D08DE2 ADD SP,SP,#+8 548 } 549 } \ ??DrawAutoMSG_0: \ 00000070 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 00000074 1080BDE8 POP {R4,PC} ;; return \ ??DrawAutoMSG_1: \ 00000078 ........ DC32 `?` \ 0000007C ........ DC32 auto_y \ 00000080 ........ DC32 auto_x 550 551 552 //---------------------------- Input away msg ---------------------------// 553 554 //Вводим сообщение какое хотим,а не то что прописали в конфиге 555 int input_awaymsg_id; 556 557 const HEADER_DESC input_awaymsg_hdr={0,0,131,21,NULL,(int)"Ввод автосообщения",LGP_NULL}; 558 void UpdateCLheader(void); \ In segment CODE, align 4, keep-with-next 559 int input_awaymsg_onkey(GUI *data, GUI_MSG *msg) 560 { \ input_awaymsg_onkey: \ 00000000 F0432DE9 PUSH {R4-R9,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0070A0E1 MOV R7,R0 \ 0000000C 0140A0E1 MOV R4,R1 561 WSHDR *ws=AllocWS(64); 562 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON)//0xFFF \ 00000010 ........ LDR R6,??DataTable34 ;; S_ICONS \ 00000014 4000A0E3 MOV R0,#+64 \ 00000018 250100EF SWI +293 \ 0000001C F200D4E1 LDRSH R0,[R4, #+2] \ 00000020 0050A0E3 MOV R5,#+0 \ 00000024 FF10A0E3 MOV R1,#+255 \ 00000028 F01E81E3 ORR R1,R1,#0xF00 \ 0000002C 010050E1 CMP R0,R1 \ 00000030 0E005013 CMPNE R0,#+14 \ 00000034 3A00001A BNE ??input_awaymsg_onkey_0 563 { 564 EDITCONTROL ec; 565 ExtractEditControl(data,2,&ec); \ 00000038 0D20A0E1 MOV R2,SP \ 0000003C 0210A0E3 MOV R1,#+2 \ 00000040 0700A0E1 MOV R0,R7 \ 00000044 690100EF SWI +361 566 ws=ec.pWS; 567 inp_away_msg2=malloc(ec.maxlen); \ 00000048 F801DDE1 LDRSH R0,[SP, #+24] \ 0000004C 28809DE5 LDR R8,[SP, #+40] 568 int i=0; 569 for(i=0;iwsbody[0];i++) \ 00000050 0090A0E3 MOV R9,#+0 \ 00000054 140000EF SWI +20 \ 00000058 2C0186E5 STR R0,[R6, #+300] \ 0000005C 000098E5 LDR R0,[R8, #+0] \ 00000060 B000D0E1 LDRH R0,[R0, #+0] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0600001A BNE ??input_awaymsg_onkey_1 \ 0000006C 090000EA B ??input_awaymsg_onkey_2 570 *(inp_away_msg2+i)=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_3: \ 00000070 890080E0 ADD R0,R0,R9, LSL #+1 \ 00000074 B200D0E1 LDRH R0,[R0, #+2] \ 00000078 ........ _BLF char16to8,??char16to8??rA \ 0000007C 2C1196E5 LDR R1,[R6, #+300] \ 00000080 0100C9E7 STRB R0,[R9, +R1] \ 00000084 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_1: \ 00000088 000098E5 LDR R0,[R8, #+0] \ 0000008C B010D0E1 LDRH R1,[R0, #+0] \ 00000090 010059E1 CMP R9,R1 \ 00000094 F5FFFFBA BLT ??input_awaymsg_onkey_3 571 *(inp_away_msg2+i++)=0; \ ??input_awaymsg_onkey_2: \ 00000098 2C0196E5 LDR R0,[R6, #+300] 572 573 #ifdef kluchnik 574 char *s; 575 ExtractEditControl(data,4,&ec); \ 0000009C 0D20A0E1 MOV R2,SP \ 000000A0 0050C9E7 STRB R5,[R9, +R0] \ 000000A4 0410A0E3 MOV R1,#+4 \ 000000A8 0700A0E1 MOV R0,R7 \ 000000AC 690100EF SWI +361 576 ws=ec.pWS; 577 s=malloc(ec.maxlen); \ 000000B0 F801DDE1 LDRSH R0,[SP, #+24] \ 000000B4 28709DE5 LDR R7,[SP, #+40] 578 for(i=0;iwsbody[0];i++) \ 000000B8 0090A0E3 MOV R9,#+0 \ 000000BC 140000EF SWI +20 \ 000000C0 0080A0E1 MOV R8,R0 \ 000000C4 000097E5 LDR R0,[R7, #+0] \ 000000C8 B000D0E1 LDRH R0,[R0, #+0] \ 000000CC 000050E3 CMP R0,#+0 \ 000000D0 0500001A BNE ??input_awaymsg_onkey_4 \ 000000D4 080000EA B ??input_awaymsg_onkey_5 579 *(s+i)=char16to8(ws->wsbody[i+1]); \ ??input_awaymsg_onkey_6: \ 000000D8 890080E0 ADD R0,R0,R9, LSL #+1 \ 000000DC B200D0E1 LDRH R0,[R0, #+2] \ 000000E0 ........ _BLF char16to8,??char16to8??rA \ 000000E4 0800C9E7 STRB R0,[R9, +R8] \ 000000E8 019089E2 ADD R9,R9,#+1 \ ??input_awaymsg_onkey_4: \ 000000EC 000097E5 LDR R0,[R7, #+0] \ 000000F0 B010D0E1 LDRH R1,[R0, #+0] \ 000000F4 010059E1 CMP R9,R1 \ 000000F8 F6FFFFBA BLT ??input_awaymsg_onkey_6 580 *(s+i++)=0; \ ??input_awaymsg_onkey_5: \ 000000FC 0850C9E7 STRB R5,[R9, +R8] 581 strcat(inp_away_msg2,s); \ 00000100 2C0196E5 LDR R0,[R6, #+300] \ 00000104 0810A0E1 MOV R1,R8 \ 00000108 170000EF SWI +23 582 #endif 583 584 UpdateCLheader(); \ 0000010C ........ BL UpdateCLheader 585 GeneralFunc_flag1(input_awaymsg_id,1); \ 00000110 540196E5 LDR R0,[R6, #+340] \ 00000114 0110A0E3 MOV R1,#+1 \ 00000118 3D0100EF SWI +317 586 FreeWS(ws); \ 0000011C 0700A0E1 MOV R0,R7 \ 00000120 290100EF SWI +297 587 // GeneralFuncF1(1); 588 } 589 590 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 00000124 F200D4E1 LDRSH R0,[R4, #+2] \ 00000128 010050E3 CMP R0,#+1 \ 0000012C 0C005013 CMPNE R0,#+12 \ 00000130 0200001A BNE ??input_awaymsg_onkey_7 591 { 592 msg_away_timer=0; \ 00000134 285186E5 STR R5,[R6, #+296] 593 away_m=0; \ 00000138 305186E5 STR R5,[R6, #+304] 594 UpdateCLheader(); \ 0000013C ........ BL UpdateCLheader 595 } 596 return(0); \ ??input_awaymsg_onkey_7: \ 00000140 0000A0E3 MOV R0,#+0 \ 00000144 2CD08DE2 ADD SP,SP,#+44 \ 00000148 F083BDE8 POP {R4-R9,PC} ;; return 597 } 598 \ In segment CODE, align 4, keep-with-next 599 void input_awaymsg_ghook(GUI *gui, int cmd) 600 { \ input_awaymsg_ghook: \ 00000000 00402DE9 PUSH {LR} 601 static SOFTKEY_DESC sk={0x0FFF,0x0000,(int)"Сохранить"}; 602 if (cmd==7) \ 00000004 070051E3 CMP R1,#+7 \ 00000008 0300001A BNE ??input_awaymsg_ghook_0 603 { 604 SetSoftKey(gui,&sk,SET_SOFT_KEY_N); \ 0000000C 2C109FE5 LDR R1,??input_awaymsg_ghook_1 ;; ??sk \ 00000010 0020A0E3 MOV R2,#+0 \ 00000014 680100EF SWI +360 \ 00000018 0080BDE8 POP {PC} 605 } 606 if(cmd==0xA) \ ??input_awaymsg_ghook_0: \ 0000001C 0A0051E3 CMP R1,#+10 \ 00000020 0100001A BNE ??input_awaymsg_ghook_2 607 { 608 DisableIDLETMR(); // Отключаем таймер выхода по таймауту \ 00000024 7F0100EF SWI +383 \ 00000028 0080BDE8 POP {PC} 609 } 610 if (cmd==0x0C) \ ??input_awaymsg_ghook_2: \ 0000002C 0C0051E3 CMP R1,#+12 \ 00000030 0080BD18 POPNE {PC} 611 { 612 EDIT_SetCursorPos(gui,1); \ 00000034 0110A0E3 MOV R1,#+1 \ 00000038 D40100EF SWI +468 613 } 614 if(cmd==0x03){} 615 } \ 0000003C 0080BDE8 POP {PC} ;; return \ ??input_awaymsg_ghook_1: \ 00000040 ........ DC32 ??sk 616 \ In segment CODE, align 4, keep-with-next 617 void input_awaymsg_locret(void){} \ input_awaymsg_locret: \ 00000000 1EFF2FE1 BX LR ;; return 618 619 SOFTKEY_DESC input_awaymsg_sk[]= 620 { 621 {0x0018,0x0000,(int)"Лев"}, 622 {0x0001,0x0000,(int)"Прав"}, 623 {0x003D,0x0000,(int)LGP_DOIT_PIC} 624 }; 625 626 SOFTKEYSTAB input_awaymsg_skt= 627 { 628 input_awaymsg_sk,0 629 }; 630 631 const INPUTDIA_DESC input_awaymsg_desc= 632 { 633 1, 634 input_awaymsg_onkey, 635 input_awaymsg_ghook, 636 (void *)input_awaymsg_locret, 637 0, 638 &input_awaymsg_skt, 639 {0,NULL,NULL,NULL}, 640 FONT_SMALL, 641 100, 642 101, 643 0, 644 0x00000000, 645 0x40000000 646 }; 647 \ In segment CODE, align 4, keep-with-next 648 void InputAwayMsg() 649 { \ InputAwayMsg: \ 00000000 F0412DE9 PUSH {R4-R8,LR} 650 WSHDR *wss=AllocWS(256); 651 void *ma=malloc_adr(); 652 void *eq=AllocEQueue(ma, mfree_adr()); 653 EDITCONTROL ec; 654 PrepareEditControl(&ec); 655 wsprintf(wss,"%t","Сообщение:\n"); \ 00000004 CC619FE5 LDR R6,??InputAwayMsg_0+0x4 ;; input_awaymsg_desc \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0040A0E1 MOV R4,R0 \ 00000018 148000EF SWI +32788 \ 0000001C 0070A0E1 MOV R7,R0 \ 00000020 158000EF SWI +32789 \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0700A0E1 MOV R0,R7 \ 0000002C 630100EF SWI +355 \ 00000030 0050A0E1 MOV R5,R0 \ 00000034 0D00A0E1 MOV R0,SP \ 00000038 640100EF SWI +356 \ 0000003C 648F8FE2 ADR R8,??InputAwayMsg_0 ;; "%t" \ 00000040 4C2086E2 ADD R2,R6,#+76 \ 00000044 0810A0E1 MOV R1,R8 \ 00000048 0400A0E1 MOV R0,R4 \ 0000004C 240100EF SWI +292 656 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); \ 00000050 2000A0E3 MOV R0,#+32 \ 00000054 01002DE9 PUSH {R0} \ 00000058 0430A0E1 MOV R3,R4 \ 0000005C 0020A0E3 MOV R2,#+0 \ 00000060 0110A0E3 MOV R1,#+1 \ 00000064 04008DE2 ADD R0,SP,#+4 \ 00000068 650100EF SWI +357 657 AddEditControlToEditQend(eq,&ec,ma); \ 0000006C 0720A0E1 MOV R2,R7 \ 00000070 04108DE2 ADD R1,SP,#+4 \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 660100EF SWI +358 658 659 PrepareEditControl(&ec); \ 0000007C 04008DE2 ADD R0,SP,#+4 \ 00000080 640100EF SWI +356 660 CutWSTR(wss,0); \ 00000084 0010A0E3 MOV R1,#+0 \ 00000088 0400A0E1 MOV R0,R4 \ 0000008C 260100EF SWI +294 661 ascii2ws(wss,awayMsg); \ 00000090 ........ LDR R1,??DataTable23 ;; awayMsg \ 00000094 0400A0E1 MOV R0,R4 \ 00000098 ........ _BLF ascii2ws,??ascii2ws??rA 662 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 0000009C FF00A0E3 MOV R0,#+255 \ 000000A0 01002DE9 PUSH {R0} \ 000000A4 0430A0E1 MOV R3,R4 \ 000000A8 4020A0E3 MOV R2,#+64 \ 000000AC 0310A0E3 MOV R1,#+3 \ 000000B0 08008DE2 ADD R0,SP,#+8 \ 000000B4 650100EF SWI +357 663 AddEditControlToEditQend(eq,&ec,ma); \ 000000B8 0720A0E1 MOV R2,R7 \ 000000BC 08108DE2 ADD R1,SP,#+8 \ 000000C0 0500A0E1 MOV R0,R5 \ 000000C4 660100EF SWI +358 664 #ifdef kluchnik 665 PrepareEditControl(&ec); \ 000000C8 08008DE2 ADD R0,SP,#+8 \ 000000CC 640100EF SWI +356 666 wsprintf(wss,"%t","Сообщение 2:\n"); \ 000000D0 582086E2 ADD R2,R6,#+88 \ 000000D4 0810A0E1 MOV R1,R8 \ 000000D8 0400A0E1 MOV R0,R4 \ 000000DC 240100EF SWI +292 667 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); \ 000000E0 2000A0E3 MOV R0,#+32 \ 000000E4 01002DE9 PUSH {R0} \ 000000E8 0430A0E1 MOV R3,R4 \ 000000EC 0020A0E3 MOV R2,#+0 \ 000000F0 0110A0E3 MOV R1,#+1 \ 000000F4 0C008DE2 ADD R0,SP,#+12 \ 000000F8 650100EF SWI +357 668 AddEditControlToEditQend(eq,&ec,ma); \ 000000FC 0720A0E1 MOV R2,R7 \ 00000100 0C108DE2 ADD R1,SP,#+12 \ 00000104 0500A0E1 MOV R0,R5 \ 00000108 660100EF SWI +358 669 670 ascii2ws(wss,"когда смогу отвечу:)"); \ 0000010C 681086E2 ADD R1,R6,#+104 \ 00000110 0400A0E1 MOV R0,R4 \ 00000114 ........ _BLF ascii2ws,??ascii2ws??rA 671 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 00000118 FF00A0E3 MOV R0,#+255 \ 0000011C 01002DE9 PUSH {R0} \ 00000120 0430A0E1 MOV R3,R4 \ 00000124 4020A0E3 MOV R2,#+64 \ 00000128 0310A0E3 MOV R1,#+3 \ 0000012C 10008DE2 ADD R0,SP,#+16 \ 00000130 650100EF SWI +357 672 AddEditControlToEditQend(eq,&ec,ma); \ 00000134 0720A0E1 MOV R2,R7 \ 00000138 10108DE2 ADD R1,SP,#+16 \ 0000013C 0500A0E1 MOV R0,R5 \ 00000140 660100EF SWI +358 673 #endif 674 patch_header(&input_awaymsg_hdr); \ 00000144 0070A0E3 MOV R7,#+0 \ 00000148 B873C6E1 STRH R7,[R6, #+56] \ 0000014C 1800A0E3 MOV R0,#+24 \ 00000150 BA03C6E1 STRH R0,[R6, #+58] \ 00000154 888100EF SWI +33160 \ 00000158 010040E2 SUB R0,R0,#+1 \ 0000015C BC03C6E1 STRH R0,[R6, #+60] \ 00000160 8A8100EF SWI +33162 \ 00000164 170080E2 ADD R0,R0,#+23 \ 00000168 BE03C6E1 STRH R0,[R6, #+62] 675 patch_input(&input_awaymsg_desc); \ 0000016C B871C6E1 STRH R7,[R6, #+24] \ 00000170 8A8100EF SWI +33162 \ 00000174 190080E2 ADD R0,R0,#+25 \ 00000178 BA01C6E1 STRH R0,[R6, #+26] \ 0000017C 888100EF SWI +33160 \ 00000180 010040E2 SUB R0,R0,#+1 \ 00000184 BC01C6E1 STRH R0,[R6, #+28] \ 00000188 898100EF SWI +33161 \ 0000018C 0070A0E1 MOV R7,R0 \ 00000190 8B8100EF SWI +33163 \ 00000194 000047E0 SUB R0,R7,R0 \ 00000198 010040E2 SUB R0,R0,#+1 \ 0000019C BE01C6E1 STRH R0,[R6, #+30] 676 677 FreeWS(wss); \ 000001A0 0400A0E1 MOV R0,R4 \ 000001A4 290100EF SWI +297 678 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 000001A8 0000A0E3 MOV R0,#+0 \ 000001AC 01002DE9 PUSH {R0} \ 000001B0 0130A0E3 MOV R3,#+1 \ 000001B4 0520A0E1 MOV R2,R5 \ 000001B8 381086E2 ADD R1,R6,#+56 \ 000001BC 0600A0E1 MOV R0,R6 \ 000001C0 670100EF SWI +359 \ 000001C4 10109FE5 LDR R1,??InputAwayMsg_0+0x8 ;; S_ICONS + 340 \ 000001C8 000081E5 STR R0,[R1, #+0] 679 } \ 000001CC 40D08DE2 ADD SP,SP,#+64 \ 000001D0 F081BDE8 POP {R4-R8,PC} ;; return \ ??InputAwayMsg_0: \ 000001D4 25740000 DC8 "%t",+0 \ 000001D8 ........ DC32 input_awaymsg_desc \ 000001DC ........ DC32 S_ICONS + 340 680 681 682 //////////////////////////uptime////////////////////////// 683 #ifdef ELKA \ In segment CODE, align 4, keep-with-next 684 void SLI_On() 685 { \ SLI_On: \ 00000000 10402DE9 PUSH {R4,LR} 686 if(Is_SLI_On) \ 00000004 ........ LDR R4,??DataTable34 ;; S_ICONS \ 00000008 FC0094E5 LDR R0,[R4, #+252] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0100000A BEQ ??SLI_On_0 687 SLI_SetState(1); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 360000EF SWI +54 688 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_Off); \ ??SLI_On_0: \ 0000001C 14209FE5 LDR R2,??SLI_On_1 ;; SLI_Off \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 7000A0E3 MOV R0,#+112 \ 00000028 580D80E3 ORR R0,R0,#0x1600 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 4D0000EF SWI +77 689 } \ 00000034 1080BDE8 POP {R4,PC} ;; return \ ??SLI_On_1: \ 00000038 ........ DC32 SLI_Off 690 \ In segment CODE, align 4, keep-with-next 691 void SLI_Off() 692 { \ SLI_Off: \ 00000000 00402DE9 PUSH {LR} 693 SLI_SetState(2); \ 00000004 0200A0E3 MOV R0,#+2 \ 00000008 360000EF SWI +54 694 if(total_unread) \ 0000000C ........ LDR R0,??DataTable34 ;; S_ICONS \ 00000010 AC1190E5 LDR R1,[R0, #+428] \ 00000014 000051E3 CMP R1,#+0 \ 00000018 0600000A BEQ ??SLI_Off_0 695 GBS_StartTimerProc(&mytmr, IN_TICKS(2) / 20, SLI_On); //26*SLI_time2 \ 0000001C 20209FE5 LDR R2,??SLI_Off_1 ;; SLI_On \ 00000020 1510A0E3 MOV R1,#+21 \ 00000024 7030A0E3 MOV R3,#+112 \ 00000028 583D83E3 ORR R3,R3,#0x1600 \ 0000002C 000083E0 ADD R0,R3,R0 \ 00000030 4D0000EF SWI +77 \ 00000034 0080BDE8 POP {PC} 696 else 697 SLI_SetState(0); \ ??SLI_Off_0: \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 360000EF SWI +54 698 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??SLI_Off_1: \ 00000044 ........ DC32 SLI_On 699 \ In segment CODE, align 4, keep-with-next 700 void SLI_check() 701 { 702 if (total_unread) \ SLI_check: \ 00000000 14009FE5 LDR R0,??SLI_check_0 ;; S_ICONS + 428 \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 0080BD08 POPEQ {PC} 703 SLI_On(); \ 00000014 ........ BL SLI_On 704 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_check_0: \ 0000001C ........ DC32 S_ICONS + 428 705 \ In segment CODE, align 4, keep-with-next 706 void SLI_Timer() 707 { 708 GBS_StartTimerProc(&mytmr, 262, SLI_check); //262*SLI_time \ SLI_Timer: \ 00000000 14209FE5 LDR R2,??SLI_Timer_0 ;; SLI_check \ 00000004 14009FE5 LDR R0,??SLI_Timer_0+0x4 ;; S_ICONS + 5744 \ 00000008 00402DE9 PUSH {LR} \ 0000000C 0610A0E3 MOV R1,#+6 \ 00000010 401F81E3 ORR R1,R1,#0x100 \ 00000014 4D0000EF SWI +77 709 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??SLI_Timer_0: \ 0000001C ........ DC32 SLI_check \ 00000020 ........ DC32 S_ICONS + 5744 710 #endif 711 \ In segment CODE, align 4, keep-with-next 712 void setup_ICONS(void) 713 { \ setup_ICONS: \ 00000000 30402DE9 PUSH {R4,R5,LR} 714 int i=0; \ 00000004 ........ LDR R5,??DataTable51 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 715 do 716 { 717 if (!S_ICONS[i]) S_ICONS[i]=(int)MakeGlobalString(ICON_PATH,'\\',icons_names[i]); \ ??setup_ICONS_0: \ 0000000C 040195E7 LDR R0,[R5, +R4, LSL #+2] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 0500001A BNE ??setup_ICONS_1 \ 00000018 20009FE5 LDR R0,??setup_ICONS_2 ;; icons_names \ 0000001C 5C10A0E3 MOV R1,#+92 \ 00000020 042190E7 LDR R2,[R0, +R4, LSL #+2] \ 00000024 18009FE5 LDR R0,??setup_ICONS_2+0x4 ;; ICON_PATH \ 00000028 ........ _BLF MakeGlobalString,??MakeGlobalString??rA \ 0000002C 040185E7 STR R0,[R5, +R4, LSL #+2] 718 i++; \ ??setup_ICONS_1: \ 00000030 014084E2 ADD R4,R4,#+1 719 } 720 while(i>2,stop_vibra); \ 00000044 3610A0E3 MOV R1,#+54 \ 00000048 000000EA B ??start_vibra_2 986 else 987 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 0000004C 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000050 4D0000EF SWI +77 988 } 989 } \ 00000054 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000058 ........ DC32 stop_vibra 990 \ In segment CODE, align 4, keep-with-next 991 void stop_vibra(void) 992 { \ stop_vibra: \ 00000000 00402DE9 PUSH {LR} 993 extern const int VIBR_TYPE; 994 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 995 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable58 ;; S_ICONS \ 00000010 781190E5 LDR R1,[R0, #+376] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 781180E5 STR R1,[R0, #+376] \ 0000001C 0080BD08 POPEQ {PC} 996 { 997 if(VIBR_TYPE) \ 00000020 ........ LDR R1,??DataTable44 ;; VIBR_TYPE \ 00000024 20209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000028 001091E5 LDR R1,[R1, #+0] \ 0000002C 610D80E2 ADD R0,R0,#+6208 \ 00000030 000051E3 CMP R1,#+0 \ 00000034 0100000A BEQ ??stop_vibra_1 998 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000038 0610A0E3 MOV R1,#+6 \ 0000003C 000000EA B ??stop_vibra_2 999 else 1000 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000040 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 00000044 4D0000EF SWI +77 1001 } 1002 } \ 00000048 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 0000004C ........ DC32 start_vibra 1003 \ In segment CODE, align 4, keep-with-next 1004 void start_vibra2(void) 1005 { 1006 extern const int VIBR_TYPE; 1007 void stop_vibra2(void); 1008 extern const unsigned int vibraPower; 1009 SetVibration(vibraPower); \ start_vibra2: \ 00000000 ........ LDR R0,??DataTable41 ;; vibraPower \ 00000004 00402DE9 PUSH {LR} \ 00000008 000090E5 LDR R0,[R0, #+0] \ 0000000C 7C0000EF SWI +124 1010 if(VIBR_TYPE) \ 00000010 ........ LDR R1,??DataTable44 ;; VIBR_TYPE \ 00000014 18009FE5 LDR R0,??start_vibra2_0 ;; S_ICONS + 6208 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 14209FE5 LDR R2,??start_vibra2_0+0x4 ;; stop_vibra2 \ 00000020 000051E3 CMP R1,#+0 1011 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>2,stop_vibra2); \ 00000024 3610A013 MOVNE R1,#+54 1012 else 1013 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra2); \ 00000028 6C10A003 MOVEQ R1,#+108 \ 0000002C 4D0000EF SWI +77 1014 } \ 00000030 0080BDE8 POP {PC} ;; return \ ??start_vibra2_0: \ 00000034 ........ DC32 S_ICONS + 6208 \ 00000038 ........ DC32 stop_vibra2 1015 \ In segment CODE, align 4, keep-with-next 1016 void stop_vibra2(void) 1017 { \ stop_vibra2: \ 00000000 00402DE9 PUSH {LR} 1018 extern const int VIBR_TYPE; 1019 SetVibration(0); \ 00000004 0000A0E3 MOV R0,#+0 \ 00000008 7C0000EF SWI +124 1020 if (--vibra_count) \ 0000000C ........ LDR R0,??DataTable58 ;; S_ICONS \ 00000010 781190E5 LDR R1,[R0, #+376] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 781180E5 STR R1,[R0, #+376] \ 0000001C 0080BD08 POPEQ {PC} 1021 { 1022 if(VIBR_TYPE) \ 00000020 ........ LDR R1,??DataTable44 ;; VIBR_TYPE \ 00000024 20209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000028 001091E5 LDR R1,[R1, #+0] \ 0000002C 610D80E2 ADD R0,R0,#+6208 \ 00000030 000051E3 CMP R1,#+0 \ 00000034 0100000A BEQ ??stop_vibra2_1 1023 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000038 0610A0E3 MOV R1,#+6 \ 0000003C 000000EA B ??stop_vibra2_2 1024 else 1025 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000040 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 00000044 4D0000EF SWI +77 1026 } 1027 } \ 00000048 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 0000004C ........ DC32 start_vibra2 1028 \ In segment CODE, align 4, keep-with-next 1029 void ChangeVibra(void) 1030 { 1031 if (!(Is_Vibra_Enabled=!(Is_Vibra_Enabled))) \ ChangeVibra: \ 00000000 ........ LDR R0,??DataTable58 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 601190E5 LDR R1,[R0, #+352] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 1C109FE5 LDR R1,??ChangeVibra_0 ;; `?` \ 00000008 4BDF4DE2 SUB SP,SP,#+300 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 ........ BL FreeTemplates \ 00000014 ........ LDR R1,??DataTable48 ;; TEMPLATES_PATH \ 00000018 2C008DE2 ADD R0,SP,#+44 \ 0000001C 1A0000EF SWI +26 \ 00000020 2C008DE2 ADD R0,SP,#+44 \ 00000024 1B0000EF SWI +27 \ 00000028 0070A0E1 MOV R7,R0 \ 0000002C 2C008DE2 ADD R0,SP,#+44 \ 00000030 005087E0 ADD R5,R7,R0 \ 00000034 0420A0E1 MOV R2,R4 \ 00000038 0610A0E1 MOV R1,R6 \ 0000003C 0500A0E1 MOV R0,R5 \ 00000040 160000EF SWI +22 1075 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 1076 if ((fsize=stat.size)<=0) goto L1; \ 00000060 08709DE5 LDR R7,[SP, #+8] \ 00000064 010057E3 CMP R7,#+1 \ 00000068 070000BA BLT ??LoadTemplates_1 1077 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 1078 { 1079 L1: 1080 strcpy(fn+i,"\\0.txt"); \ ??LoadTemplates_1: \ 0000008C 081086E2 ADD R1,R6,#+8 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 1A0000EF SWI +26 1081 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 1082 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 1083 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 1084 } 1085 if (f==-1) return 0; \ ??LoadTemplates_2: \ 000000E0 040058E1 CMP R8,R4 \ 000000E4 F1FFFF0A BEQ ??LoadTemplates_4 1086 p=templates_chars=malloc(fsize+1); \ 000000E8 ........ LDR R4,??DataTable58 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 7C0184E5 STR R0,[R4, #+380] \ 000000F8 0060A0E1 MOV R6,R0 1087 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] 1088 fclose(f,&ul); \ 00000118 0D10A0E1 MOV R1,SP \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 0D0000EF SWI +13 1089 i=0; \ 00000124 0070A0E3 MOV R7,#+0 1090 pp=p; \ 00000128 0680A0E1 MOV R8,R6 \ 0000012C 020000EA B ??LoadTemplates_6 1091 for(;;) 1092 { 1093 c=*p; 1094 if (c<32) 1095 { 1096 if (pp&&(pp!=p)) 1097 { 1098 templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 1099 templates_lines[i++]=pp; 1100 } 1101 pp=NULL; 1102 if (!c) break; 1103 *p=0; 1104 } 1105 else 1106 { 1107 if (pp==NULL) pp=p; \ ??LoadTemplates_7: \ 00000130 000058E3 CMP R8,#+0 \ 00000134 0680A001 MOVEQ R8,R6 1108 } 1109 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 800194E5 LDR R0,[R4, #+384] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 800184E5 STR R0,[R4, #+384] \ 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 1110 } 1111 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 `?` 1112 } 1113 1114 1115 //=================================================================== 1116 1117 typedef struct 1118 { 1119 CSM_RAM csm; 1120 int gui_id; 1121 }MAIN_CSM; 1122 1123 typedef struct 1124 { 1125 GUI gui; 1126 WSHDR *ws1; 1127 WSHDR *ws2; 1128 int i1; 1129 }MAIN_GUI; 1130 1131 1132 1133 int RXstate=EOP; //-sizeof(RXpkt)..-1 - receive header, 0..RXpkt.data_len - receive data 1134 \ In segment DATA_Z, align 4, align-sorted 1135 TPKT RXbuf; \ RXbuf: \ 00000000 DS8 16392 \ In segment DATA_Z, align 4, align-sorted 1136 TPKT TXbuf; \ TXbuf: \ 00000000 DS8 16392 1137 1138 int connect_state=0; 1139 1140 int sock=-1; 1141 1142 volatile unsigned long TOTALRECEIVED; 1143 volatile unsigned long TOTALSENDED; 1144 volatile unsigned long ALLTOTALRECEIVED; //by BoBa 10.07 1145 volatile unsigned long ALLTOTALSENDED; 1146 1147 volatile int sendq_l=0; //Длинна очереди для send 1148 volatile void *sendq_p=NULL; //указатель очереди 1149 1150 volatile int is_gprs_online=1; 1151 1152 GBSTMR reconnect_tmr; 1153 1154 extern void kill_data(void *p,void (*func_p)(void *)); 1155 \ In segment CODE, align 4, keep-with-next 1156 void ElfKiller(void) 1157 { \ ElfKiller: \ 00000000 00402DE9 PUSH {LR} 1158 // if(SLI_TYPE) 1159 // GBS_StopTimer(&mytmr); 1160 // if(Is_Double_Vibra_On) 1161 // GBS_StopTimer(&mytmr2); 1162 // GBS_StopTimer(&mytmr3); 1163 // GBS_StopTimer(&mytmr4); 1164 // DoChangeWall2(); 1165 PrintLibFree(); \ 00000004 ........ _BLF PrintLibFree,??PrintLibFree??rA 1166 extern void *ELF_BEGIN; 1167 kill_data(&ELF_BEGIN,(void (*)(void *))mfree_adr()); \ 00000008 158000EF SWI +32789 \ 0000000C 0010A0E1 MOV R1,R0 \ 00000010 04009FE5 LDR R0,??ElfKiller_0 ;; ELF_BEGIN \ 00000014 0040BDE8 POP {LR} ;; Pop \ 00000018 ........ _BF kill_data,??kill_data??rA ;; tailcall \ ??ElfKiller_0: \ 0000001C ........ DC32 ELF_BEGIN 1168 } 1169 1170 int total_unread; //2058 - tam tak /windes 1171 1172 volatile CLIST *cltop; 1173 1174 volatile unsigned int GROUP_CACHE; //Текущая группа для добавления 1175 1176 volatile int contactlist_menu_id; 1177 1178 GBSTMR tmr_active; 1179 1180 volatile int edchat_id; 1181 1182 //Применяется для добавления сообщений 1183 //CLIST *edcontact; 1184 //void *edgui_data; 1185 1186 static int prev_clmenu_itemcount; 1187 1188 char clm_hdr_text[48]; 1189 static const char def_clm_hdr_text[] = LG_CLTITLE; 1190 static const char key_clm_hdr_text[] = LG_CLT9INP; 1191 1192 static const HEADER_DESC contactlist_menuhdr = {0, 0, 0, 0, S_ICONS+ICON_HEAD, (int)clm_hdr_text, LGP_NULL}; 1193 static const int menusoftkeys[] = {0,1,2}; 1194 static const SOFTKEY_DESC menu_sk[] = 1195 { 1196 {0x0018, 0x0000, (int)LG_SELECT}, 1197 {0x0001, 0x0000, (int)LG_CLOSE}, 1198 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1199 }; 1200 1201 char clmenu_sk_r[16]; 1202 static const char def_clmenu_sk_r[] = LG_CLOSE; 1203 static const char key_clmenu_sk_r[] = LG_CLEAR; 1204 1205 static const SOFTKEY_DESC clmenu_sk[]= 1206 { 1207 {0x0018, 0x0000, (int)LG_OPTIONS}, 1208 {0x0001, 0x0000, (int)clmenu_sk_r}, 1209 {0x003D, 0x0000, (int)LGP_DOIT_PIC} 1210 }; 1211 1212 const SOFTKEYSTAB menu_skt = 1213 { 1214 menu_sk, 0 1215 }; 1216 1217 static const SOFTKEYSTAB clmenu_skt = 1218 { 1219 clmenu_sk, 0 1220 }; 1221 1222 void contactlist_menu_ghook(void *data, int cmd); 1223 int contactlist_menu_onkey(void *data, GUI_MSG *msg); 1224 void contactlist_menu_iconhndl(void *data, int curitem, void *unk); 1225 1226 #ifdef USE_MLMENU 1227 static const ML_MENU_DESC contactlist_menu= 1228 { 1229 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1230 menusoftkeys, 1231 &clmenu_skt, 1232 0x11, //+0x400 1233 contactlist_menu_iconhndl, 1234 NULL, //Items 1235 NULL, //Procs 1236 0, //n 1237 1 //Добавочных строк 1238 }; 1239 #else 1240 static const MENU_DESC contactlist_menu= 1241 { 1242 8,contactlist_menu_onkey,contactlist_menu_ghook,NULL, 1243 menusoftkeys, 1244 &clmenu_skt, 1245 0x11, //+0x400 1246 contactlist_menu_iconhndl, 1247 NULL, //Items 1248 NULL, //Procs 1249 0 //n 1250 }; 1251 #endif 1252 1253 //GBSTMR tmr_ping; 1254 int tenseconds_to_ping; 1255 \ In segment CODE, align 4, keep-with-next 1256 LOGQ *NewLOGQ(const char *s) 1257 { \ NewLOGQ: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1258 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 1259 zeromem(p,sizeof(LOGQ)); \ 00000018 6010A0E3 MOV R1,#+96 \ 0000001C 1D0100EF SWI +285 1260 strcpy(p->text,s); \ 00000020 0410A0E1 MOV R1,R4 \ 00000024 600085E2 ADD R0,R5,#+96 \ 00000028 1A0000EF SWI +26 1261 return p; \ 0000002C 0500A0E1 MOV R0,R5 \ 00000030 3080BDE8 POP {R4,R5,PC} ;; return 1262 } 1263 \ In segment CODE, align 4, keep-with-next 1264 LOGQ *LastLOGQ(LOGQ **pp) 1265 { 1266 LOGQ *q=*pp; \ LastLOGQ: \ 00000000 000090E5 LDR R0,[R0, #+0] 1267 if (q) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 1EFF2F01 BXEQ LR \ 0000000C 000000EA B ??LastLOGQ_0 1268 { 1269 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 1270 } 1271 return(q); \ 00000020 1EFF2FE1 BX LR ;; return 1272 } 1273 1274 //Уничтожить лог \ In segment CODE, align 4, keep-with-next 1275 void FreeLOGQ(LOGQ **pp) 1276 { \ FreeLOGQ: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0010A0E1 MOV R1,R0 1277 LOGQ *p=*pp; \ 00000008 000091E5 LDR R0,[R1, #+0] 1278 *pp=NULL; //Сразу обрежем \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 002081E5 STR R2,[R1, #+0] \ 00000014 000050E3 CMP R0,#+0 \ 00000018 1080BD08 POPEQ {R4,PC} 1279 while(p) 1280 { 1281 LOGQ *np=p->next; \ ??FreeLOGQ_0: \ 0000001C 004090E5 LDR R4,[R0, #+0] 1282 mfree(p); \ 00000020 150000EF SWI +21 1283 p=np; \ 00000024 0400B0E1 MOVS R0,R4 1284 } \ 00000028 FBFFFF1A BNE ??FreeLOGQ_0 1285 } \ 0000002C 1080BDE8 POP {R4,PC} ;; return 1286 1287 //Удалить элемент из лога \ In segment CODE, align 4, keep-with-next 1288 void RemoveLOGQ(LOGQ **queue, LOGQ *p) 1289 { \ RemoveLOGQ: \ 00000000 00402DE9 PUSH {LR} 1290 LOGQ *q=(LOGQ *)queue; \ 00000004 000000EA B ??RemoveLOGQ_0 1291 LOGQ *qp; 1292 while(qp=q->next) 1293 { 1294 if (qp==p) 1295 { 1296 q->next=p->next; 1297 break; 1298 } 1299 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] 1300 } 1301 mfree(p); //Если элемент вообще не в логе \ ??RemoveLOGQ_2: \ 00000028 0100A0E1 MOV R0,R1 \ 0000002C 150000EF SWI +21 1302 } \ 00000030 0080BDE8 POP {PC} ;; return 1303 1304 //Добавить элемент в лог \ In segment CODE, align 4, keep-with-next 1305 int AddLOGQ(LOGQ **queue, LOGQ *p) 1306 { 1307 LOGQ *q=(LOGQ *)queue; 1308 LOGQ *qp; 1309 int i=0; \ AddLOGQ: \ 00000000 0020A0E3 MOV R2,#+0 \ 00000004 000000EA B ??AddLOGQ_0 1310 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 1311 p->next=NULL; \ 0000001C 003081E5 STR R3,[R1, #+0] 1312 q->next=p; \ 00000020 001080E5 STR R1,[R0, #+0] 1313 return(i+1); //Теперь всего в логе элементов \ 00000024 0200A0E1 MOV R0,R2 \ 00000028 1EFF2FE1 BX LR ;; return 1314 } 1315 \ In segment CODE, align 4, keep-with-next 1316 char *GetLastXTextLOGQ(CLIST *t) 1317 { 1318 LOGQ *p = t->log; \ GetLastXTextLOGQ: \ 00000000 741090E5 LDR R1,[R0, #+116] 1319 char *s = 0; \ 00000004 0000A0E3 MOV R0,#+0 1320 if(!p) return 0; \ 00000008 000051E3 CMP R1,#+0 \ 0000000C 0500001A BNE ??GetLastXTextLOGQ_0 \ 00000010 1EFF2FE1 BX LR 1321 while(p->next) 1322 { 1323 if((p->type&0x0F)==3) \ ??GetLastXTextLOGQ_1: \ 00000014 0C3091E5 LDR R3,[R1, #+12] \ 00000018 0F3003E2 AND R3,R3,#0xF \ 0000001C 030053E3 CMP R3,#+3 1324 s = p->text; \ 00000020 60008102 ADDEQ R0,R1,#+96 1325 p = p->next; \ 00000024 0210A0E1 MOV R1,R2 1326 } \ ??GetLastXTextLOGQ_0: \ 00000028 002091E5 LDR R2,[R1, #+0] \ 0000002C 000052E3 CMP R2,#+0 \ 00000030 F7FFFF1A BNE ??GetLastXTextLOGQ_1 1327 if((p->type&0x0F)==3) \ 00000034 0C2091E5 LDR R2,[R1, #+12] \ 00000038 0F2002E2 AND R2,R2,#0xF \ 0000003C 030052E3 CMP R2,#+3 1328 s = p->text; \ 00000040 60008102 ADDEQ R0,R1,#+96 1329 return s; \ 00000044 1EFF2FE1 BX LR ;; return 1330 } 1331 \ In segment CODE, align 4, keep-with-next 1332 int GetIconIndex(CLIST *t) 1333 { 1334 unsigned short s; 1335 if (t) \ GetIconIndex: \ 00000000 000050E3 CMP R0,#+0 \ 00000004 3400000A BEQ ??GetIconIndex_0 1336 { 1337 s=t->state; 1338 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 1339 if (t->isunread) \ 0000001C 640090E5 LDR R0,[R0, #+100] \ 00000020 000050E3 CMP R0,#+0 1340 return(IS_MSG); \ 00000024 0D00A013 MOVNE R0,#+13 \ 00000028 1EFF2F11 BXNE LR 1341 else 1342 { 1343 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 1344 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 1345 if ((s&0xF000)==0x3000) return (IS_EVIL); \ 0000004C C00D52E3 CMP R2,#+12288 \ 00000050 0700A003 MOVEQ R0,#+7 \ 00000054 1EFF2F01 BXEQ LR 1346 if ((s&0xF000)==0x4000) return (IS_DEPRESSION); \ 00000058 400C52E3 CMP R2,#+16384 \ 0000005C 0600A003 MOVEQ R0,#+6 \ 00000060 1EFF2F01 BXEQ LR 1347 if ((s&0xF000)==0x5000) return (IS_HOME); \ 00000064 500C52E3 CMP R2,#+20480 \ 00000068 0800A003 MOVEQ R0,#+8 \ 0000006C 1EFF2F01 BXEQ LR 1348 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 1349 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 1350 if (s & 0x0001) return(IS_AWAY); \ ??GetIconIndex_1: \ 00000090 010011E3 TST R1,#0x1 \ 00000094 0200A013 MOVNE R0,#+2 \ 00000098 1EFF2F11 BXNE LR 1351 if (s & 0x0005) return(IS_NA); \ 0000009C 050011E3 TST R1,#0x5 \ 000000A0 0300A013 MOVNE R0,#+3 \ 000000A4 1EFF2F11 BXNE LR 1352 if (s & 0x0011) return(IS_OCCUPIED); \ 000000A8 110011E3 TST R1,#0x11 \ 000000AC 0400A013 MOVNE R0,#+4 \ 000000B0 1EFF2F11 BXNE LR 1353 if (s & 0x0013) return(IS_DND); \ 000000B4 130011E3 TST R1,#0x13 \ 000000B8 0500A013 MOVNE R0,#+5 \ 000000BC 1EFF2F11 BXNE LR 1354 if (s & 0x0002) return(IS_FFC); \ 000000C0 020011E3 TST R1,#0x2 \ 000000C4 EFFFFF1A BNE ??GetIconIndex_2 1355 if (s & 0x0100) return(IS_INVISIBLE); \ 000000C8 400F11E3 TST R1,#0x100 \ 000000CC 0100A013 MOVNE R0,#+1 \ 000000D0 1EFF2F11 BXNE LR 1356 } 1357 } 1358 else 1359 { 1360 return(IS_UNKNOWN); 1361 } 1362 return(IS_ONLINE); \ 000000D4 0B00A0E3 MOV R0,#+11 \ 000000D8 1EFF2FE1 BX LR \ ??GetIconIndex_0: \ 000000DC 0E00A0E3 MOV R0,#+14 \ 000000E0 1EFF2FE1 BX LR ;; return 1363 } 1364 \ In segment CODE, align 4, keep-with-next 1365 LOGQ *FindContactLOGQByAck(TPKT *p) 1366 { \ FindContactLOGQByAck: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 1367 CLIST *t; 1368 LockSched(); \ 00000008 460100EF SWI +326 1369 t=FindContactByUin(p->pkt.uin); \ 0000000C 000094E5 LDR R0,[R4, #+0] \ 00000010 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000014 0050A0E1 MOV R5,R0 1370 UnlockSched(); \ 00000018 470100EF SWI +327 1371 unsigned int id=*((unsigned short*)(p->data)); \ 0000001C B840D4E1 LDRH R4,[R4, #+8] 1372 LOGQ *q; 1373 if (!t) return NULL; \ 00000020 000055E3 CMP R5,#+0 \ 00000024 0000A003 MOVEQ R0,#+0 \ 00000028 3080BD08 POPEQ {R4,R5,PC} 1374 LockSched(); \ 0000002C 460100EF SWI +326 1375 q=t->log; \ 00000030 745095E5 LDR R5,[R5, #+116] \ 00000034 000000EA B ??FindContactLOGQByAck_0 1376 while(q) 1377 { 1378 if (q->ID==id) break; 1379 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 1380 } 1381 UnlockSched(); \ 0000004C 470100EF SWI +327 1382 return q; \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 3080BDE8 POP {R4,R5,PC} ;; return 1383 } 1384 1385 GBSTMR statusTmr; 1386 extern const int TIME_OR_MSG; 1387 char ContactT9Key[32]; 1388 int kopa_online; 1389 int kopa_kontaktu; \ In segment CODE, align 4, keep-with-next 1390 void DrawStatusBar(void *canvas,char *status) 1391 { 1392 // PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 1393 if(TIME_OR_MSG==5) \ DrawStatusBar: \ 00000000 ........ LDR R0,??DataTable53 ;; TIME_OR_MSG \ 00000004 F0472DE9 PUSH {R4-R10,LR} \ 00000008 ........ LDR R5,??DataTable51 ;; S_ICONS \ 0000000C 08D04DE2 SUB SP,SP,#+8 \ 00000010 000090E5 LDR R0,[R0, #+0] \ 00000014 0140A0E1 MOV R4,R1 \ 00000018 050050E3 CMP R0,#+5 \ 0000001C 1D00001A BNE ??DrawStatusBar_0 1394 PrintText( GetImgWidth((int)S_ICONS+ICON_HEAD),YDISP+2,status,1,1,1,ScreenW()-GetImgWidth((int)S_ICONS+ICON_HEAD),0, strlen(status),strlen(status)); \ 00000020 0400A0E1 MOV R0,R4 \ 00000024 1B0000EF SWI +27 \ 00000028 0060A0E1 MOV R6,R0 \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 1B0000EF SWI +27 \ 00000034 0070A0E1 MOV R7,R0 \ 00000038 888100EF SWI +33160 \ 0000003C 0080A0E1 MOV R8,R0 \ 00000040 139085E2 ADD R9,R5,#+19 \ 00000044 0900A0E1 MOV R0,R9 \ 00000048 220000EF SWI +34 \ 0000004C 00A0A0E1 MOV R10,R0 \ 00000050 0900A0E1 MOV R0,R9 \ 00000054 220000EF SWI +34 \ 00000058 40002DE9 PUSH {R6} \ 0000005C 0778A0E1 MOV R7,R7, LSL #+16 \ 00000060 4778A0E1 MOV R7,R7, ASR #+16 \ 00000064 80002DE9 PUSH {R7} \ 00000068 0010A0E3 MOV R1,#+0 \ 0000006C 02002DE9 PUSH {R1} \ 00000070 0130A0E3 MOV R3,#+1 \ 00000074 0420A0E1 MOV R2,R4 \ 00000078 0A1048E0 SUB R1,R8,R10 \ 0000007C 02002DE9 PUSH {R1} \ 00000080 0110A0E3 MOV R1,#+1 \ 00000084 02002DE9 PUSH {R1} \ 00000088 02002DE9 PUSH {R1} \ 0000008C 1A10A0E3 MOV R1,#+26 \ 00000090 ........ _BLF PrintText,??PrintText??rA \ 00000094 18D08DE2 ADD SP,SP,#+24 1395 GBS_StartTimerProc(&statusTmr,262,DrawStatusBar); \ ??DrawStatusBar_0: \ 00000098 18209FE5 LDR R2,??DrawStatusBar_1 ;; DrawStatusBar \ 0000009C 0610A0E3 MOV R1,#+6 \ 000000A0 401F81E3 ORR R1,R1,#0x100 \ 000000A4 B000A0E3 MOV R0,#+176 \ 000000A8 600D80E3 ORR R0,R0,#0x1800 \ 000000AC 050080E0 ADD R0,R0,R5 \ 000000B0 4D0000EF SWI +77 1396 } \ 000000B4 F387BDE8 POP {R0,R1,R4-R10,PC} ;; return \ ??DrawStatusBar_1: \ 000000B8 ........ DC32 DrawStatusBar 1397 \ In segment CODE, align 4, keep-with-next 1398 void UpdateCLheader(void) 1399 { \ UpdateCLheader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1400 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R4,??DataTable58 ;; S_ICONS \ 00000008 68629FE5 LDR R6,??UpdateCLheader_1+0x14 ;; key_clmenu_sk_r \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 A010A0E3 MOV R1,#+160 \ 00000014 601D81E3 ORR R1,R1,#0x1800 \ 00000018 041081E0 ADD R1,R1,R4 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 7000A0E3 MOV R0,#+112 \ 00000024 600D80E3 ORR R0,R0,#0x1800 \ 00000028 045080E0 ADD R5,R0,R4 \ 0000002C CE7FA0E3 MOV R7,#+824 \ 00000030 040087E0 ADD R0,R7,R4 \ 00000034 1B0000EF SWI +27 \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0900000A BEQ ??UpdateCLheader_2 1401 { 1402 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000040 401086E2 ADD R1,R6,#+64 \ 00000044 0500A0E1 MOV R0,R5 \ 00000048 1A0000EF SWI +26 1403 strcat(clm_hdr_text,ContactT9Key); \ 0000004C 041087E0 ADD R1,R7,R4 \ 00000050 0500A0E1 MOV R0,R5 \ 00000054 170000EF SWI +23 1404 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000058 00009DE5 LDR R0,[SP, #+0] \ 0000005C 0610A0E1 MOV R1,R6 \ 00000060 1A0000EF SWI +26 \ 00000064 F78FBDE8 POP {R0-R2,R4-R11,PC} 1405 } 1406 else 1407 { 1408 switch(TIME_OR_MSG) \ ??UpdateCLheader_2: \ 00000068 ........ LDR R0,??DataTable53 ;; TIME_OR_MSG \ 0000006C AC7194E5 LDR R7,[R4, #+428] \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 108194E5 LDR R8,[R4, #+272] \ 00000078 799F8FE2 ADR R9,??UpdateCLheader_1 ;; "[V]" \ 0000007C 79AF8FE2 ADR R10,??UpdateCLheader_1+0x4 ;; "[I]" \ 00000080 79BF8FE2 ADR R11,??UpdateCLheader_1+0x8 ;; "[A]" \ 00000084 040050E3 CMP R0,#+4 \ 00000088 7100008A BHI ??UpdateCLheader_3 \ 0000008C 011F8FE2 ADR R1,??UpdateCLheader_0 \ 00000090 0010D1E7 LDRB R1,[R1, R0] \ 00000094 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??UpdateCLheader_0: \ 00000098 010D1218 DC8 +1,+13,+18,+24 \ 0000009C 47000000 DC8 +71,+0,+0,+0 1409 { 1410 case 0: 1411 { 1412 TTime the; 1413 GetDateTime(NULL,&the); \ ??UpdateCLheader_4: \ 000000A0 04108DE2 ADD R1,SP,#+4 \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 B40000EF SWI +180 1414 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ 000000AC 0500DDE5 LDRB R0,[SP, #+5] \ 000000B0 342086E2 ADD R2,R6,#+52 \ 000000B4 041086E2 ADD R1,R6,#+4 \ 000000B8 01002DE9 PUSH {R0} \ 000000BC 0830DDE5 LDRB R3,[SP, #+8] \ ??UpdateCLheader_5: \ 000000C0 0500A0E1 MOV R0,R5 \ 000000C4 160000EF SWI +22 \ 000000C8 04D08DE2 ADD SP,SP,#+4 \ 000000CC 600000EA B ??UpdateCLheader_3 1415 } 1416 break; 1417 case 1: 1418 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_6: \ 000000D0 00012DE9 PUSH {R8} \ 000000D4 0730A0E1 MOV R3,R7 \ 000000D8 342086E2 ADD R2,R6,#+52 \ 000000DC 141086E2 ADD R1,R6,#+20 \ 000000E0 F6FFFFEA B ??UpdateCLheader_5 1419 break; 1420 case 2: 1421 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); \ ??UpdateCLheader_7: \ 000000E4 C80194E5 LDR R0,[R4, #+456] \ 000000E8 342086E2 ADD R2,R6,#+52 \ 000000EC 01002DE9 PUSH {R0} \ 000000F0 CC3194E5 LDR R3,[R4, #+460] \ 000000F4 141086E2 ADD R1,R6,#+20 \ 000000F8 F0FFFFEA B ??UpdateCLheader_5 1422 break; 1423 case 3: 1424 { 1425 void Get_Online_total(); 1426 Get_Online_total(); \ ??UpdateCLheader_8: \ 000000FC ........ BL Get_Online_total 1427 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] ",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000100 00012DE9 PUSH {R8} \ 00000104 80002DE9 PUSH {R7} \ 00000108 C83194E5 LDR R3,[R4, #+456] \ 0000010C CC2194E5 LDR R2,[R4, #+460] \ 00000110 201086E2 ADD R1,R6,#+32 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 160000EF SWI +22 1428 if(away_m) strcat(clm_hdr_text,"[A]"); \ 0000011C 300194E5 LDR R0,[R4, #+304] \ 00000120 08D08DE2 ADD SP,SP,#+8 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0200000A BEQ ??UpdateCLheader_9 \ 0000012C 0B10A0E1 MOV R1,R11 \ 00000130 0500A0E1 MOV R0,R5 \ 00000134 170000EF SWI +23 1429 if(CurrentPrivateStatus==1) strcat(clm_hdr_text,"[I]"); \ ??UpdateCLheader_9: \ 00000138 740194E5 LDR R0,[R4, #+372] \ 0000013C 010050E3 CMP R0,#+1 \ 00000140 0200001A BNE ??UpdateCLheader_10 \ 00000144 0A10A0E1 MOV R1,R10 \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 170000EF SWI +23 1430 if(Is_Vibra_Enabled) strcat(clm_hdr_text,"[V]"); \ ??UpdateCLheader_10: \ 00000150 600194E5 LDR R0,[R4, #+352] \ 00000154 000050E3 CMP R0,#+0 \ 00000158 0200000A BEQ ??UpdateCLheader_11 \ 0000015C 0910A0E1 MOV R1,R9 \ 00000160 0500A0E1 MOV R0,R5 \ 00000164 170000EF SWI +23 1431 if(Is_Sounds_Enabled) strcat(clm_hdr_text,"[S]"); \ ??UpdateCLheader_11: \ 00000168 640194E5 LDR R0,[R4, #+356] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0200000A BEQ ??UpdateCLheader_12 \ 00000174 3D1F8FE2 ADR R1,??UpdateCLheader_1+0xC ;; "[S]" \ 00000178 0500A0E1 MOV R0,R5 \ 0000017C 170000EF SWI +23 1432 if(Is_Double_Vibra_On) strcat(clm_hdr_text,"[R]"); \ ??UpdateCLheader_12: \ 00000180 0C0194E5 LDR R0,[R4, #+268] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 0200000A BEQ ??UpdateCLheader_13 \ 0000018C 381F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 00000190 0500A0E1 MOV R0,R5 \ 00000194 170000EF SWI +23 1433 canvasdata=BuildCanvas(); \ ??UpdateCLheader_13: \ 00000198 F18000EF SWI +33009 \ 0000019C E80084E5 STR R0,[R4, #+232] 1434 DrawStatusBar(canvasdata,clm_hdr_text); \ 000001A0 0510A0E1 MOV R1,R5 \ 000001A4 ........ BL DrawStatusBar 1435 zeromem(clm_hdr_text,64); \ 000001A8 4010A0E3 MOV R1,#+64 \ 000001AC 0500A0E1 MOV R0,R5 \ 000001B0 1D0100EF SWI +285 \ 000001B4 260000EA B ??UpdateCLheader_3 1436 } 1437 break; 1438 case 4: 1439 { 1440 void Get_Online_total(); 1441 Get_Online_total(); \ ??UpdateCLheader_14: \ 000001B8 ........ BL Get_Online_total 1442 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] ",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 000001BC 00012DE9 PUSH {R8} \ 000001C0 80002DE9 PUSH {R7} \ 000001C4 C83194E5 LDR R3,[R4, #+456] \ 000001C8 CC2194E5 LDR R2,[R4, #+460] \ 000001CC 201086E2 ADD R1,R6,#+32 \ 000001D0 0500A0E1 MOV R0,R5 \ 000001D4 160000EF SWI +22 1443 if(away_m) strcat(clm_hdr_text,"[A]"); \ 000001D8 300194E5 LDR R0,[R4, #+304] \ 000001DC 08D08DE2 ADD SP,SP,#+8 \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 0200000A BEQ ??UpdateCLheader_15 \ 000001E8 0B10A0E1 MOV R1,R11 \ 000001EC 0500A0E1 MOV R0,R5 \ 000001F0 170000EF SWI +23 1444 if(CurrentPrivateStatus==1) strcat(clm_hdr_text,"[I]"); \ ??UpdateCLheader_15: \ 000001F4 740194E5 LDR R0,[R4, #+372] \ 000001F8 010050E3 CMP R0,#+1 \ 000001FC 0200001A BNE ??UpdateCLheader_16 \ 00000200 0A10A0E1 MOV R1,R10 \ 00000204 0500A0E1 MOV R0,R5 \ 00000208 170000EF SWI +23 1445 if(Is_Vibra_Enabled) strcat(clm_hdr_text,"[V]"); \ ??UpdateCLheader_16: \ 0000020C 600194E5 LDR R0,[R4, #+352] \ 00000210 000050E3 CMP R0,#+0 \ 00000214 0200000A BEQ ??UpdateCLheader_17 \ 00000218 0910A0E1 MOV R1,R9 \ 0000021C 0500A0E1 MOV R0,R5 \ 00000220 170000EF SWI +23 1446 if(Is_Sounds_Enabled) strcat(clm_hdr_text,"[S]"); \ ??UpdateCLheader_17: \ 00000224 640194E5 LDR R0,[R4, #+356] \ 00000228 000050E3 CMP R0,#+0 \ 0000022C 0200000A BEQ ??UpdateCLheader_18 \ 00000230 0E1F8FE2 ADR R1,??UpdateCLheader_1+0xC ;; "[S]" \ 00000234 0500A0E1 MOV R0,R5 \ 00000238 170000EF SWI +23 1447 if(Is_Double_Vibra_On) strcat(clm_hdr_text,"[R]"); \ ??UpdateCLheader_18: \ 0000023C 0C0194E5 LDR R0,[R4, #+268] \ 00000240 000050E3 CMP R0,#+0 \ 00000244 0200000A BEQ ??UpdateCLheader_3 \ 00000248 091F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 0000024C 0500A0E1 MOV R0,R5 \ 00000250 170000EF SWI +23 1448 } 1449 break; 1450 } 1451 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_3: \ 00000254 00009DE5 LDR R0,[SP, #+0] \ 00000258 4C1086E2 ADD R1,R6,#+76 \ 0000025C 1A0000EF SWI +26 1452 } 1453 } \ 00000260 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??UpdateCLheader_1: \ 00000264 5B565D00 DC8 "[V]" \ 00000268 5B495D00 DC8 "[I]" \ 0000026C 5B415D00 DC8 "[A]" \ 00000270 5B535D00 DC8 "[S]" \ 00000274 5B525D00 DC8 "[R]" \ 00000278 ........ DC32 key_clmenu_sk_r 1454 \ In segment CODE, align 4, keep-with-next 1455 void ClearContactT9Key(void) 1456 { 1457 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 824 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1458 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 824 1459 \ In segment CODE, align 4, keep-with-next 1460 void AddContactT9Key(int chr) 1461 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1462 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable58 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C CE0F85E2 ADD R0,R5,#+824 \ 00000010 1B0000EF SWI +27 1463 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 1464 { 1465 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C 3843C035 STRBCC R4,[R0, #+824] 1466 } 1467 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 1468 \ In segment CODE, align 4, keep-with-next 1469 void BackSpaceContactT9(void) 1470 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1471 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable58 ;; S_ICONS \ 00000008 CE0F84E2 ADD R0,R4,#+824 \ 0000000C 1B0000EF SWI +27 1472 if (l) \ 00000010 000050E3 CMP R0,#+0 1473 { 1474 l--; 1475 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C 3713C015 STRBNE R1,[R0, #+823] 1476 } 1477 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1478 \ In segment CODE, align 4, keep-with-next 1479 void create_contactlist_menu(void) 1480 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1481 int i; 1482 i=CountContacts(); 1483 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable58 ;; S_ICONS 1484 UpdateCLheader(); 1485 patch_header(&contactlist_menuhdr); \ 00000008 58609FE5 LDR R6,??create_contactlist_menu_0 ;; contactlist_menuhdr \ 0000000C ........ _BLF CountContacts,??CountContacts??rA \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 C04185E5 STR R4,[R5, #+448] \ 00000018 ........ BL UpdateCLheader \ 0000001C 0000A0E3 MOV R0,#+0 \ 00000020 B000C6E1 STRH R0,[R6, #+0] \ 00000024 1800A0E3 MOV R0,#+24 \ 00000028 B200C6E1 STRH R0,[R6, #+2] \ 0000002C 888100EF SWI +33160 \ 00000030 010040E2 SUB R0,R0,#+1 \ 00000034 B400C6E1 STRH R0,[R6, #+4] \ 00000038 8A8100EF SWI +33162 \ 0000003C 170080E2 ADD R0,R0,#+23 \ 00000040 B600C6E1 STRH R0,[R6, #+6] 1486 #ifdef USE_MLMENU 1487 contactlist_menu_id=CreateMultiLinesMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i); \ 00000044 10002DE9 PUSH {R4} \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C 01002DE9 PUSH {R0} \ 00000050 0630A0E1 MOV R3,R6 \ 00000054 142086E2 ADD R2,R6,#+20 \ 00000058 0010A0E3 MOV R1,#+0 \ 0000005C 170200EF SWI +535 \ 00000060 B80185E5 STR R0,[R5, #+440] 1488 #else 1489 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 1490 #endif 1491 } \ 00000064 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000068 ........ DC32 contactlist_menuhdr 1492 \ In segment CODE, align 4, keep-with-next 1493 void contactlist_menu_ghook(void *data, int cmd) 1494 { \ contactlist_menu_ghook: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 1495 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 1496 if (cmd==9) \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 090054E3 CMP R4,#+9 1497 { 1498 pltop->dyn_pltop=NULL; \ 00000014 08108005 STREQ R1,[R0, #+8] \ 00000018 1080BD08 POPEQ {R4,PC} 1499 } 1500 if (cmd==0x0A) \ 0000001C 0A0054E3 CMP R4,#+10 \ 00000020 1080BD18 POPNE {R4,PC} 1501 { 1502 silenthide=0; \ 00000024 14209FE5 LDR R2,??contactlist_menu_ghook_0 ;; S_ICONS + 344 \ 00000028 001082E5 STR R1,[R2, #+0] 1503 pltop->dyn_pltop=XStatusesImgList; \ 0000002C ........ LDR R1,??DataTable57 ;; XStatusesImgList \ 00000030 001091E5 LDR R1,[R1, #+0] \ 00000034 081080E5 STR R1,[R0, #+8] 1504 DisableIDLETMR(); \ 00000038 7F0100EF SWI +383 1505 } 1506 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??contactlist_menu_ghook_0: \ 00000040 ........ DC32 S_ICONS + 344 1507 \ In segment CODE, align 4, keep-with-next 1508 void RecountMenu(CLIST *req, int needfocus) 1509 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1510 int i; 1511 int j; 1512 void *data; 1513 UpdateCLheader(); 1514 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable58 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 B80196E5 LDR R0,[R6, #+440] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 1515 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 B80196E5 LDR R0,[R6, #+440] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 1516 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 1517 { 1518 j=0; 1519 } 1520 else 1521 { 1522 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 1523 } 1524 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 1525 if (j>=i) j=i-1; 1526 if (j<0) j=0; 1527 if (i!=prev_clmenu_itemcount) \ 00000048 C01196E5 LDR R1,[R6, #+448] \ 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 1528 { 1529 prev_clmenu_itemcount=i; \ 00000064 C00186E5 STR R0,[R6, #+448] 1530 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 1531 } 1532 if(needfocus) SetCursorToMenuItem(data,j); //2058 \ ??RecountMenu_1: \ 00000074 000055E3 CMP R5,#+0 \ 00000078 0200000A BEQ ??RecountMenu_2 \ 0000007C 0410A0E1 MOV R1,R4 \ 00000080 0700A0E1 MOV R0,R7 \ 00000084 C40100EF SWI +452 1533 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 B80196E5 LDR R0,[R6, #+440] \ 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 1534 } 1535 1536 char hostbuf2[128]; 1537 \ In segment CODE, align 4, keep-with-next 1538 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 1539 { \ contactlist_menu_onkey: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 1540 CLIST *t; 1541 int i; 1542 i=GetCurMenuItem(data); \ 00000008 8F0100EF SWI +399 1543 t=FindContactByN(i); \ 0000000C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000010 00A0A0E1 MOV R10,R0 1544 if (msg->keys==0x18) \ 00000014 08009DE5 LDR R0,[SP, #+8] \ 00000018 F200D0E1 LDRSH R0,[R0, #+2] \ 0000001C 180050E3 CMP R0,#+24 \ 00000020 0100001A BNE ??contactlist_menu_onkey_1 1545 { 1546 ShowMainMenu(); \ 00000024 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 1547 return(-1); \ 00000028 E20000EA B ??contactlist_menu_onkey_2 1548 } 1549 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_1: \ 0000002C ........ LDR R6,??DataTable59 ;; S_ICONS \ 00000030 CE5FA0E3 MOV R5,#+824 \ 00000034 3D0050E3 CMP R0,#+61 \ 00000038 2400001A BNE ??contactlist_menu_onkey_3 1550 { 1551 if (t) \ 0000003C 00005AE3 CMP R10,#+0 \ 00000040 2C00000A BEQ ??contactlist_menu_onkey_4 1552 { 1553 if (t->isgroup) \ 00000044 08009AE5 LDR R0,[R10, #+8] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0700000A BEQ ??contactlist_menu_onkey_5 1554 { 1555 t->state^=0xFFFF; \ 00000050 B405DAE1 LDRH R0,[R10, #+84] \ 00000054 FF10A0E3 MOV R1,#+255 \ 00000058 FF1C81E3 ORR R1,R1,#0xFF00 \ 0000005C 000021E0 EOR R0,R1,R0 \ 00000060 B405CAE1 STRH R0,[R10, #+84] 1556 RecountMenu(t,1); \ 00000064 0110A0E3 MOV R1,#+1 \ 00000068 0A00A0E1 MOV R0,R10 \ 0000006C 200000EA B ??contactlist_menu_onkey_6 1557 return(-1); 1558 } 1559 if (strlen(ContactT9Key)) \ ??contactlist_menu_onkey_5: \ 00000070 060085E0 ADD R0,R5,R6 \ 00000074 1B0000EF SWI +27 \ 00000078 000050E3 CMP R0,#+0 \ 0000007C 0500000A BEQ ??contactlist_menu_onkey_7 1560 { 1561 ClearContactT9Key(); \ 00000080 2010A0E3 MOV R1,#+32 \ 00000084 060085E0 ADD R0,R5,R6 \ 00000088 1D0100EF SWI +285 1562 RecountMenu(NULL,1); \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 ........ BL RecountMenu 1563 } 1564 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<keys==1) \ ??contactlist_menu_onkey_3: \ 000000D0 010050E3 CMP R0,#+1 \ 000000D4 0900001A BNE ??contactlist_menu_onkey_9 1570 { 1571 if (strlen(ContactT9Key)) \ 000000D8 060085E0 ADD R0,R5,R6 \ 000000DC 1B0000EF SWI +27 \ 000000E0 000050E3 CMP R0,#+0 \ 000000E4 0500000A BEQ ??contactlist_menu_onkey_9 1572 { 1573 BackSpaceContactT9(); \ 000000E8 ........ BL BackSpaceContactT9 1574 RecountMenu(NULL,1); \ 000000EC 0110A0E3 MOV R1,#+1 \ 000000F0 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_6: \ 000000F4 ........ BL RecountMenu 1575 return(-1); \ ??contactlist_menu_onkey_4: \ 000000F8 0000E0E3 MVN R0,#+0 \ 000000FC FE8FBDE8 POP {R1-R11,PC} 1576 } 1577 } 1578 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_9: \ 00000100 08009DE5 LDR R0,[SP, #+8] \ 00000104 ........ LDR R7,??DataTable66 ;; `?gbsmsg->submess; \ 00000138 088090E5 LDR R8,[R0, #+8] 1581 if ((key>='0')&&(key<='9')) \ 0000013C 300058E3 CMP R8,#+48 \ 00000140 070000BA BLT ??contactlist_menu_onkey_11 \ 00000144 3A0058E3 CMP R8,#+58 \ 00000148 1D0000AA BGE ??contactlist_menu_onkey_12 1582 { 1583 AddContactT9Key(key); \ 0000014C 0800A0E1 MOV R0,R8 \ 00000150 ........ BL AddContactT9Key 1584 RecountMenu(NULL,1); \ 00000154 0110A0E3 MOV R1,#+1 \ 00000158 0900A0E1 MOV R0,R9 \ 0000015C ........ BL RecountMenu \ 00000160 A30000EA B ??contactlist_menu_onkey_13 1585 return(-1); 1586 } 1587 #ifdef ELKA 1588 if (key==VOL_UP_BUTTON && isVolUpButton) \ ??contactlist_menu_onkey_11: \ 00000164 0D0058E3 CMP R8,#+13 \ 00000168 1500001A BNE ??contactlist_menu_onkey_12 \ 0000016C A0059FE5 LDR R0,??contactlist_menu_onkey_14 ;; isVolUpButton \ 00000170 000090E5 LDR R0,[R0, #+0] \ 00000174 000050E3 CMP R0,#+0 \ 00000178 1100000A BEQ ??contactlist_menu_onkey_12 1589 { 1590 char *small_info=malloc(256); \ 0000017C 400FA0E3 MOV R0,#+256 \ 00000180 140000EF SWI +20 \ 00000184 00B0A0E1 MOV R11,R0 1591 sprintf(small_info, "Время в онлайн:\n" 1592 "%02d:%02d:%02d\n" 1593 "Сервер:\n%s" 1594 ,xstatus_old, minimum_xstatus, maximum, hostbuf2); \ 00000188 630D86E2 ADD R0,R6,#+6336 \ 0000018C 01002DE9 PUSH {R0} \ 00000190 4C0196E5 LDR R0,[R6, #+332] \ 00000194 241087E2 ADD R1,R7,#+36 \ 00000198 01002DE9 PUSH {R0} \ 0000019C 483196E5 LDR R3,[R6, #+328] \ 000001A0 442196E5 LDR R2,[R6, #+324] \ 000001A4 0B00A0E1 MOV R0,R11 \ 000001A8 160000EF SWI +22 1595 ShowMSG(1,(int)small_info); \ 000001AC 0B10A0E1 MOV R1,R11 \ 000001B0 0100A0E3 MOV R0,#+1 \ 000001B4 480100EF SWI +328 1596 mfree(small_info); \ 000001B8 0B00A0E1 MOV R0,R11 \ 000001BC 150000EF SWI +21 \ 000001C0 08D08DE2 ADD SP,SP,#+8 1597 } 1598 1599 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) \ ??contactlist_menu_onkey_12: \ 000001C4 08009DE5 LDR R0,[SP, #+8] \ 000001C8 040090E5 LDR R0,[R0, #+4] \ 000001CC 080090E5 LDR R0,[R0, #+8] \ 000001D0 0E0050E3 CMP R0,#+14 \ 000001D4 1400001A BNE ??contactlist_menu_onkey_15 \ 000001D8 38059FE5 LDR R0,??contactlist_menu_onkey_14+0x4 ;; isVolDownButton \ 000001DC 000090E5 LDR R0,[R0, #+0] \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 1000000A BEQ ??contactlist_menu_onkey_15 1600 { 1601 if(!away_m) \ 000001E8 300196E5 LDR R0,[R6, #+304] \ 000001EC 000050E3 CMP R0,#+0 \ 000001F0 0900001A BNE ??contactlist_menu_onkey_16 1602 { 1603 away_m=!away_m; \ 000001F4 304186E5 STR R4,[R6, #+304] 1604 GBS_StopTimer(&away_tmr); \ 000001F8 04009DE5 LDR R0,[SP, #+4] \ 000001FC 440100EF SWI +324 1605 msg_away_timer=AUTO_ENGADE; \ 00000200 ........ LDR R0,??DataTable63 ;; AUTO_ENGADE \ 00000204 000090E5 LDR R0,[R0, #+0] \ 00000208 280186E5 STR R0,[R6, #+296] 1606 away_timer(); \ 0000020C ........ BL away_timer 1607 main_d=1; \ 00000210 E04086E5 STR R4,[R6, #+224] 1608 // ShowMSG(1,(int)"Автоответчик включен!"); 1609 InputAwayMsg(); \ 00000214 ........ BL InputAwayMsg \ 00000218 010000EA B ??contactlist_menu_onkey_17 1610 } 1611 else 1612 { 1613 msg_away_timer=0; \ ??contactlist_menu_onkey_16: \ 0000021C 289186E5 STR R9,[R6, #+296] 1614 away_m=!away_m; \ 00000220 309186E5 STR R9,[R6, #+304] 1615 // ShowMSG(1,(int)"Автоответчик выключен!"); 1616 } 1617 UpdateCLheader(); \ ??contactlist_menu_onkey_17: \ 00000224 ........ BL UpdateCLheader 1618 RefreshGUI(); \ 00000228 960100EF SWI +406 1619 } 1620 #endif 1621 if (key==GREEN_BUTTON) \ ??contactlist_menu_onkey_15: \ 0000022C 0B0058E3 CMP R8,#+11 \ 00000230 0900001A BNE ??contactlist_menu_onkey_18 1622 { 1623 #ifdef kluchnik 1624 Show_XTX=!(Show_XTX); \ 00000234 3C0196E5 LDR R0,[R6, #+316] \ 00000238 000050E3 CMP R0,#+0 \ 0000023C 0040A013 MOVNE R4,#+0 \ 00000240 3C4186E5 STR R4,[R6, #+316] 1625 if(Show_XTX) \ 00000244 000054E3 CMP R4,#+0 \ 00000248 60108702 ADDEQ R1,R7,#+96 1626 ShowMSG(1,(int)"Show x-status"); \ 0000024C 50108712 ADDNE R1,R7,#+80 \ 00000250 0100A0E3 MOV R0,#+1 \ 00000254 480100EF SWI +328 \ 00000258 560000EA B ??contactlist_menu_onkey_2 1627 else 1628 ShowMSG(1,(int)"Show time"); 1629 #else 1630 IsActiveUp=!IsActiveUp; 1631 RecountMenu(NULL,1); 1632 #endif 1633 return(-1); 1634 } 1635 if (key==LEFT_BUTTON) \ ??contactlist_menu_onkey_18: \ 0000025C 3D0058E3 CMP R8,#+61 \ 00000260 1B00000A BEQ ??contactlist_menu_onkey_19 1636 { 1637 while(t=(CLIST *)(t->next)) 1638 { 1639 if (t->isunread) goto doit; 1640 } 1641 t=(CLIST *)(&cltop); 1642 while(t=(CLIST *)(t->next)) 1643 { 1644 if (t->isunread) goto doit; 1645 } 1646 if (t && Is_Show_Groups) {//???? ??????? ? ?????????? ??????? 1647 if (!t->isgroup) 1648 t=FindGroupByID(t->group); 1649 if (t && !t->state) {//?????? ??????? ? ??? ???????? 1650 t->state^=0xFFFF; 1651 goto does; 1652 } 1653 } 1654 doit: 1655 { 1656 CLIST *g=FindGroupByID(t->group); 1657 if (g) 1658 { 1659 if (g->state) 1660 { 1661 g->state=0; 1662 } 1663 } 1664 } 1665 does: 1666 RecountMenu(t,1); 1667 return(-1); 1668 } 1669 if (key=='*') \ 00000264 2A0058E3 CMP R8,#+42 \ 00000268 3100000A BEQ ??contactlist_menu_onkey_20 1670 { 1671 while(t=(CLIST *)(t->next)) 1672 { 1673 if (t->just_now) goto doit3; 1674 } 1675 t=(CLIST *)(&cltop); 1676 while(t=(CLIST *)(t->next)) 1677 { 1678 if (t->just_now) goto doit3; 1679 } 1680 return(-1); 1681 doit3: 1682 { 1683 CLIST *g=FindGroupByID(t->group); 1684 if (g) 1685 { 1686 if (g->state) 1687 { 1688 g->state=0; 1689 } 1690 } 1691 } 1692 RecountMenu(t,1); 1693 return(-1); 1694 } 1695 extern const int ActionResh; 1696 if (key=='#') \ 0000026C 230058E3 CMP R8,#+35 \ 00000270 5200001A BNE ??contactlist_menu_onkey_21 1697 { 1698 if(ActionResh) \ 00000274 A0049FE5 LDR R0,??contactlist_menu_onkey_14+0x8 ;; ActionResh \ 00000278 000090E5 LDR R0,[R0, #+0] \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 3900001A BNE ??contactlist_menu_onkey_22 1699 { 1700 while(t=(CLIST *)(t->next)) 1701 { 1702 if (t->isactive) goto doit4; 1703 } 1704 t=(CLIST *)(&cltop); 1705 while(t=(CLIST *)(t->next)) 1706 { 1707 if (t->isactive) goto doit4; 1708 } 1709 return(-1); 1710 doit4: 1711 { 1712 CLIST *g=FindGroupByID(t->group); 1713 if (g) 1714 { 1715 if (g->state) 1716 { 1717 g->state=0; 1718 } 1719 } 1720 } 1721 RecountMenu(t,1); 1722 } 1723 else 1724 { 1725 if(t->log) \ 00000284 74009AE5 LDR R0,[R10, #+116] \ 00000288 000050E3 CMP R0,#+0 \ 0000028C 0200000A BEQ ??contactlist_menu_onkey_23 1726 { 1727 FreeLOGQ(&t->log); \ 00000290 74008AE2 ADD R0,R10,#+116 \ 00000294 ........ BL FreeLOGQ 1728 t->msg_count=0; \ 00000298 84908AE5 STR R9,[R10, #+132] 1729 } 1730 if(strlen(ContactT9Key)) \ ??contactlist_menu_onkey_23: \ 0000029C 060085E0 ADD R0,R5,R6 \ 000002A0 1B0000EF SWI +27 \ 000002A4 000050E3 CMP R0,#+0 \ 000002A8 0200000A BEQ ??contactlist_menu_onkey_24 1731 ClearContactT9Key(); \ 000002AC 2010A0E3 MOV R1,#+32 \ 000002B0 060085E0 ADD R0,R5,R6 \ 000002B4 1D0100EF SWI +285 1732 t->isactive=0; \ ??contactlist_menu_onkey_24: \ 000002B8 80908AE5 STR R9,[R10, #+128] 1733 RecountMenu(NULL,0); \ 000002BC 0010A0E3 MOV R1,#+0 \ 000002C0 0100A0E1 MOV R0,R1 \ 000002C4 3A0000EA B ??contactlist_menu_onkey_25 1734 } \ ??contactlist_menu_onkey_26: \ 000002C8 64009AE5 LDR R0,[R10, #+100] \ 000002CC 000050E3 CMP R0,#+0 \ 000002D0 0900001A BNE ??contactlist_menu_onkey_27 \ ??contactlist_menu_onkey_19: \ 000002D4 00A09AE5 LDR R10,[R10, #+0] \ 000002D8 00005AE3 CMP R10,#+0 \ 000002DC F9FFFF1A BNE ??contactlist_menu_onkey_26 \ 000002E0 6CAF86E2 ADD R10,R6,#+432 \ ??contactlist_menu_onkey_28: \ 000002E4 00A09AE5 LDR R10,[R10, #+0] \ 000002E8 00005AE3 CMP R10,#+0 \ 000002EC 0200000A BEQ ??contactlist_menu_onkey_27 \ 000002F0 64009AE5 LDR R0,[R10, #+100] \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 F9FFFF0A BEQ ??contactlist_menu_onkey_28 \ ??contactlist_menu_onkey_27: \ 000002FC 10009AE5 LDR R0,[R10, #+16] \ 00000300 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000304 000050E3 CMP R0,#+0 \ 00000308 B415D011 LDRHNE R1,[R0, #+84] \ 0000030C 00005113 CMPNE R1,#+0 \ 00000310 B495C011 STRHNE R9,[R0, #+84] \ 00000314 0110A0E3 MOV R1,#+1 \ 00000318 0A00A0E1 MOV R0,R10 \ 0000031C ........ BL RecountMenu \ 00000320 000064E2 RSB R0,R4,#+0 \ 00000324 FE8FBDE8 POP {R1-R11,PC} \ ??contactlist_menu_onkey_29: \ 00000328 5C009AE5 LDR R0,[R10, #+92] \ 0000032C 000050E3 CMP R0,#+0 \ 00000330 F1FFFF1A BNE ??contactlist_menu_onkey_27 \ ??contactlist_menu_onkey_20: \ 00000334 00A09AE5 LDR R10,[R10, #+0] \ 00000338 00005AE3 CMP R10,#+0 \ 0000033C F9FFFF1A BNE ??contactlist_menu_onkey_29 \ 00000340 6CAF86E2 ADD R10,R6,#+432 \ ??contactlist_menu_onkey_30: \ 00000344 00A09AE5 LDR R10,[R10, #+0] \ 00000348 00005AE3 CMP R10,#+0 \ 0000034C 69FFFF0A BEQ ??contactlist_menu_onkey_4 \ 00000350 5C009AE5 LDR R0,[R10, #+92] \ 00000354 000050E3 CMP R0,#+0 \ 00000358 F9FFFF0A BEQ ??contactlist_menu_onkey_30 \ 0000035C E6FFFFEA B ??contactlist_menu_onkey_27 \ ??contactlist_menu_onkey_31: \ 00000360 80009AE5 LDR R0,[R10, #+128] \ 00000364 000050E3 CMP R0,#+0 \ 00000368 0900001A BNE ??contactlist_menu_onkey_32 \ ??contactlist_menu_onkey_22: \ 0000036C 00A09AE5 LDR R10,[R10, #+0] \ 00000370 00005AE3 CMP R10,#+0 \ 00000374 F9FFFF1A BNE ??contactlist_menu_onkey_31 \ 00000378 6CAF86E2 ADD R10,R6,#+432 \ ??contactlist_menu_onkey_33: \ 0000037C 00A09AE5 LDR R10,[R10, #+0] \ 00000380 00005AE3 CMP R10,#+0 \ 00000384 5BFFFF0A BEQ ??contactlist_menu_onkey_4 \ 00000388 80009AE5 LDR R0,[R10, #+128] \ 0000038C 000050E3 CMP R0,#+0 \ 00000390 F9FFFF0A BEQ ??contactlist_menu_onkey_33 \ ??contactlist_menu_onkey_32: \ 00000394 10009AE5 LDR R0,[R10, #+16] \ 00000398 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 0000039C 000050E3 CMP R0,#+0 \ 000003A0 B415D011 LDRHNE R1,[R0, #+84] \ 000003A4 00005113 CMPNE R1,#+0 \ 000003A8 B495C011 STRHNE R9,[R0, #+84] \ 000003AC 0110A0E3 MOV R1,#+1 \ 000003B0 0A00A0E1 MOV R0,R10 \ ??contactlist_menu_onkey_25: \ 000003B4 ........ BL RecountMenu \ ??contactlist_menu_onkey_2: \ 000003B8 0000E0E3 MVN R0,#+0 \ 000003BC FE8FBDE8 POP {R1-R11,PC} 1735 return(-1); 1736 } 1737 if (key==RIGHT_BUTTON) \ ??contactlist_menu_onkey_21: \ 000003C0 3E0058E3 CMP R8,#+62 \ 000003C4 0C00001A BNE ??contactlist_menu_onkey_34 1738 { 1739 //Послать запрос текста XStatus 1740 if (t) \ 000003C8 00005AE3 CMP R10,#+0 \ 000003CC 0E00000A BEQ ??contactlist_menu_onkey_10 1741 { 1742 if (!t->isgroup) \ 000003D0 08009AE5 LDR R0,[R10, #+8] \ 000003D4 000050E3 CMP R0,#+0 \ 000003D8 0B00001A BNE ??contactlist_menu_onkey_10 1743 { 1744 FreeXText(t); \ 000003DC 0A00A0E1 MOV R0,R10 \ 000003E0 ........ _BLF FreeXText,??FreeXText??rA 1745 t->req_xtext=0; \ 000003E4 90908AE5 STR R9,[R10, #+144] 1746 RequestXText(t->uin); \ 000003E8 0C009AE5 LDR R0,[R10, #+12] \ 000003EC ........ BL RequestXText 1747 RefreshGUI(); \ 000003F0 960100EF SWI +406 1748 return(-1); \ ??contactlist_menu_onkey_13: \ 000003F4 000064E2 RSB R0,R4,#+0 \ 000003F8 FE8FBDE8 POP {R1-R11,PC} 1749 } 1750 } 1751 } 1752 1753 if (key==0x19) \ ??contactlist_menu_onkey_34: \ 000003FC 190058E3 CMP R8,#+25 \ 00000400 0100001A BNE ??contactlist_menu_onkey_10 1754 { 1755 CreateScreenSelectGUI(); \ 00000404 ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA 1756 // GeneralFuncF1(1); 1757 return(-1); \ 00000408 F9FFFFEA B ??contactlist_menu_onkey_13 1758 } 1759 } 1760 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_10: \ 0000040C 08009DE5 LDR R0,[SP, #+8] \ 00000410 652F84E3 ORR R2,R4,#0x194 \ 00000414 040090E5 LDR R0,[R0, #+4] \ 00000418 041090E5 LDR R1,[R0, #+4] \ 0000041C 020051E1 CMP R1,R2 \ 00000420 B900001A BNE ??contactlist_menu_onkey_35 1761 { 1762 if (msg->gbsmsg->submess=='#') \ 00000424 081090E5 LDR R1,[R0, #+8] \ 00000428 0980A0E3 MOV R8,#+9 \ 0000042C 428C88E3 ORR R8,R8,#0x4200 \ 00000430 B0B0A0E3 MOV R11,#+176 \ 00000434 DEBC8BE3 ORR R11,R11,#0xDE00 \ 00000438 230051E3 CMP R1,#+35 \ 0000043C 1600001A BNE ??contactlist_menu_onkey_36 1763 { 1764 // if(isLongPressResh==1) 1765 // { 1766 ClearContactT9Key(); \ 00000440 2010A0E3 MOV R1,#+32 \ 00000444 060085E0 ADD R0,R5,R6 \ 00000448 1D0100EF SWI +285 1767 RecountMenu(NULL,1); \ 0000044C 0110A0E3 MOV R1,#+1 \ 00000450 0900A0E1 MOV R0,R9 \ 00000454 ........ BL RecountMenu 1768 gipc.name_to=ipc_xtask_name; \ 00000458 ED0F85E2 ADD R0,R5,#+948 \ 0000045C 070080E0 ADD R0,R0,R7 \ 00000460 BC0086E5 STR R0,[R6, #+188] 1769 gipc.name_from=ipc_my_name; \ 00000464 E50F85E2 ADD R0,R5,#+916 \ 00000468 070080E0 ADD R0,R0,R7 \ 0000046C C00086E5 STR R0,[R6, #+192] 1770 gipc.data=0; \ 00000470 C49086E5 STR R9,[R6, #+196] 1771 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000474 BC3086E2 ADD R3,R6,#+188 \ 00000478 0420A0E1 MOV R2,R4 \ 0000047C 0B10A0E1 MOV R1,R11 \ 00000480 0800A0E1 MOV R0,R8 \ 00000484 000100EF SWI +256 1772 if (IsUnlocked()) \ 00000488 430000EF SWI +67 \ 0000048C 000050E3 CMP R0,#+0 \ 00000490 18FFFF0A BEQ ??contactlist_menu_onkey_4 1773 { 1774 KbdLock(); \ 00000494 A90000EF SWI +169 \ 00000498 C6FFFFEA B ??contactlist_menu_onkey_2 1775 } 1776 // } 1777 1778 // CreateScreenSelectGUI(); 1779 return(-1); 1780 } 1781 if (msg->gbsmsg->submess=='*') \ ??contactlist_menu_onkey_36: \ 0000049C 2A0051E3 CMP R1,#+42 \ 000004A0 1200001A BNE ??contactlist_menu_onkey_37 1782 { 1783 ClearContactT9Key(); \ 000004A4 2010A0E3 MOV R1,#+32 \ 000004A8 060085E0 ADD R0,R5,R6 \ 000004AC 1D0100EF SWI +285 1784 RecountMenu(NULL,1); \ 000004B0 0110A0E3 MOV R1,#+1 \ 000004B4 0900A0E1 MOV R0,R9 \ 000004B8 ........ BL RecountMenu 1785 silenthide=1; \ 000004BC 584186E5 STR R4,[R6, #+344] 1786 gipc.name_to=ipc_xtask_name; \ 000004C0 ED0F85E2 ADD R0,R5,#+948 \ 000004C4 070080E0 ADD R0,R0,R7 \ 000004C8 BC0086E5 STR R0,[R6, #+188] 1787 gipc.name_from=ipc_my_name; \ 000004CC E50F85E2 ADD R0,R5,#+916 \ 000004D0 070080E0 ADD R0,R0,R7 \ 000004D4 C00086E5 STR R0,[R6, #+192] 1788 gipc.data=0; \ 000004D8 C49086E5 STR R9,[R6, #+196] 1789 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000004DC BC3086E2 ADD R3,R6,#+188 \ 000004E0 0420A0E1 MOV R2,R4 \ 000004E4 0B10A0E1 MOV R1,R11 \ 000004E8 0800A0E1 MOV R0,R8 \ 000004EC 000100EF SWI +256 1790 } 1791 1792 //-------------------- LONG PRESS ACTION ON CL --------------------// 1793 1794 switch(msg->gbsmsg->submess) \ ??contactlist_menu_onkey_37: \ 000004F0 08009DE5 LDR R0,[SP, #+8] \ 000004F4 24829FE5 LDR R8,??contactlist_menu_onkey_14+0xC ;; WriteDefSettings \ 000004F8 040090E5 LDR R0,[R0, #+4] \ 000004FC 080090E5 LDR R0,[R0, #+8] \ 00000500 310040E2 SUB R0,R0,#+49 \ 00000504 080050E3 CMP R0,#+8 \ 00000508 7100008A BHI ??contactlist_menu_onkey_38 \ 0000050C 011F8FE2 ADR R1,??contactlist_menu_onkey_0 \ 00000510 0010D1E7 LDRB R1,[R1, R0] \ 00000514 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??contactlist_menu_onkey_0: \ 00000518 020F1D29 DC8 +2,+15,+29,+41 \ 0000051C 37506E6E DC8 +55,+80,+110,+110 \ 00000520 60000000 DC8 +96,+0,+0,+0 1795 { 1796 case '1': 1797 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??contactlist_menu_onkey_39: \ 00000524 640196E5 LDR R0,[R6, #+356] \ 00000528 000050E3 CMP R0,#+0 \ 0000052C 0040A013 MOVNE R4,#+0 \ 00000530 644186E5 STR R4,[R6, #+356] 1798 if(Is_Sounds_Enabled) \ 00000534 000054E3 CMP R4,#+0 1799 ShowMSG(1,(int)"Sound 0n"); \ 00000538 6C108712 ADDNE R1,R7,#+108 1800 else 1801 ShowMSG(1,(int)"Sound Off"); \ 0000053C 78108702 ADDEQ R1,R7,#+120 \ 00000540 0100A0E3 MOV R0,#+1 \ 00000544 480100EF SWI +328 1802 SUBPROC((void*)WriteDefSettings); \ 00000548 0800A0E1 MOV R0,R8 \ 0000054C 710100EF SWI +369 1803 RefreshGUI(); \ 00000550 960100EF SWI +406 \ 00000554 5E0000EA B ??contactlist_menu_onkey_38 1804 break; 1805 case '2': 1806 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??contactlist_menu_onkey_40: \ 00000558 600196E5 LDR R0,[R6, #+352] \ 0000055C 000050E3 CMP R0,#+0 \ 00000560 0040A013 MOVNE R4,#+0 \ 00000564 604186E5 STR R4,[R6, #+352] 1807 SUBPROC((void*)WriteDefSettings); \ 00000568 0800A0E1 MOV R0,R8 \ 0000056C 710100EF SWI +369 1808 RefreshGUI(); \ 00000570 960100EF SWI +406 1809 if(Is_Vibra_Enabled) \ 00000574 600196E5 LDR R0,[R6, #+352] \ 00000578 000050E3 CMP R0,#+0 \ 0000057C 90108702 ADDEQ R1,R7,#+144 1810 ShowMSG(1,(int)"Vibra On"); \ 00000580 84108712 ADDNE R1,R7,#+132 \ ??contactlist_menu_onkey_41: \ 00000584 0100A0E3 MOV R0,#+1 \ ??contactlist_menu_onkey_42: \ 00000588 480100EF SWI +328 \ 0000058C 500000EA B ??contactlist_menu_onkey_38 1811 else 1812 ShowMSG(1,(int)"Vibra Off"); 1813 break; 1814 case '3': 1815 if(CurrentPrivateStatus!=1) \ ??contactlist_menu_onkey_43: \ 00000590 740196E5 LDR R0,[R6, #+372] \ 00000594 010050E3 CMP R0,#+1 \ 00000598 0400000A BEQ ??contactlist_menu_onkey_44 1816 { 1817 SetPrivateStatus(1);//Инвиз \ 0000059C 0100A0E3 MOV R0,#+1 \ 000005A0 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1818 ShowMSG(1,(int)"Инвиз включен"); \ 000005A4 9C1087E2 ADD R1,R7,#+156 \ 000005A8 0400A0E1 MOV R0,R4 \ ??contactlist_menu_onkey_45: \ 000005AC F5FFFFEA B ??contactlist_menu_onkey_42 1819 } 1820 else 1821 { 1822 SetPrivateStatus(3);//не инвиз:) \ ??contactlist_menu_onkey_44: \ 000005B0 0300A0E3 MOV R0,#+3 \ 000005B4 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1823 ShowMSG(1,(int)"Инвиз выключен"); \ 000005B8 AC1087E2 ADD R1,R7,#+172 \ 000005BC F0FFFFEA B ??contactlist_menu_onkey_41 1824 } 1825 break; 1826 case '4': 1827 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??contactlist_menu_onkey_46: \ 000005C0 0C0196E5 LDR R0,[R6, #+268] \ 000005C4 000050E3 CMP R0,#+0 \ 000005C8 0040A013 MOVNE R4,#+0 \ 000005CC 0C4186E5 STR R4,[R6, #+268] 1828 SUBPROC((void*)WriteDefSettings); \ 000005D0 0800A0E1 MOV R0,R8 \ 000005D4 710100EF SWI +369 1829 RefreshGUI(); \ 000005D8 960100EF SWI +406 1830 if(Is_Double_Vibra_On) \ 000005DC 0C0196E5 LDR R0,[R6, #+268] \ 000005E0 000050E3 CMP R0,#+0 1831 ShowMSG(1,(int)"Vibra rem On"); \ 000005E4 BC108712 ADDNE R1,R7,#+188 \ 000005E8 0100A013 MOVNE R0,#+1 \ 000005EC E5FFFF1A BNE ??contactlist_menu_onkey_42 1832 else 1833 ShowMSG(1,(int)"Vibra rem Off"); \ 000005F0 CC1087E2 ADD R1,R7,#+204 \ 000005F4 E2FFFFEA B ??contactlist_menu_onkey_41 1834 break; 1835 case '5': 1836 { 1837 CLIST *cl; 1838 cl=(CLIST *)cltop; \ ??contactlist_menu_onkey_47: \ 000005F8 B04196E5 LDR R4,[R6, #+432] \ 000005FC 000054E3 CMP R4,#+0 \ 00000600 0800000A BEQ ??contactlist_menu_onkey_48 1839 while(cl) 1840 { 1841 if(cl->log) \ ??contactlist_menu_onkey_49: \ 00000604 740094E5 LDR R0,[R4, #+116] \ 00000608 000050E3 CMP R0,#+0 \ 0000060C 0200000A BEQ ??contactlist_menu_onkey_50 1842 { 1843 FreeLOGQ(&cl->log); \ 00000610 740084E2 ADD R0,R4,#+116 \ 00000614 ........ BL FreeLOGQ 1844 cl->msg_count=0; \ 00000618 849084E5 STR R9,[R4, #+132] 1845 } 1846 cl=cl->next; \ ??contactlist_menu_onkey_50: \ 0000061C 004094E5 LDR R4,[R4, #+0] 1847 } \ 00000620 000054E3 CMP R4,#+0 \ 00000624 F6FFFF1A BNE ??contactlist_menu_onkey_49 1848 1849 if(strlen(ContactT9Key)) \ ??contactlist_menu_onkey_48: \ 00000628 060085E0 ADD R0,R5,R6 \ 0000062C 1B0000EF SWI +27 \ 00000630 000050E3 CMP R0,#+0 \ 00000634 0200000A BEQ ??contactlist_menu_onkey_51 1850 ClearContactT9Key(); \ 00000638 2010A0E3 MOV R1,#+32 \ 0000063C 060085E0 ADD R0,R5,R6 \ 00000640 1D0100EF SWI +285 1851 t->isactive=0; \ ??contactlist_menu_onkey_51: \ 00000644 80908AE5 STR R9,[R10, #+128] 1852 RecountMenu(NULL,1); \ 00000648 0110A0E3 MOV R1,#+1 \ 0000064C 0000A0E3 MOV R0,#+0 \ 00000650 ........ BL RecountMenu 1853 return (-1); \ 00000654 0900E0E1 MVN R0,R9 \ 00000658 FE8FBDE8 POP {R1-R11,PC} 1854 } 1855 case '6': 1856 if(!away_m) \ ??contactlist_menu_onkey_52: \ 0000065C 300196E5 LDR R0,[R6, #+304] \ 00000660 000050E3 CMP R0,#+0 \ 00000664 0800001A BNE ??contactlist_menu_onkey_53 1857 { 1858 away_m=!away_m; \ 00000668 304186E5 STR R4,[R6, #+304] 1859 GBS_StopTimer(&away_tmr); \ 0000066C 04009DE5 LDR R0,[SP, #+4] \ 00000670 440100EF SWI +324 1860 msg_away_timer=AUTO_ENGADE; \ 00000674 ........ LDR R0,??DataTable63 ;; AUTO_ENGADE \ 00000678 000090E5 LDR R0,[R0, #+0] \ 0000067C 280186E5 STR R0,[R6, #+296] 1861 away_timer(); \ 00000680 ........ BL away_timer 1862 // ShowMSG(1,(int)"Автоответчик включен!"); 1863 InputAwayMsg(); \ 00000684 ........ BL InputAwayMsg \ 00000688 010000EA B ??contactlist_menu_onkey_54 1864 } 1865 else 1866 { 1867 msg_away_timer=0; \ ??contactlist_menu_onkey_53: \ 0000068C 289186E5 STR R9,[R6, #+296] 1868 away_m=!away_m; \ 00000690 309186E5 STR R9,[R6, #+304] 1869 // ShowMSG(1,(int)"Автоответчик выключен!"); 1870 } 1871 UpdateCLheader(); \ ??contactlist_menu_onkey_54: \ 00000694 ........ BL UpdateCLheader \ 00000698 0D0000EA B ??contactlist_menu_onkey_38 1872 break; 1873 case '9': 1874 { 1875 extern const char *successed_config_filename; 1876 WSHDR *ws; 1877 ws=AllocWS(150); \ ??contactlist_menu_onkey_55: \ 0000069C 9600A0E3 MOV R0,#+150 \ 000006A0 250100EF SWI +293 \ 000006A4 0040A0E1 MOV R4,R0 1878 str_2ws(ws,successed_config_filename,128); \ 000006A8 ........ LDR R0,??DataTable64 ;; successed_config_filename \ 000006AC 8020A0E3 MOV R2,#+128 \ 000006B0 001090E5 LDR R1,[R0, #+0] \ 000006B4 0400A0E1 MOV R0,R4 \ 000006B8 6C0100EF SWI +364 1879 ExecuteFile(ws,0,0); \ 000006BC 0020A0E3 MOV R2,#+0 \ 000006C0 0210A0E1 MOV R1,R2 \ 000006C4 0400A0E1 MOV R0,R4 \ 000006C8 940000EF SWI +148 1880 FreeWS(ws); \ 000006CC 0400A0E1 MOV R0,R4 \ 000006D0 290100EF SWI +297 1881 } 1882 } 1883 1884 int key=msg->gbsmsg->submess; \ ??contactlist_menu_onkey_38: \ 000006D4 08009DE5 LDR R0,[SP, #+8] \ 000006D8 040090E5 LDR R0,[R0, #+4] \ 000006DC 080090E5 LDR R0,[R0, #+8] 1885 if ((key>='0')&&(key<='9')) \ 000006E0 300050E3 CMP R0,#+48 \ 000006E4 080000BA BLT ??contactlist_menu_onkey_35 \ 000006E8 3A0050E3 CMP R0,#+58 \ 000006EC 060000AA BGE ??contactlist_menu_onkey_35 1886 { 1887 ClearContactT9Key(); \ 000006F0 2010A0E3 MOV R1,#+32 \ 000006F4 060085E0 ADD R0,R5,R6 \ 000006F8 1D0100EF SWI +285 1888 UpdateCLheader(); \ 000006FC ........ BL UpdateCLheader 1889 RecountMenu(NULL,1); \ 00000700 0110A0E3 MOV R1,#+1 \ 00000704 0000A0E3 MOV R0,#+0 \ 00000708 ........ BL RecountMenu 1890 } 1891 } 1892 return(0); \ ??contactlist_menu_onkey_35: \ 0000070C 0000A0E3 MOV R0,#+0 \ 00000710 FE8FBDE8 POP {R1-R11,PC} ;; return \ ??contactlist_menu_onkey_14: \ 00000714 ........ DC32 isVolUpButton \ 00000718 ........ DC32 isVolDownButton \ 0000071C ........ DC32 ActionResh \ 00000720 ........ DC32 WriteDefSettings 1893 } 1894 \ In segment CODE, align 4, keep-with-next 1895 void GetOnTotalContact(int group_id,int *_onlinetotal) 1896 { 1897 CLIST *t; 1898 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable65 ;; S_ICONS + 432 \ 00000004 30002DE9 PUSH {R4,R5} 1899 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 1900 while((t=t->next)) 1901 { 1902 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 1903 { 1904 total++; 1905 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 1906 } 1907 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 1908 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 1909 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 1910 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 1911 1912 \ In segment CODE, align 4, keep-with-next 1913 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 1914 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 1915 CLIST *t; 1916 #ifdef USE_MLMENU 1917 void *item=AllocMLMenuItem(data); 1918 #else 1919 void *item=AllocMenuItem(data); 1920 #endif 1921 int icon; 1922 1923 WSHDR *ws2; 1924 #ifdef USE_MLMENU 1925 WSHDR *ws4; 1926 #endif 1927 WSHDR ws1loc, *ws1; 1928 unsigned short num[128]; 1929 ws1=CreateLocalWS(&ws1loc,num,128); 1930 #ifdef USE_MLMENU 1931 WSHDR ws3loc, *ws3; 1932 unsigned short num3[128]; 1933 ws3=CreateLocalWS(&ws3loc,num3,128); 1934 char s[64]; 1935 #endif 1936 t=FindContactByN(curitem); \ 00000008 ........ LDR R10,??DataTable66 ;; `?just_now) \ 00000060 5C0098E5 LDR R0,[R8, #+92] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0C00000A BEQ ??contactlist_menu_iconhndl_2 1943 { 1944 char *test=malloc(64); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 00B0A0E1 MOV R11,R0 1945 sprintf(test, ">> %s <<", t->name); \ 00000078 142088E2 ADD R2,R8,#+20 \ 0000007C DC108AE2 ADD R1,R10,#+220 \ 00000080 160000EF SWI +22 1946 wsprintf(ws1,percent_t,test); \ 00000084 0B20A0E1 MOV R2,R11 \ 00000088 18108AE2 ADD R1,R10,#+24 \ 0000008C 0600A0E1 MOV R0,R6 \ 00000090 240100EF SWI +292 1947 mfree(test); \ 00000094 0B00A0E1 MOV R0,R11 \ 00000098 150000EF SWI +21 \ 0000009C 030000EA B ??contactlist_menu_iconhndl_3 1948 } 1949 else 1950 wsprintf(ws1,percent_t,t->name); \ ??contactlist_menu_iconhndl_2: \ 000000A0 142088E2 ADD R2,R8,#+20 \ 000000A4 18108AE2 ADD R1,R10,#+24 \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC 240100EF SWI +292 1951 if (t->just_now) \ ??contactlist_menu_iconhndl_3: \ 000000B0 5C0098E5 LDR R0,[R8, #+92] \ 000000B4 08B0A0E3 MOV R11,#+8 \ 000000B8 E0BC8BE3 ORR R11,R11,#0xE000 \ 000000BC 000050E3 CMP R0,#+0 1952 { 1953 wsInsertChar(ws1,0x0004,1); \ 000000C0 0120A013 MOVNE R2,#+1 \ 000000C4 0410A013 MOVNE R1,#+4 \ 000000C8 0400001A BNE ??contactlist_menu_iconhndl_4 1954 wsInsertChar(ws1,0xE008,1); 1955 } 1956 else 1957 if (t->isactive) \ 000000CC 800098E5 LDR R0,[R8, #+128] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 0700000A BEQ ??contactlist_menu_iconhndl_5 1958 { 1959 wsInsertChar(ws1,0x0002,1); \ 000000D8 0120A0E3 MOV R2,#+1 \ 000000DC 0210A0E3 MOV R1,#+2 \ ??contactlist_menu_iconhndl_4: \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 1D0000EF SWI +29 1960 wsInsertChar(ws1,0xE008,1); \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC 0B10A0E1 MOV R1,R11 \ 000000F0 0600A0E1 MOV R0,R6 \ 000000F4 1D0000EF SWI +29 1961 } 1962 #ifdef USE_MLMENU 1963 if ((t->xtext && t->xtext[0]!=0) && (Show_XTX)) \ ??contactlist_menu_iconhndl_5: \ 000000F8 880098E5 LDR R0,[R8, #+136] \ 000000FC 0AB08BE2 ADD R11,R11,#+10 \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0000D015 LDRBNE R0,[R0, #+0] \ 00000108 00005013 CMPNE R0,#+0 \ 0000010C 1300000A BEQ ??contactlist_menu_iconhndl_6 \ 00000110 78019FE5 LDR R0,??contactlist_menu_iconhndl_7 ;; S_ICONS + 316 \ 00000114 000090E5 LDR R0,[R0, #+0] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0F00000A BEQ ??contactlist_menu_iconhndl_6 1964 { 1965 int i; 1966 zeromem(s,64); \ 00000120 4010A0E3 MOV R1,#+64 \ 00000124 820F8DE2 ADD R0,SP,#+520 \ 00000128 1D0100EF SWI +285 1967 i=t->xtext[0]; \ 0000012C 880098E5 LDR R0,[R8, #+136] \ ??contactlist_menu_iconhndl_8: \ 00000130 0020D0E5 LDRB R2,[R0, #+0] 1968 if (i>63) i=63; 1969 strncpy(s,t->xtext+1,i); \ 00000134 011080E2 ADD R1,R0,#+1 \ 00000138 820F8DE2 ADD R0,SP,#+520 \ 0000013C 400052E3 CMP R2,#+64 \ 00000140 3F20A0A3 MOVGE R2,#+63 \ 00000144 160100EF SWI +278 1970 wsprintf(ws3,"%c%t",0xE012,s); \ 00000148 823F8DE2 ADD R3,SP,#+520 \ 0000014C 0B20A0E1 MOV R2,R11 \ 00000150 E8108AE2 ADD R1,R10,#+232 \ 00000154 0700A0E1 MOV R0,R7 \ 00000158 240100EF SWI +292 \ 0000015C 0D0000EA B ??contactlist_menu_iconhndl_9 1971 } 1972 else 1973 if(t->xtext2 && t->xtext2[0]!=0) \ ??contactlist_menu_iconhndl_6: \ 00000160 8C0098E5 LDR R0,[R8, #+140] \ 00000164 000050E3 CMP R0,#+0 \ 00000168 0000D015 LDRBNE R0,[R0, #+0] \ 0000016C 00005013 CMPNE R0,#+0 \ 00000170 0400000A BEQ ??contactlist_menu_iconhndl_10 1974 { 1975 int i; 1976 zeromem(s,64); \ 00000174 4010A0E3 MOV R1,#+64 \ 00000178 820F8DE2 ADD R0,SP,#+520 \ 0000017C 1D0100EF SWI +285 1977 i=t->xtext2[0]; \ 00000180 8C0098E5 LDR R0,[R8, #+140] \ 00000184 E9FFFFEA B ??contactlist_menu_iconhndl_8 1978 if (i>63) i=63; 1979 strncpy(s,t->xtext2+1,i); 1980 wsprintf(ws3,"%c%t",0xE012,s); 1981 } 1982 else 1983 wsprintf(ws3,percent_d,t->uin); \ ??contactlist_menu_iconhndl_10: \ 00000188 0C2098E5 LDR R2,[R8, #+12] \ 0000018C 1B108AE2 ADD R1,R10,#+27 \ 00000190 0700A0E1 MOV R0,R7 \ 00000194 240100EF SWI +292 1984 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_9: \ 00000198 B605D8E1 LDRH R0,[R8, #+86] \ 0000019C ........ LDR R2,??DataTable67 ;; total_xstatuses \ 000001A0 0010A0E1 MOV R1,R0 \ 000001A4 002092E5 LDR R2,[R2, #+0] \ 000001A8 020051E1 CMP R1,R2 \ 000001AC 1B0000AA BGE ??contactlist_menu_iconhndl_11 \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 1900000A BEQ ??contactlist_menu_iconhndl_11 1985 { 1986 wsInsertChar(ws3,FIRST_UCS2_BITMAP+t->xstate,1); \ 000001B8 0120A0E3 MOV R2,#+1 \ 000001BC 460F8BE2 ADD R0,R11,#+280 \ 000001C0 011080E0 ADD R1,R0,R1 \ 000001C4 0700A0E1 MOV R0,R7 \ 000001C8 1D0000EF SWI +29 \ 000001CC 130000EA B ??contactlist_menu_iconhndl_11 1987 } 1988 #endif 1989 } 1990 else 1991 { 1992 int onlinetotal[2]; 1993 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 000001D0 100098E5 LDR R0,[R8, #+16] \ 000001D4 0D10A0E1 MOV R1,SP \ 000001D8 ........ BL GetOnTotalContact 1994 #ifdef USE_MLMENU 1995 wsprintf(ws1,percent_t,t->name); \ 000001DC 142088E2 ADD R2,R8,#+20 \ 000001E0 18108AE2 ADD R1,R10,#+24 \ 000001E4 0600A0E1 MOV R0,R6 \ 000001E8 240100EF SWI +292 1996 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 000001EC 04309DE5 LDR R3,[SP, #+4] \ 000001F0 00209DE5 LDR R2,[SP, #+0] \ 000001F4 F0108AE2 ADD R1,R10,#+240 \ 000001F8 0700A0E1 MOV R0,R7 \ 000001FC 240100EF SWI +292 1997 #else 1998 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 1999 #endif 2000 if (t->state) icon++; //Модификация иконки группы \ 00000200 B405D8E1 LDRH R0,[R8, #+84] \ 00000204 000050E3 CMP R0,#+0 \ 00000208 0400000A BEQ ??contactlist_menu_iconhndl_11 \ 0000020C 019089E2 ADD R9,R9,#+1 \ 00000210 020000EA B ??contactlist_menu_iconhndl_11 2001 } 2002 } 2003 else 2004 { 2005 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 00000214 F8108AE2 ADD R1,R10,#+248 \ 00000218 0600A0E1 MOV R0,R6 \ 0000021C 240100EF SWI +292 2006 } 2007 ws2=AllocMenuWS(data,ws1->wsbody[0]); \ ??contactlist_menu_iconhndl_11: \ 00000220 000096E5 LDR R0,[R6, #+0] \ 00000224 B010D0E1 LDRH R1,[R0, #+0] \ 00000228 0400A0E1 MOV R0,R4 \ 0000022C 980100EF SWI +408 \ 00000230 0080A0E1 MOV R8,R0 2008 wstrcpy(ws2,ws1); \ 00000234 0610A0E1 MOV R1,R6 \ 00000238 1F0100EF SWI +287 2009 2010 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 0000023C ........ LDR R0,??DataTable68 ;; S_ICONS \ 00000240 0510A0E1 MOV R1,R5 \ 00000244 092180E0 ADD R2,R0,R9, LSL #+2 \ 00000248 0400A0E1 MOV R0,R4 \ 0000024C 990100EF SWI +409 2011 #ifdef USE_MLMENU 2012 ws4=AllocMenuWS(data,ws3->wsbody[0]); \ 00000250 000097E5 LDR R0,[R7, #+0] \ 00000254 B010D0E1 LDRH R1,[R0, #+0] \ 00000258 0400A0E1 MOV R0,R4 \ 0000025C 980100EF SWI +408 \ 00000260 0060A0E1 MOV R6,R0 2013 wstrcpy(ws4,ws3); \ 00000264 0710A0E1 MOV R1,R7 \ 00000268 1F0100EF SWI +287 2014 SetMLMenuItemText(data, item, ws2, ws4, curitem); \ 0000026C 70029DE5 LDR R0,[SP, #+624] \ 00000270 0630A0E1 MOV R3,R6 \ 00000274 01002DE9 PUSH {R0} \ 00000278 0820A0E1 MOV R2,R8 \ 0000027C 0510A0E1 MOV R1,R5 \ 00000280 0400A0E1 MOV R0,R4 \ 00000284 180200EF SWI +536 2015 #else 2016 SetMenuItemText(data, item, ws2, curitem); 2017 #endif 2018 } \ 00000288 9EDF8DE2 ADD SP,SP,#+632 \ 0000028C F08FBDE8 POP {R4-R11,PC} ;; return \ ??contactlist_menu_iconhndl_7: \ 00000290 ........ DC32 S_ICONS + 316 2019 2020 //=============================================================================================== 2021 2022 int DNR_ID=0; 2023 int DNR_TRIES=3; 2024 2025 extern const char NATICQ_HOST[]; 2026 extern const unsigned int NATICQ_PORT; 2027 extern const unsigned int RECONNECT_TIME; //2058 2028 char hostname[128]; //2058 che toka 128? :) 2029 2030 int host_counter = 0; 2031 2032 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2033 const char *GetHost(int cnt, const char *str, char *buf) 2034 { 2035 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 2036 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 2037 { 2038 for(;cnt;cnt--) 2039 { 2040 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_2: \ 00000010 011081E2 ADD R1,R1,#+1 \ ??GetHost_0: \ 00000014 00C0D1E5 LDRB R12,[R1, #+0] \ 00000018 3B005CE3 CMP R12,#+59 \ 0000001C 20005C13 CMPNE R12,#+32 \ 00000020 0D005C13 CMPNE R12,#+13 \ 00000024 0A005C13 CMPNE R12,#+10 \ 00000028 00005C13 CMPNE R12,#+0 \ 0000002C F7FFFF1A BNE ??GetHost_2 2041 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 2042 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetHost_4: \ 00000040 011081E2 ADD R1,R1,#+1 \ ??GetHost_3: \ 00000044 00C0D1E5 LDRB R12,[R1, #+0] \ 00000048 3B005CE3 CMP R12,#+59 \ 0000004C 20005C13 CMPNE R12,#+32 \ 00000050 0D005C13 CMPNE R12,#+13 \ 00000054 0A005C13 CMPNE R12,#+10 \ 00000058 0100001A BNE ??GetHost_5 \ 0000005C 00005CE3 CMP R12,#+0 \ 00000060 F6FFFF1A BNE ??GetHost_4 2043 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 2044 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 2045 } 2046 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 2047 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 2048 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetHost_7: \ 00000080 011081E2 ADD R1,R1,#+1 \ ??GetHost_6: \ 00000084 00C0D1E5 LDRB R12,[R1, #+0] \ 00000088 3B005CE3 CMP R12,#+59 \ 0000008C 3A005C13 CMPNE R12,#+58 \ 00000090 20005C13 CMPNE R12,#+32 \ 00000094 0D005C13 CMPNE R12,#+13 \ 00000098 0A005C13 CMPNE R12,#+10 \ 0000009C 00005C13 CMPNE R12,#+0 \ 000000A0 F6FFFF1A BNE ??GetHost_7 2049 end = str; 2050 for(;begin0x2F && attr[k]<0x3A) {ret=ret*10+attr[k]-0x30;} else { if ( attr[k]=='-') {neg=-1;} else {return(ret*neg);}} \ ??atoi_1: \ 00000014 04C0A0E1 MOV R12,R4 \ 00000018 3A005CE3 CMP R12,#+58 \ 0000001C 0600002A BCS ??atoi_2 \ 00000020 0A40A0E3 MOV R4,#+10 \ 00000024 94C121E0 MLA R1,R4,R1,R12 \ 00000028 301041E2 SUB R1,R1,#+48 \ ??atoi_3: \ 0000002C 013083E2 ADD R3,R3,#+1 \ ??atoi_0: \ 00000030 0040D3E7 LDRB R4,[R3, +R0] \ 00000034 300054E3 CMP R4,#+48 \ 00000038 F5FFFF2A BCS ??atoi_1 \ ??atoi_2: \ 0000003C 2D0054E3 CMP R4,#+45 \ 00000040 0020E003 MVNEQ R2,#+0 \ 00000044 F8FFFF0A BEQ ??atoi_3 \ 00000048 1000BDE8 POP {R4} \ 0000004C 920100E0 MUL R0,R2,R1 \ 00000050 1EFF2FE1 BX LR ;; return 2062 } 2063 } 2064 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2065 int GetPort(int cnt, const char *str) 2066 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 2067 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 2068 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 2069 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 2070 { 2071 for(;cnt;cnt--) 2072 { 2073 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_2: \ 00000020 011081E2 ADD R1,R1,#+1 \ ??GetPort_0: \ 00000024 0040D1E5 LDRB R4,[R1, #+0] \ 00000028 3B0054E3 CMP R4,#+59 \ 0000002C 20005413 CMPNE R4,#+32 \ 00000030 0D005413 CMPNE R4,#+13 \ 00000034 0A005413 CMPNE R4,#+10 \ 00000038 00005413 CMPNE R4,#+0 \ 0000003C F7FFFF1A BNE ??GetPort_2 2074 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 2075 for(;(*str==';' || *str==' ' || *str=='\x0D' || *str=='\x0A') && *str; str++); \ ??GetPort_4: \ 00000050 011081E2 ADD R1,R1,#+1 \ ??GetPort_3: \ 00000054 0040D1E5 LDRB R4,[R1, #+0] \ 00000058 3B0054E3 CMP R4,#+59 \ 0000005C 20005413 CMPNE R4,#+32 \ 00000060 0D005413 CMPNE R4,#+13 \ 00000064 0A005413 CMPNE R4,#+10 \ 00000068 0100001A BNE ??GetPort_5 \ 0000006C 000054E3 CMP R4,#+0 \ 00000070 F6FFFF1A BNE ??GetPort_4 2076 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 2077 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 2078 } 2079 for(;*str!=';' && *str!=':' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str; str++); \ ??GetPort_1: \ 00000084 0000D1E5 LDRB R0,[R1, #+0] \ 00000088 3B0050E3 CMP R0,#+59 \ 0000008C 3A005013 CMPNE R0,#+58 \ 00000090 20005013 CMPNE R0,#+32 \ 00000094 0D005013 CMPNE R0,#+13 \ 00000098 0A005013 CMPNE R0,#+10 \ 0000009C 00005013 CMPNE R0,#+0 \ 000000A0 01108112 ADDNE R1,R1,#+1 \ 000000A4 F6FFFF1A BNE ??GetPort_1 2080 if(*str!=':') return NATICQ_PORT; \ 000000A8 ........ LDRB R0,[R1], #+1 \ 000000AC 3A0050E3 CMP R0,#+58 \ 000000B0 58009F15 LDRNE R0,??GetPort_6 ;; NATICQ_PORT \ 000000B4 00009015 LDRNE R0,[R0, #+0] \ 000000B8 1680BD18 POPNE {R1,R2,R4,PC} 2081 str++; 2082 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 2083 for(;*str!=';' && *str!=' ' && *str!='\x0D' && *str!='\x0A' && *str && numcnt<5; numbuf[numcnt] = *str, str++, numcnt++); \ ??GetPort_8: \ 000000C4 ........ LDRB R4,[R1], #+1 \ 000000C8 013083E2 ADD R3,R3,#+1 \ 000000CC FF3003E2 AND R3,R3,#0xFF \ 000000D0 0040C0E5 STRB R4,[R0, #+0] \ ??GetPort_7: \ 000000D4 0D40A0E1 MOV R4,SP \ 000000D8 040083E0 ADD R0,R3,R4 \ 000000DC 0040D1E5 LDRB R4,[R1, #+0] \ 000000E0 3B0054E3 CMP R4,#+59 \ 000000E4 20005413 CMPNE R4,#+32 \ 000000E8 0D005413 CMPNE R4,#+13 \ 000000EC 0A005413 CMPNE R4,#+10 \ 000000F0 00005413 CMPNE R4,#+0 \ 000000F4 0100000A BEQ ??GetPort_9 \ 000000F8 050053E3 CMP R3,#+5 \ 000000FC F0FFFF3A BCC ??GetPort_8 2084 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 2085 return atoi(numbuf); \ 00000104 0D00A0E1 MOV R0,SP \ 00000108 ........ BL atoi \ 0000010C 1680BDE8 POP {R1,R2,R4,PC} ;; return \ ??GetPort_6: \ 00000110 ........ DC32 NATICQ_PORT 2086 2087 } 2088 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2089 int GetHostsCount(const char *str) 2090 { 2091 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 2092 for(;cnt;cnt++) 2093 { 2094 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 2095 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 2096 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 2097 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 2098 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 2099 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 2100 } 2101 //--------------------------------------------------------------------------- 2102 \ In segment CODE, align 4, keep-with-next 2103 void create_connect(void) 2104 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2105 // static int host_counter = 0; 2106 char hostbuf[128], buf[128]; 2107 int hostport; 2108 int ***p_res=NULL; 2109 void do_reconnect(void); 2110 SOCK_ADDR sa; 2111 //Устанавливаем соединение 2112 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable83 ;; S_ICONS 2113 int err; 2114 unsigned int ip; 2115 GBS_DelTimer(&reconnect_tmr); 2116 if (!IsGPRSEnabled()) \ 00000008 C0829FE5 LDR R8,??create_connect_0+0x4 ;; `?` \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 884185E5 STR R4,[R5, #+392] \ 0000001C 5000A0E3 MOV R0,#+80 \ 00000020 600D80E3 ORR R0,R0,#0x1800 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 3000A0E3 MOV R0,#+48 \ 00000034 5C0D80E3 ORR R0,R0,#0x1700 \ 00000038 057080E0 ADD R7,R0,R5 \ 0000003C A70000EF SWI +167 \ 00000040 000050E3 CMP R0,#+0 \ 00000044 0400001A BNE ??create_connect_1 2117 { 2118 is_gprs_online=0; \ 00000048 A84185E5 STR R4,[R5, #+424] 2119 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C 0810A0E1 MOV R1,R8 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 2120 SMART_REDRAW(); \ 00000058 7C0000EA B ??create_connect_2 2121 return; 2122 } 2123 DNR_ID=0; 2124 *socklasterr()=0; 2125 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 \ ??create_connect_1: \ 0000005C 70929FE5 LDR R9,??create_connect_0+0x8 ;; NATICQ_HOST 2126 GetHost(host_counter, NATICQ_HOST, hostbuf); 2127 hostport = GetPort(host_counter, NATICQ_HOST); 2128 host_counter++; 2129 2130 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf 2131 strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 2132 strcpy(logmsg,buf); 2133 SMART_REDRAW(); 2134 2135 ip=str2ip(hostbuf); 2136 if (ip!=0xFFFFFFFF) \ 00000060 ........ LDR R10,??DataTable70 ;; do_reconnect \ 00000064 D04185E5 STR R4,[R5, #+464] \ 00000068 7C8100EF SWI +33148 \ 0000006C 004080E5 STR R4,[R0, #+0] \ 00000070 0900A0E1 MOV R0,R9 \ 00000074 ........ BL GetHostsCount \ 00000078 D81195E5 LDR R1,[R5, #+472] \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 010050E1 CMP R0,R1 \ 00000084 D84185B5 STRLT R4,[R5, #+472] \ 00000088 D80195E5 LDR R0,[R5, #+472] \ 0000008C 14208DE2 ADD R2,SP,#+20 \ 00000090 0910A0E1 MOV R1,R9 \ 00000094 ........ BL GetHost \ 00000098 D80195E5 LDR R0,[R5, #+472] \ 0000009C 0910A0E1 MOV R1,R9 \ 000000A0 ........ BL GetPort \ 000000A4 0090A0E1 MOV R9,R0 \ 000000A8 D80195E5 LDR R0,[R5, #+472] \ 000000AC 0930A0E1 MOV R3,R9 \ 000000B0 010080E2 ADD R0,R0,#+1 \ 000000B4 D80185E5 STR R0,[R5, #+472] \ 000000B8 14208DE2 ADD R2,SP,#+20 \ 000000BC 181088E2 ADD R1,R8,#+24 \ 000000C0 650D85E2 ADD R0,R5,#+6464 \ 000000C4 160000EF SWI +22 \ 000000C8 14108DE2 ADD R1,SP,#+20 \ 000000CC 630D85E2 ADD R0,R5,#+6336 \ 000000D0 1A0000EF SWI +26 \ 000000D4 94108DE2 ADD R1,SP,#+148 \ 000000D8 0700A0E1 MOV R0,R7 \ 000000DC 1A0000EF SWI +26 \ 000000E0 ........ BL SMART_REDRAW \ 000000E4 14008DE2 ADD R0,SP,#+20 \ 000000E8 B70100EF SWI +439 \ 000000EC 04B0E0E1 MVN R11,R4 \ 000000F0 0B0050E1 CMP R0,R11 \ 000000F4 0500000A BEQ ??create_connect_3 2137 { 2138 sa.ip=ip; \ 000000F8 08008DE5 STR R0,[SP, #+8] 2139 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 000000FC 2C1088E2 ADD R1,R8,#+44 \ 00000100 0700A0E1 MOV R0,R7 \ 00000104 1A0000EF SWI +26 2140 SMART_REDRAW(); \ 00000108 ........ BL SMART_REDRAW 2141 goto L_CONNECT; \ 0000010C 390000EA B ??create_connect_4 2142 } \ ??create_connect_3: \ 00000110 6D1F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 00000114 0700A0E1 MOV R0,R7 2143 strcat(logmsg,"\n"); \ 00000118 170000EF SWI +23 2144 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 0000011C 3C1088E2 ADD R1,R8,#+60 \ 00000120 0700A0E1 MOV R0,R7 \ 00000124 1A0000EF SWI +26 2145 SMART_REDRAW(); \ 00000128 ........ BL SMART_REDRAW 2146 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 0000012C 742F85E2 ADD R2,R5,#+464 \ 00000130 0D10A0E1 MOV R1,SP \ 00000134 14008DE2 ADD R0,SP,#+20 \ 00000138 B60100EF SWI +438 \ 0000013C 0030B0E1 MOVS R3,R0 2147 if (err) \ 00000140 1600000A BEQ ??create_connect_5 2148 { 2149 if ((err==0xC9)||(err==0xD6)) \ 00000144 C90053E3 CMP R3,#+201 \ 00000148 D6005313 CMPNE R3,#+214 \ 0000014C 0600001A BNE ??create_connect_6 2150 { 2151 if (DNR_ID) \ 00000150 D00195E5 LDR R0,[R5, #+464] \ 00000154 000050E3 CMP R0,#+0 \ 00000158 1000000A BEQ ??create_connect_5 2152 { 2153 host_counter--; \ 0000015C D80195E5 LDR R0,[R5, #+472] \ 00000160 010040E2 SUB R0,R0,#+1 \ 00000164 D80185E5 STR R0,[R5, #+472] 2154 return; //Ждем готовности DNR \ 00000168 390000EA B ??create_connect_7 2155 } 2156 } 2157 else 2158 { 2159 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 0000016C 482088E2 ADD R2,R8,#+72 \ 00000170 FF10A0E3 MOV R1,#+255 \ 00000174 0700A0E1 MOV R0,R7 \ 00000178 1B0100EF SWI +283 2160 SMART_REDRAW(); \ 0000017C ........ BL SMART_REDRAW 2161 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 00000180 ........ LDR R0,??DataTable71 ;; RECONNECT_TIME \ 00000184 0A20A0E1 MOV R2,R10 \ 00000188 000090E5 LDR R0,[R0, #+0] \ 0000018C D830A0E3 MOV R3,#+216 \ 00000190 930001E0 MUL R1,R3,R0 \ 00000194 0600A0E1 MOV R0,R6 \ 00000198 4D0000EF SWI +77 2162 return; \ 0000019C 2C0000EA B ??create_connect_7 2163 } 2164 } 2165 if (p_res) \ ??create_connect_5: \ 000001A0 00009DE5 LDR R0,[SP, #+0] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 3D00000A BEQ ??create_connect_9 2166 { 2167 if (p_res[3]) \ 000001AC 0C0090E5 LDR R0,[R0, #+12] \ 000001B0 000050E3 CMP R0,#+0 \ 000001B4 4200000A BEQ ??create_connect_10 2168 { 2169 strcpy(logmsg,buf); \ 000001B8 94108DE2 ADD R1,SP,#+148 \ 000001BC 0700A0E1 MOV R0,R7 \ 000001C0 1A0000EF SWI +26 2170 strcat(logmsg,"\n"); \ 000001C4 401F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 000001C8 0700A0E1 MOV R0,R7 \ 000001CC 170000EF SWI +23 2171 strcpy(logmsg,LG_GRDNROK); \ 000001D0 581088E2 ADD R1,R8,#+88 \ 000001D4 0700A0E1 MOV R0,R7 \ 000001D8 1A0000EF SWI +26 2172 SMART_REDRAW(); \ 000001DC ........ BL SMART_REDRAW 2173 DNR_TRIES=0; \ 000001E0 D44185E5 STR R4,[R5, #+468] 2174 sa.ip=p_res[3][0][0]; \ 000001E4 00109DE5 LDR R1,[SP, #+0] \ 000001E8 0C1091E5 LDR R1,[R1, #+12] \ 000001EC 001091E5 LDR R1,[R1, #+0] \ 000001F0 001091E5 LDR R1,[R1, #+0] \ 000001F4 08108DE5 STR R1,[SP, #+8] 2175 L_CONNECT: 2176 sock=socket(1,1,0); \ ??create_connect_4: \ 000001F8 0020A0E3 MOV R2,#+0 \ 000001FC 0110A0E3 MOV R1,#+1 \ 00000200 0100A0E1 MOV R0,R1 \ 00000204 730100EF SWI +371 \ 00000208 8C0185E5 STR R0,[R5, #+396] 2177 if (sock!=-1) \ 0000020C 0B0050E1 CMP R0,R11 \ 00000210 1A00000A BEQ ??create_connect_11 2178 { 2179 sa.family=1; \ 00000214 0170A0E3 MOV R7,#+1 \ 00000218 B470CDE1 STRH R7,[SP, #+4] 2180 sa.port=htons(hostport); \ 0000021C 0908A0E1 MOV R0,R9, LSL #+16 \ 00000220 2008A0E1 MOV R0,R0, LSR #+16 \ 00000224 7A0100EF SWI +378 \ 00000228 B600CDE1 STRH R0,[SP, #+6] 2181 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 2182 if (connect(sock,&sa,sizeof(sa))!=-1) \ 0000022C 8C0195E5 LDR R0,[R5, #+396] \ 00000230 1020A0E3 MOV R2,#+16 \ 00000234 04108DE2 ADD R1,SP,#+4 \ 00000238 740100EF SWI +372 \ 0000023C 0B0050E1 CMP R0,R11 \ 00000240 0500000A BEQ ??create_connect_12 2183 { 2184 connect_state=1; \ 00000244 887185E5 STR R7,[R5, #+392] 2185 TOTALRECEIVED=0; \ 00000248 904185E5 STR R4,[R5, #+400] 2186 TOTALSENDED=0; \ 0000024C 944185E5 STR R4,[R5, #+404] 2187 SMART_REDRAW(); \ ??create_connect_2: \ 00000250 ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000254 45DF8DE2 ADD SP,SP,#+276 \ 00000258 F08FBDE8 POP {R4-R11,PC} 2188 } 2189 else 2190 { 2191 closesocket(sock); \ ??create_connect_12: \ 0000025C 8C0195E5 LDR R0,[R5, #+396] \ 00000260 760100EF SWI +374 2192 sock=-1; \ 00000264 8CB185E5 STR R11,[R5, #+396] 2193 LockSched(); \ 00000268 460100EF SWI +326 2194 ShowMSG(1,(int)LG_MSGCANTCONN); \ 0000026C 701088E2 ADD R1,R8,#+112 \ 00000270 0100A0E3 MOV R0,#+1 \ 00000274 480100EF SWI +328 2195 UnlockSched(); \ 00000278 470100EF SWI +327 2196 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 0000027C BFFFFFEA B ??create_connect_8 2197 2198 } 2199 } 2200 else 2201 { 2202 LockSched(); \ ??create_connect_11: \ 00000280 460100EF SWI +326 2203 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 00000284 8C1088E2 ADD R1,R8,#+140 \ 00000288 0100A0E3 MOV R0,#+1 \ 0000028C 480100EF SWI +328 2204 UnlockSched(); \ 00000290 470100EF SWI +327 2205 //Не осилили создания сокета, закрываем GPRS-сессию 2206 GPRS_OnOff(0,1); \ 00000294 0110A0E3 MOV R1,#+1 \ 00000298 0000A0E3 MOV R0,#+0 \ 0000029C 8E0100EF SWI +398 \ 000002A0 EBFFFFEA B ??create_connect_7 2207 } 2208 } 2209 } 2210 else 2211 { 2212 DNR_TRIES--; \ ??create_connect_9: \ 000002A4 D40195E5 LDR R0,[R5, #+468] \ 000002A8 010040E2 SUB R0,R0,#+1 \ 000002AC D40185E5 STR R0,[R5, #+468] 2213 LockSched(); \ 000002B0 460100EF SWI +326 2214 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002B4 B81088E2 ADD R1,R8,#+184 \ 000002B8 0100A0E3 MOV R0,#+1 \ 000002BC 480100EF SWI +328 2215 UnlockSched(); \ 000002C0 470100EF SWI +327 \ ??create_connect_10: \ 000002C4 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002C8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 000002CC 0A000000 DC8 "\n",+0,+0 \ 000002D0 ........ DC32 `?` \ 000002D4 ........ DC32 NATICQ_HOST 2216 } 2217 } 2218 2219 #ifdef SEND_TIMER 2220 GBSTMR send_tmr; 2221 #endif 2222 \ In segment CODE, align 4, keep-with-next 2223 void ClearSendQ(void) 2224 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 2225 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable83 ;; S_ICONS \ 00000008 A40194E5 LDR R0,[R4, #+420] \ 0000000C 150000EF SWI +21 2226 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 A40184E5 STR R0,[R4, #+420] 2227 sendq_l=NULL; \ 00000018 A00184E5 STR R0,[R4, #+416] 2228 #ifdef SEND_TIMER 2229 GBS_DelTimer(&send_tmr); 2230 #endif 2231 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 2232 \ In segment CODE, align 4, keep-with-next 2233 void end_socket(void) 2234 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 2235 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable83 ;; S_ICONS \ 00000008 8C0194E5 LDR R0,[R4, #+396] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 2236 { 2237 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 2238 closesocket(sock); \ 0000001C 8C0194E5 LDR R0,[R4, #+396] \ 00000020 760100EF SWI +374 2239 } 2240 #ifdef SEND_TIMER 2241 GBS_DelTimer(&send_tmr); 2242 #endif 2243 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 2244 2245 #ifdef SEND_TIMER 2246 static void resend(void) 2247 { 2248 void SendAnswer(int dummy, TPKT *p); 2249 SUBPROC((void*)SendAnswer,0,0); 2250 } 2251 #endif 2252 \ In segment CODE, align 4, keep-with-next 2253 void SendAnswer(int dummy, TPKT *p) 2254 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2255 int i; 2256 int j; 2257 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable83 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 880194E5 LDR R0,[R4, #+392] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 2258 { 2259 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 2260 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 2261 } 2262 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 2263 { 2264 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 2265 TOTALSENDED+=j; \ 00000034 940194E5 LDR R0,[R4, #+404] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 940184E5 STR R0,[R4, #+404] 2266 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 9C0194E5 LDR R0,[R4, #+412] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 9C0184E5 STR R0,[R4, #+412] 2267 //Проверяем, не надо ли добавить в очередь 2268 if (sendq_p) \ 0000004C A40194E5 LDR R0,[R4, #+420] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 2269 { 2270 //Есть очередь, добавляем в нее 2271 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 A01194E5 LDR R1,[R4, #+416] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 A40184E5 STR R0,[R4, #+420] 2272 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 A00194E5 LDR R0,[R4, #+416] \ 0000006C A43194E5 LDR R3,[R4, #+420] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 2273 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 2274 sendq_l+=j; \ 00000088 A00194E5 LDR R0,[R4, #+416] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 A00184E5 STR R0,[R4, #+416] 2275 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 2276 } 2277 sendq_p=p; \ ??SendAnswer_2: \ 00000098 A46184E5 STR R6,[R4, #+420] 2278 sendq_l=j; \ 0000009C A05184E5 STR R5,[R4, #+416] \ 000000A0 080000EA B ??SendAnswer_1 2279 } 2280 //Отправляем уже существующее в очереди 2281 while((i=sendq_l)!=0) 2282 { 2283 if (i>0x400) i=0x400; 2284 j=send(sock,(void *)sendq_p,i,0); 2285 snprintf(logmsg,255,"send res %d",j); 2286 SMART_REDRAW(); 2287 if (j<0) 2288 { 2289 j=*socklasterr(); 2290 if ((j==0xC9)||(j==0xD6)) 2291 { 2292 //Передали что хотели 2293 strcpy(logmsg,"Send delayed..."); 2294 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 2295 } 2296 else 2297 { 2298 //Ошибка 2299 LockSched(); 2300 ShowMSG(1,(int)"Send error!"); 2301 UnlockSched(); 2302 end_socket(); 2303 return; 2304 } 2305 } 2306 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 A00194E5 LDR R0,[R4, #+416] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC A02184E5 STR R2,[R4, #+416] \ 000000B0 A40194E5 LDR R0,[R4, #+420] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 2307 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 8C0194E5 LDR R0,[R4, #+396] \ 000000F0 407EA0A3 MOVGE R7,#+1024 \ 000000F4 0030A0E3 MOV R3,#+0 \ 000000F8 0720A0E1 MOV R2,R7 \ 000000FC 790100EF SWI +377 \ 00000100 0050A0E1 MOV R5,R0 \ 00000104 3000A0E3 MOV R0,#+48 \ 00000108 5C0D80E3 ORR R0,R0,#0x1700 \ 0000010C 048080E0 ADD R8,R0,R4 \ 00000110 0530A0E1 MOV R3,R5 \ 00000114 0920A0E1 MOV R2,R9 \ 00000118 FF10A0E3 MOV R1,#+255 \ 0000011C 0800A0E1 MOV R0,R8 \ 00000120 1B0100EF SWI +283 \ 00000124 ........ BL SMART_REDRAW \ 00000128 000055E3 CMP R5,#+0 \ 0000012C DCFFFF5A BPL ??SendAnswer_3 \ 00000130 7C8100EF SWI +33148 \ 00000134 005090E5 LDR R5,[R0, #+0] \ 00000138 C90055E3 CMP R5,#+201 \ 0000013C D6005513 CMPNE R5,#+214 \ 00000140 0300001A BNE ??SendAnswer_6 \ 00000144 0C1089E2 ADD R1,R9,#+12 \ 00000148 0800A0E1 MOV R0,R8 \ 0000014C 1A0000EF SWI +26 \ 00000150 F083BDE8 POP {R4-R9,PC} \ ??SendAnswer_6: \ 00000154 460100EF SWI +326 \ 00000158 1C1089E2 ADD R1,R9,#+28 \ 0000015C 0100A0E3 MOV R0,#+1 \ 00000160 480100EF SWI +328 \ 00000164 470100EF SWI +327 \ 00000168 ........ BL end_socket \ 0000016C F083BDE8 POP {R4-R9,PC} 2316 } 2317 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 2318 sendq_p=NULL; \ 00000178 A46184E5 STR R6,[R4, #+420] 2319 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 2320 2321 extern const char pingsnd[64]; 2322 \ In segment CODE, align 4, keep-with-next 2323 void send_login(int dummy, TPKT *p) 2324 { 2325 connect_state=2; 2326 char rev[16]; 2327 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 2328 //А Вова будет банить на форуме! 2329 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,??DataTable83 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 880186E5 STR R0,[R6, #+392] \ 00000020 0A30A0E3 MOV R3,#+10 \ 00000024 803E83E3 ORR R3,R3,#0x800 \ 00000028 0910A0E3 MOV R1,#+9 \ 0000002C 0D00A0E1 MOV R0,SP \ 00000030 1B0100EF SWI +283 2330 2331 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 2332 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable77 ;; UIN 2333 p2->pkt.type=T_SETCLIENT_ID; 2334 p2->pkt.data_len=8; 2335 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 2336 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 2337 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 2338 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 840186E5 STR R0,[R6, #+388] 2339 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 2340 \ In segment CODE, align 4, keep-with-next 2341 void do_ping(void) 2342 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 2343 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 2344 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable77 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 2345 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 2346 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2347 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2348 } 2349 \ In segment CODE, align 4, keep-with-next 2350 void SendMSGACK(int i) 2351 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2352 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2353 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 2354 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2355 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2356 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2357 } 2358 \ In segment CODE, align 4, keep-with-next 2359 void RequestXText(unsigned int uin) 2360 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2361 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2362 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 2363 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2364 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2365 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable78 ;; SendAnswer \ 0000002C 710100EF SWI +369 2366 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 2367 2368 extern int main2_count; 2369 extern const unsigned int ping_time_config; 2370 int ping_time; 2371 //#ifdef EVILFOX 2372 //#else 2373 extern const char ignor_list[256]; 2374 //#endif 2375 char I_UIN[9]; 2376 \ In segment CODE, align 4, keep-with-next 2377 void get_answer(void) 2378 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2379 void *p; 2380 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable83 ;; S_ICONS \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 2381 int j; 2382 int n; 2383 char rb[1024]; 2384 char *rp=rb; 2385 if (connect_state<2) return; \ 00000010 880195E5 LDR R0,[R5, #+392] \ 00000014 848195E5 LDR R8,[R5, #+388] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 490100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 4701000A BEQ ??get_answer_1 2386 if (i==EOP) return; 2387 j=recv(sock,rb,sizeof(rb),0); \ 00000030 8C0195E5 LDR R0,[R5, #+396] \ 00000034 0030A0E3 MOV R3,#+0 \ 00000038 402EA0E3 MOV R2,#+1024 \ 0000003C 780100EF SWI +376 \ 00000040 0060A0E1 MOV R6,R0 \ 00000044 0990A0E3 MOV R9,#+9 \ 00000048 429C89E3 ORR R9,R9,#0x4200 \ 0000004C 0E0000EA B ??get_answer_2 2388 while(j>0) 2389 { 2390 if (i<0) 2391 { 2392 //Принимаем заголовок 2393 n=-i; //Требуемое количество байт 2394 if (j=0) 2401 { 2402 //Принимаем тельце ;) 2403 n=RXbuf.pkt.data_len; //Всего в тельце 2404 if (n>16383) 2405 { 2406 //Слишком много 2407 strcpy(logmsg,LG_GRBADPACKET); 2408 end_socket(); 2409 RXstate=EOP; 2410 return; 2411 } 2412 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2413 if (n>0) 2414 { 2415 if (jhour*3600+pt->min*60+pt->sec; 2558 s1-=s2; 2559 if (s1<0) s1+=86400; 2560 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 2561 sprintf(PINGO, "Ping: %dsec",s1); 2562 LockSched(); 2563 if(janis==1) 2564 { 2565 ShowMSG(1,(int)logmsg); 2566 Play(pingsnd); 2567 janis=0; 2568 } 2569 else 2570 { 2571 if(ping_time==0) 2572 { 2573 ping_time=ping_time_config; 2574 Play(pingsnd); 2575 } 2576 else 2577 ping_time--; 2578 } 2579 UnlockSched(); 2580 } 2581 break; 2582 case T_LASTPRIVACY: 2583 n=i+sizeof(PKT); \ ??get_answer_3: \ 00000050 0040A0E1 MOV R4,R0 2584 p=malloc(n); \ ??get_answer_4: \ 00000054 140000EF SWI +20 \ 00000058 00B0A0E1 MOV R11,R0 2585 memcpy(p,&RXbuf,n); \ 0000005C 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 00000060 0710A0E1 MOV R1,R7 \ 00000064 1E0100EF SWI +286 2586 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000068 8C0195E5 LDR R0,[R5, #+396] \ 0000006C 0B30A0E1 MOV R3,R11 \ 00000070 01002DE9 PUSH {R0} \ 00000074 0020A0E3 MOV R2,#+0 \ 00000078 0810A0E1 MOV R1,R8 \ 0000007C 0900A0E1 MOV R0,R9 \ 00000080 000100EF SWI +256 \ ??get_answer_6: \ 00000084 04D08DE2 ADD SP,SP,#+4 ;; stack cleaning 2587 break; 2588 } 2589 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000088 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 0000008C 010056E3 CMP R6,#+1 \ 00000090 2D0100BA BLT ??get_answer_8 \ 00000094 C4749FE5 LDR R7,??get_answer_9+0x4 ;; RXbuf \ 00000098 000058E3 CMP R8,#+0 \ 0000009C 0C00005A BPL ??get_answer_10 \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 004068E2 RSB R4,R8,#+0 \ 000000A8 040056E1 CMP R6,R4 \ 000000AC 0640A0B1 MOVLT R4,R6 \ 000000B0 0420A0E1 MOV R2,R4 \ 000000B4 070088E0 ADD R0,R8,R7 \ 000000B8 080080E2 ADD R0,R0,#+8 \ 000000BC 1E0100EF SWI +286 \ 000000C0 00109DE5 LDR R1,[SP, #+0] \ 000000C4 088084E0 ADD R8,R4,R8 \ 000000C8 046046E0 SUB R6,R6,R4 \ 000000CC 011084E0 ADD R1,R4,R1 \ 000000D0 00108DE5 STR R1,[SP, #+0] \ ??get_answer_10: \ 000000D4 000058E3 CMP R8,#+0 \ 000000D8 EBFFFF4A BMI ??get_answer_2 \ 000000DC B640D7E1 LDRH R4,[R7, #+6] \ 000000E0 3000A0E3 MOV R0,#+48 \ 000000E4 5C0D80E3 ORR R0,R0,#0x1700 \ 000000E8 05A080E0 ADD R10,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 68149FE5 LDR R1,??get_answer_9+0x8 ;; `?text_l) \ 00000030 0060A0E3 MOV R6,#+0 \ 00000034 009041E0 SUB R9,R1,R0 \ 00000038 0800A0E1 MOV R0,R8 \ 0000003C 1B0000EF SWI +27 \ 00000040 000059E1 CMP R9,R0 \ 00000044 0800003A BCC ??AddToMain_1 2636 { 2637 /* 2638 char *du=malloc(text_l); 2639 strncpy(du,si,text_l); 2640 sprintf(de,"%s%s",du,"..."); 2641 mfree(du); 2642 } 2643 */ 2644 while(text_l!=0) 2645 { 2646 de[iz]=si[iz]; 2647 iz++; 2648 text_l--; 2649 } 2650 if(use_cutter) 2651 { 2652 de[iz]='.'; 2653 iz++; 2654 de[iz]='.'; 2655 iz++; 2656 de[iz]='.'; 2657 iz++; 2658 } 2659 de[iz]='\0'; 2660 } 2661 else 2662 strcpy(de, si); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 2663 iz=0; \ ??AddToMain_2: \ 00000054 0070A0E3 MOV R7,#+0 \ 00000058 1A0000EA B ??AddToMain_3 \ ??AddToMain_4: \ 0000005C 0810D7E7 LDRB R1,[R7, +R8] \ 00000060 019049E2 SUB R9,R9,#+1 \ 00000064 0510C7E7 STRB R1,[R7, +R5] \ 00000068 0070A0E1 MOV R7,R0 \ ??AddToMain_1: \ 0000006C 010087E2 ADD R0,R7,#+1 \ 00000070 000059E3 CMP R9,#+0 \ 00000074 F8FFFF1A BNE ??AddToMain_4 \ 00000078 B4119FE5 LDR R1,??AddToMain_0+0x4 ;; use_cutter \ 0000007C 001091E5 LDR R1,[R1, #+0] \ 00000080 000051E3 CMP R1,#+0 \ 00000084 0500000A BEQ ??AddToMain_5 \ 00000088 2E10A0E3 MOV R1,#+46 \ 0000008C 0510C7E7 STRB R1,[R7, +R5] \ 00000090 0510C0E7 STRB R1,[R0, +R5] \ 00000094 010080E2 ADD R0,R0,#+1 \ 00000098 0510C0E7 STRB R1,[R0, +R5] \ 0000009C 017080E2 ADD R7,R0,#+1 \ ??AddToMain_5: \ 000000A0 0560C7E7 STRB R6,[R7, +R5] \ 000000A4 EAFFFFEA B ??AddToMain_2 2664 while(strlen(de)!=iz) 2665 { 2666 // if(d[i]==0x2A) d[i]=0x20; 2667 // if(d[i]==0x27) d[i]=0x20; 2668 // if(d[i]==0x22) d[i]=0x20; 2669 // if(d[i]==0x26) d[i]=0x20; 2670 // if(d[i]==0x3D) d[i]=0x20; 2671 // if(d[i]==0x3C) d[i]=0x20; 2672 // if(d[i]==0x3E) d[i]=0x20; 2673 // if(d[i]==0x7B) d[i]=0x20; 2674 // if(d[i]==0x7D) d[i]=0x20; 2675 // if(d[i]==0x5B) d[i]=0x20; 2676 // if(d[i]==0x5D) d[i]=0x20; 2677 // if(d[i]==0x23) d[i]=0x20; 2678 // if(d[i]==0x2F) d[i]=0x20; 2679 // if(d[i]==0x5C) d[i]=0x20; 2680 // if(d[i]==0x7E) d[i]=0x20; 2681 // if(d[i]==0x5E) d[i]=0x20; 2682 // if(d[i]==0xAC) d[i]=0x20; 2683 // if(d[i]==0xA3) d[i]=0x20; 2684 // if(d[i]==0x24) d[i]=0x20; 2685 // if(d[i]==0xA5) d[i]=0x20; 2686 if(de[iz]==0x0D) de[iz]=0x20; \ ??AddToMain_6: \ 000000A8 0510D7E7 LDRB R1,[R7, +R5] \ 000000AC 2000A0E3 MOV R0,#+32 \ 000000B0 0D0051E3 CMP R1,#+13 \ 000000B4 0500C707 STRBEQ R0,[R7, +R5] 2687 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 2688 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 2689 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 2690 de[iz]='\0'; 2691 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable82 ;; main_count \ 000000DC 0560C7E7 STRB R6,[R7, +R5] \ 000000E0 ........ LDR R6,??DataTable83 ;; S_ICONS \ 000000E4 4C719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E8 CC10A0E3 MOV R1,#+204 \ 000000EC 641D81E3 ORR R1,R1,#0x1900 \ 000000F0 061081E0 ADD R1,R1,R6 \ 000000F4 04108DE5 STR R1,[SP, #+4] \ 000000F8 000098E5 LDR R0,[R8, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0400001A BNE ??AddToMain_7 \ 00000104 04009DE5 LDR R0,[SP, #+4] \ 00000108 0530A0E1 MOV R3,R5 \ 0000010C 0420A0E1 MOV R2,R4 \ 00000110 0710A0E1 MOV R1,R7 \ 00000114 160000EF SWI +22 2692 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000118 FC10A0E3 MOV R1,#+252 \ 0000011C 641D81E3 ORR R1,R1,#0x1900 \ 00000120 061081E0 ADD R1,R1,R6 \ 00000124 00108DE5 STR R1,[SP, #+0] \ 00000128 000098E5 LDR R0,[R8, #+0] \ 0000012C 010050E3 CMP R0,#+1 \ 00000130 0400001A BNE ??AddToMain_8 \ 00000134 00009DE5 LDR R0,[SP, #+0] \ 00000138 0530A0E1 MOV R3,R5 \ 0000013C 0420A0E1 MOV R2,R4 \ 00000140 0710A0E1 MOV R1,R7 \ 00000144 160000EF SWI +22 2693 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000148 2C00A0E3 MOV R0,#+44 \ 0000014C 680D80E3 ORR R0,R0,#0x1A00 \ 00000150 069080E0 ADD R9,R0,R6 \ 00000154 000098E5 LDR R0,[R8, #+0] \ 00000158 020050E3 CMP R0,#+2 \ 0000015C 0400001A BNE ??AddToMain_9 \ 00000160 0530A0E1 MOV R3,R5 \ 00000164 0420A0E1 MOV R2,R4 \ 00000168 0710A0E1 MOV R1,R7 \ 0000016C 0900A0E1 MOV R0,R9 \ 00000170 160000EF SWI +22 2694 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 00000174 5C00A0E3 MOV R0,#+92 \ 00000178 680D80E3 ORR R0,R0,#0x1A00 \ 0000017C 06A080E0 ADD R10,R0,R6 \ 00000180 000098E5 LDR R0,[R8, #+0] \ 00000184 030050E3 CMP R0,#+3 \ 00000188 0400001A BNE ??AddToMain_10 \ 0000018C 0530A0E1 MOV R3,R5 \ 00000190 0420A0E1 MOV R2,R4 \ 00000194 0710A0E1 MOV R1,R7 \ 00000198 0A00A0E1 MOV R0,R10 \ 0000019C 160000EF SWI +22 2695 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 000001A0 8C00A0E3 MOV R0,#+140 \ 000001A4 680D80E3 ORR R0,R0,#0x1A00 \ 000001A8 06B080E0 ADD R11,R0,R6 \ 000001AC 000098E5 LDR R0,[R8, #+0] \ 000001B0 040050E3 CMP R0,#+4 \ 000001B4 0400001A BNE ??AddToMain_11 \ 000001B8 0530A0E1 MOV R3,R5 \ 000001BC 0420A0E1 MOV R2,R4 \ 000001C0 0710A0E1 MOV R1,R7 \ 000001C4 0B00A0E1 MOV R0,R11 \ 000001C8 160000EF SWI +22 2696 if(main_count>4) \ ??AddToMain_11: \ 000001CC 000098E5 LDR R0,[R8, #+0] \ 000001D0 050050E3 CMP R0,#+5 \ 000001D4 100000BA BLT ??AddToMain_12 2697 { 2698 strcpy(a_txt, s_txt); \ 000001D8 00109DE5 LDR R1,[SP, #+0] \ 000001DC 04009DE5 LDR R0,[SP, #+4] \ 000001E0 1A0000EF SWI +26 2699 strcpy(s_txt, d_txt); \ 000001E4 00009DE5 LDR R0,[SP, #+0] \ 000001E8 0910A0E1 MOV R1,R9 \ 000001EC 1A0000EF SWI +26 2700 strcpy(d_txt, f_txt); \ 000001F0 0A10A0E1 MOV R1,R10 \ 000001F4 0900A0E1 MOV R0,R9 \ 000001F8 1A0000EF SWI +26 2701 strcpy(f_txt, g_txt); \ 000001FC 0B10A0E1 MOV R1,R11 \ 00000200 0A00A0E1 MOV R0,R10 \ 00000204 1A0000EF SWI +26 2702 sprintf(g_txt, "%s: %s", nameu,de); \ 00000208 0530A0E1 MOV R3,R5 \ 0000020C 0420A0E1 MOV R2,R4 \ 00000210 0710A0E1 MOV R1,R7 \ 00000214 0B00A0E1 MOV R0,R11 \ 00000218 160000EF SWI +22 2703 } 2704 mfree(de); \ ??AddToMain_12: \ 0000021C 0500A0E1 MOV R0,R5 \ 00000220 150000EF SWI +21 2705 main_d=1; \ 00000224 0100A0E3 MOV R0,#+1 \ 00000228 E00086E5 STR R0,[R6, #+224] 2706 } \ 0000022C F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000230 ........ DC32 main_lenght \ 00000234 ........ DC32 use_cutter \ 00000238 ........ DC32 `?` 2707 2708 //======================add to main info================ 2709 2710 int NEW_MSG; 2711 //int LOG_TIME_CONN=0;//not log online/offline time 2712 \ In segment CODE, align 4, keep-with-next 2713 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 2714 { \ AddStringToLog: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 90D04DE2 SUB SP,SP,#+144 \ 00000008 B0709DE5 LDR R7,[SP, #+176] \ 0000000C B4909DE5 LDR R9,[SP, #+180] \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0280A0E1 MOV R8,R2 \ 0000001C 0360A0E1 MOV R6,R3 2715 char hs[128], *lastX; 2716 TTime tt; 2717 TDate d; 2718 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 2719 int i; 2720 2721 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 2722 if ( code==3 && NOT_LOG_SAME_XTXT ) \ 0000002C 030055E3 CMP R5,#+3 \ 00000030 1600001A BNE ??AddStringToLog_0 \ 00000034 04029FE5 LDR R0,??AddStringToLog_1 ;; NOT_LOG_SAME_XTXT \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 1200000A BEQ ??AddStringToLog_0 2723 { 2724 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<` \ 00000094 0600A0E1 MOV R0,R6 \ 00000098 01002DE9 PUSH {R0} \ 0000009C 1000DDE5 LDRB R0,[SP, #+16] \ 000000A0 0A20A0E1 MOV R2,R10 \ 000000A4 7F10A0E3 MOV R1,#+127 \ 000000A8 01002DE9 PUSH {R0} \ 000000AC 1500DDE5 LDRB R0,[SP, #+21] \ 000000B0 01002DE9 PUSH {R0} \ 000000B4 0D00DDE5 LDRB R0,[SP, #+13] \ 000000B8 01002DE9 PUSH {R0} \ 000000BC 1030DDE5 LDRB R3,[SP, #+16] \ 000000C0 20008DE2 ADD R0,SP,#+32 \ 000000C4 1B0100EF SWI +283 2731 if(code != 3 || ((LOG_XTXT) && (flag)))//Нужно сохранять иксстатус \ 000000C8 030055E3 CMP R5,#+3 \ 000000CC 10D08DE2 ADD SP,SP,#+16 \ 000000D0 0400001A BNE ??AddStringToLog_4 \ 000000D4 6C019FE5 LDR R0,??AddStringToLog_1+0x8 ;; LOG_XTXT \ 000000D8 000090E5 LDR R0,[R0, #+0] \ 000000DC 000050E3 CMP R0,#+0 \ 000000E0 00005913 CMPNE R9,#+0 \ 000000E4 0400000A BEQ ??AddStringToLog_5 2732 Add2History(t, hs, s, code); \ ??AddStringToLog_4: \ 000000E8 0530A0E1 MOV R3,R5 \ 000000EC 0820A0E1 MOV R2,R8 \ 000000F0 10108DE2 ADD R1,SP,#+16 \ 000000F4 0400A0E1 MOV R0,R4 \ 000000F8 ........ _BLF Add2History,??Add2History??rA 2733 2734 // ShowMSG(1,(int)t); 2735 // ShowMSG(1,(int)s); // Запись хистори 2736 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000FC 0800A0E1 MOV R0,R8 \ 00000100 ........ BL NewLOGQ \ 00000104 0080A0E1 MOV R8,R0 2737 snprintf(p->hdr,79,"%02d:%02d %02d-%02d %s:",tt.hour,tt.min,d.day,d.month,name); \ 00000108 40002DE9 PUSH {R6} \ 0000010C 1000DDE5 LDRB R0,[SP, #+16] \ 00000110 1C208AE2 ADD R2,R10,#+28 \ 00000114 4F10A0E3 MOV R1,#+79 \ 00000118 01002DE9 PUSH {R0} \ 0000011C 1500DDE5 LDRB R0,[SP, #+21] \ 00000120 01002DE9 PUSH {R0} \ 00000124 0D00DDE5 LDRB R0,[SP, #+13] \ 00000128 01002DE9 PUSH {R0} \ 0000012C 1030DDE5 LDRB R3,[SP, #+16] \ 00000130 100088E2 ADD R0,R8,#+16 \ 00000134 1B0100EF SWI +283 2738 p->type=code; \ 00000138 0C5088E5 STR R5,[R8, #+12] 2739 p->ID=IDforACK; //0-32767 \ 0000013C 087088E5 STR R7,[R8, #+8] 2740 i=AddLOGQ(&t->log,p); \ 00000140 0810A0E1 MOV R1,R8 \ 00000144 740084E2 ADD R0,R4,#+116 \ 00000148 ........ BL AddLOGQ \ 0000014C 0060A0E1 MOV R6,R0 \ 00000150 150056E3 CMP R6,#+21 \ 00000154 10D08DE2 ADD SP,SP,#+16 \ 00000158 090000BA BLT ??AddStringToLog_6 2741 while(i>MAXLOGMSG) 2742 { 2743 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 0000015C 7C0094E5 LDR R0,[R4, #+124] \ 00000160 741094E5 LDR R1,[R4, #+116] 2744 RemoveLOGQ(&t->log,t->log); 2745 i--; \ 00000164 016046E2 SUB R6,R6,#+1 \ 00000168 000051E1 CMP R1,R0 \ 0000016C 00009005 LDREQ R0,[R0, #+0] \ 00000170 7C008405 STREQ R0,[R4, #+124] \ 00000174 740084E2 ADD R0,R4,#+116 \ 00000178 ........ BL RemoveLOGQ 2746 } \ 0000017C 150056E3 CMP R6,#+21 \ 00000180 F5FFFFAA BGE ??AddStringToLog_7 2747 t->msg_count=i; \ ??AddStringToLog_6: \ 00000184 846084E5 STR R6,[R4, #+132] 2748 if (!t->last_log) t->last_log=p; \ 00000188 7C0094E5 LDR R0,[R4, #+124] 2749 if (code==3) \ 0000018C ........ LDR R6,??DataTable117 ;; S_ICONS \ 00000190 000050E3 CMP R0,#+0 \ 00000194 7C808405 STREQ R8,[R4, #+124] \ 00000198 030055E3 CMP R5,#+3 \ 0000019C 0D00001A BNE ??AddStringToLog_8 2750 { 2751 if (edchat_id) \ 000001A0 BC0196E5 LDR R0,[R6, #+444] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 2000000A BEQ ??AddStringToLog_9 2752 { 2753 void *data=FindGUIbyId(edchat_id,NULL); \ 000001AC BC0196E5 LDR R0,[R6, #+444] \ 000001B0 0010A0E3 MOV R1,#+0 \ 000001B4 090200EF SWI +521 2754 if (data) \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 1B00000A BEQ ??AddStringToLog_9 2755 { 2756 EDCHAT_STRUCT *ed_struct; 2757 ed_struct=EDIT_GetUserPointer(data); \ 000001C0 DF0100EF SWI +479 2758 if (ed_struct) \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 1800000A BEQ ??AddStringToLog_9 2759 { 2760 if (ed_struct->ed_contact==t) \ 000001CC 000090E5 LDR R0,[R0, #+0] \ 000001D0 040050E1 CMP R0,R4 \ 000001D4 1500001A BNE ??AddStringToLog_9 2761 { 2762 goto L_INC; 2763 } 2764 } 2765 } 2766 } 2767 goto L_NOINC; 2768 } 2769 L_INC: 2770 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001D8 640094E5 LDR R0,[R4, #+100] \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 AC019605 LDREQ R0,[R6, #+428] \ 000001E4 01008002 ADDEQ R0,R0,#+1 \ 000001E8 AC018605 STREQ R0,[R6, #+428] 2771 if(NEW_MSG==1) \ 000001EC E00196E5 LDR R0,[R6, #+480] \ 000001F0 010050E3 CMP R0,#+1 \ 000001F4 0700001A BNE ??AddStringToLog_10 2772 { 2773 t->unread_msg++; \ 000001F8 680094E5 LDR R0,[R4, #+104] \ 000001FC 010080E2 ADD R0,R0,#+1 \ 00000200 680084E5 STR R0,[R4, #+104] 2774 total_unread2++; \ 00000204 100196E5 LDR R0,[R6, #+272] \ 00000208 010080E2 ADD R0,R0,#+1 \ 0000020C 100186E5 STR R0,[R6, #+272] 2775 NEW_MSG=0; \ 00000210 0000A0E3 MOV R0,#+0 \ 00000214 E00186E5 STR R0,[R6, #+480] 2776 } 2777 t->isunread=1; \ ??AddStringToLog_10: \ 00000218 0100A0E3 MOV R0,#+1 \ 0000021C 640084E5 STR R0,[R4, #+100] 2778 if(saver_on) reftes(); \ 00000220 F40096E5 LDR R0,[R6, #+244] \ 00000224 000050E3 CMP R0,#+0 \ 00000228 0000000A BEQ ??AddStringToLog_9 \ 0000022C ........ _BLF reftes,??reftes??rA 2779 L_NOINC: 2780 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000230 0400A0E1 MOV R0,R4 \ 00000234 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2781 } \ ??AddStringToLog_3: \ 00000238 90D08DE2 ADD SP,SP,#+144 ;; stack cleaning \ 0000023C F087BDE8 POP {R4-R10,PC} ;; return \ ??AddStringToLog_1: \ 00000240 ........ DC32 NOT_LOG_SAME_XTXT \ 00000244 ........ DC32 `?` \ 00000248 ........ DC32 LOG_XTXT 2782 2783 void ParseAnswer(WSHDR *ws, const char *s); 2784 2785 int time_to_stop_t9; 2786 \ In segment CODE, align 4, keep-with-next 2787 void ParseXStatusText(WSHDR *ws, const char *s, int color) 2788 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 2789 int c; 2790 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 2791 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 2792 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} 2793 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 2794 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 2795 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 2796 while((c=*s++)) 2797 { 2798 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 2799 { 2800 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 2801 { 2802 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 2803 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 2804 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 2805 } 2806 } 2807 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 2808 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 2809 } 2810 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 2811 void AddMsgToChat(void *data) 2812 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 40D04DE2 SUB SP,SP,#+64 2813 LOGQ *p; 2814 EDITCONTROL ec; 2815 EDITC_OPTIONS ec_options; 2816 EDCHAT_STRUCT *ed_struct; 2817 int j; 2818 int color, font, type; 2819 int zc; 2820 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C900000A BEQ ??AddMsgToChat_0 2821 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0060B0E1 MOVS R6,R0 2822 if (!ed_struct) return; \ 00000018 C600000A BEQ ??AddMsgToChat_0 2823 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000096E5 LDR R0,[R6, #+0] \ 00000020 641090E5 LDR R1,[R0, #+100] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 C200000A BEQ ??AddMsgToChat_0 2824 2825 2826 p=ed_struct->ed_contact->last_log; \ 0000002C 7C7090E5 LDR R7,[R0, #+124] 2827 if (p) \ 00000030 ........ LDR R8,??DataTable117 ;; S_ICONS \ 00000034 000057E3 CMP R7,#+0 \ 00000038 A800000A BEQ ??AddMsgToChat_1 2828 { 2829 while(p) 2830 { 2831 font = ED_H_FONT_SIZE; 2832 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C ........ LDR R2,??DataTable87 ;; ED_X_FONT_SIZE \ 00000040 ........ LDR R0,??DataTable109 ;; ED_H_FONT_SIZE \ 00000044 002092E5 LDR R2,[R2, #+0] \ 00000048 ........ LDR R1,??DataTable89 ;; 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,??DataTable90 ;; O_ED_X_FONT_SIZE \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 009091E5 LDR R9,[R1, #+0] \ 00000068 ........ LDR R1,??DataTable91 ;; O_X_COLOR \ 0000006C 005091E5 LDR R5,[R1, #+0] \ 00000070 ........ LDR R1,??DataTable106 ;; I_COLOR \ 00000074 00B091E5 LDR R11,[R1, #+0] \ 00000078 0300000A BEQ ??AddMsgToChat_3 2833 { 2834 if (zc==1) \ 0000007C 010050E3 CMP R0,#+1 \ 00000080 1E00001A BNE ??AddMsgToChat_4 2835 color=ACK_COLOR; //Зеленый \ 00000084 ........ LDR R0,??DataTable102 ;; ACK_COLOR \ 00000088 1B0000EA B ??AddMsgToChat_5 2836 else 2837 color=I_COLOR; 2838 //#endif 2839 } 2840 else 2841 { 2842 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 0000008C 080097E5 LDR R0,[R7, #+8] \ 00000090 010070E3 CMN R0,#+1 \ 00000094 1700001A BNE ??AddMsgToChat_6 2843 { 2844 type = p->type&0x0F; \ 00000098 0C0097E5 LDR R0,[R7, #+12] \ 0000009C 0F1000E2 AND R1,R0,#0xF 2845 if(p->type&0x10) \ 000000A0 100010E3 TST R0,#0x10 \ 000000A4 0B00000A BEQ ??AddMsgToChat_7 2846 { 2847 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000A8 010051E3 CMP R1,#+1 \ 000000AC ........ LDREQ R0,??DataTable104 ;; 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,??DataTable103 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000C8 00B090E5 LDR R11,[R0, #+0] \ 000000CC ........ LDR R0,??DataTable108 ;; O_ED_H_FONT_SIZE \ 000000D0 00A090E5 LDR R10,[R0, #+0] \ 000000D4 090000EA B ??AddMsgToChat_4 2848 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 2849 } 2850 else 2851 { 2852 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,??DataTable105 ;; TO_COLOR \ 000000F4 000000EA B ??AddMsgToChat_5 2853 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 2854 } 2855 } 2856 else 2857 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000F8 ........ LDR R0,??DataTable107 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000FC 00B090E5 LDR R11,[R0, #+0] 2858 } 2859 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 00000100 14008DE2 ADD R0,SP,#+20 \ 00000104 640100EF SWI +356 2860 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 2861 { 2862 ascii2ws(ews,p->hdr); \ 00000118 240198E5 LDR R0,[R8, #+292] \ 0000011C 101087E2 ADD R1,R7,#+16 \ 00000120 ........ _BLF ascii2ws,??ascii2ws??rA 2863 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000124 243198E5 LDR R3,[R8, #+292] \ 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 2864 } 2865 else 2866 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_9: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 01002DE9 PUSH {R0} \ 00000144 243198E5 LDR R3,[R8, #+292] \ 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 2867 PrepareEditCOptions(&ec_options); \ 0000015C 04008DE2 ADD R0,SP,#+4 \ 00000160 C80100EF SWI +456 2868 SetPenColorToEditCOptions(&ec_options,color); \ 00000164 0B10A0E1 MOV R1,R11 \ 00000168 04008DE2 ADD R0,SP,#+4 \ 0000016C CC0100EF SWI +460 2869 SetFontToEditCOptions(&ec_options,font); \ 00000170 0A10A0E1 MOV R1,R10 \ 00000174 04008DE2 ADD R0,SP,#+4 \ 00000178 CA0100EF SWI +458 2870 CopyOptionsToEditControl(&ec,&ec_options); \ 0000017C 04108DE2 ADD R1,SP,#+4 \ 00000180 14008DE2 ADD R0,SP,#+20 \ 00000184 CE0100EF SWI +462 2871 //AddEditControlToEditQend(eq,&ec,ma); 2872 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 2873 ed_struct->ed_answer++; \ 0000019C 080096E5 LDR R0,[R6, #+8] \ 000001A0 010080E2 ADD R0,R0,#+1 \ 000001A4 080086E5 STR R0,[R6, #+8] 2874 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 2875 { 2876 ParseAnswer(ews,p->text); \ 000001B8 240198E5 LDR R0,[R8, #+292] \ 000001BC 601087E2 ADD R1,R7,#+96 \ 000001C0 ........ BL ParseAnswer \ 000001C4 050000EA B ??AddMsgToChat_12 2877 } 2878 else 2879 { 2880 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_11: \ 000001C8 100010E3 TST R0,#0x10 \ 000001CC 240198E5 LDR R0,[R8, #+292] \ 000001D0 0520A011 MOVNE R2,R5 \ 000001D4 0420A001 MOVEQ R2,R4 \ 000001D8 601087E2 ADD R1,R7,#+96 \ 000001DC ........ BL ParseXStatusText 2881 } 2882 PrepareEditControl(&ec); \ ??AddMsgToChat_12: \ 000001E0 14008DE2 ADD R0,SP,#+20 \ 000001E4 640100EF SWI +356 2883 ConstructEditControl(&ec, 2884 ECT_NORMAL_TEXT, 2885 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 2886 ews,ews->wsbody[0]); \ 000001E8 243198E5 LDR R3,[R8, #+292] \ 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 2887 PrepareEditCOptions(&ec_options); \ 00000214 08008DE2 ADD R0,SP,#+8 \ 00000218 C80100EF SWI +456 2888 //#ifdef M75 2889 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 2890 { 2891 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable99 ;; O_ED_FONT_SIZE \ 00000238 ........ LDREQ R0,??DataTable100 ;; ED_FONT_SIZE \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 080000EA B ??AddMsgToChat_14 2892 } 2893 else 2894 { 2895 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 2896 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 2897 } 2898 //#else 2899 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 2900 //#endif 2901 CopyOptionsToEditControl(&ec,&ec_options); \ 00000270 04108DE2 ADD R1,SP,#+4 \ 00000274 14008DE2 ADD R0,SP,#+20 \ 00000278 CE0100EF SWI +462 2902 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 2903 ed_struct->ed_answer++; \ 00000290 080096E5 LDR R0,[R6, #+8] \ 00000294 010080E2 ADD R0,R0,#+1 \ 00000298 080086E5 STR R0,[R6, #+8] 2904 p=p->next; \ 0000029C 007097E5 LDR R7,[R7, #+0] 2905 } \ 000002A0 000057E3 CMP R7,#+0 \ 000002A4 64FFFF1A BNE ??AddMsgToChat_2 2906 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 000002A8 001096E5 LDR R1,[R6, #+0] \ 000002AC 841091E5 LDR R1,[R1, #+132] \ 000002B0 011081E2 ADD R1,R1,#+1 \ 000002B4 8140A0E1 LSL R4,R1,#+1 \ 000002B8 000054E1 CMP R4,R0 \ 000002BC 070000AA BGE ??AddMsgToChat_1 2907 while(jed_answer) 2908 { 2909 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_15: \ 000002C0 040096E5 LDR R0,[R6, #+4] \ 000002C4 0110A0E3 MOV R1,#+1 \ 000002C8 D10100EF SWI +465 2910 ed_struct->ed_answer--; \ 000002CC 080096E5 LDR R0,[R6, #+8] \ 000002D0 010040E2 SUB R0,R0,#+1 \ 000002D4 080086E5 STR R0,[R6, #+8] 2911 } \ 000002D8 000054E1 CMP R4,R0 \ 000002DC F7FFFFBA BLT ??AddMsgToChat_15 2912 } 2913 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002E0 000096E5 LDR R0,[R6, #+0] \ 000002E4 0040A0E3 MOV R4,#+0 \ 000002E8 7C4080E5 STR R4,[R0, #+124] 2914 if (IsGuiOnTop(edchat_id)) \ 000002EC BC0198E5 LDR R0,[R8, #+444] \ 000002F0 350100EF SWI +309 \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 0300000A BEQ ??AddMsgToChat_16 2915 { 2916 total_unread--; \ 000002FC AC0198E5 LDR R0,[R8, #+428] \ 00000300 010040E2 SUB R0,R0,#+1 \ 00000304 AC0188E5 STR R0,[R8, #+428] \ 00000308 020000EA B ??AddMsgToChat_17 2917 } 2918 else 2919 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] 2920 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_17: \ 00000318 000096E5 LDR R0,[R6, #+0] \ 0000031C 644080E5 STR R4,[R0, #+100] 2921 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 00000320 101198E5 LDR R1,[R8, #+272] \ 00000324 682090E5 LDR R2,[R0, #+104] \ 00000328 021041E0 SUB R1,R1,R2 \ 0000032C 101188E5 STR R1,[R8, #+272] 2922 ed_struct->ed_contact->unread_msg=0; \ 00000330 684080E5 STR R4,[R0, #+104] 2923 ChangeContactPos(ed_struct->ed_contact); \ 00000334 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2924 // EDIT_SetFocus(data,ed_struct->ed_answer); 2925 } \ ??AddMsgToChat_0: \ 00000338 44D08DE2 ADD SP,SP,#+68 ;; stack cleaning \ 0000033C F08FBDE8 POP {R4-R11,PC} ;; return 2926 2927 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 2928 void DrawAck(void *data) 2929 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 2930 LOGQ *p; 2931 EDITCONTROL ec; 2932 EDITC_OPTIONS ec_options; 2933 EDCHAT_STRUCT *ed_struct; 2934 int j; 2935 int color; 2936 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 2937 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 2938 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 2939 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 2940 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 2941 j=ed_struct->ed_answer; 2942 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 745091E5 LDR R5,[R1, #+116] \ 0000002C 841091E5 LDR R1,[R1, #+132] \ 00000030 000055E3 CMP R5,#+0 \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 3A00000A BEQ ??DrawAck_1 2943 while(p) 2944 { 2945 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 2946 { 2947 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 2948 { 2949 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 2950 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 2951 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 2952 { 2953 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable106 ;; I_COLOR 2954 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable102 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 2955 else 2956 color=I_COLOR; 2957 } 2958 else 2959 { 2960 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 2961 color=(p->type&0x10)?(((p->type&0x0F)==1)?O_I_COLOR:O_TO_COLOR):(((p->type&0x0F)==1)?I_COLOR:TO_COLOR); \ 00000094 0C0095E5 LDR R0,[R5, #+12] \ 00000098 100010E3 TST R0,#0x10 \ 0000009C 0F0000E2 AND R0,R0,#0xF \ 000000A0 0300000A BEQ ??DrawAck_7 \ 000000A4 010050E3 CMP R0,#+1 \ 000000A8 ........ LDRNE R0,??DataTable103 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable104 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable105 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable106 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 2962 else 2963 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable107 ;; UNACK_COLOR 2964 } 2965 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 2966 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 2967 CopyOptionsToEditControl(&ec,&ec_options); 2968 StoreEditControl(data,j,&ec); 2969 p->acked|=4; //Обработали 2970 dorefresh=1; \ ??DrawAck_5: \ 000000C8 0160A0E3 MOV R6,#+1 \ 000000CC 001090E5 LDR R1,[R0, #+0] \ 000000D0 0D00A0E1 MOV R0,SP \ 000000D4 CC0100EF SWI +460 \ 000000D8 0C0095E5 LDR R0,[R5, #+12] \ 000000DC 100010E3 TST R0,#0x10 \ 000000E0 ........ LDRNE R0,??DataTable108 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable109 ;; ED_H_FONT_SIZE \ 000000E8 001090E5 LDR R1,[R0, #+0] \ 000000EC 0D00A0E1 MOV R0,SP \ 000000F0 CA0100EF SWI +458 \ 000000F4 0D10A0E1 MOV R1,SP \ 000000F8 10008DE2 ADD R0,SP,#+16 \ 000000FC CE0100EF SWI +462 \ 00000100 10208DE2 ADD R2,SP,#+16 \ 00000104 0710A0E1 MOV R1,R7 \ 00000108 0400A0E1 MOV R0,R4 \ 0000010C 6A0100EF SWI +362 \ 00000110 040095E5 LDR R0,[R5, #+4] \ 00000114 040080E3 ORR R0,R0,#0x4 \ 00000118 040085E5 STR R0,[R5, #+4] 2971 } 2972 } 2973 j+=2; 2974 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 2975 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 2976 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; S_ICONS + 444 \ 00000130 000090E5 LDR R0,[R0, #+0] \ 00000134 350100EF SWI +309 \ 00000138 000050E3 CMP R0,#+0 \ 0000013C 00005613 CMPNE R6,#+0 \ 00000140 0000000A BEQ ??DrawAck_0 \ 00000144 960100EF SWI +406 \ ??DrawAck_0: \ 00000148 3CD08DE2 ADD SP,SP,#+60 ;; stack cleaning \ 0000014C F080BDE8 POP {R4-R7,PC} ;; return \ ??DrawAck_8: \ 00000150 ........ DC32 S_ICONS + 444 2977 } 2978 \ In segment CODE, align 4, keep-with-next 2979 void ask_my_info(void) 2980 { 2981 /* TPKT *p; 2982 CLIST *t; 2983 p=malloc(sizeof(PKT)); 2984 p->pkt.uin=UIN; 2985 p->pkt.type=T_REQINFOSHORT; 2986 p->pkt.data_len=0; 2987 // AddStringToLog(t,0x01,"Request info...",I_str); 2988 SUBPROC((void *)SendAnswer,0,p);*/ 2989 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 2990 \ In segment CODE, align 4, keep-with-next 2991 void set_my_status(void) 2992 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 2993 TPKT *p; 2994 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 2995 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 2996 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2997 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2998 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 368 2999 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,??DataTable120 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 3000 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 368 3001 3002 extern int Send0; 3003 \ In segment CODE, align 4, keep-with-next 3004 void set_my_xstatus(void) 3005 { \ set_my_xstatus: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3006 #ifdef NEWSGOLD 3007 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R4,??DataTable120 ;; SendAnswer \ 00000008 ........ LDR R10,??DataTable117 ;; S_ICONS \ 0000000C ........ LDR R8,??DataTable113 ;; CurrentXStatus \ 00000010 0CD04DE2 SUB SP,SP,#+12 \ 00000014 20019AE5 LDR R0,[R10, #+288] \ 00000018 1A50A0E3 MOV R5,#+26 \ 0000001C 0160A0E3 MOV R6,#+1 \ 00000020 1670A0E3 MOV R7,#+22 \ 00000024 0090A0E3 MOV R9,#+0 \ 00000028 000050E3 CMP R0,#+0 \ 0000002C 3C00000A BEQ ??set_my_xstatus_0 3008 { 3009 if(CurrentXStatus!=11) \ 00000030 000098E5 LDR R0,[R8, #+0] \ 00000034 0B0050E3 CMP R0,#+11 \ 00000038 7200000A BEQ ??set_my_xstatus_1 3010 { 3011 #endif 3012 TPKT *p; 3013 char *s1; 3014 char *s2; 3015 int l1; 3016 int l2; 3017 p=malloc(sizeof(PKT)+1); \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 140000EF SWI +20 \ 00000044 00A0A0E1 MOV R10,R0 3018 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000048 00908AE5 STR R9,[R10, #+0] 3019 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 0000004C B470CAE1 STRH R7,[R10, #+4] 3020 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000050 B660CAE1 STRH R6,[R10, #+6] 3021 p->data[0]=CurrentXStatus; \ 00000054 000098E5 LDR R0,[R8, #+0] 3022 SUBPROC((void *)SendAnswer,0,p); \ 00000058 0A20A0E1 MOV R2,R10 \ 0000005C 0800CAE5 STRB R0,[R10, #+8] \ 00000060 0010A0E3 MOV R1,#+0 \ 00000064 0400A0E1 MOV R0,R4 \ 00000068 710100EF SWI +369 3023 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 0000006C 000098E5 LDR R0,[R8, #+0] \ 00000070 0D10A0E1 MOV R1,SP \ 00000074 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000078 010080E2 ADD R0,R0,#+1 \ 0000007C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000080 0060A0E1 MOV R6,R0 3024 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 00000084 000098E5 LDR R0,[R8, #+0] \ 00000088 04108DE2 ADD R1,SP,#+4 \ 0000008C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000090 020080E2 ADD R0,R0,#+2 \ 00000094 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000098 0070A0E1 MOV R7,R0 3025 if ((!s1)||(!s2)) return; \ 0000009C 000056E3 CMP R6,#+0 \ 000000A0 00005713 CMPNE R7,#+0 \ 000000A4 F78FBD08 POPEQ {R0-R2,R4-R11,PC} 3026 p=malloc(sizeof(PKT)+l1+l2+1); \ 000000A8 00009DE5 LDR R0,[SP, #+0] \ 000000AC 04109DE5 LDR R1,[SP, #+4] \ 000000B0 000081E0 ADD R0,R1,R0 \ 000000B4 090080E2 ADD R0,R0,#+9 \ 000000B8 140000EF SWI +20 \ 000000BC 00A0A0E1 MOV R10,R0 3027 p->pkt.uin=0; \ 000000C0 00908AE5 STR R9,[R10, #+0] 3028 p->pkt.type=T_XTEXT_SET; \ 000000C4 B450CAE1 STRH R5,[R10, #+4] 3029 p->pkt.data_len=l1+l2+1; \ 000000C8 00009DE5 LDR R0,[SP, #+0] \ 000000CC 04109DE5 LDR R1,[SP, #+4] \ 000000D0 000081E0 ADD R0,R1,R0 \ 000000D4 010080E2 ADD R0,R0,#+1 \ 000000D8 B600CAE1 STRH R0,[R10, #+6] 3030 strncpy(p->data+0,s1,l1); \ 000000DC 00209DE5 LDR R2,[SP, #+0] \ 000000E0 0610A0E1 MOV R1,R6 \ 000000E4 08008AE2 ADD R0,R10,#+8 \ 000000E8 160100EF SWI +278 3031 p->data[l1]=0; \ 000000EC 00009DE5 LDR R0,[SP, #+0] 3032 strncpy(p->data+l1+1,s2,l2); \ 000000F0 0710A0E1 MOV R1,R7 \ 000000F4 0A0080E0 ADD R0,R0,R10 \ 000000F8 0890C0E5 STRB R9,[R0, #+8] \ 000000FC 00009DE5 LDR R0,[SP, #+0] \ 00000100 04209DE5 LDR R2,[SP, #+4] \ 00000104 0A0080E0 ADD R0,R0,R10 \ 00000108 090080E2 ADD R0,R0,#+9 \ 0000010C 160100EF SWI +278 3033 SUBPROC((void *)SendAnswer,0,p); \ 00000110 0A20A0E1 MOV R2,R10 \ 00000114 0010A0E3 MOV R1,#+0 \ 00000118 0400A0E1 MOV R0,R4 \ 0000011C 710100EF SWI +369 \ 00000120 F78FBDE8 POP {R0-R2,R4-R11,PC} 3034 #ifdef NEWSGOLD 3035 } 3036 else 3037 { 3038 tracktimer=0; 3039 GetTags(); 3040 } 3041 } 3042 else 3043 { 3044 TPKT *p; 3045 char *s1; 3046 char *s2; 3047 int l1; 3048 int l2; 3049 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000124 0900A0E3 MOV R0,#+9 \ 00000128 140000EF SWI +20 \ 0000012C 00B0A0E1 MOV R11,R0 3050 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000130 00908BE5 STR R9,[R11, #+0] 3051 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000134 B470CBE1 STRH R7,[R11, #+4] 3052 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000138 B660CBE1 STRH R6,[R11, #+6] 3053 p->data[0]=CurrentXStatus; \ 0000013C 000098E5 LDR R0,[R8, #+0] 3054 SUBPROC((void *)SendAnswer,0,p); \ 00000140 0B20A0E1 MOV R2,R11 \ 00000144 0800CBE5 STRB R0,[R11, #+8] \ 00000148 0010A0E3 MOV R1,#+0 \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 710100EF SWI +369 3055 s1=GetXStatusStr(CurrentXStatus*3+1,&l1); \ 00000154 000098E5 LDR R0,[R8, #+0] \ 00000158 0D10A0E1 MOV R1,SP \ 0000015C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000160 010080E2 ADD R0,R0,#+1 \ 00000164 ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000168 0060A0E1 MOV R6,R0 3056 s2=GetXStatusStr(CurrentXStatus*3+2,&l2); \ 0000016C 000098E5 LDR R0,[R8, #+0] \ 00000170 04108DE2 ADD R1,SP,#+4 \ 00000174 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000178 020080E2 ADD R0,R0,#+2 \ 0000017C ........ _BLF GetXStatusStr,??GetXStatusStr??rA \ 00000180 0070A0E1 MOV R7,R0 3057 if ((!s1)||(!s2)) return; \ 00000184 000056E3 CMP R6,#+0 \ 00000188 00005713 CMPNE R7,#+0 \ 0000018C F78FBD08 POPEQ {R0-R2,R4-R11,PC} 3058 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000190 00009DE5 LDR R0,[SP, #+0] \ 00000194 04109DE5 LDR R1,[SP, #+4] \ 00000198 000081E0 ADD R0,R1,R0 \ 0000019C 090080E2 ADD R0,R0,#+9 \ 000001A0 140000EF SWI +20 \ 000001A4 00B0A0E1 MOV R11,R0 3059 p->pkt.uin=0; \ 000001A8 00908BE5 STR R9,[R11, #+0] 3060 p->pkt.type=T_XTEXT_SET; \ 000001AC B450CBE1 STRH R5,[R11, #+4] 3061 p->pkt.data_len=l1+l2+1; \ 000001B0 00009DE5 LDR R0,[SP, #+0] \ 000001B4 04109DE5 LDR R1,[SP, #+4] \ 000001B8 000081E0 ADD R0,R1,R0 \ 000001BC 010080E2 ADD R0,R0,#+1 \ 000001C0 B600CBE1 STRH R0,[R11, #+6] 3062 strncpy(p->data+0,s1,l1); \ 000001C4 00209DE5 LDR R2,[SP, #+0] \ 000001C8 0610A0E1 MOV R1,R6 \ 000001CC 08008BE2 ADD R0,R11,#+8 \ 000001D0 160100EF SWI +278 3063 p->data[l1]=0; \ 000001D4 00009DE5 LDR R0,[SP, #+0] 3064 strncpy(p->data+l1+1,s2,l2); \ 000001D8 0710A0E1 MOV R1,R7 \ 000001DC 0B0080E0 ADD R0,R0,R11 \ 000001E0 0890C0E5 STRB R9,[R0, #+8] \ 000001E4 00009DE5 LDR R0,[SP, #+0] \ 000001E8 04209DE5 LDR R2,[SP, #+4] \ 000001EC 0B0080E0 ADD R0,R0,R11 \ 000001F0 090080E2 ADD R0,R0,#+9 \ 000001F4 160100EF SWI +278 3065 SUBPROC((void *)SendAnswer,0,p); \ 000001F8 0B20A0E1 MOV R2,R11 \ 000001FC 0010A0E3 MOV R1,#+0 \ 00000200 0400A0E1 MOV R0,R4 \ 00000204 710100EF SWI +369 3066 tracktimer=0; \ ??set_my_xstatus_1: \ 00000208 50918AE5 STR R9,[R10, #+336] 3067 GetTags(); \ 0000020C ........ _BLF GetTags,??GetTags??rA \ 00000210 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return 3068 } 3069 #endif 3070 } 3071 #ifdef NEWSGOLD 3072 extern const char playing[13]; 3073 \ In segment CODE, align 4, keep-with-next 3074 void set_my_xstatus2(void) 3075 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3076 TPKT *p; 3077 // char *s1; 3078 // char *s2; 3079 int l1; 3080 int l2; 3081 p=malloc(sizeof(PKT)+1); 3082 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 3083 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 3084 p->pkt.data_len=1; // Длина пакета: 1 байт 3085 p->data[0]=11; 3086 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable120 ;; SendAnswer 3087 // char *s1; 3088 char *sk2=malloc(256); 3089 // strcpy(s1, playing); 3090 // s1="Now playing:"; 3091 strcpy(sk2,teast2); 3092 l1=strlen(playing); \ 00000008 DC809FE5 LDR R8,??set_my_xstatus2_0 ;; playing \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 00000010 0900A0E3 MOV R0,#+9 \ 00000014 140000EF SWI +20 \ 00000018 0040A0E1 MOV R4,R0 \ 0000001C 0050A0E3 MOV R5,#+0 \ 00000020 005084E5 STR R5,[R4, #+0] \ 00000024 1600A0E3 MOV R0,#+22 \ 00000028 B400C4E1 STRH R0,[R4, #+4] \ 0000002C 0100A0E3 MOV R0,#+1 \ 00000030 B600C4E1 STRH R0,[R4, #+6] \ 00000034 0B00A0E3 MOV R0,#+11 \ 00000038 0800C4E5 STRB R0,[R4, #+8] \ 0000003C 0420A0E1 MOV R2,R4 \ 00000040 0010A0E3 MOV R1,#+0 \ 00000044 0600A0E1 MOV R0,R6 \ 00000048 710100EF SWI +369 \ 0000004C 400FA0E3 MOV R0,#+256 \ 00000050 140000EF SWI +20 \ 00000054 94109FE5 LDR R1,??set_my_xstatus2_0+0x4 ;; teast2 \ 00000058 0070A0E1 MOV R7,R0 \ 0000005C 1A0000EF SWI +26 \ 00000060 0800A0E1 MOV R0,R8 \ 00000064 1B0000EF SWI +27 \ 00000068 0090A0E1 MOV R9,R0 3093 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 3094 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 3095 p=malloc(sizeof(PKT)+l1+l2+1); \ 00000080 09008AE0 ADD R0,R10,R9 \ 00000084 090080E2 ADD R0,R0,#+9 \ 00000088 140000EF SWI +20 \ 0000008C 0040A0E1 MOV R4,R0 3096 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 3097 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 3098 p->pkt.data_len=l1+l2+1; \ 0000009C 09008AE0 ADD R0,R10,R9 \ 000000A0 010080E2 ADD R0,R0,#+1 \ 000000A4 B600C4E1 STRH R0,[R4, #+6] 3099 strncpy(p->data+0,playing,l1); \ 000000A8 0920A0E1 MOV R2,R9 \ 000000AC 0810A0E1 MOV R1,R8 \ 000000B0 080084E2 ADD R0,R4,#+8 \ 000000B4 160100EF SWI +278 3100 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 3101 strncpy(p->data+l1+1,sk2,l2); \ 000000C0 0A20A0E1 MOV R2,R10 \ 000000C4 0710A0E1 MOV R1,R7 \ 000000C8 090080E2 ADD R0,R0,#+9 \ 000000CC 160100EF SWI +278 3102 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 3103 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 3104 // mfree(s1); 3105 // mfree(s2); 3106 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 3107 #endif \ In segment CODE, align 4, keep-with-next 3108 void to_develop(void) 3109 { 3110 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable117 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 581190E5 LDR R1,[R0, #+344] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 3111 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable119 ;; `?ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 3128 { 3129 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 3130 { 3131 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 6C0084E5 STR R0,[R4, #+108] 3132 #ifdef EVILFOX 3133 time_to_stop_t9=2; 3134 #else 3135 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C E40185E5 STR R0,[R5, #+484] \ 00000060 7080BDE8 POP {R4-R6,PC} 3136 #endif 3137 } 3138 else 3139 { 3140 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 3141 DirectRedrawGUI_ID(edchat_id); \ 0000006C BC0195E5 LDR R0,[R5, #+444] \ 00000070 400100EF SWI +320 3142 } 3143 } 3144 } 3145 } 3146 } 3147 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3148 3149 GBSTMR develop; 3150 \ In segment CODE, align 4, keep-with-next 3151 void begin_to_develop() 3152 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 3153 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 3154 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 3155 else 3156 GBS_StartTimerProc(&develop, 100, begin_to_develop); \ ??begin_to_develop_0: \ 00000018 0C209FE5 LDR R2,??begin_to_develop_1 ;; begin_to_develop \ 0000001C 0C009FE5 LDR R0,??begin_to_develop_1+0x4 ;; S_ICONS + 6844 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 3157 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 S_ICONS + 6844 3158 ////=================================comand lists 3159 int comanda; 3160 3161 char requests1[]="Sending online time..."; 3162 char requests2[]="Sending msg info..."; 3163 char requests3[]="Sending battery info..."; 3164 char requests4[]="Sending mod info..."; 3165 char requests6[]="Sending offline info..."; 3166 3167 extern const int show_send_info; 3168 3169 #ifdef kluchnik 3170 extern const unsigned int AUTOBOT_UIN; \ In segment DATA_Z, align 4, align-sorted 3171 int autobot; \ autobot: \ 00000000 DS8 4 3172 #endif 3173 3174 char mod_info[264]; 3175 3176 const char ipc_game_name[]="Combats"; 3177 IPC_REQ game_gipc; 3178 #define IPC_GAME_DATA 24 3179 3180 #ifdef kluchnik \ In segment CODE, align 4, keep-with-next 3181 void AutobotInit() 3182 { 3183 if(autobot==1) \ AutobotInit: \ 00000000 3C009FE5 LDR R0,??AutobotInit_0 ;; autobot \ 00000004 3C109FE5 LDR R1,??AutobotInit_0+0x4 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 010052E3 CMP R2,#+1 \ 00000014 0400001A BNE ??AutobotInit_1 3184 { 3185 autobot=0; \ 00000018 0020A0E3 MOV R2,#+0 \ 0000001C 002080E5 STR R2,[R0, #+0] 3186 ShowMSG(1,(int)"Autobot Off"); \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 480100EF SWI +328 \ 00000028 0080BDE8 POP {PC} 3187 } 3188 else 3189 { 3190 autobot=1; \ ??AutobotInit_1: \ 0000002C 0120A0E3 MOV R2,#+1 \ 00000030 002080E5 STR R2,[R0, #+0] 3191 ShowMSG(1,(int)"Autobot On"); \ 00000034 0C1081E2 ADD R1,R1,#+12 \ 00000038 0100A0E3 MOV R0,#+1 \ 0000003C 480100EF SWI +328 3192 } 3193 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??AutobotInit_0: \ 00000044 ........ DC32 autobot \ 00000048 ........ DC32 `?` 3194 #endif 3195 3196 \ In segment CODE, align 4, keep-with-next 3197 void CheckComand(char *txt, CLIST *t, char *ddd) 3198 { \ CheckComand: \ 00000000 F44F2DE9 PUSH {R2,R4-R11,LR} 3199 comanda=1; \ 00000004 ........ LDR R6,??DataTable126 ;; S_ICONS 3200 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 ........ LDR R7,??DataTable119 ;; `?pkt.uin=t->uin; \ 00000100 0C0095E5 LDR R0,[R5, #+12] \ 00000104 000084E5 STR R0,[R4, #+0] 3221 p->pkt.type=T_SENDMSG; \ 00000108 B4A0C4E1 STRH R10,[R4, #+4] 3222 p->pkt.data_len=strlen(online); \ 0000010C 20008DE2 ADD R0,SP,#+32 \ 00000110 1B0000EF SWI +27 \ 00000114 B600C4E1 STRH R0,[R4, #+6] 3223 strcpy(p->data,online); \ 00000118 20108DE2 ADD R1,SP,#+32 \ 0000011C 080084E2 ADD R0,R4,#+8 \ 00000120 1A0000EF SWI +26 3224 #ifdef EVILFOX 3225 SENDMSGCOUNT++; 3226 #else 3227 if(show_send_info) \ 00000124 2C059FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000128 000090E5 LDR R0,[R0, #+0] \ 0000012C 08D08DE2 ADD SP,SP,#+8 \ 00000130 000050E3 CMP R0,#+0 \ 00000134 1C0196E5 LDR R0,[R6, #+284] \ 00000138 010080E2 ADD R0,R0,#+1 \ 0000013C 1C0186E5 STR R0,[R6, #+284] \ 00000140 0A00000A BEQ ??CheckComand_4 3228 AddStringToLog(t,0x01,requests1,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000144 0110A0E3 MOV R1,#+1 \ 00000148 02002DE9 PUSH {R1} \ 0000014C 000009E0 AND R0,R9,R0 \ 00000150 01002DE9 PUSH {R0} \ 00000154 1F3087E2 ADD R3,R7,#+31 \ 00000158 CC00A0E3 MOV R0,#+204 \ 0000015C 680D80E3 ORR R0,R0,#0x1A00 \ 00000160 062080E0 ADD R2,R0,R6 \ 00000164 0500A0E1 MOV R0,R5 \ 00000168 ........ BL AddStringToLog \ 0000016C 08D08DE2 ADD SP,SP,#+8 3229 else 3230 SENDMSGCOUNT++; 3231 #endif 3232 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_4: \ 00000170 0420A0E1 MOV R2,R4 \ 00000174 0010A0E3 MOV R1,#+0 \ 00000178 0800A0E1 MOV R0,R8 \ 0000017C 710100EF SWI +369 3233 return; \ ??CheckComand_1: \ 00000180 47DF8DE2 ADD SP,SP,#+284 \ 00000184 F08FBDE8 POP {R4-R11,PC} 3234 } 3235 3236 if(!strcmp(txt, "GET_MSG_INFO")) \ ??CheckComand_2: \ 00000188 8E1F87E2 ADD R1,R7,#+568 \ 0000018C 0400A0E1 MOV R0,R4 \ 00000190 190000EF SWI +25 \ 00000194 000050E3 CMP R0,#+0 \ 00000198 2800001A BNE ??CheckComand_5 3237 { 3238 comanda=0; \ 0000019C E80186E5 STR R0,[R6, #+488] 3239 TPKT *p; 3240 char *send_txt=malloc(64); \ 000001A0 4000A0E3 MOV R0,#+64 \ 000001A4 140000EF SWI +20 \ 000001A8 0040A0E1 MOV R4,R0 3241 sprintf(send_txt, "Отправлено сообщений: %d \n" 3242 "Принято сообщений: %d" 3243 , main2_count, main_count); \ 000001AC ........ LDR R0,??DataTable121 ;; main_count \ 000001B0 821F87E2 ADD R1,R7,#+520 \ 000001B4 003090E5 LDR R3,[R0, #+0] \ 000001B8 ........ LDR R0,??DataTable122 ;; main2_count \ 000001BC 002090E5 LDR R2,[R0, #+0] \ 000001C0 0400A0E1 MOV R0,R4 \ 000001C4 160000EF SWI +22 3244 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 000001C8 0400A0E1 MOV R0,R4 \ 000001CC 1B0000EF SWI +27 \ 000001D0 090080E2 ADD R0,R0,#+9 \ 000001D4 140000EF SWI +20 \ 000001D8 00B0A0E1 MOV R11,R0 3245 p->pkt.uin=t->uin; \ 000001DC 0C0095E5 LDR R0,[R5, #+12] \ 000001E0 00008BE5 STR R0,[R11, #+0] 3246 p->pkt.type=T_SENDMSG; \ 000001E4 B4A0CBE1 STRH R10,[R11, #+4] 3247 p->pkt.data_len=strlen(send_txt); \ 000001E8 0400A0E1 MOV R0,R4 \ 000001EC 1B0000EF SWI +27 \ 000001F0 B600CBE1 STRH R0,[R11, #+6] 3248 strcpy(p->data,send_txt); \ 000001F4 0410A0E1 MOV R1,R4 \ 000001F8 08008BE2 ADD R0,R11,#+8 \ 000001FC 1A0000EF SWI +26 3249 #ifdef EVILFOX 3250 SENDMSGCOUNT++; 3251 #else 3252 if(show_send_info) \ 00000200 50049FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000204 000090E5 LDR R0,[R0, #+0] \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 1C0196E5 LDR R0,[R6, #+284] \ 00000210 010080E2 ADD R0,R0,#+1 \ 00000214 1C0186E5 STR R0,[R6, #+284] \ 00000218 0601000A BEQ ??CheckComand_6 3253 AddStringToLog(t,0x01,requests2,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000021C 0110A0E3 MOV R1,#+1 \ 00000220 02002DE9 PUSH {R1} \ 00000224 000009E0 AND R0,R9,R0 \ 00000228 01002DE9 PUSH {R0} \ 0000022C 1F3087E2 ADD R3,R7,#+31 \ 00000230 E400A0E3 MOV R0,#+228 \ 00000234 680D80E3 ORR R0,R0,#0x1A00 \ 00000238 062080E0 ADD R2,R0,R6 \ 0000023C FA0000EA B ??CheckComand_7 3254 else 3255 SENDMSGCOUNT++; 3256 #endif 3257 SUBPROC((void *)SendAnswer,0,p); 3258 mfree(send_txt); 3259 return; 3260 } 3261 3262 //==========================windes commands begin ===================== 3263 3264 if(!strcmp(txt, "GET_PROVIDER")) \ ??CheckComand_5: \ 00000240 9D1F87E2 ADD R1,R7,#+628 \ 00000244 0400A0E1 MOV R0,R4 \ 00000248 190000EF SWI +25 \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 2D00001A BNE ??CheckComand_8 3265 { 3266 comanda=0; \ 00000254 E80186E5 STR R0,[R6, #+488] 3267 TPKT *p; 3268 3269 WSHDR *ws=AllocWS(32); \ 00000258 2000A0E3 MOV R0,#+32 \ 0000025C 250100EF SWI +293 \ 00000260 00B0A0E1 MOV R11,R0 3270 GetProvider(ws,0); \ 00000264 0010A0E3 MOV R1,#+0 \ 00000268 410000EF SWI +65 3271 char prov[16]; 3272 ws_2str(ws,prov,wstrlen(ws)); \ 0000026C 0B00A0E1 MOV R0,R11 \ 00000270 230100EF SWI +291 \ 00000274 0020A0E1 MOV R2,R0 \ 00000278 08108DE2 ADD R1,SP,#+8 \ 0000027C 0B00A0E1 MOV R0,R11 \ 00000280 A30000EF SWI +163 3273 char *send_txt=malloc(32); \ 00000284 2000A0E3 MOV R0,#+32 \ 00000288 140000EF SWI +20 \ 0000028C 0040A0E1 MOV R4,R0 3274 sprintf(send_txt, "Оператор: %s", prov); \ 00000290 08208DE2 ADD R2,SP,#+8 \ 00000294 921F87E2 ADD R1,R7,#+584 \ 00000298 160000EF SWI +22 3275 FreeWS(ws); \ 0000029C 0B00A0E1 MOV R0,R11 \ 000002A0 290100EF SWI +297 3276 3277 p=malloc(sizeof(PKT)+28+1); \ 000002A4 2500A0E3 MOV R0,#+37 \ 000002A8 140000EF SWI +20 \ 000002AC 00B0A0E1 MOV R11,R0 3278 p->pkt.uin=t->uin; \ 000002B0 0C0095E5 LDR R0,[R5, #+12] \ 000002B4 00008BE5 STR R0,[R11, #+0] 3279 p->pkt.type=T_SENDMSG; \ 000002B8 B4A0CBE1 STRH R10,[R11, #+4] 3280 p->pkt.data_len=strlen(send_txt); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 1B0000EF SWI +27 \ 000002C4 B600CBE1 STRH R0,[R11, #+6] 3281 strcpy(p->data,send_txt); \ 000002C8 0410A0E1 MOV R1,R4 \ 000002CC 08008BE2 ADD R0,R11,#+8 \ 000002D0 1A0000EF SWI +26 3282 if(show_send_info) \ 000002D4 7C039FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000002D8 000090E5 LDR R0,[R0, #+0] \ 000002DC 000050E3 CMP R0,#+0 \ 000002E0 1C0196E5 LDR R0,[R6, #+284] \ 000002E4 010080E2 ADD R0,R0,#+1 \ 000002E8 1C0186E5 STR R0,[R6, #+284] \ 000002EC D100000A BEQ ??CheckComand_6 3283 AddStringToLog(t,0x01,"Sending provider name...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000002F0 0110A0E3 MOV R1,#+1 \ 000002F4 02002DE9 PUSH {R1} \ 000002F8 000009E0 AND R0,R9,R0 \ 000002FC 01002DE9 PUSH {R0} \ 00000300 1F3087E2 ADD R3,R7,#+31 \ 00000304 962F87E2 ADD R2,R7,#+600 \ 00000308 C70000EA B ??CheckComand_7 3284 else 3285 SENDMSGCOUNT++; 3286 SUBPROC((void *)SendAnswer,0,p); 3287 mfree(send_txt); 3288 return; 3289 } 3290 3291 //----------------------------------------------------------------------- 3292 3293 if(!strcmp(txt, "GET_MOD_INFO")) \ ??CheckComand_8: \ 0000030C A61F87E2 ADD R1,R7,#+664 \ 00000310 0400A0E1 MOV R0,R4 \ 00000314 190000EF SWI +25 \ 00000318 000050E3 CMP R0,#+0 \ 0000031C 3100001A BNE ??CheckComand_9 3294 { 3295 comanda=0; \ 00000320 E80186E5 STR R0,[R6, #+488] 3296 TPKT *p; 3297 char *send_txt=malloc(256); \ 00000324 400FA0E3 MOV R0,#+256 \ 00000328 140000EF SWI +20 \ 0000032C 0040A0E1 MOV R4,R0 3298 // sprintf(I_UIN, "uin%d", t->uin); 3299 strcpy(I_UIN, t->name); \ 00000330 671D86E2 ADD R1,R6,#+6592 \ 00000334 00108DE5 STR R1,[SP, #+0] \ 00000338 00009DE5 LDR R0,[SP, #+0] \ 0000033C 141085E2 ADD R1,R5,#+20 \ 00000340 1A0000EF SWI +26 3300 if(strstr(ignor_list,I_UIN)==0) \ 00000344 00109DE5 LDR R1,[SP, #+0] \ 00000348 ........ LDR R0,??DataTable123 ;; ignor_list \ 0000034C 180100EF SWI +280 \ 00000350 000050E3 CMP R0,#+0 3301 { 3302 strcpy(send_txt, mod_info); \ 00000354 0B10A001 MOVEQ R1,R11 3303 } 3304 else 3305 strcpy(send_txt, "***Access denied***"); \ 00000358 A11F8712 ADDNE R1,R7,#+644 \ 0000035C 0400A0E1 MOV R0,R4 \ 00000360 1A0000EF SWI +26 3306 3307 strcpy(send_txt, mod_info); \ 00000364 0B10A0E1 MOV R1,R11 \ 00000368 0400A0E1 MOV R0,R4 \ 0000036C 1A0000EF SWI +26 3308 3309 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 00000370 0400A0E1 MOV R0,R4 \ 00000374 1B0000EF SWI +27 \ 00000378 090080E2 ADD R0,R0,#+9 \ 0000037C 140000EF SWI +20 \ 00000380 00B0A0E1 MOV R11,R0 3310 p->pkt.uin=t->uin; \ 00000384 0C0095E5 LDR R0,[R5, #+12] \ 00000388 00008BE5 STR R0,[R11, #+0] 3311 p->pkt.type=T_SENDMSG; \ 0000038C B4A0CBE1 STRH R10,[R11, #+4] 3312 p->pkt.data_len=strlen(send_txt); \ 00000390 0400A0E1 MOV R0,R4 \ 00000394 1B0000EF SWI +27 \ 00000398 B600CBE1 STRH R0,[R11, #+6] 3313 strcpy(p->data,send_txt); \ 0000039C 0410A0E1 MOV R1,R4 \ 000003A0 08008BE2 ADD R0,R11,#+8 \ 000003A4 1A0000EF SWI +26 3314 #ifdef EVILFOX 3315 SENDMSGCOUNT++; 3316 #else 3317 if(show_send_info) \ 000003A8 A8029FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000003AC 000090E5 LDR R0,[R0, #+0] \ 000003B0 000050E3 CMP R0,#+0 \ 000003B4 1C0196E5 LDR R0,[R6, #+284] \ 000003B8 010080E2 ADD R0,R0,#+1 \ 000003BC 1C0186E5 STR R0,[R6, #+284] \ 000003C0 9C00000A BEQ ??CheckComand_6 3318 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000003C4 0110A0E3 MOV R1,#+1 \ 000003C8 02002DE9 PUSH {R1} \ 000003CC 000009E0 AND R0,R9,R0 \ 000003D0 01002DE9 PUSH {R0} \ 000003D4 1F3087E2 ADD R3,R7,#+31 \ 000003D8 1000A0E3 MOV R0,#+16 \ 000003DC 6C0D80E3 ORR R0,R0,#0x1B00 \ 000003E0 062080E0 ADD R2,R0,R6 \ 000003E4 900000EA B ??CheckComand_7 3319 else 3320 SENDMSGCOUNT++; 3321 #endif 3322 SUBPROC((void *)SendAnswer,0,p); 3323 mfree(send_txt); 3324 return; 3325 } 3326 3327 if(!strcmp(txt, "GET_BAT_INFO")) \ ??CheckComand_9: \ 000003E8 B11F87E2 ADD R1,R7,#+708 \ 000003EC 0400A0E1 MOV R0,R4 \ 000003F0 190000EF SWI +25 \ 000003F4 000050E3 CMP R0,#+0 \ 000003F8 2400001A BNE ??CheckComand_10 3328 { 3329 comanda=0; \ 000003FC E80186E5 STR R0,[R6, #+488] 3330 TPKT *p; 3331 int bat; 3332 bat=*RamCap(); \ 00000400 C88000EF SWI +32968 \ 00000404 B0B0D0E1 LDRH R11,[R0, #+0] 3333 char *send_txt=malloc(64); \ 00000408 4000A0E3 MOV R0,#+64 \ 0000040C 140000EF SWI +20 \ 00000410 0040A0E1 MOV R4,R0 3334 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 00000414 0B20A0E1 MOV R2,R11 \ 00000418 AA1F87E2 ADD R1,R7,#+680 \ 0000041C 160000EF SWI +22 3335 p=malloc(sizeof(PKT)+28+1); \ 00000420 2500A0E3 MOV R0,#+37 \ 00000424 140000EF SWI +20 \ 00000428 00B0A0E1 MOV R11,R0 3336 p->pkt.uin=t->uin; \ 0000042C 0C0095E5 LDR R0,[R5, #+12] \ 00000430 00008BE5 STR R0,[R11, #+0] 3337 p->pkt.type=T_SENDMSG; \ 00000434 B4A0CBE1 STRH R10,[R11, #+4] 3338 p->pkt.data_len=strlen(send_txt); \ 00000438 0400A0E1 MOV R0,R4 \ 0000043C 1B0000EF SWI +27 \ 00000440 B600CBE1 STRH R0,[R11, #+6] 3339 strcpy(p->data,send_txt); \ 00000444 0410A0E1 MOV R1,R4 \ 00000448 08008BE2 ADD R0,R11,#+8 \ 0000044C 1A0000EF SWI +26 3340 #ifdef EVILFOX 3341 SENDMSGCOUNT++; 3342 #else 3343 if(show_send_info) \ 00000450 00029FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000454 000090E5 LDR R0,[R0, #+0] \ 00000458 000050E3 CMP R0,#+0 \ 0000045C 1C0196E5 LDR R0,[R6, #+284] \ 00000460 010080E2 ADD R0,R0,#+1 \ 00000464 1C0186E5 STR R0,[R6, #+284] \ 00000468 7200000A BEQ ??CheckComand_6 3344 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000046C 0110A0E3 MOV R1,#+1 \ 00000470 02002DE9 PUSH {R1} \ 00000474 000009E0 AND R0,R9,R0 \ 00000478 01002DE9 PUSH {R0} \ 0000047C 1F3087E2 ADD R3,R7,#+31 \ 00000480 F800A0E3 MOV R0,#+248 \ 00000484 680D80E3 ORR R0,R0,#0x1A00 \ 00000488 062080E0 ADD R2,R0,R6 \ 0000048C 660000EA B ??CheckComand_7 3345 else 3346 SENDMSGCOUNT++; 3347 #endif 3348 SUBPROC((void *)SendAnswer,0,p); 3349 mfree(send_txt); 3350 return; 3351 } 3352 3353 if(away_m==1) \ ??CheckComand_10: \ 00000490 300196E5 LDR R0,[R6, #+304] \ 00000494 010050E3 CMP R0,#+1 \ 00000498 3500001A BNE ??CheckComand_11 3354 { 3355 comanda=1; 3356 TPKT *p; 3357 // sprintf(hah,"online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); 3358 3359 if(inp_away_msg2)//Если ввели текст то выводим его,иначе из конфига \ 0000049C 2C1196E5 LDR R1,[R6, #+300] \ 000004A0 E80186E5 STR R0,[R6, #+488] \ 000004A4 F820A0E3 MOV R2,#+248 \ 000004A8 502D82E3 ORR R2,R2,#0x1400 \ 000004AC 062082E0 ADD R2,R2,R6 \ 000004B0 00208DE5 STR R2,[SP, #+0] \ 000004B4 583D86E2 ADD R3,R6,#+5632 \ 000004B8 000051E3 CMP R1,#+0 3360 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, ddd, inp_away_msg2, away_msg_time); 3361 else 3362 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, ddd, awayMsg, away_msg_time); \ 000004BC ........ LDREQ R1,??DataTable124 ;; awayMsg \ 000004C0 94219FE5 LDR R2,??CheckComand_3+0x4 ;; awayHelloMsg \ 000004C4 08002DE9 PUSH {R3} \ 000004C8 02002DE9 PUSH {R1} \ 000004CC 20319DE5 LDR R3,[SP, #+288] \ 000004D0 6B0EA0E3 MOV R0,#+1712 \ 000004D4 071080E0 ADD R1,R0,R7 \ 000004D8 08009DE5 LDR R0,[SP, #+8] \ 000004DC 160000EF SWI +22 \ 000004E0 08D08DE2 ADD SP,SP,#+8 3363 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 000004E4 00009DE5 LDR R0,[SP, #+0] \ 000004E8 1B0000EF SWI +27 \ 000004EC 090080E2 ADD R0,R0,#+9 \ 000004F0 140000EF SWI +20 \ 000004F4 00B0A0E1 MOV R11,R0 3364 p->pkt.uin=t->uin; \ 000004F8 0C0095E5 LDR R0,[R5, #+12] \ 000004FC 00008BE5 STR R0,[R11, #+0] 3365 p->pkt.type=T_SENDMSG; \ 00000500 B4A0CBE1 STRH R10,[R11, #+4] 3366 p->pkt.data_len=strlen(away_msg); \ 00000504 00009DE5 LDR R0,[SP, #+0] \ 00000508 1B0000EF SWI +27 \ 0000050C B600CBE1 STRH R0,[R11, #+6] 3367 strcpy(p->data,away_msg); \ 00000510 00109DE5 LDR R1,[SP, #+0] \ 00000514 08008BE2 ADD R0,R11,#+8 \ 00000518 1A0000EF SWI +26 3368 #ifdef EVILFOX 3369 SENDMSGCOUNT++; 3370 #else 3371 if(show_send_info) \ 0000051C 34019FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000520 000090E5 LDR R0,[R0, #+0] \ 00000524 000050E3 CMP R0,#+0 \ 00000528 1C0196E5 LDR R0,[R6, #+284] \ 0000052C 010080E2 ADD R0,R0,#+1 \ 00000530 1C0186E5 STR R0,[R6, #+284] \ 00000534 0A00000A BEQ ??CheckComand_12 3372 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000538 0110A0E3 MOV R1,#+1 \ 0000053C 02002DE9 PUSH {R1} \ 00000540 000009E0 AND R0,R9,R0 \ 00000544 01002DE9 PUSH {R0} \ 00000548 1F3087E2 ADD R3,R7,#+31 \ 0000054C 2400A0E3 MOV R0,#+36 \ 00000550 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000554 062080E0 ADD R2,R0,R6 \ 00000558 0500A0E1 MOV R0,R5 \ 0000055C ........ BL AddStringToLog \ 00000560 08D08DE2 ADD SP,SP,#+8 3373 else 3374 SENDMSGCOUNT++; 3375 #endif 3376 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_12: \ 00000564 0B20A0E1 MOV R2,R11 \ 00000568 0010A0E3 MOV R1,#+0 \ 0000056C 0800A0E1 MOV R0,R8 \ 00000570 710100EF SWI +369 3377 } 3378 #ifdef klcuhnik 3379 if((t->uin==AUTOBOT_UIN)&&(autobot)) 3380 { 3381 TPKT *p; 3382 if(t->bot_msg==0) sprintf(away_msg, "Привет"); 3383 if(t->bot_msg==1) sprintf(away_msg, "думаешь?!"); 3384 if(t->bot_msg==2) sprintf(away_msg, "да что ты говоришь"); 3385 if(t->bot_msg==3) sprintf(away_msg, "странно"); 3386 if(t->bot_msg==4) sprintf(away_msg, "ты так думаешь?"); 3387 if(t->bot_msg==5) sprintf(away_msg, "может быть"); 3388 if(t->bot_msg==6) sprintf(away_msg, "да нахрен"); 3389 if(t->bot_msg==7) sprintf(away_msg, "конечна"); 3390 if(t->bot_msg==8) sprintf(away_msg, "почему нет"); 3391 t->bot_msg++; 3392 if(t->bot_msg==9) 3393 t->bot_msg=1; 3394 // strcpy(away_msg, c); 3395 p=malloc(sizeof(PKT)+strlen(away_msg)+1); 3396 p->pkt.uin=t->uin; 3397 p->pkt.type=T_SENDMSG; 3398 p->pkt.data_len=strlen(away_msg); 3399 strcpy(p->data,away_msg); 3400 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); 3401 SUBPROC((void *)SendAnswer,0,p); 3402 3403 extern const int autobot_kel; 3404 if((t->uin==334492880)&&(autobot_kel)) 3405 { 3406 TPKT *p; 3407 //if(t->bot_msg==0) sprintf(away_msg, "Привет"); 3408 if(t->bot_msg==0) sprintf(away_msg, "думаешь?!"); 3409 if(t->bot_msg==1) sprintf(away_msg, "да что ты говоришь"); 3410 if(t->bot_msg==2) sprintf(away_msg, "странно"); 3411 if(t->bot_msg==3) sprintf(away_msg, "угу"); 3412 if(t->bot_msg==4) sprintf(away_msg, "Не еби мне мозг!"); 3413 if(t->bot_msg==5) sprintf(away_msg, "иди на хуй!!"); 3414 if(t->bot_msg==6) sprintf(away_msg, "сука"); 3415 if(t->bot_msg==7) sprintf(away_msg, "заебал"); 3416 if(t->bot_msg==8) sprintf(away_msg, "отъебись cука!!!*FUCK_YOU*"); 3417 t->bot_msg++; 3418 if(t->bot_msg==9) 3419 t->bot_msg=1; 3420 // strcpy(away_msg, c); 3421 p=malloc(sizeof(PKT)+strlen(away_msg)+1); 3422 p->pkt.uin=t->uin; 3423 p->pkt.type=T_SENDMSG; 3424 p->pkt.data_len=strlen(away_msg); 3425 strcpy(p->data,away_msg); 3426 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); 3427 SUBPROC((void *)SendAnswer,0,p); 3428 } 3429 } 3430 #endif 3431 //----------------------// 3432 3433 if(!strcmp(txt, "GET_URL_INFO"))// kluchnik 26.03.08 \ ??CheckComand_11: \ 00000574 9C00A0E3 MOV R0,#+156 \ 00000578 400E80E3 ORR R0,R0,#0x400 \ 0000057C 071080E0 ADD R1,R0,R7 \ 00000580 0400A0E1 MOV R0,R4 \ 00000584 190000EF SWI +25 \ 00000588 000050E3 CMP R0,#+0 \ 0000058C 2F00001A BNE ??CheckComand_13 3434 { 3435 comanda=0; \ 00000590 E80186E5 STR R0,[R6, #+488] 3436 TPKT *p; 3437 3438 char *send_txt=malloc(786); \ 00000594 C40F8AE3 ORR R0,R10,#0x310 \ 00000598 140000EF SWI +20 \ 0000059C 0040A0E1 MOV R4,R0 3439 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 3440 "http://windes.narod.ru/files/naticq_mod2058s.zip (sgold) (40kb)\n" 3441 "http://windes.narod.ru/files/naticq_mod2058n.zip (NewSGold) (40kb)\n" 3442 "http://windes.narod.ru/files/naticq_mod2058e.zip (elka) (40kb)\n" 3443 "files: http://windes.narod.ru/files/naticqmod_allfiles_w.zip (432kb)\n" 3444 "Status on iconbar http://windes.narod.ru/files/img16x16.zip (74kb)\n" 3445 "Так же все будет тут http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 000005A0 6E0F87E2 ADD R0,R7,#+440 \ 000005A4 01002DE9 PUSH {R0} \ 000005A8 6B3F87E2 ADD R3,R7,#+428 \ 000005AC BE2F87E2 ADD R2,R7,#+760 \ 000005B0 B51F87E2 ADD R1,R7,#+724 \ 000005B4 0400A0E1 MOV R0,R4 \ 000005B8 160000EF SWI +22 3446 3447 p=malloc(sizeof(PKT)+786); \ 000005BC C60F8AE3 ORR R0,R10,#0x318 \ 000005C0 140000EF SWI +20 \ 000005C4 00B0A0E1 MOV R11,R0 3448 p->pkt.uin=t->uin; \ 000005C8 0C0095E5 LDR R0,[R5, #+12] \ 000005CC 00008BE5 STR R0,[R11, #+0] 3449 p->pkt.type=T_SENDMSG; \ 000005D0 B4A0CBE1 STRH R10,[R11, #+4] 3450 p->pkt.data_len=strlen(send_txt); \ 000005D4 0400A0E1 MOV R0,R4 \ 000005D8 1B0000EF SWI +27 \ 000005DC B600CBE1 STRH R0,[R11, #+6] 3451 strcpy(p->data,send_txt); \ 000005E0 0410A0E1 MOV R1,R4 \ 000005E4 08008BE2 ADD R0,R11,#+8 \ 000005E8 1A0000EF SWI +26 3452 if(show_send_info) \ 000005EC 64009FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000005F0 000090E5 LDR R0,[R0, #+0] \ 000005F4 04D08DE2 ADD SP,SP,#+4 \ 000005F8 000050E3 CMP R0,#+0 \ 000005FC 1C0196E5 LDR R0,[R6, #+284] \ 00000600 010080E2 ADD R0,R0,#+1 \ 00000604 1C0186E5 STR R0,[R6, #+284] \ 00000608 0A00000A BEQ ??CheckComand_6 3453 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000060C 0110A0E3 MOV R1,#+1 \ 00000610 02002DE9 PUSH {R1} \ 00000614 000009E0 AND R0,R9,R0 \ 00000618 01002DE9 PUSH {R0} \ 0000061C 1F3087E2 ADD R3,R7,#+31 \ 00000620 8800A0E3 MOV R0,#+136 \ 00000624 400E80E3 ORR R0,R0,#0x400 \ 00000628 072080E0 ADD R2,R0,R7 \ ??CheckComand_7: \ 0000062C 0500A0E1 MOV R0,R5 \ 00000630 ........ BL AddStringToLog \ 00000634 08D08DE2 ADD SP,SP,#+8 3454 else 3455 SENDMSGCOUNT++; 3456 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_6: \ 00000638 0B20A0E1 MOV R2,R11 \ 0000063C 0010A0E3 MOV R1,#+0 \ 00000640 0800A0E1 MOV R0,R8 \ 00000644 710100EF SWI +369 3457 mfree(send_txt); \ 00000648 0400A0E1 MOV R0,R4 \ 0000064C 150000EF SWI +21 3458 return; \ ??CheckComand_13: \ 00000650 47DF8DE2 ADD SP,SP,#+284 ;; stack cleaning \ 00000654 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_3: \ 00000658 ........ DC32 show_send_info \ 0000065C ........ DC32 awayHelloMsg 3459 } 3460 } 3461 //===========================komand list end 3462 \ In segment DATA_Z, align 4, align-sorted 3463 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 3464 char show_nick[32]; 3465 int INC_show; 3466 #ifdef ELKA 3467 int font =9; 3468 #else 3469 int font= 4; 3470 #endif 3471 const char color[4]={255,255,255,100}; 3472 \ In segment CODE, align 4, keep-with-next 3473 void show_pp_sender() 3474 { \ show_pp_sender: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 3475 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable126 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C EC0194E5 LDR R0,[R4, #+492] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F383BDB8 POPLT {R0,R1,R4-R9,PC} 3476 { 3477 WSHDR *ws=AllocWS(256); 3478 ascii2ws(ws,show_nick); 3479 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 3480 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000018 34619FE5 LDR R6,??show_pp_sender_0 ;; `?` \ 0000001C 400FA0E3 MOV R0,#+256 \ 00000020 250100EF SWI +293 \ 00000024 0050A0E1 MOV R5,R0 \ 00000028 4400A0E3 MOV R0,#+68 \ 0000002C 700D80E3 ORR R0,R0,#0x1C00 \ 00000030 041080E0 ADD R1,R0,R4 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 ........ _BLF ascii2ws,??ascii2ws??rA \ 0000003C 068100EF SWI +33030 \ 00000040 080090E5 LDR R0,[R0, #+8] \ 00000044 880096E8 LDM R6,{R3,R7} \ 00000048 0C0090E5 LDR R0,[R0, #+12] \ 0000004C 0D10A0E1 MOV R1,SP \ 00000050 080090E5 LDR R0,[R0, #+8] 3481 if(!(memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8))) \ 00000054 0820A0E3 MOV R2,#+8 \ 00000058 040090E5 LDR R0,[R0, #+4] \ 0000005C 880081E8 STM R1,{R3,R7} \ 00000060 010040E2 SUB R0,R0,#+1 \ 00000064 1C0100EF SWI +284 \ 00000068 000050E3 CMP R0,#+0 \ 0000006C 0000001A BNE ??show_pp_sender_1 3482 { 3483 extern void DrawScreenShot(); 3484 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3485 } 3486 DrawRectangle(0,0,Get_WS_width(ws,font)+2,GetFontYSIZE(font)+2,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ ??show_pp_sender_1: \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 2E0100EF SWI +302 \ 0000007C 0070A0E1 MOV R7,R0 \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 2E0100EF SWI +302 \ 00000088 0080A0E1 MOV R8,R0 \ 0000008C F00194E5 LDR R0,[R4, #+496] \ 00000090 C50100EF SWI +453 \ 00000094 F01194E5 LDR R1,[R4, #+496] \ 00000098 0090A0E1 MOV R9,R0 \ 0000009C 0500A0E1 MOV R0,R5 \ 000000A0 080200EF SWI +520 \ 000000A4 80002DE9 PUSH {R7} \ 000000A8 00012DE9 PUSH {R8} \ 000000AC 0010A0E3 MOV R1,#+0 \ 000000B0 02002DE9 PUSH {R1} \ 000000B4 023089E2 ADD R3,R9,#+2 \ 000000B8 022080E2 ADD R2,R0,#+2 \ 000000BC 0000A0E3 MOV R0,#+0 \ 000000C0 B40100EF SWI +436 3487 DrawString(ws,1,1,1+Get_WS_width(ws,font)+2,1+GetFontYSIZE(font),font,0,( char*) color,GetPaletteAdrByColorIndex(23)); \ 000000C4 1700A0E3 MOV R0,#+23 \ 000000C8 2E0100EF SWI +302 \ 000000CC 0080A0E1 MOV R8,R0 \ 000000D0 F00194E5 LDR R0,[R4, #+496] \ 000000D4 C50100EF SWI +453 \ 000000D8 F01194E5 LDR R1,[R4, #+496] \ 000000DC 0070A0E1 MOV R7,R0 \ 000000E0 0500A0E1 MOV R0,R5 \ 000000E4 080200EF SWI +520 \ 000000E8 00012DE9 PUSH {R8} \ 000000EC 081086E2 ADD R1,R6,#+8 \ 000000F0 02002DE9 PUSH {R1} \ 000000F4 033080E2 ADD R3,R0,#+3 \ 000000F8 0120A0E3 MOV R2,#+1 \ 000000FC 0500A0E1 MOV R0,R5 \ 00000100 0010A0E3 MOV R1,#+0 \ 00000104 02002DE9 PUSH {R1} \ 00000108 F01194E5 LDR R1,[R4, #+496] \ 0000010C 02002DE9 PUSH {R1} \ 00000110 011087E2 ADD R1,R7,#+1 \ 00000114 02002DE9 PUSH {R1} \ 00000118 0210A0E1 MOV R1,R2 \ 0000011C 4C0100EF SWI +332 3488 3489 FreeWS(ws); \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 290100EF SWI +297 3490 INC_show--; \ 00000128 EC0194E5 LDR R0,[R4, #+492] 3491 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 0000012C 24209FE5 LDR R2,??show_pp_sender_0+0x4 ;; show_pp_sender \ 00000130 010040E2 SUB R0,R0,#+1 \ 00000134 EC0184E5 STR R0,[R4, #+492] \ 00000138 0A10A0E3 MOV R1,#+10 \ 0000013C BC00A0E3 MOV R0,#+188 \ 00000140 680D80E3 ORR R0,R0,#0x1A00 \ 00000144 040080E0 ADD R0,R0,R4 \ 00000148 4D0000EF SWI +77 \ 0000014C 20D08DE2 ADD SP,SP,#+32 3492 } 3493 } \ 00000150 F383BDE8 POP {R0,R1,R4-R9,PC} ;; return \ ??show_pp_sender_0: \ 00000154 ........ DC32 `?` \ 00000158 ........ DC32 show_pp_sender 3494 3495 extern const int SHOW_ACTIVE; 3496 \ In segment CODE, align 4, keep-with-next 3497 void Get_Online_total() 3498 { 3499 CLIST *t; 3500 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable126 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 C81180E5 STR R1,[R0, #+456] 3501 kopa_kontaktu=0; \ 0000000C CC1180E5 STR R1,[R0, #+460] 3502 t=(CLIST *)(&cltop); \ 00000010 6C1F80E2 ADD R1,R0,#+432 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 3503 while(t=(CLIST *)(t->next)) 3504 { 3505 if (!t->isgroup) \ ??Get_Online_total_1: \ 00000020 082091E5 LDR R2,[R1, #+8] \ 00000024 000052E3 CMP R2,#+0 \ 00000028 0700001A BNE ??Get_Online_total_0 3506 { 3507 kopa_online++; \ 0000002C C82190E5 LDR R2,[R0, #+456] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 C82180E5 STR R2,[R0, #+456] 3508 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 CC219015 LDRNE R2,[R0, #+460] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 CC218015 STRNE R2,[R0, #+460] 3509 } 3510 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 3511 } \ 00000058 1EFF2FE1 BX LR ;; return 3512 \ In segment CODE, align 4, keep-with-next 3513 ProcessPacket(TPKT *p) 3514 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 50DF4DE2 SUB SP,SP,#+320 3515 extern const int VIBR_TYPE, VIBR_ON_CONNECT; 3516 CLIST *t; 3517 LOGQ *q; 3518 char s[256]; 3519 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable139 ;; `?pkt.uin) \ ??ProcessPacket_3: \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 1800000A BEQ ??ProcessPacket_4 3527 { 3528 if ((t=FindContactByUin(p->pkt.uin))) \ 00000090 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000094 0090B0E1 MOVS R9,R0 \ 00000098 0E00000A BEQ ??ProcessPacket_5 3529 { 3530 // t->state=0xFFFF; 3531 if (!t->local) strncpy(t->name,p->data,63); \ 0000009C 940099E5 LDR R0,[R9, #+148] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300001A BNE ??ProcessPacket_6 \ 000000A8 3F20A0E3 MOV R2,#+63 \ 000000AC 081084E2 ADD R1,R4,#+8 \ 000000B0 140089E2 ADD R0,R9,#+20 \ 000000B4 160100EF SWI +278 3532 t->group=GROUP_CACHE; \ ??ProcessPacket_6: \ 000000B8 B40197E5 LDR R0,[R7, #+436] \ 000000BC 100089E5 STR R0,[R9, #+16] 3533 ChangeContactPos(t); \ ??ProcessPacket_7: \ 000000C0 0900A0E1 MOV R0,R9 \ 000000C4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3534 RecountMenu(t,1); \ 000000C8 0110A0E3 MOV R1,#+1 \ 000000CC 0900A0E1 MOV R0,R9 \ ??ProcessPacket_8: \ 000000D0 ........ BL RecountMenu \ 000000D4 290200EA B ??ProcessPacket_1 3535 } 3536 else 3537 { 3538 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_5: \ 000000D8 B42197E5 LDR R2,[R7, #+436] \ 000000DC 000094E5 LDR R0,[R4, #+0] \ 000000E0 0030A0E3 MOV R3,#+0 \ 000000E4 081084E2 ADD R1,R4,#+8 \ 000000E8 ........ _BLF AddContact,??AddContact??rA \ 000000EC 0610A0E1 MOV R1,R6 \ 000000F0 F6FFFFEA B ??ProcessPacket_8 3539 } 3540 } 3541 else 3542 { 3543 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000F4 ........ LDR R0,??DataTable129 ;; VIBR_ON_CONNECT \ 000000F8 000090E5 LDR R0,[R0, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0100000A BEQ ??ProcessPacket_9 3544 { 3545 vibra_count=1; \ 00000104 786187E5 STR R6,[R7, #+376] 3546 start_vibra(); \ 00000108 ........ BL start_vibra 3547 } 3548 GROUP_CACHE=0; \ ??ProcessPacket_9: \ 0000010C B48187E5 STR R8,[R7, #+436] 3549 ask_my_info(); 3550 if (contactlist_menu_id) \ 00000110 B80197E5 LDR R0,[R7, #+440] \ 00000114 000050E3 CMP R0,#+0 \ 00000118 0200000A BEQ ??ProcessPacket_10 3551 { 3552 RecountMenu(NULL,1); \ 0000011C 0110A0E3 MOV R1,#+1 \ 00000120 0800A0E1 MOV R0,R8 \ ??ProcessPacket_11: \ 00000124 E9FFFFEA B ??ProcessPacket_8 3553 } 3554 else 3555 { 3556 create_contactlist_menu(); \ ??ProcessPacket_10: \ 00000128 ........ BL create_contactlist_menu \ 0000012C 130200EA B ??ProcessPacket_1 3557 // if(!dontLogOnConnect && isLogOnline) dontLogOnConnect=1; 3558 } 3559 } 3560 break; 3561 case T_GROUPID: 3562 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_12: \ 00000130 B40187E5 STR R0,[R7, #+436] \ 00000134 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000138 0090B0E1 MOVS R9,R0 \ 0000013C 0400000A BEQ ??ProcessPacket_13 3563 { 3564 strncpy(t->name,p->data,63); \ 00000140 3F20A0E3 MOV R2,#+63 \ 00000144 081084E2 ADD R1,R4,#+8 \ 00000148 140089E2 ADD R0,R9,#+20 \ 0000014C 160100EF SWI +278 3565 ChangeContactPos(t); \ 00000150 DAFFFFEA B ??ProcessPacket_7 3566 RecountMenu(t,1); 3567 } 3568 else 3569 { 3570 RecountMenu(AddGroup(p->pkt.uin,p->data),1); \ ??ProcessPacket_13: \ 00000154 000094E5 LDR R0,[R4, #+0] \ 00000158 081084E2 ADD R1,R4,#+8 \ 0000015C ........ _BLF AddGroup,??AddGroup??rA \ 00000160 0110A0E3 MOV R1,#+1 \ 00000164 D9FFFFEA B ??ProcessPacket_8 3571 } 3572 break; 3573 case T_GROUPFOLLOW: 3574 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_14: \ 00000168 B40187E5 STR R0,[R7, #+436] \ 0000016C 030200EA B ??ProcessPacket_1 3575 break; 3576 case T_STATUSCHANGE: 3577 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_15: \ 00000170 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000174 0090B0E1 MOVS R9,R0 3578 if (t) \ 00000178 A300000A BEQ ??ProcessPacket_16 3579 { 3580 int i=t->state; \ 0000017C B415D9E1 LDRH R1,[R9, #+84] 3581 CLIST *oldt=NULL; \ 00000180 00A0A0E3 MOV R10,#+0 \ 00000184 10108DE5 STR R1,[SP, #+16] \ 00000188 0A00D4E5 LDRB R0,[R4, #+10] \ 0000018C B615D9E1 LDRH R1,[R9, #+86] \ 00000190 000051E1 CMP R1,R0 \ 00000194 1D00000A BEQ ??ProcessPacket_17 3582 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 3583 { 3584 t->xstate=p->data[2]; \ 00000198 B605C9E1 STRH R0,[R9, #+86] 3585 FreeXText(t); \ 0000019C 0900A0E1 MOV R0,R9 \ 000001A0 ........ _BLF FreeXText,??FreeXText??rA 3586 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001A4 B605D9E1 LDRH R0,[R9, #+86] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 1600000A BEQ ??ProcessPacket_18 \ 000001B0 DC079FE5 LDR R0,??ProcessPacket_19+0x4 ;; ENA_AUTO_XTXT \ 000001B4 000090E5 LDR R0,[R0, #+0] \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 1200000A BEQ ??ProcessPacket_18 3587 { 3588 t->req_xtext=1; \ 000001C0 906089E5 STR R6,[R9, #+144] 3589 if (edchat_id) // Если открыт чат \ 000001C4 BC0197E5 LDR R0,[R7, #+444] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 0F00000A BEQ ??ProcessPacket_17 3590 { 3591 void *data=FindGUIbyId(edchat_id,NULL); \ 000001D0 BC0197E5 LDR R0,[R7, #+444] \ 000001D4 0010A0E3 MOV R1,#+0 \ 000001D8 090200EF SWI +521 3592 if (data) \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 0A00000A BEQ ??ProcessPacket_17 3593 { 3594 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001E4 DF0100EF SWI +479 3595 if (ed_struct) \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0700000A BEQ ??ProcessPacket_17 3596 { 3597 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001F0 000090E5 LDR R0,[R0, #+0] \ 000001F4 090050E1 CMP R0,R9 \ 000001F8 0400001A BNE ??ProcessPacket_17 3598 { 3599 t->req_xtext=0; \ 000001FC 908089E5 STR R8,[R9, #+144] 3600 RequestXText(t->uin); \ 00000200 0C0099E5 LDR R0,[R9, #+12] \ 00000204 ........ BL RequestXText \ 00000208 000000EA B ??ProcessPacket_17 3601 } 3602 } 3603 } 3604 } 3605 } 3606 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 3607 { 3608 t->req_xtext=0; \ ??ProcessPacket_18: \ 0000020C 908089E5 STR R8,[R9, #+144] 3609 } 3610 } 3611 if (contactlist_menu_id) \ ??ProcessPacket_17: \ 00000210 B80197E5 LDR R0,[R7, #+440] \ 00000214 000050E3 CMP R0,#+0 \ 00000218 0500000A BEQ ??ProcessPacket_20 3612 { 3613 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000021C B80197E5 LDR R0,[R7, #+440] \ 00000220 0010A0E3 MOV R1,#+0 \ 00000224 090200EF SWI +521 \ 00000228 8F0100EF SWI +399 \ 0000022C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000230 00A0A0E1 MOV R10,R0 3614 } 3615 if(t->state==65535) t->change=1; \ ??ProcessPacket_20: \ 00000234 B405D9E1 LDRH R0,[R9, #+84] \ 00000238 FFB0A0E3 MOV R11,#+255 \ 0000023C FFBC8BE3 ORR R11,R11,#0xFF00 \ 00000240 0B0050E1 CMP R0,R11 \ 00000244 60608905 STREQ R6,[R9, #+96] 3616 t->state=*((unsigned short *)(p->data)); \ 00000248 B800D4E1 LDRH R0,[R4, #+8] \ 0000024C B405C9E1 STRH R0,[R9, #+84] 3617 if((t->state!=65535)&&(t->change==1)) \ 00000250 0B0050E1 CMP R0,R11 \ 00000254 0400000A BEQ ??ProcessPacket_21 \ 00000258 600099E5 LDR R0,[R9, #+96] \ 0000025C 010050E3 CMP R0,#+1 3618 { 3619 t->just_now=2; \ 00000260 0200A003 MOVEQ R0,#+2 \ 00000264 5C008905 STREQ R0,[R9, #+92] 3620 t->change=0; \ 00000268 60808905 STREQ R8,[R9, #+96] 3621 } 3622 LogStatusChange(t); \ ??ProcessPacket_21: \ 0000026C 0900A0E1 MOV R0,R9 \ 00000270 ........ _BLF LogStatusChange,??LogStatusChange??rA 3623 ChangeContactPos(t); \ 00000274 0900A0E1 MOV R0,R9 \ 00000278 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3624 RecountMenu(oldt,1); \ 0000027C 0110A0E3 MOV R1,#+1 \ 00000280 0A00A0E1 MOV R0,R10 \ 00000284 ........ BL RecountMenu 3625 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ 00000288 B405D9E1 LDRH R0,[R9, #+84] \ 0000028C AC60A0E3 MOV R6,#+172 \ 00000290 406E86E3 ORR R6,R6,#0x400 \ 00000294 0B0050E1 CMP R0,R11 \ 00000298 1D00000A BEQ ??ProcessPacket_22 \ 0000029C 10109DE5 LDR R1,[SP, #+16] \ 000002A0 0B0051E1 CMP R1,R11 \ 000002A4 1A00001A BNE ??ProcessPacket_22 3626 { 3627 #ifdef EVILFOX 3628 if(!extended_sounds) 3629 { 3630 Play(sndGlobal); 3631 3632 } 3633 else 3634 { 3635 uins=t->uin; 3636 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); 3637 Play(talk_sound); 3638 3639 } 3640 #else 3641 /* 3642 #ifdef kluchnik 3643 void SetIconBarHandler(); 3644 if(t->uin==438532198) 3645 { 3646 solnce=1; 3647 SetIconBarHandler(); 3648 } 3649 #endif*/ 3650 if(!extended_sounds) \ 000002A8 ........ LDR R0,??DataTable130 ;; extended_sounds \ 000002AC E4A69FE5 LDR R10,??ProcessPacket_19+0x8 ;; sndGlobal \ 000002B0 000090E5 LDR R0,[R0, #+0] \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0300001A BNE ??ProcessPacket_23 3651 { 3652 Play(sndGlobal); \ 000002BC 0A00A0E1 MOV R0,R10 \ ??ProcessPacket_24: \ 000002C0 ........ BL Play 3653 if(isLogOnline) //by kluchnik 26.03.08 \ 000002C4 D0069FE5 LDR R0,??ProcessPacket_19+0xC ;; isLogOnline \ 000002C8 1C0000EA B ??ProcessPacket_25 3654 { 3655 FreeXText2(t); 3656 TTime time; 3657 TDate date; 3658 GetDateTime(&date,&time); 3659 char *txt=malloc(64); 3660 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); 3661 3662 t->xtext2=malloc(64); 3663 snprintf(t->xtext2,64,txt); 3664 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); 3665 ReqAddMsgToChat(t); 3666 // RecountMenu(t, 1); 3667 RecountMenu(NULL, 0); 3668 mfree(txt); 3669 } 3670 } 3671 else 3672 { 3673 FSTATS stat; 3674 int fsize; 3675 unsigned int ul = 0; 3676 uins=t->uin; 3677 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ ??ProcessPacket_23: \ 000002CC CC269FE5 LDR R2,??ProcessPacket_19+0x10 ;; sndGlobal2 \ 000002D0 14808DE5 STR R8,[SP, #+20] \ 000002D4 0C0099E5 LDR R0,[R9, #+12] \ 000002D8 D68FA0E3 MOV R8,#+856 \ 000002DC F00087E5 STR R0,[R7, #+240] \ 000002E0 0030A0E1 MOV R3,R0 \ 000002E4 4D1F85E2 ADD R1,R5,#+308 \ 000002E8 070088E0 ADD R0,R8,R7 \ 000002EC 160000EF SWI +22 3678 GetFileStats(talk_sound,&stat,&ul); \ 000002F0 14208DE2 ADD R2,SP,#+20 \ 000002F4 461F8DE2 ADD R1,SP,#+280 \ 000002F8 070088E0 ADD R0,R8,R7 \ 000002FC 840000EF SWI +132 3679 fsize=stat.size; 3680 if(fsize>0) \ 00000300 1C019DE5 LDR R0,[SP, #+284] \ 00000304 010050E3 CMP R0,#+1 3681 Play(talk_sound); \ 00000308 070088A0 ADDGE R0,R8,R7 3682 else 3683 Play(sndGlobal); \ 0000030C 0A00A0B1 MOVLT R0,R10 \ 00000310 EAFFFFEA B ??ProcessPacket_24 3684 if(isLogOnline ) //by kluchnik 26.03.08 3685 { 3686 FreeXText2(t); 3687 TTime time; 3688 TDate date; 3689 GetDateTime(&date,&time); 3690 char *txt=malloc(64); 3691 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); 3692 3693 t->xtext2=malloc(64); 3694 snprintf(t->xtext2,64,txt); 3695 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); 3696 ReqAddMsgToChat(t); 3697 // RecountMenu(t, 1); 3698 RecountMenu(NULL, 0); 3699 mfree(txt); 3700 } 3701 } 3702 #endif 3703 } 3704 3705 if ((i!=0xFFFF)&&(t->state==0xFFFF))//Звук \ ??ProcessPacket_22: \ 00000314 10109DE5 LDR R1,[SP, #+16] \ 00000318 0B0051E1 CMP R1,R11 \ 0000031C 3500000A BEQ ??ProcessPacket_26 \ 00000320 0B0050E1 CMP R0,R11 \ 00000324 3300001A BNE ??ProcessPacket_26 3706 { 3707 Play(sndSrvMsg); \ 00000328 74069FE5 LDR R0,??ProcessPacket_19+0x14 ;; sndSrvMsg \ 0000032C ........ BL Play 3708 3709 //-------------------- Log offline ----------------------// 3710 3711 if(t->isactive && isLogOffline) // by kluchnik 26.03.08 \ 00000330 800099E5 LDR R0,[R9, #+128] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 2E00000A BEQ ??ProcessPacket_26 \ 0000033C 64069FE5 LDR R0,??ProcessPacket_19+0x18 ;; isLogOffline \ ??ProcessPacket_25: \ 00000340 000090E5 LDR R0,[R0, #+0] \ 00000344 000050E3 CMP R0,#+0 \ 00000348 2A00000A BEQ ??ProcessPacket_26 3712 { 3713 FreeXText2(t); \ 0000034C 0900A0E1 MOV R0,R9 \ 00000350 ........ BL FreeXText2 3714 TTime time; 3715 TDate date; 3716 GetDateTime(&date,&time); \ 00000354 0D10A0E1 MOV R1,SP \ 00000358 08008DE2 ADD R0,SP,#+8 \ 0000035C B40000EF SWI +180 3717 char *txt=malloc(64); \ 00000360 4000A0E3 MOV R0,#+64 \ 00000364 140000EF SWI +20 \ 00000368 0080A0E1 MOV R8,R0 3718 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); \ 0000036C 0D00DDE5 LDRB R0,[SP, #+13] \ 00000370 051086E0 ADD R1,R6,R5 \ 00000374 01002DE9 PUSH {R0} \ 00000378 1000DDE5 LDRB R0,[SP, #+16] \ 0000037C 01002DE9 PUSH {R0} \ 00000380 0A00DDE5 LDRB R0,[SP, #+10] \ 00000384 01002DE9 PUSH {R0} \ 00000388 0C20DDE5 LDRB R2,[SP, #+12] \ 0000038C 0D30DDE5 LDRB R3,[SP, #+13] \ 00000390 0800A0E1 MOV R0,R8 \ 00000394 160000EF SWI +22 3719 3720 t->xtext2=malloc(64); \ 00000398 4000A0E3 MOV R0,#+64 \ 0000039C 140000EF SWI +20 \ 000003A0 8C0089E5 STR R0,[R9, #+140] 3721 snprintf(t->xtext2,64,txt); \ 000003A4 0820A0E1 MOV R2,R8 \ 000003A8 4010A0E3 MOV R1,#+64 \ 000003AC 1B0100EF SWI +283 3722 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); \ 000003B0 0000A0E3 MOV R0,#+0 \ 000003B4 01002DE9 PUSH {R0} \ 000003B8 0820A0E1 MOV R2,R8 \ 000003BC 0310A0E3 MOV R1,#+3 \ 000003C0 0000E0E1 MVN R0,R0 \ 000003C4 01002DE9 PUSH {R0} \ 000003C8 920F86E2 ADD R0,R6,#+584 \ 000003CC 053080E0 ADD R3,R0,R5 \ 000003D0 0900A0E1 MOV R0,R9 \ 000003D4 ........ BL AddStringToLog 3723 ReqAddMsgToChat(t); \ 000003D8 0900A0E1 MOV R0,R9 \ 000003DC ........ BL ReqAddMsgToChat 3724 // RecountMenu(t, 1); 3725 RecountMenu(NULL, 0); \ 000003E0 0010A0E3 MOV R1,#+0 \ 000003E4 0000A0E3 MOV R0,#+0 \ 000003E8 ........ BL RecountMenu 3726 mfree(txt); \ 000003EC 0800A0E1 MOV R0,R8 \ 000003F0 150000EF SWI +21 \ 000003F4 14D08DE2 ADD SP,SP,#+20 3727 } 3728 } 3729 3730 //------------------------------------------------------------// 3731 3732 if(TIME_OR_MSG==2) \ ??ProcessPacket_26: \ 000003F8 ........ LDR R0,??DataTable131 ;; TIME_OR_MSG \ 000003FC 000090E5 LDR R0,[R0, #+0] \ 00000400 020050E3 CMP R0,#+2 \ 00000404 0000001A BNE ??ProcessPacket_16 3733 Get_Online_total(); \ 00000408 ........ BL Get_Online_total 3734 } 3735 if (edchat_id) \ ??ProcessPacket_16: \ 0000040C BC0197E5 LDR R0,[R7, #+444] \ 00000410 000050E3 CMP R0,#+0 \ 00000414 5901000A BEQ ??ProcessPacket_1 3736 { 3737 void *data=FindGUIbyId(edchat_id,NULL); \ 00000418 BC0197E5 LDR R0,[R7, #+444] \ 0000041C 0010A0E3 MOV R1,#+0 \ 00000420 090200EF SWI +521 3738 { 3739 EDCHAT_STRUCT *ed_struct; 3740 ed_struct=EDIT_GetUserPointer(data); \ 00000424 DF0100EF SWI +479 3741 if (ed_struct) \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 5301000A BEQ ??ProcessPacket_1 3742 { 3743 if (ed_struct->ed_contact==t) \ 00000430 000090E5 LDR R0,[R0, #+0] \ 00000434 090050E1 CMP R0,R9 \ 00000438 5001001A BNE ??ProcessPacket_1 3744 { 3745 DirectRedrawGUI_ID(edchat_id); \ 0000043C BC0197E5 LDR R0,[R7, #+444] \ 00000440 400100EF SWI +320 \ 00000444 4D0100EA B ??ProcessPacket_1 3746 } 3747 } 3748 } 3749 } 3750 break; 3751 case T_RECVMSG: 3752 NEW_MSG=1; \ ??ProcessPacket_27: \ 00000448 E06187E5 STR R6,[R7, #+480] 3753 t=FindContactByUin(p->pkt.uin); \ 0000044C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000450 0090B0E1 MOVS R9,R0 3754 if (!t) \ 00000454 0900001A BNE ??ProcessPacket_28 3755 { 3756 sprintf(s,percent_d,p->pkt.uin); \ 00000458 002094E5 LDR R2,[R4, #+0] \ 0000045C 1B1085E2 ADD R1,R5,#+27 \ 00000460 18008DE2 ADD R0,SP,#+24 \ 00000464 160000EF SWI +22 3757 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 00000468 B42197E5 LDR R2,[R7, #+436] \ 0000046C 000094E5 LDR R0,[R4, #+0] \ 00000470 0030A0E3 MOV R3,#+0 \ 00000474 18108DE2 ADD R1,SP,#+24 \ 00000478 ........ _BLF AddContact,??AddContact??rA \ 0000047C 0090A0E1 MOV R9,R0 3758 } 3759 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ 000004B8 5A0FA013 MOVNE R0,#+360 \ 000004BC 80008915 STRNE R0,[R9, #+128] 3762 // ChangeContactPos(t); 3763 if(VIBR_TYPE) \ 000004C0 ........ LDR R0,??DataTable134 ;; VIBR_TYPE \ 000004C4 000090E5 LDR R0,[R0, #+0] \ 000004C8 000050E3 CMP R0,#+0 3764 vibra_count=2; \ 000004CC 0200A013 MOVNE R0,#+2 \ 000004D0 78018715 STRNE R0,[R7, #+376] 3765 else 3766 vibra_count=1; \ 000004D4 78618705 STREQ R6,[R7, #+376] 3767 start_vibra(); \ 000004D8 ........ BL start_vibra 3768 #ifdef ELKA 3769 if(SLI_TYPE) 3770 SLI_Timer(); \ 000004DC ........ BL SLI_Timer 3771 #endif 3772 if(Is_Double_Vibra_On) \ 000004E0 0C0197E5 LDR R0,[R7, #+268] \ 000004E4 000050E3 CMP R0,#+0 \ 000004E8 0000000A BEQ ??ProcessPacket_30 3773 Reminder_timer(); \ 000004EC ........ BL Reminder_timer 3774 if (Is_ILU_On) \ ??ProcessPacket_30: \ 000004F0 080197E5 LDR R0,[R7, #+264] \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 0800000A BEQ ??ProcessPacket_31 3775 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000004FC A8049FE5 LDR R0,??ProcessPacket_19+0x1C ;; ILL_RECV_FADE \ 00000500 003090E5 LDR R3,[R0, #+0] \ 00000504 A4049FE5 LDR R0,??ProcessPacket_19+0x20 ;; ILL_RECV_TMR \ 00000508 002090E5 LDR R2,[R0, #+0] \ 0000050C A0049FE5 LDR R0,??ProcessPacket_19+0x24 ;; ILL_KEYS_RECV \ 00000510 001090E5 LDR R1,[R0, #+0] \ 00000514 9C049FE5 LDR R0,??ProcessPacket_19+0x28 ;; ILL_DISP_RECV \ 00000518 000090E5 LDR R0,[R0, #+0] \ 0000051C ........ BL IlluminationOn 3776 if (t->name[0]=='#') \ ??ProcessPacket_31: \ 00000520 1400D9E5 LDRB R0,[R9, #+20] \ 00000524 230050E3 CMP R0,#+35 \ 00000528 1700001A BNE ??ProcessPacket_32 3777 { 3778 //Если это конференция, патчим имя 3779 char *s=strchr(p->data,'>'); \ 0000052C 3E10A0E3 MOV R1,#+62 \ 00000530 080084E2 ADD R0,R4,#+8 \ 00000534 180000EF SWI +24 3780 //Если нашли символ > и после него пробел и ник короче 16 символов 3781 if (s) \ 00000538 000050E3 CMP R0,#+0 \ 0000053C 1200000A BEQ ??ProcessPacket_32 3782 { 3783 if ((s[1]==' ')&&((s-p->data)<16)) \ 00000540 0110D0E5 LDRB R1,[R0, #+1] \ 00000544 200051E3 CMP R1,#+32 \ 00000548 0F00001A BNE ??ProcessPacket_32 \ 0000054C 081084E2 ADD R1,R4,#+8 \ 00000550 011040E0 SUB R1,R0,R1 \ 00000554 100051E3 CMP R1,#+16 \ 00000558 0B0000AA BGE ??ProcessPacket_32 3784 { 3785 *s=0; //Режем строку \ 0000055C 0080C0E5 STRB R8,[R0, #+0] 3786 AddStringToLog(t,0x02,s+2,p->data,0xFFFFFFFF,1); //Добавляем имя из текста сообщения \ 00000560 0110A0E3 MOV R1,#+1 \ 00000564 02002DE9 PUSH {R1} \ 00000568 083084E2 ADD R3,R4,#+8 \ 0000056C 022080E2 ADD R2,R0,#+2 \ 00000570 0900A0E1 MOV R0,R9 \ 00000574 001061E2 RSB R1,R1,#+0 \ 00000578 02002DE9 PUSH {R1} \ 0000057C 0210A0E3 MOV R1,#+2 \ 00000580 ........ BL AddStringToLog 3787 goto L1; \ 00000584 08D08DE2 ADD SP,SP,#+8 \ 00000588 2A0000EA B ??ProcessPacket_33 3788 } 3789 } 3790 } 3791 3792 //=================== tas bus jautri ===================// 3793 3794 comanda=1; \ ??ProcessPacket_32: \ 0000058C E86187E5 STR R6,[R7, #+488] 3795 // if(UIN!=t->uin) 3796 CheckComand(p->data, t, t->name); \ 00000590 142089E2 ADD R2,R9,#+20 \ 00000594 0910A0E1 MOV R1,R9 \ 00000598 080084E2 ADD R0,R4,#+8 \ 0000059C ........ BL CheckComand 3797 if(comanda==1) \ 000005A0 E80197E5 LDR R0,[R7, #+488] \ 000005A4 010050E3 CMP R0,#+1 \ 000005A8 2200001A BNE ??ProcessPacket_33 3798 { 3799 AddStringToLog(t,0x02,p->data,t->name,0xFFFFFFFF,1); \ 000005AC 01002DE9 PUSH {R0} \ 000005B0 143089E2 ADD R3,R9,#+20 \ 000005B4 082084E2 ADD R2,R4,#+8 \ 000005B8 0210A0E3 MOV R1,#+2 \ 000005BC 000066E2 RSB R0,R6,#+0 \ 000005C0 01002DE9 PUSH {R0} \ 000005C4 0900A0E1 MOV R0,R9 \ 000005C8 ........ BL AddStringToLog 3800 main_count++; \ 000005CC ........ LDR R0,??DataTable135 ;; main_count \ 000005D0 001090E5 LDR R1,[R0, #+0] \ 000005D4 011081E2 ADD R1,R1,#+1 \ 000005D8 001080E5 STR R1,[R0, #+0] 3801 if(Is_INC_On) \ 000005DC 040197E5 LDR R0,[R7, #+260] \ 000005E0 08D08DE2 ADD SP,SP,#+8 \ 000005E4 000050E3 CMP R0,#+0 \ 000005E8 0C00000A BEQ ??ProcessPacket_34 3802 { 3803 strcpy(show_nick, t->name); \ 000005EC 141089E2 ADD R1,R9,#+20 \ 000005F0 4400A0E3 MOV R0,#+68 \ 000005F4 700D80E3 ORR R0,R0,#0x1C00 \ 000005F8 070080E0 ADD R0,R0,R7 \ 000005FC 1A0000EF SWI +26 3804 if(!IsIdleUiOnTop()&&(!saver_on)) \ 00000600 C50000EF SWI +197 \ 00000604 000050E3 CMP R0,#+0 \ 00000608 F4009705 LDREQ R0,[R7, #+244] \ 0000060C 00005003 CMPEQ R0,#+0 \ 00000610 0200001A BNE ??ProcessPacket_34 3805 { 3806 //int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 3807 // char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 3808 // if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) 3809 // { 3810 INC_show=15; \ 00000614 0F00A0E3 MOV R0,#+15 \ 00000618 EC0187E5 STR R0,[R7, #+492] 3811 show_pp_sender(); \ 0000061C ........ BL show_pp_sender 3812 //} 3813 } 3814 } 3815 if(Is_SMARTCPU_On) \ ??ProcessPacket_34: \ 00000620 000197E5 LDR R0,[R7, #+256] \ 00000624 000050E3 CMP R0,#+0 \ 00000628 0200000A BEQ ??ProcessPacket_33 3816 AddToMain(t->name,p->data); \ 0000062C 081084E2 ADD R1,R4,#+8 \ 00000630 140089E2 ADD R0,R9,#+20 \ 00000634 ........ BL AddToMain 3817 } 3818 // if((Is_SMARTCPU_On)&&(comanda==1)) 3819 // AddToMain(t->name,p->data); 3820 L1: 3821 //Разворачиваем группу, в которой пришло сообщение 3822 { 3823 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_33: \ 00000638 100099E5 LDR R0,[R9, #+16] \ 0000063C ........ _BLF FindGroupByID,??FindGroupByID??rA 3824 if (g) \ 00000640 000050E3 CMP R0,#+0 3825 { 3826 if (g->state) \ 00000644 B415D011 LDRHNE R1,[R0, #+84] \ 00000648 00005113 CMPNE R1,#+0 3827 { 3828 g->state=0; \ 0000064C B485C011 STRHNE R8,[R0, #+84] 3829 } 3830 } 3831 } 3832 // if(comanda==1) 3833 // { 3834 ReqAddMsgToChat(t); \ 00000650 0900A0E1 MOV R0,R9 \ 00000654 ........ BL ReqAddMsgToChat 3835 RecountMenu(t,1); \ 00000658 0110A0E3 MOV R1,#+1 \ 0000065C 0900A0E1 MOV R0,R9 \ 00000660 ........ BL RecountMenu 3836 extern const int DEVELOP_IF; 3837 switch (DEVELOP_IF) \ 00000664 50039FE5 LDR R0,??ProcessPacket_19+0x2C ;; DEVELOP_IF \ 00000668 000090E5 LDR R0,[R0, #+0] \ 0000066C 000050E3 CMP R0,#+0 \ 00000670 0400000A BEQ ??ProcessPacket_35 \ 00000674 010050E2 SUBS R0,R0,#+1 \ 00000678 0B00000A BEQ ??ProcessPacket_36 \ 0000067C 020050E2 SUBS R0,R0,#+2 \ 00000680 1300000A BEQ ??ProcessPacket_37 \ 00000684 BD0000EA B ??ProcessPacket_1 3838 { 3839 case 0: 3840 #ifdef EVILFOX 3841 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) GBS_StartTimerProc(&develop, 216*2, to_develop); 3842 #else 3843 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) to_develop(); \ ??ProcessPacket_35: \ 00000688 068100EF SWI +33030 \ 0000068C 080090E5 LDR R0,[R0, #+8] \ 00000690 141197E5 LDR R1,[R7, #+276] \ 00000694 0C0090E5 LDR R0,[R0, #+12] \ 00000698 0C0090E5 LDR R0,[R0, #+12] \ 0000069C 010050E1 CMP R0,R1 \ ??ProcessPacket_38: \ 000006A0 B600000A BEQ ??ProcessPacket_1 \ 000006A4 ........ BL to_develop \ 000006A8 B40000EA B ??ProcessPacket_1 3844 #endif 3845 break; 3846 case 1: 3847 #ifdef EVILFOX 3848 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) GBS_StartTimerProc(&develop, 216*2, to_develop); 3849 #else 3850 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) to_develop(); \ ??ProcessPacket_36: \ 000006AC 068100EF SWI +33030 \ 000006B0 080090E5 LDR R0,[R0, #+8] \ 000006B4 141197E5 LDR R1,[R7, #+276] \ 000006B8 0C0090E5 LDR R0,[R0, #+12] \ 000006BC 0C0090E5 LDR R0,[R0, #+12] \ 000006C0 010050E1 CMP R0,R1 \ 000006C4 AD00000A BEQ ??ProcessPacket_1 \ 000006C8 430000EF SWI +67 \ 000006CC 000050E3 CMP R0,#+0 \ 000006D0 F2FFFFEA B ??ProcessPacket_38 3851 #endif 3852 break; 3853 case 2: 3854 break; 3855 case 3: 3856 GBS_DelTimer(&develop); \ ??ProcessPacket_37: \ 000006D4 BC00A0E3 MOV R0,#+188 \ 000006D8 680D80E3 ORR R0,R0,#0x1A00 \ 000006DC 070080E0 ADD R0,R0,R7 \ 000006E0 8C0100EF SWI +396 3857 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 000006E4 068100EF SWI +33030 \ 000006E8 080090E5 LDR R0,[R0, #+8] \ 000006EC 141197E5 LDR R1,[R7, #+276] \ 000006F0 0C0090E5 LDR R0,[R0, #+12] \ 000006F4 0C0090E5 LDR R0,[R0, #+12] \ 000006F8 010050E1 CMP R0,R1 \ 000006FC 9F00000A BEQ ??ProcessPacket_1 \ 00000700 430000EF SWI +67 \ 00000704 000050E3 CMP R0,#+0 \ 00000708 9C00001A BNE ??ProcessPacket_1 \ 0000070C ........ BL begin_to_develop \ 00000710 9A0000EA B ??ProcessPacket_1 3858 break; 3859 } 3860 // } 3861 break; 3862 case T_SRV_ACK: 3863 case T_CLIENT_ACK: 3864 q=FindContactLOGQByAck(p); \ ??ProcessPacket_39: \ 00000714 0400A0E1 MOV R0,R4 \ 00000718 ........ BL FindContactLOGQByAck 3865 /* if (q&&(p->pkt.type==T_SRV_ACK)) 3866 { 3867 if (Is_ILU_On) 3868 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); 3869 }//Illumination by BoBa 19.04.2007 */ 3870 /* if (( 3871 IsGuiOnTop(contactlist_menu_id)|| 3872 IsGuiOnTop(edchat_id) 3873 )&&(q)) 3874 { 3875 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 3876 GetPaletteAdrByColorIndex(0), 3877 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 3878 }*/ 3879 if (q) \ 0000071C 000050E3 CMP R0,#+0 \ 00000720 9600000A BEQ ??ProcessPacket_1 3880 { 3881 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 00000724 B410D4E1 LDRH R1,[R4, #+4] \ 00000728 100051E3 CMP R1,#+16 \ 0000072C 0110A003 MOVEQ R1,#+1 \ 00000730 0210A013 MOVNE R1,#+2 \ 00000734 041080E5 STR R1,[R0, #+4] 3882 t=FindContactByUin(p->pkt.uin); \ 00000738 000094E5 LDR R0,[R4, #+0] \ 0000073C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000740 0090A0E1 MOV R9,R0 3883 if (edchat_id) \ 00000744 BC0197E5 LDR R0,[R7, #+444] \ 00000748 000050E3 CMP R0,#+0 \ 0000074C 8B00000A BEQ ??ProcessPacket_1 3884 { 3885 void *data=FindGUIbyId(edchat_id,NULL); \ 00000750 BC0197E5 LDR R0,[R7, #+444] \ 00000754 0010A0E3 MOV R1,#+0 \ 00000758 090200EF SWI +521 \ 0000075C 0050B0E1 MOVS R5,R0 3886 if (data) \ 00000760 8600000A BEQ ??ProcessPacket_1 3887 { 3888 EDCHAT_STRUCT *ed_struct; 3889 ed_struct=EDIT_GetUserPointer(data); \ 00000764 DF0100EF SWI +479 3890 if (ed_struct) \ 00000768 000050E3 CMP R0,#+0 \ 0000076C 8300000A BEQ ??ProcessPacket_1 3891 { 3892 if (ed_struct->ed_contact==t) \ 00000770 000090E5 LDR R0,[R0, #+0] \ 00000774 090050E1 CMP R0,R9 \ 00000778 8000001A BNE ??ProcessPacket_1 3893 { 3894 if (EDIT_IsBusy(data)) \ 0000077C 0500A0E1 MOV R0,R5 \ 00000780 1C0200EF SWI +540 \ 00000784 000050E3 CMP R0,#+0 \ 00000788 0300000A BEQ ??ProcessPacket_40 3895 { 3896 t->req_drawack=1; \ 0000078C 706089E5 STR R6,[R9, #+112] 3897 #ifdef EVILFOX 3898 time_to_stop_t9=2; 3899 #else 3900 time_to_stop_t9=3; \ 00000790 0300A0E3 MOV R0,#+3 \ 00000794 E40187E5 STR R0,[R7, #+484] \ 00000798 780000EA B ??ProcessPacket_1 3901 #endif 3902 } 3903 else { 3904 DrawAck(data); \ ??ProcessPacket_40: \ 0000079C 0500A0E1 MOV R0,R5 \ 000007A0 ........ BL DrawAck 3905 if (p->pkt.type==T_SRV_ACK) \ 000007A4 B400D4E1 LDRH R0,[R4, #+4] \ 000007A8 100050E3 CMP R0,#+16 \ 000007AC 7300001A BNE ??ProcessPacket_1 3906 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000007B0 F4019FE5 LDR R0,??ProcessPacket_19+0x1C ;; ILL_RECV_FADE \ 000007B4 003090E5 LDR R3,[R0, #+0] \ 000007B8 00029FE5 LDR R0,??ProcessPacket_19+0x30 ;; ILL_SEND_TMR \ 000007BC 002090E5 LDR R2,[R0, #+0] \ 000007C0 FC019FE5 LDR R0,??ProcessPacket_19+0x34 ;; ILL_KEYS_SEND \ 000007C4 001090E5 LDR R1,[R0, #+0] \ 000007C8 F8019FE5 LDR R0,??ProcessPacket_19+0x38 ;; ILL_DISP_SEND \ 000007CC 000090E5 LDR R0,[R0, #+0] \ 000007D0 ........ BL IlluminationOn \ 000007D4 690000EA B ??ProcessPacket_1 3907 } 3908 } 3909 } 3910 } 3911 } 3912 } 3913 break; 3914 case T_XTEXT_ACK: 3915 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_41: \ 000007D8 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000007DC 0090B0E1 MOVS R9,R0 3916 if (t) \ 000007E0 6600000A BEQ ??ProcessPacket_1 3917 { 3918 int i; 3919 int j; 3920 FreeXText(t); \ 000007E4 ........ _BLF FreeXText,??FreeXText??rA 3921 i=p->pkt.data_len; \ 000007E8 B660D4E1 LDRH R6,[R4, #+6] 3922 memcpy(t->xtext=malloc(i),p->data,i); \ 000007EC 0600A0E1 MOV R0,R6 \ 000007F0 140000EF SWI +20 \ 000007F4 880089E5 STR R0,[R9, #+136] \ 000007F8 0620A0E1 MOV R2,R6 \ 000007FC 081084E2 ADD R1,R4,#+8 \ 00000800 1E0100EF SWI +286 3923 zeromem(s,256); \ 00000804 401FA0E3 MOV R1,#+256 \ 00000808 18008DE2 ADD R0,SP,#+24 \ 0000080C 1D0100EF SWI +285 3924 strcpy(s,t->name); \ 00000810 141089E2 ADD R1,R9,#+20 \ 00000814 18008DE2 ADD R0,SP,#+24 \ 00000818 1A0000EF SWI +26 3925 strcat(s,":\n"); \ 0000081C 5B1F8FE2 ADR R1,??ProcessPacket_19 ;; ":\n" \ 00000820 18008DE2 ADD R0,SP,#+24 \ 00000824 170000EF SWI +23 3926 i=strlen(s); \ 00000828 18008DE2 ADD R0,SP,#+24 \ 0000082C 1B0000EF SWI +27 3927 j=p->data[0]; \ 00000830 0860D4E5 LDRB R6,[R4, #+8] \ 00000834 0070A0E1 MOV R7,R0 3928 if (j>(255-i)) j=255-i; \ 00000838 FF0067E2 RSB R0,R7,#+255 \ 0000083C 060050E1 CMP R0,R6 \ 00000840 0060A0B1 MOVLT R6,R0 3929 strncpy(s+i,p->data+1,j); \ 00000844 0620A0E1 MOV R2,R6 \ 00000848 091084E2 ADD R1,R4,#+9 \ 0000084C 18008DE2 ADD R0,SP,#+24 \ 00000850 000087E0 ADD R0,R7,R0 \ 00000854 160100EF SWI +278 3930 i+=j; \ 00000858 070086E0 ADD R0,R6,R7 3931 if (i<255) \ 0000085C FF0050E3 CMP R0,#+255 \ 00000860 100000AA BGE ??ProcessPacket_42 3932 { 3933 s[i]='\n'; \ 00000864 18108DE2 ADD R1,SP,#+24 \ 00000868 0A20A0E3 MOV R2,#+10 \ 0000086C 0120C0E7 STRB R2,[R0, +R1] 3934 i++; \ 00000870 0810D4E5 LDRB R1,[R4, #+8] \ 00000874 B620D4E1 LDRH R2,[R4, #+6] \ 00000878 010080E2 ADD R0,R0,#+1 3935 j=p->pkt.data_len-p->data[0]-1; 3936 if (j>(255-i)) j=255-i; 3937 strncpy(s+i,p->data+p->data[0]+1,j); \ 0000087C 18308DE2 ADD R3,SP,#+24 \ 00000880 012042E0 SUB R2,R2,R1 \ 00000884 016042E2 SUB R6,R2,#+1 \ 00000888 FF2060E2 RSB R2,R0,#+255 \ 0000088C 060052E1 CMP R2,R6 \ 00000890 0260A0B1 MOVLT R6,R2 \ 00000894 0620A0E1 MOV R2,R6 \ 00000898 041081E0 ADD R1,R1,R4 \ 0000089C 091081E2 ADD R1,R1,#+9 \ 000008A0 030080E0 ADD R0,R0,R3 \ 000008A4 160100EF SWI +278 3938 } 3939 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 3940 //if (!edchat_id && // Только если редактор не наверху 3941 // strlen(p->data)) // и x-status не пустой 3942 // ShowMSG(0,(int)s); 3943 3944 /* 3945 #ifdef EVILFOX 3946 #else 3947 if (!edchat_id) ShowMSG(0,(int)s); // Только если редактор не наверху 3948 #endif 3949 */ 3950 zeromem(s,256); \ ??ProcessPacket_42: \ 000008A8 401FA0E3 MOV R1,#+256 \ 000008AC 18008DE2 ADD R0,SP,#+24 \ 000008B0 1D0100EF SWI +285 3951 i=0; 3952 j=p->data[0]; \ 000008B4 0860D4E5 LDRB R6,[R4, #+8] 3953 if (j>(255-i)) j=255-i; 3954 strncpy(s,p->data+1,j); \ 000008B8 091084E2 ADD R1,R4,#+9 \ 000008BC 18008DE2 ADD R0,SP,#+24 \ 000008C0 400F56E3 CMP R6,#+256 \ 000008C4 FF60A0A3 MOVGE R6,#+255 \ 000008C8 0620A0E1 MOV R2,R6 \ 000008CC 160100EF SWI +278 3955 i+=j; 3956 if (i<255) \ 000008D0 FF0056E3 CMP R6,#+255 \ 000008D4 100000AA BGE ??ProcessPacket_43 3957 { 3958 s[i++]=13; \ 000008D8 18108DE2 ADD R1,SP,#+24 \ 000008DC 0D20A0E3 MOV R2,#+13 \ 000008E0 0120C6E7 STRB R2,[R6, +R1] \ 000008E4 0810D4E5 LDRB R1,[R4, #+8] \ 000008E8 B620D4E1 LDRH R2,[R4, #+6] \ 000008EC 010086E2 ADD R0,R6,#+1 3959 j=p->pkt.data_len-p->data[0]-1; 3960 if (j>(255-i)) j=255-i; 3961 strncpy(s+i,p->data+p->data[0]+1,j); \ 000008F0 18308DE2 ADD R3,SP,#+24 \ 000008F4 012042E0 SUB R2,R2,R1 \ 000008F8 016042E2 SUB R6,R2,#+1 \ 000008FC FF2060E2 RSB R2,R0,#+255 \ 00000900 060052E1 CMP R2,R6 \ 00000904 0260A0B1 MOVLT R6,R2 \ 00000908 0620A0E1 MOV R2,R6 \ 0000090C 041081E0 ADD R1,R1,R4 \ 00000910 091081E2 ADD R1,R1,#+9 \ 00000914 030080E0 ADD R0,R0,R3 \ 00000918 160100EF SWI +278 3962 } 3963 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_43: \ 0000091C 0100A0E3 MOV R0,#+1 \ 00000920 01002DE9 PUSH {R0} \ 00000924 0310A0E3 MOV R1,#+3 \ 00000928 000060E2 RSB R0,R0,#+0 \ 0000092C 01002DE9 PUSH {R0} \ 00000930 20208DE2 ADD R2,SP,#+32 \ 00000934 F400A0E3 MOV R0,#+244 \ 00000938 600E80E3 ORR R0,R0,#0x600 \ 0000093C 053080E0 ADD R3,R0,R5 \ 00000940 0900A0E1 MOV R0,R9 \ 00000944 ........ BL AddStringToLog 3964 ReqAddMsgToChat(t); \ 00000948 0900A0E1 MOV R0,R9 \ 0000094C ........ BL ReqAddMsgToChat 3965 if (strlen(p->data)) // Если x-status не пустой \ 00000950 080084E2 ADD R0,R4,#+8 \ 00000954 1B0000EF SWI +27 \ 00000958 000050E3 CMP R0,#+0 \ 0000095C 08D08DE2 ADD SP,SP,#+8 3966 RecountMenu(t, 1); \ 00000960 0110A013 MOVNE R1,#+1 \ 00000964 0900A011 MOVNE R0,R9 \ 00000968 D8FDFF1A BNE ??ProcessPacket_8 3967 else 3968 RecountMenu(NULL, 0); \ 0000096C 0010A0E3 MOV R1,#+0 \ 00000970 0100A0E1 MOV R0,R1 \ 00000974 D5FDFFEA B ??ProcessPacket_8 3969 } 3970 break; 3971 case T_LASTPRIVACY: 3972 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_44: \ 00000978 0800D4E5 LDRB R0,[R4, #+8] \ 0000097C 740187E5 STR R0,[R7, #+372] 3973 break; 3974 } 3975 mfree(p); \ ??ProcessPacket_1: \ 00000980 0400A0E1 MOV R0,R4 \ 00000984 150000EF SWI +21 3976 } \ 00000988 50DF8DE2 ADD SP,SP,#+320 \ 0000098C F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_19: \ 00000990 3A0A0000 DC8 ":\n",+0 \ 00000994 ........ DC32 ENA_AUTO_XTXT \ 00000998 ........ DC32 sndGlobal \ 0000099C ........ DC32 isLogOnline \ 000009A0 ........ DC32 sndGlobal2 \ 000009A4 ........ DC32 sndSrvMsg \ 000009A8 ........ DC32 isLogOffline \ 000009AC ........ DC32 ILL_RECV_FADE \ 000009B0 ........ DC32 ILL_RECV_TMR \ 000009B4 ........ DC32 ILL_KEYS_RECV \ 000009B8 ........ DC32 ILL_DISP_RECV \ 000009BC ........ DC32 DEVELOP_IF \ 000009C0 ........ DC32 ILL_SEND_TMR \ 000009C4 ........ DC32 ILL_KEYS_SEND \ 000009C8 ........ DC32 ILL_DISP_SEND 3977 3978 3979 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 3980 void process_active_timer(void) 3981 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 3982 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable142 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 880195E5 LDR R0,[R5, #+392] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 3983 { 3984 if (++tenseconds_to_ping>12) \ 00000018 C40195E5 LDR R0,[R5, #+452] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 C40185E5 STR R0,[R5, #+452] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 3985 { 3986 tenseconds_to_ping=0; 3987 SUBPROC((void *)do_ping); \ 0000002C 58009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 C44185E5 STR R4,[R5, #+452] \ 00000034 710100EF SWI +369 3988 } 3989 } 3990 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable139 ;; `?ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000008 ........ LDR R7,??DataTable139 ;; `?ws1,"\nLoading images..."); 4027 4028 if(total_smiles) \ 000001AC B0019FE5 LDR R0,??method0_0+0x8 ;; total_smiles \ 000001B0 001090E5 LDR R1,[R0, #+0] \ 000001B4 18D08DE2 ADD SP,SP,#+24 \ 000001B8 000051E3 CMP R1,#+0 \ 000001BC 0500000A BEQ ??method0_2 4029 { 4030 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001C0 002090E5 LDR R2,[R0, #+0] \ 000001C4 0800A0E3 MOV R0,#+8 \ 000001C8 500E80E3 ORR R0,R0,#0x500 \ 000001CC 071080E0 ADD R1,R0,R7 \ 000001D0 340094E5 LDR R0,[R4, #+52] \ 000001D4 160200EF SWI +534 4031 } 4032 if (xstatuses_load) \ ??method0_2: \ 000001D8 88019FE5 LDR R0,??method0_0+0xC ;; xstatuses_load \ 000001DC 000090E5 LDR R0,[R0, #+0] \ 000001E0 000050E3 CMP R0,#+0 \ 000001E4 0600000A BEQ ??method0_1 4033 { 4034 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001E8 ........ LDR R0,??DataTable141 ;; total_xstatuses \ 000001EC 002090E5 LDR R2,[R0, #+0] \ 000001F0 1C00A0E3 MOV R0,#+28 \ 000001F4 500E80E3 ORR R0,R0,#0x500 \ 000001F8 071080E0 ADD R1,R0,R7 \ 000001FC 340094E5 LDR R0,[R4, #+52] \ 00000200 160200EF SWI +534 4035 } 4036 } 4037 #ifdef kluchnik 4038 4039 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4040 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_1: \ 00000204 1700A0E3 MOV R0,#+23 \ 00000208 2E0100EF SWI +302 \ 0000020C 0090A0E1 MOV R9,R0 \ 00000210 0000A0E3 MOV R0,#+0 \ 00000214 2E0100EF SWI +302 \ 00000218 00A0A0E1 MOV R10,R0 \ 0000021C 0500A0E3 MOV R0,#+5 \ 00000220 C50100EF SWI +453 \ 00000224 04109DE5 LDR R1,[SP, #+4] \ 00000228 00022DE9 PUSH {R9} \ 0000022C 048041E2 SUB R8,R1,#+4 \ 00000230 00042DE9 PUSH {R10} \ 00000234 0010A0E3 MOV R1,#+0 \ 00000238 02002DE9 PUSH {R1} \ 0000023C 04B045E2 SUB R11,R5,#+4 \ 00000240 00004BE0 SUB R0,R11,R0 \ 00000244 0830A0E1 MOV R3,R8 \ 00000248 0810A0E3 MOV R1,#+8 \ 0000024C 02002DE9 PUSH {R1} \ 00000250 01002DE9 PUSH {R0} \ 00000254 340094E5 LDR R0,[R4, #+52] \ 00000258 1B20A0E3 MOV R2,#+27 \ 0000025C 0310A0E3 MOV R1,#+3 \ 00000260 4C0100EF SWI +332 4041 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000264 380094E5 LDR R0,[R4, #+56] \ 00000268 532E87E2 ADD R2,R7,#+1328 \ 0000026C 181087E2 ADD R1,R7,#+24 \ 00000270 240100EF SWI +292 4042 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4043 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000274 1700A0E3 MOV R0,#+23 \ 00000278 2E0100EF SWI +302 \ 0000027C 0050A0E1 MOV R5,R0 \ 00000280 0000A0E3 MOV R0,#+0 \ 00000284 2E0100EF SWI +302 \ 00000288 0090A0E1 MOV R9,R0 \ 0000028C 0500A0E3 MOV R0,#+5 \ 00000290 C50100EF SWI +453 \ 00000294 18109DE5 LDR R1,[SP, #+24] \ 00000298 20002DE9 PUSH {R5} \ 0000029C C1A0A0E1 ASR R10,R1,#+1 \ 000002A0 00022DE9 PUSH {R9} \ 000002A4 0410A0E3 MOV R1,#+4 \ 000002A8 02002DE9 PUSH {R1} \ 000002AC 0830A0E1 MOV R3,R8 \ 000002B0 00204BE0 SUB R2,R11,R0 \ 000002B4 0510A0E3 MOV R1,#+5 \ 000002B8 02002DE9 PUSH {R1} \ 000002BC 0B10A0E1 MOV R1,R11 \ 000002C0 02002DE9 PUSH {R1} \ 000002C4 380094E5 LDR R0,[R4, #+56] \ 000002C8 0A10A0E1 MOV R1,R10 \ 000002CC 4C0100EF SWI +332 \ 000002D0 28D08DE2 ADD SP,SP,#+40 4044 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 000002D4 B00196E5 LDR R0,[R6, #+432] \ 000002D8 000050E3 CMP R0,#+0 \ 000002DC 0300000A BEQ ??method0_3 \ 000002E0 3800A0E3 MOV R0,#+56 \ 000002E4 500E80E3 ORR R0,R0,#0x500 \ 000002E8 072080E0 ADD R2,R0,R7 \ 000002EC 000000EA B ??method0_4 \ ??method0_3: \ 000002F0 1E2087E2 ADD R2,R7,#+30 \ ??method0_4: \ 000002F4 380094E5 LDR R0,[R4, #+56] \ 000002F8 181087E2 ADD R1,R7,#+24 \ 000002FC 240100EF SWI +292 4045 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4046 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000300 1700A0E3 MOV R0,#+23 \ 00000304 2E0100EF SWI +302 \ 00000308 0050A0E1 MOV R5,R0 \ 0000030C 0000A0E3 MOV R0,#+0 \ 00000310 2E0100EF SWI +302 \ 00000314 0060A0E1 MOV R6,R0 \ 00000318 0500A0E3 MOV R0,#+5 \ 0000031C C50100EF SWI +453 \ 00000320 20002DE9 PUSH {R5} \ 00000324 40002DE9 PUSH {R6} \ 00000328 0110A0E3 MOV R1,#+1 \ 0000032C 02002DE9 PUSH {R1} \ 00000330 0A30A0E1 MOV R3,R10 \ 00000334 00204BE0 SUB R2,R11,R0 \ 00000338 0510A0E3 MOV R1,#+5 \ 0000033C 02002DE9 PUSH {R1} \ 00000340 0B10A0E1 MOV R1,R11 \ 00000344 02002DE9 PUSH {R1} \ 00000348 380094E5 LDR R0,[R4, #+56] \ 0000034C 0310A0E3 MOV R1,#+3 \ 00000350 4C0100EF SWI +332 4047 #else 4048 4049 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4050 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4051 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 4052 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4053 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4054 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 4055 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4056 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4057 // DrawImg(15,200,(int)"4:\\zbin\\naticq\\img\\smiles_logo.png"); 4058 wsprintf(data->ws2,percent_t,"Mod Evilfox(c), kluchnik"); 4059 DrawString(data->ws2,3,scr_h-GetFontYSIZE(FONT_MEDIUM_BOLD)-GetFontYSIZE(FONT_MEDIUM_BOLD)-40, 4060 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4061 #endif 4062 } \ 00000354 28D08DE2 ADD SP,SP,#+40 \ 00000358 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_0: \ 0000035C ........ DC32 pictures_max \ 00000360 ........ DC32 pictures_loaded \ 00000364 ........ DC32 total_smiles \ 00000368 ........ DC32 xstatuses_load 4063 \ In segment CODE, align 4, keep-with-next 4064 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 4065 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4066 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 4067 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 4068 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 4069 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 4070 \ In segment CODE, align 4, keep-with-next 4071 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 4072 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4073 FreeWS(data->ws1); \ 00000008 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 4074 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 00000014 290100EF SWI +297 4075 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 4076 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 4077 \ In segment CODE, align 4, keep-with-next 4078 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 4079 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4080 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 4081 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 4082 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 4083 \ In segment CODE, align 4, keep-with-next 4084 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 4085 { 4086 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 4087 return; 4088 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 4089 } \ 00000010 1EFF2FE1 BX LR ;; return 4090 \ In segment CODE, align 4, keep-with-next 4091 int method5(MAIN_GUI *data,GUI_MSG *msg) 4092 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 4093 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 4094 if (msg->gbsmsg->msg==KEY_DOWN) \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 9320A0E3 MOV R2,#+147 \ 00000018 041090E5 LDR R1,[R0, #+4] \ 0000001C 402F82E3 ORR R2,R2,#0x100 \ 00000020 020051E1 CMP R1,R2 \ 00000024 2600001A BNE ??method5_0 4095 { 4096 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R5,??DataTable142 ;; S_ICONS \ 0000002C 080090E5 LDR R0,[R0, #+8] \ 00000030 ........ LDR R4,??DataTable157 ;; create_connect \ 00000034 5010A0E3 MOV R1,#+80 \ 00000038 601D81E3 ORR R1,R1,#0x1800 \ 0000003C 056081E0 ADD R6,R1,R5 \ 00000040 0370A0E3 MOV R7,#+3 \ 00000044 010050E2 SUBS R0,R0,#+1 \ 00000048 0600000A BEQ ??method5_1 \ 0000004C 030050E2 SUBS R0,R0,#+3 \ 00000050 0A00000A BEQ ??method5_2 \ 00000054 070050E2 SUBS R0,R0,#+7 \ 00000058 0A00000A BEQ ??method5_3 \ 0000005C 250050E2 SUBS R0,R0,#+37 \ 00000060 1000000A BEQ ??method5_4 \ 00000064 030000EA B ??method5_5 4097 { 4098 #ifdef kluchnik 4099 case LEFT_SOFT: 4100 if (cltop) create_contactlist_menu(); \ ??method5_1: \ 00000068 B00195E5 LDR R0,[R5, #+432] \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 F280BD08 POPEQ {R1,R4-R7,PC} \ 00000074 ........ BL create_contactlist_menu \ ??method5_5: \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C F280BDE8 POP {R1,R4-R7,PC} 4101 // if (cltop) remake_clmenu(); 4102 break; 4103 case RIGHT_SOFT: 4104 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_2: \ 00000080 0100A0E3 MOV R0,#+1 \ 00000084 F280BDE8 POP {R1,R4-R7,PC} 4105 #else 4106 case LEFT_SOFT: 4107 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 4108 case RIGHT_SOFT: 4109 // if (cltop) remake_clmenu(); 4110 if (cltop) create_contactlist_menu(); 4111 break; 4112 #endif 4113 case GREEN_BUTTON: 4114 disautorecconect=0; \ ??method5_3: \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C 5C0185E5 STR R0,[R5, #+348] 4115 if ((connect_state==0)&&(sock==-1)) \ 00000090 880195E5 LDR R0,[R5, #+392] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 8C019505 LDREQ R0,[R5, #+396] \ 0000009C 01007003 CMNEQ R0,#+1 \ 000000A0 0700001A BNE ??method5_0 4116 { 4117 GBS_DelTimer(&reconnect_tmr); \ 000000A4 010000EA B ??method5_6 4118 DNR_TRIES=3; 4119 SUBPROC((void *)create_connect); 4120 } 4121 break; 4122 case '0': 4123 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000A8 ........ LDR R0,??DataTable153 ;; end_socket \ 000000AC 710100EF SWI +369 4124 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000B0 0600A0E1 MOV R0,R6 \ 000000B4 8C0100EF SWI +396 4125 DNR_TRIES=3; \ 000000B8 D47185E5 STR R7,[R5, #+468] 4126 SUBPROC((void *)create_connect); \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 710100EF SWI +369 4127 break; 4128 } 4129 } 4130 return(0); \ ??method5_0: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 F280BDE8 POP {R1,R4-R7,PC} ;; return 4131 } 4132 \ In segment CODE, align 4, keep-with-next 4133 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 4134 \ In segment CODE, align 4, keep-with-next 4135 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 4136 4137 const void * const gui_methods[11]={ 4138 (void *)method0, //Redraw 4139 (void *)method1, //Create 4140 (void *)method2, //Close 4141 (void *)method3, //Focus 4142 (void *)method4, //Unfocus 4143 (void *)method5, //OnKey 4144 0, 4145 (void *)kill_data, //method7, //Destroy 4146 (void *)method8, 4147 (void *)method9, 4148 0 4149 }; 4150 4151 extern const int Reset_timer; \ In segment CODE, align 4, keep-with-next 4152 int my_keyhook(int key, int m) 4153 { \ my_keyhook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0050A0E1 MOV R5,R0 4154 if (m==KEY_DOWN) \ 00000008 9300A0E3 MOV R0,#+147 \ 0000000C 400F80E3 ORR R0,R0,#0x100 \ 00000010 000051E1 CMP R1,R0 \ 00000014 1F00001A BNE ??my_keyhook_0 4155 { 4156 if(change_back_status==1) \ 00000018 ........ LDR R4,??DataTable158 ;; S_ICONS \ 0000001C 0060A0E3 MOV R6,#+0 \ 00000020 380194E5 LDR R0,[R4, #+312] \ 00000024 010050E3 CMP R0,#+1 \ 00000028 0300001A BNE ??my_keyhook_1 4157 { 4158 CurrentStatus=status_rem; \ 0000002C 340194E5 LDR R0,[R4, #+308] \ 00000030 700184E5 STR R0,[R4, #+368] 4159 set_my_status(); \ 00000034 ........ BL set_my_status 4160 // SUBPROC((void*)WriteDefSettings); 4161 change_back_status=0; \ 00000038 386184E5 STR R6,[R4, #+312] 4162 } 4163 #ifdef EVILFOX 4164 if ((key==VOL_UP_BUTTON)&&(IsIdleUiOnTop())) 4165 { 4166 if(autobot==1) 4167 { 4168 autobot=0; 4169 ShowMSG(1,(int)"Autobot Off"); 4170 } 4171 else 4172 { 4173 autobot=1; 4174 ShowMSG(1,(int)"Autobot On"); 4175 } 4176 } 4177 #endif 4178 #ifdef ELKA 4179 #ifdef EVILFOX 4180 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) 4181 #else 4182 if ((key==CAMERA_BUTTON)&&(!IsUnlocked())) \ ??my_keyhook_1: \ 0000003C 140055E3 CMP R5,#+20 \ 00000040 0E00001A BNE ??my_keyhook_2 \ 00000044 430000EF SWI +67 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0B00001A BNE ??my_keyhook_2 4183 #endif 4184 { 4185 GBS_StopTimer(&away_tmr); \ 00000050 6000A0E3 MOV R0,#+96 \ 00000054 580D80E3 ORR R0,R0,#0x1600 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 440100EF SWI +324 4186 msg_away_timer=AUTO_ENGADE; \ 00000060 ........ LDR R0,??DataTable146 ;; AUTO_ENGADE \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 280184E5 STR R0,[R4, #+296] 4187 away_timer(); \ 0000006C ........ BL away_timer 4188 main_d=1; \ 00000070 0100A0E3 MOV R0,#+1 \ 00000074 E00084E5 STR R0,[R4, #+224] \ 00000078 0000A0E3 MOV R0,#+0 \ 0000007C 7080BDE8 POP {R4-R6,PC} 4189 } 4190 else 4191 { 4192 #endif 4193 if(Reset_timer) \ ??my_keyhook_2: \ 00000080 18009FE5 LDR R0,??my_keyhook_3 ;; Reset_timer \ 00000084 000090E5 LDR R0,[R0, #+0] \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 7080BD08 POPEQ {R4-R6,PC} 4194 { 4195 msg_away_timer=0; \ 00000090 286184E5 STR R6,[R4, #+296] 4196 away_m=0; \ 00000094 306184E5 STR R6,[R4, #+304] 4197 } 4198 #ifdef ELKA 4199 } 4200 #endif 4201 } 4202 return 0; \ ??my_keyhook_0: \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_keyhook_3: \ 000000A0 ........ DC32 Reset_timer 4203 } \ In segment DATA_C, align 4, align-sorted \ `?> %s <<" \ 3C3C00 \ 000000E5 000000 DC8 0, 0, 0 \ 000000E8 2563257400 DC8 "%c%t" \ 000000ED 000000 DC8 0, 0, 0 \ 000000F0 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000000F8 EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 000000FF 00 DC8 0 \ 00000100 426164207061 DC8 "Bad packet" \ 636B657400 \ 0000010B 00 DC8 0 \ 0000010C 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 00000117 00 DC8 0 \ 00000118 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000120 75696E256400 DC8 "uin%d" \ 00000126 0000 DC8 0, 0 \ 00000128 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 00000132 0000 DC8 0, 0 \ 00000134 257325642E77 DC8 "%s%d.wav" \ 617600 \ 0000013D 000000 DC8 0, 0, 0 \ 00000140 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000154 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ 00000160 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 00000168 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 2CH, 6BH \ 2C6B \ 00000170 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 2CH \ 6B2C \ 00000178 77696E646573 DC8 77H, 69H, 6EH, 64H, 65H, 73H, 20H, 62H \ 2062 \ 00000180 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 00000188 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 00000190 20323035382C DC8 20H, 32H, 30H, 35H, 38H, 2CH, 20H, 6DH \ 206D \ 00000198 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 000001A0 202573206174 DC8 20H, 25H, 73H, 20H, 61H, 74H, 20H, 25H \ 2025 \ 000001A8 732000 DC8 73H, 20H, 0 \ 000001AB 00 DC8 0 \ 000001AC 4D6172203330 DC8 "Mar 30 2008" \ 203230303800 \ 000001B8 32313A31303A DC8 "21:10:33" \ 333300 \ 000001C1 000000 DC8 0, 0, 0 \ 000001C4 47414D453A00 DC8 "GAME:" \ 000001CA 0000 DC8 0, 0 \ 000001CC C2F0E5ECFF20 DC8 "\302\360\345\354\377 \342 \356\355\353\340\351\355: %02d:%02d:%02d \012\321\345\360\342\345\360: %s" \ E220EEEDEBE0 \ E9ED3A202530 \ 32643A253032 \ 643A25303264 \ 200AD1E5F0E2 \ E5F03A202573 \ 00 \ 000001F7 00 DC8 0 \ 000001F8 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 00000208 CEF2EFF0E0E2 DC8 "\316\362\357\360\340\342\353\345\355\356 \361\356\356\341\371\345\355\350\351: %d \012\317\360\350\355\377\362\356 \361\356\356\341\371\345\355\350\351: %d" \ EBE5EDEE20F1 \ EEEEE1F9E5ED \ E8E93A202564 \ 200ACFF0E8ED \ FFF2EE20F1EE \ EEE1F9E5EDE8 \ E93A20256400 \ 00000238 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 00000245 000000 DC8 0, 0, 0 \ 00000248 CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 00000255 000000 DC8 0, 0, 0 \ 00000258 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 00000271 000000 DC8 0, 0, 0 \ 00000274 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 00000281 000000 DC8 0, 0, 0 \ 00000284 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 00000298 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 000002A5 000000 DC8 0, 0, 0 \ 000002A8 C7E0F0FFE420 DC8 "\307\340\360\377\344 \341\340\362\340\360\345\350: %d \357\360\356\366\345\355\362\356\342" \ E1E0F2E0F0E5 \ E83A20256420 \ EFF0EEF6E5ED \ F2EEE200 \ 000002C4 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 000002D1 000000 DC8 0, 0, 0 \ 000002D4 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 000002F7 00 DC8 0 \ 000002F8 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 00000300 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 00000308 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 00000310 696C65732F6E DC8 69H, 6CH, 65H, 73H, 2FH, 6EH, 61H, 74H \ 6174 \ 00000318 6963715F6D6F DC8 69H, 63H, 71H, 5FH, 6DH, 6FH, 64H, 32H \ 6432 \ 00000320 303538732E7A DC8 30H, 35H, 38H, 73H, 2EH, 7AH, 69H, 70H \ 6970 \ 00000328 202873676F6C DC8 20H, 28H, 73H, 67H, 6FH, 6CH, 64H, 29H \ 6429 \ 00000330 202020202834 DC8 20H, 20H, 20H, 20H, 28H, 34H, 30H, 6BH \ 306B \ 00000338 62290A687474 DC8 62H, 29H, 0AH, 68H, 74H, 74H, 70H, 3AH \ 703A \ 00000340 2F2F77696E64 DC8 2FH, 2FH, 77H, 69H, 6EH, 64H, 65H, 73H \ 6573 \ 00000348 2E6E61726F64 DC8 2EH, 6EH, 61H, 72H, 6FH, 64H, 2EH, 72H \ 2E72 \ 00000350 752F66696C65 DC8 75H, 2FH, 66H, 69H, 6CH, 65H, 73H, 2FH \ 732F \ 00000358 6E6174696371 DC8 6EH, 61H, 74H, 69H, 63H, 71H, 5FH, 6DH \ 5F6D \ 00000360 6F6432303538 DC8 6FH, 64H, 32H, 30H, 35H, 38H, 6EH, 2EH \ 6E2E \ 00000368 7A697020284E DC8 7AH, 69H, 70H, 20H, 28H, 4EH, 65H, 77H \ 6577 \ 00000370 53476F6C6429 DC8 53H, 47H, 6FH, 6CH, 64H, 29H, 20H, 28H \ 2028 \ 00000378 34306B62290A DC8 34H, 30H, 6BH, 62H, 29H, 0AH, 68H, 74H \ 6874 \ 00000380 74703A2F2F77 DC8 74H, 70H, 3AH, 2FH, 2FH, 77H, 69H, 6EH \ 696E \ 00000388 6465732E6E61 DC8 64H, 65H, 73H, 2EH, 6EH, 61H, 72H, 6FH \ 726F \ 00000390 642E72752F66 DC8 64H, 2EH, 72H, 75H, 2FH, 66H, 69H, 6CH \ 696C \ 00000398 65732F6E6174 DC8 65H, 73H, 2FH, 6EH, 61H, 74H, 69H, 63H \ 6963 \ 000003A0 715F6D6F6432 DC8 71H, 5FH, 6DH, 6FH, 64H, 32H, 30H, 35H \ 3035 \ 000003A8 38652E7A6970 DC8 38H, 65H, 2EH, 7AH, 69H, 70H, 20H, 28H \ 2028 \ 000003B0 656C6B612920 DC8 65H, 6CH, 6BH, 61H, 29H, 20H, 20H, 20H \ 2020 \ 000003B8 20202834306B DC8 20H, 20H, 28H, 34H, 30H, 6BH, 62H, 29H \ 6229 \ 000003C0 0A66696C6573 DC8 0AH, 66H, 69H, 6CH, 65H, 73H, 3AH, 20H \ 3A20 \ 000003C8 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 000003D0 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 000003D8 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 000003E0 696C65732F6E DC8 69H, 6CH, 65H, 73H, 2FH, 6EH, 61H, 74H \ 6174 \ 000003E8 6963716D6F64 DC8 69H, 63H, 71H, 6DH, 6FH, 64H, 5FH, 61H \ 5F61 \ 000003F0 6C6C66696C65 DC8 6CH, 6CH, 66H, 69H, 6CH, 65H, 73H, 5FH \ 735F \ 000003F8 772E7A697020 DC8 77H, 2EH, 7AH, 69H, 70H, 20H, 28H, 34H \ 2834 \ 00000400 33326B62290A DC8 33H, 32H, 6BH, 62H, 29H, 0AH, 53H, 74H \ 5374 \ 00000408 61747573206F DC8 61H, 74H, 75H, 73H, 20H, 6FH, 6EH, 20H \ 6E20 \ 00000410 69636F6E6261 DC8 69H, 63H, 6FH, 6EH, 62H, 61H, 72H, 20H \ 7220 \ 00000418 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 00000420 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 00000428 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 00000430 696C65732F69 DC8 69H, 6CH, 65H, 73H, 2FH, 69H, 6DH, 67H \ 6D67 \ 00000438 31367831362E DC8 31H, 36H, 78H, 31H, 36H, 2EH, 7AH, 69H \ 7A69 \ 00000440 70202837346B DC8 70H, 20H, 28H, 37H, 34H, 6BH, 62H, 29H \ 6229 \ 00000448 0AD2E0EA20E6 DC8 0AH, 0D2H, 0E0H, 0EAH, 20H, 0E6H, 0E5H, 20H \ E520 \ 00000450 E2F1E520E1F3 DC8 0E2H, 0F1H, 0E5H, 20H, 0E1H, 0F3H, 0E4H, 0E5H \ E4E5 \ 00000458 F220F2F3F220 DC8 0F2H, 20H, 0F2H, 0F3H, 0F2H, 20H, 68H, 74H \ 6874 \ 00000460 74703A2F2F6B DC8 74H, 70H, 3AH, 2FH, 2FH, 6BH, 6CH, 75H \ 6C75 \ 00000468 63686E696B2E DC8 63H, 68H, 6EH, 69H, 6BH, 2EH, 6AH, 69H \ 6A69 \ 00000470 6E6F2D6E6574 DC8 6EH, 6FH, 2DH, 6EH, 65H, 74H, 2EH, 72H \ 2E72 \ 00000478 752F6E617469 DC8 75H, 2FH, 6EH, 61H, 74H, 69H, 63H, 71H \ 6371 \ 00000480 6D6F642F00 DC8 6DH, 6FH, 64H, 2FH, 0 \ 00000485 000000 DC8 0, 0, 0 \ 00000488 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 0000049C 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 000004A9 000000 DC8 0, 0, 0 \ 000004AC 204F6E6C696E DC8 " Online: %02d:%02d:%02d %02d-%02d" \ 653A20253032 \ 643A25303264 \ 3A2530326420 \ 253032642D25 \ 30326400 \ 000004CE 0000 DC8 0, 0 \ 000004D0 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 000004D8 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 000004E0 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 000004E8 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 000004F0 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 000004F8 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 00000500 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 00000506 0000 DC8 0, 0 \ 00000508 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 0000051A 0000 DC8 0, 0 \ 0000051C 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 0000052F 00 DC8 0 \ 00000530 4578697400 DC8 "Exit" \ 00000535 000000 DC8 0, 0, 0 \ 00000538 434C69737400 DC8 "CList" \ 0000053E 0000 DC8 0, 0 \ 00000540 4675636B2079 DC8 "Fuck you hacker! my password sux ur ass" \ 6F7520686163 \ 6B657221206D \ 792070617373 \ 776F72642073 \ 757820757220 \ 61737300 \ 00000568 556E72656164 DC8 "Unread: %d" \ 3A20256400 \ 00000573 00 DC8 0 \ 00000574 49646C655570 DC8 "IdleUpd" \ 6400 \ 0000057C 4E6174494351 DC8 "NatICQ config updated!" \ 20636F6E6669 \ 672075706461 \ 7465642100 \ 00000593 00 DC8 0 \ 00000594 257332323430 DC8 "%s2240.png" \ 2E706E6700 \ 0000059F 00 DC8 0 \ 000005A0 475052532075 DC8 "GPRS up, wait 10 sec..." \ 702C20776169 \ 742031302073 \ 65632E2E2E00 \ 000005B8 54727920746F DC8 "Try to login..." \ 206C6F67696E \ 2E2E2E00 \ 000005C8 CDE520E220F1 DC8 "\315\345 \342 \361\357\350\361\352\345" \ EFE8F1EAE500 \ 000005D4 4C6F6F706261 DC8 "Loopback" \ 636B00 \ 000005DD 000000 DC8 0, 0, 0 \ 000005E0 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 \ 00000608 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 \ 0000062A 0000 DC8 0, 0 \ 0000062C 446973636F6E DC8 "Disconnected, %d bytes not sended!" \ 6E6563746564 \ 2C2025642062 \ 79746573206E \ 6F742073656E \ 6465642100 \ 0000064F 00 DC8 0 \ 00000650 25730A526563 DC8 "%s\012Reconect after %d second..." \ 6F6E65637420 \ 616674657220 \ 256420736563 \ 6F6E642E2E2E \ 00 \ 0000066F 00 DC8 0 \ 00000670 50696E67204E DC8 "Ping None" \ 6F6E6500 \ 0000067A 0000 DC8 0, 0 \ 0000067C C2E2E5E4E8F2 DC8 "\302\342\345\344\350\362\345 UIN/\357\340\360\356\353\374!" \ E52055494E2F \ EFE0F0EEEBFC \ 2100 \ 00000690 25735C746D70 DC8 "%s\\tmp%u.url" \ 25752E75726C \ 00 \ 0000069D 000000 DC8 0, 0, 0 \ 000006A0 526571756573 DC8 "Request info..." \ 7420696E666F \ 2E2E2E00 \ 000006B0 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 000006CB 00 DC8 0 \ ipc_my_name: \ 000006CC 4E6174494351 DC8 "NatICQ" \ 00 \ 000006D3 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E3 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000006EC 585461736B00 DC8 "XTask" \ 000006F2 0000 DC8 0, 0 \ x_status_change: \ 000006F4 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ ipc_game_name: \ 00000704 436F6D626174 DC8 "Combats" \ 7300 \ gui_methods: \ 0000070C ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 00000728 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ In segment DATA_C, align 4, align-sorted \ ipc_test_name: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ input_awaymsg_hdr: \ 00000038 000000008300 DC16 0, 0, 131, 21 \ 1500 \ 00000040 00000000.... DC32 0H, `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ clmenu_sk: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 clmenu_sk_r \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_C, align 4, align-sorted \ menu_skt: \ 00000000 ........0000 DC32 menu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ clmenu_skt: \ 00000000 ........0000 DC32 clmenu_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 B0B5041C0025 DC8 176, 181, 4, 28, 0, 37, 5, 97 \ 0561 \ color: \ 00000008 FFFFFF64 DC8 255, 255, 255, 100 4206 \ In segment CODE, align 4, keep-with-next 4207 void maincsm_oncreate(CSM_RAM *data) 4208 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 4209 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 4000A0E3 MOV R0,#+64 4210 MAIN_CSM*csm=(MAIN_CSM*)data; 4211 zeromem(main_gui,sizeof(MAIN_GUI)); 4212 patch_rect((RECT*)&Canvas,0,0,ScreenW()-1,ScreenH()-1); \ 0000000C 0070A0E3 MOV R7,#+0 \ 00000010 140000EF SWI +20 \ 00000014 0060A0E1 MOV R6,R0 \ 00000018 4010A0E3 MOV R1,#+64 \ 0000001C 1D0100EF SWI +285 \ 00000020 898100EF SWI +33161 \ 00000024 0040A0E1 MOV R4,R0 \ 00000028 888100EF SWI +33160 \ 0000002C 011044E2 SUB R1,R4,#+1 \ 00000030 ........ LDR R4,??DataTable161 ;; `?gui.canvas=(void *)(&Canvas); \ 00000044 100084E2 ADD R0,R4,#+16 \ 00000048 000086E5 STR R0,[R6, #+0] 4214 // main_gui->gui.flag30=2; 4215 main_gui->gui.methods=(void *)gui_methods; \ 0000004C 0C00A0E3 MOV R0,#+12 \ 00000050 700E80E3 ORR R0,R0,#0x700 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 040086E5 STR R0,[R6, #+4] 4216 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000005C 158000EF SWI +32789 \ 00000060 200086E5 STR R0,[R6, #+32] 4217 csm->csm.state=0; \ 00000064 107085E5 STR R7,[R5, #+16] 4218 csm->csm.unk1=0; \ 00000068 147085E5 STR R7,[R5, #+20] 4219 maingui_id=csm->gui_id=CreateGUI(main_gui); \ 0000006C 0600A0E1 MOV R0,R6 \ 00000070 370100EF SWI +311 \ 00000074 280085E5 STR R0,[R5, #+40] \ 00000078 ........ LDR R5,??DataTable158 ;; S_ICONS \ 0000007C 180185E5 STR R0,[R5, #+280] 4220 ews=AllocWS(16384); \ 00000080 400CA0E3 MOV R0,#+16384 \ 00000084 250100EF SWI +293 4221 // MutexCreate(&contactlist_mtx); 4222 DNR_TRIES=3; 4223 // SUBPROC((void *)InitSmiles); 4224 // SUBPROC((void *)create_connect); 4225 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000088 ........ LDR R2,??DataTable149 ;; process_active_timer \ 0000008C 240185E5 STR R0,[R5, #+292] \ 00000090 0300A0E3 MOV R0,#+3 \ 00000094 D40185E5 STR R0,[R5, #+468] \ 00000098 871EA0E3 MOV R1,#+2160 \ 0000009C FF0E81E2 ADD R0,R1,#+4080 \ 000000A0 050080E0 ADD R0,R0,R5 \ 000000A4 4D0000EF SWI +77 4226 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000A8 ........ LDR R0,??DataTable183 ;; UIN \ 000000AC 1B1084E2 ADD R1,R4,#+27 \ 000000B0 002090E5 LDR R2,[R0, #+0] \ 000000B4 D200A0E3 MOV R0,#+210 \ 000000B8 600E80E3 ORR R0,R0,#0x600 \ 000000BC 040080E0 ADD R0,R0,R4 \ 000000C0 160000EF SWI +22 4227 gipc.name_to=ipc_my_name; \ 000000C4 CC00A0E3 MOV R0,#+204 \ 000000C8 600E80E3 ORR R0,R0,#0x600 \ 000000CC 041080E0 ADD R1,R0,R4 \ 000000D0 BC1085E5 STR R1,[R5, #+188] 4228 gipc.name_from=ipc_my_name; \ 000000D4 040080E0 ADD R0,R0,R4 \ 000000D8 C00085E5 STR R0,[R5, #+192] 4229 gipc.data=(void *)-1; \ 000000DC 0700E0E1 MVN R0,R7 \ 000000E0 C40085E5 STR R0,[R5, #+196] 4230 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000E4 BC3085E2 ADD R3,R5,#+188 \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC B010A0E3 MOV R1,#+176 \ 000000F0 DE1C81E3 ORR R1,R1,#0xDE00 \ 000000F4 0900A0E3 MOV R0,#+9 \ 000000F8 420C80E3 ORR R0,R0,#0x4200 \ 000000FC 000100EF SWI +256 4231 /* 4232 InitXStatusesImg(); 4233 //InitSmiles(); Это вызовется из InitXStatusesImg 4234 create_connect(); 4235 silenthide=1; 4236 gipc.name_to=ipc_xtask_name; 4237 gipc.name_from=ipc_my_name; 4238 gipc.data=0; 4239 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 4240 */ 4241 } \ 00000100 F080BDE8 POP {R4-R7,PC} ;; return 4242 \ In segment CODE, align 4, keep-with-next 4243 void maincsm_onclose(CSM_RAM *csm) 4244 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 4245 WriteDefSettings(); 4246 // SaveConfigData(successed_config_filename); 4247 4248 /* 4249 #pragma segment="CONFIG_C" 4250 unsigned int ul; 4251 int f; 4252 extern const CFG_HDR cfghdr0; //first var in CONFIG 4253 void *cfg=(void*)&cfghdr0; 4254 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 4255 4256 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 4257 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 4258 } 4259 fwrite(f,cfg,len,&ul); 4260 fclose(f,&ul); 4261 */ 4262 4263 // GBS_DelTimer(&tmr_dorecv); 4264 RemoveKeybMsgHook((void *)my_keyhook); 4265 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable158 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C ........ LDR R0,??DataTable152 ;; my_keyhook \ 00000010 2D0100EF SWI +301 \ 00000014 6000A0E3 MOV R0,#+96 \ 00000018 600D80E3 ORR R0,R0,#0x1800 \ 0000001C 040080E0 ADD R0,R0,R4 \ 00000020 8C0100EF SWI +396 4266 GBS_DelTimer(&tmr_vibra); \ 00000024 610D84E2 ADD R0,R4,#+6208 \ 00000028 8C0100EF SWI +396 4267 GBS_DelTimer(&reconnect_tmr); \ 0000002C 5000A0E3 MOV R0,#+80 \ 00000030 600D80E3 ORR R0,R0,#0x1800 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 8C0100EF SWI +396 4268 GBS_DelTimer(&tmr_illumination); \ 0000003C 3000A0E3 MOV R0,#+48 \ 00000040 600D80E3 ORR R0,R0,#0x1800 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 8C0100EF SWI +396 4269 GBS_DelTimer(&mytmr); \ 0000004C 7000A0E3 MOV R0,#+112 \ 00000050 580D80E3 ORR R0,R0,#0x1600 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 8C0100EF SWI +396 4270 GBS_DelTimer(&mytmr2); \ 0000005C 5A0D84E2 ADD R0,R4,#+5760 \ 00000060 8C0100EF SWI +396 4271 GBS_DelTimer(&mytmr3); \ 00000064 E800A0E3 MOV R0,#+232 \ 00000068 4C0D80E3 ORR R0,R0,#0x1300 \ 0000006C 040080E0 ADD R0,R0,R4 \ 00000070 8C0100EF SWI +396 4272 GBS_DelTimer(&mytmr4); \ 00000074 9000A0E3 MOV R0,#+144 \ 00000078 580D80E3 ORR R0,R0,#0x1600 \ 0000007C 040080E0 ADD R0,R0,R4 \ 00000080 8C0100EF SWI +396 4273 #ifdef NEWSGOLD 4274 GBS_DelTimer(&tracktmr); \ 00000084 A000A0E3 MOV R0,#+160 \ 00000088 580D80E3 ORR R0,R0,#0x1600 \ 0000008C 040080E0 ADD R0,R0,R4 \ 00000090 8C0100EF SWI +396 4275 #endif 4276 GBS_DelTimer(&develop); \ 00000094 BC00A0E3 MOV R0,#+188 \ 00000098 680D80E3 ORR R0,R0,#0x1A00 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 8C0100EF SWI +396 4277 GBS_DelTimer(&away_tmr); \ 000000A4 6000A0E3 MOV R0,#+96 \ 000000A8 580D80E3 ORR R0,R0,#0x1600 \ 000000AC 040080E0 ADD R0,R0,R4 \ 000000B0 8C0100EF SWI +396 4278 SetVibration(0); \ 000000B4 0000A0E3 MOV R0,#+0 \ 000000B8 7C0000EF SWI +124 4279 FreeTemplates(); \ 000000BC ........ BL FreeTemplates 4280 FreeCLIST(); \ 000000C0 ........ _BLF FreeCLIST,??FreeCLIST??rA 4281 free_ICONS(); \ 000000C4 ........ BL free_ICONS 4282 // FreeSmiles(); 4283 FreeWS(ews); \ 000000C8 240194E5 LDR R0,[R4, #+292] \ 000000CC 290100EF SWI +297 4284 FreeXStatusText(); \ 000000D0 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 4285 // MutexDestroy(&contactlist_mtx); 4286 SUBPROC((void *)FreeSmiles); \ 000000D4 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 000000D8 710100EF SWI +369 4287 SUBPROC((void *)FreeXStatusesImg); \ 000000DC 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 000000E0 710100EF SWI +369 4288 SUBPROC((void *)end_socket); \ 000000E4 ........ LDR R0,??DataTable153 ;; end_socket \ 000000E8 710100EF SWI +369 4289 SUBPROC((void *)ClearSendQ); \ 000000EC ........ LDR R0,??DataTable186 ;; ClearSendQ \ 000000F0 710100EF SWI +369 4290 SUBPROC((void *)ElfKiller); \ 000000F4 ........ LDR R0,??DataTable155 ;; ElfKiller \ 000000F8 710100EF SWI +369 4291 } \ 000000FC 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000100 ........ DC32 FreeSmiles \ 00000104 ........ DC32 FreeXStatusesImg 4292 \ In segment CODE, align 4, keep-with-next 4293 void do_reconnect(void) 4294 { 4295 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable158 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 A81190E5 LDR R1,[R0, #+424] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 4296 { 4297 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 D41180E5 STR R1,[R0, #+468] 4298 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable157 ;; create_connect \ 00000020 710100EF SWI +369 4299 } 4300 } \ 00000024 0080BDE8 POP {PC} ;; return 4301 \ In segment CODE, align 4, keep-with-next 4302 void CheckDoubleRun(void) 4303 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 4304 int csm_id; 4305 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable158 ;; S_ICONS \ 00000008 C40094E5 LDR R0,[R4, #+196] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1500000A BEQ ??CheckDoubleRun_0 4306 { 4307 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable161 ;; `?msg==MSG_IPC) 4340 { 4341 IPC_REQ *ipc; 4342 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 0C8094E5 LDR R8,[R4, #+12] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 8100000A BEQ ??maincsm_onmessage_2 4343 { 4344 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C CC90A0E3 MOV R9,#+204 \ 00000040 609E89E3 ORR R9,R9,#0x600 \ 00000044 071089E0 ADD R1,R9,R7 \ 00000048 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 7A00001A BNE ??maincsm_onmessage_2 4345 { 4346 switch (msg->submess) \ 00000054 081094E5 LDR R1,[R4, #+8] \ 00000058 040098E5 LDR R0,[R8, #+4] \ 0000005C 011041E2 SUB R1,R1,#+1 \ 00000060 040051E3 CMP R1,#+4 \ 00000064 7500008A BHI ??maincsm_onmessage_2 \ 00000068 012F8FE2 ADR R2,??maincsm_onmessage_0 \ 0000006C 0120D2E7 LDRB R2,[R2, R1] \ 00000070 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_0: \ 00000074 010A1116 DC8 +1,+10,+17,+22 \ 00000078 4F000000 DC8 +79,+0,+0,+0 4347 { 4348 case IPC_CHECK_DOUBLERUN: 4349 //Если приняли свое собственное сообщение, значит запускаем чекер 4350 if (ipc->name_from==ipc_my_name) SUBPROC((void *)CheckDoubleRun); \ ??maincsm_onmessage_3: \ 0000007C 071089E0 ADD R1,R9,R7 \ 00000080 010050E1 CMP R0,R1 \ 00000084 0200001A BNE ??maincsm_onmessage_4 \ 00000088 B40A9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000008C 710100EF SWI +369 \ 00000090 6A0000EA B ??maincsm_onmessage_2 4351 else ipc->data=(void *)maincsm_id; \ ??maincsm_onmessage_4: \ 00000094 140195E5 LDR R0,[R5, #+276] \ 00000098 080088E5 STR R0,[R8, #+8] \ 0000009C 670000EA B ??maincsm_onmessage_2 4352 break; 4353 case IPC_SMILE_PROCESSED: 4354 //Только собственные смайлы ;) 4355 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextSmile); \ ??maincsm_onmessage_6: \ 000000A0 071089E0 ADD R1,R9,R7 \ 000000A4 010050E1 CMP R0,R1 \ 000000A8 0100001A BNE ??maincsm_onmessage_7 \ 000000AC 940A9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000B0 710100EF SWI +369 4356 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000B4 ........ BL SMART_REDRAW \ 000000B8 600000EA B ??maincsm_onmessage_2 4357 break; 4358 case IPC_XSTATUSIMG_PROCESSED: 4359 //Только собственные иксстатусы ;) 4360 if (ipc->name_from==ipc_my_name) SUBPROC((void *)ProcessNextXStatImg); \ ??maincsm_onmessage_9: \ 000000BC 071089E0 ADD R1,R9,R7 \ 000000C0 010050E1 CMP R0,R1 \ 000000C4 FAFFFF1A BNE ??maincsm_onmessage_7 \ 000000C8 7C0A9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000CC F7FFFFEA B ??maincsm_onmessage_8 4361 SMART_REDRAW(); 4362 break; 4363 case IPC_GAME: 4364 { 4365 4366 } 4367 break; 4368 case IPC_TENSECONDS: 4369 //Только свое сообщение 4370 if (ipc->name_from==ipc_my_name) \ ??maincsm_onmessage_10: \ 000000D0 071089E0 ADD R1,R9,R7 \ 000000D4 010050E1 CMP R0,R1 \ 000000D8 5800001A BNE ??maincsm_onmessage_2 4371 { 4372 CLIST *t=(CLIST *)cltop; \ 000000DC B08195E5 LDR R8,[R5, #+432] 4373 int f=0; \ 000000E0 0090A0E3 MOV R9,#+0 \ 000000E4 000058E3 CMP R8,#+0 \ 000000E8 2500000A BEQ ??maincsm_onmessage_11 4374 while(t) 4375 { 4376 if(t->just_now) \ ??maincsm_onmessage_12: \ 000000EC 5C0098E5 LDR R0,[R8, #+92] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0200000A BEQ ??maincsm_onmessage_13 4377 { 4378 if (!(--(t->just_now))) f=1; \ 000000F8 010050E2 SUBS R0,R0,#+1 \ 000000FC 5C0088E5 STR R0,[R8, #+92] \ 00000100 0190A003 MOVEQ R9,#+1 4379 } 4380 if (t->isactive) \ ??maincsm_onmessage_13: \ 00000104 800098E5 LDR R0,[R8, #+128] \ 00000108 000050E3 CMP R0,#+0 \ 0000010C 0C00000A BEQ ??maincsm_onmessage_14 4381 { 4382 if (!(--(t->isactive))) \ 00000110 010050E2 SUBS R0,R0,#+1 \ 00000114 800088E5 STR R0,[R8, #+128] \ 00000118 0900001A BNE ??maincsm_onmessage_14 4383 { 4384 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 4385 if ((t->log)&&(!t->isunread)) \ 0000011C 740098E5 LDR R0,[R8, #+116] \ 00000120 0190A0E3 MOV R9,#+1 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0500000A BEQ ??maincsm_onmessage_14 \ 0000012C 640098E5 LDR R0,[R8, #+100] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0200001A BNE ??maincsm_onmessage_14 4386 { 4387 FreeLOGQ(&t->log); \ 00000138 740088E2 ADD R0,R8,#+116 \ 0000013C ........ BL FreeLOGQ 4388 t->msg_count=0; \ 00000140 846088E5 STR R6,[R8, #+132] 4389 } 4390 } 4391 } 4392 t=(CLIST *)(t->next); \ ??maincsm_onmessage_14: \ 00000144 008098E5 LDR R8,[R8, #+0] 4393 } \ 00000148 000058E3 CMP R8,#+0 \ 0000014C E6FFFF1A BNE ??maincsm_onmessage_12 4394 if (f) \ 00000150 000059E3 CMP R9,#+0 \ 00000154 0A00000A BEQ ??maincsm_onmessage_11 4395 { 4396 CLIST *oldt=NULL; 4397 if (contactlist_menu_id) \ 00000158 B81195E5 LDR R1,[R5, #+440] \ 0000015C 0000A0E3 MOV R0,#+0 \ 00000160 000051E3 CMP R1,#+0 \ 00000164 0400000A BEQ ??maincsm_onmessage_15 4398 { 4399 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000168 B80195E5 LDR R0,[R5, #+440] \ 0000016C 0010A0E3 MOV R1,#+0 \ 00000170 090200EF SWI +521 \ 00000174 8F0100EF SWI +399 \ 00000178 ........ _BLF FindContactByN,??FindContactByN??rA 4400 } 4401 RecountMenu(oldt,1); \ ??maincsm_onmessage_15: \ 0000017C 0110A0E3 MOV R1,#+1 \ 00000180 ........ BL RecountMenu 4402 } 4403 if (time_to_stop_t9) \ ??maincsm_onmessage_11: \ 00000184 E40195E5 LDR R0,[R5, #+484] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 2B00000A BEQ ??maincsm_onmessage_2 4404 { 4405 if (!(--time_to_stop_t9)) \ 00000190 010050E2 SUBS R0,R0,#+1 \ 00000194 E40185E5 STR R0,[R5, #+484] \ 00000198 2800001A BNE ??maincsm_onmessage_2 4406 { 4407 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 0000019C BC0195E5 LDR R0,[R5, #+444] \ 000001A0 350100EF SWI +309 \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 2400000A BEQ ??maincsm_onmessage_2 \ 000001AC 960100EF SWI +406 \ 000001B0 220000EA B ??maincsm_onmessage_2 4408 } 4409 } 4410 } 4411 break; 4412 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 4413 int l=strlen(((IPCMsg *)(ipc->data))->msg); \ ??maincsm_onmessage_16: \ 000001B4 080098E5 LDR R0,[R8, #+8] \ 000001B8 040090E5 LDR R0,[R0, #+4] \ 000001BC 1B0000EF SWI +27 \ 000001C0 0090A0E1 MOV R9,R0 4414 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 000001C4 260089E2 ADD R0,R9,#+38 \ 000001C8 140000EF SWI +20 \ 000001CC 00A0A0E1 MOV R10,R0 4415 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 000001D0 080098E5 LDR R0,[R8, #+8] 4416 msg->pkt.type=T_SENDMSG; 4417 msg->pkt.data_len=l; 4418 memcpy(msg->data,((IPCMsg *)(ipc->data))->msg,l); \ 000001D4 0920A0E1 MOV R2,R9 \ 000001D8 000090E5 LDR R0,[R0, #+0] \ 000001DC 00008AE5 STR R0,[R10, #+0] \ 000001E0 0200A0E3 MOV R0,#+2 \ 000001E4 B400CAE1 STRH R0,[R10, #+4] \ 000001E8 B690CAE1 STRH R9,[R10, #+6] \ 000001EC 080098E5 LDR R0,[R8, #+8] \ 000001F0 041090E5 LDR R1,[R0, #+4] \ 000001F4 08008AE2 ADD R0,R10,#+8 \ 000001F8 1E0100EF SWI +286 4419 //slientsend=1; 4420 if(strstr(msg->data,PASS)==0) \ 000001FC 4C199FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 00000200 08008AE2 ADD R0,R10,#+8 \ 00000204 180100EF SWI +280 \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 0400000A BEQ ??maincsm_onmessage_17 4421 { 4422 SENDMSGCOUNT++; //Номер сообщения 4423 SUBPROC((void *)SendAnswer,0,msg); 4424 } 4425 else 4426 { 4427 msg->pkt.data_len=40; \ 00000210 2800A0E3 MOV R0,#+40 \ 00000214 B600CAE1 STRH R0,[R10, #+6] 4428 strcpy(msg->data, "Fuck you hacker! my password sux ur ass"); \ 00000218 541E87E2 ADD R1,R7,#+1344 \ 0000021C 08008AE2 ADD R0,R10,#+8 \ 00000220 1A0000EF SWI +26 4429 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_17: \ 00000224 1C0195E5 LDR R0,[R5, #+284] 4430 SUBPROC((void *)SendAnswer,0,msg); \ 00000228 0A20A0E1 MOV R2,R10 \ 0000022C 010080E2 ADD R0,R0,#+1 \ 00000230 1C0185E5 STR R0,[R5, #+284] \ 00000234 ........ LDR R0,??DataTable184 ;; SendAnswer \ 00000238 0010A0E3 MOV R1,#+0 \ 0000023C 710100EF SWI +369 4431 } 4432 break; 4433 } 4434 } 4435 } 4436 } 4437 //Нарисуем иконочку моего статуса 4438 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 4439 CSM_RAM *icsm=FindCSMbyID(CSM_root()->idle_id); \ ??maincsm_onmessage_2: \ 00000240 068100EF SWI +33030 \ 00000244 040090E5 LDR R0,[R0, #+4] \ 00000248 080100EF SWI +264 \ 0000024C 2C0090E5 LDR R0,[R0, #+44] 4440 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 00000250 350100EF SWI +309 \ 00000254 000050E3 CMP R0,#+0 \ 00000258 6100000A BEQ ??maincsm_onmessage_18 4441 { 4442 GUI *igui=GetTopGUI(); 4443 if (igui) //И он существует \ 0000025C 4D0100EF SWI +333 \ 00000260 000050E3 CMP R0,#+0 \ 00000264 6000000A BEQ ??maincsm_onmessage_19 4444 { 4445 //#ifdef ELKA 4446 INC_show=0; \ 00000268 EC6185E5 STR R6,[R5, #+492] 4447 //#endif 4448 canvasdata=BuildCanvas(); //void * - belyj fon! \ 0000026C F18000EF SWI +33009 \ 00000270 E80085E5 STR R0,[R5, #+232] 4449 int icn; 4450 // if(ShowStatusIcon==0 || ShowStatusIcon==3) 4451 // { 4452 if(total_unread) \ 00000274 AC0195E5 LDR R0,[R5, #+428] \ 00000278 000050E3 CMP R0,#+0 4453 icn=IS_MSG; \ 0000027C 0D00A013 MOVNE R0,#+13 \ 00000280 0500001A BNE ??maincsm_onmessage_20 4454 else 4455 { 4456 switch(connect_state) \ 00000284 880195E5 LDR R0,[R5, #+392] \ 00000288 000050E3 CMP R0,#+0 \ 0000028C 0200000A BEQ ??maincsm_onmessage_20 \ 00000290 030050E2 SUBS R0,R0,#+3 4457 { 4458 case 0: 4459 icn=IS_OFFLINE; break; 4460 case 3: 4461 icn=CurrentStatus; //IS_ONLINE; \ 00000294 70019505 LDREQ R0,[R5, #+368] 4462 break; 4463 default: 4464 icn=IS_UNKNOWN; break; \ 00000298 0E00A013 MOVNE R0,#+14 4465 } 4466 } 4467 //} 4468 //Тут трохи поменял 4469 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 4470 // __root const CFG_CBOX_ITEM cfgcbox9_1[5]={"On main screen","Iconbar","Iconbar except idle","All","Nothing"}; 4471 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_20: \ 0000029C ........ LDR R1,??DataTable189 ;; ShowStatusIcon \ 000002A0 001091E5 LDR R1,[R1, #+0] \ 000002A4 000051E3 CMP R1,#+0 \ 000002A8 02005113 CMPNE R1,#+2 \ 000002AC 03005113 CMPNE R1,#+3 \ 000002B0 1900001A BNE ??maincsm_onmessage_21 4472 { 4473 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 4474 IDLEICON_Y+GetImgHeight((int)S_ICONS[icn])-1,1); \ 000002B4 008185E0 ADD R8,R5,R0, LSL #+2 \ 000002B8 000098E5 LDR R0,[R8, #+0] \ 000002BC 210000EF SWI +33 \ 000002C0 0090A0E1 MOV R9,R0 \ 000002C4 000098E5 LDR R0,[R8, #+0] \ 000002C8 220000EF SWI +34 \ 000002CC 80189FE5 LDR R1,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 000002D0 00A091E5 LDR R10,[R1, #+0] \ 000002D4 7C189FE5 LDR R1,??maincsm_onmessage_5+0x14 ;; IDLEICON_Y \ 000002D8 0A0080E0 ADD R0,R0,R10 \ 000002DC 00B091E5 LDR R11,[R1, #+0] \ 000002E0 0110A0E3 MOV R1,#+1 \ 000002E4 02002DE9 PUSH {R1} \ 000002E8 013040E2 SUB R3,R0,#+1 \ 000002EC 0B20A0E1 MOV R2,R11 \ 000002F0 0B1089E0 ADD R1,R9,R11 \ 000002F4 011041E2 SUB R1,R1,#+1 \ 000002F8 02002DE9 PUSH {R1} \ 000002FC E80095E5 LDR R0,[R5, #+232] \ 00000300 0A10A0E1 MOV R1,R10 \ 00000304 250000EF SWI +37 4475 DrawImg(IDLEICON_X,IDLEICON_Y,S_ICONS[icn]); \ 00000308 002098E5 LDR R2,[R8, #+0] \ 0000030C 0B10A0E1 MOV R1,R11 \ 00000310 0A00A0E1 MOV R0,R10 \ 00000314 230000EF SWI +35 \ 00000318 08D08DE2 ADD SP,SP,#+8 4476 } 4477 // __root const CFG_CBOX_ITEM cfgcbox_8z[4]={"Nothing","On main screen","Iconbar","All"}; 4478 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_21: \ 0000031C ........ LDR R0,??DataTable190 ;; show_xstatus \ 00000320 000090E5 LDR R0,[R0, #+0] \ 00000324 010050E3 CMP R0,#+1 \ 00000328 03005013 CMPNE R0,#+3 \ 0000032C 2700001A BNE ??maincsm_onmessage_22 4479 { 4480 PNGTOP_DESC *pltop=PNG_TOP(); 4481 pltop->dyn_pltop=XStatusesImgList; 4482 DisableIDLETMR(); \ 00000330 24889FE5 LDR R8,??maincsm_onmessage_5+0x18 ;; XStatusesIconArray \ 00000334 B98100EF SWI +33209 \ 00000338 ........ LDR R1,??DataTable165 ;; XStatusesImgList \ 0000033C 001091E5 LDR R1,[R1, #+0] \ 00000340 081080E5 STR R1,[R0, #+8] \ 00000344 7F0100EF SWI +383 \ 00000348 ........ LDR R0,??DataTable191 ;; CurrentXStatus \ 0000034C 001098E5 LDR R1,[R8, #+0] \ 00000350 000090E5 LDR R0,[R0, #+0] \ 00000354 000191E7 LDR R0,[R1, +R0, LSL #+2] 4483 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 4484 IDLEICON_YX+GetImgHeight((int)XStatusesIconArray[CurrentXStatus])-1,1); \ 00000358 210000EF SWI +33 \ 0000035C 001098E5 LDR R1,[R8, #+0] \ 00000360 0090A0E1 MOV R9,R0 \ 00000364 ........ LDR R0,??DataTable191 ;; CurrentXStatus \ 00000368 000090E5 LDR R0,[R0, #+0] \ 0000036C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000370 220000EF SWI +34 \ 00000374 E4179FE5 LDR R1,??maincsm_onmessage_5+0x1C ;; IDLEICON_XX \ 00000378 00A091E5 LDR R10,[R1, #+0] \ 0000037C E0179FE5 LDR R1,??maincsm_onmessage_5+0x20 ;; IDLEICON_YX \ 00000380 0A0080E0 ADD R0,R0,R10 \ 00000384 00B091E5 LDR R11,[R1, #+0] \ 00000388 0110A0E3 MOV R1,#+1 \ 0000038C 02002DE9 PUSH {R1} \ 00000390 013040E2 SUB R3,R0,#+1 \ 00000394 0B20A0E1 MOV R2,R11 \ 00000398 0B1089E0 ADD R1,R9,R11 \ 0000039C 011041E2 SUB R1,R1,#+1 \ 000003A0 02002DE9 PUSH {R1} \ 000003A4 E80095E5 LDR R0,[R5, #+232] \ 000003A8 0A10A0E1 MOV R1,R10 \ 000003AC 250000EF SWI +37 4485 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 000003B0 ........ LDR R0,??DataTable191 ;; CurrentXStatus \ 000003B4 001098E5 LDR R1,[R8, #+0] \ 000003B8 000090E5 LDR R0,[R0, #+0] \ 000003BC 002191E7 LDR R2,[R1, +R0, LSL #+2] \ 000003C0 0B10A0E1 MOV R1,R11 \ 000003C4 0A00A0E1 MOV R0,R10 \ 000003C8 230000EF SWI +35 \ 000003CC 08D08DE2 ADD SP,SP,#+8 4486 } 4487 #ifdef EVILFOX 4488 DrawImg(IDLEICON_X-1,IDLEICON_Y-8,(int)"4:\\zbin\\naticq\\img\\naticq_ms.png"); 4489 #endif 4490 /* 4491 #ifdef EVILFOX 4492 #else 4493 if(strlen(fontpath)>5) 4494 { 4495 #endif 4496 */ 4497 4498 #ifdef ELKA 4499 if (total_unread) \ ??maincsm_onmessage_22: \ 000003D0 AC0195E5 LDR R0,[R5, #+428] \ 000003D4 000050E3 CMP R0,#+0 \ 000003D8 0300000A BEQ ??maincsm_onmessage_19 4500 SLI_On(); \ 000003DC ........ BL SLI_On \ 000003E0 010000EA B ??maincsm_onmessage_19 4501 #endif 4502 } 4503 } 4504 else 4505 { 4506 main_d=1; \ ??maincsm_onmessage_18: \ 000003E4 0100A0E3 MOV R0,#+1 \ 000003E8 E00085E5 STR R0,[R5, #+224] 4507 } 4508 } 4509 4510 //---------------------------------------------------// 4511 4512 if(msg->msg == MSG_IPC) //kluchnik 26.03.08 \ ??maincsm_onmessage_19: \ 000003EC 040094E5 LDR R0,[R4, #+4] \ 000003F0 B010A0E3 MOV R1,#+176 \ 000003F4 DE1C81E3 ORR R1,R1,#0xDE00 \ 000003F8 010050E1 CMP R0,R1 \ 000003FC C000001A BNE ??maincsm_onmessage_23 4513 { 4514 IPC_REQ *ipc; 4515 if ((ipc=(IPC_REQ*)msg->data0)) \ 00000400 0C0094E5 LDR R0,[R4, #+12] \ 00000404 000050E3 CMP R0,#+0 \ 00000408 1E01000A BEQ ??maincsm_onmessage_24 4516 { 4517 if (strcmp_nocase(ipc->name_to,"IdleUpd")==0) \ 0000040C 000090E5 LDR R0,[R0, #+0] \ 00000410 7410A0E3 MOV R1,#+116 \ 00000414 501E81E3 ORR R1,R1,#0x500 \ 00000418 071081E0 ADD R1,R1,R7 \ 0000041C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000420 000050E3 CMP R0,#+0 4518 { 4519 switch (msg->submess) \ 00000424 08009405 LDREQ R0,[R4, #+8] \ 00000428 00005003 CMPEQ R0,#+0 \ 0000042C B400001A BNE ??maincsm_onmessage_23 4520 { 4521 case 0: 4522 { 4523 if (main_d==1) \ 00000430 E00095E5 LDR R0,[R5, #+224] \ 00000434 010050E3 CMP R0,#+1 \ 00000438 8500001A BNE ??maincsm_onmessage_25 4524 { 4525 ClearScreen(); \ 0000043C ........ _BLF ClearScreen,??ClearScreen??rA 4526 if(Is_SMARTCPU_On) \ 00000440 000195E5 LDR R0,[R5, #+256] \ 00000444 000050E3 CMP R0,#+0 \ 00000448 8000000A BEQ ??maincsm_onmessage_26 4527 { 4528 #ifdef EVILFOX 4529 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, 0); 4530 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, 0); 4531 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, 0); 4532 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, 0); 4533 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, 0); 4534 #else 4535 if(fonto==1) \ 0000044C 14079FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 00000450 E43095E5 LDR R3,[R5, #+228] \ 00000454 8C10A0E3 MOV R1,#+140 \ 00000458 681D81E3 ORR R1,R1,#0x1A00 \ 0000045C 051081E0 ADD R1,R1,R5 \ 00000460 14108DE5 STR R1,[SP, #+20] \ 00000464 5C10A0E3 MOV R1,#+92 \ 00000468 681D81E3 ORR R1,R1,#0x1A00 \ 0000046C 051081E0 ADD R1,R1,R5 \ 00000470 10108DE5 STR R1,[SP, #+16] \ 00000474 2C10A0E3 MOV R1,#+44 \ 00000478 681D81E3 ORR R1,R1,#0x1A00 \ 0000047C 051081E0 ADD R1,R1,R5 \ 00000480 0C108DE5 STR R1,[SP, #+12] \ 00000484 FC10A0E3 MOV R1,#+252 \ 00000488 641D81E3 ORR R1,R1,#0x1900 \ 0000048C 051081E0 ADD R1,R1,R5 \ 00000490 08108DE5 STR R1,[SP, #+8] \ 00000494 008090E5 LDR R8,[R0, #+0] \ 00000498 CC069FE5 LDR R0,??maincsm_onmessage_5+0x28 ;; msg_d_y \ 0000049C 009090E5 LDR R9,[R0, #+0] \ 000004A0 CC00A0E3 MOV R0,#+204 \ 000004A4 640D80E3 ORR R0,R0,#0x1900 \ 000004A8 052080E0 ADD R2,R0,R5 \ 000004AC BC069FE5 LDR R0,??maincsm_onmessage_5+0x2C ;; spaco2 \ 000004B0 00A090E5 LDR R10,[R0, #+0] \ 000004B4 ........ LDR R0,??DataTable203 ;; fonto \ 000004B8 00B090E5 LDR R11,[R0, #+0] \ 000004BC 0A00A0E1 MOV R0,R10 \ 000004C0 01002DE9 PUSH {R0} \ 000004C4 01005BE3 CMP R11,#+1 \ 000004C8 2B00001A BNE ??maincsm_onmessage_27 4536 { 4537 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 000004CC 0100A0E3 MOV R0,#+1 \ 000004D0 01002DE9 PUSH {R0} \ 000004D4 0910A0E1 MOV R1,R9 \ 000004D8 0800A0E1 MOV R0,R8 \ 000004DC ........ _BLF PrintField,??PrintField??rA 4538 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 000004E0 0A00A0E1 MOV R0,R10 \ 000004E4 01002DE9 PUSH {R0} \ 000004E8 0100A0E3 MOV R0,#+1 \ 000004EC 01002DE9 PUSH {R0} \ 000004F0 E43095E5 LDR R3,[R5, #+228] \ 000004F4 18209DE5 LDR R2,[SP, #+24] \ 000004F8 EC0095E5 LDR R0,[R5, #+236] \ 000004FC 091080E0 ADD R1,R0,R9 \ 00000500 0800A0E1 MOV R0,R8 \ 00000504 ........ _BLF PrintField,??PrintField??rA 4539 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 00000508 0A00A0E1 MOV R0,R10 \ 0000050C 01002DE9 PUSH {R0} \ 00000510 0100A0E3 MOV R0,#+1 \ 00000514 01002DE9 PUSH {R0} \ 00000518 E43095E5 LDR R3,[R5, #+228] \ 0000051C 24209DE5 LDR R2,[SP, #+36] \ 00000520 EC0095E5 LDR R0,[R5, #+236] \ 00000524 801089E0 ADD R1,R9,R0, LSL #+1 \ 00000528 0800A0E1 MOV R0,R8 \ 0000052C ........ _BLF PrintField,??PrintField??rA 4540 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 00000530 0A00A0E1 MOV R0,R10 \ 00000534 01002DE9 PUSH {R0} \ 00000538 0100A0E3 MOV R0,#+1 \ 0000053C 01002DE9 PUSH {R0} \ 00000540 E43095E5 LDR R3,[R5, #+228] \ 00000544 30209DE5 LDR R2,[SP, #+48] \ 00000548 EC0095E5 LDR R0,[R5, #+236] \ 0000054C 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000550 091080E0 ADD R1,R0,R9 \ 00000554 0800A0E1 MOV R0,R8 \ 00000558 ........ _BLF PrintField,??PrintField??rA 4541 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 0000055C 00042DE9 PUSH {R10} \ 00000560 0100A0E3 MOV R0,#+1 \ 00000564 01002DE9 PUSH {R0} \ 00000568 E43095E5 LDR R3,[R5, #+228] \ 0000056C 3C209DE5 LDR R2,[SP, #+60] \ 00000570 EC0095E5 LDR R0,[R5, #+236] \ 00000574 001189E0 ADD R1,R9,R0, LSL #+2 \ 00000578 310000EA B ??maincsm_onmessage_28 4542 } 4543 else 4544 { 4545 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_27: \ 0000057C 0B00A0E1 MOV R0,R11 \ 00000580 01002DE9 PUSH {R0} \ 00000584 0910A0E1 MOV R1,R9 \ 00000588 0800A0E1 MOV R0,R8 \ 0000058C ........ _BLF PrintField,??PrintField??rA 4546 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000590 EC0095E5 LDR R0,[R5, #+236] \ 00000594 C50100EF SWI +453 \ 00000598 0A10A0E1 MOV R1,R10 \ 0000059C 02002DE9 PUSH {R1} \ 000005A0 090080E0 ADD R0,R0,R9 \ 000005A4 0B10A0E1 MOV R1,R11 \ 000005A8 02002DE9 PUSH {R1} \ 000005AC E43095E5 LDR R3,[R5, #+228] \ 000005B0 18209DE5 LDR R2,[SP, #+24] \ 000005B4 011080E2 ADD R1,R0,#+1 \ 000005B8 0800A0E1 MOV R0,R8 \ 000005BC ........ _BLF PrintField,??PrintField??rA 4547 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 000005C0 EC0095E5 LDR R0,[R5, #+236] \ 000005C4 C50100EF SWI +453 \ 000005C8 0A10A0E1 MOV R1,R10 \ 000005CC 02002DE9 PUSH {R1} \ 000005D0 800089E0 ADD R0,R9,R0, LSL #+1 \ 000005D4 0B10A0E1 MOV R1,R11 \ 000005D8 02002DE9 PUSH {R1} \ 000005DC E43095E5 LDR R3,[R5, #+228] \ 000005E0 24209DE5 LDR R2,[SP, #+36] \ 000005E4 021080E2 ADD R1,R0,#+2 \ 000005E8 0800A0E1 MOV R0,R8 \ 000005EC ........ _BLF PrintField,??PrintField??rA 4548 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 000005F0 EC0095E5 LDR R0,[R5, #+236] \ 000005F4 C50100EF SWI +453 \ 000005F8 0A10A0E1 MOV R1,R10 \ 000005FC 02002DE9 PUSH {R1} \ 00000600 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000604 090080E0 ADD R0,R0,R9 \ 00000608 0B10A0E1 MOV R1,R11 \ 0000060C 02002DE9 PUSH {R1} \ 00000610 E43095E5 LDR R3,[R5, #+228] \ 00000614 30209DE5 LDR R2,[SP, #+48] \ 00000618 031080E2 ADD R1,R0,#+3 \ 0000061C 0800A0E1 MOV R0,R8 \ 00000620 ........ _BLF PrintField,??PrintField??rA 4549 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 00000624 EC0095E5 LDR R0,[R5, #+236] \ 00000628 C50100EF SWI +453 \ 0000062C 00042DE9 PUSH {R10} \ 00000630 00082DE9 PUSH {R11} \ 00000634 E43095E5 LDR R3,[R5, #+228] \ 00000638 3C209DE5 LDR R2,[SP, #+60] \ 0000063C 000189E0 ADD R0,R9,R0, LSL #+2 \ 00000640 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_28: \ 00000644 0800A0E1 MOV R0,R8 \ 00000648 ........ _BLF PrintField,??PrintField??rA \ 0000064C 28D08DE2 ADD SP,SP,#+40 4550 } 4551 #endif 4552 } 4553 main_d=0; \ ??maincsm_onmessage_26: \ 00000650 E06085E5 STR R6,[R5, #+224] 4554 } 4555 if(Is_UPTIME_On) \ ??maincsm_onmessage_25: \ 00000654 400195E5 LDR R0,[R5, #+320] \ 00000658 000050E3 CMP R0,#+0 \ 0000065C 0100000A BEQ ??maincsm_onmessage_29 4556 DrawOnlineTime(canvasdata); \ 00000660 E80095E5 LDR R0,[R5, #+232] \ 00000664 ........ BL DrawOnlineTime 4557 if(Is_PING_On) \ ??maincsm_onmessage_29: \ 00000668 F80095E5 LDR R0,[R5, #+248] \ 0000066C 000050E3 CMP R0,#+0 \ 00000670 0100000A BEQ ??maincsm_onmessage_30 4558 DrawPing(canvasdata); \ 00000674 E80095E5 LDR R0,[R5, #+232] \ 00000678 ........ BL DrawPing 4559 4560 if(Auto_Status && showAwayIdle) \ ??maincsm_onmessage_30: \ 0000067C ........ LDR R0,??DataTable170 ;; Auto_Status \ 00000680 000090E5 LDR R0,[R0, #+0] \ 00000684 000050E3 CMP R0,#+0 \ 00000688 0500000A BEQ ??maincsm_onmessage_31 \ 0000068C ........ LDR R0,??DataTable171 ;; showAwayIdle \ 00000690 000090E5 LDR R0,[R0, #+0] \ 00000694 000050E3 CMP R0,#+0 \ 00000698 0100000A BEQ ??maincsm_onmessage_31 4561 DrawAutoMSG(canvasdata); \ 0000069C E80095E5 LDR R0,[R5, #+232] \ 000006A0 ........ BL DrawAutoMSG 4562 if(Is_Unread_On) \ ??maincsm_onmessage_31: \ 000006A4 C8049FE5 LDR R0,??maincsm_onmessage_5+0x30 ;; Is_Unread_On \ 000006A8 000090E5 LDR R0,[R0, #+0] \ 000006AC 000050E3 CMP R0,#+0 \ 000006B0 1300000A BEQ ??maincsm_onmessage_23 4563 { 4564 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 000006B4 102195E5 LDR R2,[R5, #+272] \ 000006B8 F68FA0E3 MOV R8,#+984 \ 000006BC 640F88E2 ADD R0,R8,#+400 \ 000006C0 071080E0 ADD R1,R0,R7 \ 000006C4 050088E0 ADD R0,R8,R5 \ 000006C8 160000EF SWI +22 4565 #ifdef EVILFOX 4566 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, space); 4567 #else 4568 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 000006CC ........ LDR R0,??DataTable172 ;; spaco1 \ 000006D0 052088E0 ADD R2,R8,R5 \ 000006D4 000090E5 LDR R0,[R0, #+0] \ 000006D8 01002DE9 PUSH {R0} \ 000006DC ........ LDR R0,??DataTable203 ;; fonto \ 000006E0 000090E5 LDR R0,[R0, #+0] \ 000006E4 01002DE9 PUSH {R0} \ 000006E8 E43095E5 LDR R3,[R5, #+228] \ 000006EC 84049FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; unread_Y \ 000006F0 001090E5 LDR R1,[R0, #+0] \ 000006F4 80049FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; unread_X \ 000006F8 000090E5 LDR R0,[R0, #+0] \ 000006FC ........ _BLF PrintField,??PrintField??rA \ 00000700 08D08DE2 ADD SP,SP,#+8 4569 #endif 4570 } 4571 } 4572 } 4573 } 4574 } 4575 } 4576 4577 //-----------------------------------------------------------// 4578 4579 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_23: \ 00000704 040094E5 LDR R0,[R4, #+4] \ 00000708 AF10A0E3 MOV R1,#+175 \ 0000070C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000710 010050E1 CMP R0,R1 \ 00000714 3200001A BNE ??maincsm_onmessage_32 4580 { 4581 extern const char *successed_config_filename; 4582 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 00000718 ........ LDR R0,??DataTable197 ;; successed_config_filename \ 0000071C 0C1094E5 LDR R1,[R4, #+12] \ 00000720 000090E5 LDR R0,[R0, #+0] \ 00000724 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000728 000050E3 CMP R0,#+0 \ 0000072C 2C00001A BNE ??maincsm_onmessage_32 4583 { 4584 ShowMSG(1,(int)"NatICQ config updated!"); 4585 InitConfig(); 4586 #ifdef NEWSGOLD 4587 initTags(); 4588 #endif 4589 PrintLibInit(1); 4590 FontPathInit((char *)fontpath, 1); \ 00000730 ........ LDR R8,??DataTable199 ;; fontpath \ 00000734 7C00A0E3 MOV R0,#+124 \ 00000738 500E80E3 ORR R0,R0,#0x500 \ 0000073C 071080E0 ADD R1,R0,R7 \ 00000740 0100A0E3 MOV R0,#+1 \ 00000744 480100EF SWI +328 \ 00000748 ........ _BLF InitConfig,??InitConfig??rA \ 0000074C ........ _BLF initTags,??initTags??rA \ 00000750 0100A0E3 MOV R0,#+1 \ 00000754 ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000758 0110A0E3 MOV R1,#+1 \ 0000075C 0800A0E1 MOV R0,R8 \ 00000760 ........ _BLF FontPathInit,??FontPathInit??rA 4591 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 00000764 ........ LDR R1,??DataTable200 ;; bgrColor \ 00000768 ........ LDR R0,??DataTable201 ;; fontColor \ 0000076C 0120A0E3 MOV R2,#+1 \ 00000770 ........ _BLF SetFontColor,??SetFontColor??rA 4592 //#ifdef ELKA 4593 if(fonto==1) \ 00000774 ........ LDR R0,??DataTable203 ;; fonto \ 00000778 00B090E5 LDR R11,[R0, #+0] \ 0000077C 01005BE3 CMP R11,#+1 \ 00000780 0E00001A BNE ??maincsm_onmessage_33 4594 { 4595 char *heght=malloc(64); \ 00000784 4000A0E3 MOV R0,#+64 \ 00000788 140000EF SWI +20 \ 0000078C 0090A0E1 MOV R9,R0 4596 sprintf(heght, "%s2240.png", fontpath); \ 00000790 0820A0E1 MOV R2,R8 \ 00000794 9400A0E3 MOV R0,#+148 \ 00000798 500E80E3 ORR R0,R0,#0x500 \ 0000079C 071080E0 ADD R1,R0,R7 \ 000007A0 0900A0E1 MOV R0,R9 \ 000007A4 160000EF SWI +22 4597 paused_height=GetImgHeight((int)heght); \ 000007A8 0900A0E1 MOV R0,R9 \ 000007AC 210000EF SWI +33 \ 000007B0 EC0085E5 STR R0,[R5, #+236] 4598 mfree(heght); \ 000007B4 0900A0E1 MOV R0,R9 \ 000007B8 150000EF SWI +21 \ 000007BC 010000EA B ??maincsm_onmessage_34 4599 } 4600 else 4601 paused_height=fonto-100; \ ??maincsm_onmessage_33: \ 000007C0 64004BE2 SUB R0,R11,#+100 \ 000007C4 EC0085E5 STR R0,[R5, #+236] 4602 //#endif 4603 free_ICONS(); \ ??maincsm_onmessage_34: \ 000007C8 ........ BL free_ICONS 4604 setup_ICONS(); \ 000007CC ........ BL setup_ICONS 4605 ResortCL(); \ 000007D0 ........ _BLF ResortCL,??ResortCL??rA 4606 RecountMenu(NULL,1); \ 000007D4 0110A0E3 MOV R1,#+1 \ 000007D8 0000A0E3 MOV R0,#+0 \ 000007DC ........ BL RecountMenu 4607 init_time_zone(); \ 000007E0 ........ BL init_time_zone 4608 // InitSmiles(); 4609 } 4610 } 4611 4612 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_32: \ 000007E4 040094E5 LDR R0,[R4, #+4] \ 000007E8 0E10A0E3 MOV R1,#+14 \ 000007EC 641C81E3 ORR R1,R1,#0x6400 \ 000007F0 010050E1 CMP R0,R1 \ 000007F4 0E00001A BNE ??maincsm_onmessage_35 4613 { 4614 if ((int)msg->data0==csm->gui_id) \ 000007F8 1C109DE5 LDR R1,[SP, #+28] \ 000007FC 0C0094E5 LDR R0,[R4, #+12] \ 00000800 281091E5 LDR R1,[R1, #+40] \ 00000804 010050E1 CMP R0,R1 4615 { 4616 csm->csm.state=-3; \ 00000808 1C009D05 LDREQ R0,[SP, #+28] \ 0000080C 0210E003 MVNEQ R1,#+2 \ 00000810 10108005 STREQ R1,[R0, #+16] 4617 } 4618 if ((int)msg->data0==contactlist_menu_id) \ 00000814 0C0094E5 LDR R0,[R4, #+12] \ 00000818 B81195E5 LDR R1,[R5, #+440] \ 0000081C 010050E1 CMP R0,R1 4619 { 4620 contactlist_menu_id=0; \ 00000820 B8618505 STREQ R6,[R5, #+440] 4621 prev_clmenu_itemcount=0; \ 00000824 C0618505 STREQ R6,[R5, #+448] 4622 } 4623 if ((int)msg->data0==edchat_id) \ 00000828 BC1195E5 LDR R1,[R5, #+444] \ 0000082C 010050E1 CMP R0,R1 4624 { 4625 edchat_id=0; \ 00000830 BC618505 STREQ R6,[R5, #+444] 4626 } 4627 } 4628 4629 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_35: \ 00000834 040094E5 LDR R0,[R4, #+4] \ 00000838 AE10A0E3 MOV R1,#+174 \ 0000083C DE1C81E3 ORR R1,R1,#0xDE00 \ 00000840 010050E1 CMP R0,R1 \ 00000844 0F00001A BNE ??maincsm_onmessage_24 4630 { 4631 switch((int)msg->data0) \ 00000848 0C0094E5 LDR R0,[R4, #+12] \ 0000084C 101094E5 LDR R1,[R4, #+16] \ 00000850 ........ LDR R9,??DataTable179 ;; do_reconnect \ 00000854 5020A0E3 MOV R2,#+80 \ 00000858 602D82E3 ORR R2,R2,#0x1800 \ 0000085C 054082E0 ADD R4,R2,R5 \ 00000860 482F42E2 SUB R2,R2,#+288 \ 00000864 058082E0 ADD R8,R2,R5 \ 00000868 802050E2 SUBS R2,R0,#+128 \ 0000086C 0800000A BEQ ??maincsm_onmessage_36 \ 00000870 022052E2 SUBS R2,R2,#+2 \ 00000874 0200000A BEQ ??maincsm_onmessage_37 \ 00000878 122052E2 SUBS R2,R2,#+18 \ 0000087C 1400000A BEQ ??maincsm_onmessage_38 \ 00000880 1E0000EA B ??maincsm_onmessage_39 4632 { 4633 case LMAN_DISCONNECT_IND: 4634 is_gprs_online=0; \ ??maincsm_onmessage_37: \ 00000884 A86185E5 STR R6,[R5, #+424] 4635 return(1); \ ??maincsm_onmessage_24: \ 00000888 0100A0E3 MOV R0,#+1 \ 0000088C 20D08DE2 ADD SP,SP,#+32 \ 00000890 F08FBDE8 POP {R4-R11,PC} ;; return 4636 case LMAN_CONNECT_CNF: 4637 vibra_count=1; \ ??maincsm_onmessage_36: \ 00000894 0100A0E3 MOV R0,#+1 \ 00000898 780185E5 STR R0,[R5, #+376] 4638 start_vibra(); \ 0000089C ........ BL start_vibra 4639 is_gprs_online=1; \ 000008A0 0100A0E3 MOV R0,#+1 \ 000008A4 A80185E5 STR R0,[R5, #+424] 4640 strcpy(logmsg,LG_GRGPRSUP); \ 000008A8 5A1E87E2 ADD R1,R7,#+1440 \ 000008AC 0800A0E1 MOV R0,R8 \ 000008B0 1A0000EF SWI +26 4641 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000008B4 ........ LDR R0,??DataTable187 ;; RECONNECT_TIME \ 000008B8 0920A0E1 MOV R2,R9 \ 000008BC 000090E5 LDR R0,[R0, #+0] \ 000008C0 D830A0E3 MOV R3,#+216 \ 000008C4 930001E0 MUL R1,R3,R0 \ 000008C8 0400A0E1 MOV R0,R4 \ 000008CC 4D0000EF SWI +77 4642 return(1); \ 000008D0 070000EA B ??maincsm_onmessage_40 4643 case ENIP_DNR_HOST_BY_NAME: 4644 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_38: \ 000008D4 D00195E5 LDR R0,[R5, #+464] \ 000008D8 000051E1 CMP R1,R0 \ 000008DC E9FFFF1A BNE ??maincsm_onmessage_24 4645 { 4646 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 000008E0 D40195E5 LDR R0,[R5, #+468] \ 000008E4 000050E3 CMP R0,#+0 \ 000008E8 E6FFFF0A BEQ ??maincsm_onmessage_24 \ 000008EC ........ LDR R0,??DataTable213 ;; create_connect \ ??maincsm_onmessage_41: \ 000008F0 710100EF SWI +369 4647 } 4648 return(1); \ ??maincsm_onmessage_40: \ 000008F4 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_42: \ 000008F8 20D08DE2 ADD SP,SP,#+32 \ 000008FC F08FBDE8 POP {R4-R11,PC} 4649 } 4650 if ((int)msg->data1==sock) \ ??maincsm_onmessage_39: \ 00000900 8C2195E5 LDR R2,[R5, #+396] \ 00000904 020051E1 CMP R1,R2 \ 00000908 DEFFFF1A BNE ??maincsm_onmessage_24 4651 { 4652 //Если наш сокет 4653 if ((((unsigned int)msg->data0)>>28)==0xA) \ 0000090C 201EA0E1 LSR R1,R0,#+28 \ 00000910 0A0051E3 CMP R1,#+10 \ 00000914 0200001A BNE ??maincsm_onmessage_43 4654 { 4655 //Принят пакет 4656 ProcessPacket((TPKT *)msg->data0); \ 00000918 ........ BL ProcessPacket 4657 return(0); \ 0000091C 0000A0E3 MOV R0,#+0 \ 00000920 F4FFFFEA B ??maincsm_onmessage_42 4658 } 4659 switch((int)msg->data0) \ ??maincsm_onmessage_43: \ 00000924 ........ LDR R2,??DataTable182 ;; VIBR_ON_CONNECT \ 00000928 881195E5 LDR R1,[R5, #+392] \ 0000092C 00A092E5 LDR R10,[R2, #+0] \ 00000930 8A0040E2 SUB R0,R0,#+138 \ 00000934 050050E3 CMP R0,#+5 \ 00000938 D2FFFF8A BHI ??maincsm_onmessage_24 \ 0000093C 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000940 D02092E1 LDRSB R2,[R2, R0] \ 00000944 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000948 4A4A4301 DC8 +74,+74,+67,+1 \ 0000094C 534F0000 DC8 +83,+79,+0,+0 4660 { 4661 case ENIP_SOCK_CONNECTED: 4662 if (connect_state==1) \ ??maincsm_onmessage_44: \ 00000950 010051E3 CMP R1,#+1 \ 00000954 3B00001A BNE ??maincsm_onmessage_45 4663 { 4664 if(VIBR_ON_CONNECT) \ 00000958 00005AE3 CMP R10,#+0 4665 vibra_count=2; \ 0000095C 0200A013 MOVNE R0,#+2 4666 else 4667 vibra_count=1; \ 00000960 0100A003 MOVEQ R0,#+1 \ 00000964 780185E5 STR R0,[R5, #+376] 4668 start_vibra(); \ 00000968 ........ BL start_vibra 4669 //Соединение установленно, посылаем пакет login 4670 strcpy(logmsg, LG_GRTRYLOGIN); \ 0000096C B800A0E3 MOV R0,#+184 \ 00000970 500E80E3 ORR R0,R0,#0x500 \ 00000974 071080E0 ADD R1,R0,R7 \ 00000978 0800A0E1 MOV R0,R8 \ 0000097C 1A0000EF SWI +26 4671 { 4672 int i=strlen(PASS); \ 00000980 C8019FE5 LDR R0,??maincsm_onmessage_5+0xC ;; PASS \ 00000984 1B0000EF SWI +27 \ 00000988 0080A0E1 MOV R8,R0 4673 TPKT *p=malloc(sizeof(PKT)+i); \ 0000098C 080088E2 ADD R0,R8,#+8 \ 00000990 140000EF SWI +20 4674 p->pkt.uin=UIN; 4675 p->pkt.type=T_REQLOGIN; 4676 p->pkt.data_len=i; 4677 memcpy(p->data,PASS,i); \ 00000994 B4119FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 00000998 0090A0E1 MOV R9,R0 \ 0000099C ........ LDR R0,??DataTable183 ;; UIN \ 000009A0 0820A0E1 MOV R2,R8 \ 000009A4 004090E5 LDR R4,[R0, #+0] \ 000009A8 0100A0E3 MOV R0,#+1 \ 000009AC 004089E5 STR R4,[R9, #+0] \ 000009B0 B400C9E1 STRH R0,[R9, #+4] \ 000009B4 B680C9E1 STRH R8,[R9, #+6] \ 000009B8 080089E2 ADD R0,R9,#+8 \ 000009BC 1E0100EF SWI +286 4678 SUBPROC((void *)send_login,0,p); \ 000009C0 B8019FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; send_login \ 000009C4 0920A0E1 MOV R2,R9 \ 000009C8 0010A0E3 MOV R1,#+0 \ 000009CC 710100EF SWI +369 4679 } 4680 GROUP_CACHE=0; \ 000009D0 B46185E5 STR R6,[R5, #+436] 4681 SENDMSGCOUNT=0; //Начинаем отсчет \ 000009D4 1C6185E5 STR R6,[R5, #+284] 4682 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 000009D8 0600A0E1 MOV R0,R6 \ 000009DC ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000009E0 000050E3 CMP R0,#+0 \ 000009E4 0400001A BNE ??maincsm_onmessage_46 \ 000009E8 C800A0E3 MOV R0,#+200 \ 000009EC 500E80E3 ORR R0,R0,#0x500 \ 000009F0 071080E0 ADD R1,R0,R7 \ 000009F4 0000A0E3 MOV R0,#+0 \ 000009F8 ........ _BLF AddGroup,??AddGroup??rA 4683 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_46: \ 000009FC 0400A0E1 MOV R0,R4 \ 00000A00 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000A04 000050E3 CMP R0,#+0 \ 00000A08 0A00001A BNE ??maincsm_onmessage_47 \ 00000A0C 70019FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; IsShowLoopback \ 00000A10 000090E5 LDR R0,[R0, #+0] \ 00000A14 000050E3 CMP R0,#+0 \ 00000A18 0600000A BEQ ??maincsm_onmessage_47 \ 00000A1C 0130A0E3 MOV R3,#+1 \ 00000A20 0020A0E3 MOV R2,#+0 \ 00000A24 D400A0E3 MOV R0,#+212 \ 00000A28 500E80E3 ORR R0,R0,#0x500 \ 00000A2C 071080E0 ADD R1,R0,R7 \ 00000A30 0400A0E1 MOV R0,R4 \ 00000A34 ........ _BLF AddContact,??AddContact??rA 4684 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_47: \ 00000A38 48019FE5 LDR R0,??maincsm_onmessage_5+0x44 ;; LoadLocalCL \ 00000A3C 710100EF SWI +369 4685 SMART_REDRAW(); \ 00000A40 ........ BL SMART_REDRAW \ 00000A44 AAFFFFEA B ??maincsm_onmessage_40 4686 } 4687 else 4688 { 4689 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_45: \ 00000A48 5E1E87E2 ADD R1,R7,#+1504 \ ??maincsm_onmessage_48: \ 00000A4C 0100A0E3 MOV R0,#+1 \ 00000A50 480100EF SWI +328 \ 00000A54 A6FFFFEA B ??maincsm_onmessage_40 4690 } 4691 break; 4692 case ENIP_SOCK_DATA_READ: 4693 if (connect_state>=2) \ ??maincsm_onmessage_49: \ 00000A58 020051E3 CMP R1,#+2 4694 { 4695 //Если посылали send 4696 SUBPROC((void *)get_answer); \ 00000A5C 28019FA5 LDRGE R0,??maincsm_onmessage_5+0x48 ;; get_answer \ 00000A60 A2FFFFAA BGE ??maincsm_onmessage_41 4697 //SMART_REDRAW(); 4698 } 4699 else 4700 { 4701 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000A64 0800A0E3 MOV R0,#+8 \ 00000A68 600E80E3 ORR R0,R0,#0x600 \ 00000A6C 071080E0 ADD R1,R0,R7 \ 00000A70 F5FFFFEA B ??maincsm_onmessage_48 4702 } 4703 break; 4704 case ENIP_BUFFER_FREE: 4705 case ENIP_BUFFER_FREE1: 4706 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_50: \ 00000A74 ........ LDR R0,??DataTable184 ;; SendAnswer \ 00000A78 0020A0E3 MOV R2,#+0 \ 00000A7C 0210A0E1 MOV R1,R2 \ 00000A80 710100EF SWI +369 \ 00000A84 9AFFFFEA B ??maincsm_onmessage_40 4707 break; 4708 case ENIP_SOCK_REMOTE_CLOSED: 4709 //Закрыт со стороны сервера 4710 if (connect_state) \ ??maincsm_onmessage_51: \ 00000A88 000051E3 CMP R1,#+0 \ 00000A8C 7DFFFF0A BEQ ??maincsm_onmessage_24 4711 SUBPROC((void *)end_socket); \ 00000A90 ........ LDR R0,??DataTable211 ;; end_socket \ 00000A94 95FFFFEA B ??maincsm_onmessage_41 4712 break; 4713 case ENIP_SOCK_CLOSED: 4714 //strcpy(logmsg, "No connection"); 4715 //Dump not received 4716 /* if (RXstate>(-(int)sizeof(PKT))) 4717 { 4718 unsigned int err; 4719 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 4720 if (f!=-1) 4721 { 4722 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 4723 fclose(f,&err); 4724 } 4725 }*/ 4726 FillAllOffline(); \ ??maincsm_onmessage_52: \ 00000A98 ........ _BLF FillAllOffline,??FillAllOffline??rA 4727 RecountMenu(NULL,1); \ 00000A9C 0110A0E3 MOV R1,#+1 \ 00000AA0 0000A0E3 MOV R0,#+0 \ 00000AA4 ........ BL RecountMenu 4728 connect_state=0; \ 00000AA8 886185E5 STR R6,[R5, #+392] 4729 sock=-1; \ 00000AAC 0600E0E1 MVN R0,R6 \ 00000AB0 8C0185E5 STR R0,[R5, #+396] 4730 if(VIBR_ON_CONNECT) \ 00000AB4 00005AE3 CMP R10,#+0 4731 vibra_count=4; \ 00000AB8 0400A013 MOVNE R0,#+4 4732 else 4733 vibra_count=1; \ 00000ABC 0100A003 MOVEQ R0,#+1 \ 00000AC0 780185E5 STR R0,[R5, #+376] 4734 4735 start_vibra(); \ 00000AC4 ........ BL start_vibra 4736 if (sendq_p) \ 00000AC8 A40195E5 LDR R0,[R5, #+420] \ 00000ACC 000050E3 CMP R0,#+0 \ 00000AD0 0600000A BEQ ??maincsm_onmessage_53 4737 { 4738 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000AD4 A03195E5 LDR R3,[R5, #+416] \ 00000AD8 2C00A0E3 MOV R0,#+44 \ 00000ADC 600E80E3 ORR R0,R0,#0x600 \ 00000AE0 072080E0 ADD R2,R0,R7 \ 00000AE4 FF10A0E3 MOV R1,#+255 \ 00000AE8 0800A0E1 MOV R0,R8 \ 00000AEC 1B0100EF SWI +283 4739 } 4740 SMART_REDRAW(); \ ??maincsm_onmessage_53: \ 00000AF0 ........ BL SMART_REDRAW 4741 SUBPROC((void *)ClearSendQ); \ 00000AF4 ........ LDR R0,??DataTable186 ;; ClearSendQ \ 00000AF8 710100EF SWI +369 4742 #ifdef EVILFOX 4743 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 4744 #else 4745 if (!disautorecconect) \ 00000AFC 5C0195E5 LDR R0,[R5, #+348] \ 00000B00 000050E3 CMP R0,#+0 \ 00000B04 5FFFFF1A BNE ??maincsm_onmessage_24 4746 { 4747 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000B08 ........ LDR R0,??DataTable187 ;; RECONNECT_TIME \ 00000B0C 0920A0E1 MOV R2,R9 \ 00000B10 005090E5 LDR R5,[R0, #+0] \ 00000B14 D800A0E3 MOV R0,#+216 \ 00000B18 900501E0 MUL R1,R0,R5 \ 00000B1C 0400A0E1 MOV R0,R4 \ 00000B20 4D0000EF SWI +77 4748 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000B24 20002DE9 PUSH {R5} \ 00000B28 0830A0E1 MOV R3,R8 \ 00000B2C 652E87E2 ADD R2,R7,#+1616 \ 00000B30 FF10A0E3 MOV R1,#+255 \ 00000B34 0800A0E1 MOV R0,R8 \ 00000B38 1B0100EF SWI +283 \ 00000B3C 04D08DE2 ADD SP,SP,#+4 \ 00000B40 6BFFFFEA B ??maincsm_onmessage_40 \ ??maincsm_onmessage_5: \ 00000B44 ........ DC32 CheckDoubleRun \ 00000B48 ........ DC32 ProcessNextSmile \ 00000B4C ........ DC32 ProcessNextXStatImg \ 00000B50 ........ DC32 PASS \ 00000B54 ........ DC32 IDLEICON_X \ 00000B58 ........ DC32 IDLEICON_Y \ 00000B5C ........ DC32 XStatusesIconArray \ 00000B60 ........ DC32 IDLEICON_XX \ 00000B64 ........ DC32 IDLEICON_YX \ 00000B68 ........ DC32 msg_d_x \ 00000B6C ........ DC32 msg_d_y \ 00000B70 ........ DC32 spaco2 \ 00000B74 ........ DC32 Is_Unread_On \ 00000B78 ........ DC32 unread_Y \ 00000B7C ........ DC32 unread_X \ 00000B80 ........ DC32 send_login \ 00000B84 ........ DC32 IsShowLoopback \ 00000B88 ........ DC32 LoadLocalCL \ 00000B8C ........ DC32 get_answer 4749 } 4750 4751 #endif 4752 break; 4753 } 4754 } 4755 } 4756 return(1); 4757 } 4758 4759 4760 //-------------------- ICON IN ICONBAR ------------// 4761 4762 //kluchnik 26.03.08 4763 4764 #pragma swi_number=0x27 4765 __swi __arm void AddIconToIconBar(int pic, short *num); 4766 4767 extern const unsigned int NumStatusToIconBar; 4768 extern const unsigned int NumXStatusToIconBar; 4769 //extern void SetIconBarHandler(); 4770 extern const int ShowStatusIcon; 4771 \ In segment CODE, align 4, keep-with-next 4772 void addIconBar(short* num) 4773 { \ addIconBar: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4774 int icn; 4775 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ 00000004 ........ LDR R6,??DataTable212 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0C019FE5 LDR R0,??addIconBar_0 ;; NumStatusToIconBar \ 00000010 005090E5 LDR R5,[R0, #+0] \ 00000014 ........ LDR R0,??DataTable189 ;; ShowStatusIcon \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 010050E3 CMP R0,#+1 \ 00000020 03005013 CMPNE R0,#+3 \ 00000024 2C00001A BNE ??addIconBar_1 4776 { 4777 if(total_unread) \ 00000028 AC0196E5 LDR R0,[R6, #+428] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 2200000A BEQ ??addIconBar_2 4778 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); \ ??addIconBar_3: \ 00000034 0410A0E1 MOV R1,R4 \ 00000038 0D0085E2 ADD R0,R5,#+13 \ ??addIconBar_4: \ 0000003C 270000EF SWI +39 4779 else 4780 { 4781 switch(connect_state) 4782 { 4783 case 0: 4784 icn=IS_OFFLINE; break; 4785 case 3: 4786 icn=CurrentStatus; //IS_ONLINE; 4787 break; 4788 default: 4789 icn=IS_UNKNOWN; break; 4790 } 4791 AddIconToIconBar(NumStatusToIconBar + icn, num); 4792 } 4793 } 4794 else 4795 { 4796 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 4797 { 4798 if(!(IsIdleUiOnTop())) 4799 { 4800 if(total_unread) 4801 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 4802 else 4803 { 4804 switch(connect_state) 4805 { 4806 case 0: 4807 icn=IS_OFFLINE; break; 4808 case 3: 4809 icn=CurrentStatus; //IS_ONLINE; 4810 break; 4811 default: 4812 icn=IS_UNKNOWN; break; 4813 } 4814 AddIconToIconBar(NumStatusToIconBar + icn, num); 4815 } 4816 } 4817 } 4818 } 4819 4820 if(show_xstatus==2 || show_xstatus==3) \ ??addIconBar_5: \ 00000040 ........ LDR R0,??DataTable190 ;; show_xstatus \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 020050E3 CMP R0,#+2 \ 0000004C 03005013 CMPNE R0,#+3 \ 00000050 0800001A BNE ??addIconBar_6 4821 if(CurrentXStatus!=0) \ 00000054 ........ LDR R0,??DataTable191 ;; CurrentXStatus \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 0400000A BEQ ??addIconBar_6 4822 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ 00000064 B8209FE5 LDR R2,??addIconBar_0+0x4 ;; NumXStatusToIconBar \ 00000068 0410A0E1 MOV R1,R4 \ 0000006C 002092E5 LDR R2,[R2, #+0] \ 00000070 020080E0 ADD R0,R0,R2 \ 00000074 270000EF SWI +39 4823 4824 #ifdef kluchnik 4825 // if(solnce) 4826 //{ 4827 CLIST *t; 4828 t=FindContactByUin(438532198); \ ??addIconBar_6: \ 00000078 A8009FE5 LDR R0,??addIconBar_0+0x8 ;; 0x1a237866 \ 0000007C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000080 0060A0E1 MOV R6,R0 4829 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) \ 00000084 B405D6E1 LDRH R0,[R6, #+84] \ 00000088 FF10A0E3 MOV R1,#+255 \ 0000008C FF1C81E3 ORR R1,R1,#0xFF00 \ 00000090 010050E1 CMP R0,R1 \ 00000094 7080BD08 POPEQ {R4-R6,PC} \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C ........ BL GetIconIndex \ 000000A0 0E0050E3 CMP R0,#+14 \ 000000A4 7080BD08 POPEQ {R4-R6,PC} 4830 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); \ 000000A8 0600A0E1 MOV R0,R6 \ 000000AC ........ BL GetIconIndex \ 000000B0 0410A0E1 MOV R1,R4 \ 000000B4 050080E0 ADD R0,R0,R5 \ 000000B8 270000EF SWI +39 4831 // } 4832 #endif 4833 } \ 000000BC 7080BDE8 POP {R4-R6,PC} ;; return \ ??addIconBar_2: \ 000000C0 880196E5 LDR R0,[R6, #+392] \ 000000C4 000050E3 CMP R0,#+0 \ 000000C8 1100000A BEQ ??addIconBar_7 \ 000000CC 030050E2 SUBS R0,R0,#+3 \ 000000D0 0E00001A BNE ??addIconBar_8 \ ??addIconBar_9: \ 000000D4 700196E5 LDR R0,[R6, #+368] \ 000000D8 0D0000EA B ??addIconBar_7 \ ??addIconBar_1: \ 000000DC 020050E3 CMP R0,#+2 \ 000000E0 D6FFFF1A BNE ??addIconBar_5 \ 000000E4 C50000EF SWI +197 \ 000000E8 000050E3 CMP R0,#+0 \ 000000EC D3FFFF1A BNE ??addIconBar_5 \ 000000F0 AC0196E5 LDR R0,[R6, #+428] \ 000000F4 000050E3 CMP R0,#+0 \ 000000F8 CDFFFF1A BNE ??addIconBar_3 \ 000000FC 880196E5 LDR R0,[R6, #+392] \ 00000100 000050E3 CMP R0,#+0 \ 00000104 0200000A BEQ ??addIconBar_7 \ 00000108 030050E2 SUBS R0,R0,#+3 \ 0000010C F0FFFF0A BEQ ??addIconBar_9 \ ??addIconBar_8: \ 00000110 0E00A0E3 MOV R0,#+14 \ ??addIconBar_7: \ 00000114 0410A0E1 MOV R1,R4 \ 00000118 050080E0 ADD R0,R0,R5 \ 0000011C C6FFFFEA B ??addIconBar_4 \ ??addIconBar_0: \ 00000120 ........ DC32 NumStatusToIconBar \ 00000124 ........ DC32 NumXStatusToIconBar \ 00000128 6678231A DC32 0x1a237866 4834 4835 typedef struct 4836 { 4837 char check_name[8]; 4838 int addr; 4839 }ICONBAR_H; 4840 4841 \ In segment DATA_C, align 4, align-sorted 4842 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 4843 \ In segment DATA_Z, align 4, align-sorted 4844 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 4845 4846 struct 4847 { 4848 CSM_DESC maincsm; 4849 WSHDR maincsm_name; 4850 ICONBAR_H iconbar_handler; 4851 }MAINCSM = 4852 { 4853 { 4854 maincsm_onmessage, 4855 maincsm_oncreate, 4856 #ifdef NEWSGOLD 4857 0, 4858 0, 4859 0, 4860 0, 4861 #endif 4862 maincsm_onclose, 4863 sizeof(MAIN_CSM), 4864 1, 4865 &minus11 4866 }, 4867 { 4868 maincsm_name_body, 4869 NAMECSM_MAGIC1, 4870 NAMECSM_MAGIC2, 4871 0x0, 4872 139 4873 }, 4874 { 4875 "IconBar" 4876 } 4877 }; 4878 \ In segment CODE, align 4, keep-with-next 4879 void UpdateCSMname(void) 4880 { 4881 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable196 ;; UIN \ 00000004 10109FE5 LDR R1,??UpdateCSMname_0 ;; `?` \ 00000008 00402DE9 PUSH {LR} \ 0000000C 002090E5 LDR R2,[R0, #+0] \ 00000010 08009FE5 LDR R0,??UpdateCSMname_0+0x4 ;; S_ICONS + 156 \ 00000014 240100EF SWI +292 4882 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 S_ICONS + 156 4883 \ In segment CODE, align 4, keep-with-next 4884 void SetIconBarHandler() 4885 { 4886 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; S_ICONS + 184 \ 00000004 ........ LDR R1,??DataTable202 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 4887 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 S_ICONS + 184 4888 \ In segment CODE, align 4, keep-with-next 4889 int main(char *filename) 4890 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 4891 MAIN_CSM main_csm; 4892 char *s; 4893 int len; 4894 extern const char *successed_config_filename; 4895 WSHDR *ws; 4896 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable212 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable195 ;; `?wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 4959 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 4960 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 4961 { 4962 for (int i=0; i=0xE100) 4966 { 4967 t=FindSmileByUni(c); 4968 if (t) 4969 { 4970 if (t->lines) 4971 { 4972 len+=strlen(t->lines->text); 4973 } 4974 } 4975 else len++; 4976 } 4977 else len++; 4978 } 4979 4980 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 4981 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 4982 for (int wcur=0; wcur=0xE100) 4987 { 4988 t=FindSmileByUni(c); 4989 if (t) 4990 { 4991 int w; 4992 char *s; 4993 if (t->lines) 4994 { 4995 s=t->lines->text; 4996 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 5023 { 5024 if (t->isactive) return t; \ 0000000C 801090E5 LDR R1,[R0, #+128] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 5025 } 5026 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable207 ;; S_ICONS + 432 \ 00000020 020000EA B ??FindNextActiveContact_2 5027 while(t=(CLIST *)(t->next)) 5028 { 5029 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 801090E5 LDR R1,[R0, #+128] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 5030 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 5031 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 5032 } 5033 \ In segment CODE, align 4, keep-with-next 5034 CLIST *FindPrevActiveContact(CLIST *t) 5035 { 5036 CLIST *cl; 5037 CLIST *cl_active=NULL; 5038 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable207 ;; S_ICONS + 432 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 5039 5040 5041 while(cl=cl->next) 5042 { 5043 if (cl==t) 5044 { 5045 if (cl_active==NULL) break; 5046 else return (cl_active); 5047 } 5048 else 5049 { 5050 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 803092E5 LDR R3,[R2, #+128] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 5051 } \ ??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 5052 } 5053 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 5054 { 5055 if (t->isactive) cl_active=t; \ 00000044 802090E5 LDR R2,[R0, #+128] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 5056 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 5057 } 5058 return cl_active; 5059 } 5060 5061 \ In segment CODE, align 4, keep-with-next 5062 void ed_options_handler(USR_MENU_ITEM *item) 5063 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 5064 EDCHAT_STRUCT *ed_struct=item->user_pointer; 5065 CLIST *t; 5066 int i=item->cur_item; 5067 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable212 ;; 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 5068 { 5069 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ws,LG_MNUEDNEXTACT); 5073 break; 5074 case 1: 5075 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 5076 break; 5077 default: 5078 i-=2; 5079 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 801195E5 LDR R1,[R5, #+384] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 5080 break; 5081 } 5082 } 5083 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 5084 { 5085 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 5086 { 5087 case 0: 5088 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 5089 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 5090 { 5091 GeneralFunc_flag1(edchat_id,1); \ 00000094 BC0195E5 LDR R0,[R5, #+444] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 5092 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 5093 } 5094 break; 5095 case 1: 5096 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 5097 if (t && t!=ed_struct->ed_contact) 5098 { 5099 GeneralFunc_flag1(edchat_id,1); 5100 CreateEditChat(t); 5101 } 5102 break; 5103 default: 5104 i-=2; 5105 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 5106 { 5107 EDITCONTROL ec; 5108 WSHDR *ed_ws; 5109 int c; 5110 char *p=templates_lines[i]; \ 000000CC 800195E5 LDR R0,[R5, #+384] 5111 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 5112 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 5113 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 5114 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 5115 { 5116 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 5117 while(c=*p++) 5118 { 5119 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 5120 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 5121 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 5122 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 5123 } 5124 else 5125 { 5126 while(c=*p++) 5127 { 5128 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 5129 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 5130 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 5131 } 5132 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 5133 } 5134 break; 5135 } 5136 } 5137 } \ ??ed_options_handler_3: \ 000001A8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000001AC F080BDE8 POP {R4-R7,PC} ;; return \ ??ed_options_handler_1: \ 000001B0 ........ DC32 `?= len) 5146 { 5147 s = str; 5148 w = ws; 5149 l = len; 5150 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 5151 if(!l) return ws; 5152 ws++; 5153 (*wslen)--; \ ??wstrstr_1: \ 00000018 000095E5 LDR R0,[R5, #+0] \ 0000001C 027087E2 ADD R7,R7,#+2 \ 00000020 010040E2 SUB R0,R0,#+1 \ 00000024 000085E5 STR R0,[R5, #+0] \ ??wstrstr_0: \ 00000028 000095E5 LDR R0,[R5, #+0] \ 0000002C 060050E1 CMP R0,R6 \ 00000030 0F0000BA BLT ??wstrstr_2 \ 00000034 0480A0E1 MOV R8,R4 \ 00000038 0790A0E1 MOV R9,R7 \ 0000003C 06A0A0E1 MOV R10,R6 \ 00000040 000000EA B ??wstrstr_3 \ ??wstrstr_4: \ 00000044 01A04AE2 SUB R10,R10,#+1 \ ??wstrstr_3: \ 00000048 ........ LDRH R0,[R9], #+2 \ 0000004C ........ _BLF char16to8,??char16to8??rA \ 00000050 ........ LDRB R1,[R8], #+1 \ 00000054 010050E1 CMP R0,R1 \ 00000058 0100001A BNE ??wstrstr_5 \ 0000005C 00005AE3 CMP R10,#+0 \ 00000060 F7FFFF1A BNE ??wstrstr_4 \ ??wstrstr_5: \ 00000064 00005AE3 CMP R10,#+0 \ 00000068 EAFFFF1A BNE ??wstrstr_1 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 F087BDE8 POP {R4-R10,PC} 5154 } 5155 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 5156 5157 } 5158 \ In segment CODE, align 4, keep-with-next 5159 int IsUrl(WSHDR *ws, int pos, char *link) 5160 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 5161 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 5162 5163 int len = wstrlen(ws); 5164 unsigned short *str = ws->wsbody+1, *tmp, *begin; 5165 tmp = str; 5166 5167 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable210 ;; `?` \ 00000010 0260A0E1 MOV R6,R2 \ 00000014 230100EF SWI +291 \ 00000018 00008DE5 STR R0,[SP, #+0] \ 0000001C 04009DE5 LDR R0,[SP, #+4] \ 00000020 0730A0E3 MOV R3,#+7 \ 00000024 000090E5 LDR R0,[R0, #+0] \ 00000028 0D20A0E1 MOV R2,SP \ 0000002C 028080E2 ADD R8,R0,#+2 \ 00000030 941087E2 ADD R1,R7,#+148 \ 00000034 0800A0E1 MOV R0,R8 \ 00000038 ........ BL wstrstr \ 0000003C 00B0A0E1 MOV R11,R0 \ 00000040 0040A0E1 MOV R4,R0 \ 00000044 A890A0E1 LSR R9,R8,#+1 \ 00000048 02A045E2 SUB R10,R5,#+2 \ 0000004C 060000EA B ??IsUrl_0 5168 5169 while(str && (begin-tmp <= pos)) 5170 { 5171 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 5172 if(str-tmp >= pos-2) 5173 { 5174 for(;begin < str; begin++, link++) 5175 *link = char16to8(*begin); 5176 link[str-begin] = 0; 5177 return 1; 5178 } 5179 begin = str = wstrstr(str, "http://", &len, 7); \ ??IsUrl_1: \ 00000050 0730A0E3 MOV R3,#+7 \ 00000054 0D20A0E1 MOV R2,SP \ 00000058 941087E2 ADD R1,R7,#+148 \ 0000005C 0B00A0E1 MOV R0,R11 \ 00000060 ........ BL wstrstr \ 00000064 00B0A0E1 MOV R11,R0 \ 00000068 0040A0E1 MOV R4,R0 \ ??IsUrl_0: \ 0000006C 00005BE3 CMP R11,#+0 \ 00000070 0200000A BEQ ??IsUrl_2 \ 00000074 A40069E0 RSB R0,R9,R4, LSR #+1 \ 00000078 000055E1 CMP R5,R0 \ 0000007C 0B0000AA BGE ??IsUrl_3 5180 } 5181 5182 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 5183 begin = str = wstrstr(tmp, "www.", &len, 4); \ 0000008C 0430A0E3 MOV R3,#+4 \ 00000090 0D20A0E1 MOV R2,SP \ 00000094 9C1087E2 ADD R1,R7,#+156 \ 00000098 0800A0E1 MOV R0,R8 \ 0000009C 200000EA B ??IsUrl_4 \ ??IsUrl_5: \ 000000A0 00109DE5 LDR R1,[SP, #+0] \ 000000A4 02B08BE2 ADD R11,R11,#+2 \ 000000A8 011041E2 SUB R1,R1,#+1 \ 000000AC 00108DE5 STR R1,[SP, #+0] \ ??IsUrl_3: \ 000000B0 00009DE5 LDR R0,[SP, #+0] \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 0600000A BEQ ??IsUrl_6 \ 000000BC B000DBE1 LDRH R0,[R11, #+0] \ 000000C0 ........ _BLF char16to8,??char16to8??rA \ 000000C4 0010A0E1 MOV R1,R0 \ 000000C8 0700A0E1 MOV R0,R7 \ 000000CC 180000EF SWI +24 \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 F1FFFF1A BNE ??IsUrl_5 \ ??IsUrl_6: \ 000000D8 AB0069E0 RSB R0,R9,R11, LSR #+1 \ 000000DC 0A0050E1 CMP R0,R10 \ 000000E0 DAFFFFBA BLT ??IsUrl_1 \ ??IsUrl_7: \ 000000E4 0B0054E1 CMP R4,R11 \ 000000E8 0300002A BCS ??IsUrl_8 \ 000000EC ........ LDRH R0,[R4], #+2 \ 000000F0 ........ _BLF char16to8,??char16to8??rA \ 000000F4 ........ STRB R0,[R6], #+1 \ 000000F8 F9FFFFEA B ??IsUrl_7 \ ??IsUrl_8: \ 000000FC AB00A0E1 LSR R0,R11,#+1 \ 00000100 A40040E0 SUB R0,R0,R4, LSR #+1 \ 00000104 0010A0E3 MOV R1,#+0 \ 00000108 0610C0E7 STRB R1,[R0, +R6] \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 F68FBDE8 POP {R1,R2,R4-R11,PC} 5184 while(str && (begin-tmp <= pos)) 5185 { 5186 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 5187 if(str-tmp >= pos-2) 5188 { 5189 for(;begin < str; begin++, link++) 5190 *link = char16to8(*begin); 5191 link[str-begin] = 0; 5192 return 1; 5193 } 5194 begin = str = wstrstr(str, "www.", &len, 4); \ ??IsUrl_9: \ 00000114 0430A0E3 MOV R3,#+4 \ 00000118 0D20A0E1 MOV R2,SP \ 0000011C 9C1087E2 ADD R1,R7,#+156 \ 00000120 0B00A0E1 MOV R0,R11 \ ??IsUrl_4: \ 00000124 ........ BL wstrstr \ 00000128 00B0A0E1 MOV R11,R0 \ 0000012C 0040A0E1 MOV R4,R0 \ 00000130 00005BE3 CMP R11,#+0 \ 00000134 0200000A BEQ ??IsUrl_10 \ 00000138 A40069E0 RSB R0,R9,R4, LSR #+1 \ 0000013C 000055E1 CMP R5,R0 \ 00000140 050000AA BGE ??IsUrl_11 5195 } 5196 return 0; \ ??IsUrl_10: \ 00000144 0000A0E3 MOV R0,#+0 \ 00000148 F68FBDE8 POP {R1,R2,R4-R11,PC} ;; return \ ??IsUrl_12: \ 0000014C 00109DE5 LDR R1,[SP, #+0] \ 00000150 02B08BE2 ADD R11,R11,#+2 \ 00000154 011041E2 SUB R1,R1,#+1 \ 00000158 00108DE5 STR R1,[SP, #+0] \ ??IsUrl_11: \ 0000015C 00009DE5 LDR R0,[SP, #+0] \ 00000160 000050E3 CMP R0,#+0 \ 00000164 0600000A BEQ ??IsUrl_13 \ 00000168 B000DBE1 LDRH R0,[R11, #+0] \ 0000016C ........ _BLF char16to8,??char16to8??rA \ 00000170 0010A0E1 MOV R1,R0 \ 00000174 0700A0E1 MOV R0,R7 \ 00000178 180000EF SWI +24 \ 0000017C 000050E3 CMP R0,#+0 \ 00000180 F1FFFF1A BNE ??IsUrl_12 \ ??IsUrl_13: \ 00000184 AB0069E0 RSB R0,R9,R11, LSR #+1 \ 00000188 0A0050E1 CMP R0,R10 \ 0000018C E0FFFFBA BLT ??IsUrl_9 \ ??IsUrl_14: \ 00000190 0B0054E1 CMP R4,R11 \ 00000194 D8FFFF2A BCS ??IsUrl_8 \ 00000198 ........ LDRH R0,[R4], #+2 \ 0000019C ........ _BLF char16to8,??char16to8??rA \ 000001A0 ........ STRB R0,[R6], #+1 \ 000001A4 F9FFFFEA B ??IsUrl_14 5197 } 5198 5199 #define UTF16_DIS_UNDERLINE (0xE002) 5200 #define UTF16_ENA_UNDERLINE (0xE001) 5201 \ In segment CODE, align 4, keep-with-next 5202 void ParseAnswer(WSHDR *ws, const char *s) 5203 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 5204 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 5205 S_SMILES *t; 5206 S_SMILES *t_root=(S_SMILES *)s_top; \ 00000008 10029FE5 LDR R0,??ParseAnswer_0 ;; s_top \ 0000000C 04D04DE2 SUB SP,SP,#+4 \ 00000010 006090E5 LDR R6,[R0, #+0] \ 00000014 0150A0E1 MOV R5,R1 5207 STXT_SMILES *st; 5208 unsigned int wchar; 5209 unsigned int ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000018 0000D5E5 LDRB R0,[R5, #+0] \ 0000001C 0110D5E5 LDRB R1,[R5, #+1] \ 00000020 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000024 0210D5E5 LDRB R1,[R5, #+2] \ 00000028 010880E0 ADD R0,R0,R1, LSL #+16 \ 0000002C 0310D5E5 LDRB R1,[R5, #+3] \ 00000030 018C80E0 ADD R8,R0,R1, LSL #+24 5210 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 5211 int i; 5212 while(wchar=*s) 5213 { 5214 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 5215 { 5216 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 5217 while(*s && strchr(valid, *s)) 5218 { 5219 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 5220 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 5221 s++; 5222 } \ 00000058 0010D5E5 LDRB R1,[R5, #+0] \ 0000005C 000051E3 CMP R1,#+0 \ 00000060 0300000A BEQ ??ParseAnswer_4 \ 00000064 0900A0E1 MOV R0,R9 \ 00000068 180000EF SWI +24 \ 0000006C 000050E3 CMP R0,#+0 \ 00000070 F3FFFF1A BNE ??ParseAnswer_2 5223 wsAppendChar(ws,UTF16_DIS_UNDERLINE); \ ??ParseAnswer_4: \ 00000074 0210A0E3 MOV R1,#+2 \ 00000078 E01C81E3 ORR R1,R1,#0xE000 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 1C0000EF SWI +28 5224 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); \ 00000084 0000D5E5 LDRB R0,[R5, #+0] \ 00000088 0110D5E5 LDRB R1,[R5, #+1] \ 0000008C 010480E0 ADD R0,R0,R1, LSL #+8 \ 00000090 0210D5E5 LDRB R1,[R5, #+2] \ 00000094 010880E0 ADD R0,R0,R1, LSL #+16 \ 00000098 0310D5E5 LDRB R1,[R5, #+3] \ 0000009C 018C80E0 ADD R8,R0,R1, LSL #+24 5225 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable210 ;; `?` \ 000000B0 0500A0E1 MOV R0,R5 \ 000000B4 941089E2 ADD R1,R9,#+148 \ 000000B8 180100EF SWI +280 \ 000000BC 000055E1 CMP R5,R0 \ 000000C0 0400000A BEQ ??ParseAnswer_6 \ 000000C4 9C1089E2 ADD R1,R9,#+156 \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 180100EF SWI +280 \ 000000D0 000055E1 CMP R5,R0 \ 000000D4 0200001A BNE ??ParseAnswer_7 \ ??ParseAnswer_6: \ 000000D8 0110A0E3 MOV R1,#+1 \ 000000DC E01C81E3 ORR R1,R1,#0xE000 \ 000000E0 DAFFFFEA B ??ParseAnswer_3 5226 } 5227 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 5228 while(t) 5229 { 5230 st=t->lines; 5231 while(st) 5232 { 5233 if ((ulb&st->mask)==st->key) \ ??ParseAnswer_9: \ 000000EC 0B00DAE5 LDRB R0,[R10, #+11] \ 000000F0 0A10DAE5 LDRB R1,[R10, #+10] \ 000000F4 0620DAE5 LDRB R2,[R10, #+6] \ 000000F8 000481E1 ORR R0,R1,R0, LSL #+8 \ 000000FC 0910DAE5 LDRB R1,[R10, #+9] \ 00000100 000481E1 ORR R0,R1,R0, LSL #+8 \ 00000104 0810DAE5 LDRB R1,[R10, #+8] \ 00000108 000481E1 ORR R0,R1,R0, LSL #+8 \ 0000010C 0710DAE5 LDRB R1,[R10, #+7] \ 00000110 080000E0 AND R0,R0,R8 \ 00000114 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000118 0520DAE5 LDRB R2,[R10, #+5] \ 0000011C 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000120 0420DAE5 LDRB R2,[R10, #+4] \ 00000124 011482E1 ORR R1,R2,R1, LSL #+8 \ 00000128 010050E1 CMP R0,R1 \ 0000012C 0700001A BNE ??ParseAnswer_10 5234 { 5235 if (!strncmp(s,st->text,strlen(st->text))) goto L1; \ 00000130 0C008AE2 ADD R0,R10,#+12 \ 00000134 1B0000EF SWI +27 \ 00000138 0020A0E1 MOV R2,R0 \ 0000013C 0C108AE2 ADD R1,R10,#+12 \ 00000140 0500A0E1 MOV R0,R5 \ 00000144 150100EF SWI +277 \ 00000148 000050E3 CMP R0,#+0 \ 0000014C 1500000A BEQ ??ParseAnswer_11 5236 } 5237 st=st->next; \ ??ParseAnswer_10: \ 00000150 0000A0E3 MOV R0,#+0 \ ??ParseAnswer_12: \ 00000154 0A20D0E7 LDRB R2,[R0, +R10] \ 00000158 0D10A0E1 MOV R1,SP \ 0000015C 0120C0E7 STRB R2,[R0, +R1] \ 00000160 010080E2 ADD R0,R0,#+1 \ 00000164 040050E3 CMP R0,#+4 \ 00000168 F9FFFFBA BLT ??ParseAnswer_12 \ 0000016C 00A09DE5 LDR R10,[SP, #+0] 5238 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 5239 t=t->next; \ 00000178 009099E5 LDR R9,[R9, #+0] \ ??ParseAnswer_8: \ 0000017C 000059E3 CMP R9,#+0 \ 00000180 08A09915 LDRNE R10,[R9, #+8] \ 00000184 F9FFFF1A BNE ??ParseAnswer_13 5240 } 5241 L1: 5242 if (t) 5243 { 5244 wchar=t->uni_smile; 5245 s+=strlen(st->text); 5246 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 5247 } 5248 else 5249 { 5250 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 5251 s++; 5252 ulb>>=8; 5253 ulb+=s[3]<<24; \ 00000194 015085E2 ADD R5,R5,#+1 \ 00000198 0300D5E5 LDRB R0,[R5, #+3] \ 0000019C 000CA0E1 LSL R0,R0,#+24 \ 000001A0 288480E0 ADD R8,R0,R8, LSR #+8 \ 000001A4 0A0000EA B ??ParseAnswer_14 5254 } \ ??ParseAnswer_11: \ 000001A8 047099E5 LDR R7,[R9, #+4] \ 000001AC 0C008AE2 ADD R0,R10,#+12 \ 000001B0 1B0000EF SWI +27 \ 000001B4 055080E0 ADD R5,R0,R5 \ 000001B8 0000D5E5 LDRB R0,[R5, #+0] \ 000001BC 0110D5E5 LDRB R1,[R5, #+1] \ 000001C0 010480E0 ADD R0,R0,R1, LSL #+8 \ 000001C4 0210D5E5 LDRB R1,[R5, #+2] \ 000001C8 010880E0 ADD R0,R0,R1, LSL #+16 \ 000001CC 0310D5E5 LDRB R1,[R5, #+3] \ 000001D0 018C80E0 ADD R8,R0,R1, LSL #+24 5255 if (wchar!=10) wsAppendChar(ws,wchar); \ ??ParseAnswer_14: \ 000001D4 0A0057E3 CMP R7,#+10 \ 000001D8 B0FFFF0A BEQ ??ParseAnswer_1 \ 000001DC 0710A0E1 MOV R1,R7 \ 000001E0 0400A0E1 MOV R0,R4 \ 000001E4 1C0000EF SWI +28 \ 000001E8 ACFFFFEA B ??ParseAnswer_1 5256 } 5257 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 5258 while(i>1) 5259 { 5260 if (ws->wsbody[i--]!=13) break; 5261 ws->wsbody[0]=i; \ ??ParseAnswer_16: \ 000001F8 B010C0E1 STRH R1,[R0, #+0] \ ??ParseAnswer_15: \ 000001FC 020051E3 CMP R1,#+2 \ 00000200 F187BDB8 POPLT {R0,R4-R10,PC} \ 00000204 0120A0E1 MOV R2,R1 \ 00000208 011042E2 SUB R1,R2,#+1 \ 0000020C 822080E0 ADD R2,R0,R2, LSL #+1 \ 00000210 B020D2E1 LDRH R2,[R2, #+0] \ 00000214 0D0052E3 CMP R2,#+13 \ 00000218 F6FFFF0A BEQ ??ParseAnswer_16 5262 } 5263 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 5264 \ In segment CODE, align 4, keep-with-next 5265 void SaveAnswer(CLIST *cl, WSHDR *ws) 5266 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 5267 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 5268 mfree(cl->answer); \ 00000014 780094E5 LDR R0,[R4, #+120] \ 00000018 150000EF SWI +21 5269 cl->answer=p; \ 0000001C 785084E5 STR R5,[R4, #+120] 5270 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 5271 5272 //links applicator 5273 5274 \ In segment CODE, align 4, keep-with-next 5275 int GetTempName(void) 5276 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 5277 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 5278 unsigned long iday; 5279 TTime tt; 5280 TDate dd; 5281 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 5282 dd.year=dd.year%100; \ 00000014 00109DE5 LDR R1,[SP, #+0] \ 00000018 84209FE5 LDR R2,??GetTempName_0 ;; 0x51eb851f \ 0000001C 92318CE0 UMULL R3,R12,R2,R1 \ 00000020 6430A0E3 MOV R3,#+100 \ 00000024 ACC2A0E1 LSR R12,R12,#+5 \ 00000028 930C0CE0 MUL R12,R3,R12 5283 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 5284 iday=iday+(dd.year>>2); \ 0000002C 6D20A0E3 MOV R2,#+109 \ 00000030 0CC041E0 SUB R12,R1,R12 \ 00000034 00C08DE5 STR R12,[SP, #+0] \ 00000038 0400DDE5 LDRB R0,[SP, #+4] \ 0000003C 0C10A0E1 MOV R1,R12 \ 00000040 60C09FE5 LDR R12,??GetTempName_0+0x4 ;; ??DMonth \ 00000044 402F82E3 ORR R2,R2,#0x100 \ 00000048 00318CE0 ADD R3,R12,R0, LSL #+2 \ 0000004C 043013E5 LDR R3,[R3, #-4] 5285 if (dd.month>2||(dd.year&3)>0) \ 00000050 030050E3 CMP R0,#+3 \ 00000054 923121E0 MLA R1,R2,R1,R3 \ 00000058 0520DDE5 LDRB R2,[SP, #+5] \ 0000005C 012042E2 SUB R2,R2,#+1 \ 00000060 011082E0 ADD R1,R2,R1 \ 00000064 00209DE5 LDR R2,[SP, #+0] \ 00000068 221181E0 ADD R1,R1,R2, LSR #+2 \ 0000006C 0100002A BCS ??GetTempName_1 \ 00000070 030012E3 TST R2,#0x3 \ 00000074 0000000A BEQ ??GetTempName_2 5286 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 5287 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 5288 return iday; \ ??GetTempName_2: \ 0000007C 0830DDE5 LDRB R3,[SP, #+8] \ 00000080 0920DDE5 LDRB R2,[SP, #+9] \ 00000084 0A00DDE5 LDRB R0,[SP, #+10] \ 00000088 18C0A0E3 MOV R12,#+24 \ 0000008C 9C3121E0 MLA R1,R12,R1,R3 \ 00000090 3C30A0E3 MOV R3,#+60 \ 00000094 932121E0 MLA R1,R3,R1,R2 \ 00000098 10D08DE2 ADD SP,SP,#+16 \ 0000009C 930120E0 MLA R0,R3,R1,R0 \ 000000A0 0080BDE8 POP {PC} ;; return \ ??GetTempName_0: \ 000000A4 1F85EB51 DC32 0x51eb851f \ 000000A8 ........ DC32 ??DMonth 5289 } \ In segment DATA_C, align 4, align-sorted \ ??DMonth: \ 00000000 000000001F00 DC32 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 \ 00003B000000 \ 5A0000007800 \ 000097000000 \ B5000000D400 \ 0000F3000000 \ 110100003001 \ 00004E010000 \ 6D010000 5290 5291 \ In segment CODE, align 4, keep-with-next 5292 void recon() 5293 { 5294 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable211 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 5295 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable212 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 5000A0E3 MOV R0,#+80 \ 00000014 600D80E3 ORR R0,R0,#0x1800 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 5296 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 D40184E5 STR R0,[R4, #+468] 5297 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable213 ;; create_connect \ 0000002C 710100EF SWI +369 5298 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 5299 \ In segment CODE, align 4, keep-with-next 5300 int edchat_onkey(GUI *data, GUI_MSG *msg) 5301 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5302 //-1 - do redraw 5303 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R5,??DataTable221 ;; S_ICONS \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 3000A0E3 MOV R0,#+48 \ 00000018 600D80E3 ORR R0,R0,#0x1800 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 8C0100EF SWI +396 5304 CLIST *t; 5305 TPKT *p; 5306 EDITCONTROL ec; 5307 int len, f;//2026rev 5308 unsigned err;//2026rev 5309 char *s; 5310 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 088090E5 LDR R8,[R0, #+8] 5311 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 5312 char fn[256]; 5313 5314 if (msg->keys==0xFFF) \ 00000038 F200D7E1 LDRSH R0,[R7, #+2] \ 0000003C FF10A0E3 MOV R1,#+255 \ 00000040 F01E81E3 ORR R1,R1,#0xF00 \ 00000044 010050E1 CMP R0,R1 \ 00000048 0200001A BNE ??edchat_onkey_0 5315 { 5316 void ec_menu(EDCHAT_STRUCT *); 5317 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 5318 return(-1); \ ??edchat_onkey_1: \ 00000054 320100EA B ??edchat_onkey_2 5319 } 5320 if (msg->keys==0xFF0) return (1); \ ??edchat_onkey_0: \ 00000058 FF0E50E3 CMP R0,#+4080 \ 0000005C 0100001A BNE ??edchat_onkey_3 \ 00000060 0100A0E3 MOV R0,#+1 \ 00000064 2F0100EA B ??edchat_onkey_4 \ ??edchat_onkey_3: \ 00000068 040097E5 LDR R0,[R7, #+4] \ 0000006C 9510A0E3 MOV R1,#+149 \ 00000070 040090E5 LDR R0,[R0, #+4] \ 00000074 401F81E3 ORR R1,R1,#0x100 \ 00000078 010050E1 CMP R0,R1 \ 0000007C 6A00001A BNE ??edchat_onkey_5 5321 #ifdef EVILFOX 5322 if (msg->gbsmsg->msg==LONG_PRESS) 5323 { 5324 if (l==VOL_DOWN_BUTTON) 5325 { 5326 WSHDR *ws; 5327 ExtractEditControl(data,ed_struct->ed_answer,&ec); 5328 if(wstrlen(ec.pWS)>0) 5329 { 5330 ws=AllocWS(1); 5331 CutWSTR(ws,0); 5332 5333 EDIT_SetFocus(data,ed_struct->ed_answer); 5334 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5335 5336 FreeWS(ws); 5337 RefreshGUI(); 5338 } 5339 } 5340 if (l==VOL_UP_BUTTON) 5341 { 5342 // WSHDR *ws=AllocWS(strlen(ed_struct->ed_contact->last_msg_buffer)+1); 5343 // ascii2ws(ws,ed_struct->ed_contact->last_msg_buffer); 5344 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 5345 ascii2ws(ws,last_msg_buffer); 5346 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 5347 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5348 FreeWS(ws); 5349 RefreshGUI(); 5350 } 5351 } 5352 #else 5353 5354 void AddSmile(GUI *data); 5355 extern const int LongRightAction; 5356 extern const int LongLeftAction; 5357 if (msg->gbsmsg->msg==LONG_PRESS) 5358 { 5359 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 2200001A BNE ??edchat_onkey_6 5360 { 5361 if(LongRightAction==2) \ 00000088 F4049FE5 LDR R0,??edchat_onkey_7 ;; LongRightAction \ 0000008C 000090E5 LDR R0,[R0, #+0] \ 00000090 020050E3 CMP R0,#+2 \ 00000094 0200001A BNE ??edchat_onkey_8 5362 CreateSmileSelectGUI(ed_struct); \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 000000A0 610000EA B ??edchat_onkey_5 5363 else 5364 if(LongRightAction==1) \ ??edchat_onkey_8: \ 000000A4 010050E3 CMP R0,#+1 \ 000000A8 5F00001A BNE ??edchat_onkey_5 5365 { 5366 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 000000AC 0400A0E1 MOV R0,R4 \ 000000B0 820100EF SWI +386 \ 000000B4 081096E5 LDR R1,[R6, #+8] \ 000000B8 010050E1 CMP R0,R1 \ 000000BC 5A00001A BNE ??edchat_onkey_5 5367 { 5368 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C0 04208DE2 ADD R2,SP,#+4 \ 000000C4 0400A0E1 MOV R0,R4 \ 000000C8 690100EF SWI +361 5369 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 000000CC 0400A0E1 MOV R0,R4 \ 000000D0 D30100EF SWI +467 \ 000000D4 2C109DE5 LDR R1,[SP, #+44] \ 000000D8 010040E2 SUB R0,R0,#+1 \ 000000DC 001091E5 LDR R1,[R1, #+0] \ 000000E0 B010D1E1 LDRH R1,[R1, #+0] \ 000000E4 000051E1 CMP R1,R0 \ 000000E8 4F00001A BNE ??edchat_onkey_5 5370 { 5371 t=FindNextActiveContact(ed_struct->ed_contact); \ 000000EC 00A096E5 LDR R10,[R6, #+0] \ 000000F0 0A00A0E1 MOV R0,R10 \ 000000F4 ........ BL FindNextActiveContact \ 000000F8 0090B0E1 MOVS R9,R0 5372 if (t && t!=ed_struct->ed_contact) \ 000000FC 0A005911 CMPNE R9,R10 \ 00000100 4900000A BEQ ??edchat_onkey_5 5373 { 5374 CreateEditChat(t); \ ??edchat_onkey_9: \ 00000104 0900A0E1 MOV R0,R9 \ 00000108 ........ BL CreateEditChat 5375 return(1); \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 040100EA B ??edchat_onkey_4 5376 } 5377 } 5378 } 5379 } 5380 } 5381 if (l==LEFT_BUTTON && LongLeftAction) \ ??edchat_onkey_6: \ 00000114 3D0058E3 CMP R8,#+61 \ 00000118 1A00001A BNE ??edchat_onkey_10 \ 0000011C 64049FE5 LDR R0,??edchat_onkey_7+0x4 ;; LongLeftAction \ 00000120 000090E5 LDR R0,[R0, #+0] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 3F00000A BEQ ??edchat_onkey_5 5382 { 5383 if (EDIT_GetFocus(data)==ed_struct->ed_answer) \ 0000012C 0400A0E1 MOV R0,R4 \ 00000130 820100EF SWI +386 \ 00000134 081096E5 LDR R1,[R6, #+8] \ 00000138 010050E1 CMP R0,R1 \ 0000013C 3A00001A BNE ??edchat_onkey_5 5384 { 5385 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000140 04208DE2 ADD R2,SP,#+4 \ 00000144 0400A0E1 MOV R0,R4 \ 00000148 690100EF SWI +361 5386 if (ec.pWS->wsbody[0]==(EDIT_GetCursorPos(data)-1)) \ 0000014C 0400A0E1 MOV R0,R4 \ 00000150 D30100EF SWI +467 \ 00000154 2C109DE5 LDR R1,[SP, #+44] \ 00000158 010040E2 SUB R0,R0,#+1 \ 0000015C 001091E5 LDR R1,[R1, #+0] \ 00000160 B010D1E1 LDRH R1,[R1, #+0] \ 00000164 000051E1 CMP R1,R0 \ 00000168 2F00001A BNE ??edchat_onkey_5 5387 { 5388 t=FindPrevActiveContact(ed_struct->ed_contact); \ 0000016C 00A096E5 LDR R10,[R6, #+0] \ 00000170 0A00A0E1 MOV R0,R10 \ 00000174 ........ BL FindPrevActiveContact \ 00000178 0090B0E1 MOVS R9,R0 5389 if (t && t!=ed_struct->ed_contact) \ 0000017C 0A005911 CMPNE R9,R10 \ 00000180 2900000A BEQ ??edchat_onkey_5 \ 00000184 DEFFFFEA B ??edchat_onkey_9 5390 { 5391 CreateEditChat(t); 5392 return(1); 5393 } 5394 } 5395 } 5396 } 5397 #ifdef ELKA 5398 if (l==VOL_DOWN_BUTTON) \ ??edchat_onkey_10: \ 00000188 0E0058E3 CMP R8,#+14 \ 0000018C 0F00001A BNE ??edchat_onkey_11 5399 { 5400 WSHDR *ws; 5401 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000190 081096E5 LDR R1,[R6, #+8] \ 00000194 04208DE2 ADD R2,SP,#+4 \ 00000198 0400A0E1 MOV R0,R4 \ 0000019C 690100EF SWI +361 5402 if(wstrlen(ec.pWS)>0) \ 000001A0 2C009DE5 LDR R0,[SP, #+44] \ 000001A4 230100EF SWI +291 \ 000001A8 010050E3 CMP R0,#+1 \ 000001AC 1E0000BA BLT ??edchat_onkey_5 5403 { 5404 ws=AllocWS(1); \ 000001B0 0100A0E3 MOV R0,#+1 \ 000001B4 250100EF SWI +293 \ 000001B8 0090A0E1 MOV R9,R0 5405 CutWSTR(ws,0); \ 000001BC 0010A0E3 MOV R1,#+0 \ 000001C0 260100EF SWI +294 5406 5407 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000001C4 081096E5 LDR R1,[R6, #+8] \ 000001C8 0400A0E1 MOV R0,R4 \ 000001CC 0F0000EA B ??edchat_onkey_12 5408 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5409 5410 FreeWS(ws); 5411 RefreshGUI(); 5412 } 5413 } 5414 if (l==VOL_UP_BUTTON) \ ??edchat_onkey_11: \ 000001D0 0D0058E3 CMP R8,#+13 \ 000001D4 1400001A BNE ??edchat_onkey_5 5415 { 5416 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); \ 000001D8 1800A0E3 MOV R0,#+24 \ 000001DC 400E80E3 ORR R0,R0,#0x400 \ 000001E0 050080E0 ADD R0,R0,R5 \ 000001E4 1B0000EF SWI +27 \ 000001E8 010080E2 ADD R0,R0,#+1 \ 000001EC 250100EF SWI +293 \ 000001F0 0090A0E1 MOV R9,R0 5417 ascii2ws(ws,last_msg_buffer); \ 000001F4 1800A0E3 MOV R0,#+24 \ 000001F8 400E80E3 ORR R0,R0,#0x400 \ 000001FC 051080E0 ADD R1,R0,R5 \ 00000200 0900A0E1 MOV R0,R9 \ 00000204 ........ _BLF ascii2ws,??ascii2ws??rA 5418 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); \ 00000208 081096E5 LDR R1,[R6, #+8] \ 0000020C 040096E5 LDR R0,[R6, #+4] \ ??edchat_onkey_12: \ 00000210 9B0100EF SWI +411 5419 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000214 040096E5 LDR R0,[R6, #+4] \ 00000218 0910A0E1 MOV R1,R9 \ 0000021C 810100EF SWI +385 5420 FreeWS(ws); \ 00000220 0900A0E1 MOV R0,R9 \ 00000224 290100EF SWI +297 5421 RefreshGUI(); \ 00000228 960100EF SWI +406 5422 } 5423 #endif 5424 } 5425 #endif 5426 if (msg->gbsmsg->msg==KEY_DOWN) \ ??edchat_onkey_5: \ 0000022C 040097E5 LDR R0,[R7, #+4] \ 00000230 9310A0E3 MOV R1,#+147 \ 00000234 040090E5 LDR R0,[R0, #+4] \ 00000238 401F81E3 ORR R1,R1,#0x100 \ 0000023C 010050E1 CMP R0,R1 \ 00000240 0A00001A BNE ??edchat_onkey_13 5427 { 5428 if ((l>='0')&&(l<='9')) \ 00000244 300058E3 CMP R8,#+48 \ 00000248 0B0000BA BLT ??edchat_onkey_14 \ 0000024C 3A0058E3 CMP R8,#+58 \ 00000250 060000AA BGE ??edchat_onkey_13 5429 { 5430 if (EDIT_GetFocus(data)!=ed_struct->ed_answer) \ 00000254 0400A0E1 MOV R0,R4 \ 00000258 820100EF SWI +386 \ 0000025C 081096E5 LDR R1,[R6, #+8] \ 00000260 010050E1 CMP R0,R1 \ 00000264 0100000A BEQ ??edchat_onkey_13 5431 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000268 0400A0E1 MOV R0,R4 \ 0000026C 9B0100EF SWI +411 5432 } 5433 if (l==GREEN_BUTTON) 5434 { 5435 if (connect_state==3) 5436 { 5437 if ((t=ed_struct->ed_contact)) 5438 { 5439 ExtractEditControl(data,ed_struct->ed_answer,&ec); 5440 SaveAnswer(t,ec.pWS); 5441 if ((s=t->answer)) 5442 { 5443 if ((len=strlen(s))) 5444 { 5445 msg_away_timer=0; 5446 away_m=0; 5447 if(SHOW_ACTIVE) 5448 t->isactive=ACTIVE_TIME; 5449 p=malloc(sizeof(PKT)+len+1); 5450 p->pkt.uin=t->uin; 5451 p->pkt.type=T_SENDMSG; 5452 p->pkt.data_len=len; 5453 strcpy(p->data,s); 5454 /* 5455 #ifdef EVILFOX 5456 strcpy(t->last_msg_buffer, s); 5457 #else 5458 */ 5459 #ifdef ELKA 5460 strcpy(last_msg_buffer, s); 5461 #endif 5462 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 5463 SUBPROC((void *)SendAnswer,0,p); 5464 main2_count++; 5465 mfree(t->answer); 5466 t->answer=NULL; 5467 // request_remake_edchat=1; 5468 EDIT_SetFocus(data,ed_struct->ed_answer); 5469 CutWSTR(ews,0); 5470 EDIT_SetTextToFocused(data,ews); 5471 AddMsgToChat(data); 5472 RecountMenu(t,1); 5473 return(-1); 5474 } 5475 } 5476 } 5477 } 5478 } 5479 //================2026rev-begin 5480 if (l==ENTER_BUTTON) 5481 { 5482 5483 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 5484 { 5485 int pos, len; 5486 char *link; 5487 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 5488 wstrcpy(ews,ec.pWS); 5489 pos = EDIT_GetCursorPos(data); 5490 len = wstrlen(ews); 5491 link = malloc(len+1); 5492 5493 if(IsUrl(ews, pos, link)) 5494 { 5495 //templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 5496 // templates_lines[i++]=pp; 5497 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 5498 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 5499 { 5500 fwrite(f,link,strlen(link),&err); 5501 fclose(f,&err); 5502 str_2ws(ews,fn,256); 5503 extern const int OpenBrowser; 5504 if(OpenBrowser) 5505 ExecuteFile(ews,0,0); 5506 else 5507 { 5508 extern const char BalleteMiniPath[]; //kluchnik 26.03.08 5509 ExecuteFile(ews,0,(void*)BalleteMiniPath); 5510 } 5511 5512 unlink(fn, &err); 5513 } 5514 // int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 5515 // templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 5516 // templates_lines[i++]="Open Url"; 5517 // EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 5518 // LockSched(); 5519 // ShowMSG(1,(int)link); 5520 // UnlockSched(); 5521 mfree(link); 5522 return (-1); 5523 } 5524 else 5525 { 5526 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 5527 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 5528 mfree(link); 5529 return (-1); 5530 } 5531 5532 } 5533 5534 } 5535 //================ 2026rev-end =================// 5536 5537 if (l==VOL_UP_BUTTON) 5538 { 5539 int pos; 5540 5541 if ((pos=EDIT_GetFocus(data)-2)>=2) 5542 { 5543 EDIT_SetFocus(data, pos); 5544 EDIT_SetCursorPos(data, 1); 5545 } 5546 return (-1); 5547 } 5548 if (l==VOL_DOWN_BUTTON) 5549 { 5550 int pos; 5551 5552 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 5553 { 5554 EDIT_SetFocus(data, pos); 5555 EDIT_SetCursorPos(data, 1); 5556 } 5557 return (-1); 5558 } 5559 } 5560 return(0); //Do standart keys \ ??edchat_onkey_13: \ 00000270 0000A0E3 MOV R0,#+0 \ 00000274 4CDF8DE2 ADD SP,SP,#+304 \ 00000278 F08FBDE8 POP {R4-R11,PC} ;; return \ ??edchat_onkey_14: \ 0000027C 0B0058E3 CMP R8,#+11 \ 00000280 5300001A BNE ??edchat_onkey_15 \ 00000284 880195E5 LDR R0,[R5, #+392] \ 00000288 030050E3 CMP R0,#+3 \ 0000028C F7FFFF1A BNE ??edchat_onkey_13 \ 00000290 009096E5 LDR R9,[R6, #+0] \ 00000294 000059E3 CMP R9,#+0 \ 00000298 F4FFFF0A BEQ ??edchat_onkey_13 \ 0000029C 081096E5 LDR R1,[R6, #+8] \ 000002A0 04208DE2 ADD R2,SP,#+4 \ 000002A4 0400A0E1 MOV R0,R4 \ 000002A8 690100EF SWI +361 \ 000002AC 2C109DE5 LDR R1,[SP, #+44] \ 000002B0 0900A0E1 MOV R0,R9 \ 000002B4 ........ BL SaveAnswer \ 000002B8 78A099E5 LDR R10,[R9, #+120] \ 000002BC 00005AE3 CMP R10,#+0 \ 000002C0 EAFFFF0A BEQ ??edchat_onkey_13 \ 000002C4 0A00A0E1 MOV R0,R10 \ 000002C8 1B0000EF SWI +27 \ 000002CC 00B0B0E1 MOVS R11,R0 \ 000002D0 E6FFFF0A BEQ ??edchat_onkey_13 \ 000002D4 ........ LDR R0,??DataTable215 ;; SHOW_ACTIVE \ 000002D8 0070A0E3 MOV R7,#+0 \ 000002DC 000090E5 LDR R0,[R0, #+0] \ 000002E0 287185E5 STR R7,[R5, #+296] \ 000002E4 307185E5 STR R7,[R5, #+304] \ 000002E8 000050E3 CMP R0,#+0 \ 000002EC 5A0FA013 MOVNE R0,#+360 \ 000002F0 80008915 STRNE R0,[R9, #+128] \ 000002F4 09008BE2 ADD R0,R11,#+9 \ 000002F8 140000EF SWI +20 \ 000002FC 0080A0E1 MOV R8,R0 \ 00000300 0C0099E5 LDR R0,[R9, #+12] \ 00000304 0A10A0E1 MOV R1,R10 \ 00000308 000088E5 STR R0,[R8, #+0] \ 0000030C 0200A0E3 MOV R0,#+2 \ 00000310 B400C8E1 STRH R0,[R8, #+4] \ 00000314 B6B0C8E1 STRH R11,[R8, #+6] \ 00000318 080088E2 ADD R0,R8,#+8 \ 0000031C 1A0000EF SWI +26 \ 00000320 0A10A0E1 MOV R1,R10 \ 00000324 1800A0E3 MOV R0,#+24 \ 00000328 400E80E3 ORR R0,R0,#0x400 \ 0000032C 050080E0 ADD R0,R0,R5 \ 00000330 1A0000EF SWI +26 \ 00000334 1C0195E5 LDR R0,[R5, #+284] \ 00000338 ........ LDR R3,??DataTable243 ;; `?ed_contact)); 5581 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 5582 DrawImg(ScreenW()-1-width,1,icon); 5583 #else 5584 icon=*(S_ICONS+GetIconIndex(ed_struct->ed_contact)); \ 00000038 000090E5 LDR R0,[R0, #+0] \ 0000003C ........ BL GetIconIndex \ 00000040 004194E7 LDR R4,[R4, +R0, LSL #+2] 5585 width=GetImgWidth(icon); \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 220000EF SWI +34 \ 0000004C 0050A0E1 MOV R5,R0 5586 DrawImg(2,((HeaderH()-width)>>1)+YDISP,icon); \ 00000050 8A8100EF SWI +33162 \ 00000054 0420A0E1 MOV R2,R4 \ 00000058 050040E0 SUB R0,R0,R5 \ 0000005C 1810A0E3 MOV R1,#+24 \ 00000060 C01081E0 ADD R1,R1,R0, ASR #+1 \ 00000064 0200A0E3 MOV R0,#+2 \ 00000068 230000EF SWI +35 5587 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 5588 GetPaletteAdrByColorIndex(0), 5589 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 5590 #endif 5591 } 5592 } 5593 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return 5594 \ In segment CODE, align 4, keep-with-next 5595 void edchat_ghook(GUI *data, int cmd) 5596 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 5597 5598 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 5599 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 5600 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 5601 int j; 5602 EDITCONTROL ec; 5603 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 5604 PNGTOP_DESC *pltop=PNG_TOP(); 5605 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable221 ;; S_ICONS \ 00000008 2CD04DE2 SUB SP,SP,#+44 \ 0000000C 0050A0E1 MOV R5,R0 \ 00000010 0190A0E1 MOV R9,R1 \ 00000014 DF0100EF SWI +479 \ 00000018 0070A0E1 MOV R7,R0 \ 0000001C B98100EF SWI +33209 \ 00000020 0080A0E1 MOV R8,R0 \ 00000024 0060A0E3 MOV R6,#+0 \ 00000028 090059E3 CMP R9,#+9 \ 0000002C 0500001A BNE ??edchat_ghook_0 5606 { 5607 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 3000A0E3 MOV R0,#+48 \ 00000034 600D80E3 ORR R0,R0,#0x1800 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 5608 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 5609 } 5610 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 5611 { 5612 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 5613 // edgui_data=data; 5614 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 5615 5616 static void *methods[16]; 5617 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 5618 if (m) 5619 { 5620 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6700000A BEQ ??edchat_ghook_3 5621 { 5622 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 7E6FA0E3 MOV R6,#+504 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 5623 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 F40184E5 STR R0,[R4, #+500] 5624 methods[0]=(void *)my_ed_redraw; \ 00000098 84019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 5625 m[1]=methods; \ 000000A0 040086E0 ADD R0,R6,R4 \ 000000A4 040085E5 STR R0,[R5, #+4] \ ??edchat_ghook_1: \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F083BDE8 POP {R4-R9,PC} 5626 } 5627 } 5628 } 5629 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 5630 { 5631 // if (edgui_data==data) edgui_data=NULL; 5632 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 5633 { 5634 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 5635 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 5636 } 5637 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 5638 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 5639 } 5640 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0D00001A BNE ??edchat_ghook_7 5641 { 5642 pltop->dyn_pltop=SmilesImgList; \ 000000FC 24019FE5 LDR R0,??edchat_ghook_4+0x4 ;; SmilesImgList \ 00000100 000090E5 LDR R0,[R0, #+0] \ 00000104 080088E5 STR R0,[R8, #+8] 5643 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 5644 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C AC0194E5 LDR R0,[R4, #+428] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 AC0184E5 STR R0,[R4, #+428] 5645 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] 5646 #ifdef ELKA 5647 if (!total_unread) \ 00000120 AC0194E5 LDR R0,[R4, #+428] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 3B00001A BNE ??edchat_ghook_3 5648 { 5649 SLI_Off(); \ 0000012C ........ BL SLI_Off \ 00000130 DCFFFFEA B ??edchat_ghook_1 5650 } 5651 #endif 5652 /* if (request_close_edchat) 5653 { 5654 request_close_edchat=0; 5655 GeneralFunc_flag1(edchat_id,1); 5656 return; 5657 }*/ 5658 } 5659 if (cmd==7) \ ??edchat_ghook_7: \ 00000134 070059E3 CMP R9,#+7 \ 00000138 2800001A BNE ??edchat_ghook_8 5660 { 5661 SetSoftKey(data,&sk,SET_SOFT_KEY_N); \ 0000013C E8809FE5 LDR R8,??edchat_ghook_4+0x8 ;; ??sk_1 \ 00000140 0020A0E3 MOV R2,#+0 \ 00000144 0810A0E1 MOV R1,R8 \ 00000148 0500A0E1 MOV R0,R5 \ 0000014C 680100EF SWI +360 5662 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000150 081097E5 LDR R1,[R7, #+8] \ 00000154 0D20A0E1 MOV R2,SP \ 00000158 0500A0E1 MOV R0,R5 \ 0000015C 690100EF SWI +361 5663 if (ec.pWS->wsbody[0]==0) \ 00000160 28009DE5 LDR R0,[SP, #+40] \ 00000164 000090E5 LDR R0,[R0, #+0] \ 00000168 B000D0E1 LDRH R0,[R0, #+0] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0300001A BNE ??edchat_ghook_9 5664 SetSoftKey(data,&sk_cancel,SET_SOFT_KEY_N==0?1:0); \ 00000174 0120A0E3 MOV R2,#+1 \ 00000178 081088E2 ADD R1,R8,#+8 \ 0000017C 0500A0E1 MOV R0,R5 \ 00000180 680100EF SWI +360 5665 if (!EDIT_IsBusy(data)) \ ??edchat_ghook_9: \ 00000184 0500A0E1 MOV R0,R5 \ 00000188 1C0200EF SWI +540 \ 0000018C 000050E3 CMP R0,#+0 \ 00000190 2100001A BNE ??edchat_ghook_3 5666 { 5667 time_to_stop_t9=0; \ 00000194 E46184E5 STR R6,[R4, #+484] 5668 if (ed_struct->ed_contact->req_add) \ 00000198 000097E5 LDR R0,[R7, #+0] \ 0000019C 6C1090E5 LDR R1,[R0, #+108] \ 000001A0 000051E3 CMP R1,#+0 \ 000001A4 0500000A BEQ ??edchat_ghook_10 5669 { 5670 ed_struct->ed_contact->req_add=0; \ 000001A8 6C6080E5 STR R6,[R0, #+108] 5671 AddMsgToChat(data); \ 000001AC 0500A0E1 MOV R0,R5 \ 000001B0 ........ BL AddMsgToChat 5672 RecountMenu(ed_struct->ed_contact,1); \ 000001B4 000097E5 LDR R0,[R7, #+0] \ 000001B8 0110A0E3 MOV R1,#+1 \ 000001BC ........ BL RecountMenu 5673 } 5674 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001C0 000097E5 LDR R0,[R7, #+0] \ 000001C4 701090E5 LDR R1,[R0, #+112] \ 000001C8 000051E3 CMP R1,#+0 \ 000001CC 1200000A BEQ ??edchat_ghook_3 5675 { 5676 ed_struct->ed_contact->req_drawack=0; \ 000001D0 706080E5 STR R6,[R0, #+112] 5677 DrawAck(data); \ 000001D4 0500A0E1 MOV R0,R5 \ 000001D8 ........ BL DrawAck \ 000001DC B1FFFFEA B ??edchat_ghook_1 5678 } 5679 } 5680 } 5681 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E0 0C0059E3 CMP R9,#+12 \ 000001E4 0C00001A BNE ??edchat_ghook_3 5682 { 5683 j=EDIT_GetFocus(data); \ 000001E8 0500A0E1 MOV R0,R5 \ 000001EC 820100EF SWI +386 \ 000001F0 0040A0E1 MOV R4,R0 5684 if ((EDIT_GetUnFocus(data)ed_answer)) \ 000001F4 0500A0E1 MOV R0,R5 \ 000001F8 830100EF SWI +387 \ 000001FC 040050E1 CMP R0,R4 \ 00000200 050000AA BGE ??edchat_ghook_3 \ 00000204 080097E5 LDR R0,[R7, #+8] \ 00000208 000054E1 CMP R4,R0 \ 0000020C 0200000A BEQ ??edchat_ghook_3 5685 EDIT_SetCursorPos(data,1); \ 00000210 0110A0E3 MOV R1,#+1 \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 D40100EF SWI +468 5686 } 5687 } \ ??edchat_ghook_3: \ 0000021C 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 00000220 F083BDE8 POP {R4-R9,PC} ;; return \ ??edchat_ghook_4: \ 00000224 ........ DC32 my_ed_redraw \ 00000228 ........ DC32 SmilesImgList \ 0000022C ........ DC32 ??sk_1 \ In segment DATA_C, align 4, align-sorted 5688 5689 5690 5691 static const INPUTDIA_DESC edchat_desc = \ edchat_desc: \ 00000000 01000000.... DC32 1, edchat_onkey, edchat_ghook, edchat_locret, 0, menu_skt \ ............ \ ........0000 \ 0000........ \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 080000006400 DC32 8, 100, 101, 0, 0, 1073741824 \ 000065000000 \ 000000000000 \ 000000000040 \ 00000038 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000040 000000000000 DC32 0H, 0, 2147483647 \ 0000FFFFFF7F \ 0000004C 2D2D2D2D2D2D DC8 "-------" \ 2D00 \ In segment DATA_C, align 4, align-sorted \ ??sk_1: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?` \ 00000008 F00F0000 DC16 4080, 0 \ 0000000C ........ DC32 `?` 5692 { 5693 1, 5694 edchat_onkey, 5695 edchat_ghook, 5696 (void *)edchat_locret, 5697 0, 5698 &menu_skt, 5699 {0,NULL,NULL,NULL}, 5700 FONT_SMALL, 5701 100, 5702 101, 5703 0, 5704 // 0x00000001 - Выровнять по правому краю 5705 // 0x00000002 - Выровнять по центру 5706 // 0x00000004 - Инверсия знакомест 5707 // 0x00000008 - UnderLine 5708 // 0x00000020 - Не переносить слова 5709 // 0x00000200 - bold 5710 0, 5711 // 0x00000002 - ReadOnly 5712 // 0x00000004 - Не двигается курсор 5713 // 0x40000000 - Поменять местами софт-кнопки 5714 0x40000000 5715 }; 5716 \ In segment CODE, align 4, keep-with-next 5717 void CreateEditChat(CLIST *t) 5718 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5719 extern const int FIRST_LETTER; 5720 void *ma=malloc_adr(); 5721 void *eq; 5722 EDITCONTROL ec; 5723 EDITC_OPTIONS ec_options; 5724 int color, font, type; 5725 int zc; 5726 5727 LOGQ *lp; 5728 int edchat_toitem; 5729 // edcontact=t; 5730 5731 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 8C649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 5732 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 5733 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable222 ;; 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] 5734 5735 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 5736 5737 /* hist = malloc(256); 5738 if(!GetHistory(hist, 256, t->uin)) 5739 { 5740 ascii2ws(ews,hist); 5741 PrepareEditControl(&ec); 5742 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 5743 } 5744 mfree(hist); 5745 5746 AddEditControlToEditQend(eq,&ec,ma); */ 5747 lp=t->log; \ 0000003C 749094E5 LDR R9,[R4, #+116] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 9500000A BEQ ??CreateEditChat_1 5748 5749 while(lp) 5750 { 5751 font = ED_H_FONT_SIZE; 5752 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C ........ LDR R2,??DataTable223 ;; ED_X_FONT_SIZE \ 00000050 ........ LDR R0,??DataTable224 ;; 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,??DataTable225 ;; I_COLOR \ 00000064 1C208DE5 STR R2,[SP, #+28] \ 00000068 ........ LDR R2,??DataTable226 ;; X_COLOR \ 0000006C 030010E2 ANDS R0,R0,#0x3 \ 00000070 002092E5 LDR R2,[R2, #+0] \ 00000074 14208DE5 STR R2,[SP, #+20] \ 00000078 ........ LDR R2,??DataTable227 ;; O_ED_X_FONT_SIZE \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 18208DE5 STR R2,[SP, #+24] \ 00000084 ........ LDR R2,??DataTable228 ;; 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 5753 { 5754 if (zc==1) \ 00000098 010050E3 CMP R0,#+1 \ 0000009C 1E00001A BNE ??CreateEditChat_4 5755 color=ACK_COLOR; //Зеленый \ 000000A0 ........ LDR R0,??DataTable229 ;; ACK_COLOR \ 000000A4 1B0000EA B ??CreateEditChat_5 5756 else 5757 color=I_COLOR; 5758 } 5759 else 5760 { 5761 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 000000A8 080099E5 LDR R0,[R9, #+8] \ 000000AC 010070E3 CMN R0,#+1 \ 000000B0 1700001A BNE ??CreateEditChat_6 5762 { 5763 type = lp->type&0x0F; \ 000000B4 0C0099E5 LDR R0,[R9, #+12] \ 000000B8 0F1000E2 AND R1,R0,#0xF 5764 if(lp->type&0x10) \ 000000BC 100010E3 TST R0,#0x10 \ 000000C0 0B00000A BEQ ??CreateEditChat_7 5765 { 5766 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000C4 010051E3 CMP R1,#+1 \ 000000C8 ........ LDREQ R0,??DataTable230 ;; 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,??DataTable231 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000E4 00B090E5 LDR R11,[R0, #+0] \ 000000E8 ........ LDR R0,??DataTable232 ;; O_ED_H_FONT_SIZE \ 000000EC 00A090E5 LDR R10,[R0, #+0] \ 000000F0 090000EA B ??CreateEditChat_4 5767 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 5768 } 5769 else 5770 { 5771 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,??DataTable233 ;; TO_COLOR \ 00000110 000000EA B ??CreateEditChat_5 5772 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 5773 } 5774 } 5775 else 5776 color=UNACK_COLOR; //????? \ ??CreateEditChat_6: \ 00000114 ........ LDR R0,??DataTable234 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 00000118 00B090E5 LDR R11,[R0, #+0] 5777 } 5778 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 0000011C 20008DE2 ADD R0,SP,#+32 \ 00000120 640100EF SWI +356 5779 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 5780 { 5781 ascii2ws(ews,lp->hdr); \ 00000134 240197E5 LDR R0,[R7, #+292] \ 00000138 101089E2 ADD R1,R9,#+16 \ 0000013C ........ _BLF ascii2ws,??ascii2ws??rA 5782 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000140 243197E5 LDR R3,[R7, #+292] \ 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 5783 } 5784 else 5785 { 5786 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_9: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 243197E5 LDR R3,[R7, #+292] \ 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 5787 } 5788 PrepareEditCOptions(&ec_options); \ 00000178 0D00A0E1 MOV R0,SP \ 0000017C C80100EF SWI +456 5789 SetPenColorToEditCOptions(&ec_options,color); \ 00000180 0B10A0E1 MOV R1,R11 \ 00000184 0D00A0E1 MOV R0,SP \ 00000188 CC0100EF SWI +460 5790 SetFontToEditCOptions(&ec_options,font); \ 0000018C 0A10A0E1 MOV R1,R10 \ 00000190 0D00A0E1 MOV R0,SP \ 00000194 CA0100EF SWI +458 5791 CopyOptionsToEditControl(&ec,&ec_options); \ 00000198 0D10A0E1 MOV R1,SP \ 0000019C 20008DE2 ADD R0,SP,#+32 \ 000001A0 CE0100EF SWI +462 5792 AddEditControlToEditQend(eq,&ec,ma); \ 000001A4 0520A0E1 MOV R2,R5 \ 000001A8 20108DE2 ADD R1,SP,#+32 \ 000001AC 0800A0E1 MOV R0,R8 \ 000001B0 660100EF SWI +358 5793 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 5794 { 5795 ParseAnswer(ews,lp->text); \ 000001C4 240197E5 LDR R0,[R7, #+292] \ 000001C8 601089E2 ADD R1,R9,#+96 \ 000001CC ........ BL ParseAnswer \ 000001D0 050000EA B ??CreateEditChat_12 5796 } 5797 else 5798 { 5799 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 240197E5 LDR R0,[R7, #+292] \ 000001E0 14209D05 LDREQ R2,[SP, #+20] \ 000001E4 601089E2 ADD R1,R9,#+96 \ 000001E8 ........ BL ParseXStatusText 5800 } 5801 PrepareEditControl(&ec); \ ??CreateEditChat_12: \ 000001EC 20008DE2 ADD R0,SP,#+32 \ 000001F0 640100EF SWI +356 5802 ConstructEditControl(&ec, 5803 ECT_NORMAL_TEXT, 5804 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 5805 ews,ews->wsbody[0]); \ 000001F4 243197E5 LDR R3,[R7, #+292] \ 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 5806 PrepareEditCOptions(&ec_options); \ 00000220 04008DE2 ADD R0,SP,#+4 \ 00000224 C80100EF SWI +456 5807 //#ifdef M75 5808 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 5809 { 5810 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 0000023C 100010E3 TST R0,#0x10 \ 00000240 ........ LDRNE R0,??DataTable235 ;; O_ED_FONT_SIZE \ 00000244 ........ LDREQ R0,??DataTable237 ;; ED_FONT_SIZE \ 00000248 001090E5 LDR R1,[R0, #+0] \ 0000024C 080000EA B ??CreateEditChat_14 5811 } 5812 else 5813 { 5814 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 5815 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 5816 } 5817 //#else 5818 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 5819 //#endif 5820 CopyOptionsToEditControl(&ec,&ec_options); \ 0000027C 0D10A0E1 MOV R1,SP \ 00000280 20008DE2 ADD R0,SP,#+32 \ 00000284 CE0100EF SWI +462 5821 AddEditControlToEditQend(eq,&ec,ma); \ 00000288 0520A0E1 MOV R2,R5 \ 0000028C 20108DE2 ADD R1,SP,#+32 \ 00000290 0800A0E1 MOV R0,R8 \ 00000294 660100EF SWI +358 5822 lp=lp->next; \ 00000298 009099E5 LDR R9,[R9, #+0] 5823 } \ 0000029C 000059E3 CMP R9,#+0 \ 000002A0 69FFFF1A BNE ??CreateEditChat_2 5824 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 000002A4 640094E5 LDR R0,[R4, #+100] 5825 total_unread2=total_unread2-t->unread_msg; 5826 t->unread_msg=0; \ 000002A8 0090A0E3 MOV R9,#+0 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 AC019715 LDRNE R0,[R7, #+428] \ 000002B4 01004012 SUBNE R0,R0,#+1 \ 000002B8 AC018715 STRNE R0,[R7, #+428] \ 000002BC 100197E5 LDR R0,[R7, #+272] \ 000002C0 681094E5 LDR R1,[R4, #+104] \ 000002C4 010040E0 SUB R0,R0,R1 \ 000002C8 100187E5 STR R0,[R7, #+272] \ 000002CC 689084E5 STR R9,[R4, #+104] 5827 t->isunread=0; \ 000002D0 649084E5 STR R9,[R4, #+100] 5828 ChangeContactPos(t); \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 5829 wsprintf(ews, "-------"); \ 000002DC 240197E5 LDR R0,[R7, #+292] \ 000002E0 4C1086E2 ADD R1,R6,#+76 \ 000002E4 240100EF SWI +292 5830 PrepareEditControl(&ec); \ 000002E8 20008DE2 ADD R0,SP,#+32 \ 000002EC 640100EF SWI +356 5831 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002F0 243197E5 LDR R3,[R7, #+292] \ 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 5832 PrepareEditCOptions(&ec_options); \ 00000310 04008DE2 ADD R0,SP,#+4 \ 00000314 C80100EF SWI +456 5833 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000318 ........ LDR R0,??DataTable237 ;; ED_FONT_SIZE \ 0000031C 00A090E5 LDR R10,[R0, #+0] \ 00000320 04008DE2 ADD R0,SP,#+4 \ 00000324 0A10A0E1 MOV R1,R10 \ 00000328 CA0100EF SWI +458 5834 CopyOptionsToEditControl(&ec,&ec_options); \ 0000032C 04108DE2 ADD R1,SP,#+4 \ 00000330 24008DE2 ADD R0,SP,#+36 \ 00000334 CE0100EF SWI +462 5835 AddEditControlToEditQend(eq,&ec,ma); \ 00000338 0520A0E1 MOV R2,R5 \ 0000033C 24108DE2 ADD R1,SP,#+36 \ 00000340 0800A0E1 MOV R0,R8 \ 00000344 660100EF SWI +358 5836 5837 if (t->answer) ParseAnswer(ews,t->answer); \ 00000348 781094E5 LDR R1,[R4, #+120] \ 0000034C 04D08DE2 ADD SP,SP,#+4 \ 00000350 000051E3 CMP R1,#+0 \ 00000354 0200000A BEQ ??CreateEditChat_15 \ 00000358 240197E5 LDR R0,[R7, #+292] \ 0000035C ........ BL ParseAnswer \ 00000360 020000EA B ??CreateEditChat_16 5838 else CutWSTR(ews,0); \ ??CreateEditChat_15: \ 00000364 240197E5 LDR R0,[R7, #+292] \ 00000368 0010A0E3 MOV R1,#+0 \ 0000036C 260100EF SWI +294 5839 PrepareEditControl(&ec); \ ??CreateEditChat_16: \ 00000370 20008DE2 ADD R0,SP,#+32 \ 00000374 640100EF SWI +356 5840 ConstructEditControl(&ec,3,(FIRST_LETTER)?ECF_DEFAULT_BIG_LETTER:0,ews,1024); \ 00000378 1C019FE5 LDR R0,??CreateEditChat_0+0x4 ;; FIRST_LETTER \ 0000037C 0310A0E3 MOV R1,#+3 \ 00000380 000090E5 LDR R0,[R0, #+0] \ 00000384 000050E3 CMP R0,#+0 \ 00000388 400EA0E3 MOV R0,#+1024 \ 0000038C 01002DE9 PUSH {R0} \ 00000390 243197E5 LDR R3,[R7, #+292] \ 00000394 402DA013 MOVNE R2,#+4096 \ 00000398 0020A003 MOVEQ R2,#+0 \ 0000039C 24008DE2 ADD R0,SP,#+36 \ 000003A0 650100EF SWI +357 5841 5842 PrepareEditCOptions(&ec_options); \ 000003A4 04008DE2 ADD R0,SP,#+4 \ 000003A8 C80100EF SWI +456 5843 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000003AC 0A10A0E1 MOV R1,R10 \ 000003B0 04008DE2 ADD R0,SP,#+4 \ 000003B4 CA0100EF SWI +458 5844 CopyOptionsToEditControl(&ec,&ec_options); \ 000003B8 04108DE2 ADD R1,SP,#+4 \ 000003BC 24008DE2 ADD R0,SP,#+36 \ 000003C0 CE0100EF SWI +462 5845 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 5846 5847 if (t->req_xtext) \ 000003D8 900094E5 LDR R0,[R4, #+144] \ 000003DC 04D08DE2 ADD SP,SP,#+4 \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 0400000A BEQ ??CreateEditChat_17 5848 { 5849 FreeXText(t); \ 000003E8 0400A0E1 MOV R0,R4 \ 000003EC ........ _BLF FreeXText,??FreeXText??rA 5850 t->req_xtext=0; \ 000003F0 909084E5 STR R9,[R4, #+144] 5851 RequestXText(t->uin); \ 000003F4 0C0094E5 LDR R0,[R4, #+12] \ 000003F8 ........ BL RequestXText 5852 } 5853 5854 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_17: \ 000003FC 1400A0E3 MOV R0,#+20 \ 00000400 140000EF SWI +20 \ 00000404 0050A0E1 MOV R5,R0 5855 ed_struct->ed_contact=t; \ 00000408 004085E5 STR R4,[R5, #+0] 5856 ed_struct->ed_answer=edchat_toitem; \ 0000040C 08A085E5 STR R10,[R5, #+8] 5857 ed_struct->requested_decrement_total_unread=0; \ 00000410 0C9085E5 STR R9,[R5, #+12] 5858 t->req_add=0; \ 00000414 6C9084E5 STR R9,[R4, #+108] 5859 t->last_log=NULL; \ 00000418 7C9084E5 STR R9,[R4, #+124] 5860 5861 // int scr_w=ScreenW(); 5862 // int scr_h=ScreenH(); 5863 // int head_h=HeaderH(); 5864 5865 patch_header(&edchat_hdr); \ 0000041C B893C6E1 STRH R9,[R6, #+56] \ 00000420 1800A0E3 MOV R0,#+24 \ 00000424 BA03C6E1 STRH R0,[R6, #+58] \ 00000428 888100EF SWI +33160 \ 0000042C 010040E2 SUB R0,R0,#+1 \ 00000430 BC03C6E1 STRH R0,[R6, #+60] \ 00000434 8A8100EF SWI +33162 \ 00000438 170080E2 ADD R0,R0,#+23 \ 0000043C BE03C6E1 STRH R0,[R6, #+62] 5866 patch_input(&edchat_desc); \ 00000440 B891C6E1 STRH R9,[R6, #+24] \ 00000444 8A8100EF SWI +33162 \ 00000448 190080E2 ADD R0,R0,#+25 \ 0000044C BA01C6E1 STRH R0,[R6, #+26] \ 00000450 888100EF SWI +33160 \ 00000454 010040E2 SUB R0,R0,#+1 \ 00000458 BC01C6E1 STRH R0,[R6, #+28] \ 0000045C 898100EF SWI +33161 \ 00000460 0040A0E1 MOV R4,R0 \ 00000464 8B8100EF SWI +33163 \ 00000468 000044E0 SUB R0,R4,R0 \ 0000046C 010040E2 SUB R0,R0,#+1 \ 00000470 BE01C6E1 STRH R0,[R6, #+30] 5867 // edchat_desc.font=ED_FONT_SIZE; 5868 edchat_id=CreateInputTextDialog(&edchat_desc,&edchat_hdr,eq,1,ed_struct); \ 00000474 20002DE9 PUSH {R5} \ 00000478 0130A0E3 MOV R3,#+1 \ 0000047C 0820A0E1 MOV R2,R8 \ 00000480 381086E2 ADD R1,R6,#+56 \ 00000484 0600A0E1 MOV R0,R6 \ 00000488 670100EF SWI +359 \ 0000048C BC0187E5 STR R0,[R7, #+444] 5869 } \ 00000490 50D08DE2 ADD SP,SP,#+80 \ 00000494 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000498 ........ DC32 edchat_desc \ 0000049C ........ DC32 FIRST_LETTER 5870 5871 //----------------------------------------------------------------------------- 5872 #define EC_MNU_MAX 8 5873 \ In segment CODE, align 4, keep-with-next 5874 void Quote(GUI *data) 5875 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 5876 int q_n; 5877 EDITCONTROL ec, ec_hdr; 5878 EDITCONTROL ec_ed; 5879 WSHDR *ed_ws; 5880 WSHDR *ws; 5881 5882 EDCHAT_STRUCT *ed_struct; 5883 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 5884 5885 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 5886 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 5887 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 5888 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 5889 5890 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 5891 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 5892 { 5893 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 5894 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 5895 } 5896 else 5897 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 5898 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 5899 { 5900 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 5901 } 5902 else 5903 { 5904 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 5905 } 5906 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 5907 do 5908 { 5909 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 5910 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 5911 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 5912 } 5913 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 5914 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 5915 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 5916 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 5917 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 5918 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 5919 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 5920 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 5921 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 5922 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 5923 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 5924 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 5925 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 5926 5927 \ In segment CODE, align 4, keep-with-next 5928 void GetShortInfo(GUI *data) 5929 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 5930 EDCHAT_STRUCT *ed_struct; 5931 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 5932 5933 TPKT *p; 5934 CLIST *t; 5935 if ((t=ed_struct->ed_contact)&&(connect_state==3)) \ 0000000C 005094E5 LDR R5,[R4, #+0] \ 00000010 000055E3 CMP R5,#+0 \ 00000014 2000000A BEQ ??GetShortInfo_0 \ 00000018 ........ LDR R0,??DataTable246 ;; S_ICONS + 392 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1C00001A BNE ??GetShortInfo_0 5936 { 5937 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 5938 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 5939 p->pkt.type=T_REQINFOSHORT; 5940 p->pkt.data_len=0; 5941 AddStringToLog(t, 0x01, "Request info...", I_str,0xFFFFFFFF,1); \ 00000038 0110A0E3 MOV R1,#+1 \ 0000003C 000086E5 STR R0,[R6, #+0] \ 00000040 0B00A0E3 MOV R0,#+11 \ 00000044 B400C6E1 STRH R0,[R6, #+4] \ 00000048 0000A0E3 MOV R0,#+0 \ 0000004C B600C6E1 STRH R0,[R6, #+6] \ 00000050 ........ LDR R0,??DataTable245 ;; `?ed_chatgui); \ 00000074 040094E5 LDR R0,[R4, #+4] \ 00000078 ........ BL AddMsgToChat 5943 RecountMenu(t,1); \ 0000007C 0110A0E3 MOV R1,#+1 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 ........ BL RecountMenu 5944 SUBPROC((void *)SendAnswer,0,p); \ 00000088 ........ LDR R0,??DataTable247 ;; SendAnswer \ 0000008C 0620A0E1 MOV R2,R6 \ 00000090 0010A0E3 MOV R1,#+0 \ 00000094 710100EF SWI +369 \ 00000098 08D08DE2 ADD SP,SP,#+8 5945 } 5946 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 0000009C 0100A0E3 MOV R0,#+1 \ 000000A0 3B0100EF SWI +315 5947 } \ 000000A4 7080BDE8 POP {R4-R6,PC} ;; return 5948 5949 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 5950 void AddCurContact(GUI *data) 5951 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 5952 EDCHAT_STRUCT *ed_struct; 5953 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 5954 5955 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,??DataTable246 ;; S_ICONS + 392 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 5956 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 5957 } \ 00000030 0080BDE8 POP {PC} ;; return 5958 \ In segment CODE, align 4, keep-with-next 5959 void SendAuthReq(GUI *data) 5960 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 5961 EDCHAT_STRUCT *ed_struct; 5962 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 5963 5964 TPKT *p; 5965 CLIST *t; 5966 int l; 5967 const char s[]=LG_AUTHREQ; \ 0000000C BC109FE5 LDR R1,??SendAuthReq_0 ;; `?ed_contact)&&(connect_state==3)) \ 00000020 005094E5 LDR R5,[R4, #+0] \ 00000024 000055E3 CMP R5,#+0 \ 00000028 2400000A BEQ ??SendAuthReq_1 \ 0000002C ........ LDR R0,??DataTable246 ;; S_ICONS + 392 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 5969 { 5970 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 5971 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 5972 p->pkt.type=T_AUTHREQ; 5973 p->pkt.data_len=l; 5974 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 5975 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable243 ;; `?ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 5977 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 5978 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable247 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 5979 } 5980 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 5981 } \ 000000C8 14D08DE2 ADD SP,SP,#+20 \ 000000CC F080BDE8 POP {R4-R7,PC} ;; return \ ??SendAuthReq_0: \ 000000D0 ........ DC32 `?ed_contact)&&(connect_state==3)) \ 00000020 006094E5 LDR R6,[R4, #+0] \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2400000A BEQ ??SendAuthGrant_0 \ 0000002C ........ LDR R0,??DataTable246 ;; S_ICONS + 392 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_0 5993 { 5994 p=malloc(sizeof(PKT)+(l=strlen(s))+1); \ 0000003C 0D00A0E1 MOV R0,SP \ 00000040 1B0000EF SWI +27 \ 00000044 0080A0E1 MOV R8,R0 \ 00000048 090088E2 ADD R0,R8,#+9 \ 0000004C 140000EF SWI +20 \ 00000050 0070A0E1 MOV R7,R0 5995 p->pkt.uin=t->uin; \ 00000054 0C0096E5 LDR R0,[R6, #+12] 5996 p->pkt.type=T_AUTHGRANT; 5997 p->pkt.data_len=l; 5998 strcpy(p->data,s); \ 00000058 0D10A0E1 MOV R1,SP \ 0000005C 000087E5 STR R0,[R7, #+0] \ 00000060 0E00A0E3 MOV R0,#+14 \ 00000064 B400C7E1 STRH R0,[R7, #+4] \ 00000068 B680C7E1 STRH R8,[R7, #+6] \ 0000006C 080087E2 ADD R0,R7,#+8 \ 00000070 1A0000EF SWI +26 5999 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 0100A0E3 MOV R0,#+1 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 1F3085E2 ADD R3,R5,#+31 \ 00000080 082087E2 ADD R2,R7,#+8 \ 00000084 0110A0E3 MOV R1,#+1 \ 00000088 000060E2 RSB R0,R0,#+0 \ 0000008C 01002DE9 PUSH {R0} \ 00000090 0600A0E1 MOV R0,R6 \ 00000094 ........ BL AddStringToLog 6000 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 6001 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0600A0E1 MOV R0,R6 \ 000000A8 ........ BL RecountMenu 6002 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable247 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 6003 } 6004 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 6005 } \ 000000C8 FF81BDE8 POP {R0-R8,PC} ;; return 6006 \ In segment CODE, align 4, keep-with-next 6007 void OpenLogfile(GUI *data) 6008 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6009 EDCHAT_STRUCT *ed_struct; 6010 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 6011 6012 extern const char HIST_PATH[64]; 6013 #ifdef EVILFOX 6014 #else 6015 extern const int HISTORY_TYPE; 6016 #endif 6017 CLIST *t; 6018 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0050A0E1 MOV R5,R0 6019 if ((t=ed_struct->ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1800000A BEQ ??OpenLogfile_0 6020 { 6021 #ifdef EVILFOX 6022 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 6023 #else 6024 #ifdef UIN_WRITE 6025 if (HISTORY_TYPE) \ 00000024 70409FE5 LDR R4,??OpenLogfile_1 ;; HISTORY_TYPE \ 00000028 0C3090E5 LDR R3,[R0, #+12] \ 0000002C 004094E5 LDR R4,[R4, #+0] \ 00000030 68109FE5 LDR R1,??OpenLogfile_1+0x4 ;; `?` \ 00000034 68209FE5 LDR R2,??OpenLogfile_1+0x8 ;; HIST_PATH \ 00000038 08002DE9 PUSH {R3} \ 0000003C 000054E3 CMP R4,#+0 \ 00000040 0700000A BEQ ??OpenLogfile_2 6026 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); \ 00000044 140080E2 ADD R0,R0,#+20 \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable248 ;; UIN \ 00000050 003090E5 LDR R3,[R0, #+0] \ 00000054 0500A0E1 MOV R0,R5 \ 00000058 240100EF SWI +292 \ 0000005C 08D08DE2 ADD SP,SP,#+8 \ 00000060 040000EA B ??OpenLogfile_3 6027 else 6028 wsprintf(ws,"%s\\%s(%d).txt",HIST_PATH,t->name, t->uin); \ ??OpenLogfile_2: \ 00000064 143080E2 ADD R3,R0,#+20 \ 00000068 141081E2 ADD R1,R1,#+20 \ 0000006C 0500A0E1 MOV R0,R5 \ 00000070 240100EF SWI +292 \ 00000074 04D08DE2 ADD SP,SP,#+4 6029 #else 6030 if (HISTORY_TYPE) 6031 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); 6032 else 6033 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); 6034 #endif 6035 #endif 6036 ExecuteFile(ws,NULL,NULL); \ ??OpenLogfile_3: \ 00000078 0020A0E3 MOV R2,#+0 \ 0000007C 0010A0E3 MOV R1,#+0 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 940000EF SWI +148 6037 } 6038 FreeWS(ws); \ ??OpenLogfile_0: \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 290100EF SWI +297 6039 GeneralFuncF1(1); \ 00000090 0100A0E3 MOV R0,#+1 \ 00000094 3B0100EF SWI +315 6040 } \ 00000098 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 0000009C ........ DC32 HISTORY_TYPE \ 000000A0 ........ DC32 `?` \ 000000A4 ........ DC32 HIST_PATH 6041 \ In segment CODE, align 4, keep-with-next 6042 void ClearLog(GUI *data/*,void *dummy*/) 6043 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 6044 EDITCONTROL ec; 6045 EDCHAT_STRUCT *ed_struct; 6046 WSHDR *ws; 6047 CLIST *t; 6048 6049 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 6050 6051 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 6052 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 6053 { 6054 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 6055 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 6056 6057 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 6058 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 6059 6060 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 6061 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 6062 } 6063 else 6064 { 6065 6066 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 6067 { 6068 if (t->log) \ 00000074 740095E5 LDR R0,[R5, #+116] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 6069 { 6070 FreeLOGQ(&t->log); \ 00000084 740085E2 ADD R0,R5,#+116 \ 00000088 ........ BL FreeLOGQ 6071 t->msg_count=0; \ 0000008C 846085E5 STR R6,[R5, #+132] 6072 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 6073 { 6074 while(ed_struct->ed_answer!=2) 6075 { 6076 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 6077 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 6078 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 6079 } 6080 } 6081 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 806085E5 STR R6,[R5, #+128] 6082 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 6083 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 6084 } 6085 } 6086 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 6087 \ In segment CODE, align 4, keep-with-next 6088 void ecmenu_ghook(void *data, int cmd) 6089 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 6090 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 6091 { 6092 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 6093 } 6094 } \ 00000010 0080BDE8 POP {PC} ;; return 6095 \ In segment DATA_C, align 4, align-sorted 6096 static const MENUITEM_DESC ecmenu_ITEMS[EC_MNU_MAX]= \ ecmenu_ITEMS: \ 00000000 00000000.... DC32 0H, `?` \ MAINCSM: \ 00000074 DS8 72 \ 000000BC REQUIRE `?` \ gipc: \ 000000BC DS8 12 \ 000000C8 REQUIRE `?` \ game_gipc: \ 000000C8 DS8 12 \ 000000D4 REQUIRE `?` \ tmr_gipc: \ 000000D4 DS8 12 \ 000000E0 REQUIRE `?` \ main_d: \ 000000E0 DS8 4 \ 000000E4 REQUIRE `?` \ align: \ 000000E4 DS8 4 \ 000000E8 REQUIRE `?` \ canvasdata: \ 000000E8 DS8 4 \ 000000EC REQUIRE `?` \ paused_height: \ 000000EC DS8 4 \ 000000F0 REQUIRE `?` \ uins: \ 000000F0 DS8 4 \ 000000F4 REQUIRE `?` \ saver_on: \ 000000F4 DS8 4 \ 000000F8 REQUIRE `?` \ Is_PING_On: \ 000000F8 DS8 4 \ 000000FC REQUIRE `?` \ Is_SLI_On: \ 000000FC DS8 4 \ 00000100 REQUIRE `?` \ Is_SMARTCPU_On: \ 00000100 DS8 4 \ 00000104 REQUIRE `?` \ Is_INC_On: \ 00000104 DS8 4 \ 00000108 REQUIRE `?` \ Is_ILU_On: \ 00000108 DS8 4 \ 0000010C REQUIRE `?` \ Is_Double_Vibra_On: \ 0000010C DS8 4 \ 00000110 REQUIRE `?` \ total_unread2: \ 00000110 DS8 4 \ 00000114 REQUIRE `?` \ maincsm_id: \ 00000114 DS8 4 \ 00000118 REQUIRE `?` \ maingui_id: \ 00000118 DS8 4 \ 0000011C REQUIRE `?` \ SENDMSGCOUNT: \ 0000011C DS8 4 \ 00000120 REQUIRE `?` \ Is_Id3tag_Enabled: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ ews: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ msg_away_timer: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ inp_away_msg2: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ away_m: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ status_rem: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ change_back_status: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ Show_XTX: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ Is_UPTIME_On: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ xstatus_old: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ minimum_xstatus: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ maximum: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ tracktimer: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ input_awaymsg_id: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ silenthide: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ disautorecconect: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ Is_Show_Offline: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ Is_Show_Groups: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ CurrentStatus: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ CurrentPrivateStatus: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ vibra_count: \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ templates_chars: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ templates_lines: \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ RXstate: \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ connect_state: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ sock: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ TOTALRECEIVED: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ TOTALSENDED: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ ALLTOTALRECEIVED: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ ALLTOTALSENDED: \ 0000019C DS8 4 \ 000001A0 REQUIRE `?` \ sendq_l: \ 000001A0 DS8 4 \ 000001A4 REQUIRE `?` \ sendq_p: \ 000001A4 DS8 4 \ 000001A8 REQUIRE `?` \ is_gprs_online: \ 000001A8 DS8 4 \ 000001AC REQUIRE `?` \ total_unread: \ 000001AC DS8 4 \ 000001B0 REQUIRE `?` \ cltop: \ 000001B0 DS8 4 \ 000001B4 REQUIRE `?` \ GROUP_CACHE: \ 000001B4 DS8 4 \ 000001B8 REQUIRE `?` \ contactlist_menu_id: \ 000001B8 DS8 4 \ 000001BC REQUIRE `?` \ edchat_id: \ 000001BC DS8 4 \ 000001C0 REQUIRE `?` \ 000001C0 DS8 4 \ 000001C4 REQUIRE `?` \ tenseconds_to_ping: \ 000001C4 DS8 4 \ 000001C8 REQUIRE `?` \ kopa_online: \ 000001C8 DS8 4 \ 000001CC REQUIRE `?` \ kopa_kontaktu: \ 000001CC DS8 4 \ 000001D0 REQUIRE `?` \ DNR_ID: \ 000001D0 DS8 4 \ 000001D4 REQUIRE `?` \ DNR_TRIES: \ 000001D4 DS8 4 \ 000001D8 REQUIRE `?` \ host_counter: \ 000001D8 DS8 4 \ 000001DC REQUIRE `?` \ ping_time: \ 000001DC DS8 4 \ 000001E0 REQUIRE `?` \ NEW_MSG: \ 000001E0 DS8 4 \ 000001E4 REQUIRE `?` \ time_to_stop_t9: \ 000001E4 DS8 4 \ 000001E8 REQUIRE `?` \ comanda: \ 000001E8 DS8 4 \ 000001EC REQUIRE `?` \ INC_show: \ 000001EC DS8 4 \ 000001F0 REQUIRE `?` \ font: \ 000001F0 DS8 4 \ 000001F4 REQUIRE `?` \ old_ed_redraw: \ 000001F4 DS8 4 \ 000001F8 REQUIRE `?` \ 000001F8 DS8 64 \ 00000238 REQUIRE `?` \ elf_path: \ 00000238 DS8 256 \ 00000338 REQUIRE `?` \ ContactT9Key: \ 00000338 DS8 32 \ 00000358 REQUIRE `?` \ talk_sound: \ 00000358 DS8 128 \ 000003D8 REQUIRE `?` \ unread_msg_info: \ 000003D8 DS8 64 \ 00000418 REQUIRE `?` \ last_msg_buffer: \ 00000418 DS8 4048 \ 000013E8 REQUIRE `?` \ mytmr3: \ 000013E8 DS8 16 \ 000013F8 REQUIRE `?` \ PINGO: \ 000013F8 DS8 256 \ 000014F8 REQUIRE `?` \ away_msg: \ 000014F8 DS8 264 \ 00001600 REQUIRE `?` \ away_msg_time: \ 00001600 DS8 64 \ 00001640 REQUIRE `?` \ away_msg_time_dace: \ 00001640 DS8 16 \ 00001650 REQUIRE `?` \ tim_zone: \ 00001650 DS8 16 \ 00001660 REQUIRE `?` \ away_tmr: \ 00001660 DS8 16 \ 00001670 REQUIRE `?` \ mytmr: \ 00001670 DS8 16 \ 00001680 REQUIRE `?` \ mytmr2: \ 00001680 DS8 16 \ 00001690 REQUIRE `?` \ mytmr4: \ 00001690 DS8 16 \ 000016A0 REQUIRE `?` \ tracktmr: \ 000016A0 DS8 16 \ 000016B0 REQUIRE `?` \ onlineTime: \ 000016B0 DS8 128 \ 00001730 REQUIRE `?` \ logmsg: \ 00001730 DS8 256 \ 00001830 REQUIRE `?` \ tmr_illumination: \ 00001830 DS8 16 \ 00001840 REQUIRE `?` \ tmr_vibra: \ 00001840 DS8 16 \ 00001850 REQUIRE `?` \ reconnect_tmr: \ 00001850 DS8 16 \ 00001860 REQUIRE `?` \ tmr_active: \ 00001860 DS8 16 \ 00001870 REQUIRE `?` \ clm_hdr_text: \ 00001870 DS8 48 \ 000018A0 REQUIRE `?` \ clmenu_sk_r: \ 000018A0 DS8 16 \ 000018B0 REQUIRE `?` \ statusTmr: \ 000018B0 DS8 16 \ 000018C0 REQUIRE `?` \ hostbuf2: \ 000018C0 DS8 128 \ 00001940 REQUIRE `?` \ hostname: \ 00001940 DS8 128 \ 000019C0 REQUIRE `?` \ I_UIN: \ 000019C0 DS8 12 \ 000019CC REQUIRE `?` \ a_txt: \ 000019CC DS8 48 \ 000019FC REQUIRE `?` \ s_txt: \ 000019FC DS8 48 \ 00001A2C REQUIRE `?` \ d_txt: \ 00001A2C DS8 48 \ 00001A5C REQUIRE `?` \ f_txt: \ 00001A5C DS8 48 \ 00001A8C REQUIRE `?` \ g_txt: \ 00001A8C DS8 48 \ 00001ABC REQUIRE `?` \ develop: \ 00001ABC DS8 16 \ 00001ACC REQUIRE `?` \ requests1: \ 00001ACC DS8 24 \ 00001AE4 REQUIRE `?` \ requests2: \ 00001AE4 DS8 20 \ 00001AF8 REQUIRE `?` \ requests3: \ 00001AF8 DS8 24 \ 00001B10 REQUIRE `?` \ requests4: \ 00001B10 DS8 20 \ 00001B24 REQUIRE `?` \ requests6: \ 00001B24 DS8 24 \ 00001B3C REQUIRE `?` \ mod_info: \ 00001B3C DS8 264 \ 00001C44 REQUIRE `?` \ show_nick: \ 00001C44 DS8 32 \ 00001C64 REQUIRE `?` 6110 { 6111 Quote, 6112 AddSmile, 6113 GetShortInfo, 6114 AddCurContact, 6115 SendAuthReq, 6116 SendAuthGrant, 6117 OpenLogfile, 6118 ClearLog, 6119 }; 6120 6121 char ecm_contactname[64]; \ ecm_contactname: \ 00001C64 DS8 64 \ 00001CA4 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ IsActiveUp: \ 00000000 DS8 4 \ 00000004 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ ??sk: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_sk: \ 00000000 DS8 24 \ 00000018 REQUIRE `?` \ In segment DATA_I, align 4, align-sorted \ input_awaymsg_skt: \ 00000000 DS8 8 \ 00000008 REQUIRE `?` 6122 \ In segment DATA_C, align 4, align-sorted 6123 static const HEADER_DESC ecmenu_HDR={0,0,NULL,NULL,NULL,(int)ecm_contactname,LGP_NULL}; \ ecmenu_HDR: \ 00000000 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000008 00000000.... DC32 0H, ecm_contactname, 2147483647 \ ....FFFFFF7F \ 00000014 080000000000 DC32 8, 0H, ecmenu_ghook, 0H, menusoftkeys, menu_skt, 0, 0H \ 0000........ \ 00000000.... \ ............ \ 000000000000 \ 0000 \ 00000034 ............ DC32 ecmenu_ITEMS, ecmenu_HNDLS, 8 \ ....08000000 6124 6125 static const MENU_DESC ecmenu_STRUCT= 6126 { 6127 8,NULL,ecmenu_ghook,NULL, 6128 menusoftkeys, 6129 &menu_skt, 6130 0, 6131 NULL, 6132 ecmenu_ITEMS, 6133 ecmenu_HNDLS, 6134 EC_MNU_MAX 6135 }; 6136 \ In segment CODE, align 4, keep-with-next 6137 void ec_menu(EDCHAT_STRUCT *ed_struct) 6138 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 \ 00000008 0040A0E1 MOV R4,R0 6139 CLIST *t; 6140 int to_remove[EC_MNU_MAX+1]; 6141 int remove=0; 6142 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4500000A BEQ ??ec_menu_0 6143 { 6144 if (t->name) \ 00000018 ........ LDR R5,??DataTable249 ;; S_ICONS \ 0000001C 6400A0E3 MOV R0,#+100 \ 00000020 700D80E3 ORR R0,R0,#0x1C00 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 6145 { 6146 strncpy(ecm_contactname,t->name,63); \ 00000030 3F20A0E3 MOV R2,#+63 \ 00000034 141081E2 ADD R1,R1,#+20 \ 00000038 160100EF SWI +278 \ 0000003C 020000EA B ??ec_menu_2 6147 } 6148 else 6149 { 6150 sprintf(ecm_contactname,"%u",t->uin); \ ??ec_menu_1: \ 00000040 0C2091E5 LDR R2,[R1, #+12] \ 00000044 3B1F8FE2 ADR R1,??ec_menu_3 ;; "%u" \ 00000048 160000EF SWI +22 6151 } 6152 if (EDIT_GetFocus(ed_struct->ed_chatgui)==ed_struct->ed_answer) \ ??ec_menu_2: \ 0000004C 040094E5 LDR R0,[R4, #+4] \ 00000050 0160A0E3 MOV R6,#+1 \ 00000054 820100EF SWI +386 \ 00000058 082094E5 LDR R2,[R4, #+8] \ 0000005C 0010A0E3 MOV R1,#+0 \ 00000060 020050E1 CMP R0,R2 6153 { 6154 to_remove[++remove]=0; \ 00000064 04108D05 STREQ R1,[SP, #+4] 6155 } 6156 else 6157 { 6158 to_remove[++remove]=1; \ 00000068 0120A013 MOVNE R2,#+1 \ 0000006C 04208D15 STRNE R2,[SP, #+4] 6159 } 6160 6161 if (ed_struct->ed_answer<=2) to_remove[++remove]=7; \ 00000070 080094E5 LDR R0,[R4, #+8] \ 00000074 030050E3 CMP R0,#+3 \ 00000078 0720A0B3 MOVLT R2,#+7 \ 0000007C 08208DB5 STRLT R2,[SP, #+8] 6162 if (!ed_struct->ed_contact || connect_state!=3) \ 00000080 000094E5 LDR R0,[R4, #+0] \ 00000084 0260A0B3 MOVLT R6,#+2 \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 0200000A BEQ ??ec_menu_4 \ 00000090 880195E5 LDR R0,[R5, #+392] \ 00000094 030050E3 CMP R0,#+3 \ 00000098 0D00000A BEQ ??ec_menu_5 6163 { 6164 to_remove[++remove]=2; \ ??ec_menu_4: \ 0000009C 010086E2 ADD R0,R6,#+1 \ 000000A0 0D20A0E1 MOV R2,SP \ 000000A4 0230A0E3 MOV R3,#+2 \ 000000A8 003182E7 STR R3,[R2, +R0, LSL #+2] 6165 to_remove[++remove]=3; \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 0330A0E3 MOV R3,#+3 \ 000000B4 003182E7 STR R3,[R2, +R0, LSL #+2] 6166 to_remove[++remove]=4; \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC 0430A0E3 MOV R3,#+4 \ 000000C0 003182E7 STR R3,[R2, +R0, LSL #+2] 6167 to_remove[++remove]=5; \ 000000C4 016080E2 ADD R6,R0,#+1 \ 000000C8 0D00A0E1 MOV R0,SP \ 000000CC 0520A0E3 MOV R2,#+5 \ 000000D0 062180E7 STR R2,[R0, +R6, LSL #+2] 6168 } 6169 6170 patch_header(&ecmenu_HDR); \ ??ec_menu_5: \ 000000D4 60509FE5 LDR R5,??ec_menu_3+0x4 ;; ecmenu_HDR \ 000000D8 1800A0E3 MOV R0,#+24 \ 000000DC B010C5E1 STRH R1,[R5, #+0] \ 000000E0 B200C5E1 STRH R0,[R5, #+2] \ 000000E4 888100EF SWI +33160 \ 000000E8 010040E2 SUB R0,R0,#+1 \ 000000EC B400C5E1 STRH R0,[R5, #+4] \ 000000F0 8A8100EF SWI +33162 \ 000000F4 170080E2 ADD R0,R0,#+23 \ 000000F8 B600C5E1 STRH R0,[R5, #+6] 6171 to_remove[0]=remove; \ 000000FC 00608DE5 STR R6,[SP, #+0] 6172 CreateMenu(0,0,&ecmenu_STRUCT,&ecmenu_HDR,0,EC_MNU_MAX,ed_struct,to_remove); \ 00000100 0D00A0E1 MOV R0,SP \ 00000104 01002DE9 PUSH {R0} \ 00000108 10002DE9 PUSH {R4} \ 0000010C 0530A0E1 MOV R3,R5 \ 00000110 0800A0E3 MOV R0,#+8 \ 00000114 01002DE9 PUSH {R0} \ 00000118 142085E2 ADD R2,R5,#+20 \ 0000011C 0010A0E3 MOV R1,#+0 \ 00000120 0000A0E3 MOV R0,#+0 \ 00000124 01002DE9 PUSH {R0} \ 00000128 520100EF SWI +338 \ 0000012C 10D08DE2 ADD SP,SP,#+16 6173 } 6174 } \ ??ec_menu_0: \ 00000130 24D08DE2 ADD SP,SP,#+36 ;; stack cleaning \ 00000134 7080BDE8 POP {R4-R6,PC} ;; return \ ??ec_menu_3: \ 00000138 25750000 DC8 "%u",+0 \ 0000013C ........ DC32 ecmenu_HDR 6175 6176 \ In segment CODE, align 4, keep-with-next 6177 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 6178 { 6179 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 6180 } 6181 \ In segment CODE, align 4, keep-with-next 6182 void AddSmile(GUI *data) 6183 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 6184 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 6185 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 6186 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 6187 } \ 00000014 0080BDE8 POP {PC} ;; return \ In segment CODE, align 4, keep-with-next \ ??DataTable1: \ 00000000 ........ DC32 Pinger2 \ In segment CODE, align 4, keep-with-next \ ??DataTable2: \ 00000000 ........ DC32 SendAnswer \ In segment CODE, align 4, keep-with-next \ ??DataTable3: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable5: \ 00000000 ........ DC32 Auto_Status \ In segment CODE, align 4, keep-with-next \ ??DataTable11: \ 00000000 ........ DC32 Remind_Timer2 \ In segment CODE, align 4, keep-with-next \ ??DataTable14: \ 00000000 ........ DC32 GetTags \ In segment CODE, align 4, keep-with-next \ ??DataTable19: \ 00000000 ........ DC32 showAwayIdle \ In segment CODE, align 4, keep-with-next \ ??DataTable20: \ 00000000 ........ DC32 spaco1 \ In segment CODE, align 4, keep-with-next \ ??DataTable21: \ 00000000 ........ DC32 fonto \ In segment CODE, align 4, keep-with-next \ ??DataTable23: \ 00000000 ........ DC32 awayMsg \ In segment CODE, align 4, keep-with-next \ ??DataTable32: \ 00000000 ........ DC32 UIN \ In segment CODE, align 4, keep-with-next \ ??DataTable33: \ 00000000 ........ DC32 def_setting \ In segment CODE, align 4, keep-with-next \ ??DataTable34: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable35: \ 00000000 ........ DC32 CurrentXStatus \ In segment CODE, align 4, keep-with-next \ ??DataTable41: \ 00000000 ........ DC32 vibraPower \ In segment CODE, align 4, keep-with-next \ ??DataTable44: \ 00000000 ........ DC32 VIBR_TYPE \ In segment CODE, align 4, keep-with-next \ ??DataTable48: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable51: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable53: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable57: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable60: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable65: \ 00000000 ........ DC32 S_ICONS + 432 \ In segment CODE, align 4, keep-with-next \ ??DataTable66: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable211: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable212: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable213: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable215: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable218: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable219: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable223: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable224: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable225: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable226: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable227: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable228: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable229: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable231: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable232: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable233: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable234: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable235: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable237: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable243: \ 00000000 ........ DC32 `?`: \ 00000000 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000010 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000020 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000030 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000040 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000050 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000060 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 000000000000 \ 0000 \ `?`: \ 00000074 ............ DC32 maincsm_onmessage, maincsm_oncreate, 0, 0, 0, 0, maincsm_onclose \ ....00000000 \ 000000000000 \ 000000000000 \ ........ \ 00000090 2C0000000100 DC32 44, 1, minus11, maincsm_name_body, 55AACCCCH, 3333AA55H, 0 \ 0000........ \ ........CCCC \ AA5555AA3333 \ 00000000 \ 000000AC 8B00 DC16 139 \ 000000AE 0000 DC8 0, 0 \ 000000B0 49636F6E4261 DC8 "IconBar" \ 7200 \ 000000B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000000E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000E4 00000000 DC32 0 \ `?`: \ 000000E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000000FC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000100 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000104 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000108 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000010C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000110 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000114 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000118 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000011C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000120 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000124 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000128 00000000 DC32 0 \ `?`: \ 0000012C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000130 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000134 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000138 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000013C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000140 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000144 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000148 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000014C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000150 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000154 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000158 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000015C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000160 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000164 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000168 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000016C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000170 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000174 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000178 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000017C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000180 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000184 F6FFFFFF DC32 -10 \ `?`: \ 00000188 00000000 DC32 0 \ `?`: \ 0000018C FFFFFFFF DC32 -1 \ `?`: \ 00000190 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000194 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000198 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000019C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A0 00000000 DC32 0 \ `?`: \ 000001A4 00000000 DC32 0H \ `?`: \ 000001A8 01000000 DC32 1 \ `?`: \ 000001AC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D0 00000000 DC32 0 \ `?`: \ 000001D4 03000000 DC32 3 \ `?`: \ 000001D8 00000000 DC32 0 \ `?`: \ 000001DC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001E8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001EC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F0 09000000 DC32 9 \ `?`: \ 000001F4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000208 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000218 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000228 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000238 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000248 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000258 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000268 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000278 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000288 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000298 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000308 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000318 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000328 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000338 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000348 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000358 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000368 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000378 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000388 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000398 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000408 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00000418 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000428 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000438 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000448 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000458 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000468 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000478 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000488 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000498 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000508 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000518 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 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 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000608 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000618 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000628 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000638 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000648 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000658 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000668 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000678 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000688 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000698 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000708 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000718 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000728 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000738 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000748 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000758 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000768 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000778 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000788 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000798 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000808 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000818 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000828 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000838 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000848 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000858 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000868 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000878 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000888 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000898 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000908 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000918 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000928 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000938 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000948 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000958 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000968 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000978 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000988 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000998 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ED8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F08 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F18 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F28 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F38 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F48 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F58 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F68 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F78 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FE8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FF8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001008 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001018 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001028 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001038 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001048 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001058 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001068 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001078 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001088 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001098 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001108 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001118 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001128 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001138 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001148 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001158 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001168 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001178 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001188 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001198 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001208 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001218 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001228 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001238 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001248 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001258 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001268 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001278 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001288 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001298 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001308 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001318 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001328 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001338 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001348 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001358 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001368 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001378 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001388 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001398 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000013E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000013F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001408 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001418 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001428 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001438 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001448 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001458 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001468 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001478 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001488 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001498 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000014F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001508 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001518 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001528 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001538 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001548 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001558 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001568 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001578 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001588 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001598 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015A8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015B8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015C8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015D8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015E8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015F8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001600 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001610 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001620 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001630 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001640 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001650 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001660 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001670 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001680 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001690 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000016A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000016B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001700 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001710 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001720 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001730 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001740 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001750 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001760 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001770 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001780 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001790 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001800 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001810 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001820 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001830 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001840 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001850 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001860 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001870 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001880 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001890 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018D0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018E0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018F0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001900 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001910 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001920 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001930 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001940 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001950 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001960 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001970 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001980 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001990 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019A0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019B0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019C0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 000019CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000019FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001ABC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001ACC 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00001AE3 00 DC8 0 \ `?`: \ 00001AE4 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001AF8 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00001B10 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001B24 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 00001B3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001C44 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C54 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001C64 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C74 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C84 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C94 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 01000000 DC32 1 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 input_awaymsg_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CFF0E0E200 DC8 "\317\360\340\342" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C2FBE1EEF000 DC8 "\302\373\341\356\360" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 C7E0EAF0FBF2 DC8 "\307\340\352\360\373\362\374" \ FC00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CEEFF6E8E800 DC8 "\316\357\366\350\350" \ 00000006 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 2532643A2532 DC8 "%2d:%2d" \ 6400 \ 00000008 2820EEF2F1F3 DC8 "( \356\362\361\363\362\361\362\342\363\376 \357\360\350\354\345\360\355\356 \361 %02d:%02d [%s] )" \ F2F1F2E2F3FE \ 20EFF0E8ECE5 \ F0EDEE20F120 \ 253032643A25 \ 303264205B25 \ 735D202900 \ 00000031 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 474D54202D31 DC8 "GMT -12:00" \ 323A303000 \ 0000000B 00 DC8 0 \ 0000000C 474D54202D31 DC8 "GMT -11:00" \ 313A303000 \ 00000017 00 DC8 0 \ 00000018 474D54202D31 DC8 "GMT -10:00" \ 303A303000 \ 00000023 00 DC8 0 \ 00000024 474D54202D30 DC8 "GMT -09:00" \ 393A303000 \ 0000002F 00 DC8 0 \ 00000030 474D54202D30 DC8 "GMT -08:00" \ 383A303000 \ 0000003B 00 DC8 0 \ 0000003C 474D54202D30 DC8 "GMT -07:00" \ 373A303000 \ 00000047 00 DC8 0 \ 00000048 474D54202D30 DC8 "GMT -06:00" \ 363A303000 \ 00000053 00 DC8 0 \ 00000054 474D54202D30 DC8 "GMT -05:00" \ 353A303000 \ 0000005F 00 DC8 0 \ 00000060 474D54202D30 DC8 "GMT -04:00" \ 343A303000 \ 0000006B 00 DC8 0 \ 0000006C 474D54202D30 DC8 "GMT -03:30" \ 333A333000 \ 00000077 00 DC8 0 \ 00000078 474D54202D30 DC8 "GMT -03:00" \ 333A303000 \ 00000083 00 DC8 0 \ 00000084 474D54202D30 DC8 "GMT -02:00" \ 323A303000 \ 0000008F 00 DC8 0 \ 00000090 474D54202D30 DC8 "GMT -01:00" \ 313A303000 \ 0000009B 00 DC8 0 \ 0000009C 474D54203030 DC8 "GMT 00:00" \ 3A303000 \ 000000A6 0000 DC8 0, 0 \ 000000A8 474D54202B30 DC8 "GMT +01:00" \ 313A303000 \ 000000B3 00 DC8 0 \ 000000B4 474D54202B30 DC8 "GMT +02:00" \ 323A303000 \ 000000BF 00 DC8 0 \ 000000C0 474D54202B30 DC8 "GMT +03:00" \ 333A303000 \ 000000CB 00 DC8 0 \ 000000CC 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +04:00" \ 343A303000 \ 000000E3 00 DC8 0 \ 000000E4 474D54202B30 DC8 "GMT +05:00" \ 353A303000 \ 000000EF 00 DC8 0 \ 000000F0 474D54202B30 DC8 "GMT +05:30" \ 353A333000 \ 000000FB 00 DC8 0 \ 000000FC 474D54202B30 DC8 "GMT +05:45" \ 353A343500 \ 00000107 00 DC8 0 \ 00000108 474D54202B30 DC8 "GMT +06:00" \ 363A303000 \ 00000113 00 DC8 0 \ 00000114 474D54202B30 DC8 "GMT +06:30" \ 363A333000 \ 0000011F 00 DC8 0 \ 00000120 474D54202B30 DC8 "GMT +07:00" \ 373A303000 \ 0000012B 00 DC8 0 \ 0000012C 474D54202B30 DC8 "GMT +08:00" \ 383A303000 \ 00000137 00 DC8 0 \ 00000138 474D54202B30 DC8 "GMT +09:00" \ 393A303000 \ 00000143 00 DC8 0 \ 00000144 474D54202B30 DC8 "GMT +09:30" \ 393A333000 \ 0000014F 00 DC8 0 \ 00000150 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4F6E6C696E65 DC8 "Online: %02d:%02d:%02d" \ 3A2025303264 \ 3A253032643A \ 2530326400 \ 00000017 00 DC8 0 \ 00000018 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 417761792066 DC8 "Away from [%s]" \ 726F6D205B25 \ 735D00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5C25642E7478 DC8 "\\%d.txt" \ 7400 \ 00000008 5C302E747874 DC8 "\\0.txt" \ 00 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ 00000000 5B415D00 DC8 "[A]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B495D00 DC8 "[I]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B565D00 DC8 "[V]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B535D00 DC8 "[S]" \ In segment DATA_C, align 4, align-sorted \ 00000000 5B525D00 DC8 "[R]" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 57616974696E DC8 "Waiting for GPRS up..." \ 6720666F7220 \ 475052532075 \ 702E2E2E00 \ 00000017 00 DC8 0 \ 00000018 436F6E6E6563 DC8 "Connect to %s:%d" \ 7420746F2025 \ 733A256400 \ 00000029 000000 DC8 0, 0, 0 \ 0000002C 0A436F6E6E65 DC8 "\012Connect by IP!" \ 637420627920 \ 49502100 \ 0000003C 53656E642044 DC8 "Send DNR..." \ 4E522E2E2E00 \ 00000048 444E52204552 DC8 "DNR ERROR %d!" \ 524F52202564 \ 2100 \ 00000056 0000 DC8 0, 0 \ 00000058 444E52204F6B DC8 "DNR Ok, connecting..." \ 2C20636F6E6E \ 656374696E67 \ 2E2E2E00 \ 0000006E 0000 DC8 0, 0 \ 00000070 CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \357\356\344\352\353\376\367\350\362\374\361\377!" \ EEE6EDEE20EF \ EEE4EAEBFEF7 \ E8F2FCF1FF21 \ 00 \ 00000089 000000 DC8 0, 0, 0 \ 0000008C CDE5E2EEE7EC DC8 "\315\345\342\356\347\354\356\346\355\356 \361\356\347\344\340\362\374 \361\356\352\345\362, \357\345\360\345\347\340\357\363\361\352 GPRS!" \ EEE6EDEE20F1 \ EEE7E4E0F2FC \ 20F1EEEAE5F2 \ 2C20EFE5F0E5 \ E7E0EFF3F1EA \ 204750525321 \ 00 \ 000000B7 00 DC8 0 \ 000000B8 D1E5F0E2E5F0 DC8 "\321\345\360\342\345\360 \355\345 \355\340\351\344\345\355!" \ 20EDE520EDE0 \ E9E4E5ED2100 \ 000000CA 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 0A00 DC8 "\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73656E642072 DC8 "send res %d" \ 657320256400 \ 0000000C 53656E642064 DC8 "Send delayed..." \ 656C61796564 \ 2E2E2E00 \ 0000001C 53656E642065 DC8 "Send error!" \ 72726F722100 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 5369655F2530 DC8 "Sie_%04d" \ 346400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257300 DC8 "%s" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25733A202573 DC8 "%s: %s" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 253032643A25 DC8 "%02d:%02d %02d-%02d %s:\015\012" \ 303264202530 \ 32642D253032 \ 642025733A0D \ 0A00 \ 0000001A 0000 DC8 0, 0 \ 0000001C 253032643A25 DC8 "%02d:%02d %02d-%02d %s:" \ 303264202530 \ 32642D253032 \ 642025733A00 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4175746F626F DC8 "Autobot Off" \ 74204F666600 \ 0000000C 4175746F626F DC8 "Autobot On" \ 74204F6E00 \ 00000017 00 DC8 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 4E4154494351 DC8 "NATICQ: %d" \ 3A20256400 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616263646566 DC8 61H, 62H, 63H, 64H, 65H, 66H, 67H, 68H \ 6768 \ 00000008 696A6B6C6D6E DC8 69H, 6AH, 6BH, 6CH, 6DH, 6EH, 6FH, 70H \ 6F70 \ 00000010 717273747576 DC8 71H, 72H, 73H, 74H, 75H, 76H, 77H, 78H \ 7778 \ 00000018 797A41424344 DC8 79H, 7AH, 41H, 42H, 43H, 44H, 45H, 46H \ 4546 \ 00000020 4748494A4B4C DC8 47H, 48H, 49H, 4AH, 4BH, 4CH, 4DH, 4EH \ 4D4E \ 00000028 4F5051525354 DC8 4FH, 50H, 51H, 52H, 53H, 54H, 55H, 56H \ 5556 \ 00000030 5758595A3031 DC8 57H, 58H, 59H, 5AH, 30H, 31H, 32H, 33H \ 3233 \ 00000038 343536373839 DC8 34H, 35H, 36H, 37H, 38H, 39H, 24H, 2DH \ 242D \ 00000040 5F2E2B212A27 DC8 5FH, 2EH, 2BH, 21H, 2AH, 27H, 28H, 29H \ 2829 \ 00000048 2C253B3A4026 DC8 2CH, 25H, 3BH, 3AH, 40H, 26H, 3DH, 2FH \ 3D2F \ 00000050 3FE0E1E2E3E4 DC8 3FH, 0E0H, 0E1H, 0E2H, 0E3H, 0E4H, 0E5H, 0B8H \ E5B8 \ 00000058 E6E7E8E9EAEB DC8 0E6H, 0E7H, 0E8H, 0E9H, 0EAH, 0EBH, 0ECH, 0EDH \ ECED \ 00000060 EEEFF0F1F2F3 DC8 0EEH, 0EFH, 0F0H, 0F1H, 0F2H, 0F3H, 0F4H, 0F5H \ F4F5 \ 00000068 F6F7F8F9FAFB DC8 0F6H, 0F7H, 0F8H, 0F9H, 0FAH, 0FBH, 0FCH, 0FDH \ FCFD \ 00000070 FEFFC0C1C2C3 DC8 0FEH, 0FFH, 0C0H, 0C1H, 0C2H, 0C3H, 0C4H, 0C5H \ C4C5 \ 00000078 A8C6C7C8C9CA DC8 0A8H, 0C6H, 0C7H, 0C8H, 0C9H, 0CAH, 0CBH, 0CCH \ CBCC \ 00000080 CDCECFD0D1D2 DC8 0CDH, 0CEH, 0CFH, 0D0H, 0D1H, 0D2H, 0D3H, 0D4H \ D3D4 \ 00000088 D5D6D7D8D9DA DC8 0D5H, 0D6H, 0D7H, 0D8H, 0D9H, 0DAH, 0DBH, 0DCH \ DBDC \ 00000090 DDDEDF00 DC8 0DDH, 0DEH, 0DFH, 0 \ 00000094 687474703A2F DC8 "http://" \ 2F00 \ 0000009C 7777772E00 DC8 "www." \ 000000A1 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CCE5EDFE00 DC8 "\314\345\355\376" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 25735C25755C DC8 "%s\\%u\\%s(%d).txt" \ 257328256429 \ 2E74787400 \ 00000011 000000 DC8 0, 0, 0 \ 00000014 25735C257328 DC8 "%s\\%s(%d).txt" \ 2564292E7478 \ 7400 \ 00000022 0000 DC8 0, 0 \ In segment DATA_C, align 1, align-sorted \ 00000000 257500 DC8 "%u" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F66666C696E DC8 "offline.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 696E76697369 DC8 "invisible.png" \ 626C652E706E \ 6700 \ 0000000E 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 617761792E70 DC8 "away.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E612E706E67 DC8 "na.png" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6363757069 DC8 "occupied.png" \ 65642E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646E642E706E DC8 "dnd.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 646570726573 DC8 "depression.png" \ 73696F6E2E70 \ 6E6700 \ 0000000F 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6576696C2E70 DC8 "evil.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686F6D652E70 DC8 "home.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C756E63682E DC8 "lunch.png" \ 706E6700 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 776F726B2E70 DC8 "work.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6F6E6C696E65 DC8 "online.png" \ 2E706E6700 \ 0000000B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6666632E706E DC8 "ffc.png" \ 6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6D6573736167 DC8 "message.png" \ 652E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 756E6B6E6F77 DC8 "unknown.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973342E70 DC8 "vis4.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973352E70 DC8 "vis5.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 CBE5E200 DC8 "\313\345\342" Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 108 AddSmile 4 AddStringToLog 192 AddToMain 44 AskNickAndAddContact 4 AutobotInit 4 BackSpaceContactT9 8 ChangeSound 4 ChangeVibra 4 CheckComand 328 CheckDoubleRun 8 ClearContactT9Key 4 ClearLog 60 ClearSendQ 8 CreateEditChat 116 DrawAck 80 DrawAutoMSG 80 DrawOnlineTime 20 DrawPing 12 DrawStatusBar 64 ElfKiller 4 ExtractAnswer 36 FindContactLOGQByAck 12 FindNextActiveContact 0 FindPrevActiveContact 0 FreeLOGQ 8 FreeTemplates 8 FreeXText2 8 GetHost 0 GetHostsCount 0 GetIconIndex 0 GetLastXTextLOGQ 0 GetOnTotalContact 8 GetPort 16 GetShortInfo 24 GetTempName 20 Get_Online_total 0 IlluminationOff 8 IlluminationOn 24 InputAwayMsg 88 IsUrl 44 LastLOGQ 0 LoadTemplates 332 NewLOGQ 12 OpenLogfile 20 ParseAnswer 36 ParseXStatusText 20 Pinger2 16 Play 236 ProcessPacket 376 Quote 152 ReadDefSettings 156 RecountMenu 20 Remind_Timer2 8 Reminder_timer 4 RemoveLOGQ 4 ReqAddMsgToChat 16 RequestXText 8 SLI_Off 4 SLI_On 8 SLI_Timer 4 SLI_check 4 SMART_REDRAW 8 SaveAnswer 12 SendAnswer 28 SendAuthGrant 48 SendAuthReq 48 SendMSGACK 8 SetIconBarHandler 0 UpdateCLheader 56 UpdateCSMname 4 WriteDefSettings 152 addIconBar 16 ask_my_info 0 atoi 4 away_timer 24 begin_to_develop 4 contactlist_menu_ghook 8 contactlist_menu_iconhndl 668 contactlist_menu_onkey 56 create_connect 312 create_contactlist_menu 24 do_ping 4 do_reconnect 4 ec_menu 68 ecmenu_ghook 4 ed_options_handler 64 edchat_ghook 72 edchat_locret 0 edchat_onkey 348 end_socket 8 free_ICONS 16 get_answer 1096 init_time_zone 4 input_awaymsg_ghook 4 input_awaymsg_locret 0 input_awaymsg_onkey 72 main 64 maincsm_onclose 8 maincsm_oncreate 20 maincsm_onmessage 108 method0 96 method1 8 method2 8 method3 8 method4 0 method5 24 method8 0 method9 0 my_ed_redraw 12 my_keyhook 16 process_active_timer 12 recon 8 send_login 36 set_my_status 4 set_my_xstatus 48 set_my_xstatus2 36 setup_ICONS 12 show_pp_sender 68 start_vibra 8 start_vibra2 4 stop_vibra 4 stop_vibra2 4 to_develop 4 wstrstr 32 x_zstatus 20 xstatuse 12 Segment part sizes: Function/Label Bytes -------------- ----- Pinger2 144 SLI_TYPE 4 SMART_REDRAW 48 timeh 4 timemin 4 FreeXText2 36 away_timer 212 init_time_zone 356 DrawPing 80 Remind_Timer2 64 Reminder_timer 32 xstatuse 96 x_zstatus 156 DrawOnlineTime 148 DrawAutoMSG 132 input_awaymsg_onkey 332 input_awaymsg_ghook 68 input_awaymsg_locret 4 InputAwayMsg 480 SLI_On 60 SLI_Off 72 SLI_check 32 SLI_Timer 36 setup_ICONS 72 free_ICONS 44 IlluminationOff 60 IlluminationOn 120 ReadDefSettings 372 WriteDefSettings 372 Play 304 start_vibra 92 stop_vibra 80 start_vibra2 60 stop_vibra2 80 ChangeVibra 56 ChangeSound 56 FreeTemplates 56 LoadTemplates 396 RXbuf 16392 TXbuf 16392 ElfKiller 32 NewLOGQ 52 LastLOGQ 36 FreeLOGQ 48 RemoveLOGQ 52 AddLOGQ 44 GetLastXTextLOGQ 72 GetIconIndex 228 FindContactLOGQByAck 88 DrawStatusBar 188 UpdateCLheader 636 ClearContactT9Key 24 AddContactT9Key 36 BackSpaceContactT9 36 create_contactlist_menu 108 contactlist_menu_ghook 68 RecountMenu 160 contactlist_menu_onkey 1828 GetOnTotalContact 92 contactlist_menu_iconhndl 660 GetHost 192 atoi 84 GetPort 276 GetHostsCount 120 create_connect 728 ClearSendQ 32 end_socket 40 SendAnswer 388 send_login 148 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1440 AddToMain 572 AddStringToLog 588 ParseXStatusText 152 AddMsgToChat 832 DrawAck 340 ask_my_info 4 set_my_status 72 set_my_xstatus 532 set_my_xstatus2 244 to_develop 96 ReqAddMsgToChat 120 begin_to_develop 52 autobot 4 AutobotInit 76 CheckComand 1632 INC_Nick 32 show_pp_sender 348 Get_Online_total 92 ProcessPacket 2508 process_active_timer 144 method0 876 method1 44 method2 36 method3 24 method4 20 method5 204 method8 8 method9 8 my_keyhook 164 ? 12 maincsm_oncreate 260 maincsm_onclose 264 do_reconnect 40 CheckDoubleRun 120 maincsm_onmessage 2960 addIconBar 300 minus11 4 maincsm_name_body 280 UpdateCSMname 36 SetIconBarHandler 20 main 444 edchat_locret 4 ExtractAnswer 280 ??FindNextActiveContact_0 64 FindPrevActiveContact 88 ed_options_handler 436 wstrstr 124 IsUrl 424 ParseAnswer 548 SaveAnswer 36 GetTempName 172 DMonth 52 recon 52 edchat_onkey 1440 my_ed_redraw 112 edchat_ghook 560 edchat_desc 84 sk 16 CreateEditChat 1184 Quote 416 GetShortInfo 168 AddCurContact 52 SendAuthReq 212 SendAuthGrant 204 OpenLogfile 168 ClearLog 240 ecmenu_ghook 20 ecmenu_ITEMS 224 ecmenu_HNDLS 32 S_ICONS 7332 IsActiveUp 4 sk 8 input_awaymsg_sk 24 input_awaymsg_skt 8 ecmenu_HDR 64 ec_menu 320 AskNickAndAddContact 8 AddSmile 24 ??DataTable1 4 ??DataTable2 4 ??DataTable3 4 ??DataTable5 4 ??DataTable11 4 ??DataTable14 4 ??DataTable19 4 ??DataTable20 4 ??DataTable21 4 ??DataTable23 4 ??DataTable32 4 ??DataTable33 4 ??DataTable34 4 ??DataTable35 4 ??DataTable41 4 ??DataTable44 4 ??DataTable48 4 ??DataTable51 4 ??DataTable53 4 ??DataTable57 4 ??DataTable58 4 ??DataTable59 4 ??DataTable60 4 ??DataTable63 4 ??DataTable64 4 ??DataTable65 4 ??DataTable66 4 ??DataTable67 4 ??DataTable68 4 ??DataTable70 4 ??DataTable71 4 ??DataTable77 4 ??DataTable78 4 ??DataTable80 4 ??DataTable81 4 ??DataTable82 4 ??DataTable83 4 ??DataTable84 4 ??DataTable87 4 ??DataTable89 4 ??DataTable90 4 ??DataTable91 4 ??DataTable99 4 ??DataTable100 4 ??DataTable102 4 ??DataTable103 4 ??DataTable104 4 ??DataTable105 4 ??DataTable106 4 ??DataTable107 4 ??DataTable108 4 ??DataTable109 4 ??DataTable113 4 ??DataTable117 4 ??DataTable119 4 ??DataTable120 4 ??DataTable121 4 ??DataTable122 4 ??DataTable123 4 ??DataTable124 4 ??DataTable126 4 ??DataTable129 4 ??DataTable130 4 ??DataTable131 4 ??DataTable132 4 ??DataTable133 4 ??DataTable134 4 ??DataTable135 4 ??DataTable139 4 ??DataTable140 4 ??DataTable141 4 ??DataTable142 4 ??DataTable146 4 ??DataTable149 4 ??DataTable152 4 ??DataTable153 4 ??DataTable155 4 ??DataTable157 4 ??DataTable158 4 ??DataTable160 4 ??DataTable161 4 ??DataTable165 4 ??DataTable170 4 ??DataTable171 4 ??DataTable172 4 ??DataTable179 4 ??DataTable182 4 ??DataTable183 4 ??DataTable184 4 ??DataTable186 4 ??DataTable187 4 ??DataTable189 4 ??DataTable190 4 ??DataTable191 4 ??DataTable195 4 ??DataTable196 4 ??DataTable197 4 ??DataTable198 4 ??DataTable199 4 ??DataTable200 4 ??DataTable201 4 ??DataTable202 4 ??DataTable203 4 ??DataTable204 4 ??DataTable205 4 ??DataTable207 4 ??DataTable210 4 ??DataTable211 4 ??DataTable212 4 ??DataTable213 4 ??DataTable215 4 ??DataTable218 4 ??DataTable219 4 ??DataTable221 4 ??DataTable222 4 ??DataTable223 4 ??DataTable224 4 ??DataTable225 4 ??DataTable226 4 ??DataTable227 4 ??DataTable228 4 ??DataTable229 4 ??DataTable230 4 ??DataTable231 4 ??DataTable232 4 ??DataTable233 4 ??DataTable234 4 ??DataTable235 4 ??DataTable237 4 ??DataTable243 4 ??DataTable245 4 ??DataTable246 4 ??DataTable247 4 ??DataTable248 4 ??DataTable249 4 ??DataTable250 4 ? 7332 ? 4 ? 8 ? 24 ? 8 ? 8 ? 8 ? 8 ? 8 ? 52 ? 396 ? 32 ? 16 ? 3 ? 16 ? 4 ? 4 ? 4 ? 4 ? 4 ? 204 ? 2 ? 40 ? 12 ? 3 ? 8 ? 52 ? 24 ? 3 ? 12 ? 12 ? 164 ? 8 ? 36 ? 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 4 Others 1068 36 076 bytes in segment CODE 4 658 bytes in segment DATA_C 7 376 bytes in segment DATA_I 7 376 bytes in segment DATA_ID 33 108 bytes in segment DATA_Z 24 bytes in segment INITTAB 35 032 bytes of CODE memory (+ 1 068 bytes shared) 12 034 bytes of CONST memory 40 484 bytes of DATA memory Errors: none Warnings: none