############################################################################## # # # IAR ARM ANSI C/C++ Compiler V4.42A/W32 EVALUATION 30/Mar/2008 21:33:17 # # 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 kluchnik2 # # --preprocess D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kl # # uchnik2\List\ -lC D:\Pasha\elf\_MY_PROJECT_\naticq_m # # od\kluchnik2\List\ -o D:\Pasha\elf\_MY_PROJECT_\nati # # cq_mod\kluchnik2\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\kluchnik2\List\ # # main.lst # # Object file = D:\Pasha\elf\_MY_PROJECT_\naticq_mod\kluchnik2\Obj\m # # ain.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 EC10A0E3 MOV R1,#+236 \ 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 880094E5 LDR R0,[R4, #+136] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} \ 00000014 150000EF SWI +21 \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 880084E5 STR R0,[R4, #+136] 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 2C0194E5 LDR R0,[R4, #+300] \ 00000014 001091E5 LDR R1,[R1, #+0] \ 00000018 010050E1 CMP R0,R1 \ 0000001C 2000001A 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 B4509FE5 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 4400A0E3 MOV R0,#+68 \ 00000040 580D80E3 ORR R0,R0,#0x1600 \ 00000044 040080E0 ADD R0,R0,R4 \ 00000048 160000EF SWI +22 298 sprintf(away_msg_time, "( отсутствую примерно с %02d:%02d [%s] )", tt.hour, tt.min, tim_zone); \ 0000004C 5400A0E3 MOV R0,#+84 \ 00000050 580D80E3 ORR R0,R0,#0x1600 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 01002DE9 PUSH {R0} \ 0000005C 0530DDE5 LDRB R3,[SP, #+5] \ 00000060 0420DDE5 LDRB R2,[SP, #+4] \ 00000064 081085E2 ADD R1,R5,#+8 \ 00000068 0400A0E3 MOV R0,#+4 \ 0000006C 580D80E3 ORR R0,R0,#0x1600 \ 00000070 040080E0 ADD R0,R0,R4 \ 00000074 160000EF SWI +22 299 away_m=1; 300 if(CurrentStatus!=2) \ 00000078 740194E5 LDR R0,[R4, #+372] \ 0000007C 0150A0E3 MOV R5,#+1 \ 00000080 345184E5 STR R5,[R4, #+308] \ 00000084 020050E3 CMP R0,#+2 \ 00000088 04D08DE2 ADD SP,SP,#+4 \ 0000008C 0400000A BEQ ??away_timer_0 301 { 302 status_rem=CurrentStatus; \ 00000090 380184E5 STR R0,[R4, #+312] 303 CurrentStatus=2; \ 00000094 0200A0E3 MOV R0,#+2 \ 00000098 740184E5 STR R0,[R4, #+372] 304 set_my_status(); \ 0000009C ........ BL set_my_status 305 // SUBPROC((void*)WriteDefSettings); 306 change_back_status=1; \ 000000A0 3C5184E5 STR R5,[R4, #+316] 307 } 308 } 309 310 if(Auto_Status) \ ??away_timer_0: \ 000000A4 ........ LDR R0,??DataTable5 ;; Auto_Status 311 msg_away_timer++; 312 GBS_StartTimerProc(&away_tmr, 216*5, away_timer); \ 000000A8 30209FE5 LDR R2,??away_timer_1+0x4 ;; away_timer \ 000000AC 000090E5 LDR R0,[R0, #+0] \ 000000B0 3810A0E3 MOV R1,#+56 \ 000000B4 000050E3 CMP R0,#+0 \ 000000B8 2C019415 LDRNE R0,[R4, #+300] \ 000000BC 401E81E3 ORR R1,R1,#0x400 \ 000000C0 01008012 ADDNE R0,R0,#+1 \ 000000C4 2C018415 STRNE R0,[R4, #+300] \ 000000C8 6400A0E3 MOV R0,#+100 \ 000000CC 580D80E3 ORR R0,R0,#0x1600 \ 000000D0 040080E0 ADD R0,R0,R4 \ 000000D4 4D0000EF SWI +77 313 } \ 000000D8 3380BDE8 POP {R0,R1,R4,R5,PC} ;; return \ ??away_timer_1: \ 000000DC ........ DC32 `?` \ 000000E0 ........ 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 + 5716 \ 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 541F81E2 ADD R1,R1,#+336 \ 000000D8 DFFFFFEA B ??init_time_zone_4 373 break; 374 case 18: 375 sprintf(tim_zone, "GMT +04:00"); \ ??init_time_zone_20: \ 000000DC CC1081E2 ADD R1,R1,#+204 \ 000000E0 DDFFFFEA B ??init_time_zone_4 376 break; 377 case 19: 378 sprintf(tim_zone, "GMT +04:30"); \ ??init_time_zone_21: \ 000000E4 D81081E2 ADD R1,R1,#+216 \ 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 571F81E2 ADD R1,R1,#+348 \ 00000138 C7FFFFEA B ??init_time_zone_4 409 break; 410 case 30: 411 sprintf(tim_zone, "GMT +11:00"); \ ??init_time_zone_32: \ 0000013C 5A1F81E2 ADD R1,R1,#+360 \ 00000140 C5FFFFEA B ??init_time_zone_4 412 break; 413 case 31: 414 sprintf(tim_zone, "GMT +12:00"); \ ??init_time_zone_33: \ 00000144 5D1F81E2 ADD R1,R1,#+372 \ 00000148 C3FFFFEA B ??init_time_zone_4 415 break; 416 case 32: 417 sprintf(tim_zone, "GMT +13:00"); \ ??init_time_zone_34: \ 0000014C 601F81E2 ADD R1,R1,#+384 \ 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 + 5716 \ 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 FC10A0E3 MOV R1,#+252 \ 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 B00194E5 LDR R0,[R4, #+432] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD08 POPEQ {R4,PC} 449 { 450 vibra_count=Vibra_cc; \ 00000014 24009FE5 LDR R0,??Remind_Timer2_0 ;; Vibra_cc \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 7C0184E5 STR R0,[R4, #+380] 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 B30F41E2 SUB R0,R1,#+716 \ 00000034 040080E0 ADD R0,R0,R4 \ 00000038 4D0000EF SWI +77 453 } 454 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??Remind_Timer2_0: \ 00000040 ........ 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 + 5764 \ 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 + 5764 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 500194E5 LDR R0,[R4, #+336] \ 00000010 010080E2 ADD R0,R0,#+1 \ 00000014 500184E5 STR R0,[R4, #+336] \ 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 4C0194E5 LDR R0,[R4, #+332] \ 00000034 505184E5 STR R5,[R4, #+336] \ 00000038 010080E2 ADD R0,R0,#+1 \ 0000003C 4C0184E5 STR R0,[R4, #+332] 480 } 481 if(minimum_xstatus==60) \ ??xstatuse_0: \ 00000040 4C0194E5 LDR R0,[R4, #+332] \ 00000044 3C0050E3 CMP R0,#+60 \ 00000048 3080BD18 POPNE {R4,R5,PC} 482 { 483 minimum_xstatus=0; 484 xstatus_old++; \ 0000004C 480194E5 LDR R0,[R4, #+328] \ 00000050 4C5184E5 STR R5,[R4, #+332] \ 00000054 010080E2 ADD R0,R0,#+1 \ 00000058 480184E5 STR R0,[R4, #+328] 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 9400A0E3 MOV R0,#+148 \ 00000010 580D80E3 ORR R0,R0,#0x1600 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 8C0194E5 LDR R0,[R4, #+396] \ 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 540194E5 LDR R0,[R4, #+340] \ 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 A400A0E3 MOV R0,#+164 \ 00000048 580D80E3 ORR R0,R0,#0x1600 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 4D0000EF SWI +77 504 tracktimer=0; \ 00000054 547184E5 STR R7,[R4, #+340] 505 } 506 tracktimer++; \ ??x_zstatus_2: \ 00000058 540194E5 LDR R0,[R4, #+340] \ 0000005C 010080E2 ADD R0,R0,#+1 \ 00000060 540184E5 STR R0,[R4, #+340] 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 48718405 STREQ R7,[R4, #+328] 515 minimum_xstatus=0; \ 00000078 4C718405 STREQ R7,[R4, #+332] 516 maximum=0; \ 0000007C 50718405 STREQ R7,[R4, #+336] 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 B400A0E3 MOV R0,#+180 \ 00000010 580D80E3 ORR R0,R0,#0x1600 \ 00000014 045080E0 ADD R5,R0,R4 \ 00000018 8C0194E5 LDR R0,[R4, #+396] \ 0000001C 030050E3 CMP R0,#+3 \ 00000020 0700001A BNE ??DrawOnlineTime_1 527 { 528 sprintf(onlineTime,"Online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); \ 00000024 500194E5 LDR R0,[R4, #+336] \ 00000028 01002DE9 PUSH {R0} \ 0000002C 4C3194E5 LDR R3,[R4, #+332] \ 00000030 482194E5 LDR R2,[R4, #+328] \ 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 340194E5 LDR R0,[R4, #+308] \ 00000010 000050E3 CMP R0,#+0 \ 00000014 1700000A BEQ ??DrawAutoMSG_0 \ 00000018 ........ LDR R0,??DataTable19 ;; showAwayIdle \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 000050E3 CMP R0,#+0 \ 00000024 1300000A BEQ ??DrawAutoMSG_0 545 { 546 sprintf(awayTime,"Away from [%s]",away_msg_time_dace); \ 00000028 50109FE5 LDR R1,??DrawAutoMSG_1 ;; `?` \ 0000002C 4400A0E3 MOV R0,#+68 \ 00000030 580D80E3 ORR R0,R0,#0x1600 \ 00000034 042080E0 ADD R2,R0,R4 \ 00000038 0D00A0E1 MOV R0,SP \ 0000003C 160000EF SWI +22 547 PrintField(auto_x,auto_y, awayTime, align, fonto, spaco1); \ 00000040 ........ LDR R0,??DataTable20 ;; spaco1 \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 01002DE9 PUSH {R0} \ 0000004C ........ LDR R0,??DataTable21 ;; fonto \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 01002DE9 PUSH {R0} \ 00000058 E43094E5 LDR R3,[R4, #+228] \ 0000005C 20009FE5 LDR R0,??DrawAutoMSG_1+0x4 ;; auto_y \ 00000060 08208DE2 ADD R2,SP,#+8 \ 00000064 001090E5 LDR R1,[R0, #+0] \ 00000068 18009FE5 LDR R0,??DrawAutoMSG_1+0x8 ;; auto_x \ 0000006C 000090E5 LDR R0,[R0, #+0] \ 00000070 ........ _BLF PrintField,??PrintField??rA \ 00000074 08D08DE2 ADD SP,SP,#+8 548 } 549 } \ ??DrawAutoMSG_0: \ 00000078 40D08DE2 ADD SP,SP,#+64 ;; stack cleaning \ 0000007C 1080BDE8 POP {R4,PC} ;; return \ ??DrawAutoMSG_1: \ 00000080 ........ DC32 `?` \ 00000084 ........ DC32 auto_y \ 00000088 ........ 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 F0412DE9 PUSH {R4-R8,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 \ 00000008 0070A0E1 MOV R7,R0 \ 0000000C 0160A0E1 MOV R6,R1 561 WSHDR *ws=AllocWS(64); 562 if (msg->keys==0x0FFF || msg->keys==VOL_DOWN_BUTTON)//0xFFF \ 00000010 ........ LDR R5,??DataTable34 ;; S_ICONS \ 00000014 4000A0E3 MOV R0,#+64 \ 00000018 250100EF SWI +293 \ 0000001C F200D6E1 LDRSH R0,[R6, #+2] \ 00000020 0040A0E3 MOV R4,#+0 \ 00000024 FF10A0E3 MOV R1,#+255 \ 00000028 F01E81E3 ORR R1,R1,#0xF00 \ 0000002C 010050E1 CMP R0,R1 \ 00000030 0E005013 CMPNE R0,#+14 \ 00000034 1F00001A 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 28709DE5 LDR R7,[SP, #+40] 568 int i=0; 569 for(i=0;iwsbody[0];i++) \ 00000050 0080A0E3 MOV R8,#+0 \ 00000054 140000EF SWI +20 \ 00000058 300185E5 STR R0,[R5, #+304] \ 0000005C 000097E5 LDR R0,[R7, #+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 880080E0 ADD R0,R0,R8, LSL #+1 \ 00000074 B200D0E1 LDRH R0,[R0, #+2] \ 00000078 ........ _BLF char16to8,??char16to8??rA \ 0000007C 301195E5 LDR R1,[R5, #+304] \ 00000080 0100C8E7 STRB R0,[R8, +R1] \ 00000084 018088E2 ADD R8,R8,#+1 \ ??input_awaymsg_onkey_1: \ 00000088 000097E5 LDR R0,[R7, #+0] \ 0000008C B010D0E1 LDRH R1,[R0, #+0] \ 00000090 010058E1 CMP R8,R1 \ 00000094 F5FFFFBA BLT ??input_awaymsg_onkey_3 571 *(inp_away_msg2+i++)=0; \ ??input_awaymsg_onkey_2: \ 00000098 300195E5 LDR R0,[R5, #+304] \ 0000009C 0040C8E7 STRB R4,[R8, +R0] 572 573 #ifdef kluchnik 574 char *s; 575 ExtractEditControl(data,4,&ec); 576 ws=ec.pWS; 577 s=malloc(ec.maxlen); 578 for(i=0;iwsbody[0];i++) 579 *(s+i)=char16to8(ws->wsbody[i+1]); 580 *(s+i++)=0; 581 strcat(inp_away_msg2,s); 582 #endif 583 584 UpdateCLheader(); \ 000000A0 ........ BL UpdateCLheader 585 GeneralFunc_flag1(input_awaymsg_id,1); \ 000000A4 580195E5 LDR R0,[R5, #+344] \ 000000A8 0110A0E3 MOV R1,#+1 \ 000000AC 3D0100EF SWI +317 586 FreeWS(ws); \ 000000B0 0700A0E1 MOV R0,R7 \ 000000B4 290100EF SWI +297 587 // GeneralFuncF1(1); 588 } 589 590 if(msg->keys==LEFT_SOFT || msg->keys==RED_BUTTON) \ ??input_awaymsg_onkey_0: \ 000000B8 F200D6E1 LDRSH R0,[R6, #+2] \ 000000BC 010050E3 CMP R0,#+1 \ 000000C0 0C005013 CMPNE R0,#+12 \ 000000C4 0200001A BNE ??input_awaymsg_onkey_4 591 { 592 msg_away_timer=0; \ 000000C8 2C4185E5 STR R4,[R5, #+300] 593 away_m=0; \ 000000CC 344185E5 STR R4,[R5, #+308] 594 UpdateCLheader(); \ 000000D0 ........ BL UpdateCLheader 595 } 596 return(0); \ ??input_awaymsg_onkey_4: \ 000000D4 0000A0E3 MOV R0,#+0 \ 000000D8 2CD08DE2 ADD SP,SP,#+44 \ 000000DC F081BDE8 POP {R4-R8,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 F0402DE9 PUSH {R4-R7,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 4C619FE5 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 4C2086E2 ADD R2,R6,#+76 \ 00000040 431F8FE2 ADR R1,??InputAwayMsg_0 ;; "%t" \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 240100EF SWI +292 656 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); \ 0000004C 2000A0E3 MOV R0,#+32 \ 00000050 01002DE9 PUSH {R0} \ 00000054 0430A0E1 MOV R3,R4 \ 00000058 0020A0E3 MOV R2,#+0 \ 0000005C 0110A0E3 MOV R1,#+1 \ 00000060 04008DE2 ADD R0,SP,#+4 \ 00000064 650100EF SWI +357 657 AddEditControlToEditQend(eq,&ec,ma); \ 00000068 0720A0E1 MOV R2,R7 \ 0000006C 04108DE2 ADD R1,SP,#+4 \ 00000070 0500A0E1 MOV R0,R5 \ 00000074 660100EF SWI +358 658 659 PrepareEditControl(&ec); \ 00000078 04008DE2 ADD R0,SP,#+4 \ 0000007C 640100EF SWI +356 660 CutWSTR(wss,0); \ 00000080 0010A0E3 MOV R1,#+0 \ 00000084 0400A0E1 MOV R0,R4 \ 00000088 260100EF SWI +294 661 ascii2ws(wss,awayMsg); \ 0000008C ........ LDR R1,??DataTable23 ;; awayMsg \ 00000090 0400A0E1 MOV R0,R4 \ 00000094 ........ _BLF ascii2ws,??ascii2ws??rA 662 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); \ 00000098 FF00A0E3 MOV R0,#+255 \ 0000009C 01002DE9 PUSH {R0} \ 000000A0 0430A0E1 MOV R3,R4 \ 000000A4 4020A0E3 MOV R2,#+64 \ 000000A8 0310A0E3 MOV R1,#+3 \ 000000AC 08008DE2 ADD R0,SP,#+8 \ 000000B0 650100EF SWI +357 663 AddEditControlToEditQend(eq,&ec,ma); \ 000000B4 0720A0E1 MOV R2,R7 \ 000000B8 08108DE2 ADD R1,SP,#+8 \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 660100EF SWI +358 664 #ifdef kluchnik 665 PrepareEditControl(&ec); 666 wsprintf(wss,"%t","Сообщение 2:\n"); 667 ConstructEditControl(&ec,ECT_HEADER,ECF_NORMAL_STR,wss,32); 668 AddEditControlToEditQend(eq,&ec,ma); 669 670 ascii2ws(wss,"когда смогу отвечу:)"); 671 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL,wss,255); 672 AddEditControlToEditQend(eq,&ec,ma); 673 #endif 674 patch_header(&input_awaymsg_hdr); \ 000000C4 0070A0E3 MOV R7,#+0 \ 000000C8 B873C6E1 STRH R7,[R6, #+56] \ 000000CC 1800A0E3 MOV R0,#+24 \ 000000D0 BA03C6E1 STRH R0,[R6, #+58] \ 000000D4 888100EF SWI +33160 \ 000000D8 010040E2 SUB R0,R0,#+1 \ 000000DC BC03C6E1 STRH R0,[R6, #+60] \ 000000E0 8A8100EF SWI +33162 \ 000000E4 170080E2 ADD R0,R0,#+23 \ 000000E8 BE03C6E1 STRH R0,[R6, #+62] 675 patch_input(&input_awaymsg_desc); \ 000000EC B871C6E1 STRH R7,[R6, #+24] \ 000000F0 8A8100EF SWI +33162 \ 000000F4 190080E2 ADD R0,R0,#+25 \ 000000F8 BA01C6E1 STRH R0,[R6, #+26] \ 000000FC 888100EF SWI +33160 \ 00000100 010040E2 SUB R0,R0,#+1 \ 00000104 BC01C6E1 STRH R0,[R6, #+28] \ 00000108 898100EF SWI +33161 \ 0000010C 0070A0E1 MOV R7,R0 \ 00000110 8B8100EF SWI +33163 \ 00000114 000047E0 SUB R0,R7,R0 \ 00000118 010040E2 SUB R0,R0,#+1 \ 0000011C BE01C6E1 STRH R0,[R6, #+30] 676 677 FreeWS(wss); \ 00000120 0400A0E1 MOV R0,R4 \ 00000124 290100EF SWI +297 678 input_awaymsg_id=CreateInputTextDialog(&input_awaymsg_desc,&input_awaymsg_hdr,eq,1,0);//создаем диалоговое окно \ 00000128 0000A0E3 MOV R0,#+0 \ 0000012C 01002DE9 PUSH {R0} \ 00000130 0130A0E3 MOV R3,#+1 \ 00000134 0520A0E1 MOV R2,R5 \ 00000138 381086E2 ADD R1,R6,#+56 \ 0000013C 0600A0E1 MOV R0,R6 \ 00000140 670100EF SWI +359 \ 00000144 10109FE5 LDR R1,??InputAwayMsg_0+0x8 ;; S_ICONS + 344 \ 00000148 000081E5 STR R0,[R1, #+0] 679 } \ 0000014C 38D08DE2 ADD SP,SP,#+56 \ 00000150 F080BDE8 POP {R4-R7,PC} ;; return \ ??InputAwayMsg_0: \ 00000154 25740000 DC8 "%t",+0 \ 00000158 ........ DC32 input_awaymsg_desc \ 0000015C ........ DC32 S_ICONS + 344 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 7400A0E3 MOV R0,#+116 \ 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 B01190E5 LDR R1,[R0, #+432] \ 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 7430A0E3 MOV R3,#+116 \ 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 + 432 \ 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 + 432 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 + 5748 \ 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 + 5748 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,??DataTable27 ;; 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); \ 0000004C 3610A0E3 MOV R1,#+54 \ 00000050 000000EA B ??start_vibra_2 986 else 987 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,stop_vibra); \ ??start_vibra_1: \ 00000054 6C10A0E3 MOV R1,#+108 \ ??start_vibra_2: \ 00000058 4D0000EF SWI +77 988 } 989 } \ 0000005C 1080BDE8 POP {R4,PC} ;; return \ ??start_vibra_0: \ 00000060 ........ 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,??DataTable57 ;; S_ICONS \ 00000010 7C1190E5 LDR R1,[R0, #+380] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 7C1180E5 STR R1,[R0, #+380] \ 0000001C 0080BD08 POPEQ {PC} 996 { 997 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra_0 ;; start_vibra \ 00000024 4410A0E3 MOV R1,#+68 \ 00000028 601D81E3 ORR R1,R1,#0x1800 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable44 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra_1 998 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra_2 999 else 1000 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra); \ ??stop_vibra_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra_2: \ 0000004C 4D0000EF SWI +77 1001 } 1002 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra_0: \ 00000054 ........ 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 + 6212 \ 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 + 6212 \ 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,??DataTable57 ;; S_ICONS \ 00000010 7C1190E5 LDR R1,[R0, #+380] \ 00000014 011051E2 SUBS R1,R1,#+1 \ 00000018 7C1180E5 STR R1,[R0, #+380] \ 0000001C 0080BD08 POPEQ {PC} 1021 { 1022 if(VIBR_TYPE) \ 00000020 2C209FE5 LDR R2,??stop_vibra2_0 ;; start_vibra2 \ 00000024 4410A0E3 MOV R1,#+68 \ 00000028 601D81E3 ORR R1,R1,#0x1800 \ 0000002C 000081E0 ADD R0,R1,R0 \ 00000030 ........ LDR R1,??DataTable44 ;; VIBR_TYPE \ 00000034 001091E5 LDR R1,[R1, #+0] \ 00000038 000051E3 CMP R1,#+0 \ 0000003C 0100000A BEQ ??stop_vibra2_1 1023 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>5,start_vibra2); \ 00000040 0610A0E3 MOV R1,#+6 \ 00000044 000000EA B ??stop_vibra2_2 1024 else 1025 GBS_StartTimerProc(&tmr_vibra,TMR_SECOND>>1,start_vibra2); \ ??stop_vibra2_1: \ 00000048 6C10A0E3 MOV R1,#+108 \ ??stop_vibra2_2: \ 0000004C 4D0000EF SWI +77 1026 } 1027 } \ 00000050 0080BDE8 POP {PC} ;; return \ ??stop_vibra2_0: \ 00000054 ........ 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,??DataTable57 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 641190E5 LDR R1,[R0, #+356] \ 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,??DataTable57 ;; S_ICONS \ 000000EC 010087E2 ADD R0,R7,#+1 \ 000000F0 140000EF SWI +20 \ 000000F4 800184E5 STR R0,[R4, #+384] \ 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 840194E5 LDR R0,[R4, #+388] \ 00000158 01A087E2 ADD R10,R7,#+1 \ 0000015C 0A11A0E1 LSL R1,R10,#+2 \ 00000160 BA0000EF SWI +186 \ 00000164 840184E5 STR R0,[R4, #+388] \ 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 701090E5 LDR R1,[R0, #+112] 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 600090E5 LDR R0,[R0, #+96] \ 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 705095E5 LDR R5,[R5, #+112] \ 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; 1390 char status[64]; \ In segment CODE, align 4, keep-with-next 1391 void DrawStatusBar() 1392 { \ DrawStatusBar: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1393 // PrintText( int x, int y, char *str, int align, int font, int space, int lineSpace, int isScroll, short fixSize, int maxLen); 1394 // if(TIME_OR_MSG==4) 1395 if(contactlist_menu_id) \ 00000004 ........ LDR R4,??DataTable57 ;; S_ICONS \ 00000008 BC0194E5 LDR R0,[R4, #+444] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 2200000A BEQ ??DrawStatusBar_0 1396 { 1397 DrawRectangle(40,YDISP,scr_w-1,YDISP+30,0,GetPaletteAdrByColorIndex(1),GetPaletteAdrByColorIndex(1)); \ 00000014 0100A0E3 MOV R0,#+1 \ 00000018 2E0100EF SWI +302 \ 0000001C 0050A0E1 MOV R5,R0 \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 2E0100EF SWI +302 \ 00000028 20002DE9 PUSH {R5} \ 0000002C 01002DE9 PUSH {R0} \ 00000030 3630A0E3 MOV R3,#+54 \ 00000034 1810A0E3 MOV R1,#+24 \ 00000038 0000A0E3 MOV R0,#+0 \ 0000003C 01002DE9 PUSH {R0} \ 00000040 74009FE5 LDR R0,??DrawStatusBar_1 ;; scr_w \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 012040E2 SUB R2,R0,#+1 \ 0000004C 2800A0E3 MOV R0,#+40 \ 00000050 B40100EF SWI +436 1398 PrintText(33,YDISP+2,status,0,1,1,2,0,0,ScreenW()-20); \ 00000054 888100EF SWI +33160 \ 00000058 140040E2 SUB R0,R0,#+20 \ 0000005C 01002DE9 PUSH {R0} \ 00000060 0030A0E3 MOV R3,#+0 \ 00000064 1A10A0E3 MOV R1,#+26 \ 00000068 0000A0E3 MOV R0,#+0 \ 0000006C 01002DE9 PUSH {R0} \ 00000070 01002DE9 PUSH {R0} \ 00000074 0200A0E3 MOV R0,#+2 \ 00000078 01002DE9 PUSH {R0} \ 0000007C 0100A0E3 MOV R0,#+1 \ 00000080 01002DE9 PUSH {R0} \ 00000084 01002DE9 PUSH {R0} \ 00000088 C400A0E3 MOV R0,#+196 \ 0000008C 600D80E3 ORR R0,R0,#0x1800 \ 00000090 042080E0 ADD R2,R0,R4 \ 00000094 2100A0E3 MOV R0,#+33 \ 00000098 ........ _BLF PrintText,??PrintText??rA \ 0000009C 24D08DE2 ADD SP,SP,#+36 1399 } 1400 //PrintField( int x, int y, char *str, int align, int font, int space); 1401 // PrintField( 40, YDISP, status,0, t, int space); 1402 GBS_StartTimerProc(&statusTmr,120,DrawStatusBar); \ ??DrawStatusBar_0: \ 000000A0 18209FE5 LDR R2,??DrawStatusBar_1+0x4 ;; DrawStatusBar \ 000000A4 7810A0E3 MOV R1,#+120 \ 000000A8 B400A0E3 MOV R0,#+180 \ 000000AC 600D80E3 ORR R0,R0,#0x1800 \ 000000B0 040080E0 ADD R0,R0,R4 \ 000000B4 4D0000EF SWI +77 1403 } \ 000000B8 3080BDE8 POP {R4,R5,PC} ;; return \ ??DrawStatusBar_1: \ 000000BC ........ DC32 scr_w \ 000000C0 ........ DC32 DrawStatusBar 1404 \ In segment CODE, align 4, keep-with-next 1405 void UpdateCLheader(void) 1406 { \ UpdateCLheader: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 1407 if (strlen(ContactT9Key)) \ 00000004 ........ LDR R5,??DataTable57 ;; S_ICONS \ 00000008 6C429FE5 LDR R4,??UpdateCLheader_1+0x14 ;; key_clmenu_sk_r \ 0000000C 0CD04DE2 SUB SP,SP,#+12 \ 00000010 A410A0E3 MOV R1,#+164 \ 00000014 601D81E3 ORR R1,R1,#0x1800 \ 00000018 051081E0 ADD R1,R1,R5 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 7400A0E3 MOV R0,#+116 \ 00000024 600D80E3 ORR R0,R0,#0x1800 \ 00000028 05B080E0 ADD R11,R0,R5 \ 0000002C CF6FA0E3 MOV R6,#+828 \ 00000030 050086E0 ADD R0,R6,R5 \ 00000034 1B0000EF SWI +27 \ 00000038 000050E3 CMP R0,#+0 \ 0000003C 0900000A BEQ ??UpdateCLheader_2 1408 { 1409 strcpy(clm_hdr_text,key_clm_hdr_text); \ 00000040 541084E2 ADD R1,R4,#+84 \ 00000044 0B00A0E1 MOV R0,R11 \ 00000048 1A0000EF SWI +26 1410 strcat(clm_hdr_text,ContactT9Key); \ 0000004C 051086E0 ADD R1,R6,R5 \ 00000050 0B00A0E1 MOV R0,R11 \ 00000054 170000EF SWI +23 1411 strcpy(clmenu_sk_r,key_clmenu_sk_r); \ 00000058 00009DE5 LDR R0,[SP, #+0] \ 0000005C 0410A0E1 MOV R1,R4 \ 00000060 1A0000EF SWI +26 \ 00000064 F78FBDE8 POP {R0-R2,R4-R11,PC} 1412 } 1413 else 1414 { 1415 switch(TIME_OR_MSG) \ ??UpdateCLheader_2: \ 00000068 ........ LDR R0,??DataTable52 ;; TIME_OR_MSG \ 0000006C B06195E5 LDR R6,[R5, #+432] \ 00000070 000090E5 LDR R0,[R0, #+0] \ 00000074 107195E5 LDR R7,[R5, #+272] \ 00000078 7A8F8FE2 ADR R8,??UpdateCLheader_1 ;; "[V]" \ 0000007C 7A9F8FE2 ADR R9,??UpdateCLheader_1+0x4 ;; "[I]" \ 00000080 7AAF8FE2 ADR R10,??UpdateCLheader_1+0x8 ;; "[A]" \ 00000084 040050E3 CMP R0,#+4 \ 00000088 7200008A 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 40000000 DC8 +64,+0,+0,+0 1416 { 1417 case 0: 1418 { 1419 TTime the; 1420 GetDateTime(NULL,&the); \ ??UpdateCLheader_4: \ 000000A0 04108DE2 ADD R1,SP,#+4 \ 000000A4 0000A0E3 MOV R0,#+0 \ 000000A8 B40000EF SWI +180 1421 sprintf(clm_hdr_text, "%s(%02d:%02d)",def_clm_hdr_text,the.hour,the.min); \ 000000AC 0500DDE5 LDRB R0,[SP, #+5] \ 000000B0 482084E2 ADD R2,R4,#+72 \ 000000B4 041084E2 ADD R1,R4,#+4 \ 000000B8 01002DE9 PUSH {R0} \ 000000BC 0830DDE5 LDRB R3,[SP, #+8] \ ??UpdateCLheader_5: \ 000000C0 0B00A0E1 MOV R0,R11 \ 000000C4 160000EF SWI +22 \ 000000C8 04D08DE2 ADD SP,SP,#+4 \ 000000CC 610000EA B ??UpdateCLheader_3 1422 } 1423 break; 1424 case 1: 1425 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,total_unread,total_unread2); \ ??UpdateCLheader_6: \ 000000D0 80002DE9 PUSH {R7} \ 000000D4 0630A0E1 MOV R3,R6 \ 000000D8 482084E2 ADD R2,R4,#+72 \ 000000DC 141084E2 ADD R1,R4,#+20 \ 000000E0 F6FFFFEA B ??UpdateCLheader_5 1426 break; 1427 case 2: 1428 sprintf(clm_hdr_text, "%s(%d/%d)",def_clm_hdr_text,kopa_kontaktu,kopa_online); \ ??UpdateCLheader_7: \ 000000E4 CC0195E5 LDR R0,[R5, #+460] \ 000000E8 482084E2 ADD R2,R4,#+72 \ 000000EC 01002DE9 PUSH {R0} \ 000000F0 D03195E5 LDR R3,[R5, #+464] \ 000000F4 141084E2 ADD R1,R4,#+20 \ 000000F8 F0FFFFEA B ??UpdateCLheader_5 1429 break; 1430 case 3: 1431 { 1432 void Get_Online_total(); 1433 Get_Online_total(); \ ??UpdateCLheader_8: \ 000000FC ........ BL Get_Online_total 1434 sprintf(clm_hdr_text, "[%d/%d] [%d/%d] ",kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 00000100 80002DE9 PUSH {R7} \ 00000104 40002DE9 PUSH {R6} \ 00000108 CC3195E5 LDR R3,[R5, #+460] \ 0000010C D02195E5 LDR R2,[R5, #+464] \ 00000110 201084E2 ADD R1,R4,#+32 \ 00000114 0B00A0E1 MOV R0,R11 \ 00000118 160000EF SWI +22 1435 if(away_m) strcat(clm_hdr_text,"[A]"); \ 0000011C 340195E5 LDR R0,[R5, #+308] \ 00000120 08D08DE2 ADD SP,SP,#+8 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0200000A BEQ ??UpdateCLheader_9 \ 0000012C 0A10A0E1 MOV R1,R10 \ 00000130 0B00A0E1 MOV R0,R11 \ 00000134 170000EF SWI +23 1436 if(CurrentPrivateStatus==1) strcat(clm_hdr_text,"[I]"); \ ??UpdateCLheader_9: \ 00000138 780195E5 LDR R0,[R5, #+376] \ 0000013C 010050E3 CMP R0,#+1 \ 00000140 0200001A BNE ??UpdateCLheader_10 \ 00000144 0910A0E1 MOV R1,R9 \ 00000148 0B00A0E1 MOV R0,R11 \ 0000014C 170000EF SWI +23 1437 if(Is_Vibra_Enabled) strcat(clm_hdr_text,"[V]"); \ ??UpdateCLheader_10: \ 00000150 640195E5 LDR R0,[R5, #+356] \ 00000154 000050E3 CMP R0,#+0 \ 00000158 0200000A BEQ ??UpdateCLheader_11 \ 0000015C 0810A0E1 MOV R1,R8 \ 00000160 0B00A0E1 MOV R0,R11 \ 00000164 170000EF SWI +23 1438 if(Is_Sounds_Enabled) strcat(clm_hdr_text,"[S]"); \ ??UpdateCLheader_11: \ 00000168 680195E5 LDR R0,[R5, #+360] \ 0000016C 000050E3 CMP R0,#+0 \ 00000170 0200000A BEQ ??UpdateCLheader_12 \ 00000174 3E1F8FE2 ADR R1,??UpdateCLheader_1+0xC ;; "[S]" \ 00000178 0B00A0E1 MOV R0,R11 \ 0000017C 170000EF SWI +23 1439 if(Is_Double_Vibra_On) strcat(clm_hdr_text,"[R]"); \ ??UpdateCLheader_12: \ 00000180 0C0195E5 LDR R0,[R5, #+268] \ 00000184 000050E3 CMP R0,#+0 \ 00000188 3200000A BEQ ??UpdateCLheader_3 \ 0000018C 391F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 00000190 0B00A0E1 MOV R0,R11 \ 00000194 170000EF SWI +23 \ 00000198 2E0000EA B ??UpdateCLheader_3 1440 } 1441 break; 1442 case 4: 1443 { 1444 void Get_Online_total(); 1445 Get_Online_total(); \ ??UpdateCLheader_13: \ 0000019C ........ BL Get_Online_total 1446 sprintf(status, "%s[%d/%d] [%d/%d] ",def_clm_hdr_text,kopa_kontaktu,kopa_online,total_unread,total_unread2); \ 000001A0 C400A0E3 MOV R0,#+196 \ 000001A4 600D80E3 ORR R0,R0,#0x1800 \ 000001A8 05B080E0 ADD R11,R0,R5 \ 000001AC 80002DE9 PUSH {R7} \ 000001B0 40002DE9 PUSH {R6} \ 000001B4 CC0195E5 LDR R0,[R5, #+460] \ 000001B8 482084E2 ADD R2,R4,#+72 \ 000001BC 01002DE9 PUSH {R0} \ 000001C0 D03195E5 LDR R3,[R5, #+464] \ 000001C4 341084E2 ADD R1,R4,#+52 \ 000001C8 0B00A0E1 MOV R0,R11 \ 000001CC 160000EF SWI +22 1447 if(away_m) strcat(status,"[A]"); \ 000001D0 340195E5 LDR R0,[R5, #+308] \ 000001D4 0CD08DE2 ADD SP,SP,#+12 \ 000001D8 000050E3 CMP R0,#+0 \ 000001DC 0200000A BEQ ??UpdateCLheader_14 \ 000001E0 0A10A0E1 MOV R1,R10 \ 000001E4 0B00A0E1 MOV R0,R11 \ 000001E8 170000EF SWI +23 1448 if(CurrentPrivateStatus==1) strcat(status,"[I]"); \ ??UpdateCLheader_14: \ 000001EC 780195E5 LDR R0,[R5, #+376] \ 000001F0 010050E3 CMP R0,#+1 \ 000001F4 0200001A BNE ??UpdateCLheader_15 \ 000001F8 0910A0E1 MOV R1,R9 \ 000001FC 0B00A0E1 MOV R0,R11 \ 00000200 170000EF SWI +23 1449 if(Is_Vibra_Enabled) strcat(status,"[V]"); \ ??UpdateCLheader_15: \ 00000204 640195E5 LDR R0,[R5, #+356] \ 00000208 000050E3 CMP R0,#+0 \ 0000020C 0200000A BEQ ??UpdateCLheader_16 \ 00000210 0810A0E1 MOV R1,R8 \ 00000214 0B00A0E1 MOV R0,R11 \ 00000218 170000EF SWI +23 1450 if(Is_Sounds_Enabled) strcat(status,"[S]"); \ ??UpdateCLheader_16: \ 0000021C 680195E5 LDR R0,[R5, #+360] \ 00000220 000050E3 CMP R0,#+0 \ 00000224 0200000A BEQ ??UpdateCLheader_17 \ 00000228 111F8FE2 ADR R1,??UpdateCLheader_1+0xC ;; "[S]" \ 0000022C 0B00A0E1 MOV R0,R11 \ 00000230 170000EF SWI +23 1451 if(Is_Double_Vibra_On) strcat(status,"[R]"); \ ??UpdateCLheader_17: \ 00000234 0C0195E5 LDR R0,[R5, #+268] \ 00000238 000050E3 CMP R0,#+0 \ 0000023C 0200000A BEQ ??UpdateCLheader_18 \ 00000240 0C1F8FE2 ADR R1,??UpdateCLheader_1+0x10 ;; "[R]" \ 00000244 0B00A0E1 MOV R0,R11 \ 00000248 170000EF SWI +23 1452 canvasdata=BuildCanvas(); \ ??UpdateCLheader_18: \ 0000024C F18000EF SWI +33009 \ 00000250 E80085E5 STR R0,[R5, #+232] 1453 DrawStatusBar(); \ 00000254 ........ BL DrawStatusBar 1454 } 1455 break; 1456 } 1457 strcpy(clmenu_sk_r,def_clmenu_sk_r); \ ??UpdateCLheader_3: \ 00000258 00009DE5 LDR R0,[SP, #+0] \ 0000025C 601084E2 ADD R1,R4,#+96 \ 00000260 1A0000EF SWI +26 1458 } 1459 } \ 00000264 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return \ ??UpdateCLheader_1: \ 00000268 5B565D00 DC8 "[V]" \ 0000026C 5B495D00 DC8 "[I]" \ 00000270 5B415D00 DC8 "[A]" \ 00000274 5B535D00 DC8 "[S]" \ 00000278 5B525D00 DC8 "[R]" \ 0000027C ........ DC32 key_clmenu_sk_r 1460 \ In segment CODE, align 4, keep-with-next 1461 void ClearContactT9Key(void) 1462 { 1463 zeromem(ContactT9Key,sizeof(ContactT9Key)); \ ClearContactT9Key: \ 00000000 0C009FE5 LDR R0,??ClearContactT9Key_0 ;; S_ICONS + 828 \ 00000004 00402DE9 PUSH {LR} \ 00000008 2010A0E3 MOV R1,#+32 \ 0000000C 1D0100EF SWI +285 1464 } \ 00000010 0080BDE8 POP {PC} ;; return \ ??ClearContactT9Key_0: \ 00000014 ........ DC32 S_ICONS + 828 1465 \ In segment CODE, align 4, keep-with-next 1466 void AddContactT9Key(int chr) 1467 { \ AddContactT9Key: \ 00000000 30402DE9 PUSH {R4,R5,LR} 1468 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R5,??DataTable57 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C CF0F85E2 ADD R0,R5,#+828 \ 00000010 1B0000EF SWI +27 1469 if (l<(sizeof(ContactT9Key)-1)) \ 00000014 1F0050E3 CMP R0,#+31 1470 { 1471 ContactT9Key[l]=chr; \ 00000018 05008030 ADDCC R0,R0,R5 \ 0000001C 3C43C035 STRBCC R4,[R0, #+828] 1472 } 1473 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 1474 \ In segment CODE, align 4, keep-with-next 1475 void BackSpaceContactT9(void) 1476 { \ BackSpaceContactT9: \ 00000000 10402DE9 PUSH {R4,LR} 1477 int l=strlen(ContactT9Key); \ 00000004 ........ LDR R4,??DataTable57 ;; S_ICONS \ 00000008 CF0F84E2 ADD R0,R4,#+828 \ 0000000C 1B0000EF SWI +27 1478 if (l) \ 00000010 000050E3 CMP R0,#+0 1479 { 1480 l--; 1481 ContactT9Key[l]=0; \ 00000014 04008010 ADDNE R0,R0,R4 \ 00000018 0010A013 MOVNE R1,#+0 \ 0000001C 3B13C015 STRBNE R1,[R0, #+827] 1482 } 1483 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 1484 \ In segment CODE, align 4, keep-with-next 1485 void create_contactlist_menu(void) 1486 { \ create_contactlist_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} 1487 int i; 1488 i=CountContacts(); 1489 prev_clmenu_itemcount=i; \ 00000004 ........ LDR R5,??DataTable57 ;; S_ICONS 1490 UpdateCLheader(); 1491 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 C44185E5 STR R4,[R5, #+452] \ 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] 1492 #ifdef USE_MLMENU 1493 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 BC0185E5 STR R0,[R5, #+444] 1494 #else 1495 contactlist_menu_id=CreateMenu(0,0,&contactlist_menu,&contactlist_menuhdr,0,i,0,0); 1496 #endif 1497 } \ 00000064 7380BDE8 POP {R0,R1,R4-R6,PC} ;; return \ ??create_contactlist_menu_0: \ 00000068 ........ DC32 contactlist_menuhdr 1498 \ In segment CODE, align 4, keep-with-next 1499 void contactlist_menu_ghook(void *data, int cmd) 1500 { \ contactlist_menu_ghook: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0140A0E1 MOV R4,R1 1501 PNGTOP_DESC *pltop=PNG_TOP(); \ 00000008 B98100EF SWI +33209 1502 if (cmd==9) \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 090054E3 CMP R4,#+9 1503 { 1504 pltop->dyn_pltop=NULL; \ 00000014 08108005 STREQ R1,[R0, #+8] \ 00000018 1080BD08 POPEQ {R4,PC} 1505 } 1506 if (cmd==0x0A) \ 0000001C 0A0054E3 CMP R4,#+10 \ 00000020 1080BD18 POPNE {R4,PC} 1507 { 1508 silenthide=0; \ 00000024 14209FE5 LDR R2,??contactlist_menu_ghook_0 ;; S_ICONS + 348 \ 00000028 001082E5 STR R1,[R2, #+0] 1509 pltop->dyn_pltop=XStatusesImgList; \ 0000002C ........ LDR R1,??DataTable56 ;; XStatusesImgList \ 00000030 001091E5 LDR R1,[R1, #+0] \ 00000034 081080E5 STR R1,[R0, #+8] 1510 DisableIDLETMR(); \ 00000038 7F0100EF SWI +383 1511 } 1512 } \ 0000003C 1080BDE8 POP {R4,PC} ;; return \ ??contactlist_menu_ghook_0: \ 00000040 ........ DC32 S_ICONS + 348 1513 \ In segment CODE, align 4, keep-with-next 1514 void RecountMenu(CLIST *req, int needfocus) 1515 { \ RecountMenu: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 1516 int i; 1517 int j; 1518 void *data; 1519 UpdateCLheader(); 1520 if (!contactlist_menu_id) return; //Нечего считать \ 00000004 ........ LDR R6,??DataTable57 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C 0150A0E1 MOV R5,R1 \ 00000010 ........ BL UpdateCLheader \ 00000014 BC0196E5 LDR R0,[R6, #+444] \ 00000018 000050E3 CMP R0,#+0 \ 0000001C F080BD08 POPEQ {R4-R7,PC} 1521 data=FindGUIbyId(contactlist_menu_id,NULL); \ 00000020 BC0196E5 LDR R0,[R6, #+444] \ 00000024 0010A0E3 MOV R1,#+0 \ 00000028 090200EF SWI +521 \ 0000002C 0070A0E1 MOV R7,R0 1522 if (req==NULL) \ 00000030 000054E3 CMP R4,#+0 \ 00000034 0200000A BEQ ??RecountMenu_0 1523 { 1524 j=0; 1525 } 1526 else 1527 { 1528 j=FindContactByContact(req); \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C ........ _BLF FindContactByContact,??FindContactByContact??rA \ 00000040 0040A0E1 MOV R4,R0 1529 } 1530 i=CountContacts(); \ ??RecountMenu_0: \ 00000044 ........ _BLF CountContacts,??CountContacts??rA 1531 if (j>=i) j=i-1; 1532 if (j<0) j=0; 1533 if (i!=prev_clmenu_itemcount) \ 00000048 C41196E5 LDR R1,[R6, #+452] \ 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 1534 { 1535 prev_clmenu_itemcount=i; \ 00000064 C40186E5 STR R0,[R6, #+452] 1536 Menu_SetItemCountDyn(data,i); \ 00000068 0010A0E1 MOV R1,R0 \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 E60100EF SWI +486 1537 } 1538 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 1539 if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); \ ??RecountMenu_2: \ 00000088 BC0196E5 LDR R0,[R6, #+444] \ 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 1540 } 1541 1542 char hostbuf2[128]; 1543 \ In segment CODE, align 4, keep-with-next 1544 int contactlist_menu_onkey(void *data, GUI_MSG *msg) 1545 { \ contactlist_menu_onkey: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 1546 CLIST *t; 1547 int i; 1548 i=GetCurMenuItem(data); \ 00000008 8F0100EF SWI +399 1549 t=FindContactByN(i); \ 0000000C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000010 00A0A0E1 MOV R10,R0 1550 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 1551 { 1552 ShowMainMenu(); \ 00000024 ........ _BLF ShowMainMenu,??ShowMainMenu??rA 1553 return(-1); \ 00000028 DF0000EA B ??contactlist_menu_onkey_2 1554 } 1555 if (msg->keys==0x3D) \ ??contactlist_menu_onkey_1: \ 0000002C ........ LDR R6,??DataTable58 ;; S_ICONS \ 00000030 CF5FA0E3 MOV R5,#+828 \ 00000034 3D0050E3 CMP R0,#+61 \ 00000038 2400001A BNE ??contactlist_menu_onkey_3 1556 { 1557 if (t) \ 0000003C 00005AE3 CMP R10,#+0 \ 00000040 2C00000A BEQ ??contactlist_menu_onkey_4 1558 { 1559 if (t->isgroup) \ 00000044 08009AE5 LDR R0,[R10, #+8] \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0700000A BEQ ??contactlist_menu_onkey_5 1560 { 1561 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] 1562 RecountMenu(t,1); \ 00000064 0110A0E3 MOV R1,#+1 \ 00000068 0A00A0E1 MOV R0,R10 \ 0000006C 200000EA B ??contactlist_menu_onkey_6 1563 return(-1); 1564 } 1565 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 1566 { 1567 ClearContactT9Key(); \ 00000080 2010A0E3 MOV R1,#+32 \ 00000084 060085E0 ADD R0,R5,R6 \ 00000088 1D0100EF SWI +285 1568 RecountMenu(NULL,1); \ 0000008C 0110A0E3 MOV R1,#+1 \ 00000090 0000A0E3 MOV R0,#+0 \ 00000094 ........ BL RecountMenu 1569 } 1570 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 1576 { 1577 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 1578 { 1579 BackSpaceContactT9(); \ 000000E8 ........ BL BackSpaceContactT9 1580 RecountMenu(NULL,1); \ 000000EC 0110A0E3 MOV R1,#+1 \ 000000F0 0000A0E3 MOV R0,#+0 \ ??contactlist_menu_onkey_6: \ 000000F4 ........ BL RecountMenu 1581 return(-1); \ ??contactlist_menu_onkey_4: \ 000000F8 0000E0E3 MVN R0,#+0 \ 000000FC FE8FBDE8 POP {R1-R11,PC} 1582 } 1583 } 1584 if (msg->gbsmsg->msg==KEY_DOWN) \ ??contactlist_menu_onkey_9: \ 00000100 08009DE5 LDR R0,[SP, #+8] \ 00000104 ........ LDR R7,??DataTable65 ;; `?gbsmsg->submess; \ 00000138 088090E5 LDR R8,[R0, #+8] 1587 if ((key>='0')&&(key<='9')) \ 0000013C 300058E3 CMP R8,#+48 \ 00000140 070000BA BLT ??contactlist_menu_onkey_11 \ 00000144 3A0058E3 CMP R8,#+58 \ 00000148 1F0000AA BGE ??contactlist_menu_onkey_12 1588 { 1589 AddContactT9Key(key); \ 0000014C 0800A0E1 MOV R0,R8 \ 00000150 ........ BL AddContactT9Key 1590 RecountMenu(NULL,1); \ 00000154 0110A0E3 MOV R1,#+1 \ 00000158 0900A0E1 MOV R0,R9 \ 0000015C ........ BL RecountMenu \ 00000160 A00000EA B ??contactlist_menu_onkey_13 1591 return(-1); 1592 } 1593 #ifdef ELKA 1594 if (key==VOL_UP_BUTTON && isVolUpButton) \ ??contactlist_menu_onkey_11: \ 00000164 0D0058E3 CMP R8,#+13 \ 00000168 1700001A BNE ??contactlist_menu_onkey_12 \ 0000016C 94059FE5 LDR R0,??contactlist_menu_onkey_14 ;; isVolUpButton \ 00000170 000090E5 LDR R0,[R0, #+0] \ 00000174 000050E3 CMP R0,#+0 \ 00000178 1300000A BEQ ??contactlist_menu_onkey_12 1595 { 1596 char *small_info=malloc(256); \ 0000017C 400FA0E3 MOV R0,#+256 \ 00000180 140000EF SWI +20 \ 00000184 00B0A0E1 MOV R11,R0 1597 sprintf(small_info, "Время в онлайн:\n" 1598 "%02d:%02d:%02d\n" 1599 "Сервер:\n%s" 1600 ,xstatus_old, minimum_xstatus, maximum, hostbuf2); \ 00000188 0400A0E3 MOV R0,#+4 \ 0000018C 640D80E3 ORR R0,R0,#0x1900 \ 00000190 060080E0 ADD R0,R0,R6 \ 00000194 01002DE9 PUSH {R0} \ 00000198 500196E5 LDR R0,[R6, #+336] \ 0000019C 241087E2 ADD R1,R7,#+36 \ 000001A0 01002DE9 PUSH {R0} \ 000001A4 4C3196E5 LDR R3,[R6, #+332] \ 000001A8 482196E5 LDR R2,[R6, #+328] \ 000001AC 0B00A0E1 MOV R0,R11 \ 000001B0 160000EF SWI +22 1601 ShowMSG(1,(int)small_info); \ 000001B4 0B10A0E1 MOV R1,R11 \ 000001B8 0100A0E3 MOV R0,#+1 \ 000001BC 480100EF SWI +328 1602 mfree(small_info); \ 000001C0 0B00A0E1 MOV R0,R11 \ 000001C4 150000EF SWI +21 \ 000001C8 08D08DE2 ADD SP,SP,#+8 1603 } 1604 1605 if(msg->gbsmsg->submess==VOL_DOWN_BUTTON && isVolDownButton) \ ??contactlist_menu_onkey_12: \ 000001CC 08009DE5 LDR R0,[SP, #+8] \ 000001D0 040090E5 LDR R0,[R0, #+4] \ 000001D4 080090E5 LDR R0,[R0, #+8] \ 000001D8 0E0050E3 CMP R0,#+14 \ 000001DC 1400001A BNE ??contactlist_menu_onkey_15 \ 000001E0 24059FE5 LDR R0,??contactlist_menu_onkey_14+0x4 ;; isVolDownButton \ 000001E4 000090E5 LDR R0,[R0, #+0] \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 1000000A BEQ ??contactlist_menu_onkey_15 1606 { 1607 if(!away_m) \ 000001F0 340196E5 LDR R0,[R6, #+308] \ 000001F4 000050E3 CMP R0,#+0 \ 000001F8 0900001A BNE ??contactlist_menu_onkey_16 1608 { 1609 away_m=!away_m; \ 000001FC 344186E5 STR R4,[R6, #+308] 1610 GBS_StopTimer(&away_tmr); \ 00000200 04009DE5 LDR R0,[SP, #+4] \ 00000204 440100EF SWI +324 1611 msg_away_timer=AUTO_ENGADE; \ 00000208 ........ LDR R0,??DataTable62 ;; AUTO_ENGADE \ 0000020C 000090E5 LDR R0,[R0, #+0] \ 00000210 2C0186E5 STR R0,[R6, #+300] 1612 away_timer(); \ 00000214 ........ BL away_timer 1613 main_d=1; \ 00000218 E04086E5 STR R4,[R6, #+224] 1614 // ShowMSG(1,(int)"Автоответчик включен!"); 1615 InputAwayMsg(); \ 0000021C ........ BL InputAwayMsg \ 00000220 010000EA B ??contactlist_menu_onkey_17 1616 } 1617 else 1618 { 1619 msg_away_timer=0; \ ??contactlist_menu_onkey_16: \ 00000224 2C9186E5 STR R9,[R6, #+300] 1620 away_m=!away_m; \ 00000228 349186E5 STR R9,[R6, #+308] 1621 // ShowMSG(1,(int)"Автоответчик выключен!"); 1622 } 1623 UpdateCLheader(); \ ??contactlist_menu_onkey_17: \ 0000022C ........ BL UpdateCLheader 1624 RefreshGUI(); \ 00000230 960100EF SWI +406 1625 } 1626 #endif 1627 if (key==GREEN_BUTTON) \ ??contactlist_menu_onkey_15: \ 00000234 0B0058E3 CMP R8,#+11 \ 00000238 0400001A BNE ??contactlist_menu_onkey_18 1628 { 1629 #ifdef kluchnik 1630 Show_XTX=!(Show_XTX); 1631 if(Show_XTX) 1632 ShowMSG(1,(int)"Show x-status"); 1633 else 1634 ShowMSG(1,(int)"Show time"); 1635 #else 1636 IsActiveUp=!IsActiveUp; \ 0000023C 200196E5 LDR R0,[R6, #+288] \ 00000240 000050E3 CMP R0,#+0 \ 00000244 0040A013 MOVNE R4,#+0 \ 00000248 204186E5 STR R4,[R6, #+288] 1637 RecountMenu(NULL,1); \ 0000024C FA0000EA B ??contactlist_menu_onkey_19 1638 #endif 1639 return(-1); 1640 } 1641 if (key==LEFT_BUTTON) \ ??contactlist_menu_onkey_18: \ 00000250 3D0058E3 CMP R8,#+61 \ 00000254 1B00000A BEQ ??contactlist_menu_onkey_20 1642 { 1643 while(t=(CLIST *)(t->next)) 1644 { 1645 if (t->isunread) goto doit; 1646 } 1647 t=(CLIST *)(&cltop); 1648 while(t=(CLIST *)(t->next)) 1649 { 1650 if (t->isunread) goto doit; 1651 } 1652 if (t && Is_Show_Groups) {//???? ??????? ? ?????????? ??????? 1653 if (!t->isgroup) 1654 t=FindGroupByID(t->group); 1655 if (t && !t->state) {//?????? ??????? ? ??? ???????? 1656 t->state^=0xFFFF; 1657 goto does; 1658 } 1659 } 1660 doit: 1661 { 1662 CLIST *g=FindGroupByID(t->group); 1663 if (g) 1664 { 1665 if (g->state) 1666 { 1667 g->state=0; 1668 } 1669 } 1670 } 1671 does: 1672 RecountMenu(t,1); 1673 return(-1); 1674 } 1675 if (key=='*') \ 00000258 2A0058E3 CMP R8,#+42 \ 0000025C 3100000A BEQ ??contactlist_menu_onkey_21 1676 { 1677 while(t=(CLIST *)(t->next)) 1678 { 1679 if (t->just_now) goto doit3; 1680 } 1681 t=(CLIST *)(&cltop); 1682 while(t=(CLIST *)(t->next)) 1683 { 1684 if (t->just_now) goto doit3; 1685 } 1686 return(-1); 1687 doit3: 1688 { 1689 CLIST *g=FindGroupByID(t->group); 1690 if (g) 1691 { 1692 if (g->state) 1693 { 1694 g->state=0; 1695 } 1696 } 1697 } 1698 RecountMenu(t,1); 1699 return(-1); 1700 } 1701 extern const int ActionResh; 1702 if (key=='#') \ 00000260 230058E3 CMP R8,#+35 \ 00000264 5200001A BNE ??contactlist_menu_onkey_22 1703 { 1704 if(ActionResh) \ 00000268 A0049FE5 LDR R0,??contactlist_menu_onkey_14+0x8 ;; ActionResh \ 0000026C 000090E5 LDR R0,[R0, #+0] \ 00000270 000050E3 CMP R0,#+0 \ 00000274 3900001A BNE ??contactlist_menu_onkey_23 1705 { 1706 while(t=(CLIST *)(t->next)) 1707 { 1708 if (t->isactive) goto doit4; 1709 } 1710 t=(CLIST *)(&cltop); 1711 while(t=(CLIST *)(t->next)) 1712 { 1713 if (t->isactive) goto doit4; 1714 } 1715 return(-1); 1716 doit4: 1717 { 1718 CLIST *g=FindGroupByID(t->group); 1719 if (g) 1720 { 1721 if (g->state) 1722 { 1723 g->state=0; 1724 } 1725 } 1726 } 1727 RecountMenu(t,1); 1728 } 1729 else 1730 { 1731 if(t->log) \ 00000278 70009AE5 LDR R0,[R10, #+112] \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 0200000A BEQ ??contactlist_menu_onkey_24 1732 { 1733 FreeLOGQ(&t->log); \ 00000284 70008AE2 ADD R0,R10,#+112 \ 00000288 ........ BL FreeLOGQ 1734 t->msg_count=0; \ 0000028C 80908AE5 STR R9,[R10, #+128] 1735 } 1736 if(strlen(ContactT9Key)) \ ??contactlist_menu_onkey_24: \ 00000290 060085E0 ADD R0,R5,R6 \ 00000294 1B0000EF SWI +27 \ 00000298 000050E3 CMP R0,#+0 \ 0000029C 0200000A BEQ ??contactlist_menu_onkey_25 1737 ClearContactT9Key(); \ 000002A0 2010A0E3 MOV R1,#+32 \ 000002A4 060085E0 ADD R0,R5,R6 \ 000002A8 1D0100EF SWI +285 1738 t->isactive=0; \ ??contactlist_menu_onkey_25: \ 000002AC 7C908AE5 STR R9,[R10, #+124] 1739 RecountMenu(NULL,0); \ 000002B0 0010A0E3 MOV R1,#+0 \ 000002B4 0100A0E1 MOV R0,R1 \ 000002B8 3A0000EA B ??contactlist_menu_onkey_26 1740 } \ ??contactlist_menu_onkey_27: \ 000002BC 60009AE5 LDR R0,[R10, #+96] \ 000002C0 000050E3 CMP R0,#+0 \ 000002C4 0900001A BNE ??contactlist_menu_onkey_28 \ ??contactlist_menu_onkey_20: \ 000002C8 00A09AE5 LDR R10,[R10, #+0] \ 000002CC 00005AE3 CMP R10,#+0 \ 000002D0 F9FFFF1A BNE ??contactlist_menu_onkey_27 \ 000002D4 6DAF86E2 ADD R10,R6,#+436 \ ??contactlist_menu_onkey_29: \ 000002D8 00A09AE5 LDR R10,[R10, #+0] \ 000002DC 00005AE3 CMP R10,#+0 \ 000002E0 0200000A BEQ ??contactlist_menu_onkey_28 \ 000002E4 60009AE5 LDR R0,[R10, #+96] \ 000002E8 000050E3 CMP R0,#+0 \ 000002EC F9FFFF0A BEQ ??contactlist_menu_onkey_29 \ ??contactlist_menu_onkey_28: \ 000002F0 10009AE5 LDR R0,[R10, #+16] \ 000002F4 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000002F8 000050E3 CMP R0,#+0 \ 000002FC B415D011 LDRHNE R1,[R0, #+84] \ 00000300 00005113 CMPNE R1,#+0 \ 00000304 B495C011 STRHNE R9,[R0, #+84] \ 00000308 0110A0E3 MOV R1,#+1 \ 0000030C 0A00A0E1 MOV R0,R10 \ 00000310 ........ BL RecountMenu \ 00000314 000064E2 RSB R0,R4,#+0 \ 00000318 FE8FBDE8 POP {R1-R11,PC} \ ??contactlist_menu_onkey_30: \ 0000031C 58009AE5 LDR R0,[R10, #+88] \ 00000320 000050E3 CMP R0,#+0 \ 00000324 F1FFFF1A BNE ??contactlist_menu_onkey_28 \ ??contactlist_menu_onkey_21: \ 00000328 00A09AE5 LDR R10,[R10, #+0] \ 0000032C 00005AE3 CMP R10,#+0 \ 00000330 F9FFFF1A BNE ??contactlist_menu_onkey_30 \ 00000334 6DAF86E2 ADD R10,R6,#+436 \ ??contactlist_menu_onkey_31: \ 00000338 00A09AE5 LDR R10,[R10, #+0] \ 0000033C 00005AE3 CMP R10,#+0 \ 00000340 6CFFFF0A BEQ ??contactlist_menu_onkey_4 \ 00000344 58009AE5 LDR R0,[R10, #+88] \ 00000348 000050E3 CMP R0,#+0 \ 0000034C F9FFFF0A BEQ ??contactlist_menu_onkey_31 \ 00000350 E6FFFFEA B ??contactlist_menu_onkey_28 \ ??contactlist_menu_onkey_32: \ 00000354 7C009AE5 LDR R0,[R10, #+124] \ 00000358 000050E3 CMP R0,#+0 \ 0000035C 0900001A BNE ??contactlist_menu_onkey_33 \ ??contactlist_menu_onkey_23: \ 00000360 00A09AE5 LDR R10,[R10, #+0] \ 00000364 00005AE3 CMP R10,#+0 \ 00000368 F9FFFF1A BNE ??contactlist_menu_onkey_32 \ 0000036C 6DAF86E2 ADD R10,R6,#+436 \ ??contactlist_menu_onkey_34: \ 00000370 00A09AE5 LDR R10,[R10, #+0] \ 00000374 00005AE3 CMP R10,#+0 \ 00000378 5EFFFF0A BEQ ??contactlist_menu_onkey_4 \ 0000037C 7C009AE5 LDR R0,[R10, #+124] \ 00000380 000050E3 CMP R0,#+0 \ 00000384 F9FFFF0A BEQ ??contactlist_menu_onkey_34 \ ??contactlist_menu_onkey_33: \ 00000388 10009AE5 LDR R0,[R10, #+16] \ 0000038C ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000390 000050E3 CMP R0,#+0 \ 00000394 B415D011 LDRHNE R1,[R0, #+84] \ 00000398 00005113 CMPNE R1,#+0 \ 0000039C B495C011 STRHNE R9,[R0, #+84] \ 000003A0 0110A0E3 MOV R1,#+1 \ 000003A4 0A00A0E1 MOV R0,R10 \ ??contactlist_menu_onkey_26: \ 000003A8 ........ BL RecountMenu \ ??contactlist_menu_onkey_2: \ 000003AC 0000E0E3 MVN R0,#+0 \ 000003B0 FE8FBDE8 POP {R1-R11,PC} 1741 return(-1); 1742 } 1743 if (key==RIGHT_BUTTON) \ ??contactlist_menu_onkey_22: \ 000003B4 3E0058E3 CMP R8,#+62 \ 000003B8 0C00001A BNE ??contactlist_menu_onkey_35 1744 { 1745 //Послать запрос текста XStatus 1746 if (t) \ 000003BC 00005AE3 CMP R10,#+0 \ 000003C0 0E00000A BEQ ??contactlist_menu_onkey_10 1747 { 1748 if (!t->isgroup) \ 000003C4 08009AE5 LDR R0,[R10, #+8] \ 000003C8 000050E3 CMP R0,#+0 \ 000003CC 0B00001A BNE ??contactlist_menu_onkey_10 1749 { 1750 FreeXText(t); \ 000003D0 0A00A0E1 MOV R0,R10 \ 000003D4 ........ _BLF FreeXText,??FreeXText??rA 1751 t->req_xtext=0; \ 000003D8 8C908AE5 STR R9,[R10, #+140] 1752 RequestXText(t->uin); \ 000003DC 0C009AE5 LDR R0,[R10, #+12] \ 000003E0 ........ BL RequestXText 1753 RefreshGUI(); \ 000003E4 960100EF SWI +406 1754 return(-1); \ ??contactlist_menu_onkey_13: \ 000003E8 000064E2 RSB R0,R4,#+0 \ 000003EC FE8FBDE8 POP {R1-R11,PC} 1755 } 1756 } 1757 } 1758 1759 if (key==0x19) \ ??contactlist_menu_onkey_35: \ 000003F0 190058E3 CMP R8,#+25 \ 000003F4 0100001A BNE ??contactlist_menu_onkey_10 1760 { 1761 CreateScreenSelectGUI(); \ 000003F8 ........ _BLF CreateScreenSelectGUI,??CreateScreenSelectGUI??rA 1762 // GeneralFuncF1(1); 1763 return(-1); \ 000003FC F9FFFFEA B ??contactlist_menu_onkey_13 1764 } 1765 } 1766 if (msg->gbsmsg->msg==LONG_PRESS) \ ??contactlist_menu_onkey_10: \ 00000400 08009DE5 LDR R0,[SP, #+8] \ 00000404 652F84E3 ORR R2,R4,#0x194 \ 00000408 040090E5 LDR R0,[R0, #+4] \ 0000040C 041090E5 LDR R1,[R0, #+4] \ 00000410 020051E1 CMP R1,R2 \ 00000414 B900001A BNE ??contactlist_menu_onkey_36 1767 { 1768 if (msg->gbsmsg->submess=='#') \ 00000418 081090E5 LDR R1,[R0, #+8] \ 0000041C 0980A0E3 MOV R8,#+9 \ 00000420 428C88E3 ORR R8,R8,#0x4200 \ 00000424 B0B0A0E3 MOV R11,#+176 \ 00000428 DEBC8BE3 ORR R11,R11,#0xDE00 \ 0000042C 230051E3 CMP R1,#+35 \ 00000430 1600001A BNE ??contactlist_menu_onkey_37 1769 { 1770 // if(isLongPressResh==1) 1771 // { 1772 ClearContactT9Key(); \ 00000434 2010A0E3 MOV R1,#+32 \ 00000438 060085E0 ADD R0,R5,R6 \ 0000043C 1D0100EF SWI +285 1773 RecountMenu(NULL,1); \ 00000440 0110A0E3 MOV R1,#+1 \ 00000444 0900A0E1 MOV R0,R9 \ 00000448 ........ BL RecountMenu 1774 gipc.name_to=ipc_xtask_name; \ 0000044C EE0F85E2 ADD R0,R5,#+952 \ 00000450 070080E0 ADD R0,R0,R7 \ 00000454 BC0086E5 STR R0,[R6, #+188] 1775 gipc.name_from=ipc_my_name; \ 00000458 E60F85E2 ADD R0,R5,#+920 \ 0000045C 070080E0 ADD R0,R0,R7 \ 00000460 C00086E5 STR R0,[R6, #+192] 1776 gipc.data=0; \ 00000464 C49086E5 STR R9,[R6, #+196] 1777 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 00000468 BC3086E2 ADD R3,R6,#+188 \ 0000046C 0420A0E1 MOV R2,R4 \ 00000470 0B10A0E1 MOV R1,R11 \ 00000474 0800A0E1 MOV R0,R8 \ 00000478 000100EF SWI +256 1778 if (IsUnlocked()) \ 0000047C 430000EF SWI +67 \ 00000480 000050E3 CMP R0,#+0 \ 00000484 1BFFFF0A BEQ ??contactlist_menu_onkey_4 1779 { 1780 KbdLock(); \ 00000488 A90000EF SWI +169 \ 0000048C C6FFFFEA B ??contactlist_menu_onkey_2 1781 } 1782 // } 1783 1784 // CreateScreenSelectGUI(); 1785 return(-1); 1786 } 1787 if (msg->gbsmsg->submess=='*') \ ??contactlist_menu_onkey_37: \ 00000490 2A0051E3 CMP R1,#+42 \ 00000494 1200001A BNE ??contactlist_menu_onkey_38 1788 { 1789 ClearContactT9Key(); \ 00000498 2010A0E3 MOV R1,#+32 \ 0000049C 060085E0 ADD R0,R5,R6 \ 000004A0 1D0100EF SWI +285 1790 RecountMenu(NULL,1); \ 000004A4 0110A0E3 MOV R1,#+1 \ 000004A8 0900A0E1 MOV R0,R9 \ 000004AC ........ BL RecountMenu 1791 silenthide=1; \ 000004B0 5C4186E5 STR R4,[R6, #+348] 1792 gipc.name_to=ipc_xtask_name; \ 000004B4 EE0F85E2 ADD R0,R5,#+952 \ 000004B8 070080E0 ADD R0,R0,R7 \ 000004BC BC0086E5 STR R0,[R6, #+188] 1793 gipc.name_from=ipc_my_name; \ 000004C0 E60F85E2 ADD R0,R5,#+920 \ 000004C4 070080E0 ADD R0,R0,R7 \ 000004C8 C00086E5 STR R0,[R6, #+192] 1794 gipc.data=0; \ 000004CC C49086E5 STR R9,[R6, #+196] 1795 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); \ 000004D0 BC3086E2 ADD R3,R6,#+188 \ 000004D4 0420A0E1 MOV R2,R4 \ 000004D8 0B10A0E1 MOV R1,R11 \ 000004DC 0800A0E1 MOV R0,R8 \ 000004E0 000100EF SWI +256 1796 } 1797 1798 //-------------------- LONG PRESS ACTION ON CL --------------------// 1799 1800 switch(msg->gbsmsg->submess) \ ??contactlist_menu_onkey_38: \ 000004E4 08009DE5 LDR R0,[SP, #+8] \ 000004E8 24829FE5 LDR R8,??contactlist_menu_onkey_14+0xC ;; WriteDefSettings \ 000004EC 040090E5 LDR R0,[R0, #+4] \ 000004F0 080090E5 LDR R0,[R0, #+8] \ 000004F4 310040E2 SUB R0,R0,#+49 \ 000004F8 080050E3 CMP R0,#+8 \ 000004FC 7100008A BHI ??contactlist_menu_onkey_39 \ 00000500 011F8FE2 ADR R1,??contactlist_menu_onkey_0 \ 00000504 0010D1E7 LDRB R1,[R1, R0] \ 00000508 01F18FE0 ADD PC,PC,R1, LSL #+2 \ ??contactlist_menu_onkey_0: \ 0000050C 020F1D29 DC8 +2,+15,+29,+41 \ 00000510 37506E6E DC8 +55,+80,+110,+110 \ 00000514 60000000 DC8 +96,+0,+0,+0 1801 { 1802 case '1': 1803 Is_Sounds_Enabled=!(Is_Sounds_Enabled); \ ??contactlist_menu_onkey_40: \ 00000518 680196E5 LDR R0,[R6, #+360] \ 0000051C 000050E3 CMP R0,#+0 \ 00000520 0040A013 MOVNE R4,#+0 \ 00000524 684186E5 STR R4,[R6, #+360] 1804 if(Is_Sounds_Enabled) \ 00000528 000054E3 CMP R4,#+0 1805 ShowMSG(1,(int)"Sound 0n"); \ 0000052C 50108712 ADDNE R1,R7,#+80 1806 else 1807 ShowMSG(1,(int)"Sound Off"); \ 00000530 5C108702 ADDEQ R1,R7,#+92 \ 00000534 0100A0E3 MOV R0,#+1 \ 00000538 480100EF SWI +328 1808 SUBPROC((void*)WriteDefSettings); \ 0000053C 0800A0E1 MOV R0,R8 \ 00000540 710100EF SWI +369 1809 RefreshGUI(); \ 00000544 960100EF SWI +406 \ 00000548 5E0000EA B ??contactlist_menu_onkey_39 1810 break; 1811 case '2': 1812 Is_Vibra_Enabled=!(Is_Vibra_Enabled); \ ??contactlist_menu_onkey_41: \ 0000054C 640196E5 LDR R0,[R6, #+356] \ 00000550 000050E3 CMP R0,#+0 \ 00000554 0040A013 MOVNE R4,#+0 \ 00000558 644186E5 STR R4,[R6, #+356] 1813 SUBPROC((void*)WriteDefSettings); \ 0000055C 0800A0E1 MOV R0,R8 \ 00000560 710100EF SWI +369 1814 RefreshGUI(); \ 00000564 960100EF SWI +406 1815 if(Is_Vibra_Enabled) \ 00000568 640196E5 LDR R0,[R6, #+356] \ 0000056C 000050E3 CMP R0,#+0 \ 00000570 74108702 ADDEQ R1,R7,#+116 1816 ShowMSG(1,(int)"Vibra On"); \ 00000574 68108712 ADDNE R1,R7,#+104 \ ??contactlist_menu_onkey_42: \ 00000578 0100A0E3 MOV R0,#+1 \ ??contactlist_menu_onkey_43: \ 0000057C 480100EF SWI +328 \ 00000580 500000EA B ??contactlist_menu_onkey_39 1817 else 1818 ShowMSG(1,(int)"Vibra Off"); 1819 break; 1820 case '3': 1821 if(CurrentPrivateStatus!=1) \ ??contactlist_menu_onkey_44: \ 00000584 780196E5 LDR R0,[R6, #+376] \ 00000588 010050E3 CMP R0,#+1 \ 0000058C 0400000A BEQ ??contactlist_menu_onkey_45 1822 { 1823 SetPrivateStatus(1);//Инвиз \ 00000590 0100A0E3 MOV R0,#+1 \ 00000594 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1824 ShowMSG(1,(int)"Инвиз включен"); \ 00000598 801087E2 ADD R1,R7,#+128 \ 0000059C 0400A0E1 MOV R0,R4 \ ??contactlist_menu_onkey_46: \ 000005A0 F5FFFFEA B ??contactlist_menu_onkey_43 1825 } 1826 else 1827 { 1828 SetPrivateStatus(3);//не инвиз:) \ ??contactlist_menu_onkey_45: \ 000005A4 0300A0E3 MOV R0,#+3 \ 000005A8 ........ _BLF SetPrivateStatus,??SetPrivateStatus??rA 1829 ShowMSG(1,(int)"Инвиз выключен"); \ 000005AC 901087E2 ADD R1,R7,#+144 \ 000005B0 F0FFFFEA B ??contactlist_menu_onkey_42 1830 } 1831 break; 1832 case '4': 1833 Is_Double_Vibra_On=!(Is_Double_Vibra_On); \ ??contactlist_menu_onkey_47: \ 000005B4 0C0196E5 LDR R0,[R6, #+268] \ 000005B8 000050E3 CMP R0,#+0 \ 000005BC 0040A013 MOVNE R4,#+0 \ 000005C0 0C4186E5 STR R4,[R6, #+268] 1834 SUBPROC((void*)WriteDefSettings); \ 000005C4 0800A0E1 MOV R0,R8 \ 000005C8 710100EF SWI +369 1835 RefreshGUI(); \ 000005CC 960100EF SWI +406 1836 if(Is_Double_Vibra_On) \ 000005D0 0C0196E5 LDR R0,[R6, #+268] \ 000005D4 000050E3 CMP R0,#+0 1837 ShowMSG(1,(int)"Vibra rem On"); \ 000005D8 A0108712 ADDNE R1,R7,#+160 \ 000005DC 0100A013 MOVNE R0,#+1 \ 000005E0 E5FFFF1A BNE ??contactlist_menu_onkey_43 1838 else 1839 ShowMSG(1,(int)"Vibra rem Off"); \ 000005E4 B01087E2 ADD R1,R7,#+176 \ 000005E8 E2FFFFEA B ??contactlist_menu_onkey_42 1840 break; 1841 case '5': 1842 { 1843 CLIST *cl; 1844 cl=(CLIST *)cltop; \ ??contactlist_menu_onkey_48: \ 000005EC B44196E5 LDR R4,[R6, #+436] \ 000005F0 000054E3 CMP R4,#+0 \ 000005F4 0800000A BEQ ??contactlist_menu_onkey_49 1845 while(cl) 1846 { 1847 if(cl->log) \ ??contactlist_menu_onkey_50: \ 000005F8 700094E5 LDR R0,[R4, #+112] \ 000005FC 000050E3 CMP R0,#+0 \ 00000600 0200000A BEQ ??contactlist_menu_onkey_51 1848 { 1849 FreeLOGQ(&cl->log); \ 00000604 700084E2 ADD R0,R4,#+112 \ 00000608 ........ BL FreeLOGQ 1850 cl->msg_count=0; \ 0000060C 809084E5 STR R9,[R4, #+128] 1851 } 1852 cl=cl->next; \ ??contactlist_menu_onkey_51: \ 00000610 004094E5 LDR R4,[R4, #+0] 1853 } \ 00000614 000054E3 CMP R4,#+0 \ 00000618 F6FFFF1A BNE ??contactlist_menu_onkey_50 1854 1855 if(strlen(ContactT9Key)) \ ??contactlist_menu_onkey_49: \ 0000061C 060085E0 ADD R0,R5,R6 \ 00000620 1B0000EF SWI +27 \ 00000624 000050E3 CMP R0,#+0 \ 00000628 0200000A BEQ ??contactlist_menu_onkey_52 1856 ClearContactT9Key(); \ 0000062C 2010A0E3 MOV R1,#+32 \ 00000630 060085E0 ADD R0,R5,R6 \ 00000634 1D0100EF SWI +285 1857 t->isactive=0; \ ??contactlist_menu_onkey_52: \ 00000638 7C908AE5 STR R9,[R10, #+124] 1858 RecountMenu(NULL,1); \ ??contactlist_menu_onkey_19: \ 0000063C 0110A0E3 MOV R1,#+1 \ 00000640 0000A0E3 MOV R0,#+0 \ 00000644 ........ BL RecountMenu 1859 return (-1); \ 00000648 0900E0E1 MVN R0,R9 \ 0000064C FE8FBDE8 POP {R1-R11,PC} 1860 } 1861 case '6': 1862 if(!away_m) \ ??contactlist_menu_onkey_53: \ 00000650 340196E5 LDR R0,[R6, #+308] \ 00000654 000050E3 CMP R0,#+0 \ 00000658 0800001A BNE ??contactlist_menu_onkey_54 1863 { 1864 away_m=!away_m; \ 0000065C 344186E5 STR R4,[R6, #+308] 1865 GBS_StopTimer(&away_tmr); \ 00000660 04009DE5 LDR R0,[SP, #+4] \ 00000664 440100EF SWI +324 1866 msg_away_timer=AUTO_ENGADE; \ 00000668 ........ LDR R0,??DataTable62 ;; AUTO_ENGADE \ 0000066C 000090E5 LDR R0,[R0, #+0] \ 00000670 2C0186E5 STR R0,[R6, #+300] 1867 away_timer(); \ 00000674 ........ BL away_timer 1868 // ShowMSG(1,(int)"Автоответчик включен!"); 1869 InputAwayMsg(); \ 00000678 ........ BL InputAwayMsg \ 0000067C 010000EA B ??contactlist_menu_onkey_55 1870 } 1871 else 1872 { 1873 msg_away_timer=0; \ ??contactlist_menu_onkey_54: \ 00000680 2C9186E5 STR R9,[R6, #+300] 1874 away_m=!away_m; \ 00000684 349186E5 STR R9,[R6, #+308] 1875 // ShowMSG(1,(int)"Автоответчик выключен!"); 1876 } 1877 UpdateCLheader(); \ ??contactlist_menu_onkey_55: \ 00000688 ........ BL UpdateCLheader \ 0000068C 0D0000EA B ??contactlist_menu_onkey_39 1878 break; 1879 case '9': 1880 { 1881 extern const char *successed_config_filename; 1882 WSHDR *ws; 1883 ws=AllocWS(150); \ ??contactlist_menu_onkey_56: \ 00000690 9600A0E3 MOV R0,#+150 \ 00000694 250100EF SWI +293 \ 00000698 0040A0E1 MOV R4,R0 1884 str_2ws(ws,successed_config_filename,128); \ 0000069C ........ LDR R0,??DataTable63 ;; successed_config_filename \ 000006A0 8020A0E3 MOV R2,#+128 \ 000006A4 001090E5 LDR R1,[R0, #+0] \ 000006A8 0400A0E1 MOV R0,R4 \ 000006AC 6C0100EF SWI +364 1885 ExecuteFile(ws,0,0); \ 000006B0 0020A0E3 MOV R2,#+0 \ 000006B4 0210A0E1 MOV R1,R2 \ 000006B8 0400A0E1 MOV R0,R4 \ 000006BC 940000EF SWI +148 1886 FreeWS(ws); \ 000006C0 0400A0E1 MOV R0,R4 \ 000006C4 290100EF SWI +297 1887 } 1888 } 1889 1890 int key=msg->gbsmsg->submess; \ ??contactlist_menu_onkey_39: \ 000006C8 08009DE5 LDR R0,[SP, #+8] \ 000006CC 040090E5 LDR R0,[R0, #+4] \ 000006D0 080090E5 LDR R0,[R0, #+8] 1891 if ((key>='0')&&(key<='9')) \ 000006D4 300050E3 CMP R0,#+48 \ 000006D8 080000BA BLT ??contactlist_menu_onkey_36 \ 000006DC 3A0050E3 CMP R0,#+58 \ 000006E0 060000AA BGE ??contactlist_menu_onkey_36 1892 { 1893 ClearContactT9Key(); \ 000006E4 2010A0E3 MOV R1,#+32 \ 000006E8 060085E0 ADD R0,R5,R6 \ 000006EC 1D0100EF SWI +285 1894 UpdateCLheader(); \ 000006F0 ........ BL UpdateCLheader 1895 RecountMenu(NULL,1); \ 000006F4 0110A0E3 MOV R1,#+1 \ 000006F8 0000A0E3 MOV R0,#+0 \ 000006FC ........ BL RecountMenu 1896 } 1897 } 1898 return(0); \ ??contactlist_menu_onkey_36: \ 00000700 0000A0E3 MOV R0,#+0 \ 00000704 FE8FBDE8 POP {R1-R11,PC} ;; return \ ??contactlist_menu_onkey_14: \ 00000708 ........ DC32 isVolUpButton \ 0000070C ........ DC32 isVolDownButton \ 00000710 ........ DC32 ActionResh \ 00000714 ........ DC32 WriteDefSettings 1899 } 1900 \ In segment CODE, align 4, keep-with-next 1901 void GetOnTotalContact(int group_id,int *_onlinetotal) 1902 { 1903 CLIST *t; 1904 t=(CLIST *)&cltop; \ GetOnTotalContact: \ 00000000 ........ LDR R2,??DataTable64 ;; S_ICONS + 436 \ 00000004 30002DE9 PUSH {R4,R5} 1905 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 1906 while((t=t->next)) 1907 { 1908 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 1909 { 1910 total++; 1911 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 1912 } 1913 } \ ??GetOnTotalContact_0: \ 00000040 002092E5 LDR R2,[R2, #+0] \ 00000044 000052E3 CMP R2,#+0 \ 00000048 F3FFFF1A BNE ??GetOnTotalContact_1 1914 _onlinetotal[0]=online; \ 0000004C 003081E5 STR R3,[R1, #+0] 1915 _onlinetotal[1]=total; \ 00000050 04C081E5 STR R12,[R1, #+4] 1916 } \ 00000054 3000BDE8 POP {R4,R5} \ 00000058 1EFF2FE1 BX LR ;; return 1917 1918 \ In segment CODE, align 4, keep-with-next 1919 void contactlist_menu_iconhndl(void *data, int curitem, void *unk) 1920 { \ contactlist_menu_iconhndl: \ 00000000 F24F2DE9 PUSH {R1,R4-R11,LR} \ 00000004 9CDF4DE2 SUB SP,SP,#+624 1921 CLIST *t; 1922 #ifdef USE_MLMENU 1923 void *item=AllocMLMenuItem(data); 1924 #else 1925 void *item=AllocMenuItem(data); 1926 #endif 1927 int icon; 1928 1929 WSHDR *ws2; 1930 #ifdef USE_MLMENU 1931 WSHDR *ws4; 1932 #endif 1933 WSHDR ws1loc, *ws1; 1934 unsigned short num[128]; 1935 ws1=CreateLocalWS(&ws1loc,num,128); 1936 #ifdef USE_MLMENU 1937 WSHDR ws3loc, *ws3; 1938 unsigned short num3[128]; 1939 ws3=CreateLocalWS(&ws3loc,num3,128); 1940 char s[64]; 1941 #endif 1942 t=FindContactByN(curitem); \ 00000008 ........ LDR R10,??DataTable65 ;; `?just_now) \ 00000060 580098E5 LDR R0,[R8, #+88] \ 00000064 000050E3 CMP R0,#+0 \ 00000068 0C00000A BEQ ??contactlist_menu_iconhndl_2 1949 { 1950 char *test=malloc(64); \ 0000006C 4000A0E3 MOV R0,#+64 \ 00000070 140000EF SWI +20 \ 00000074 00B0A0E1 MOV R11,R0 1951 sprintf(test, ">> %s <<", t->name); \ 00000078 142088E2 ADD R2,R8,#+20 \ 0000007C C0108AE2 ADD R1,R10,#+192 \ 00000080 160000EF SWI +22 1952 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 1953 mfree(test); \ 00000094 0B00A0E1 MOV R0,R11 \ 00000098 150000EF SWI +21 \ 0000009C 030000EA B ??contactlist_menu_iconhndl_3 1954 } 1955 else 1956 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 1957 if (t->just_now) \ ??contactlist_menu_iconhndl_3: \ 000000B0 580098E5 LDR R0,[R8, #+88] \ 000000B4 08B0A0E3 MOV R11,#+8 \ 000000B8 E0BC8BE3 ORR R11,R11,#0xE000 \ 000000BC 000050E3 CMP R0,#+0 1958 { 1959 wsInsertChar(ws1,0x0004,1); \ 000000C0 0120A013 MOVNE R2,#+1 \ 000000C4 0410A013 MOVNE R1,#+4 \ 000000C8 0400001A BNE ??contactlist_menu_iconhndl_4 1960 wsInsertChar(ws1,0xE008,1); 1961 } 1962 else 1963 if (t->isactive) \ 000000CC 7C0098E5 LDR R0,[R8, #+124] \ 000000D0 000050E3 CMP R0,#+0 \ 000000D4 0700000A BEQ ??contactlist_menu_iconhndl_5 1964 { 1965 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 1966 wsInsertChar(ws1,0xE008,1); \ 000000E8 0120A0E3 MOV R2,#+1 \ 000000EC 0B10A0E1 MOV R1,R11 \ 000000F0 0600A0E1 MOV R0,R6 \ 000000F4 1D0000EF SWI +29 1967 } 1968 #ifdef USE_MLMENU 1969 if ((t->xtext && t->xtext[0]!=0) && (Show_XTX)) \ ??contactlist_menu_iconhndl_5: \ 000000F8 840098E5 LDR R0,[R8, #+132] \ 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 + 320 \ 00000114 000090E5 LDR R0,[R0, #+0] \ 00000118 000050E3 CMP R0,#+0 \ 0000011C 0F00000A BEQ ??contactlist_menu_iconhndl_6 1970 { 1971 int i; 1972 zeromem(s,64); \ 00000120 4010A0E3 MOV R1,#+64 \ 00000124 820F8DE2 ADD R0,SP,#+520 \ 00000128 1D0100EF SWI +285 1973 i=t->xtext[0]; \ 0000012C 840098E5 LDR R0,[R8, #+132] \ ??contactlist_menu_iconhndl_8: \ 00000130 0020D0E5 LDRB R2,[R0, #+0] 1974 if (i>63) i=63; 1975 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 1976 wsprintf(ws3,"%c%t",0xE012,s); \ 00000148 823F8DE2 ADD R3,SP,#+520 \ 0000014C 0B20A0E1 MOV R2,R11 \ 00000150 CC108AE2 ADD R1,R10,#+204 \ 00000154 0700A0E1 MOV R0,R7 \ 00000158 240100EF SWI +292 \ 0000015C 0D0000EA B ??contactlist_menu_iconhndl_9 1977 } 1978 else 1979 if(t->xtext2 && t->xtext2[0]!=0) \ ??contactlist_menu_iconhndl_6: \ 00000160 880098E5 LDR R0,[R8, #+136] \ 00000164 000050E3 CMP R0,#+0 \ 00000168 0000D015 LDRBNE R0,[R0, #+0] \ 0000016C 00005013 CMPNE R0,#+0 \ 00000170 0400000A BEQ ??contactlist_menu_iconhndl_10 1980 { 1981 int i; 1982 zeromem(s,64); \ 00000174 4010A0E3 MOV R1,#+64 \ 00000178 820F8DE2 ADD R0,SP,#+520 \ 0000017C 1D0100EF SWI +285 1983 i=t->xtext2[0]; \ 00000180 880098E5 LDR R0,[R8, #+136] \ 00000184 E9FFFFEA B ??contactlist_menu_iconhndl_8 1984 if (i>63) i=63; 1985 strncpy(s,t->xtext2+1,i); 1986 wsprintf(ws3,"%c%t",0xE012,s); 1987 } 1988 else 1989 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 1990 if ((t->xstatexstate)) \ ??contactlist_menu_iconhndl_9: \ 00000198 B605D8E1 LDRH R0,[R8, #+86] \ 0000019C ........ LDR R2,??DataTable66 ;; 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 1991 { 1992 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 1993 } 1994 #endif 1995 } 1996 else 1997 { 1998 int onlinetotal[2]; 1999 GetOnTotalContact(t->group,onlinetotal); \ ??contactlist_menu_iconhndl_1: \ 000001D0 100098E5 LDR R0,[R8, #+16] \ 000001D4 0D10A0E1 MOV R1,SP \ 000001D8 ........ BL GetOnTotalContact 2000 #ifdef USE_MLMENU 2001 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 2002 wsprintf(ws3,"(%d/%d)",onlinetotal[0],onlinetotal[1]); \ 000001EC 04309DE5 LDR R3,[SP, #+4] \ 000001F0 00209DE5 LDR R2,[SP, #+0] \ 000001F4 D4108AE2 ADD R1,R10,#+212 \ 000001F8 0700A0E1 MOV R0,R7 \ 000001FC 240100EF SWI +292 2003 #else 2004 wsprintf(ws1,"%t%c%c(%d/%d)",t->name,0xE01D,0xE012,onlinetotal[0],onlinetotal[1]); 2005 #endif 2006 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 2007 } 2008 } 2009 else 2010 { 2011 wsprintf(ws1, LG_CLERROR); \ ??contactlist_menu_iconhndl_0: \ 00000214 DC108AE2 ADD R1,R10,#+220 \ 00000218 0600A0E1 MOV R0,R6 \ 0000021C 240100EF SWI +292 2012 } 2013 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 2014 wstrcpy(ws2,ws1); \ 00000234 0610A0E1 MOV R1,R6 \ 00000238 1F0100EF SWI +287 2015 2016 SetMenuItemIconArray(data, item, S_ICONS+icon); \ 0000023C ........ LDR R0,??DataTable67 ;; S_ICONS \ 00000240 0510A0E1 MOV R1,R5 \ 00000244 092180E0 ADD R2,R0,R9, LSL #+2 \ 00000248 0400A0E1 MOV R0,R4 \ 0000024C 990100EF SWI +409 2017 #ifdef USE_MLMENU 2018 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 2019 wstrcpy(ws4,ws3); \ 00000264 0710A0E1 MOV R1,R7 \ 00000268 1F0100EF SWI +287 2020 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 2021 #else 2022 SetMenuItemText(data, item, ws2, curitem); 2023 #endif 2024 } \ 00000288 9EDF8DE2 ADD SP,SP,#+632 \ 0000028C F08FBDE8 POP {R4-R11,PC} ;; return \ ??contactlist_menu_iconhndl_7: \ 00000290 ........ DC32 S_ICONS + 320 2025 2026 //=============================================================================================== 2027 2028 int DNR_ID=0; 2029 int DNR_TRIES=3; 2030 2031 extern const char NATICQ_HOST[]; 2032 extern const unsigned int NATICQ_PORT; 2033 extern const unsigned int RECONNECT_TIME; //2058 2034 char hostname[128]; //2058 che toka 128? :) 2035 2036 int host_counter = 0; 2037 2038 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2039 const char *GetHost(int cnt, const char *str, char *buf) 2040 { 2041 const char *tmp = str, *begin, *end; \ GetHost: \ 00000000 0130A0E1 MOV R3,R1 2042 if(cnt) \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0100001A BNE ??GetHost_0 \ 0000000C 180000EA B ??GetHost_1 2043 { 2044 for(;cnt;cnt--) 2045 { 2046 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 2047 if(!*str) str = tmp; \ 00000030 00005CE3 CMP R12,#+0 \ 00000034 0200001A BNE ??GetHost_3 \ 00000038 0310A0E1 MOV R1,R3 \ 0000003C 000000EA B ??GetHost_3 2048 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 2049 if(!*str) str = tmp; \ ??GetHost_5: \ 00000064 00005CE3 CMP R12,#+0 \ 00000068 0310A001 MOVEQ R1,R3 2050 } \ 0000006C 010050E2 SUBS R0,R0,#+1 \ 00000070 E7FFFF1A BNE ??GetHost_0 2051 } 2052 tmp = buf; \ ??GetHost_1: \ 00000074 0200A0E1 MOV R0,R2 2053 begin = str; \ 00000078 0130A0E1 MOV R3,R1 \ 0000007C 000000EA B ??GetHost_6 2054 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 2055 end = str; 2056 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 2068 } 2069 } 2070 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2071 int GetPort(int cnt, const char *str) 2072 { \ GetPort: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 08D04DE2 SUB SP,SP,#+8 2073 const char *tmp = str; \ 00000008 01C0A0E1 MOV R12,R1 2074 char numbuf[6], numcnt = 0; \ 0000000C 0020A0E3 MOV R2,#+0 \ 00000010 0030A0E3 MOV R3,#+0 2075 if(cnt) \ 00000014 000050E3 CMP R0,#+0 \ 00000018 0100001A BNE ??GetPort_0 \ 0000001C 180000EA B ??GetPort_1 2076 { 2077 for(;cnt;cnt--) 2078 { 2079 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 2080 if(!*str) str = tmp; \ 00000040 000054E3 CMP R4,#+0 \ 00000044 0200001A BNE ??GetPort_3 \ 00000048 0C10A0E1 MOV R1,R12 \ 0000004C 000000EA B ??GetPort_3 2081 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 2082 if(!*str) str = tmp; \ ??GetPort_5: \ 00000074 000054E3 CMP R4,#+0 \ 00000078 0C10A001 MOVEQ R1,R12 2083 } \ 0000007C 010050E2 SUBS R0,R0,#+1 \ 00000080 E7FFFF1A BNE ??GetPort_0 2084 } 2085 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 2086 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} 2087 str++; 2088 numbuf[5] = 0; \ 000000BC 0520CDE5 STRB R2,[SP, #+5] \ 000000C0 030000EA B ??GetPort_7 2089 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 2090 numbuf[numcnt] = 0; //2058 \ ??GetPort_9: \ 00000100 0020C0E5 STRB R2,[R0, #+0] 2091 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 2092 2093 } 2094 //--------------------------------------------------------------------------- \ In segment CODE, align 4, keep-with-next 2095 int GetHostsCount(const char *str) 2096 { 2097 char cnt = 1; \ GetHostsCount: \ 00000000 0110A0E3 MOV R1,#+1 \ 00000004 000000EA B ??GetHostsCount_0 2098 for(;cnt;cnt++) 2099 { 2100 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 2101 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 2102 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 2103 if(!*str) return cnt; \ ??GetHostsCount_5: \ 0000005C 000052E3 CMP R2,#+0 \ 00000060 F2FFFF0A BEQ ??GetHostsCount_3 2104 } \ 00000064 011081E2 ADD R1,R1,#+1 \ 00000068 FF1011E2 ANDS R1,R1,#0xFF \ 0000006C E6FFFF1A BNE ??GetHostsCount_0 2105 return 0; \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 1EFF2FE1 BX LR ;; return 2106 } 2107 //--------------------------------------------------------------------------- 2108 \ In segment CODE, align 4, keep-with-next 2109 void create_connect(void) 2110 { \ create_connect: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2111 // static int host_counter = 0; 2112 char hostbuf[128], buf[128]; 2113 int hostport; 2114 int ***p_res=NULL; 2115 void do_reconnect(void); 2116 SOCK_ADDR sa; 2117 //Устанавливаем соединение 2118 connect_state = 0; \ 00000004 ........ LDR R5,??DataTable82 ;; S_ICONS 2119 int err; 2120 unsigned int ip; 2121 GBS_DelTimer(&reconnect_tmr); 2122 if (!IsGPRSEnabled()) \ 00000008 D0829FE5 LDR R8,??create_connect_0+0x4 ;; `?` \ 0000000C 45DF4DE2 SUB SP,SP,#+276 \ 00000010 0040A0E3 MOV R4,#+0 \ 00000014 00408DE5 STR R4,[SP, #+0] \ 00000018 8C4185E5 STR R4,[R5, #+396] \ 0000001C 5400A0E3 MOV R0,#+84 \ 00000020 600D80E3 ORR R0,R0,#0x1800 \ 00000024 056080E0 ADD R6,R0,R5 \ 00000028 0600A0E1 MOV R0,R6 \ 0000002C 8C0100EF SWI +396 \ 00000030 3400A0E3 MOV R0,#+52 \ 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 2123 { 2124 is_gprs_online=0; \ 00000048 AC4185E5 STR R4,[R5, #+428] 2125 strcpy(logmsg,LG_GRWAITFORGPRS); \ 0000004C 0810A0E1 MOV R1,R8 \ 00000050 0700A0E1 MOV R0,R7 \ 00000054 1A0000EF SWI +26 2126 SMART_REDRAW(); \ 00000058 800000EA B ??create_connect_2 2127 return; 2128 } 2129 DNR_ID=0; 2130 *socklasterr()=0; 2131 if(host_counter > GetHostsCount(NATICQ_HOST)-1) host_counter = 0; //2058 \ ??create_connect_1: \ 0000005C 80929FE5 LDR R9,??create_connect_0+0x8 ;; NATICQ_HOST 2132 GetHost(host_counter, NATICQ_HOST, hostbuf); 2133 hostport = GetPort(host_counter, NATICQ_HOST); 2134 host_counter++; 2135 2136 sprintf(hostname, "Connect to %s:%d", hostbuf, hostport); //2058 - stavim hostname, izbavlyaemsya ot buf 2137 strcpy(hostbuf2, hostbuf); //vyvod host v get_online_time 2138 strcpy(logmsg,buf); 2139 SMART_REDRAW(); 2140 2141 ip=str2ip(hostbuf); 2142 if (ip!=0xFFFFFFFF) \ 00000060 ........ LDR R10,??DataTable69 ;; do_reconnect \ 00000064 D44185E5 STR R4,[R5, #+468] \ 00000068 7C8100EF SWI +33148 \ 0000006C 004080E5 STR R4,[R0, #+0] \ 00000070 0900A0E1 MOV R0,R9 \ 00000074 ........ BL GetHostsCount \ 00000078 DC1195E5 LDR R1,[R5, #+476] \ 0000007C 010040E2 SUB R0,R0,#+1 \ 00000080 010050E1 CMP R0,R1 \ 00000084 DC4185B5 STRLT R4,[R5, #+476] \ 00000088 DC0195E5 LDR R0,[R5, #+476] \ 0000008C 14208DE2 ADD R2,SP,#+20 \ 00000090 0910A0E1 MOV R1,R9 \ 00000094 ........ BL GetHost \ 00000098 DC0195E5 LDR R0,[R5, #+476] \ 0000009C 0910A0E1 MOV R1,R9 \ 000000A0 ........ BL GetPort \ 000000A4 0090A0E1 MOV R9,R0 \ 000000A8 DC0195E5 LDR R0,[R5, #+476] \ 000000AC 0930A0E1 MOV R3,R9 \ 000000B0 010080E2 ADD R0,R0,#+1 \ 000000B4 DC0185E5 STR R0,[R5, #+476] \ 000000B8 14208DE2 ADD R2,SP,#+20 \ 000000BC 181088E2 ADD R1,R8,#+24 \ 000000C0 8400A0E3 MOV R0,#+132 \ 000000C4 640D80E3 ORR R0,R0,#0x1900 \ 000000C8 050080E0 ADD R0,R0,R5 \ 000000CC 160000EF SWI +22 \ 000000D0 14108DE2 ADD R1,SP,#+20 \ 000000D4 0400A0E3 MOV R0,#+4 \ 000000D8 640D80E3 ORR R0,R0,#0x1900 \ 000000DC 050080E0 ADD R0,R0,R5 \ 000000E0 1A0000EF SWI +26 \ 000000E4 94108DE2 ADD R1,SP,#+148 \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 1A0000EF SWI +26 \ 000000F0 ........ BL SMART_REDRAW \ 000000F4 14008DE2 ADD R0,SP,#+20 \ 000000F8 B70100EF SWI +439 \ 000000FC 04B0E0E1 MVN R11,R4 \ 00000100 0B0050E1 CMP R0,R11 \ 00000104 0500000A BEQ ??create_connect_3 2143 { 2144 sa.ip=ip; \ 00000108 08008DE5 STR R0,[SP, #+8] 2145 strcpy(logmsg,"\nConnect by IP!"); //strcat->strcpy \ 0000010C 2C1088E2 ADD R1,R8,#+44 \ 00000110 0700A0E1 MOV R0,R7 \ 00000114 1A0000EF SWI +26 2146 SMART_REDRAW(); \ 00000118 ........ BL SMART_REDRAW 2147 goto L_CONNECT; \ 0000011C 390000EA B ??create_connect_4 2148 } \ ??create_connect_3: \ 00000120 6D1F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 00000124 0700A0E1 MOV R0,R7 2149 strcat(logmsg,"\n"); \ 00000128 170000EF SWI +23 2150 strcpy(logmsg,LG_GRSENDDNR); //strcat->strcpy \ 0000012C 3C1088E2 ADD R1,R8,#+60 \ 00000130 0700A0E1 MOV R0,R7 \ 00000134 1A0000EF SWI +26 2151 SMART_REDRAW(); \ 00000138 ........ BL SMART_REDRAW 2152 err=async_gethostbyname(hostbuf,&p_res,&DNR_ID); //03461351 3<70<19<81 \ 0000013C 752F85E2 ADD R2,R5,#+468 \ 00000140 0D10A0E1 MOV R1,SP \ 00000144 14008DE2 ADD R0,SP,#+20 \ 00000148 B60100EF SWI +438 \ 0000014C 0030B0E1 MOVS R3,R0 2153 if (err) \ 00000150 1600000A BEQ ??create_connect_5 2154 { 2155 if ((err==0xC9)||(err==0xD6)) \ 00000154 C90053E3 CMP R3,#+201 \ 00000158 D6005313 CMPNE R3,#+214 \ 0000015C 0600001A BNE ??create_connect_6 2156 { 2157 if (DNR_ID) \ 00000160 D40195E5 LDR R0,[R5, #+468] \ 00000164 000050E3 CMP R0,#+0 \ 00000168 1000000A BEQ ??create_connect_5 2158 { 2159 host_counter--; \ 0000016C DC0195E5 LDR R0,[R5, #+476] \ 00000170 010040E2 SUB R0,R0,#+1 \ 00000174 DC0185E5 STR R0,[R5, #+476] 2160 return; //Ждем готовности DNR \ 00000178 390000EA B ??create_connect_7 2161 } 2162 } 2163 else 2164 { 2165 snprintf(logmsg,255,LG_GRDNRERROR,err); \ ??create_connect_6: \ 0000017C 482088E2 ADD R2,R8,#+72 \ 00000180 FF10A0E3 MOV R1,#+255 \ 00000184 0700A0E1 MOV R0,R7 \ 00000188 1B0100EF SWI +283 2166 SMART_REDRAW(); \ 0000018C ........ BL SMART_REDRAW 2167 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ ??create_connect_8: \ 00000190 ........ LDR R0,??DataTable70 ;; RECONNECT_TIME \ 00000194 0A20A0E1 MOV R2,R10 \ 00000198 000090E5 LDR R0,[R0, #+0] \ 0000019C D830A0E3 MOV R3,#+216 \ 000001A0 930001E0 MUL R1,R3,R0 \ 000001A4 0600A0E1 MOV R0,R6 \ 000001A8 4D0000EF SWI +77 2168 return; \ 000001AC 2C0000EA B ??create_connect_7 2169 } 2170 } 2171 if (p_res) \ ??create_connect_5: \ 000001B0 00009DE5 LDR R0,[SP, #+0] \ 000001B4 000050E3 CMP R0,#+0 \ 000001B8 3D00000A BEQ ??create_connect_9 2172 { 2173 if (p_res[3]) \ 000001BC 0C0090E5 LDR R0,[R0, #+12] \ 000001C0 000050E3 CMP R0,#+0 \ 000001C4 4200000A BEQ ??create_connect_10 2174 { 2175 strcpy(logmsg,buf); \ 000001C8 94108DE2 ADD R1,SP,#+148 \ 000001CC 0700A0E1 MOV R0,R7 \ 000001D0 1A0000EF SWI +26 2176 strcat(logmsg,"\n"); \ 000001D4 401F8FE2 ADR R1,??create_connect_0 ;; "\n" \ 000001D8 0700A0E1 MOV R0,R7 \ 000001DC 170000EF SWI +23 2177 strcpy(logmsg,LG_GRDNROK); \ 000001E0 581088E2 ADD R1,R8,#+88 \ 000001E4 0700A0E1 MOV R0,R7 \ 000001E8 1A0000EF SWI +26 2178 SMART_REDRAW(); \ 000001EC ........ BL SMART_REDRAW 2179 DNR_TRIES=0; \ 000001F0 D84185E5 STR R4,[R5, #+472] 2180 sa.ip=p_res[3][0][0]; \ 000001F4 00109DE5 LDR R1,[SP, #+0] \ 000001F8 0C1091E5 LDR R1,[R1, #+12] \ 000001FC 001091E5 LDR R1,[R1, #+0] \ 00000200 001091E5 LDR R1,[R1, #+0] \ 00000204 08108DE5 STR R1,[SP, #+8] 2181 L_CONNECT: 2182 sock=socket(1,1,0); \ ??create_connect_4: \ 00000208 0020A0E3 MOV R2,#+0 \ 0000020C 0110A0E3 MOV R1,#+1 \ 00000210 0100A0E1 MOV R0,R1 \ 00000214 730100EF SWI +371 \ 00000218 900185E5 STR R0,[R5, #+400] 2183 if (sock!=-1) \ 0000021C 0B0050E1 CMP R0,R11 \ 00000220 1A00000A BEQ ??create_connect_11 2184 { 2185 sa.family=1; \ 00000224 0170A0E3 MOV R7,#+1 \ 00000228 B470CDE1 STRH R7,[SP, #+4] 2186 sa.port=htons(hostport); \ 0000022C 0908A0E1 MOV R0,R9, LSL #+16 \ 00000230 2008A0E1 MOV R0,R0, LSR #+16 \ 00000234 7A0100EF SWI +378 \ 00000238 B600CDE1 STRH R0,[SP, #+6] 2187 // sa.ip=htonl(IP_ADDR(82,207,89,182)); 2188 if (connect(sock,&sa,sizeof(sa))!=-1) \ 0000023C 900195E5 LDR R0,[R5, #+400] \ 00000240 1020A0E3 MOV R2,#+16 \ 00000244 04108DE2 ADD R1,SP,#+4 \ 00000248 740100EF SWI +372 \ 0000024C 0B0050E1 CMP R0,R11 \ 00000250 0500000A BEQ ??create_connect_12 2189 { 2190 connect_state=1; \ 00000254 8C7185E5 STR R7,[R5, #+396] 2191 TOTALRECEIVED=0; \ 00000258 944185E5 STR R4,[R5, #+404] 2192 TOTALSENDED=0; \ 0000025C 984185E5 STR R4,[R5, #+408] 2193 SMART_REDRAW(); \ ??create_connect_2: \ 00000260 ........ BL SMART_REDRAW \ ??create_connect_7: \ 00000264 45DF8DE2 ADD SP,SP,#+276 \ 00000268 F08FBDE8 POP {R4-R11,PC} 2194 } 2195 else 2196 { 2197 closesocket(sock); \ ??create_connect_12: \ 0000026C 900195E5 LDR R0,[R5, #+400] \ 00000270 760100EF SWI +374 2198 sock=-1; \ 00000274 90B185E5 STR R11,[R5, #+400] 2199 LockSched(); \ 00000278 460100EF SWI +326 2200 ShowMSG(1,(int)LG_MSGCANTCONN); \ 0000027C 701088E2 ADD R1,R8,#+112 \ 00000280 0100A0E3 MOV R0,#+1 \ 00000284 480100EF SWI +328 2201 UnlockSched(); \ 00000288 470100EF SWI +327 2202 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 0000028C BFFFFFEA B ??create_connect_8 2203 2204 } 2205 } 2206 else 2207 { 2208 LockSched(); \ ??create_connect_11: \ 00000290 460100EF SWI +326 2209 ShowMSG(1,(int)LG_MSGCANTCRSC); \ 00000294 8C1088E2 ADD R1,R8,#+140 \ 00000298 0100A0E3 MOV R0,#+1 \ 0000029C 480100EF SWI +328 2210 UnlockSched(); \ 000002A0 470100EF SWI +327 2211 //Не осилили создания сокета, закрываем GPRS-сессию 2212 GPRS_OnOff(0,1); \ 000002A4 0110A0E3 MOV R1,#+1 \ 000002A8 0000A0E3 MOV R0,#+0 \ 000002AC 8E0100EF SWI +398 \ 000002B0 EBFFFFEA B ??create_connect_7 2213 } 2214 } 2215 } 2216 else 2217 { 2218 DNR_TRIES--; \ ??create_connect_9: \ 000002B4 D80195E5 LDR R0,[R5, #+472] \ 000002B8 010040E2 SUB R0,R0,#+1 \ 000002BC D80185E5 STR R0,[R5, #+472] 2219 LockSched(); \ 000002C0 460100EF SWI +326 2220 ShowMSG(1,(int)LG_MSGHOSTNFND); \ 000002C4 B81088E2 ADD R1,R8,#+184 \ 000002C8 0100A0E3 MOV R0,#+1 \ 000002CC 480100EF SWI +328 2221 UnlockSched(); \ 000002D0 470100EF SWI +327 \ ??create_connect_10: \ 000002D4 45DF8DE2 ADD SP,SP,#+276 ;; stack cleaning \ 000002D8 F08FBDE8 POP {R4-R11,PC} ;; return \ ??create_connect_0: \ 000002DC 0A000000 DC8 "\n",+0,+0 \ 000002E0 ........ DC32 `?` \ 000002E4 ........ DC32 NATICQ_HOST 2222 } 2223 } 2224 2225 #ifdef SEND_TIMER 2226 GBSTMR send_tmr; 2227 #endif 2228 \ In segment CODE, align 4, keep-with-next 2229 void ClearSendQ(void) 2230 { \ ClearSendQ: \ 00000000 10402DE9 PUSH {R4,LR} 2231 mfree((void *)sendq_p); \ 00000004 ........ LDR R4,??DataTable82 ;; S_ICONS \ 00000008 A80194E5 LDR R0,[R4, #+424] \ 0000000C 150000EF SWI +21 2232 sendq_p=NULL; \ 00000010 0000A0E3 MOV R0,#+0 \ 00000014 A80184E5 STR R0,[R4, #+424] 2233 sendq_l=NULL; \ 00000018 A40184E5 STR R0,[R4, #+420] 2234 #ifdef SEND_TIMER 2235 GBS_DelTimer(&send_tmr); 2236 #endif 2237 } \ 0000001C 1080BDE8 POP {R4,PC} ;; return 2238 \ In segment CODE, align 4, keep-with-next 2239 void end_socket(void) 2240 { \ end_socket: \ 00000000 10402DE9 PUSH {R4,LR} 2241 if (sock>=0) \ 00000004 ........ LDR R4,??DataTable82 ;; S_ICONS \ 00000008 900194E5 LDR R0,[R4, #+400] \ 0000000C 000050E3 CMP R0,#+0 \ 00000010 1080BD48 POPMI {R4,PC} 2242 { 2243 shutdown(sock,2); \ 00000014 0210A0E3 MOV R1,#+2 \ 00000018 770100EF SWI +375 2244 closesocket(sock); \ 0000001C 900194E5 LDR R0,[R4, #+400] \ 00000020 760100EF SWI +374 2245 } 2246 #ifdef SEND_TIMER 2247 GBS_DelTimer(&send_tmr); 2248 #endif 2249 } \ 00000024 1080BDE8 POP {R4,PC} ;; return 2250 2251 #ifdef SEND_TIMER 2252 static void resend(void) 2253 { 2254 void SendAnswer(int dummy, TPKT *p); 2255 SUBPROC((void*)SendAnswer,0,0); 2256 } 2257 #endif 2258 \ In segment CODE, align 4, keep-with-next 2259 void SendAnswer(int dummy, TPKT *p) 2260 { \ SendAnswer: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 2261 int i; 2262 int j; 2263 if (connect_state<2) \ 00000004 ........ LDR R4,??DataTable82 ;; S_ICONS \ 00000008 0160A0E1 MOV R6,R1 \ 0000000C 8C0194E5 LDR R0,[R4, #+396] \ 00000010 020050E3 CMP R0,#+2 \ 00000014 020000AA BGE ??SendAnswer_0 2264 { 2265 mfree(p); \ 00000018 0600A0E1 MOV R0,R6 \ 0000001C 150000EF SWI +21 2266 return; \ 00000020 F083BDE8 POP {R4-R9,PC} 2267 } 2268 if (p) \ ??SendAnswer_0: \ 00000024 000056E3 CMP R6,#+0 \ 00000028 2600000A BEQ ??SendAnswer_1 2269 { 2270 j=sizeof(PKT)+p->pkt.data_len; //Размер пакета \ 0000002C B600D6E1 LDRH R0,[R6, #+6] \ 00000030 085080E2 ADD R5,R0,#+8 2271 TOTALSENDED+=j; \ 00000034 980194E5 LDR R0,[R4, #+408] \ 00000038 000085E0 ADD R0,R5,R0 \ 0000003C 980184E5 STR R0,[R4, #+408] 2272 ALLTOTALSENDED+=j; //by BoBa 10.07 \ 00000040 A00194E5 LDR R0,[R4, #+416] \ 00000044 000085E0 ADD R0,R5,R0 \ 00000048 A00184E5 STR R0,[R4, #+416] 2273 //Проверяем, не надо ли добавить в очередь 2274 if (sendq_p) \ 0000004C A80194E5 LDR R0,[R4, #+424] \ 00000050 000050E3 CMP R0,#+0 \ 00000054 0F00000A BEQ ??SendAnswer_2 2275 { 2276 //Есть очередь, добавляем в нее 2277 sendq_p=realloc((void *)sendq_p,sendq_l+j); \ 00000058 A41194E5 LDR R1,[R4, #+420] \ 0000005C 011085E0 ADD R1,R5,R1 \ 00000060 BA0000EF SWI +186 \ 00000064 A80184E5 STR R0,[R4, #+424] 2278 memcpy((char *)sendq_p+sendq_l,p,j); \ 00000068 A40194E5 LDR R0,[R4, #+420] \ 0000006C A83194E5 LDR R3,[R4, #+424] \ 00000070 0520A0E1 MOV R2,R5 \ 00000074 0610A0E1 MOV R1,R6 \ 00000078 030080E0 ADD R0,R0,R3 \ 0000007C 1E0100EF SWI +286 2279 mfree(p); \ 00000080 0600A0E1 MOV R0,R6 \ 00000084 150000EF SWI +21 2280 sendq_l+=j; \ 00000088 A40194E5 LDR R0,[R4, #+420] \ 0000008C 000085E0 ADD R0,R5,R0 \ 00000090 A40184E5 STR R0,[R4, #+420] 2281 return; \ 00000094 F083BDE8 POP {R4-R9,PC} 2282 } 2283 sendq_p=p; \ ??SendAnswer_2: \ 00000098 A86184E5 STR R6,[R4, #+424] 2284 sendq_l=j; \ 0000009C A45184E5 STR R5,[R4, #+420] \ 000000A0 080000EA B ??SendAnswer_1 2285 } 2286 //Отправляем уже существующее в очереди 2287 while((i=sendq_l)!=0) 2288 { 2289 if (i>0x400) i=0x400; 2290 j=send(sock,(void *)sendq_p,i,0); 2291 snprintf(logmsg,255,"send res %d",j); 2292 SMART_REDRAW(); 2293 if (j<0) 2294 { 2295 j=*socklasterr(); 2296 if ((j==0xC9)||(j==0xD6)) 2297 { 2298 //Передали что хотели 2299 strcpy(logmsg,"Send delayed..."); 2300 return; //Видимо, надо ждать сообщения ENIP_BUFFER_FREE 2301 } 2302 else 2303 { 2304 //Ошибка 2305 LockSched(); 2306 ShowMSG(1,(int)"Send error!"); 2307 UnlockSched(); 2308 end_socket(); 2309 return; 2310 } 2311 } 2312 memcpy((void *)sendq_p,(char *)sendq_p+j,sendq_l-=j); //Удалили переданное \ ??SendAnswer_3: \ 000000A4 A40194E5 LDR R0,[R4, #+420] \ 000000A8 052040E0 SUB R2,R0,R5 \ 000000AC A42184E5 STR R2,[R4, #+420] \ 000000B0 A80194E5 LDR R0,[R4, #+424] \ 000000B4 001085E0 ADD R1,R5,R0 \ 000000B8 1E0100EF SWI +286 2313 if (j` \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 400E80E3 ORR R0,R0,#0x400 \ 000000E8 000057E1 CMP R7,R0 \ 000000EC 900194E5 LDR R0,[R4, #+400] \ 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 3400A0E3 MOV R0,#+52 \ 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} 2322 } 2323 mfree((void *)sendq_p); \ ??SendAnswer_4: \ 00000170 0100A0E1 MOV R0,R1 \ 00000174 150000EF SWI +21 2324 sendq_p=NULL; \ 00000178 A86184E5 STR R6,[R4, #+424] 2325 } \ 0000017C F083BDE8 POP {R4-R9,PC} ;; return \ ??SendAnswer_5: \ 00000180 ........ DC32 `?` 2326 2327 extern const char pingsnd[64]; 2328 \ In segment CODE, align 4, keep-with-next 2329 void send_login(int dummy, TPKT *p) 2330 { 2331 connect_state=2; 2332 char rev[16]; 2333 //Кто будет менять в этом месте идентификатор клиента, буду банить на уровне сервера!!! 2334 //А Вова будет банить на форуме! 2335 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,??DataTable82 ;; S_ICONS \ 0000000C 10D04DE2 SUB SP,SP,#+16 \ 00000010 0040A0E1 MOV R4,R0 \ 00000014 0150A0E1 MOV R5,R1 \ 00000018 0200A0E3 MOV R0,#+2 \ 0000001C 8C0186E5 STR R0,[R6, #+396] \ 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 2336 2337 TPKT *p2=malloc(sizeof(PKT)+8); \ 00000034 1000A0E3 MOV R0,#+16 \ 00000038 140000EF SWI +20 \ 0000003C 0070A0E1 MOV R7,R0 2338 p2->pkt.uin=UIN; \ 00000040 ........ LDR R0,??DataTable76 ;; UIN 2339 p2->pkt.type=T_SETCLIENT_ID; 2340 p2->pkt.data_len=8; 2341 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 2342 SendAnswer(0,p2); \ 0000006C 0710A0E1 MOV R1,R7 \ 00000070 0000A0E3 MOV R0,#+0 \ 00000074 ........ BL SendAnswer 2343 SendAnswer(dummy,p); \ 00000078 0510A0E1 MOV R1,R5 \ 0000007C 0400A0E1 MOV R0,R4 \ 00000080 ........ BL SendAnswer 2344 RXstate=-(int)sizeof(PKT); \ 00000084 0700E0E3 MVN R0,#+7 \ 00000088 880186E5 STR R0,[R6, #+392] 2345 } \ 0000008C FF80BDE8 POP {R0-R7,PC} ;; return \ ??send_login_0: \ 00000090 ........ DC32 `?` 2346 \ In segment CODE, align 4, keep-with-next 2347 void do_ping(void) 2348 { \ do_ping: \ 00000000 00402DE9 PUSH {LR} 2349 TPKT *pingp=malloc(sizeof(PKT)); \ 00000004 0800A0E3 MOV R0,#+8 \ 00000008 140000EF SWI +20 2350 pingp->pkt.uin=UIN; \ 0000000C ........ LDR R1,??DataTable76 ;; UIN \ 00000010 001091E5 LDR R1,[R1, #+0] \ 00000014 001080E5 STR R1,[R0, #+0] 2351 pingp->pkt.type=0; \ 00000018 0010A0E3 MOV R1,#+0 \ 0000001C B410C0E1 STRH R1,[R0, #+4] 2352 pingp->pkt.data_len=0; \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2353 SendAnswer(0,pingp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 0040BDE8 POP {LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2354 } 2355 \ In segment CODE, align 4, keep-with-next 2356 void SendMSGACK(int i) 2357 { \ SendMSGACK: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2358 TPKT *ackp=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2359 ackp->pkt.uin=i; \ 00000010 004080E5 STR R4,[R0, #+0] 2360 ackp->pkt.type=T_MSGACK; \ 00000014 1710A0E3 MOV R1,#+23 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2361 ackp->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2362 SendAnswer(0,ackp); \ 00000024 0010A0E1 MOV R1,R0 \ 00000028 0000A0E3 MOV R0,#+0 \ 0000002C 1040BDE8 POP {R4,LR} ;; Pop \ 00000030 ........ B SendAnswer ;; tailcall 2363 } 2364 \ In segment CODE, align 4, keep-with-next 2365 void RequestXText(unsigned int uin) 2366 { \ RequestXText: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 2367 TPKT *p=malloc(sizeof(PKT)); \ 00000008 0800A0E3 MOV R0,#+8 \ 0000000C 140000EF SWI +20 2368 p->pkt.uin=uin; \ 00000010 004080E5 STR R4,[R0, #+0] 2369 p->pkt.type=T_XTEXT_REQ; \ 00000014 1810A0E3 MOV R1,#+24 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 2370 p->pkt.data_len=0; \ 0000001C 0010A0E3 MOV R1,#+0 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 2371 SUBPROC((void *)SendAnswer,0,p); \ 00000024 0020A0E1 MOV R2,R0 \ 00000028 ........ LDR R0,??DataTable77 ;; SendAnswer \ 0000002C 710100EF SWI +369 2372 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 2373 2374 extern int main2_count; 2375 extern const unsigned int ping_time_config; 2376 int ping_time; 2377 //#ifdef EVILFOX 2378 //#else 2379 extern const char ignor_list[256]; 2380 //#endif 2381 char I_UIN[9]; 2382 \ In segment CODE, align 4, keep-with-next 2383 void get_answer(void) 2384 { \ get_answer: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 2385 void *p; 2386 int i=RXstate; \ 00000004 ........ LDR R5,??DataTable82 ;; S_ICONS \ 00000008 1CD04DE2 SUB SP,SP,#+28 \ 0000000C 40DE4DE2 SUB SP,SP,#+1024 2387 int j; 2388 int n; 2389 char rb[1024]; 2390 char *rp=rb; 2391 if (connect_state<2) return; \ 00000010 8C0195E5 LDR R0,[R5, #+396] \ 00000014 888195E5 LDR R8,[R5, #+392] \ 00000018 1C108DE2 ADD R1,SP,#+28 \ 0000001C 00108DE5 STR R1,[SP, #+0] \ 00000020 020050E3 CMP R0,#+2 \ 00000024 4B0100BA BLT ??get_answer_1 \ 00000028 0A0078E3 CMN R8,#+10 \ 0000002C 4901000A BEQ ??get_answer_1 2392 if (i==EOP) return; 2393 j=recv(sock,rb,sizeof(rb),0); \ 00000030 900195E5 LDR R0,[R5, #+400] \ 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 2394 while(j>0) 2395 { 2396 if (i<0) 2397 { 2398 //Принимаем заголовок 2399 n=-i; //Требуемое количество байт 2400 if (j=0) 2407 { 2408 //Принимаем тельце ;) 2409 n=RXbuf.pkt.data_len; //Всего в тельце 2410 if (n>16383) 2411 { 2412 //Слишком много 2413 strcpy(logmsg,LG_GRBADPACKET); 2414 end_socket(); 2415 RXstate=EOP; 2416 return; 2417 } 2418 n-=i; //Количество требуемых байт (общая длинна тельца-текущая позиция) 2419 if (n>0) 2420 { 2421 if (jhour*3600+pt->min*60+pt->sec; 2564 s1-=s2; 2565 if (s1<0) s1+=86400; 2566 snprintf(logmsg,255,"Ping %d-%d seconds!",s1,s1+1); 2567 sprintf(PINGO, "Ping: %dsec",s1); 2568 LockSched(); 2569 if(janis==1) 2570 { 2571 ShowMSG(1,(int)logmsg); 2572 Play(pingsnd); 2573 janis=0; 2574 } 2575 else 2576 { 2577 if(ping_time==0) 2578 { 2579 ping_time=ping_time_config; 2580 Play(pingsnd); 2581 } 2582 else 2583 ping_time--; 2584 } 2585 UnlockSched(); 2586 } 2587 break; 2588 case T_LASTPRIVACY: 2589 n=i+sizeof(PKT); \ ??get_answer_3: \ 00000050 0040A0E1 MOV R4,R0 2590 p=malloc(n); \ ??get_answer_4: \ 00000054 140000EF SWI +20 \ 00000058 00B0A0E1 MOV R11,R0 2591 memcpy(p,&RXbuf,n); \ 0000005C 0420A0E1 MOV R2,R4 \ ??get_answer_5: \ 00000060 0710A0E1 MOV R1,R7 \ 00000064 1E0100EF SWI +286 2592 GBS_SendMessage(MMI_CEPID,MSG_HELPER_TRANSLATOR,0,p,sock); \ 00000068 900195E5 LDR R0,[R5, #+400] \ 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 2593 break; 2594 } 2595 i=-(int)sizeof(PKT); //А может еще есть данные \ ??get_answer_7: \ 00000088 0780E0E3 MVN R8,#+7 \ ??get_answer_2: \ 0000008C 010056E3 CMP R6,#+1 \ 00000090 2F0100BA BLT ??get_answer_8 \ 00000094 CC749FE5 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 3400A0E3 MOV R0,#+52 \ 000000E4 5C0D80E3 ORR R0,R0,#0x1700 \ 000000E8 05A080E0 ADD R10,R0,R5 \ 000000EC 400C54E3 CMP R4,#+16384 \ 000000F0 080000BA BLT ??get_answer_11 \ 000000F4 70149FE5 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 2642 { 2643 /* 2644 char *du=malloc(text_l); 2645 strncpy(du,si,text_l); 2646 sprintf(de,"%s%s",du,"..."); 2647 mfree(du); 2648 } 2649 */ 2650 while(text_l!=0) 2651 { 2652 de[iz]=si[iz]; 2653 iz++; 2654 text_l--; 2655 } 2656 if(use_cutter) 2657 { 2658 de[iz]='.'; 2659 iz++; 2660 de[iz]='.'; 2661 iz++; 2662 de[iz]='.'; 2663 iz++; 2664 } 2665 de[iz]='\0'; 2666 } 2667 else 2668 strcpy(de, si); \ 00000048 0810A0E1 MOV R1,R8 \ 0000004C 0500A0E1 MOV R0,R5 \ 00000050 1A0000EF SWI +26 2669 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 AC119FE5 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 2670 while(strlen(de)!=iz) 2671 { 2672 // if(d[i]==0x2A) d[i]=0x20; 2673 // if(d[i]==0x27) d[i]=0x20; 2674 // if(d[i]==0x22) d[i]=0x20; 2675 // if(d[i]==0x26) d[i]=0x20; 2676 // if(d[i]==0x3D) d[i]=0x20; 2677 // if(d[i]==0x3C) d[i]=0x20; 2678 // if(d[i]==0x3E) d[i]=0x20; 2679 // if(d[i]==0x7B) d[i]=0x20; 2680 // if(d[i]==0x7D) d[i]=0x20; 2681 // if(d[i]==0x5B) d[i]=0x20; 2682 // if(d[i]==0x5D) d[i]=0x20; 2683 // if(d[i]==0x23) d[i]=0x20; 2684 // if(d[i]==0x2F) d[i]=0x20; 2685 // if(d[i]==0x5C) d[i]=0x20; 2686 // if(d[i]==0x7E) d[i]=0x20; 2687 // if(d[i]==0x5E) d[i]=0x20; 2688 // if(d[i]==0xAC) d[i]=0x20; 2689 // if(d[i]==0xA3) d[i]=0x20; 2690 // if(d[i]==0x24) d[i]=0x20; 2691 // if(d[i]==0xA5) d[i]=0x20; 2692 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] 2693 if(de[iz]==0x0A) de[iz]=0x20; \ 000000B8 0510D7E7 LDRB R1,[R7, +R5] \ 000000BC 0A0051E3 CMP R1,#+10 \ 000000C0 0500C707 STRBEQ R0,[R7, +R5] 2694 iz++; \ 000000C4 017087E2 ADD R7,R7,#+1 2695 } \ ??AddToMain_3: \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 1B0000EF SWI +27 \ 000000D0 070050E1 CMP R0,R7 \ 000000D4 F3FFFF1A BNE ??AddToMain_6 2696 de[iz]='\0'; 2697 if(main_count==0) sprintf(a_txt, "%s: %s", nameu,de); \ 000000D8 ........ LDR R8,??DataTable81 ;; main_count \ 000000DC 0560C7E7 STRB R6,[R7, +R5] \ 000000E0 ........ LDR R6,??DataTable82 ;; S_ICONS \ 000000E4 44719FE5 LDR R7,??AddToMain_0+0x8 ;; `?` \ 000000E8 1010A0E3 MOV R1,#+16 \ 000000EC 681D81E3 ORR R1,R1,#0x1A00 \ 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 2698 if(main_count==1) sprintf(s_txt, "%s: %s", nameu,de); \ ??AddToMain_7: \ 00000118 691D86E2 ADD R1,R6,#+6720 \ 0000011C 00108DE5 STR R1,[SP, #+0] \ 00000120 000098E5 LDR R0,[R8, #+0] \ 00000124 010050E3 CMP R0,#+1 \ 00000128 0400001A BNE ??AddToMain_8 \ 0000012C 00009DE5 LDR R0,[SP, #+0] \ 00000130 0530A0E1 MOV R3,R5 \ 00000134 0420A0E1 MOV R2,R4 \ 00000138 0710A0E1 MOV R1,R7 \ 0000013C 160000EF SWI +22 2699 if(main_count==2) sprintf(d_txt, "%s: %s", nameu,de); \ ??AddToMain_8: \ 00000140 7000A0E3 MOV R0,#+112 \ 00000144 680D80E3 ORR R0,R0,#0x1A00 \ 00000148 069080E0 ADD R9,R0,R6 \ 0000014C 000098E5 LDR R0,[R8, #+0] \ 00000150 020050E3 CMP R0,#+2 \ 00000154 0400001A BNE ??AddToMain_9 \ 00000158 0530A0E1 MOV R3,R5 \ 0000015C 0420A0E1 MOV R2,R4 \ 00000160 0710A0E1 MOV R1,R7 \ 00000164 0900A0E1 MOV R0,R9 \ 00000168 160000EF SWI +22 2700 if(main_count==3) sprintf(f_txt, "%s: %s", nameu,de); \ ??AddToMain_9: \ 0000016C A000A0E3 MOV R0,#+160 \ 00000170 680D80E3 ORR R0,R0,#0x1A00 \ 00000174 06A080E0 ADD R10,R0,R6 \ 00000178 000098E5 LDR R0,[R8, #+0] \ 0000017C 030050E3 CMP R0,#+3 \ 00000180 0400001A BNE ??AddToMain_10 \ 00000184 0530A0E1 MOV R3,R5 \ 00000188 0420A0E1 MOV R2,R4 \ 0000018C 0710A0E1 MOV R1,R7 \ 00000190 0A00A0E1 MOV R0,R10 \ 00000194 160000EF SWI +22 2701 if(main_count==4) sprintf(g_txt, "%s: %s", nameu,de); \ ??AddToMain_10: \ 00000198 D000A0E3 MOV R0,#+208 \ 0000019C 680D80E3 ORR R0,R0,#0x1A00 \ 000001A0 06B080E0 ADD R11,R0,R6 \ 000001A4 000098E5 LDR R0,[R8, #+0] \ 000001A8 040050E3 CMP R0,#+4 \ 000001AC 0400001A BNE ??AddToMain_11 \ 000001B0 0530A0E1 MOV R3,R5 \ 000001B4 0420A0E1 MOV R2,R4 \ 000001B8 0710A0E1 MOV R1,R7 \ 000001BC 0B00A0E1 MOV R0,R11 \ 000001C0 160000EF SWI +22 2702 if(main_count>4) \ ??AddToMain_11: \ 000001C4 000098E5 LDR R0,[R8, #+0] \ 000001C8 050050E3 CMP R0,#+5 \ 000001CC 100000BA BLT ??AddToMain_12 2703 { 2704 strcpy(a_txt, s_txt); \ 000001D0 00109DE5 LDR R1,[SP, #+0] \ 000001D4 04009DE5 LDR R0,[SP, #+4] \ 000001D8 1A0000EF SWI +26 2705 strcpy(s_txt, d_txt); \ 000001DC 00009DE5 LDR R0,[SP, #+0] \ 000001E0 0910A0E1 MOV R1,R9 \ 000001E4 1A0000EF SWI +26 2706 strcpy(d_txt, f_txt); \ 000001E8 0A10A0E1 MOV R1,R10 \ 000001EC 0900A0E1 MOV R0,R9 \ 000001F0 1A0000EF SWI +26 2707 strcpy(f_txt, g_txt); \ 000001F4 0B10A0E1 MOV R1,R11 \ 000001F8 0A00A0E1 MOV R0,R10 \ 000001FC 1A0000EF SWI +26 2708 sprintf(g_txt, "%s: %s", nameu,de); \ 00000200 0530A0E1 MOV R3,R5 \ 00000204 0420A0E1 MOV R2,R4 \ 00000208 0710A0E1 MOV R1,R7 \ 0000020C 0B00A0E1 MOV R0,R11 \ 00000210 160000EF SWI +22 2709 } 2710 mfree(de); \ ??AddToMain_12: \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 150000EF SWI +21 2711 main_d=1; \ 0000021C 0100A0E3 MOV R0,#+1 \ 00000220 E00086E5 STR R0,[R6, #+224] 2712 } \ 00000224 F38FBDE8 POP {R0,R1,R4-R11,PC} ;; return \ ??AddToMain_0: \ 00000228 ........ DC32 main_lenght \ 0000022C ........ DC32 use_cutter \ 00000230 ........ DC32 `?` 2713 2714 //======================add to main info================ 2715 2716 int NEW_MSG; 2717 //int LOG_TIME_CONN=0;//not log online/offline time 2718 \ In segment CODE, align 4, keep-with-next 2719 void AddStringToLog(CLIST *t, int code, char *s, const char *name, unsigned int IDforACK,int flag) 2720 { \ 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 2721 char hs[128], *lastX; 2722 TTime tt; 2723 TDate d; 2724 GetDateTime(&d,&tt); \ 00000020 0D10A0E1 MOV R1,SP \ 00000024 08008DE2 ADD R0,SP,#+8 \ 00000028 B40000EF SWI +180 2725 int i; 2726 2727 // if(code == 3 && !LOG_XTXT) return; //Нl нуcно nоodrн?nь cennnrnуn 2728 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 2729 { 2730 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 2737 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 2738 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 2739 2740 // ShowMSG(1,(int)t); 2741 // ShowMSG(1,(int)s); // Запись хистори 2742 LOGQ *p=NewLOGQ(s); \ ??AddStringToLog_5: \ 000000FC 0800A0E1 MOV R0,R8 \ 00000100 ........ BL NewLOGQ \ 00000104 0080A0E1 MOV R8,R0 2743 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 2744 p->type=code; \ 00000138 0C5088E5 STR R5,[R8, #+12] 2745 p->ID=IDforACK; //0-32767 \ 0000013C 087088E5 STR R7,[R8, #+8] 2746 i=AddLOGQ(&t->log,p); \ 00000140 0810A0E1 MOV R1,R8 \ 00000144 700084E2 ADD R0,R4,#+112 \ 00000148 ........ BL AddLOGQ \ 0000014C 0060A0E1 MOV R6,R0 \ 00000150 150056E3 CMP R6,#+21 \ 00000154 10D08DE2 ADD SP,SP,#+16 \ 00000158 090000BA BLT ??AddStringToLog_6 2747 while(i>MAXLOGMSG) 2748 { 2749 if (t->log==t->last_log) t->last_log=t->last_log->next; \ ??AddStringToLog_7: \ 0000015C 780094E5 LDR R0,[R4, #+120] \ 00000160 701094E5 LDR R1,[R4, #+112] 2750 RemoveLOGQ(&t->log,t->log); 2751 i--; \ 00000164 016046E2 SUB R6,R6,#+1 \ 00000168 000051E1 CMP R1,R0 \ 0000016C 00009005 LDREQ R0,[R0, #+0] \ 00000170 78008405 STREQ R0,[R4, #+120] \ 00000174 700084E2 ADD R0,R4,#+112 \ 00000178 ........ BL RemoveLOGQ 2752 } \ 0000017C 150056E3 CMP R6,#+21 \ 00000180 F5FFFFAA BGE ??AddStringToLog_7 2753 t->msg_count=i; \ ??AddStringToLog_6: \ 00000184 806084E5 STR R6,[R4, #+128] 2754 if (!t->last_log) t->last_log=p; \ 00000188 780094E5 LDR R0,[R4, #+120] 2755 if (code==3) \ 0000018C ........ LDR R6,??DataTable116 ;; S_ICONS \ 00000190 000050E3 CMP R0,#+0 \ 00000194 78808405 STREQ R8,[R4, #+120] \ 00000198 030055E3 CMP R5,#+3 \ 0000019C 0D00001A BNE ??AddStringToLog_8 2756 { 2757 if (edchat_id) \ 000001A0 C00196E5 LDR R0,[R6, #+448] \ 000001A4 000050E3 CMP R0,#+0 \ 000001A8 2000000A BEQ ??AddStringToLog_9 2758 { 2759 void *data=FindGUIbyId(edchat_id,NULL); \ 000001AC C00196E5 LDR R0,[R6, #+448] \ 000001B0 0010A0E3 MOV R1,#+0 \ 000001B4 090200EF SWI +521 2760 if (data) \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 1B00000A BEQ ??AddStringToLog_9 2761 { 2762 EDCHAT_STRUCT *ed_struct; 2763 ed_struct=EDIT_GetUserPointer(data); \ 000001C0 DF0100EF SWI +479 2764 if (ed_struct) \ 000001C4 000050E3 CMP R0,#+0 \ 000001C8 1800000A BEQ ??AddStringToLog_9 2765 { 2766 if (ed_struct->ed_contact==t) \ 000001CC 000090E5 LDR R0,[R0, #+0] \ 000001D0 040050E1 CMP R0,R4 \ 000001D4 1500001A BNE ??AddStringToLog_9 2767 { 2768 goto L_INC; 2769 } 2770 } 2771 } 2772 } 2773 goto L_NOINC; 2774 } 2775 L_INC: 2776 if (!t->isunread) total_unread++; \ ??AddStringToLog_8: \ 000001D8 600094E5 LDR R0,[R4, #+96] \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 B0019605 LDREQ R0,[R6, #+432] \ 000001E4 01008002 ADDEQ R0,R0,#+1 \ 000001E8 B0018605 STREQ R0,[R6, #+432] 2777 if(NEW_MSG==1) \ 000001EC E40196E5 LDR R0,[R6, #+484] \ 000001F0 010050E3 CMP R0,#+1 \ 000001F4 0700001A BNE ??AddStringToLog_10 2778 { 2779 t->unread_msg++; \ 000001F8 640094E5 LDR R0,[R4, #+100] \ 000001FC 010080E2 ADD R0,R0,#+1 \ 00000200 640084E5 STR R0,[R4, #+100] 2780 total_unread2++; \ 00000204 100196E5 LDR R0,[R6, #+272] \ 00000208 010080E2 ADD R0,R0,#+1 \ 0000020C 100186E5 STR R0,[R6, #+272] 2781 NEW_MSG=0; \ 00000210 0000A0E3 MOV R0,#+0 \ 00000214 E40186E5 STR R0,[R6, #+484] 2782 } 2783 t->isunread=1; \ ??AddStringToLog_10: \ 00000218 0100A0E3 MOV R0,#+1 \ 0000021C 600084E5 STR R0,[R4, #+96] 2784 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 2785 L_NOINC: 2786 ChangeContactPos(t); \ ??AddStringToLog_9: \ 00000230 0400A0E1 MOV R0,R4 \ 00000234 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2787 } \ ??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 2788 2789 void ParseAnswer(WSHDR *ws, const char *s); 2790 2791 int time_to_stop_t9; 2792 \ In segment CODE, align 4, keep-with-next 2793 void ParseXStatusText(WSHDR *ws, const char *s, int color) 2794 { \ ParseXStatusText: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0150A0E1 MOV R5,R1 \ 0000000C 0260A0E1 MOV R6,R2 2795 int c; 2796 int flag=0; \ 00000010 0070A0E3 MOV R7,#+0 2797 CutWSTR(ws,0); \ 00000014 0010A0E3 MOV R1,#+0 \ 00000018 260100EF SWI +294 2798 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} 2799 wsAppendChar(ws,0xE008); \ 0000002C 0810A0E3 MOV R1,#+8 \ 00000030 E01C81E3 ORR R1,R1,#0xE000 \ 00000034 0400A0E1 MOV R0,R4 \ 00000038 1C0000EF SWI +28 2800 wsAppendChar(ws,color); \ 0000003C 0610A0E1 MOV R1,R6 \ 00000040 0400A0E1 MOV R0,R4 \ 00000044 1C0000EF SWI +28 2801 wsAppendChar(ws,0xE013); \ 00000048 1310A0E3 MOV R1,#+19 \ 0000004C E01C81E3 ORR R1,R1,#0xE000 \ 00000050 0A0000EA B ??ParseXStatusText_0 2802 while((c=*s++)) 2803 { 2804 if (c==13) \ ??ParseXStatusText_1: \ 00000054 0D0050E3 CMP R0,#+13 2805 { 2806 if (!flag) \ 00000058 00005703 CMPEQ R7,#+0 \ 0000005C 0500001A BNE ??ParseXStatusText_2 2807 { 2808 flag=1; \ 00000060 0170A0E3 MOV R7,#+1 2809 wsAppendChar(ws,0xE012); \ 00000064 1210A0E3 MOV R1,#+18 \ 00000068 E01C81E3 ORR R1,R1,#0xE000 \ 0000006C 0400A0E1 MOV R0,R4 \ 00000070 1C0000EF SWI +28 2810 c=' '; \ 00000074 2000A0E3 MOV R0,#+32 2811 } 2812 } 2813 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 2814 } \ 00000088 ........ LDRB R0,[R5], #+1 \ 0000008C 000050E3 CMP R0,#+0 \ 00000090 EFFFFF1A BNE ??ParseXStatusText_1 \ 00000094 F080BDE8 POP {R4-R7,PC} ;; return 2815 } 2816 //Добавление итемов в чат при получении нового сообщения \ In segment CODE, align 4, keep-with-next 2817 void AddMsgToChat(void *data) 2818 { \ AddMsgToChat: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 40D04DE2 SUB SP,SP,#+64 2819 LOGQ *p; 2820 EDITCONTROL ec; 2821 EDITC_OPTIONS ec_options; 2822 EDCHAT_STRUCT *ed_struct; 2823 int j; 2824 int color, font, type; 2825 int zc; 2826 if (!data) return; \ 00000008 000050E3 CMP R0,#+0 \ 0000000C C900000A BEQ ??AddMsgToChat_0 2827 ed_struct=EDIT_GetUserPointer(data); \ 00000010 DF0100EF SWI +479 \ 00000014 0060B0E1 MOVS R6,R0 2828 if (!ed_struct) return; \ 00000018 C600000A BEQ ??AddMsgToChat_0 2829 if (!ed_struct->ed_contact->isunread) return; \ 0000001C 000096E5 LDR R0,[R6, #+0] \ 00000020 601090E5 LDR R1,[R0, #+96] \ 00000024 000051E3 CMP R1,#+0 \ 00000028 C200000A BEQ ??AddMsgToChat_0 2830 2831 2832 p=ed_struct->ed_contact->last_log; \ 0000002C 787090E5 LDR R7,[R0, #+120] 2833 if (p) \ 00000030 ........ LDR R8,??DataTable116 ;; S_ICONS \ 00000034 000057E3 CMP R7,#+0 \ 00000038 A800000A BEQ ??AddMsgToChat_1 2834 { 2835 while(p) 2836 { 2837 font = ED_H_FONT_SIZE; 2838 if ((zc=p->acked&3)) \ ??AddMsgToChat_2: \ 0000003C ........ LDR R2,??DataTable86 ;; ED_X_FONT_SIZE \ 00000040 ........ LDR R0,??DataTable108 ;; ED_H_FONT_SIZE \ 00000044 002092E5 LDR R2,[R2, #+0] \ 00000048 ........ LDR R1,??DataTable88 ;; 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,??DataTable89 ;; O_ED_X_FONT_SIZE \ 00000060 030010E2 ANDS R0,R0,#0x3 \ 00000064 009091E5 LDR R9,[R1, #+0] \ 00000068 ........ LDR R1,??DataTable90 ;; O_X_COLOR \ 0000006C 005091E5 LDR R5,[R1, #+0] \ 00000070 ........ LDR R1,??DataTable105 ;; I_COLOR \ 00000074 00B091E5 LDR R11,[R1, #+0] \ 00000078 0300000A BEQ ??AddMsgToChat_3 2839 { 2840 if (zc==1) \ 0000007C 010050E3 CMP R0,#+1 \ 00000080 1E00001A BNE ??AddMsgToChat_4 2841 color=ACK_COLOR; //Зеленый \ 00000084 ........ LDR R0,??DataTable101 ;; ACK_COLOR \ 00000088 1B0000EA B ??AddMsgToChat_5 2842 else 2843 color=I_COLOR; 2844 //#endif 2845 } 2846 else 2847 { 2848 if (p->ID==0xFFFFFFFF) \ ??AddMsgToChat_3: \ 0000008C 080097E5 LDR R0,[R7, #+8] \ 00000090 010070E3 CMN R0,#+1 \ 00000094 1700001A BNE ??AddMsgToChat_6 2849 { 2850 type = p->type&0x0F; \ 00000098 0C0097E5 LDR R0,[R7, #+12] \ 0000009C 0F1000E2 AND R1,R0,#0xF 2851 if(p->type&0x10) \ 000000A0 100010E3 TST R0,#0x10 \ 000000A4 0B00000A BEQ ??AddMsgToChat_7 2852 { 2853 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000A8 010051E3 CMP R1,#+1 \ 000000AC ........ LDREQ R0,??DataTable103 ;; 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,??DataTable102 ;; O_TO_COLOR \ ??AddMsgToChat_8: \ 000000C8 00B090E5 LDR R11,[R0, #+0] \ 000000CC ........ LDR R0,??DataTable107 ;; O_ED_H_FONT_SIZE \ 000000D0 00A090E5 LDR R10,[R0, #+0] \ 000000D4 090000EA B ??AddMsgToChat_4 2854 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 2855 } 2856 else 2857 { 2858 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,??DataTable104 ;; TO_COLOR \ 000000F4 000000EA B ??AddMsgToChat_5 2859 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 2860 } 2861 } 2862 else 2863 color=UNACK_COLOR; //????? \ ??AddMsgToChat_6: \ 000000F8 ........ LDR R0,??DataTable106 ;; UNACK_COLOR \ ??AddMsgToChat_5: \ 000000FC 00B090E5 LDR R11,[R0, #+0] 2864 } 2865 PrepareEditControl(&ec); \ ??AddMsgToChat_4: \ 00000100 14008DE2 ADD R0,SP,#+20 \ 00000104 640100EF SWI +356 2866 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 2867 { 2868 ascii2ws(ews,p->hdr); \ 00000118 280198E5 LDR R0,[R8, #+296] \ 0000011C 101087E2 ADD R1,R7,#+16 \ 00000120 ........ _BLF ascii2ws,??ascii2ws??rA 2869 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000124 283198E5 LDR R3,[R8, #+296] \ 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 2870 } 2871 else 2872 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??AddMsgToChat_9: \ 0000013C 0000A0E3 MOV R0,#+0 \ 00000140 01002DE9 PUSH {R0} \ 00000144 283198E5 LDR R3,[R8, #+296] \ 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 2873 PrepareEditCOptions(&ec_options); \ 0000015C 04008DE2 ADD R0,SP,#+4 \ 00000160 C80100EF SWI +456 2874 SetPenColorToEditCOptions(&ec_options,color); \ 00000164 0B10A0E1 MOV R1,R11 \ 00000168 04008DE2 ADD R0,SP,#+4 \ 0000016C CC0100EF SWI +460 2875 SetFontToEditCOptions(&ec_options,font); \ 00000170 0A10A0E1 MOV R1,R10 \ 00000174 04008DE2 ADD R0,SP,#+4 \ 00000178 CA0100EF SWI +458 2876 CopyOptionsToEditControl(&ec,&ec_options); \ 0000017C 04108DE2 ADD R1,SP,#+4 \ 00000180 14008DE2 ADD R0,SP,#+20 \ 00000184 CE0100EF SWI +462 2877 //AddEditControlToEditQend(eq,&ec,ma); 2878 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 2879 ed_struct->ed_answer++; \ 0000019C 080096E5 LDR R0,[R6, #+8] \ 000001A0 010080E2 ADD R0,R0,#+1 \ 000001A4 080086E5 STR R0,[R6, #+8] 2880 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 2881 { 2882 ParseAnswer(ews,p->text); \ 000001B8 280198E5 LDR R0,[R8, #+296] \ 000001BC 601087E2 ADD R1,R7,#+96 \ 000001C0 ........ BL ParseAnswer \ 000001C4 050000EA B ??AddMsgToChat_12 2883 } 2884 else 2885 { 2886 ParseXStatusText(ews, p->text, (p->type&0x10)?O_X_COLOR:X_COLOR); \ ??AddMsgToChat_11: \ 000001C8 100010E3 TST R0,#0x10 \ 000001CC 280198E5 LDR R0,[R8, #+296] \ 000001D0 0520A011 MOVNE R2,R5 \ 000001D4 0420A001 MOVEQ R2,R4 \ 000001D8 601087E2 ADD R1,R7,#+96 \ 000001DC ........ BL ParseXStatusText 2887 } 2888 PrepareEditControl(&ec); \ ??AddMsgToChat_12: \ 000001E0 14008DE2 ADD R0,SP,#+20 \ 000001E4 640100EF SWI +356 2889 ConstructEditControl(&ec, 2890 ECT_NORMAL_TEXT, 2891 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 2892 ews,ews->wsbody[0]); \ 000001E8 283198E5 LDR R3,[R8, #+296] \ 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 2893 PrepareEditCOptions(&ec_options); \ 00000214 08008DE2 ADD R0,SP,#+8 \ 00000218 C80100EF SWI +456 2894 //#ifdef M75 2895 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 2896 { 2897 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 00000230 100010E3 TST R0,#0x10 \ 00000234 ........ LDRNE R0,??DataTable98 ;; O_ED_FONT_SIZE \ 00000238 ........ LDREQ R0,??DataTable99 ;; ED_FONT_SIZE \ 0000023C 001090E5 LDR R1,[R0, #+0] \ 00000240 080000EA B ??AddMsgToChat_14 2898 } 2899 else 2900 { 2901 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 2902 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 2903 } 2904 //#else 2905 // SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 2906 //#endif 2907 CopyOptionsToEditControl(&ec,&ec_options); \ 00000270 04108DE2 ADD R1,SP,#+4 \ 00000274 14008DE2 ADD R0,SP,#+20 \ 00000278 CE0100EF SWI +462 2908 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 2909 ed_struct->ed_answer++; \ 00000290 080096E5 LDR R0,[R6, #+8] \ 00000294 010080E2 ADD R0,R0,#+1 \ 00000298 080086E5 STR R0,[R6, #+8] 2910 p=p->next; \ 0000029C 007097E5 LDR R7,[R7, #+0] 2911 } \ 000002A0 000057E3 CMP R7,#+0 \ 000002A4 64FFFF1A BNE ??AddMsgToChat_2 2912 j=((ed_struct->ed_contact->msg_count+1)*2); //Ожидаемый ed_answer \ 000002A8 001096E5 LDR R1,[R6, #+0] \ 000002AC 801091E5 LDR R1,[R1, #+128] \ 000002B0 011081E2 ADD R1,R1,#+1 \ 000002B4 8140A0E1 LSL R4,R1,#+1 \ 000002B8 000054E1 CMP R4,R0 \ 000002BC 070000AA BGE ??AddMsgToChat_1 2913 while(jed_answer) 2914 { 2915 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??AddMsgToChat_15: \ 000002C0 040096E5 LDR R0,[R6, #+4] \ 000002C4 0110A0E3 MOV R1,#+1 \ 000002C8 D10100EF SWI +465 2916 ed_struct->ed_answer--; \ 000002CC 080096E5 LDR R0,[R6, #+8] \ 000002D0 010040E2 SUB R0,R0,#+1 \ 000002D4 080086E5 STR R0,[R6, #+8] 2917 } \ 000002D8 000054E1 CMP R4,R0 \ 000002DC F7FFFFBA BLT ??AddMsgToChat_15 2918 } 2919 ed_struct->ed_contact->last_log=NULL; \ ??AddMsgToChat_1: \ 000002E0 000096E5 LDR R0,[R6, #+0] \ 000002E4 0040A0E3 MOV R4,#+0 \ 000002E8 784080E5 STR R4,[R0, #+120] 2920 if (IsGuiOnTop(edchat_id)) \ 000002EC C00198E5 LDR R0,[R8, #+448] \ 000002F0 350100EF SWI +309 \ 000002F4 000050E3 CMP R0,#+0 \ 000002F8 0300000A BEQ ??AddMsgToChat_16 2921 { 2922 total_unread--; \ 000002FC B00198E5 LDR R0,[R8, #+432] \ 00000300 010040E2 SUB R0,R0,#+1 \ 00000304 B00188E5 STR R0,[R8, #+432] \ 00000308 020000EA B ??AddMsgToChat_17 2923 } 2924 else 2925 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] 2926 ed_struct->ed_contact->isunread=0; \ ??AddMsgToChat_17: \ 00000318 000096E5 LDR R0,[R6, #+0] \ 0000031C 604080E5 STR R4,[R0, #+96] 2927 total_unread2=total_unread2-ed_struct->ed_contact->unread_msg; \ 00000320 101198E5 LDR R1,[R8, #+272] \ 00000324 642090E5 LDR R2,[R0, #+100] \ 00000328 021041E0 SUB R1,R1,R2 \ 0000032C 101188E5 STR R1,[R8, #+272] 2928 ed_struct->ed_contact->unread_msg=0; \ 00000330 644080E5 STR R4,[R0, #+100] 2929 ChangeContactPos(ed_struct->ed_contact); \ 00000334 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 2930 // EDIT_SetFocus(data,ed_struct->ed_answer); 2931 } \ ??AddMsgToChat_0: \ 00000338 44D08DE2 ADD SP,SP,#+68 ;; stack cleaning \ 0000033C F08FBDE8 POP {R4-R11,PC} ;; return 2932 2933 //Рисуем подтверждения непосредственно \ In segment CODE, align 4, keep-with-next 2934 void DrawAck(void *data) 2935 { \ DrawAck: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 3CD04DE2 SUB SP,SP,#+60 \ 00000008 0040B0E1 MOVS R4,R0 2936 LOGQ *p; 2937 EDITCONTROL ec; 2938 EDITC_OPTIONS ec_options; 2939 EDCHAT_STRUCT *ed_struct; 2940 int j; 2941 int color; 2942 int dorefresh=0; \ 0000000C 0060A0E3 MOV R6,#+0 2943 if (!data) return; \ 00000010 4C00000A BEQ ??DrawAck_0 2944 ed_struct=EDIT_GetUserPointer(data); \ 00000014 DF0100EF SWI +479 2945 if (!ed_struct) return; \ 00000018 000050E3 CMP R0,#+0 \ 0000001C 4900000A BEQ ??DrawAck_0 2946 p=ed_struct->ed_contact->log; \ 00000020 001090E5 LDR R1,[R0, #+0] 2947 j=ed_struct->ed_answer; 2948 j-=(ed_struct->ed_contact->msg_count*2)+1; //Номер собственно хедера верхнего итема \ 00000024 080090E5 LDR R0,[R0, #+8] \ 00000028 705091E5 LDR R5,[R1, #+112] \ 0000002C 801091E5 LDR R1,[R1, #+128] \ 00000030 000055E3 CMP R5,#+0 \ 00000034 810040E0 SUB R0,R0,R1, LSL #+1 \ 00000038 017040E2 SUB R7,R0,#+1 \ 0000003C 3A00000A BEQ ??DrawAck_1 2949 while(p) 2950 { 2951 if (j>=1) //Пока возможно лишнее \ ??DrawAck_2: \ 00000040 010057E3 CMP R7,#+1 \ 00000044 340000BA BLT ??DrawAck_3 2952 { 2953 if (!(p->acked&4)) \ 00000048 040095E5 LDR R0,[R5, #+4] \ 0000004C 040010E3 TST R0,#0x4 \ 00000050 3100001A BNE ??DrawAck_3 2954 { 2955 ExtractEditControl(data,j,&ec); \ 00000054 10208DE2 ADD R2,SP,#+16 \ 00000058 0710A0E1 MOV R1,R7 \ 0000005C 0400A0E1 MOV R0,R4 \ 00000060 690100EF SWI +361 2956 PrepareEditCOptions(&ec_options); \ 00000064 0D00A0E1 MOV R0,SP \ 00000068 C80100EF SWI +456 2957 if (p->acked) \ 0000006C 040095E5 LDR R0,[R5, #+4] \ 00000070 000050E3 CMP R0,#+0 \ 00000074 0300000A BEQ ??DrawAck_4 2958 { 2959 if (p->acked==1) \ 00000078 010050E3 CMP R0,#+1 \ 0000007C ........ LDRNE R0,??DataTable105 ;; I_COLOR 2960 color=ACK_COLOR; //Зеленый \ 00000080 ........ LDREQ R0,??DataTable101 ;; ACK_COLOR \ 00000084 0F0000EA B ??DrawAck_5 2961 else 2962 color=I_COLOR; 2963 } 2964 else 2965 { 2966 if (p->ID==0xFFFFFFFF) \ ??DrawAck_4: \ 00000088 080095E5 LDR R0,[R5, #+8] \ 0000008C 010070E3 CMN R0,#+1 \ 00000090 0B00001A BNE ??DrawAck_6 2967 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,??DataTable102 ;; O_TO_COLOR \ 000000AC ........ LDREQ R0,??DataTable103 ;; O_I_COLOR \ 000000B0 040000EA B ??DrawAck_5 \ ??DrawAck_7: \ 000000B4 010050E3 CMP R0,#+1 \ 000000B8 ........ LDRNE R0,??DataTable104 ;; TO_COLOR \ 000000BC ........ LDREQ R0,??DataTable105 ;; I_COLOR \ 000000C0 000000EA B ??DrawAck_5 2968 else 2969 color=UNACK_COLOR; //Серый \ ??DrawAck_6: \ 000000C4 ........ LDR R0,??DataTable106 ;; UNACK_COLOR 2970 } 2971 SetPenColorToEditCOptions(&ec_options,color/*p->type==1?I_COLOR:TO_COLOR*/); 2972 SetFontToEditCOptions(&ec_options,(p->type&0x10)?O_ED_H_FONT_SIZE:ED_H_FONT_SIZE); 2973 CopyOptionsToEditControl(&ec,&ec_options); 2974 StoreEditControl(data,j,&ec); 2975 p->acked|=4; //Обработали 2976 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,??DataTable107 ;; O_ED_H_FONT_SIZE \ 000000E4 ........ LDREQ R0,??DataTable108 ;; 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] 2977 } 2978 } 2979 j+=2; 2980 p=p->next; \ ??DrawAck_3: \ 0000011C 005095E5 LDR R5,[R5, #+0] \ 00000120 027087E2 ADD R7,R7,#+2 2981 } \ 00000124 000055E3 CMP R5,#+0 \ 00000128 C4FFFF1A BNE ??DrawAck_2 2982 if (IsGuiOnTop(edchat_id)&&dorefresh) RefreshGUI(); \ ??DrawAck_1: \ 0000012C 1C009FE5 LDR R0,??DrawAck_8 ;; S_ICONS + 448 \ 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 + 448 2983 } 2984 \ In segment CODE, align 4, keep-with-next 2985 void ask_my_info(void) 2986 { 2987 /* TPKT *p; 2988 CLIST *t; 2989 p=malloc(sizeof(PKT)); 2990 p->pkt.uin=UIN; 2991 p->pkt.type=T_REQINFOSHORT; 2992 p->pkt.data_len=0; 2993 // AddStringToLog(t,0x01,"Request info...",I_str); 2994 SUBPROC((void *)SendAnswer,0,p);*/ 2995 } \ ask_my_info: \ 00000000 1EFF2FE1 BX LR ;; return 2996 \ In segment CODE, align 4, keep-with-next 2997 void set_my_status(void) 2998 { \ set_my_status: \ 00000000 00402DE9 PUSH {LR} 2999 TPKT *p; 3000 p=malloc(sizeof(PKT)+1); \ 00000004 0900A0E3 MOV R0,#+9 \ 00000008 140000EF SWI +20 3001 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 0000000C 0010A0E3 MOV R1,#+0 \ 00000010 001080E5 STR R1,[R0, #+0] 3002 p->pkt.type=T_MY_STATUS_CH; // Тип пакета: изменение статуса \ 00000014 0F10A0E3 MOV R1,#+15 \ 00000018 B410C0E1 STRH R1,[R0, #+4] 3003 p->pkt.data_len=1; // Длина пакета: 1 байт \ 0000001C 0110A0E3 MOV R1,#+1 \ 00000020 B610C0E1 STRH R1,[R0, #+6] 3004 p->data[0]=CurrentStatus; \ 00000024 18109FE5 LDR R1,??set_my_status_0 ;; S_ICONS + 372 3005 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,??DataTable119 ;; SendAnswer \ 00000038 0010A0E3 MOV R1,#+0 \ 0000003C 710100EF SWI +369 3006 } \ 00000040 0080BDE8 POP {PC} ;; return \ ??set_my_status_0: \ 00000044 ........ DC32 S_ICONS + 372 3007 3008 extern int Send0; 3009 \ In segment CODE, align 4, keep-with-next 3010 void set_my_xstatus(void) 3011 { \ set_my_xstatus: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 3012 #ifdef NEWSGOLD 3013 if(Is_Id3tag_Enabled) \ 00000004 ........ LDR R4,??DataTable119 ;; SendAnswer \ 00000008 ........ LDR R10,??DataTable116 ;; S_ICONS \ 0000000C ........ LDR R8,??DataTable112 ;; CurrentXStatus \ 00000010 0CD04DE2 SUB SP,SP,#+12 \ 00000014 24019AE5 LDR R0,[R10, #+292] \ 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 3014 { 3015 if(CurrentXStatus!=11) \ 00000030 000098E5 LDR R0,[R8, #+0] \ 00000034 0B0050E3 CMP R0,#+11 \ 00000038 7200000A BEQ ??set_my_xstatus_1 3016 { 3017 #endif 3018 TPKT *p; 3019 char *s1; 3020 char *s2; 3021 int l1; 3022 int l2; 3023 p=malloc(sizeof(PKT)+1); \ 0000003C 0900A0E3 MOV R0,#+9 \ 00000040 140000EF SWI +20 \ 00000044 00A0A0E1 MOV R10,R0 3024 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000048 00908AE5 STR R9,[R10, #+0] 3025 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 0000004C B470CAE1 STRH R7,[R10, #+4] 3026 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000050 B660CAE1 STRH R6,[R10, #+6] 3027 p->data[0]=CurrentXStatus; \ 00000054 000098E5 LDR R0,[R8, #+0] 3028 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 3029 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 3030 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 3031 if ((!s1)||(!s2)) return; \ 0000009C 000056E3 CMP R6,#+0 \ 000000A0 00005713 CMPNE R7,#+0 \ 000000A4 F78FBD08 POPEQ {R0-R2,R4-R11,PC} 3032 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 3033 p->pkt.uin=0; \ 000000C0 00908AE5 STR R9,[R10, #+0] 3034 p->pkt.type=T_XTEXT_SET; \ 000000C4 B450CAE1 STRH R5,[R10, #+4] 3035 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] 3036 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 3037 p->data[l1]=0; \ 000000EC 00009DE5 LDR R0,[SP, #+0] 3038 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 3039 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} 3040 #ifdef NEWSGOLD 3041 } 3042 else 3043 { 3044 tracktimer=0; 3045 GetTags(); 3046 } 3047 } 3048 else 3049 { 3050 TPKT *p; 3051 char *s1; 3052 char *s2; 3053 int l1; 3054 int l2; 3055 p=malloc(sizeof(PKT)+1); \ ??set_my_xstatus_0: \ 00000124 0900A0E3 MOV R0,#+9 \ 00000128 140000EF SWI +20 \ 0000012C 00B0A0E1 MOV R11,R0 3056 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере \ 00000130 00908BE5 STR R9,[R11, #+0] 3057 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса \ 00000134 B470CBE1 STRH R7,[R11, #+4] 3058 p->pkt.data_len=1; // Длина пакета: 1 байт \ 00000138 B660CBE1 STRH R6,[R11, #+6] 3059 p->data[0]=CurrentXStatus; \ 0000013C 000098E5 LDR R0,[R8, #+0] 3060 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 3061 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 3062 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 3063 if ((!s1)||(!s2)) return; \ 00000184 000056E3 CMP R6,#+0 \ 00000188 00005713 CMPNE R7,#+0 \ 0000018C F78FBD08 POPEQ {R0-R2,R4-R11,PC} 3064 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 3065 p->pkt.uin=0; \ 000001A8 00908BE5 STR R9,[R11, #+0] 3066 p->pkt.type=T_XTEXT_SET; \ 000001AC B450CBE1 STRH R5,[R11, #+4] 3067 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] 3068 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 3069 p->data[l1]=0; \ 000001D4 00009DE5 LDR R0,[SP, #+0] 3070 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 3071 SUBPROC((void *)SendAnswer,0,p); \ 000001F8 0B20A0E1 MOV R2,R11 \ 000001FC 0010A0E3 MOV R1,#+0 \ 00000200 0400A0E1 MOV R0,R4 \ 00000204 710100EF SWI +369 3072 tracktimer=0; \ ??set_my_xstatus_1: \ 00000208 54918AE5 STR R9,[R10, #+340] 3073 GetTags(); \ 0000020C ........ _BLF GetTags,??GetTags??rA \ 00000210 F78FBDE8 POP {R0-R2,R4-R11,PC} ;; return 3074 } 3075 #endif 3076 } 3077 #ifdef NEWSGOLD 3078 extern const char playing[13]; 3079 \ In segment CODE, align 4, keep-with-next 3080 void set_my_xstatus2(void) 3081 { \ set_my_xstatus2: \ 00000000 F0472DE9 PUSH {R4-R10,LR} 3082 TPKT *p; 3083 // char *s1; 3084 // char *s2; 3085 int l1; 3086 int l2; 3087 p=malloc(sizeof(PKT)+1); 3088 p->pkt.uin=0; // Никому; поле нужно проигнорировать на сервере 3089 p->pkt.type=T_MY_XSTATUS_CH; // Тип пакета: изменение статуса 3090 p->pkt.data_len=1; // Длина пакета: 1 байт 3091 p->data[0]=11; 3092 SUBPROC((void *)SendAnswer,0,p); \ 00000004 ........ LDR R6,??DataTable119 ;; SendAnswer 3093 // char *s1; 3094 char *sk2=malloc(256); 3095 // strcpy(s1, playing); 3096 // s1="Now playing:"; 3097 strcpy(sk2,teast2); 3098 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 3099 l2=strlen(sk2); \ 0000006C 0700A0E1 MOV R0,R7 \ 00000070 1B0000EF SWI +27 \ 00000074 00A0A0E1 MOV R10,R0 3100 if ((!playing)||(!sk2)) return; \ 00000078 000057E3 CMP R7,#+0 \ 0000007C F187BD08 POPEQ {R0,R4-R10,PC} 3101 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 3102 p->pkt.uin=0; \ 00000090 005084E5 STR R5,[R4, #+0] 3103 p->pkt.type=T_XTEXT_SET; \ 00000094 1A00A0E3 MOV R0,#+26 \ 00000098 B400C4E1 STRH R0,[R4, #+4] 3104 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] 3105 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 3106 p->data[l1]=0; \ 000000B8 040089E0 ADD R0,R9,R4 \ 000000BC 0850C0E5 STRB R5,[R0, #+8] 3107 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 3108 mfree(sk2); \ 000000D0 0700A0E1 MOV R0,R7 \ 000000D4 150000EF SWI +21 3109 SUBPROC((void *)SendAnswer,0,p); \ 000000D8 0420A0E1 MOV R2,R4 \ 000000DC 0010A0E3 MOV R1,#+0 \ 000000E0 0600A0E1 MOV R0,R6 \ 000000E4 710100EF SWI +369 3110 // mfree(s1); 3111 // mfree(s2); 3112 } \ 000000E8 F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??set_my_xstatus2_0: \ 000000EC ........ DC32 playing \ 000000F0 ........ DC32 teast2 3113 #endif \ In segment CODE, align 4, keep-with-next 3114 void to_develop(void) 3115 { 3116 if (silenthide) return; \ to_develop: \ 00000000 ........ LDR R0,??DataTable116 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 5C1190E5 LDR R1,[R0, #+348] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD18 POPNE {PC} 3117 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable118 ;; `?ed_contact==t) \ 00000034 000090E5 LDR R0,[R0, #+0] \ 00000038 040050E1 CMP R0,R4 \ 0000003C 7080BD18 POPNE {R4-R6,PC} 3134 { 3135 if (EDIT_IsBusy(data)) \ 00000040 0600A0E1 MOV R0,R6 \ 00000044 1C0200EF SWI +540 \ 00000048 000050E3 CMP R0,#+0 \ 0000004C 0400000A BEQ ??ReqAddMsgToChat_0 3136 { 3137 t->req_add=1; \ 00000050 0100A0E3 MOV R0,#+1 \ 00000054 680084E5 STR R0,[R4, #+104] 3138 #ifdef EVILFOX 3139 time_to_stop_t9=2; 3140 #else 3141 time_to_stop_t9=3; \ 00000058 0300A0E3 MOV R0,#+3 \ 0000005C E80185E5 STR R0,[R5, #+488] \ 00000060 7080BDE8 POP {R4-R6,PC} 3142 #endif 3143 } 3144 else 3145 { 3146 AddMsgToChat(data); \ ??ReqAddMsgToChat_0: \ 00000064 0600A0E1 MOV R0,R6 \ 00000068 ........ BL AddMsgToChat 3147 DirectRedrawGUI_ID(edchat_id); \ 0000006C C00195E5 LDR R0,[R5, #+448] \ 00000070 400100EF SWI +320 3148 } 3149 } 3150 } 3151 } 3152 } 3153 } \ 00000074 7080BDE8 POP {R4-R6,PC} ;; return 3154 3155 GBSTMR develop; 3156 \ In segment CODE, align 4, keep-with-next 3157 void begin_to_develop() 3158 { \ begin_to_develop: \ 00000000 00402DE9 PUSH {LR} 3159 if(IsUnlocked()) \ 00000004 430000EF SWI +67 \ 00000008 000050E3 CMP R0,#+0 \ 0000000C 0100000A BEQ ??begin_to_develop_0 3160 to_develop(); \ 00000010 0040BDE8 POP {LR} ;; Pop \ 00000014 ........ B to_develop ;; tailcall 3161 else 3162 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 + 6912 \ 00000020 6410A0E3 MOV R1,#+100 \ 00000024 4D0000EF SWI +77 3163 } \ 00000028 0080BDE8 POP {PC} ;; return \ ??begin_to_develop_1: \ 0000002C ........ DC32 begin_to_develop \ 00000030 ........ DC32 S_ICONS + 6912 3164 ////=================================comand lists 3165 int comanda; 3166 3167 char requests1[]="Sending online time..."; 3168 char requests2[]="Sending msg info..."; 3169 char requests3[]="Sending battery info..."; 3170 char requests4[]="Sending mod info..."; 3171 char requests6[]="Sending offline info..."; 3172 3173 extern const int show_send_info; 3174 3175 #ifdef kluchnik 3176 extern const unsigned int AUTOBOT_UIN; 3177 int autobot; 3178 #endif 3179 3180 char mod_info[264]; 3181 3182 const char ipc_game_name[]="Combats"; 3183 IPC_REQ game_gipc; 3184 #define IPC_GAME_DATA 24 3185 3186 #ifdef kluchnik 3187 void AutobotInit() 3188 { 3189 if(autobot==1) 3190 { 3191 autobot=0; 3192 ShowMSG(1,(int)"Autobot Off"); 3193 } 3194 else 3195 { 3196 autobot=1; 3197 ShowMSG(1,(int)"Autobot On"); 3198 } 3199 } 3200 #endif 3201 3202 \ In segment CODE, align 4, keep-with-next 3203 void CheckComand(char *txt, CLIST *t, char *ddd) 3204 { \ CheckComand: \ 00000000 F44F2DE9 PUSH {R2,R4-R11,LR} 3205 comanda=1; \ 00000004 ........ LDR R6,??DataTable125 ;; S_ICONS 3206 sprintf(mod_info,"mod by Evilfox,kluchnik,windes based on revision 2058, mod date: %s at %s ",__DATE__,__TIME__); \ 00000008 ........ LDR R7,??DataTable118 ;; `?pkt.uin=t->uin; \ 00000100 0C0095E5 LDR R0,[R5, #+12] \ 00000104 000084E5 STR R0,[R4, #+0] 3227 p->pkt.type=T_SENDMSG; \ 00000108 B4A0C4E1 STRH R10,[R4, #+4] 3228 p->pkt.data_len=strlen(online); \ 0000010C 20008DE2 ADD R0,SP,#+32 \ 00000110 1B0000EF SWI +27 \ 00000114 B600C4E1 STRH R0,[R4, #+6] 3229 strcpy(p->data,online); \ 00000118 20108DE2 ADD R1,SP,#+32 \ 0000011C 080084E2 ADD R0,R4,#+8 \ 00000120 1A0000EF SWI +26 3230 #ifdef EVILFOX 3231 SENDMSGCOUNT++; 3232 #else 3233 if(show_send_info) \ 00000124 3C059FE5 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 3234 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 1000A0E3 MOV R0,#+16 \ 0000015C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000160 062080E0 ADD R2,R0,R6 \ 00000164 0500A0E1 MOV R0,R5 \ 00000168 ........ BL AddStringToLog \ 0000016C 08D08DE2 ADD SP,SP,#+8 3235 else 3236 SENDMSGCOUNT++; 3237 #endif 3238 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 3239 return; \ ??CheckComand_1: \ 00000180 47DF8DE2 ADD SP,SP,#+284 \ 00000184 F08FBDE8 POP {R4-R11,PC} 3240 } 3241 3242 if(!strcmp(txt, "GET_MSG_INFO")) \ ??CheckComand_2: \ 00000188 871F87E2 ADD R1,R7,#+540 \ 0000018C 0400A0E1 MOV R0,R4 \ 00000190 190000EF SWI +25 \ 00000194 000050E3 CMP R0,#+0 \ 00000198 2800001A BNE ??CheckComand_5 3243 { 3244 comanda=0; \ 0000019C EC0186E5 STR R0,[R6, #+492] 3245 TPKT *p; 3246 char *send_txt=malloc(64); \ 000001A0 4000A0E3 MOV R0,#+64 \ 000001A4 140000EF SWI +20 \ 000001A8 0040A0E1 MOV R4,R0 3247 sprintf(send_txt, "Отправлено сообщений: %d \n" 3248 "Принято сообщений: %d" 3249 , main2_count, main_count); \ 000001AC ........ LDR R0,??DataTable120 ;; main_count \ 000001B0 7B1F87E2 ADD R1,R7,#+492 \ 000001B4 003090E5 LDR R3,[R0, #+0] \ 000001B8 ........ LDR R0,??DataTable121 ;; main2_count \ 000001BC 002090E5 LDR R2,[R0, #+0] \ 000001C0 0400A0E1 MOV R0,R4 \ 000001C4 160000EF SWI +22 3250 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 3251 p->pkt.uin=t->uin; \ 000001DC 0C0095E5 LDR R0,[R5, #+12] \ 000001E0 00008BE5 STR R0,[R11, #+0] 3252 p->pkt.type=T_SENDMSG; \ 000001E4 B4A0CBE1 STRH R10,[R11, #+4] 3253 p->pkt.data_len=strlen(send_txt); \ 000001E8 0400A0E1 MOV R0,R4 \ 000001EC 1B0000EF SWI +27 \ 000001F0 B600CBE1 STRH R0,[R11, #+6] 3254 strcpy(p->data,send_txt); \ 000001F4 0410A0E1 MOV R1,R4 \ 000001F8 08008BE2 ADD R0,R11,#+8 \ 000001FC 1A0000EF SWI +26 3255 #ifdef EVILFOX 3256 SENDMSGCOUNT++; 3257 #else 3258 if(show_send_info) \ 00000200 60049FE5 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 0A01000A BEQ ??CheckComand_6 3259 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 2800A0E3 MOV R0,#+40 \ 00000234 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000238 062080E0 ADD R2,R0,R6 \ 0000023C FE0000EA B ??CheckComand_7 3260 else 3261 SENDMSGCOUNT++; 3262 #endif 3263 SUBPROC((void *)SendAnswer,0,p); 3264 mfree(send_txt); 3265 return; 3266 } 3267 3268 //==========================windes commands begin ===================== 3269 3270 if(!strcmp(txt, "GET_PROVIDER")) \ ??CheckComand_5: \ 00000240 961F87E2 ADD R1,R7,#+600 \ 00000244 0400A0E1 MOV R0,R4 \ 00000248 190000EF SWI +25 \ 0000024C 000050E3 CMP R0,#+0 \ 00000250 2D00001A BNE ??CheckComand_8 3271 { 3272 comanda=0; \ 00000254 EC0186E5 STR R0,[R6, #+492] 3273 TPKT *p; 3274 3275 WSHDR *ws=AllocWS(32); \ 00000258 2000A0E3 MOV R0,#+32 \ 0000025C 250100EF SWI +293 \ 00000260 00B0A0E1 MOV R11,R0 3276 GetProvider(ws,0); \ 00000264 0010A0E3 MOV R1,#+0 \ 00000268 410000EF SWI +65 3277 char prov[16]; 3278 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 3279 char *send_txt=malloc(32); \ 00000284 2000A0E3 MOV R0,#+32 \ 00000288 140000EF SWI +20 \ 0000028C 0040A0E1 MOV R4,R0 3280 sprintf(send_txt, "Оператор: %s", prov); \ 00000290 08208DE2 ADD R2,SP,#+8 \ 00000294 8B1F87E2 ADD R1,R7,#+556 \ 00000298 160000EF SWI +22 3281 FreeWS(ws); \ 0000029C 0B00A0E1 MOV R0,R11 \ 000002A0 290100EF SWI +297 3282 3283 p=malloc(sizeof(PKT)+28+1); \ 000002A4 2500A0E3 MOV R0,#+37 \ 000002A8 140000EF SWI +20 \ 000002AC 00B0A0E1 MOV R11,R0 3284 p->pkt.uin=t->uin; \ 000002B0 0C0095E5 LDR R0,[R5, #+12] \ 000002B4 00008BE5 STR R0,[R11, #+0] 3285 p->pkt.type=T_SENDMSG; \ 000002B8 B4A0CBE1 STRH R10,[R11, #+4] 3286 p->pkt.data_len=strlen(send_txt); \ 000002BC 0400A0E1 MOV R0,R4 \ 000002C0 1B0000EF SWI +27 \ 000002C4 B600CBE1 STRH R0,[R11, #+6] 3287 strcpy(p->data,send_txt); \ 000002C8 0410A0E1 MOV R1,R4 \ 000002CC 08008BE2 ADD R0,R11,#+8 \ 000002D0 1A0000EF SWI +26 3288 if(show_send_info) \ 000002D4 8C039FE5 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 D500000A BEQ ??CheckComand_6 3289 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 8F2F87E2 ADD R2,R7,#+572 \ 00000308 CB0000EA B ??CheckComand_7 3290 else 3291 SENDMSGCOUNT++; 3292 SUBPROC((void *)SendAnswer,0,p); 3293 mfree(send_txt); 3294 return; 3295 } 3296 3297 //----------------------------------------------------------------------- 3298 3299 if(!strcmp(txt, "GET_MOD_INFO")) \ ??CheckComand_8: \ 0000030C 9F1F87E2 ADD R1,R7,#+636 \ 00000310 0400A0E1 MOV R0,R4 \ 00000314 190000EF SWI +25 \ 00000318 000050E3 CMP R0,#+0 \ 0000031C 3300001A BNE ??CheckComand_9 3300 { 3301 comanda=0; \ 00000320 EC0186E5 STR R0,[R6, #+492] 3302 TPKT *p; 3303 char *send_txt=malloc(256); \ 00000324 400FA0E3 MOV R0,#+256 \ 00000328 140000EF SWI +20 \ 0000032C 0040A0E1 MOV R4,R0 3304 // sprintf(I_UIN, "uin%d", t->uin); 3305 strcpy(I_UIN, t->name); \ 00000330 0410A0E3 MOV R1,#+4 \ 00000334 681D81E3 ORR R1,R1,#0x1A00 \ 00000338 061081E0 ADD R1,R1,R6 \ 0000033C 00108DE5 STR R1,[SP, #+0] \ 00000340 00009DE5 LDR R0,[SP, #+0] \ 00000344 141085E2 ADD R1,R5,#+20 \ 00000348 1A0000EF SWI +26 3306 if(strstr(ignor_list,I_UIN)==0) \ 0000034C 00109DE5 LDR R1,[SP, #+0] \ 00000350 ........ LDR R0,??DataTable122 ;; ignor_list \ 00000354 180100EF SWI +280 \ 00000358 000050E3 CMP R0,#+0 3307 { 3308 strcpy(send_txt, mod_info); \ 0000035C 0B10A001 MOVEQ R1,R11 3309 } 3310 else 3311 strcpy(send_txt, "***Access denied***"); \ 00000360 9A1F8712 ADDNE R1,R7,#+616 \ 00000364 0400A0E1 MOV R0,R4 \ 00000368 1A0000EF SWI +26 3312 3313 strcpy(send_txt, mod_info); \ 0000036C 0B10A0E1 MOV R1,R11 \ 00000370 0400A0E1 MOV R0,R4 \ 00000374 1A0000EF SWI +26 3314 3315 p=malloc(sizeof(PKT)+strlen(send_txt)+1); \ 00000378 0400A0E1 MOV R0,R4 \ 0000037C 1B0000EF SWI +27 \ 00000380 090080E2 ADD R0,R0,#+9 \ 00000384 140000EF SWI +20 \ 00000388 00B0A0E1 MOV R11,R0 3316 p->pkt.uin=t->uin; \ 0000038C 0C0095E5 LDR R0,[R5, #+12] \ 00000390 00008BE5 STR R0,[R11, #+0] 3317 p->pkt.type=T_SENDMSG; \ 00000394 B4A0CBE1 STRH R10,[R11, #+4] 3318 p->pkt.data_len=strlen(send_txt); \ 00000398 0400A0E1 MOV R0,R4 \ 0000039C 1B0000EF SWI +27 \ 000003A0 B600CBE1 STRH R0,[R11, #+6] 3319 strcpy(p->data,send_txt); \ 000003A4 0410A0E1 MOV R1,R4 \ 000003A8 08008BE2 ADD R0,R11,#+8 \ 000003AC 1A0000EF SWI +26 3320 #ifdef EVILFOX 3321 SENDMSGCOUNT++; 3322 #else 3323 if(show_send_info) \ 000003B0 B0029FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 000003B4 000090E5 LDR R0,[R0, #+0] \ 000003B8 000050E3 CMP R0,#+0 \ 000003BC 1C0196E5 LDR R0,[R6, #+284] \ 000003C0 010080E2 ADD R0,R0,#+1 \ 000003C4 1C0186E5 STR R0,[R6, #+284] \ 000003C8 9E00000A BEQ ??CheckComand_6 3324 AddStringToLog(t,0x01,requests4,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 000003CC 0110A0E3 MOV R1,#+1 \ 000003D0 02002DE9 PUSH {R1} \ 000003D4 000009E0 AND R0,R9,R0 \ 000003D8 01002DE9 PUSH {R0} \ 000003DC 1F3087E2 ADD R3,R7,#+31 \ 000003E0 5400A0E3 MOV R0,#+84 \ 000003E4 6C0D80E3 ORR R0,R0,#0x1B00 \ 000003E8 062080E0 ADD R2,R0,R6 \ 000003EC 920000EA B ??CheckComand_7 3325 else 3326 SENDMSGCOUNT++; 3327 #endif 3328 SUBPROC((void *)SendAnswer,0,p); 3329 mfree(send_txt); 3330 return; 3331 } 3332 3333 if(!strcmp(txt, "GET_BAT_INFO")) \ ??CheckComand_9: \ 000003F0 AA1F87E2 ADD R1,R7,#+680 \ 000003F4 0400A0E1 MOV R0,R4 \ 000003F8 190000EF SWI +25 \ 000003FC 000050E3 CMP R0,#+0 \ 00000400 2400001A BNE ??CheckComand_10 3334 { 3335 comanda=0; \ 00000404 EC0186E5 STR R0,[R6, #+492] 3336 TPKT *p; 3337 int bat; 3338 bat=*RamCap(); \ 00000408 C88000EF SWI +32968 \ 0000040C B0B0D0E1 LDRH R11,[R0, #+0] 3339 char *send_txt=malloc(64); \ 00000410 4000A0E3 MOV R0,#+64 \ 00000414 140000EF SWI +20 \ 00000418 0040A0E1 MOV R4,R0 3340 sprintf(send_txt, "Заряд батареи: %d процентов", bat); \ 0000041C 0B20A0E1 MOV R2,R11 \ 00000420 A31F87E2 ADD R1,R7,#+652 \ 00000424 160000EF SWI +22 3341 p=malloc(sizeof(PKT)+28+1); \ 00000428 2500A0E3 MOV R0,#+37 \ 0000042C 140000EF SWI +20 \ 00000430 00B0A0E1 MOV R11,R0 3342 p->pkt.uin=t->uin; \ 00000434 0C0095E5 LDR R0,[R5, #+12] \ 00000438 00008BE5 STR R0,[R11, #+0] 3343 p->pkt.type=T_SENDMSG; \ 0000043C B4A0CBE1 STRH R10,[R11, #+4] 3344 p->pkt.data_len=strlen(send_txt); \ 00000440 0400A0E1 MOV R0,R4 \ 00000444 1B0000EF SWI +27 \ 00000448 B600CBE1 STRH R0,[R11, #+6] 3345 strcpy(p->data,send_txt); \ 0000044C 0410A0E1 MOV R1,R4 \ 00000450 08008BE2 ADD R0,R11,#+8 \ 00000454 1A0000EF SWI +26 3346 #ifdef EVILFOX 3347 SENDMSGCOUNT++; 3348 #else 3349 if(show_send_info) \ 00000458 08029FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 0000045C 000090E5 LDR R0,[R0, #+0] \ 00000460 000050E3 CMP R0,#+0 \ 00000464 1C0196E5 LDR R0,[R6, #+284] \ 00000468 010080E2 ADD R0,R0,#+1 \ 0000046C 1C0186E5 STR R0,[R6, #+284] \ 00000470 7400000A BEQ ??CheckComand_6 3350 AddStringToLog(t,0x01,requests3,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000474 0110A0E3 MOV R1,#+1 \ 00000478 02002DE9 PUSH {R1} \ 0000047C 000009E0 AND R0,R9,R0 \ 00000480 01002DE9 PUSH {R0} \ 00000484 1F3087E2 ADD R3,R7,#+31 \ 00000488 3C00A0E3 MOV R0,#+60 \ 0000048C 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000490 062080E0 ADD R2,R0,R6 \ 00000494 680000EA B ??CheckComand_7 3351 else 3352 SENDMSGCOUNT++; 3353 #endif 3354 SUBPROC((void *)SendAnswer,0,p); 3355 mfree(send_txt); 3356 return; 3357 } 3358 3359 if(away_m==1) \ ??CheckComand_10: \ 00000498 340196E5 LDR R0,[R6, #+308] \ 0000049C 010050E3 CMP R0,#+1 \ 000004A0 3700001A BNE ??CheckComand_11 3360 { 3361 comanda=1; \ 000004A4 EC0186E5 STR R0,[R6, #+492] 3362 TPKT *p; 3363 // sprintf(hah,"online: %02d:%02d:%02d", xstatus_old, minimum_xstatus, maximum); 3364 3365 if(inp_away_msg2)//Если ввели текст то выводим его,иначе из конфига \ 000004A8 300196E5 LDR R0,[R6, #+304] \ 000004AC FC20A0E3 MOV R2,#+252 \ 000004B0 502D82E3 ORR R2,R2,#0x1400 \ 000004B4 062082E0 ADD R2,R2,R6 \ 000004B8 00208DE5 STR R2,[SP, #+0] \ 000004BC 0410A0E3 MOV R1,#+4 \ 000004C0 581D81E3 ORR R1,R1,#0x1600 \ 000004C4 063081E0 ADD R3,R1,R6 \ 000004C8 000050E3 CMP R0,#+0 3366 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, ddd, inp_away_msg2, away_msg_time); 3367 else 3368 sprintf(away_msg, "Автоответчик: %s %s! %s %s", awayHelloMsg, ddd, awayMsg, away_msg_time); \ 000004CC ........ LDREQ R0,??DataTable123 ;; awayMsg \ 000004D0 94219FE5 LDR R2,??CheckComand_3+0x4 ;; awayHelloMsg \ 000004D4 08002DE9 PUSH {R3} \ 000004D8 01002DE9 PUSH {R0} \ 000004DC 20319DE5 LDR R3,[SP, #+288] \ 000004E0 08009DE5 LDR R0,[SP, #+8] \ 000004E4 AE1FA0E3 MOV R1,#+696 \ 000004E8 071081E0 ADD R1,R1,R7 \ 000004EC 160000EF SWI +22 \ 000004F0 08D08DE2 ADD SP,SP,#+8 3369 p=malloc(sizeof(PKT)+strlen(away_msg)+1); \ 000004F4 00009DE5 LDR R0,[SP, #+0] \ 000004F8 1B0000EF SWI +27 \ 000004FC 090080E2 ADD R0,R0,#+9 \ 00000500 140000EF SWI +20 \ 00000504 00B0A0E1 MOV R11,R0 3370 p->pkt.uin=t->uin; \ 00000508 0C0095E5 LDR R0,[R5, #+12] \ 0000050C 00008BE5 STR R0,[R11, #+0] 3371 p->pkt.type=T_SENDMSG; \ 00000510 B4A0CBE1 STRH R10,[R11, #+4] 3372 p->pkt.data_len=strlen(away_msg); \ 00000514 00009DE5 LDR R0,[SP, #+0] \ 00000518 1B0000EF SWI +27 \ 0000051C B600CBE1 STRH R0,[R11, #+6] 3373 strcpy(p->data,away_msg); \ 00000520 00109DE5 LDR R1,[SP, #+0] \ 00000524 08008BE2 ADD R0,R11,#+8 \ 00000528 1A0000EF SWI +26 3374 #ifdef EVILFOX 3375 SENDMSGCOUNT++; 3376 #else 3377 if(show_send_info) \ 0000052C 34019FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000530 000090E5 LDR R0,[R0, #+0] \ 00000534 000050E3 CMP R0,#+0 \ 00000538 1C0196E5 LDR R0,[R6, #+284] \ 0000053C 010080E2 ADD R0,R0,#+1 \ 00000540 1C0186E5 STR R0,[R6, #+284] \ 00000544 0A00000A BEQ ??CheckComand_12 3378 AddStringToLog(t,0x01,requests6,I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 00000548 0110A0E3 MOV R1,#+1 \ 0000054C 02002DE9 PUSH {R1} \ 00000550 000009E0 AND R0,R9,R0 \ 00000554 01002DE9 PUSH {R0} \ 00000558 1F3087E2 ADD R3,R7,#+31 \ 0000055C 6800A0E3 MOV R0,#+104 \ 00000560 6C0D80E3 ORR R0,R0,#0x1B00 \ 00000564 062080E0 ADD R2,R0,R6 \ 00000568 0500A0E1 MOV R0,R5 \ 0000056C ........ BL AddStringToLog \ 00000570 08D08DE2 ADD SP,SP,#+8 3379 else 3380 SENDMSGCOUNT++; 3381 #endif 3382 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_12: \ 00000574 0B20A0E1 MOV R2,R11 \ 00000578 0010A0E3 MOV R1,#+0 \ 0000057C 0800A0E1 MOV R0,R8 \ 00000580 710100EF SWI +369 3383 } 3384 #ifdef klcuhnik 3385 if((t->uin==AUTOBOT_UIN)&&(autobot)) 3386 { 3387 TPKT *p; 3388 if(t->bot_msg==0) sprintf(away_msg, "Привет"); 3389 if(t->bot_msg==1) sprintf(away_msg, "думаешь?!"); 3390 if(t->bot_msg==2) sprintf(away_msg, "да что ты говоришь"); 3391 if(t->bot_msg==3) sprintf(away_msg, "странно"); 3392 if(t->bot_msg==4) sprintf(away_msg, "ты так думаешь?"); 3393 if(t->bot_msg==5) sprintf(away_msg, "может быть"); 3394 if(t->bot_msg==6) sprintf(away_msg, "да нахрен"); 3395 if(t->bot_msg==7) sprintf(away_msg, "конечна"); 3396 if(t->bot_msg==8) sprintf(away_msg, "почему нет"); 3397 t->bot_msg++; 3398 if(t->bot_msg==9) 3399 t->bot_msg=1; 3400 // strcpy(away_msg, c); 3401 p=malloc(sizeof(PKT)+strlen(away_msg)+1); 3402 p->pkt.uin=t->uin; 3403 p->pkt.type=T_SENDMSG; 3404 p->pkt.data_len=strlen(away_msg); 3405 strcpy(p->data,away_msg); 3406 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); 3407 SUBPROC((void *)SendAnswer,0,p); 3408 3409 extern const int autobot_kel; 3410 if((t->uin==334492880)&&(autobot_kel)) 3411 { 3412 TPKT *p; 3413 //if(t->bot_msg==0) sprintf(away_msg, "Привет"); 3414 if(t->bot_msg==0) sprintf(away_msg, "думаешь?!"); 3415 if(t->bot_msg==1) sprintf(away_msg, "да что ты говоришь"); 3416 if(t->bot_msg==2) sprintf(away_msg, "странно"); 3417 if(t->bot_msg==3) sprintf(away_msg, "угу"); 3418 if(t->bot_msg==4) sprintf(away_msg, "Не еби мне мозг!"); 3419 if(t->bot_msg==5) sprintf(away_msg, "иди на хуй!!"); 3420 if(t->bot_msg==6) sprintf(away_msg, "сука"); 3421 if(t->bot_msg==7) sprintf(away_msg, "заебал"); 3422 if(t->bot_msg==8) sprintf(away_msg, "отъебись cука!!!*FUCK_YOU*"); 3423 t->bot_msg++; 3424 if(t->bot_msg==9) 3425 t->bot_msg=1; 3426 // strcpy(away_msg, c); 3427 p=malloc(sizeof(PKT)+strlen(away_msg)+1); 3428 p->pkt.uin=t->uin; 3429 p->pkt.type=T_SENDMSG; 3430 p->pkt.data_len=strlen(away_msg); 3431 strcpy(p->data,away_msg); 3432 AddStringToLog(t,0x01,away_msg,I_str,(++SENDMSGCOUNT)&0x7FFF); 3433 SUBPROC((void *)SendAnswer,0,p); 3434 } 3435 } 3436 #endif 3437 //----------------------// 3438 3439 if(!strcmp(txt, "GET_URL_INFO"))// kluchnik 26.03.08 \ ??CheckComand_11: \ 00000584 7800A0E3 MOV R0,#+120 \ 00000588 400E80E3 ORR R0,R0,#0x400 \ 0000058C 071080E0 ADD R1,R0,R7 \ 00000590 0400A0E1 MOV R0,R4 \ 00000594 190000EF SWI +25 \ 00000598 000050E3 CMP R0,#+0 \ 0000059C 2F00001A BNE ??CheckComand_13 3440 { 3441 comanda=0; \ 000005A0 EC0186E5 STR R0,[R6, #+492] 3442 TPKT *p; 3443 3444 char *send_txt=malloc(786); \ 000005A4 C40F8AE3 ORR R0,R10,#0x310 \ 000005A8 140000EF SWI +20 \ 000005AC 0040A0E1 MOV R4,R0 3445 sprintf(send_txt,"revision 2058, mod date: %s at %s ", 3446 "http://windes.narod.ru/files/naticq_mod2058s.zip (sgold) (40kb)\n" 3447 "http://windes.narod.ru/files/naticq_mod2058n.zip (NewSGold) (40kb)\n" 3448 "http://windes.narod.ru/files/naticq_mod2058e.zip (elka) (40kb)\n" 3449 "files: http://windes.narod.ru/files/naticqmod_allfiles_w.zip (432kb)\n" 3450 "Status on iconbar http://windes.narod.ru/files/img16x16.zip (74kb)\n" 3451 "Так же все будет тут http://kluchnik.jino-net.ru/naticqmod/",__DATE__,__TIME__); \ 000005B0 670F87E2 ADD R0,R7,#+412 \ 000005B4 01002DE9 PUSH {R0} \ 000005B8 643F87E2 ADD R3,R7,#+400 \ 000005BC B52F87E2 ADD R2,R7,#+724 \ 000005C0 6B1E87E2 ADD R1,R7,#+1712 \ 000005C4 0400A0E1 MOV R0,R4 \ 000005C8 160000EF SWI +22 3452 3453 p=malloc(sizeof(PKT)+786); \ 000005CC C60F8AE3 ORR R0,R10,#0x318 \ 000005D0 140000EF SWI +20 \ 000005D4 00B0A0E1 MOV R11,R0 3454 p->pkt.uin=t->uin; \ 000005D8 0C0095E5 LDR R0,[R5, #+12] \ 000005DC 00008BE5 STR R0,[R11, #+0] 3455 p->pkt.type=T_SENDMSG; \ 000005E0 B4A0CBE1 STRH R10,[R11, #+4] 3456 p->pkt.data_len=strlen(send_txt); \ 000005E4 0400A0E1 MOV R0,R4 \ 000005E8 1B0000EF SWI +27 \ 000005EC B600CBE1 STRH R0,[R11, #+6] 3457 strcpy(p->data,send_txt); \ 000005F0 0410A0E1 MOV R1,R4 \ 000005F4 08008BE2 ADD R0,R11,#+8 \ 000005F8 1A0000EF SWI +26 3458 if(show_send_info) \ 000005FC 64009FE5 LDR R0,??CheckComand_3 ;; show_send_info \ 00000600 000090E5 LDR R0,[R0, #+0] \ 00000604 04D08DE2 ADD SP,SP,#+4 \ 00000608 000050E3 CMP R0,#+0 \ 0000060C 1C0196E5 LDR R0,[R6, #+284] \ 00000610 010080E2 ADD R0,R0,#+1 \ 00000614 1C0186E5 STR R0,[R6, #+284] \ 00000618 0A00000A BEQ ??CheckComand_6 3459 AddStringToLog(t,0x01,"Sending url info...",I_str,(++SENDMSGCOUNT)&0x7FFF,1); \ 0000061C 0110A0E3 MOV R1,#+1 \ 00000620 02002DE9 PUSH {R1} \ 00000624 000009E0 AND R0,R9,R0 \ 00000628 01002DE9 PUSH {R0} \ 0000062C 1F3087E2 ADD R3,R7,#+31 \ 00000630 6400A0E3 MOV R0,#+100 \ 00000634 400E80E3 ORR R0,R0,#0x400 \ 00000638 072080E0 ADD R2,R0,R7 \ ??CheckComand_7: \ 0000063C 0500A0E1 MOV R0,R5 \ 00000640 ........ BL AddStringToLog \ 00000644 08D08DE2 ADD SP,SP,#+8 3460 else 3461 SENDMSGCOUNT++; 3462 SUBPROC((void *)SendAnswer,0,p); \ ??CheckComand_6: \ 00000648 0B20A0E1 MOV R2,R11 \ 0000064C 0010A0E3 MOV R1,#+0 \ 00000650 0800A0E1 MOV R0,R8 \ 00000654 710100EF SWI +369 3463 mfree(send_txt); \ 00000658 0400A0E1 MOV R0,R4 \ 0000065C 150000EF SWI +21 3464 return; \ ??CheckComand_13: \ 00000660 47DF8DE2 ADD SP,SP,#+284 ;; stack cleaning \ 00000664 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CheckComand_3: \ 00000668 ........ DC32 show_send_info \ 0000066C ........ DC32 awayHelloMsg 3465 } 3466 } 3467 //===========================komand list end 3468 \ In segment DATA_Z, align 4, align-sorted 3469 char INC_Nick[32]; \ INC_Nick: \ 00000000 DS8 32 3470 char show_nick[32]; 3471 int INC_show; 3472 #ifdef ELKA 3473 int font =9; 3474 #else 3475 int font= 4; 3476 #endif 3477 const char color[4]={255,255,255,100}; 3478 \ In segment CODE, align 4, keep-with-next 3479 void show_pp_sender() 3480 { \ show_pp_sender: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 3481 if(INC_show>0) \ 00000004 ........ LDR R4,??DataTable125 ;; S_ICONS \ 00000008 08D04DE2 SUB SP,SP,#+8 \ 0000000C F00194E5 LDR R0,[R4, #+496] \ 00000010 010050E3 CMP R0,#+1 \ 00000014 F383BDB8 POPLT {R0,R1,R4-R9,PC} 3482 { 3483 WSHDR *ws=AllocWS(256); 3484 ascii2ws(ws,show_nick); 3485 int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 3486 char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; \ 00000018 2C619FE5 LDR R6,??show_pp_sender_0 ;; `?` \ 0000001C 400FA0E3 MOV R0,#+256 \ 00000020 250100EF SWI +293 \ 00000024 0050A0E1 MOV R5,R0 \ 00000028 8800A0E3 MOV R0,#+136 \ 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] 3487 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 3488 { 3489 extern void DrawScreenShot(); 3490 DrawScreenShot(); \ 00000070 ........ _BLF DrawScreenShot,??DrawScreenShot??rA 3491 } 3492 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 F40194E5 LDR R0,[R4, #+500] \ 00000090 C50100EF SWI +453 \ 00000094 F41194E5 LDR R1,[R4, #+500] \ 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 3493 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 F40194E5 LDR R0,[R4, #+500] \ 000000D4 C50100EF SWI +453 \ 000000D8 F41194E5 LDR R1,[R4, #+500] \ 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 F41194E5 LDR R1,[R4, #+500] \ 0000010C 02002DE9 PUSH {R1} \ 00000110 011087E2 ADD R1,R7,#+1 \ 00000114 02002DE9 PUSH {R1} \ 00000118 0210A0E1 MOV R1,R2 \ 0000011C 4C0100EF SWI +332 3494 3495 FreeWS(ws); \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 290100EF SWI +297 3496 INC_show--; \ 00000128 F00194E5 LDR R0,[R4, #+496] 3497 GBS_StartTimerProc(&develop, 10, show_pp_sender); \ 0000012C 1C209FE5 LDR R2,??show_pp_sender_0+0x4 ;; show_pp_sender \ 00000130 010040E2 SUB R0,R0,#+1 \ 00000134 F00184E5 STR R0,[R4, #+496] \ 00000138 0A10A0E3 MOV R1,#+10 \ 0000013C 6C0D84E2 ADD R0,R4,#+6912 \ 00000140 4D0000EF SWI +77 \ 00000144 20D08DE2 ADD SP,SP,#+32 3498 } 3499 } \ 00000148 F383BDE8 POP {R0,R1,R4-R9,PC} ;; return \ ??show_pp_sender_0: \ 0000014C ........ DC32 `?` \ 00000150 ........ DC32 show_pp_sender 3500 3501 extern const int SHOW_ACTIVE; 3502 \ In segment CODE, align 4, keep-with-next 3503 void Get_Online_total() 3504 { 3505 CLIST *t; 3506 kopa_online=0; \ Get_Online_total: \ 00000000 ........ LDR R0,??DataTable125 ;; S_ICONS \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 CC1180E5 STR R1,[R0, #+460] 3507 kopa_kontaktu=0; \ 0000000C D01180E5 STR R1,[R0, #+464] 3508 t=(CLIST *)(&cltop); \ 00000010 6D1F80E2 ADD R1,R0,#+436 \ 00000014 FF30A0E3 MOV R3,#+255 \ 00000018 FF3C83E3 ORR R3,R3,#0xFF00 \ 0000001C 0A0000EA B ??Get_Online_total_0 3509 while(t=(CLIST *)(t->next)) 3510 { 3511 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 3512 { 3513 kopa_online++; \ 0000002C CC2190E5 LDR R2,[R0, #+460] \ 00000030 012082E2 ADD R2,R2,#+1 \ 00000034 CC2180E5 STR R2,[R0, #+460] 3514 if (t->state!=65535) kopa_kontaktu++; \ 00000038 B425D1E1 LDRH R2,[R1, #+84] \ 0000003C 030052E1 CMP R2,R3 \ 00000040 D0219015 LDRNE R2,[R0, #+464] \ 00000044 01208212 ADDNE R2,R2,#+1 \ 00000048 D0218015 STRNE R2,[R0, #+464] 3515 } 3516 } \ ??Get_Online_total_0: \ 0000004C 001091E5 LDR R1,[R1, #+0] \ 00000050 000051E3 CMP R1,#+0 \ 00000054 F1FFFF1A BNE ??Get_Online_total_1 3517 } \ 00000058 1EFF2FE1 BX LR ;; return 3518 \ In segment CODE, align 4, keep-with-next 3519 ProcessPacket(TPKT *p) 3520 { \ ProcessPacket: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} \ 00000004 50DF4DE2 SUB SP,SP,#+320 3521 extern const int VIBR_TYPE, VIBR_ON_CONNECT; 3522 CLIST *t; 3523 LOGQ *q; 3524 char s[256]; 3525 switch(p->pkt.type) \ 00000008 ........ LDR R5,??DataTable138 ;; `?pkt.uin) \ ??ProcessPacket_3: \ 00000088 000050E3 CMP R0,#+0 \ 0000008C 1800000A BEQ ??ProcessPacket_4 3533 { 3534 if ((t=FindContactByUin(p->pkt.uin))) \ 00000090 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000094 0090B0E1 MOVS R9,R0 \ 00000098 0E00000A BEQ ??ProcessPacket_5 3535 { 3536 // t->state=0xFFFF; 3537 if (!t->local) strncpy(t->name,p->data,63); \ 0000009C 900099E5 LDR R0,[R9, #+144] \ 000000A0 000050E3 CMP R0,#+0 \ 000000A4 0300001A BNE ??ProcessPacket_6 \ 000000A8 3F20A0E3 MOV R2,#+63 \ 000000AC 081084E2 ADD R1,R4,#+8 \ 000000B0 140089E2 ADD R0,R9,#+20 \ 000000B4 160100EF SWI +278 3538 t->group=GROUP_CACHE; \ ??ProcessPacket_6: \ 000000B8 B80197E5 LDR R0,[R7, #+440] \ 000000BC 100089E5 STR R0,[R9, #+16] 3539 ChangeContactPos(t); \ ??ProcessPacket_7: \ 000000C0 0900A0E1 MOV R0,R9 \ 000000C4 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3540 RecountMenu(t,1); \ 000000C8 0110A0E3 MOV R1,#+1 \ 000000CC 0900A0E1 MOV R0,R9 \ ??ProcessPacket_8: \ 000000D0 ........ BL RecountMenu \ 000000D4 270200EA B ??ProcessPacket_1 3541 } 3542 else 3543 { 3544 RecountMenu(AddContact(p->pkt.uin,p->data, GROUP_CACHE, 0),1); \ ??ProcessPacket_5: \ 000000D8 B82197E5 LDR R2,[R7, #+440] \ 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 3545 } 3546 } 3547 else 3548 { 3549 if(VIBR_ON_CONNECT) \ ??ProcessPacket_4: \ 000000F4 ........ LDR R0,??DataTable128 ;; VIBR_ON_CONNECT \ 000000F8 000090E5 LDR R0,[R0, #+0] \ 000000FC 000050E3 CMP R0,#+0 \ 00000100 0100000A BEQ ??ProcessPacket_9 3550 { 3551 vibra_count=1; \ 00000104 7C6187E5 STR R6,[R7, #+380] 3552 start_vibra(); \ 00000108 ........ BL start_vibra 3553 } 3554 GROUP_CACHE=0; \ ??ProcessPacket_9: \ 0000010C B88187E5 STR R8,[R7, #+440] 3555 ask_my_info(); 3556 if (contactlist_menu_id) \ 00000110 BC0197E5 LDR R0,[R7, #+444] \ 00000114 000050E3 CMP R0,#+0 \ 00000118 0200000A BEQ ??ProcessPacket_10 3557 { 3558 RecountMenu(NULL,1); \ 0000011C 0110A0E3 MOV R1,#+1 \ 00000120 0800A0E1 MOV R0,R8 \ ??ProcessPacket_11: \ 00000124 E9FFFFEA B ??ProcessPacket_8 3559 } 3560 else 3561 { 3562 create_contactlist_menu(); \ ??ProcessPacket_10: \ 00000128 ........ BL create_contactlist_menu \ 0000012C 110200EA B ??ProcessPacket_1 3563 // if(!dontLogOnConnect && isLogOnline) dontLogOnConnect=1; 3564 } 3565 } 3566 break; 3567 case T_GROUPID: 3568 if (t=FindGroupByID(GROUP_CACHE=p->pkt.uin)) \ ??ProcessPacket_12: \ 00000130 B80187E5 STR R0,[R7, #+440] \ 00000134 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 00000138 0090B0E1 MOVS R9,R0 \ 0000013C 0400000A BEQ ??ProcessPacket_13 3569 { 3570 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 3571 ChangeContactPos(t); \ 00000150 DAFFFFEA B ??ProcessPacket_7 3572 RecountMenu(t,1); 3573 } 3574 else 3575 { 3576 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 3577 } 3578 break; 3579 case T_GROUPFOLLOW: 3580 GROUP_CACHE=p->pkt.uin; \ ??ProcessPacket_14: \ 00000168 B80187E5 STR R0,[R7, #+440] \ 0000016C 010200EA B ??ProcessPacket_1 3581 break; 3582 case T_STATUSCHANGE: 3583 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_15: \ 00000170 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000174 0090B0E1 MOVS R9,R0 3584 if (t) \ 00000178 A300000A BEQ ??ProcessPacket_16 3585 { 3586 int i=t->state; \ 0000017C B415D9E1 LDRH R1,[R9, #+84] 3587 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 3588 if (t->xstate!=p->data[2]) // Если картинка икс статуса сменилась 3589 { 3590 t->xstate=p->data[2]; \ 00000198 B605C9E1 STRH R0,[R9, #+86] 3591 FreeXText(t); \ 0000019C 0900A0E1 MOV R0,R9 \ 000001A0 ........ _BLF FreeXText,??FreeXText??rA 3592 if (t->xstate && ENA_AUTO_XTXT) // Если установлен икс статус и можно запрашивать по смене икс статуса :) \ 000001A4 B605D9E1 LDRH R0,[R9, #+86] \ 000001A8 000050E3 CMP R0,#+0 \ 000001AC 1600000A BEQ ??ProcessPacket_18 \ 000001B0 D4079FE5 LDR R0,??ProcessPacket_19+0x4 ;; ENA_AUTO_XTXT \ 000001B4 000090E5 LDR R0,[R0, #+0] \ 000001B8 000050E3 CMP R0,#+0 \ 000001BC 1200000A BEQ ??ProcessPacket_18 3593 { 3594 t->req_xtext=1; \ 000001C0 8C6089E5 STR R6,[R9, #+140] 3595 if (edchat_id) // Если открыт чат \ 000001C4 C00197E5 LDR R0,[R7, #+448] \ 000001C8 000050E3 CMP R0,#+0 \ 000001CC 0F00000A BEQ ??ProcessPacket_17 3596 { 3597 void *data=FindGUIbyId(edchat_id,NULL); \ 000001D0 C00197E5 LDR R0,[R7, #+448] \ 000001D4 0010A0E3 MOV R1,#+0 \ 000001D8 090200EF SWI +521 3598 if (data) \ 000001DC 000050E3 CMP R0,#+0 \ 000001E0 0A00000A BEQ ??ProcessPacket_17 3599 { 3600 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 000001E4 DF0100EF SWI +479 3601 if (ed_struct) \ 000001E8 000050E3 CMP R0,#+0 \ 000001EC 0700000A BEQ ??ProcessPacket_17 3602 { 3603 if (ed_struct->ed_contact==t) // Если наш чат то запрашиваем текст статуса \ 000001F0 000090E5 LDR R0,[R0, #+0] \ 000001F4 090050E1 CMP R0,R9 \ 000001F8 0400001A BNE ??ProcessPacket_17 3604 { 3605 t->req_xtext=0; \ 000001FC 8C8089E5 STR R8,[R9, #+140] 3606 RequestXText(t->uin); \ 00000200 0C0099E5 LDR R0,[R9, #+12] \ 00000204 ........ BL RequestXText \ 00000208 000000EA B ??ProcessPacket_17 3607 } 3608 } 3609 } 3610 } 3611 } 3612 else // Если икс статус не установлен то на всякий случай снимаем флаг получения текста 3613 { 3614 t->req_xtext=0; \ ??ProcessPacket_18: \ 0000020C 8C8089E5 STR R8,[R9, #+140] 3615 } 3616 } 3617 if (contactlist_menu_id) \ ??ProcessPacket_17: \ 00000210 BC0197E5 LDR R0,[R7, #+444] \ 00000214 000050E3 CMP R0,#+0 \ 00000218 0500000A BEQ ??ProcessPacket_20 3618 { 3619 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 0000021C BC0197E5 LDR R0,[R7, #+444] \ 00000220 0010A0E3 MOV R1,#+0 \ 00000224 090200EF SWI +521 \ 00000228 8F0100EF SWI +399 \ 0000022C ........ _BLF FindContactByN,??FindContactByN??rA \ 00000230 00A0A0E1 MOV R10,R0 3620 } 3621 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 5C608905 STREQ R6,[R9, #+92] 3622 t->state=*((unsigned short *)(p->data)); \ 00000248 B800D4E1 LDRH R0,[R4, #+8] \ 0000024C B405C9E1 STRH R0,[R9, #+84] 3623 if((t->state!=65535)&&(t->change==1)) \ 00000250 0B0050E1 CMP R0,R11 \ 00000254 0400000A BEQ ??ProcessPacket_21 \ 00000258 5C0099E5 LDR R0,[R9, #+92] \ 0000025C 010050E3 CMP R0,#+1 3624 { 3625 t->just_now=2; \ 00000260 0200A003 MOVEQ R0,#+2 \ 00000264 58008905 STREQ R0,[R9, #+88] 3626 t->change=0; \ 00000268 5C808905 STREQ R8,[R9, #+92] 3627 } 3628 LogStatusChange(t); \ ??ProcessPacket_21: \ 0000026C 0900A0E1 MOV R0,R9 \ 00000270 ........ _BLF LogStatusChange,??LogStatusChange??rA 3629 ChangeContactPos(t); \ 00000274 0900A0E1 MOV R0,R9 \ 00000278 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 3630 RecountMenu(oldt,1); \ 0000027C 0110A0E3 MOV R1,#+1 \ 00000280 0A00A0E1 MOV R0,R10 \ 00000284 ........ BL RecountMenu 3631 if ((t->state!=0xFFFF)&&(i==0xFFFF))//Звук \ 00000288 B405D9E1 LDRH R0,[R9, #+84] \ 0000028C 8860A0E3 MOV R6,#+136 \ 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 3632 { 3633 #ifdef EVILFOX 3634 if(!extended_sounds) 3635 { 3636 Play(sndGlobal); 3637 3638 } 3639 else 3640 { 3641 uins=t->uin; 3642 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); 3643 Play(talk_sound); 3644 3645 } 3646 #else 3647 /* 3648 #ifdef kluchnik 3649 void SetIconBarHandler(); 3650 if(t->uin==438532198) 3651 { 3652 solnce=1; 3653 SetIconBarHandler(); 3654 } 3655 #endif*/ 3656 if(!extended_sounds) \ 000002A8 ........ LDR R0,??DataTable129 ;; extended_sounds \ 000002AC DCA69FE5 LDR R10,??ProcessPacket_19+0x8 ;; sndGlobal \ 000002B0 000090E5 LDR R0,[R0, #+0] \ 000002B4 000050E3 CMP R0,#+0 \ 000002B8 0300001A BNE ??ProcessPacket_23 3657 { 3658 Play(sndGlobal); \ 000002BC 0A00A0E1 MOV R0,R10 \ ??ProcessPacket_24: \ 000002C0 ........ BL Play 3659 if(isLogOnline) //by kluchnik 26.03.08 \ 000002C4 C8069FE5 LDR R0,??ProcessPacket_19+0xC ;; isLogOnline \ 000002C8 1C0000EA B ??ProcessPacket_25 3660 { 3661 FreeXText2(t); 3662 TTime time; 3663 TDate date; 3664 GetDateTime(&date,&time); 3665 char *txt=malloc(64); 3666 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); 3667 3668 t->xtext2=malloc(64); 3669 snprintf(t->xtext2,64,txt); 3670 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); 3671 ReqAddMsgToChat(t); 3672 // RecountMenu(t, 1); 3673 RecountMenu(NULL, 0); 3674 mfree(txt); 3675 } 3676 } 3677 else 3678 { 3679 FSTATS stat; 3680 int fsize; 3681 unsigned int ul = 0; 3682 uins=t->uin; 3683 sprintf(talk_sound, "%s%d.wav", sndGlobal2, uins); \ ??ProcessPacket_23: \ 000002CC C4269FE5 LDR R2,??ProcessPacket_19+0x10 ;; sndGlobal2 \ 000002D0 14808DE5 STR R8,[SP, #+20] \ 000002D4 0C0099E5 LDR R0,[R9, #+12] \ 000002D8 D78FA0E3 MOV R8,#+860 \ 000002DC F00087E5 STR R0,[R7, #+240] \ 000002E0 0030A0E1 MOV R3,R0 \ 000002E4 461F85E2 ADD R1,R5,#+280 \ 000002E8 070088E0 ADD R0,R8,R7 \ 000002EC 160000EF SWI +22 3684 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 3685 fsize=stat.size; 3686 if(fsize>0) \ 00000300 1C019DE5 LDR R0,[SP, #+284] \ 00000304 010050E3 CMP R0,#+1 3687 Play(talk_sound); \ 00000308 070088A0 ADDGE R0,R8,R7 3688 else 3689 Play(sndGlobal); \ 0000030C 0A00A0B1 MOVLT R0,R10 \ 00000310 EAFFFFEA B ??ProcessPacket_24 3690 if(isLogOnline ) //by kluchnik 26.03.08 3691 { 3692 FreeXText2(t); 3693 TTime time; 3694 TDate date; 3695 GetDateTime(&date,&time); 3696 char *txt=malloc(64); 3697 sprintf(txt," Online: %02d:%02d:%02d %02d-%02d",time.hour,time.min,time.sec,date.month,date.day); 3698 3699 t->xtext2=malloc(64); 3700 snprintf(t->xtext2,64,txt); 3701 AddStringToLog(t,0x03,txt,x_status_change,0xFFFFFFFF, 0); 3702 ReqAddMsgToChat(t); 3703 // RecountMenu(t, 1); 3704 RecountMenu(NULL, 0); 3705 mfree(txt); 3706 } 3707 } 3708 #endif 3709 } 3710 3711 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 3712 { 3713 Play(sndSrvMsg); \ 00000328 6C069FE5 LDR R0,??ProcessPacket_19+0x14 ;; sndSrvMsg \ 0000032C ........ BL Play 3714 3715 //-------------------- Log offline ----------------------// 3716 3717 if(t->isactive && isLogOffline) // by kluchnik 26.03.08 \ 00000330 7C0099E5 LDR R0,[R9, #+124] \ 00000334 000050E3 CMP R0,#+0 \ 00000338 2E00000A BEQ ??ProcessPacket_26 \ 0000033C 5C069FE5 LDR R0,??ProcessPacket_19+0x18 ;; isLogOffline \ ??ProcessPacket_25: \ 00000340 000090E5 LDR R0,[R0, #+0] \ 00000344 000050E3 CMP R0,#+0 \ 00000348 2A00000A BEQ ??ProcessPacket_26 3718 { 3719 FreeXText2(t); \ 0000034C 0900A0E1 MOV R0,R9 \ 00000350 ........ BL FreeXText2 3720 TTime time; 3721 TDate date; 3722 GetDateTime(&date,&time); \ 00000354 0D10A0E1 MOV R1,SP \ 00000358 08008DE2 ADD R0,SP,#+8 \ 0000035C B40000EF SWI +180 3723 char *txt=malloc(64); \ 00000360 4000A0E3 MOV R0,#+64 \ 00000364 140000EF SWI +20 \ 00000368 0080A0E1 MOV R8,R0 3724 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 3725 3726 t->xtext2=malloc(64); \ 00000398 4000A0E3 MOV R0,#+64 \ 0000039C 140000EF SWI +20 \ 000003A0 880089E5 STR R0,[R9, #+136] 3727 snprintf(t->xtext2,64,txt); \ 000003A4 0820A0E1 MOV R2,R8 \ 000003A8 4010A0E3 MOV R1,#+64 \ 000003AC 1B0100EF SWI +283 3728 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 9D0F86E3 ORR R0,R6,#0x274 \ 000003CC 053080E0 ADD R3,R0,R5 \ 000003D0 0900A0E1 MOV R0,R9 \ 000003D4 ........ BL AddStringToLog 3729 ReqAddMsgToChat(t); \ 000003D8 0900A0E1 MOV R0,R9 \ 000003DC ........ BL ReqAddMsgToChat 3730 // RecountMenu(t, 1); 3731 RecountMenu(NULL, 0); \ 000003E0 0010A0E3 MOV R1,#+0 \ 000003E4 0000A0E3 MOV R0,#+0 \ 000003E8 ........ BL RecountMenu 3732 mfree(txt); \ 000003EC 0800A0E1 MOV R0,R8 \ 000003F0 150000EF SWI +21 \ 000003F4 14D08DE2 ADD SP,SP,#+20 3733 } 3734 } 3735 3736 //------------------------------------------------------------// 3737 3738 if(TIME_OR_MSG==2) \ ??ProcessPacket_26: \ 000003F8 ........ LDR R0,??DataTable130 ;; TIME_OR_MSG \ 000003FC 000090E5 LDR R0,[R0, #+0] \ 00000400 020050E3 CMP R0,#+2 \ 00000404 0000001A BNE ??ProcessPacket_16 3739 Get_Online_total(); \ 00000408 ........ BL Get_Online_total 3740 } 3741 if (edchat_id) \ ??ProcessPacket_16: \ 0000040C C00197E5 LDR R0,[R7, #+448] \ 00000410 000050E3 CMP R0,#+0 \ 00000414 5701000A BEQ ??ProcessPacket_1 3742 { 3743 void *data=FindGUIbyId(edchat_id,NULL); \ 00000418 C00197E5 LDR R0,[R7, #+448] \ 0000041C 0010A0E3 MOV R1,#+0 \ 00000420 090200EF SWI +521 3744 { 3745 EDCHAT_STRUCT *ed_struct; 3746 ed_struct=EDIT_GetUserPointer(data); \ 00000424 DF0100EF SWI +479 3747 if (ed_struct) \ 00000428 000050E3 CMP R0,#+0 \ 0000042C 5101000A BEQ ??ProcessPacket_1 3748 { 3749 if (ed_struct->ed_contact==t) \ 00000430 000090E5 LDR R0,[R0, #+0] \ 00000434 090050E1 CMP R0,R9 \ 00000438 4E01001A BNE ??ProcessPacket_1 3750 { 3751 DirectRedrawGUI_ID(edchat_id); \ 0000043C C00197E5 LDR R0,[R7, #+448] \ 00000440 400100EF SWI +320 \ 00000444 4B0100EA B ??ProcessPacket_1 3752 } 3753 } 3754 } 3755 } 3756 break; 3757 case T_RECVMSG: 3758 NEW_MSG=1; \ ??ProcessPacket_27: \ 00000448 E46187E5 STR R6,[R7, #+484] 3759 t=FindContactByUin(p->pkt.uin); \ 0000044C ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000450 0090B0E1 MOVS R9,R0 3760 if (!t) \ 00000454 0900001A BNE ??ProcessPacket_28 3761 { 3762 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 3763 t=AddContact(p->pkt.uin,s,GROUP_CACHE,0); \ 00000468 B82197E5 LDR R2,[R7, #+440] \ 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 3764 } 3765 if(!t->isactive && HISTORY_BUFFER) GetHistory(t, 64<isactive=ACTIVE_TIME; \ 000004B8 5A0FA013 MOVNE R0,#+360 \ 000004BC 7C008915 STRNE R0,[R9, #+124] 3768 // ChangeContactPos(t); 3769 if(VIBR_TYPE) \ 000004C0 ........ LDR R0,??DataTable133 ;; VIBR_TYPE \ 000004C4 000090E5 LDR R0,[R0, #+0] \ 000004C8 000050E3 CMP R0,#+0 3770 vibra_count=2; \ 000004CC 0200A013 MOVNE R0,#+2 \ 000004D0 7C018715 STRNE R0,[R7, #+380] 3771 else 3772 vibra_count=1; \ 000004D4 7C618705 STREQ R6,[R7, #+380] 3773 start_vibra(); \ 000004D8 ........ BL start_vibra 3774 #ifdef ELKA 3775 if(SLI_TYPE) 3776 SLI_Timer(); \ 000004DC ........ BL SLI_Timer 3777 #endif 3778 if(Is_Double_Vibra_On) \ 000004E0 0C0197E5 LDR R0,[R7, #+268] \ 000004E4 000050E3 CMP R0,#+0 \ 000004E8 0000000A BEQ ??ProcessPacket_30 3779 Reminder_timer(); \ 000004EC ........ BL Reminder_timer 3780 if (Is_ILU_On) \ ??ProcessPacket_30: \ 000004F0 080197E5 LDR R0,[R7, #+264] \ 000004F4 000050E3 CMP R0,#+0 \ 000004F8 0800000A BEQ ??ProcessPacket_31 3781 IlluminationOn(ILL_DISP_RECV,ILL_KEYS_RECV,ILL_RECV_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000004FC A0049FE5 LDR R0,??ProcessPacket_19+0x1C ;; ILL_RECV_FADE \ 00000500 003090E5 LDR R3,[R0, #+0] \ 00000504 9C049FE5 LDR R0,??ProcessPacket_19+0x20 ;; ILL_RECV_TMR \ 00000508 002090E5 LDR R2,[R0, #+0] \ 0000050C 98049FE5 LDR R0,??ProcessPacket_19+0x24 ;; ILL_KEYS_RECV \ 00000510 001090E5 LDR R1,[R0, #+0] \ 00000514 94049FE5 LDR R0,??ProcessPacket_19+0x28 ;; ILL_DISP_RECV \ 00000518 000090E5 LDR R0,[R0, #+0] \ 0000051C ........ BL IlluminationOn 3782 if (t->name[0]=='#') \ ??ProcessPacket_31: \ 00000520 1400D9E5 LDRB R0,[R9, #+20] \ 00000524 230050E3 CMP R0,#+35 \ 00000528 1700001A BNE ??ProcessPacket_32 3783 { 3784 //Если это конференция, патчим имя 3785 char *s=strchr(p->data,'>'); \ 0000052C 3E10A0E3 MOV R1,#+62 \ 00000530 080084E2 ADD R0,R4,#+8 \ 00000534 180000EF SWI +24 3786 //Если нашли символ > и после него пробел и ник короче 16 символов 3787 if (s) \ 00000538 000050E3 CMP R0,#+0 \ 0000053C 1200000A BEQ ??ProcessPacket_32 3788 { 3789 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 3790 { 3791 *s=0; //Режем строку \ 0000055C 0080C0E5 STRB R8,[R0, #+0] 3792 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 3793 goto L1; \ 00000584 08D08DE2 ADD SP,SP,#+8 \ 00000588 2A0000EA B ??ProcessPacket_33 3794 } 3795 } 3796 } 3797 3798 //=================== tas bus jautri ===================// 3799 3800 comanda=1; \ ??ProcessPacket_32: \ 0000058C EC6187E5 STR R6,[R7, #+492] 3801 // if(UIN!=t->uin) 3802 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 3803 if(comanda==1) \ 000005A0 EC0197E5 LDR R0,[R7, #+492] \ 000005A4 010050E3 CMP R0,#+1 \ 000005A8 2200001A BNE ??ProcessPacket_33 3804 { 3805 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 3806 main_count++; \ 000005CC ........ LDR R0,??DataTable134 ;; main_count \ 000005D0 001090E5 LDR R1,[R0, #+0] \ 000005D4 011081E2 ADD R1,R1,#+1 \ 000005D8 001080E5 STR R1,[R0, #+0] 3807 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 3808 { 3809 strcpy(show_nick, t->name); \ 000005EC 141089E2 ADD R1,R9,#+20 \ 000005F0 8800A0E3 MOV R0,#+136 \ 000005F4 700D80E3 ORR R0,R0,#0x1C00 \ 000005F8 070080E0 ADD R0,R0,R7 \ 000005FC 1A0000EF SWI +26 3810 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 3811 { 3812 //int csm_oncreate_addr = ((int*)(((CSM_RAM*)(CSM_root()->csm_q->csm.last))->constr))[1] - 1; 3813 // char java_oncreate_pattern[8] = {0xB0, 0xB5, 0x04, 0x1C, 0x00, 0x25, 0x05, 0x61}; 3814 // if (memcmp((void*)csm_oncreate_addr, java_oncreate_pattern, 8)) 3815 // { 3816 INC_show=15; \ 00000614 0F00A0E3 MOV R0,#+15 \ 00000618 F00187E5 STR R0,[R7, #+496] 3817 show_pp_sender(); \ 0000061C ........ BL show_pp_sender 3818 //} 3819 } 3820 } 3821 if(Is_SMARTCPU_On) \ ??ProcessPacket_34: \ 00000620 000197E5 LDR R0,[R7, #+256] \ 00000624 000050E3 CMP R0,#+0 \ 00000628 0200000A BEQ ??ProcessPacket_33 3822 AddToMain(t->name,p->data); \ 0000062C 081084E2 ADD R1,R4,#+8 \ 00000630 140089E2 ADD R0,R9,#+20 \ 00000634 ........ BL AddToMain 3823 } 3824 // if((Is_SMARTCPU_On)&&(comanda==1)) 3825 // AddToMain(t->name,p->data); 3826 L1: 3827 //Разворачиваем группу, в которой пришло сообщение 3828 { 3829 CLIST *g=FindGroupByID(t->group); \ ??ProcessPacket_33: \ 00000638 100099E5 LDR R0,[R9, #+16] \ 0000063C ........ _BLF FindGroupByID,??FindGroupByID??rA 3830 if (g) \ 00000640 000050E3 CMP R0,#+0 3831 { 3832 if (g->state) \ 00000644 B415D011 LDRHNE R1,[R0, #+84] \ 00000648 00005113 CMPNE R1,#+0 3833 { 3834 g->state=0; \ 0000064C B485C011 STRHNE R8,[R0, #+84] 3835 } 3836 } 3837 } 3838 // if(comanda==1) 3839 // { 3840 ReqAddMsgToChat(t); \ 00000650 0900A0E1 MOV R0,R9 \ 00000654 ........ BL ReqAddMsgToChat 3841 RecountMenu(t,1); \ 00000658 0110A0E3 MOV R1,#+1 \ 0000065C 0900A0E1 MOV R0,R9 \ 00000660 ........ BL RecountMenu 3842 extern const int DEVELOP_IF; 3843 switch (DEVELOP_IF) \ 00000664 48039FE5 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 BB0000EA B ??ProcessPacket_1 3844 { 3845 case 0: 3846 #ifdef EVILFOX 3847 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)) GBS_StartTimerProc(&develop, 216*2, to_develop); 3848 #else 3849 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 B400000A BEQ ??ProcessPacket_1 \ 000006A4 ........ BL to_develop \ 000006A8 B20000EA B ??ProcessPacket_1 3850 #endif 3851 break; 3852 case 1: 3853 #ifdef EVILFOX 3854 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(IsUnlocked())) GBS_StartTimerProc(&develop, 216*2, to_develop); 3855 #else 3856 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 AB00000A BEQ ??ProcessPacket_1 \ 000006C8 430000EF SWI +67 \ 000006CC 000050E3 CMP R0,#+0 \ 000006D0 F2FFFFEA B ??ProcessPacket_38 3857 #endif 3858 break; 3859 case 2: 3860 break; 3861 case 3: 3862 GBS_DelTimer(&develop); \ ??ProcessPacket_37: \ 000006D4 6C0D87E2 ADD R0,R7,#+6912 \ 000006D8 8C0100EF SWI +396 3863 if ((((CSM_RAM *)(CSM_root()->csm_q->csm.last))->id!=maincsm_id)&&(!IsUnlocked())) begin_to_develop(); \ 000006DC 068100EF SWI +33030 \ 000006E0 080090E5 LDR R0,[R0, #+8] \ 000006E4 141197E5 LDR R1,[R7, #+276] \ 000006E8 0C0090E5 LDR R0,[R0, #+12] \ 000006EC 0C0090E5 LDR R0,[R0, #+12] \ 000006F0 010050E1 CMP R0,R1 \ 000006F4 9F00000A BEQ ??ProcessPacket_1 \ 000006F8 430000EF SWI +67 \ 000006FC 000050E3 CMP R0,#+0 \ 00000700 9C00001A BNE ??ProcessPacket_1 \ 00000704 ........ BL begin_to_develop \ 00000708 9A0000EA B ??ProcessPacket_1 3864 break; 3865 } 3866 // } 3867 break; 3868 case T_SRV_ACK: 3869 case T_CLIENT_ACK: 3870 q=FindContactLOGQByAck(p); \ ??ProcessPacket_39: \ 0000070C 0400A0E1 MOV R0,R4 \ 00000710 ........ BL FindContactLOGQByAck 3871 /* if (q&&(p->pkt.type==T_SRV_ACK)) 3872 { 3873 if (Is_ILU_On) 3874 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); 3875 }//Illumination by BoBa 19.04.2007 */ 3876 /* if (( 3877 IsGuiOnTop(contactlist_menu_id)|| 3878 IsGuiOnTop(edchat_id) 3879 )&&(q)) 3880 { 3881 DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 3882 GetPaletteAdrByColorIndex(0), 3883 GetPaletteAdrByColorIndex(p->pkt.type==T_SRV_ACK?3:4)); 3884 }*/ 3885 if (q) \ 00000714 000050E3 CMP R0,#+0 \ 00000718 9600000A BEQ ??ProcessPacket_1 3886 { 3887 q->acked=p->pkt.type==T_SRV_ACK?1:2; \ 0000071C B410D4E1 LDRH R1,[R4, #+4] \ 00000720 100051E3 CMP R1,#+16 \ 00000724 0110A003 MOVEQ R1,#+1 \ 00000728 0210A013 MOVNE R1,#+2 \ 0000072C 041080E5 STR R1,[R0, #+4] 3888 t=FindContactByUin(p->pkt.uin); \ 00000730 000094E5 LDR R0,[R4, #+0] \ 00000734 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 00000738 0090A0E1 MOV R9,R0 3889 if (edchat_id) \ 0000073C C00197E5 LDR R0,[R7, #+448] \ 00000740 000050E3 CMP R0,#+0 \ 00000744 8B00000A BEQ ??ProcessPacket_1 3890 { 3891 void *data=FindGUIbyId(edchat_id,NULL); \ 00000748 C00197E5 LDR R0,[R7, #+448] \ 0000074C 0010A0E3 MOV R1,#+0 \ 00000750 090200EF SWI +521 \ 00000754 0050B0E1 MOVS R5,R0 3892 if (data) \ 00000758 8600000A BEQ ??ProcessPacket_1 3893 { 3894 EDCHAT_STRUCT *ed_struct; 3895 ed_struct=EDIT_GetUserPointer(data); \ 0000075C DF0100EF SWI +479 3896 if (ed_struct) \ 00000760 000050E3 CMP R0,#+0 \ 00000764 8300000A BEQ ??ProcessPacket_1 3897 { 3898 if (ed_struct->ed_contact==t) \ 00000768 000090E5 LDR R0,[R0, #+0] \ 0000076C 090050E1 CMP R0,R9 \ 00000770 8000001A BNE ??ProcessPacket_1 3899 { 3900 if (EDIT_IsBusy(data)) \ 00000774 0500A0E1 MOV R0,R5 \ 00000778 1C0200EF SWI +540 \ 0000077C 000050E3 CMP R0,#+0 \ 00000780 0300000A BEQ ??ProcessPacket_40 3901 { 3902 t->req_drawack=1; \ 00000784 6C6089E5 STR R6,[R9, #+108] 3903 #ifdef EVILFOX 3904 time_to_stop_t9=2; 3905 #else 3906 time_to_stop_t9=3; \ 00000788 0300A0E3 MOV R0,#+3 \ 0000078C E80187E5 STR R0,[R7, #+488] \ 00000790 780000EA B ??ProcessPacket_1 3907 #endif 3908 } 3909 else { 3910 DrawAck(data); \ ??ProcessPacket_40: \ 00000794 0500A0E1 MOV R0,R5 \ 00000798 ........ BL DrawAck 3911 if (p->pkt.type==T_SRV_ACK) \ 0000079C B400D4E1 LDRH R0,[R4, #+4] \ 000007A0 100050E3 CMP R0,#+16 \ 000007A4 7300001A BNE ??ProcessPacket_1 3912 IlluminationOn(ILL_DISP_SEND,ILL_KEYS_SEND,ILL_SEND_TMR,ILL_RECV_FADE); //Illumination by BoBa 19.04.2007 \ 000007A8 F4019FE5 LDR R0,??ProcessPacket_19+0x1C ;; ILL_RECV_FADE \ 000007AC 003090E5 LDR R3,[R0, #+0] \ 000007B0 00029FE5 LDR R0,??ProcessPacket_19+0x30 ;; ILL_SEND_TMR \ 000007B4 002090E5 LDR R2,[R0, #+0] \ 000007B8 FC019FE5 LDR R0,??ProcessPacket_19+0x34 ;; ILL_KEYS_SEND \ 000007BC 001090E5 LDR R1,[R0, #+0] \ 000007C0 F8019FE5 LDR R0,??ProcessPacket_19+0x38 ;; ILL_DISP_SEND \ 000007C4 000090E5 LDR R0,[R0, #+0] \ 000007C8 ........ BL IlluminationOn \ 000007CC 690000EA B ??ProcessPacket_1 3913 } 3914 } 3915 } 3916 } 3917 } 3918 } 3919 break; 3920 case T_XTEXT_ACK: 3921 t=FindContactByUin(p->pkt.uin); \ ??ProcessPacket_41: \ 000007D0 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000007D4 0090B0E1 MOVS R9,R0 3922 if (t) \ 000007D8 6600000A BEQ ??ProcessPacket_1 3923 { 3924 int i; 3925 int j; 3926 FreeXText(t); \ 000007DC ........ _BLF FreeXText,??FreeXText??rA 3927 i=p->pkt.data_len; \ 000007E0 B660D4E1 LDRH R6,[R4, #+6] 3928 memcpy(t->xtext=malloc(i),p->data,i); \ 000007E4 0600A0E1 MOV R0,R6 \ 000007E8 140000EF SWI +20 \ 000007EC 840089E5 STR R0,[R9, #+132] \ 000007F0 0620A0E1 MOV R2,R6 \ 000007F4 081084E2 ADD R1,R4,#+8 \ 000007F8 1E0100EF SWI +286 3929 zeromem(s,256); \ 000007FC 401FA0E3 MOV R1,#+256 \ 00000800 18008DE2 ADD R0,SP,#+24 \ 00000804 1D0100EF SWI +285 3930 strcpy(s,t->name); \ 00000808 141089E2 ADD R1,R9,#+20 \ 0000080C 18008DE2 ADD R0,SP,#+24 \ 00000810 1A0000EF SWI +26 3931 strcat(s,":\n"); \ 00000814 5B1F8FE2 ADR R1,??ProcessPacket_19 ;; ":\n" \ 00000818 18008DE2 ADD R0,SP,#+24 \ 0000081C 170000EF SWI +23 3932 i=strlen(s); \ 00000820 18008DE2 ADD R0,SP,#+24 \ 00000824 1B0000EF SWI +27 3933 j=p->data[0]; \ 00000828 0860D4E5 LDRB R6,[R4, #+8] \ 0000082C 0070A0E1 MOV R7,R0 3934 if (j>(255-i)) j=255-i; \ 00000830 FF0067E2 RSB R0,R7,#+255 \ 00000834 060050E1 CMP R0,R6 \ 00000838 0060A0B1 MOVLT R6,R0 3935 strncpy(s+i,p->data+1,j); \ 0000083C 0620A0E1 MOV R2,R6 \ 00000840 091084E2 ADD R1,R4,#+9 \ 00000844 18008DE2 ADD R0,SP,#+24 \ 00000848 000087E0 ADD R0,R7,R0 \ 0000084C 160100EF SWI +278 3936 i+=j; \ 00000850 070086E0 ADD R0,R6,R7 3937 if (i<255) \ 00000854 FF0050E3 CMP R0,#+255 \ 00000858 100000AA BGE ??ProcessPacket_42 3938 { 3939 s[i]='\n'; \ 0000085C 18108DE2 ADD R1,SP,#+24 \ 00000860 0A20A0E3 MOV R2,#+10 \ 00000864 0120C0E7 STRB R2,[R0, +R1] 3940 i++; \ 00000868 0810D4E5 LDRB R1,[R4, #+8] \ 0000086C B620D4E1 LDRH R2,[R4, #+6] \ 00000870 010080E2 ADD R0,R0,#+1 3941 j=p->pkt.data_len-p->data[0]-1; 3942 if (j>(255-i)) j=255-i; 3943 strncpy(s+i,p->data+p->data[0]+1,j); \ 00000874 18308DE2 ADD R3,SP,#+24 \ 00000878 012042E0 SUB R2,R2,R1 \ 0000087C 016042E2 SUB R6,R2,#+1 \ 00000880 FF2060E2 RSB R2,R0,#+255 \ 00000884 060052E1 CMP R2,R6 \ 00000888 0260A0B1 MOVLT R6,R2 \ 0000088C 0620A0E1 MOV R2,R6 \ 00000890 041081E0 ADD R1,R1,R4 \ 00000894 091081E2 ADD R1,R1,#+9 \ 00000898 030080E0 ADD R0,R0,R3 \ 0000089C 160100EF SWI +278 3944 } 3945 // if (IsGuiOnTop(contactlist_menu_id)) RefreshGUI(); 3946 //if (!edchat_id && // Только если редактор не наверху 3947 // strlen(p->data)) // и x-status не пустой 3948 // ShowMSG(0,(int)s); 3949 3950 /* 3951 #ifdef EVILFOX 3952 #else 3953 if (!edchat_id) ShowMSG(0,(int)s); // Только если редактор не наверху 3954 #endif 3955 */ 3956 zeromem(s,256); \ ??ProcessPacket_42: \ 000008A0 401FA0E3 MOV R1,#+256 \ 000008A4 18008DE2 ADD R0,SP,#+24 \ 000008A8 1D0100EF SWI +285 3957 i=0; 3958 j=p->data[0]; \ 000008AC 0860D4E5 LDRB R6,[R4, #+8] 3959 if (j>(255-i)) j=255-i; 3960 strncpy(s,p->data+1,j); \ 000008B0 091084E2 ADD R1,R4,#+9 \ 000008B4 18008DE2 ADD R0,SP,#+24 \ 000008B8 400F56E3 CMP R6,#+256 \ 000008BC FF60A0A3 MOVGE R6,#+255 \ 000008C0 0620A0E1 MOV R2,R6 \ 000008C4 160100EF SWI +278 3961 i+=j; 3962 if (i<255) \ 000008C8 FF0056E3 CMP R6,#+255 \ 000008CC 100000AA BGE ??ProcessPacket_43 3963 { 3964 s[i++]=13; \ 000008D0 18108DE2 ADD R1,SP,#+24 \ 000008D4 0D20A0E3 MOV R2,#+13 \ 000008D8 0120C6E7 STRB R2,[R6, +R1] \ 000008DC 0810D4E5 LDRB R1,[R4, #+8] \ 000008E0 B620D4E1 LDRH R2,[R4, #+6] \ 000008E4 010086E2 ADD R0,R6,#+1 3965 j=p->pkt.data_len-p->data[0]-1; 3966 if (j>(255-i)) j=255-i; 3967 strncpy(s+i,p->data+p->data[0]+1,j); \ 000008E8 18308DE2 ADD R3,SP,#+24 \ 000008EC 012042E0 SUB R2,R2,R1 \ 000008F0 016042E2 SUB R6,R2,#+1 \ 000008F4 FF2060E2 RSB R2,R0,#+255 \ 000008F8 060052E1 CMP R2,R6 \ 000008FC 0260A0B1 MOVLT R6,R2 \ 00000900 0620A0E1 MOV R2,R6 \ 00000904 041081E0 ADD R1,R1,R4 \ 00000908 091081E2 ADD R1,R1,#+9 \ 0000090C 030080E0 ADD R0,R0,R3 \ 00000910 160100EF SWI +278 3968 } 3969 AddStringToLog(t,0x03,s,x_status_change,0xFFFFFFFF,1); \ ??ProcessPacket_43: \ 00000914 0100A0E3 MOV R0,#+1 \ 00000918 01002DE9 PUSH {R0} \ 0000091C 0310A0E3 MOV R1,#+3 \ 00000920 000060E2 RSB R0,R0,#+0 \ 00000924 01002DE9 PUSH {R0} \ 00000928 20208DE2 ADD R2,SP,#+32 \ 0000092C FC00A0E3 MOV R0,#+252 \ 00000930 600E80E3 ORR R0,R0,#0x600 \ 00000934 053080E0 ADD R3,R0,R5 \ 00000938 0900A0E1 MOV R0,R9 \ 0000093C ........ BL AddStringToLog 3970 ReqAddMsgToChat(t); \ 00000940 0900A0E1 MOV R0,R9 \ 00000944 ........ BL ReqAddMsgToChat 3971 if (strlen(p->data)) // Если x-status не пустой \ 00000948 080084E2 ADD R0,R4,#+8 \ 0000094C 1B0000EF SWI +27 \ 00000950 000050E3 CMP R0,#+0 \ 00000954 08D08DE2 ADD SP,SP,#+8 3972 RecountMenu(t, 1); \ 00000958 0110A013 MOVNE R1,#+1 \ 0000095C 0900A011 MOVNE R0,R9 \ 00000960 DAFDFF1A BNE ??ProcessPacket_8 3973 else 3974 RecountMenu(NULL, 0); \ 00000964 0010A0E3 MOV R1,#+0 \ 00000968 0100A0E1 MOV R0,R1 \ 0000096C D7FDFFEA B ??ProcessPacket_8 3975 } 3976 break; 3977 case T_LASTPRIVACY: 3978 CurrentPrivateStatus=p->data[0]; \ ??ProcessPacket_44: \ 00000970 0800D4E5 LDRB R0,[R4, #+8] \ 00000974 780187E5 STR R0,[R7, #+376] 3979 break; 3980 } 3981 mfree(p); \ ??ProcessPacket_1: \ 00000978 0400A0E1 MOV R0,R4 \ 0000097C 150000EF SWI +21 3982 } \ 00000980 50DF8DE2 ADD SP,SP,#+320 \ 00000984 F08FBDE8 POP {R4-R11,PC} ;; return \ ??ProcessPacket_19: \ 00000988 3A0A0000 DC8 ":\n",+0 \ 0000098C ........ DC32 ENA_AUTO_XTXT \ 00000990 ........ DC32 sndGlobal \ 00000994 ........ DC32 isLogOnline \ 00000998 ........ DC32 sndGlobal2 \ 0000099C ........ DC32 sndSrvMsg \ 000009A0 ........ DC32 isLogOffline \ 000009A4 ........ DC32 ILL_RECV_FADE \ 000009A8 ........ DC32 ILL_RECV_TMR \ 000009AC ........ DC32 ILL_KEYS_RECV \ 000009B0 ........ DC32 ILL_DISP_RECV \ 000009B4 ........ DC32 DEVELOP_IF \ 000009B8 ........ DC32 ILL_SEND_TMR \ 000009BC ........ DC32 ILL_KEYS_SEND \ 000009C0 ........ DC32 ILL_DISP_SEND 3983 3984 3985 IPC_REQ tmr_gipc; \ In segment CODE, align 4, keep-with-next 3986 void process_active_timer(void) 3987 { \ process_active_timer: \ 00000000 30402DE9 PUSH {R4,R5,LR} 3988 if (connect_state>2) \ 00000004 ........ LDR R5,??DataTable135 ;; S_ICONS \ 00000008 0040A0E3 MOV R4,#+0 \ 0000000C 8C0195E5 LDR R0,[R5, #+396] \ 00000010 030050E3 CMP R0,#+3 \ 00000014 070000BA BLT ??process_active_timer_0 3989 { 3990 if (++tenseconds_to_ping>12) \ 00000018 C80195E5 LDR R0,[R5, #+456] \ 0000001C 010080E2 ADD R0,R0,#+1 \ 00000020 C80185E5 STR R0,[R5, #+456] \ 00000024 0D0050E3 CMP R0,#+13 \ 00000028 020000BA BLT ??process_active_timer_0 3991 { 3992 tenseconds_to_ping=0; 3993 SUBPROC((void *)do_ping); \ 0000002C 5C009FE5 LDR R0,??process_active_timer_1 ;; do_ping \ 00000030 C84185E5 STR R4,[R5, #+456] \ 00000034 710100EF SWI +369 3994 } 3995 } 3996 tmr_gipc.name_to=ipc_my_name; \ ??process_active_timer_0: \ 00000038 ........ LDR R1,??DataTable138 ;; `?ws1,LG_GRSTATESTRING,connect_state,RXstate,RX,TX,sendq_l,hostname,logmsg); \ 00000008 ........ LDR R7,??DataTable138 ;; `?ws1,"\nLoading images..."); 4033 4034 if(total_smiles) \ 000001BC 38029FE5 LDR R0,??method0_0+0x8 ;; total_smiles \ 000001C0 001090E5 LDR R1,[R0, #+0] \ 000001C4 18D08DE2 ADD SP,SP,#+24 \ 000001C8 000051E3 CMP R1,#+0 \ 000001CC 0500000A BEQ ??method0_2 4035 { 4036 wstrcatprintf(data->ws1,"\nLoaded %d smiles",total_smiles); \ 000001D0 002090E5 LDR R2,[R0, #+0] \ 000001D4 E400A0E3 MOV R0,#+228 \ 000001D8 400E80E3 ORR R0,R0,#0x400 \ 000001DC 071080E0 ADD R1,R0,R7 \ 000001E0 340094E5 LDR R0,[R4, #+52] \ 000001E4 160200EF SWI +534 4037 } 4038 if (xstatuses_load) \ ??method0_2: \ 000001E8 10029FE5 LDR R0,??method0_0+0xC ;; xstatuses_load \ 000001EC 000090E5 LDR R0,[R0, #+0] \ 000001F0 000050E3 CMP R0,#+0 \ 000001F4 0600000A BEQ ??method0_1 4039 { 4040 wstrcatprintf(data->ws1,"\nLoaded %d xstatus",total_xstatuses); \ 000001F8 ........ LDR R0,??DataTable140 ;; total_xstatuses \ 000001FC 002090E5 LDR R2,[R0, #+0] \ 00000200 F800A0E3 MOV R0,#+248 \ 00000204 400E80E3 ORR R0,R0,#0x400 \ 00000208 071080E0 ADD R1,R0,R7 \ 0000020C 340094E5 LDR R0,[R4, #+52] \ 00000210 160200EF SWI +534 4041 } 4042 } 4043 #ifdef kluchnik 4044 4045 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4046 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4047 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); 4048 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4049 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4050 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); 4051 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4052 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); 4053 #else 4054 4055 DrawString(data->ws1,3,3+YDISP,scr_w-4,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4056 FONT_SMALL,0,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ ??method0_1: \ 00000214 1700A0E3 MOV R0,#+23 \ 00000218 2E0100EF SWI +302 \ 0000021C 0090A0E1 MOV R9,R0 \ 00000220 0000A0E3 MOV R0,#+0 \ 00000224 2E0100EF SWI +302 \ 00000228 00A0A0E1 MOV R10,R0 \ 0000022C 0500A0E3 MOV R0,#+5 \ 00000230 C50100EF SWI +453 \ 00000234 04109DE5 LDR R1,[SP, #+4] \ 00000238 00022DE9 PUSH {R9} \ 0000023C 048041E2 SUB R8,R1,#+4 \ 00000240 00042DE9 PUSH {R10} \ 00000244 0010A0E3 MOV R1,#+0 \ 00000248 02002DE9 PUSH {R1} \ 0000024C 04B045E2 SUB R11,R5,#+4 \ 00000250 00004BE0 SUB R0,R11,R0 \ 00000254 0830A0E1 MOV R3,R8 \ 00000258 0810A0E3 MOV R1,#+8 \ 0000025C 02002DE9 PUSH {R1} \ 00000260 01002DE9 PUSH {R0} \ 00000264 340094E5 LDR R0,[R4, #+52] \ 00000268 1B20A0E3 MOV R2,#+27 \ 0000026C 0310A0E3 MOV R1,#+3 \ 00000270 4C0100EF SWI +332 4057 wsprintf(data->ws2,percent_t,cltop?LG_GRSKEYCLIST:empty_str); \ 00000274 B40196E5 LDR R0,[R6, #+436] \ 00000278 14D08DE2 ADD SP,SP,#+20 \ 0000027C 000050E3 CMP R0,#+0 \ 00000280 0300000A BEQ ??method0_3 \ 00000284 0C00A0E3 MOV R0,#+12 \ 00000288 500E80E3 ORR R0,R0,#0x500 \ 0000028C 072080E0 ADD R2,R0,R7 \ 00000290 000000EA B ??method0_4 \ ??method0_3: \ 00000294 1E2087E2 ADD R2,R7,#+30 \ ??method0_4: \ 00000298 380094E5 LDR R0,[R4, #+56] \ 0000029C 181087E2 ADD R1,R7,#+24 \ 000002A0 240100EF SWI +292 4058 DrawString(data->ws2,(scr_w >> 1),scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4059 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNRIGHT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 000002A4 1700A0E3 MOV R0,#+23 \ 000002A8 2E0100EF SWI +302 \ 000002AC 0060A0E1 MOV R6,R0 \ 000002B0 0000A0E3 MOV R0,#+0 \ 000002B4 2E0100EF SWI +302 \ 000002B8 0090A0E1 MOV R9,R0 \ 000002BC 0500A0E3 MOV R0,#+5 \ 000002C0 C50100EF SWI +453 \ 000002C4 04109DE5 LDR R1,[SP, #+4] \ 000002C8 40002DE9 PUSH {R6} \ 000002CC C1A0A0E1 ASR R10,R1,#+1 \ 000002D0 00022DE9 PUSH {R9} \ 000002D4 0410A0E3 MOV R1,#+4 \ 000002D8 02002DE9 PUSH {R1} \ 000002DC 00204BE0 SUB R2,R11,R0 \ 000002E0 0830A0E1 MOV R3,R8 \ 000002E4 0510A0E3 MOV R1,#+5 \ 000002E8 02002DE9 PUSH {R1} \ 000002EC 0B10A0E1 MOV R1,R11 \ 000002F0 02002DE9 PUSH {R1} \ 000002F4 380094E5 LDR R0,[R4, #+56] \ 000002F8 0A10A0E1 MOV R1,R10 \ 000002FC 4C0100EF SWI +332 4060 wsprintf(data->ws2,percent_t,LG_GRSKEYEXIT); \ 00000300 1400A0E3 MOV R0,#+20 \ 00000304 500E80E3 ORR R0,R0,#0x500 \ 00000308 072080E0 ADD R2,R0,R7 \ 0000030C 380094E5 LDR R0,[R4, #+56] \ 00000310 181087E2 ADD R1,R7,#+24 \ 00000314 240100EF SWI +292 4061 DrawString(data->ws2,3,scr_h-4-GetFontYSIZE(FONT_MEDIUM_BOLD), 4062 scr_w>>1,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000318 1700A0E3 MOV R0,#+23 \ 0000031C 2E0100EF SWI +302 \ 00000320 0060A0E1 MOV R6,R0 \ 00000324 0000A0E3 MOV R0,#+0 \ 00000328 2E0100EF SWI +302 \ 0000032C 0090A0E1 MOV R9,R0 \ 00000330 0500A0E3 MOV R0,#+5 \ 00000334 C50100EF SWI +453 \ 00000338 40002DE9 PUSH {R6} \ 0000033C 00022DE9 PUSH {R9} \ 00000340 0110A0E3 MOV R1,#+1 \ 00000344 02002DE9 PUSH {R1} \ 00000348 00204BE0 SUB R2,R11,R0 \ 0000034C 0A30A0E1 MOV R3,R10 \ 00000350 0510A0E3 MOV R1,#+5 \ 00000354 02002DE9 PUSH {R1} \ 00000358 0B10A0E1 MOV R1,R11 \ 0000035C 02002DE9 PUSH {R1} \ 00000360 380094E5 LDR R0,[R4, #+56] \ 00000364 0310A0E3 MOV R1,#+3 \ 00000368 4C0100EF SWI +332 \ 0000036C 28D08DE2 ADD SP,SP,#+40 4063 // DrawImg(15,200,(int)"4:\\zbin\\naticq\\img\\smiles_logo.png"); 4064 wsprintf(data->ws2,percent_t,"Mod Evilfox(c), kluchnik, windes"); \ 00000370 1C00A0E3 MOV R0,#+28 \ 00000374 500E80E3 ORR R0,R0,#0x500 \ 00000378 072080E0 ADD R2,R0,R7 \ 0000037C 380094E5 LDR R0,[R4, #+56] \ 00000380 181087E2 ADD R1,R7,#+24 \ 00000384 240100EF SWI +292 4065 DrawString(data->ws2,3,scr_h-GetFontYSIZE(FONT_MEDIUM_BOLD)-GetFontYSIZE(FONT_MEDIUM_BOLD)-40, 4066 scr_w-4,scr_h-4,FONT_MEDIUM_BOLD,TEXT_ALIGNLEFT,GetPaletteAdrByColorIndex(0),GetPaletteAdrByColorIndex(23)); \ 00000388 1700A0E3 MOV R0,#+23 \ 0000038C 2E0100EF SWI +302 \ 00000390 0070A0E1 MOV R7,R0 \ 00000394 0000A0E3 MOV R0,#+0 \ 00000398 2E0100EF SWI +302 \ 0000039C 0090A0E1 MOV R9,R0 \ 000003A0 0500A0E3 MOV R0,#+5 \ 000003A4 C50100EF SWI +453 \ 000003A8 0060A0E1 MOV R6,R0 \ 000003AC 0500A0E3 MOV R0,#+5 \ 000003B0 C50100EF SWI +453 \ 000003B4 80002DE9 PUSH {R7} \ 000003B8 00022DE9 PUSH {R9} \ 000003BC 0110A0E3 MOV R1,#+1 \ 000003C0 02002DE9 PUSH {R1} \ 000003C4 0830A0E1 MOV R3,R8 \ 000003C8 0510A0E3 MOV R1,#+5 \ 000003CC 02002DE9 PUSH {R1} \ 000003D0 00082DE9 PUSH {R11} \ 000003D4 061045E0 SUB R1,R5,R6 \ 000003D8 000041E0 SUB R0,R1,R0 \ 000003DC 282040E2 SUB R2,R0,#+40 \ 000003E0 380094E5 LDR R0,[R4, #+56] \ 000003E4 0310A0E3 MOV R1,#+3 \ 000003E8 4C0100EF SWI +332 4067 #endif 4068 } \ 000003EC 28D08DE2 ADD SP,SP,#+40 \ 000003F0 F08FBDE8 POP {R4-R11,PC} ;; return \ ??method0_0: \ 000003F4 ........ DC32 pictures_max \ 000003F8 ........ DC32 pictures_loaded \ 000003FC ........ DC32 total_smiles \ 00000400 ........ DC32 xstatuses_load 4069 \ In segment CODE, align 4, keep-with-next 4070 void method1(MAIN_GUI *data,void *(*malloc_adr)(int)) 4071 { \ method1: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4072 data->ws1=AllocWS(256); \ 00000008 400FA0E3 MOV R0,#+256 \ 0000000C 250100EF SWI +293 \ 00000010 340084E5 STR R0,[R4, #+52] 4073 data->ws2=AllocWS(256); \ 00000014 400FA0E3 MOV R0,#+256 \ 00000018 250100EF SWI +293 \ 0000001C 380084E5 STR R0,[R4, #+56] 4074 data->gui.state=1; \ 00000020 0100A0E3 MOV R0,#+1 \ 00000024 0C00C4E5 STRB R0,[R4, #+12] 4075 } \ 00000028 1080BDE8 POP {R4,PC} ;; return 4076 \ In segment CODE, align 4, keep-with-next 4077 void method2(MAIN_GUI *data,void (*mfree_adr)(void *)) 4078 { \ method2: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4079 FreeWS(data->ws1); \ 00000008 340094E5 LDR R0,[R4, #+52] \ 0000000C 290100EF SWI +297 4080 FreeWS(data->ws2); \ 00000010 380094E5 LDR R0,[R4, #+56] \ 00000014 290100EF SWI +297 4081 data->gui.state=0; \ 00000018 0000A0E3 MOV R0,#+0 \ 0000001C 0C00C4E5 STRB R0,[R4, #+12] 4082 } \ 00000020 1080BDE8 POP {R4,PC} ;; return 4083 \ In segment CODE, align 4, keep-with-next 4084 void method3(MAIN_GUI *data,void *(*malloc_adr)(int),void (*mfree_adr)(void *)) 4085 { \ method3: \ 00000000 10402DE9 PUSH {R4,LR} \ 00000004 0040A0E1 MOV R4,R0 4086 DisableIDLETMR(); \ 00000008 7F0100EF SWI +383 4087 data->gui.state=2; \ 0000000C 0200A0E3 MOV R0,#+2 \ 00000010 0C00C4E5 STRB R0,[R4, #+12] 4088 } \ 00000014 1080BDE8 POP {R4,PC} ;; return 4089 \ In segment CODE, align 4, keep-with-next 4090 void method4(MAIN_GUI *data,void (*mfree_adr)(void *)) 4091 { 4092 if (data->gui.state!=2) \ method4: \ 00000000 0C10D0E5 LDRB R1,[R0, #+12] \ 00000004 020051E3 CMP R1,#+2 4093 return; 4094 data->gui.state=1; \ 00000008 0110A003 MOVEQ R1,#+1 \ 0000000C 0C10C005 STRBEQ R1,[R0, #+12] 4095 } \ 00000010 1EFF2FE1 BX LR ;; return 4096 \ In segment CODE, align 4, keep-with-next 4097 int method5(MAIN_GUI *data,GUI_MSG *msg) 4098 { \ method5: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0140A0E1 MOV R4,R1 4099 DirectRedrawGUI(); \ 0000000C 3F0100EF SWI +319 4100 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 4101 { 4102 switch(msg->gbsmsg->submess) \ 00000028 ........ LDR R5,??DataTable157 ;; S_ICONS \ 0000002C 080090E5 LDR R0,[R0, #+8] \ 00000030 ........ LDR R4,??DataTable156 ;; create_connect \ 00000034 5410A0E3 MOV R1,#+84 \ 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 0600000A 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 050000EA B ??method5_5 4103 { 4104 #ifdef kluchnik 4105 case LEFT_SOFT: 4106 if (cltop) create_contactlist_menu(); 4107 // if (cltop) remake_clmenu(); 4108 break; 4109 case RIGHT_SOFT: 4110 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI 4111 #else 4112 case LEFT_SOFT: 4113 return(1); //Происходит вызов GeneralFunc для тек. GUI -> закрытие GUI \ ??method5_1: \ 00000068 0100A0E3 MOV R0,#+1 \ 0000006C F280BDE8 POP {R1,R4-R7,PC} 4114 case RIGHT_SOFT: 4115 // if (cltop) remake_clmenu(); 4116 if (cltop) create_contactlist_menu(); \ ??method5_2: \ 00000070 B40195E5 LDR R0,[R5, #+436] \ 00000074 000050E3 CMP R0,#+0 \ 00000078 F280BD08 POPEQ {R1,R4-R7,PC} \ 0000007C ........ BL create_contactlist_menu \ ??method5_5: \ 00000080 0000A0E3 MOV R0,#+0 \ 00000084 F280BDE8 POP {R1,R4-R7,PC} 4117 break; 4118 #endif 4119 case GREEN_BUTTON: 4120 disautorecconect=0; \ ??method5_3: \ 00000088 0000A0E3 MOV R0,#+0 \ 0000008C 600185E5 STR R0,[R5, #+352] 4121 if ((connect_state==0)&&(sock==-1)) \ 00000090 8C0195E5 LDR R0,[R5, #+396] \ 00000094 000050E3 CMP R0,#+0 \ 00000098 90019505 LDREQ R0,[R5, #+400] \ 0000009C 01007003 CMNEQ R0,#+1 \ 000000A0 0700001A BNE ??method5_0 4122 { 4123 GBS_DelTimer(&reconnect_tmr); \ 000000A4 010000EA B ??method5_6 4124 DNR_TRIES=3; 4125 SUBPROC((void *)create_connect); 4126 } 4127 break; 4128 case '0': 4129 SUBPROC((void*)end_socket); \ ??method5_4: \ 000000A8 ........ LDR R0,??DataTable152 ;; end_socket \ 000000AC 710100EF SWI +369 4130 GBS_DelTimer(&reconnect_tmr); \ ??method5_6: \ 000000B0 0600A0E1 MOV R0,R6 \ 000000B4 8C0100EF SWI +396 4131 DNR_TRIES=3; \ 000000B8 D87185E5 STR R7,[R5, #+472] 4132 SUBPROC((void *)create_connect); \ 000000BC 0400A0E1 MOV R0,R4 \ 000000C0 710100EF SWI +369 4133 break; 4134 } 4135 } 4136 return(0); \ ??method5_0: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 F280BDE8 POP {R1,R4-R7,PC} ;; return 4137 } 4138 \ In segment CODE, align 4, keep-with-next 4139 int method8(void){return(0);} \ method8: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 4140 \ In segment CODE, align 4, keep-with-next 4141 int method9(void){return(0);} \ method9: \ 00000000 0000A0E3 MOV R0,#+0 \ 00000004 1EFF2FE1 BX LR ;; return 4142 4143 const void * const gui_methods[11]={ 4144 (void *)method0, //Redraw 4145 (void *)method1, //Create 4146 (void *)method2, //Close 4147 (void *)method3, //Focus 4148 (void *)method4, //Unfocus 4149 (void *)method5, //OnKey 4150 0, 4151 (void *)kill_data, //method7, //Destroy 4152 (void *)method8, 4153 (void *)method9, 4154 0 4155 }; 4156 4157 extern const int Reset_timer; \ In segment CODE, align 4, keep-with-next 4158 int my_keyhook(int key, int m) 4159 { \ my_keyhook: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 0050A0E1 MOV R5,R0 4160 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 4161 { 4162 if(change_back_status==1) \ 00000018 ........ LDR R4,??DataTable157 ;; S_ICONS \ 0000001C 0060A0E3 MOV R6,#+0 \ 00000020 3C0194E5 LDR R0,[R4, #+316] \ 00000024 010050E3 CMP R0,#+1 \ 00000028 0300001A BNE ??my_keyhook_1 4163 { 4164 CurrentStatus=status_rem; \ 0000002C 380194E5 LDR R0,[R4, #+312] \ 00000030 740184E5 STR R0,[R4, #+372] 4165 set_my_status(); \ 00000034 ........ BL set_my_status 4166 // SUBPROC((void*)WriteDefSettings); 4167 change_back_status=0; \ 00000038 3C6184E5 STR R6,[R4, #+316] 4168 } 4169 #ifdef EVILFOX 4170 if ((key==VOL_UP_BUTTON)&&(IsIdleUiOnTop())) 4171 { 4172 if(autobot==1) 4173 { 4174 autobot=0; 4175 ShowMSG(1,(int)"Autobot Off"); 4176 } 4177 else 4178 { 4179 autobot=1; 4180 ShowMSG(1,(int)"Autobot On"); 4181 } 4182 } 4183 #endif 4184 #ifdef ELKA 4185 #ifdef EVILFOX 4186 if ((key==VOL_DOWN_BUTTON)&&(IsIdleUiOnTop())) 4187 #else 4188 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 4189 #endif 4190 { 4191 GBS_StopTimer(&away_tmr); \ 00000050 6400A0E3 MOV R0,#+100 \ 00000054 580D80E3 ORR R0,R0,#0x1600 \ 00000058 040080E0 ADD R0,R0,R4 \ 0000005C 440100EF SWI +324 4192 msg_away_timer=AUTO_ENGADE; \ 00000060 ........ LDR R0,??DataTable145 ;; AUTO_ENGADE \ 00000064 000090E5 LDR R0,[R0, #+0] \ 00000068 2C0184E5 STR R0,[R4, #+300] 4193 away_timer(); \ 0000006C ........ BL away_timer 4194 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} 4195 } 4196 else 4197 { 4198 #endif 4199 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} 4200 { 4201 msg_away_timer=0; \ 00000090 2C6184E5 STR R6,[R4, #+300] 4202 away_m=0; \ 00000094 346184E5 STR R6,[R4, #+308] 4203 } 4204 #ifdef ELKA 4205 } 4206 #endif 4207 } 4208 return 0; \ ??my_keyhook_0: \ 00000098 0000A0E3 MOV R0,#+0 \ 0000009C 7080BDE8 POP {R4-R6,PC} ;; return \ ??my_keyhook_3: \ 000000A0 ........ DC32 Reset_timer 4209 } \ In segment DATA_C, align 4, align-sorted \ `?> %s <<" \ 3C3C00 \ 000000C9 000000 DC8 0, 0, 0 \ 000000CC 2563257400 DC8 "%c%t" \ 000000D1 000000 DC8 0, 0, 0 \ 000000D4 2825642F2564 DC8 "(%d/%d)" \ 2900 \ 000000DC EEF8E8E1EAE0 DC8 "\356\370\350\341\352\340" \ 00 \ 000000E3 00 DC8 0 \ 000000E4 426164207061 DC8 "Bad packet" \ 636B657400 \ 000000EF 00 DC8 0 \ 000000F0 534325643A20 DC8 "SC%d: %04X" \ 2530345800 \ 000000FB 00 DC8 0 \ 000000FC 4552523A2025 DC8 "ERR: %s" \ 7300 \ 00000104 75696E256400 DC8 "uin%d" \ 0000010A 0000 DC8 0, 0 \ 0000010C 4D534725643A DC8 "MSG%d: %s" \ 20257300 \ 00000116 0000 DC8 0, 0 \ 00000118 257325642E77 DC8 "%s%d.wav" \ 617600 \ 00000121 000000 DC8 0, 0, 0 \ 00000124 50696E672025 DC8 "Ping %d-%d seconds!" \ 642D25642073 \ 65636F6E6473 \ 2100 \ 00000138 50696E673A20 DC8 "Ping: %dsec" \ 256473656300 \ 00000144 6D6F64206279 DC8 6DH, 6FH, 64H, 20H, 62H, 79H, 20H, 45H \ 2045 \ 0000014C 76696C666F78 DC8 76H, 69H, 6CH, 66H, 6FH, 78H, 2CH, 6BH \ 2C6B \ 00000154 6C7563686E69 DC8 6CH, 75H, 63H, 68H, 6EH, 69H, 6BH, 2CH \ 6B2C \ 0000015C 77696E646573 DC8 77H, 69H, 6EH, 64H, 65H, 73H, 20H, 62H \ 2062 \ 00000164 61736564206F DC8 61H, 73H, 65H, 64H, 20H, 6FH, 6EH, 20H \ 6E20 \ 0000016C 726576697369 DC8 72H, 65H, 76H, 69H, 73H, 69H, 6FH, 6EH \ 6F6E \ 00000174 20323035382C DC8 20H, 32H, 30H, 35H, 38H, 2CH, 20H, 6DH \ 206D \ 0000017C 6F6420646174 DC8 6FH, 64H, 20H, 64H, 61H, 74H, 65H, 3AH \ 653A \ 00000184 202573206174 DC8 20H, 25H, 73H, 20H, 61H, 74H, 20H, 25H \ 2025 \ 0000018C 732000 DC8 73H, 20H, 0 \ 0000018F 00 DC8 0 \ 00000190 4D6172203330 DC8 "Mar 30 2008" \ 203230303800 \ 0000019C 32313A33323A DC8 "21:32:46" \ 343600 \ 000001A5 000000 DC8 0, 0, 0 \ 000001A8 47414D453A00 DC8 "GAME:" \ 000001AE 0000 DC8 0, 0 \ 000001B0 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 \ 000001DB 00 DC8 0 \ 000001DC 4745545F4F4E DC8 "GET_ONLINE_TIME" \ 4C494E455F54 \ 494D4500 \ 000001EC 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 \ 0000021C 4745545F4D53 DC8 "GET_MSG_INFO" \ 475F494E464F \ 00 \ 00000229 000000 DC8 0, 0, 0 \ 0000022C CEEFE5F0E0F2 DC8 "\316\357\345\360\340\362\356\360: %s" \ EEF03A202573 \ 00 \ 00000239 000000 DC8 0, 0, 0 \ 0000023C 53656E64696E DC8 "Sending provider name..." \ 672070726F76 \ 69646572206E \ 616D652E2E2E \ 00 \ 00000255 000000 DC8 0, 0, 0 \ 00000258 4745545F5052 DC8 "GET_PROVIDER" \ 4F5649444552 \ 00 \ 00000265 000000 DC8 0, 0, 0 \ 00000268 2A2A2A416363 DC8 "***Access denied***" \ 657373206465 \ 6E6965642A2A \ 2A00 \ 0000027C 4745545F4D4F DC8 "GET_MOD_INFO" \ 445F494E464F \ 00 \ 00000289 000000 DC8 0, 0, 0 \ 0000028C 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 \ 000002A8 4745545F4241 DC8 "GET_BAT_INFO" \ 545F494E464F \ 00 \ 000002B5 000000 DC8 0, 0, 0 \ 000002B8 C0E2F2EEEEF2 DC8 "\300\342\362\356\356\362\342\345\362\367\350\352: %s %s! %s %s" \ E2E5F2F7E8EA \ 3A2025732025 \ 732120257320 \ 257300 \ 000002D3 00 DC8 0 \ 000002D4 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 000002DC 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 000002E4 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 000002EC 696C65732F6E DC8 69H, 6CH, 65H, 73H, 2FH, 6EH, 61H, 74H \ 6174 \ 000002F4 6963715F6D6F DC8 69H, 63H, 71H, 5FH, 6DH, 6FH, 64H, 32H \ 6432 \ 000002FC 303538732E7A DC8 30H, 35H, 38H, 73H, 2EH, 7AH, 69H, 70H \ 6970 \ 00000304 202873676F6C DC8 20H, 28H, 73H, 67H, 6FH, 6CH, 64H, 29H \ 6429 \ 0000030C 202020202834 DC8 20H, 20H, 20H, 20H, 28H, 34H, 30H, 6BH \ 306B \ 00000314 62290A687474 DC8 62H, 29H, 0AH, 68H, 74H, 74H, 70H, 3AH \ 703A \ 0000031C 2F2F77696E64 DC8 2FH, 2FH, 77H, 69H, 6EH, 64H, 65H, 73H \ 6573 \ 00000324 2E6E61726F64 DC8 2EH, 6EH, 61H, 72H, 6FH, 64H, 2EH, 72H \ 2E72 \ 0000032C 752F66696C65 DC8 75H, 2FH, 66H, 69H, 6CH, 65H, 73H, 2FH \ 732F \ 00000334 6E6174696371 DC8 6EH, 61H, 74H, 69H, 63H, 71H, 5FH, 6DH \ 5F6D \ 0000033C 6F6432303538 DC8 6FH, 64H, 32H, 30H, 35H, 38H, 6EH, 2EH \ 6E2E \ 00000344 7A697020284E DC8 7AH, 69H, 70H, 20H, 28H, 4EH, 65H, 77H \ 6577 \ 0000034C 53476F6C6429 DC8 53H, 47H, 6FH, 6CH, 64H, 29H, 20H, 28H \ 2028 \ 00000354 34306B62290A DC8 34H, 30H, 6BH, 62H, 29H, 0AH, 68H, 74H \ 6874 \ 0000035C 74703A2F2F77 DC8 74H, 70H, 3AH, 2FH, 2FH, 77H, 69H, 6EH \ 696E \ 00000364 6465732E6E61 DC8 64H, 65H, 73H, 2EH, 6EH, 61H, 72H, 6FH \ 726F \ 0000036C 642E72752F66 DC8 64H, 2EH, 72H, 75H, 2FH, 66H, 69H, 6CH \ 696C \ 00000374 65732F6E6174 DC8 65H, 73H, 2FH, 6EH, 61H, 74H, 69H, 63H \ 6963 \ 0000037C 715F6D6F6432 DC8 71H, 5FH, 6DH, 6FH, 64H, 32H, 30H, 35H \ 3035 \ 00000384 38652E7A6970 DC8 38H, 65H, 2EH, 7AH, 69H, 70H, 20H, 28H \ 2028 \ 0000038C 656C6B612920 DC8 65H, 6CH, 6BH, 61H, 29H, 20H, 20H, 20H \ 2020 \ 00000394 20202834306B DC8 20H, 20H, 28H, 34H, 30H, 6BH, 62H, 29H \ 6229 \ 0000039C 0A66696C6573 DC8 0AH, 66H, 69H, 6CH, 65H, 73H, 3AH, 20H \ 3A20 \ 000003A4 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 000003AC 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 000003B4 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 000003BC 696C65732F6E DC8 69H, 6CH, 65H, 73H, 2FH, 6EH, 61H, 74H \ 6174 \ 000003C4 6963716D6F64 DC8 69H, 63H, 71H, 6DH, 6FH, 64H, 5FH, 61H \ 5F61 \ 000003CC 6C6C66696C65 DC8 6CH, 6CH, 66H, 69H, 6CH, 65H, 73H, 5FH \ 735F \ 000003D4 772E7A697020 DC8 77H, 2EH, 7AH, 69H, 70H, 20H, 28H, 34H \ 2834 \ 000003DC 33326B62290A DC8 33H, 32H, 6BH, 62H, 29H, 0AH, 53H, 74H \ 5374 \ 000003E4 61747573206F DC8 61H, 74H, 75H, 73H, 20H, 6FH, 6EH, 20H \ 6E20 \ 000003EC 69636F6E6261 DC8 69H, 63H, 6FH, 6EH, 62H, 61H, 72H, 20H \ 7220 \ 000003F4 687474703A2F DC8 68H, 74H, 74H, 70H, 3AH, 2FH, 2FH, 77H \ 2F77 \ 000003FC 696E6465732E DC8 69H, 6EH, 64H, 65H, 73H, 2EH, 6EH, 61H \ 6E61 \ 00000404 726F642E7275 DC8 72H, 6FH, 64H, 2EH, 72H, 75H, 2FH, 66H \ 2F66 \ 0000040C 696C65732F69 DC8 69H, 6CH, 65H, 73H, 2FH, 69H, 6DH, 67H \ 6D67 \ 00000414 31367831362E DC8 31H, 36H, 78H, 31H, 36H, 2EH, 7AH, 69H \ 7A69 \ 0000041C 70202837346B DC8 70H, 20H, 28H, 37H, 34H, 6BH, 62H, 29H \ 6229 \ 00000424 0AD2E0EA20E6 DC8 0AH, 0D2H, 0E0H, 0EAH, 20H, 0E6H, 0E5H, 20H \ E520 \ 0000042C E2F1E520E1F3 DC8 0E2H, 0F1H, 0E5H, 20H, 0E1H, 0F3H, 0E4H, 0E5H \ E4E5 \ 00000434 F220F2F3F220 DC8 0F2H, 20H, 0F2H, 0F3H, 0F2H, 20H, 68H, 74H \ 6874 \ 0000043C 74703A2F2F6B DC8 74H, 70H, 3AH, 2FH, 2FH, 6BH, 6CH, 75H \ 6C75 \ 00000444 63686E696B2E DC8 63H, 68H, 6EH, 69H, 6BH, 2EH, 6AH, 69H \ 6A69 \ 0000044C 6E6F2D6E6574 DC8 6EH, 6FH, 2DH, 6EH, 65H, 74H, 2EH, 72H \ 2E72 \ 00000454 752F6E617469 DC8 75H, 2FH, 6EH, 61H, 74H, 69H, 63H, 71H \ 6371 \ 0000045C 6D6F642F00 DC8 6DH, 6FH, 64H, 2FH, 0 \ 00000461 000000 DC8 0, 0, 0 \ 00000464 53656E64696E DC8 "Sending url info..." \ 672075726C20 \ 696E666F2E2E \ 2E00 \ 00000478 4745545F5552 DC8 "GET_URL_INFO" \ 4C5F494E464F \ 00 \ 00000485 000000 DC8 0, 0, 0 \ 00000488 204F6E6C696E DC8 " Online: %02d:%02d:%02d %02d-%02d" \ 653A20253032 \ 643A25303264 \ 3A2530326420 \ 253032642D25 \ 30326400 \ 000004AA 0000 DC8 0, 0 \ 000004AC 53746174653A DC8 53H, 74H, 61H, 74H, 65H, 3AH, 20H, 25H \ 2025 \ 000004B4 642C20525873 DC8 64H, 2CH, 20H, 52H, 58H, 73H, 74H, 61H \ 7461 \ 000004BC 74653A202564 DC8 74H, 65H, 3AH, 20H, 25H, 64H, 0AH, 52H \ 0A52 \ 000004C4 783A2564622C DC8 78H, 3AH, 25H, 64H, 62H, 2CH, 54H, 78H \ 5478 \ 000004CC 3A2564620A51 DC8 3AH, 25H, 64H, 62H, 0AH, 51H, 75H, 65H \ 7565 \ 000004D4 75653A202564 DC8 75H, 65H, 3AH, 20H, 25H, 64H, 62H, 0AH \ 620A \ 000004DC 25730A257300 DC8 25H, 73H, 0AH, 25H, 73H, 0 \ 000004E2 0000 DC8 0, 0 \ 000004E4 0A4C6F616465 DC8 "\012Loaded %d smiles" \ 642025642073 \ 6D696C657300 \ 000004F6 0000 DC8 0, 0 \ 000004F8 0A4C6F616465 DC8 "\012Loaded %d xstatus" \ 642025642078 \ 737461747573 \ 00 \ 0000050B 00 DC8 0 \ 0000050C 434C69737400 DC8 "CList" \ 00000512 0000 DC8 0, 0 \ 00000514 4578697400 DC8 "Exit" \ 00000519 000000 DC8 0, 0, 0 \ 0000051C 4D6F64204576 DC8 "Mod Evilfox(c), kluchnik, windes" \ 696C666F7828 \ 63292C206B6C \ 7563686E696B \ 2C2077696E64 \ 657300 \ 0000053D 000000 DC8 0, 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 726576697369 DC8 "revision 2058, mod date: %s at %s " \ 6F6E20323035 \ 382C206D6F64 \ 20646174653A \ 202573206174 \ 2025732000 \ 000006D3 00 DC8 0 \ ipc_my_name: \ 000006D4 4E6174494351 DC8 "NatICQ" \ 00 \ 000006DB 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006EB 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000 \ ipc_xtask_name: \ 000006F4 585461736B00 DC8 "XTask" \ 000006FA 0000 DC8 0, 0 \ x_status_change: \ 000006FC 582D53746174 DC8 "X-Status change" \ 757320636861 \ 6E676500 \ ipc_game_name: \ 0000070C 436F6D626174 DC8 "Combats" \ 7300 \ gui_methods: \ 00000714 ............ DC32 method0, method1, method2, method3, method4, method5, 0H \ ............ \ ............ \ ............ \ 00000000 \ 00000730 ............ DC32 kill_data, method8, method9, 0H \ ............ \ 00000000 \ In segment DATA_C, align 4, align-sorted \ ipc_test_name: \ 00000000 7465737400 DC8 "test" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_OFFLINE: \ 00000000 4F66666C696E DC8 "Offline" \ 6500 \ In segment DATA_C, align 4, align-sorted \ S_INVISIBLE: \ 00000000 496E76697369 DC8 "Invisible" \ 626C6500 \ 0000000A 0000 DC8 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_AWAY: \ 00000000 4177617900 DC8 "Away" \ 00000005 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_NA: \ 00000000 4E2F4100 DC8 "N/A" \ In segment DATA_C, align 4, align-sorted \ S_OCCUPIED: \ 00000000 4F6363757069 DC8 "Occupied" \ 656400 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ S_DND: \ 00000000 444E4400 DC8 "DND" \ In segment DATA_C, align 4, align-sorted \ S_ONLINE: \ 00000000 4F6E6C696E65 DC8 "Online" \ 00 \ 00000007 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ S_FFC: \ 00000000 46464300 DC8 "FFC" \ In segment DATA_C, align 4, align-sorted \ icons_names: \ 00000000 ............ DC32 `?`, `?` \ .... \ 00000008 ............ DC32 `?`, `?` \ .... \ 00000010 ............ DC32 `?`, `?` \ .... \ 00000018 ............ DC32 `?`, `?` \ .... \ 00000020 ............ DC32 `?`, `?` \ .... \ 00000028 ............ DC32 `?`, `?` \ .... \ 00000030 ............ DC32 `?`, `?` \ .... \ 00000038 ............ DC32 `?`, `?` \ .... \ 00000040 ............ DC32 `?`, `?` \ .... \ 00000048 ............ DC32 `?`, `?` \ .... \ 00000050 ............ DC32 `?`, `?` \ .... \ 00000058 ............ DC32 `?`, `?` \ .... \ 00000060 ............ DC32 `?`, `?` \ .... \ 00000068 ............ DC32 `?`, `?` \ .... \ In segment DATA_C, align 4, align-sorted \ input_awaymsg_desc: \ 00000000 01000000.... DC32 1, input_awaymsg_onkey, input_awaymsg_ghook, input_awaymsg_locret \ ............ \ ........ \ 00000010 00000000.... DC32 0, input_awaymsg_skt \ .... \ 00000018 000000000000 DC16 0, 0, 0, 0 \ 0000 \ 00000020 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 4212 \ In segment CODE, align 4, keep-with-next 4213 void maincsm_oncreate(CSM_RAM *data) 4214 { \ maincsm_oncreate: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 0050A0E1 MOV R5,R0 4215 MAIN_GUI *main_gui=malloc(sizeof(MAIN_GUI)); \ 00000008 4000A0E3 MOV R0,#+64 4216 MAIN_CSM*csm=(MAIN_CSM*)data; 4217 zeromem(main_gui,sizeof(MAIN_GUI)); 4218 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,??DataTable160 ;; `?gui.canvas=(void *)(&Canvas); \ 00000044 100084E2 ADD R0,R4,#+16 \ 00000048 000086E5 STR R0,[R6, #+0] 4220 // main_gui->gui.flag30=2; 4221 main_gui->gui.methods=(void *)gui_methods; \ 0000004C 1400A0E3 MOV R0,#+20 \ 00000050 700E80E3 ORR R0,R0,#0x700 \ 00000054 040080E0 ADD R0,R0,R4 \ 00000058 040086E5 STR R0,[R6, #+4] 4222 main_gui->gui.item_ll.data_mfree=(void (*)(void *))mfree_adr(); \ 0000005C 158000EF SWI +32789 \ 00000060 200086E5 STR R0,[R6, #+32] 4223 csm->csm.state=0; \ 00000064 107085E5 STR R7,[R5, #+16] 4224 csm->csm.unk1=0; \ 00000068 147085E5 STR R7,[R5, #+20] 4225 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,??DataTable157 ;; S_ICONS \ 0000007C 180185E5 STR R0,[R5, #+280] 4226 ews=AllocWS(16384); \ 00000080 400CA0E3 MOV R0,#+16384 \ 00000084 250100EF SWI +293 4227 // MutexCreate(&contactlist_mtx); 4228 DNR_TRIES=3; 4229 // SUBPROC((void *)InitSmiles); 4230 // SUBPROC((void *)create_connect); 4231 GBS_StartTimerProc(&tmr_active,TMR_SECOND*10,process_active_timer); \ 00000088 ........ LDR R2,??DataTable148 ;; process_active_timer \ 0000008C 280185E5 STR R0,[R5, #+296] \ 00000090 0300A0E3 MOV R0,#+3 \ 00000094 D80185E5 STR R0,[R5, #+472] \ 00000098 871EA0E3 MOV R1,#+2160 \ 0000009C 6400A0E3 MOV R0,#+100 \ 000000A0 600D80E3 ORR R0,R0,#0x1800 \ 000000A4 050080E0 ADD R0,R0,R5 \ 000000A8 4D0000EF SWI +77 4232 sprintf((char *)ipc_my_name+6,percent_d,UIN); \ 000000AC ........ LDR R0,??DataTable191 ;; UIN \ 000000B0 1B1084E2 ADD R1,R4,#+27 \ 000000B4 002090E5 LDR R2,[R0, #+0] \ 000000B8 DA00A0E3 MOV R0,#+218 \ 000000BC 600E80E3 ORR R0,R0,#0x600 \ 000000C0 040080E0 ADD R0,R0,R4 \ 000000C4 160000EF SWI +22 4233 gipc.name_to=ipc_my_name; \ 000000C8 D400A0E3 MOV R0,#+212 \ 000000CC 600E80E3 ORR R0,R0,#0x600 \ 000000D0 041080E0 ADD R1,R0,R4 \ 000000D4 BC1085E5 STR R1,[R5, #+188] 4234 gipc.name_from=ipc_my_name; \ 000000D8 040080E0 ADD R0,R0,R4 \ 000000DC C00085E5 STR R0,[R5, #+192] 4235 gipc.data=(void *)-1; \ 000000E0 0700E0E1 MVN R0,R7 \ 000000E4 C40085E5 STR R0,[R5, #+196] 4236 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_CHECK_DOUBLERUN,&gipc); \ 000000E8 BC3085E2 ADD R3,R5,#+188 \ 000000EC 0120A0E3 MOV R2,#+1 \ 000000F0 B010A0E3 MOV R1,#+176 \ 000000F4 DE1C81E3 ORR R1,R1,#0xDE00 \ 000000F8 0900A0E3 MOV R0,#+9 \ 000000FC 420C80E3 ORR R0,R0,#0x4200 \ 00000100 000100EF SWI +256 4237 /* 4238 InitXStatusesImg(); 4239 //InitSmiles(); Это вызовется из InitXStatusesImg 4240 create_connect(); 4241 silenthide=1; 4242 gipc.name_to=ipc_xtask_name; 4243 gipc.name_from=ipc_my_name; 4244 gipc.data=0; 4245 GBS_SendMessage(MMI_CEPID,MSG_IPC,IPC_XTASK_IDLE,&gipc); 4246 */ 4247 } \ 00000104 F080BDE8 POP {R4-R7,PC} ;; return 4248 \ In segment CODE, align 4, keep-with-next 4249 void maincsm_onclose(CSM_RAM *csm) 4250 { \ maincsm_onclose: \ 00000000 10402DE9 PUSH {R4,LR} 4251 WriteDefSettings(); 4252 // SaveConfigData(successed_config_filename); 4253 4254 /* 4255 #pragma segment="CONFIG_C" 4256 unsigned int ul; 4257 int f; 4258 extern const CFG_HDR cfghdr0; //first var in CONFIG 4259 void *cfg=(void*)&cfghdr0; 4260 unsigned int len=(int)__segment_end("CONFIG_C")-(int)__segment_begin("CONFIG_C"); 4261 4262 if ((f=fopen("4:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul))==-1){ 4263 f=fopen("0:\\ZBin\\etc\\NATICQ.bcfg",A_ReadWrite+A_Create+A_Truncate,P_READ+P_WRITE,&ul); 4264 } 4265 fwrite(f,cfg,len,&ul); 4266 fclose(f,&ul); 4267 */ 4268 4269 // GBS_DelTimer(&tmr_dorecv); 4270 RemoveKeybMsgHook((void *)my_keyhook); 4271 GBS_DelTimer(&tmr_active); \ 00000004 ........ LDR R4,??DataTable157 ;; S_ICONS \ 00000008 ........ BL WriteDefSettings \ 0000000C ........ LDR R0,??DataTable151 ;; my_keyhook \ 00000010 2D0100EF SWI +301 \ 00000014 6400A0E3 MOV R0,#+100 \ 00000018 600D80E3 ORR R0,R0,#0x1800 \ 0000001C 040080E0 ADD R0,R0,R4 \ 00000020 8C0100EF SWI +396 4272 GBS_DelTimer(&tmr_vibra); \ 00000024 4400A0E3 MOV R0,#+68 \ 00000028 600D80E3 ORR R0,R0,#0x1800 \ 0000002C 040080E0 ADD R0,R0,R4 \ 00000030 8C0100EF SWI +396 4273 GBS_DelTimer(&reconnect_tmr); \ 00000034 5400A0E3 MOV R0,#+84 \ 00000038 600D80E3 ORR R0,R0,#0x1800 \ 0000003C 040080E0 ADD R0,R0,R4 \ 00000040 8C0100EF SWI +396 4274 GBS_DelTimer(&tmr_illumination); \ 00000044 3400A0E3 MOV R0,#+52 \ 00000048 600D80E3 ORR R0,R0,#0x1800 \ 0000004C 040080E0 ADD R0,R0,R4 \ 00000050 8C0100EF SWI +396 4275 GBS_DelTimer(&mytmr); \ 00000054 7400A0E3 MOV R0,#+116 \ 00000058 580D80E3 ORR R0,R0,#0x1600 \ 0000005C 040080E0 ADD R0,R0,R4 \ 00000060 8C0100EF SWI +396 4276 GBS_DelTimer(&mytmr2); \ 00000064 8400A0E3 MOV R0,#+132 \ 00000068 580D80E3 ORR R0,R0,#0x1600 \ 0000006C 040080E0 ADD R0,R0,R4 \ 00000070 8C0100EF SWI +396 4277 GBS_DelTimer(&mytmr3); \ 00000074 EC00A0E3 MOV R0,#+236 \ 00000078 4C0D80E3 ORR R0,R0,#0x1300 \ 0000007C 040080E0 ADD R0,R0,R4 \ 00000080 8C0100EF SWI +396 4278 GBS_DelTimer(&mytmr4); \ 00000084 9400A0E3 MOV R0,#+148 \ 00000088 580D80E3 ORR R0,R0,#0x1600 \ 0000008C 040080E0 ADD R0,R0,R4 \ 00000090 8C0100EF SWI +396 4279 GBS_DelTimer(&statusTmr); \ 00000094 B400A0E3 MOV R0,#+180 \ 00000098 600D80E3 ORR R0,R0,#0x1800 \ 0000009C 040080E0 ADD R0,R0,R4 \ 000000A0 8C0100EF SWI +396 4280 #ifdef NEWSGOLD 4281 GBS_DelTimer(&tracktmr); \ 000000A4 A400A0E3 MOV R0,#+164 \ 000000A8 580D80E3 ORR R0,R0,#0x1600 \ 000000AC 040080E0 ADD R0,R0,R4 \ 000000B0 8C0100EF SWI +396 4282 #endif 4283 GBS_DelTimer(&develop); \ 000000B4 6C0D84E2 ADD R0,R4,#+6912 \ 000000B8 8C0100EF SWI +396 4284 GBS_DelTimer(&away_tmr); \ 000000BC 6400A0E3 MOV R0,#+100 \ 000000C0 580D80E3 ORR R0,R0,#0x1600 \ 000000C4 040080E0 ADD R0,R0,R4 \ 000000C8 8C0100EF SWI +396 4285 SetVibration(0); \ 000000CC 0000A0E3 MOV R0,#+0 \ 000000D0 7C0000EF SWI +124 4286 FreeTemplates(); \ 000000D4 ........ BL FreeTemplates 4287 FreeCLIST(); \ 000000D8 ........ _BLF FreeCLIST,??FreeCLIST??rA 4288 free_ICONS(); \ 000000DC ........ BL free_ICONS 4289 // FreeSmiles(); 4290 FreeWS(ews); \ 000000E0 280194E5 LDR R0,[R4, #+296] \ 000000E4 290100EF SWI +297 4291 FreeXStatusText(); \ 000000E8 ........ _BLF FreeXStatusText,??FreeXStatusText??rA 4292 // MutexDestroy(&contactlist_mtx); 4293 SUBPROC((void *)FreeSmiles); \ 000000EC 24009FE5 LDR R0,??maincsm_onclose_0 ;; FreeSmiles \ 000000F0 710100EF SWI +369 4294 SUBPROC((void *)FreeXStatusesImg); \ 000000F4 20009FE5 LDR R0,??maincsm_onclose_0+0x4 ;; FreeXStatusesImg \ 000000F8 710100EF SWI +369 4295 SUBPROC((void *)end_socket); \ 000000FC ........ LDR R0,??DataTable152 ;; end_socket \ 00000100 710100EF SWI +369 4296 SUBPROC((void *)ClearSendQ); \ 00000104 ........ LDR R0,??DataTable185 ;; ClearSendQ \ 00000108 710100EF SWI +369 4297 SUBPROC((void *)ElfKiller); \ 0000010C ........ LDR R0,??DataTable154 ;; ElfKiller \ 00000110 710100EF SWI +369 4298 } \ 00000114 1080BDE8 POP {R4,PC} ;; return \ ??maincsm_onclose_0: \ 00000118 ........ DC32 FreeSmiles \ 0000011C ........ DC32 FreeXStatusesImg 4299 \ In segment CODE, align 4, keep-with-next 4300 void do_reconnect(void) 4301 { 4302 if (is_gprs_online) \ do_reconnect: \ 00000000 ........ LDR R0,??DataTable157 ;; S_ICONS \ 00000004 00402DE9 PUSH {LR} \ 00000008 AC1190E5 LDR R1,[R0, #+428] \ 0000000C 000051E3 CMP R1,#+0 \ 00000010 0080BD08 POPEQ {PC} 4303 { 4304 DNR_TRIES=3; \ 00000014 0310A0E3 MOV R1,#+3 \ 00000018 D81180E5 STR R1,[R0, #+472] 4305 SUBPROC((void*)create_connect); \ 0000001C ........ LDR R0,??DataTable156 ;; create_connect \ 00000020 710100EF SWI +369 4306 } 4307 } \ 00000024 0080BDE8 POP {PC} ;; return 4308 \ In segment CODE, align 4, keep-with-next 4309 void CheckDoubleRun(void) 4310 { \ CheckDoubleRun: \ 00000000 10402DE9 PUSH {R4,LR} 4311 int csm_id; 4312 if ((csm_id=(int)(gipc.data))!=-1) \ 00000004 ........ LDR R4,??DataTable157 ;; S_ICONS \ 00000008 C40094E5 LDR R0,[R4, #+196] \ 0000000C 010070E3 CMN R0,#+1 \ 00000010 1500000A BEQ ??CheckDoubleRun_0 4313 { 4314 gipc.name_to=ipc_xtask_name; \ 00000014 ........ LDR R1,??DataTable160 ;; `?msg==MSG_IPC) 4347 { 4348 IPC_REQ *ipc; 4349 if ((ipc=(IPC_REQ*)msg->data0)) \ 0000002C 0C8094E5 LDR R8,[R4, #+12] \ 00000030 000058E3 CMP R8,#+0 \ 00000034 8100000A BEQ ??maincsm_onmessage_2 4350 { 4351 if (strcmp_nocase(ipc->name_to,ipc_my_name)==0) \ 00000038 000098E5 LDR R0,[R8, #+0] \ 0000003C D490A0E3 MOV R9,#+212 \ 00000040 609E89E3 ORR R9,R9,#0x600 \ 00000044 071089E0 ADD R1,R9,R7 \ 00000048 ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 0000004C 000050E3 CMP R0,#+0 \ 00000050 7A00001A BNE ??maincsm_onmessage_2 4352 { 4353 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 4354 { 4355 case IPC_CHECK_DOUBLERUN: 4356 //Если приняли свое собственное сообщение, значит запускаем чекер 4357 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 AC0A9FE5 LDR R0,??maincsm_onmessage_5 ;; CheckDoubleRun \ 0000008C 710100EF SWI +369 \ 00000090 6A0000EA B ??maincsm_onmessage_2 4358 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 4359 break; 4360 case IPC_SMILE_PROCESSED: 4361 //Только собственные смайлы ;) 4362 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 8C0A9FE5 LDR R0,??maincsm_onmessage_5+0x4 ;; ProcessNextSmile \ ??maincsm_onmessage_8: \ 000000B0 710100EF SWI +369 4363 SMART_REDRAW(); \ ??maincsm_onmessage_7: \ 000000B4 ........ BL SMART_REDRAW \ 000000B8 600000EA B ??maincsm_onmessage_2 4364 break; 4365 case IPC_XSTATUSIMG_PROCESSED: 4366 //Только собственные иксстатусы ;) 4367 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 740A9FE5 LDR R0,??maincsm_onmessage_5+0x8 ;; ProcessNextXStatImg \ 000000CC F7FFFFEA B ??maincsm_onmessage_8 4368 SMART_REDRAW(); 4369 break; 4370 case IPC_GAME: 4371 { 4372 4373 } 4374 break; 4375 case IPC_TENSECONDS: 4376 //Только свое сообщение 4377 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 4378 { 4379 CLIST *t=(CLIST *)cltop; \ 000000DC B48195E5 LDR R8,[R5, #+436] 4380 int f=0; \ 000000E0 0090A0E3 MOV R9,#+0 \ 000000E4 000058E3 CMP R8,#+0 \ 000000E8 2500000A BEQ ??maincsm_onmessage_11 4381 while(t) 4382 { 4383 if(t->just_now) \ ??maincsm_onmessage_12: \ 000000EC 580098E5 LDR R0,[R8, #+88] \ 000000F0 000050E3 CMP R0,#+0 \ 000000F4 0200000A BEQ ??maincsm_onmessage_13 4384 { 4385 if (!(--(t->just_now))) f=1; \ 000000F8 010050E2 SUBS R0,R0,#+1 \ 000000FC 580088E5 STR R0,[R8, #+88] \ 00000100 0190A003 MOVEQ R9,#+1 4386 } 4387 if (t->isactive) \ ??maincsm_onmessage_13: \ 00000104 7C0098E5 LDR R0,[R8, #+124] \ 00000108 000050E3 CMP R0,#+0 \ 0000010C 0C00000A BEQ ??maincsm_onmessage_14 4388 { 4389 if (!(--(t->isactive))) \ 00000110 010050E2 SUBS R0,R0,#+1 \ 00000114 7C0088E5 STR R0,[R8, #+124] \ 00000118 0900001A BNE ??maincsm_onmessage_14 4390 { 4391 f=1; //Если дошли до 0 хотя бы один раз - надо перерисовать меню 4392 if ((t->log)&&(!t->isunread)) \ 0000011C 700098E5 LDR R0,[R8, #+112] \ 00000120 0190A0E3 MOV R9,#+1 \ 00000124 000050E3 CMP R0,#+0 \ 00000128 0500000A BEQ ??maincsm_onmessage_14 \ 0000012C 600098E5 LDR R0,[R8, #+96] \ 00000130 000050E3 CMP R0,#+0 \ 00000134 0200001A BNE ??maincsm_onmessage_14 4393 { 4394 FreeLOGQ(&t->log); \ 00000138 700088E2 ADD R0,R8,#+112 \ 0000013C ........ BL FreeLOGQ 4395 t->msg_count=0; \ 00000140 806088E5 STR R6,[R8, #+128] 4396 } 4397 } 4398 } 4399 t=(CLIST *)(t->next); \ ??maincsm_onmessage_14: \ 00000144 008098E5 LDR R8,[R8, #+0] 4400 } \ 00000148 000058E3 CMP R8,#+0 \ 0000014C E6FFFF1A BNE ??maincsm_onmessage_12 4401 if (f) \ 00000150 000059E3 CMP R9,#+0 \ 00000154 0A00000A BEQ ??maincsm_onmessage_11 4402 { 4403 CLIST *oldt=NULL; 4404 if (contactlist_menu_id) \ 00000158 BC1195E5 LDR R1,[R5, #+444] \ 0000015C 0000A0E3 MOV R0,#+0 \ 00000160 000051E3 CMP R1,#+0 \ 00000164 0400000A BEQ ??maincsm_onmessage_15 4405 { 4406 oldt=FindContactByN(GetCurMenuItem(FindGUIbyId(contactlist_menu_id,NULL))); \ 00000168 BC0195E5 LDR R0,[R5, #+444] \ 0000016C 0010A0E3 MOV R1,#+0 \ 00000170 090200EF SWI +521 \ 00000174 8F0100EF SWI +399 \ 00000178 ........ _BLF FindContactByN,??FindContactByN??rA 4407 } 4408 RecountMenu(oldt,1); \ ??maincsm_onmessage_15: \ 0000017C 0110A0E3 MOV R1,#+1 \ 00000180 ........ BL RecountMenu 4409 } 4410 if (time_to_stop_t9) \ ??maincsm_onmessage_11: \ 00000184 E80195E5 LDR R0,[R5, #+488] \ 00000188 000050E3 CMP R0,#+0 \ 0000018C 2B00000A BEQ ??maincsm_onmessage_2 4411 { 4412 if (!(--time_to_stop_t9)) \ 00000190 010050E2 SUBS R0,R0,#+1 \ 00000194 E80185E5 STR R0,[R5, #+488] \ 00000198 2800001A BNE ??maincsm_onmessage_2 4413 { 4414 if (IsGuiOnTop(edchat_id)) RefreshGUI(); \ 0000019C C00195E5 LDR R0,[R5, #+448] \ 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 4415 } 4416 } 4417 } 4418 break; 4419 case IPC_SENDMSG: ; //IPC_SENDMSG by BoBa 26.06.07 4420 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 4421 TPKT *msg=malloc(sizeof(PKT)+l+30); \ 000001C4 260089E2 ADD R0,R9,#+38 \ 000001C8 140000EF SWI +20 \ 000001CC 00A0A0E1 MOV R10,R0 4422 msg->pkt.uin=((IPCMsg *)(ipc->data))->uin; \ 000001D0 080098E5 LDR R0,[R8, #+8] 4423 msg->pkt.type=T_SENDMSG; 4424 msg->pkt.data_len=l; 4425 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 4426 //slientsend=1; 4427 if(strstr(msg->data,PASS)==0) \ 000001FC 44199FE5 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 4428 { 4429 SENDMSGCOUNT++; //Номер сообщения 4430 SUBPROC((void *)SendAnswer,0,msg); 4431 } 4432 else 4433 { 4434 msg->pkt.data_len=40; \ 00000210 2800A0E3 MOV R0,#+40 \ 00000214 B600CAE1 STRH R0,[R10, #+6] 4435 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 4436 SENDMSGCOUNT++; //Номер сообщения \ ??maincsm_onmessage_17: \ 00000224 1C0195E5 LDR R0,[R5, #+284] 4437 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,??DataTable183 ;; SendAnswer \ 00000238 0010A0E3 MOV R1,#+0 \ 0000023C 710100EF SWI +369 4438 } 4439 break; 4440 } 4441 } 4442 } 4443 } 4444 //Нарисуем иконочку моего статуса 4445 #define idlegui_id (((int *)icsm)[DISPLACE_OF_IDLEGUI_ID/4]) 4446 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] 4447 if (IsGuiOnTop(idlegui_id)/*&&IsUnlocked()*/) //Если IdleGui на самом верху \ 00000250 350100EF SWI +309 \ 00000254 000050E3 CMP R0,#+0 \ 00000258 6100000A BEQ ??maincsm_onmessage_18 4448 { 4449 GUI *igui=GetTopGUI(); 4450 if (igui) //И он существует \ 0000025C 4D0100EF SWI +333 \ 00000260 000050E3 CMP R0,#+0 \ 00000264 6000000A BEQ ??maincsm_onmessage_19 4451 { 4452 //#ifdef ELKA 4453 INC_show=0; \ 00000268 F06185E5 STR R6,[R5, #+496] 4454 //#endif 4455 canvasdata=BuildCanvas(); //void * - belyj fon! \ 0000026C F18000EF SWI +33009 \ 00000270 E80085E5 STR R0,[R5, #+232] 4456 int icn; 4457 // if(ShowStatusIcon==0 || ShowStatusIcon==3) 4458 // { 4459 if(total_unread) \ 00000274 B00195E5 LDR R0,[R5, #+432] \ 00000278 000050E3 CMP R0,#+0 4460 icn=IS_MSG; \ 0000027C 0D00A013 MOVNE R0,#+13 \ 00000280 0500001A BNE ??maincsm_onmessage_20 4461 else 4462 { 4463 switch(connect_state) \ 00000284 8C0195E5 LDR R0,[R5, #+396] \ 00000288 000050E3 CMP R0,#+0 \ 0000028C 0200000A BEQ ??maincsm_onmessage_20 \ 00000290 030050E2 SUBS R0,R0,#+3 4464 { 4465 case 0: 4466 icn=IS_OFFLINE; break; 4467 case 3: 4468 icn=CurrentStatus; //IS_ONLINE; \ 00000294 74019505 LDREQ R0,[R5, #+372] 4469 break; 4470 default: 4471 icn=IS_UNKNOWN; break; \ 00000298 0E00A013 MOVNE R0,#+14 4472 } 4473 } 4474 //} 4475 //Тут трохи поменял 4476 // by Rainmaker: Рисуем канву только для иконки и выводим в своих координатах 4477 // __root const CFG_CBOX_ITEM cfgcbox9_1[5]={"On main screen","Iconbar","Iconbar except idle","All","Nothing"}; 4478 if(ShowStatusIcon==0 || ShowStatusIcon==2 || ShowStatusIcon==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_20: \ 0000029C ........ LDR R1,??DataTable188 ;; 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 4479 { 4480 DrawCanvas(canvasdata,IDLEICON_X,IDLEICON_Y,IDLEICON_X+GetImgWidth((int)S_ICONS[icn])-1, 4481 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 78189FE5 LDR R1,??maincsm_onmessage_5+0x10 ;; IDLEICON_X \ 000002D0 00A091E5 LDR R10,[R1, #+0] \ 000002D4 74189FE5 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 4482 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 4483 } 4484 // __root const CFG_CBOX_ITEM cfgcbox_8z[4]={"Nothing","On main screen","Iconbar","All"}; 4485 if(show_xstatus==1 || show_xstatus==3) //kluchnik 26.03.08 \ ??maincsm_onmessage_21: \ 0000031C ........ LDR R0,??DataTable189 ;; show_xstatus \ 00000320 000090E5 LDR R0,[R0, #+0] \ 00000324 010050E3 CMP R0,#+1 \ 00000328 03005013 CMPNE R0,#+3 \ 0000032C 2700001A BNE ??maincsm_onmessage_22 4486 { 4487 PNGTOP_DESC *pltop=PNG_TOP(); 4488 pltop->dyn_pltop=XStatusesImgList; 4489 DisableIDLETMR(); \ 00000330 1C889FE5 LDR R8,??maincsm_onmessage_5+0x18 ;; XStatusesIconArray \ 00000334 B98100EF SWI +33209 \ 00000338 ........ LDR R1,??DataTable164 ;; XStatusesImgList \ 0000033C 001091E5 LDR R1,[R1, #+0] \ 00000340 081080E5 STR R1,[R0, #+8] \ 00000344 7F0100EF SWI +383 \ 00000348 ........ LDR R0,??DataTable190 ;; CurrentXStatus \ 0000034C 001098E5 LDR R1,[R8, #+0] \ 00000350 000090E5 LDR R0,[R0, #+0] \ 00000354 000191E7 LDR R0,[R1, +R0, LSL #+2] 4490 DrawCanvas(canvasdata,IDLEICON_XX,IDLEICON_YX,IDLEICON_XX+GetImgWidth((int)XStatusesIconArray[CurrentXStatus])-1, 4491 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,??DataTable190 ;; CurrentXStatus \ 00000368 000090E5 LDR R0,[R0, #+0] \ 0000036C 000191E7 LDR R0,[R1, +R0, LSL #+2] \ 00000370 220000EF SWI +34 \ 00000374 DC179FE5 LDR R1,??maincsm_onmessage_5+0x1C ;; IDLEICON_XX \ 00000378 00A091E5 LDR R10,[R1, #+0] \ 0000037C D8179FE5 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 4492 DrawImg(IDLEICON_XX,IDLEICON_YX,XStatusesIconArray[CurrentXStatus]); \ 000003B0 ........ LDR R0,??DataTable190 ;; 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 4493 } 4494 #ifdef EVILFOX 4495 DrawImg(IDLEICON_X-1,IDLEICON_Y-8,(int)"4:\\zbin\\naticq\\img\\naticq_ms.png"); 4496 #endif 4497 /* 4498 #ifdef EVILFOX 4499 #else 4500 if(strlen(fontpath)>5) 4501 { 4502 #endif 4503 */ 4504 4505 #ifdef ELKA 4506 if (total_unread) \ ??maincsm_onmessage_22: \ 000003D0 B00195E5 LDR R0,[R5, #+432] \ 000003D4 000050E3 CMP R0,#+0 \ 000003D8 0300000A BEQ ??maincsm_onmessage_19 4507 SLI_On(); \ 000003DC ........ BL SLI_On \ 000003E0 010000EA B ??maincsm_onmessage_19 4508 #endif 4509 } 4510 } 4511 else 4512 { 4513 main_d=1; \ ??maincsm_onmessage_18: \ 000003E4 0100A0E3 MOV R0,#+1 \ 000003E8 E00085E5 STR R0,[R5, #+224] 4514 } 4515 } 4516 4517 //---------------------------------------------------// 4518 4519 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 BE00001A BNE ??maincsm_onmessage_23 4520 { 4521 IPC_REQ *ipc; 4522 if ((ipc=(IPC_REQ*)msg->data0)) \ 00000400 0C0094E5 LDR R0,[R4, #+12] \ 00000404 000050E3 CMP R0,#+0 \ 00000408 1C01000A BEQ ??maincsm_onmessage_24 4523 { 4524 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 4525 { 4526 switch (msg->submess) \ 00000424 08009405 LDREQ R0,[R4, #+8] \ 00000428 00005003 CMPEQ R0,#+0 \ 0000042C B200001A BNE ??maincsm_onmessage_23 4527 { 4528 case 0: 4529 { 4530 if (main_d==1) \ 00000430 E00095E5 LDR R0,[R5, #+224] \ 00000434 010050E3 CMP R0,#+1 \ 00000438 8300001A BNE ??maincsm_onmessage_25 4531 { 4532 ClearScreen(); \ 0000043C ........ _BLF ClearScreen,??ClearScreen??rA 4533 if(Is_SMARTCPU_On) \ 00000440 000195E5 LDR R0,[R5, #+256] \ 00000444 000050E3 CMP R0,#+0 \ 00000448 7E00000A BEQ ??maincsm_onmessage_26 4534 { 4535 #ifdef EVILFOX 4536 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, 0); 4537 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, 0); 4538 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, 0); 4539 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, 0); 4540 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, 0); 4541 #else 4542 if(fonto==1) \ 0000044C 0C079FE5 LDR R0,??maincsm_onmessage_5+0x24 ;; msg_d_x \ 00000450 E43095E5 LDR R3,[R5, #+228] \ 00000454 D010A0E3 MOV R1,#+208 \ 00000458 681D81E3 ORR R1,R1,#0x1A00 \ 0000045C 051081E0 ADD R1,R1,R5 \ 00000460 14108DE5 STR R1,[SP, #+20] \ 00000464 A010A0E3 MOV R1,#+160 \ 00000468 681D81E3 ORR R1,R1,#0x1A00 \ 0000046C 051081E0 ADD R1,R1,R5 \ 00000470 10108DE5 STR R1,[SP, #+16] \ 00000474 7010A0E3 MOV R1,#+112 \ 00000478 681D81E3 ORR R1,R1,#0x1A00 \ 0000047C 051081E0 ADD R1,R1,R5 \ 00000480 0C108DE5 STR R1,[SP, #+12] \ 00000484 691D85E2 ADD R1,R5,#+6720 \ 00000488 08108DE5 STR R1,[SP, #+8] \ 0000048C 008090E5 LDR R8,[R0, #+0] \ 00000490 CC069FE5 LDR R0,??maincsm_onmessage_5+0x28 ;; msg_d_y \ 00000494 009090E5 LDR R9,[R0, #+0] \ 00000498 1000A0E3 MOV R0,#+16 \ 0000049C 680D80E3 ORR R0,R0,#0x1A00 \ 000004A0 052080E0 ADD R2,R0,R5 \ 000004A4 BC069FE5 LDR R0,??maincsm_onmessage_5+0x2C ;; spaco2 \ 000004A8 00A090E5 LDR R10,[R0, #+0] \ 000004AC ........ LDR R0,??DataTable202 ;; fonto \ 000004B0 00B090E5 LDR R11,[R0, #+0] \ 000004B4 0A00A0E1 MOV R0,R10 \ 000004B8 01002DE9 PUSH {R0} \ 000004BC 01005BE3 CMP R11,#+1 \ 000004C0 2B00001A BNE ??maincsm_onmessage_27 4543 { 4544 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ 000004C4 0100A0E3 MOV R0,#+1 \ 000004C8 01002DE9 PUSH {R0} \ 000004CC 0910A0E1 MOV R1,R9 \ 000004D0 0800A0E1 MOV R0,R8 \ 000004D4 ........ _BLF PrintField,??PrintField??rA 4545 PrintField(msg_d_x,msg_d_y+paused_height, s_txt, align, fonto, spaco2); \ 000004D8 0A00A0E1 MOV R0,R10 \ 000004DC 01002DE9 PUSH {R0} \ 000004E0 0100A0E3 MOV R0,#+1 \ 000004E4 01002DE9 PUSH {R0} \ 000004E8 E43095E5 LDR R3,[R5, #+228] \ 000004EC 18209DE5 LDR R2,[SP, #+24] \ 000004F0 EC0095E5 LDR R0,[R5, #+236] \ 000004F4 091080E0 ADD R1,R0,R9 \ 000004F8 0800A0E1 MOV R0,R8 \ 000004FC ........ _BLF PrintField,??PrintField??rA 4546 PrintField(msg_d_x,msg_d_y+(2*paused_height), d_txt, align, fonto, spaco2); \ 00000500 0A00A0E1 MOV R0,R10 \ 00000504 01002DE9 PUSH {R0} \ 00000508 0100A0E3 MOV R0,#+1 \ 0000050C 01002DE9 PUSH {R0} \ 00000510 E43095E5 LDR R3,[R5, #+228] \ 00000514 24209DE5 LDR R2,[SP, #+36] \ 00000518 EC0095E5 LDR R0,[R5, #+236] \ 0000051C 801089E0 ADD R1,R9,R0, LSL #+1 \ 00000520 0800A0E1 MOV R0,R8 \ 00000524 ........ _BLF PrintField,??PrintField??rA 4547 PrintField(msg_d_x,msg_d_y+(3*paused_height), f_txt, align, fonto, spaco2); \ 00000528 0A00A0E1 MOV R0,R10 \ 0000052C 01002DE9 PUSH {R0} \ 00000530 0100A0E3 MOV R0,#+1 \ 00000534 01002DE9 PUSH {R0} \ 00000538 E43095E5 LDR R3,[R5, #+228] \ 0000053C 30209DE5 LDR R2,[SP, #+48] \ 00000540 EC0095E5 LDR R0,[R5, #+236] \ 00000544 800080E0 ADD R0,R0,R0, LSL #+1 \ 00000548 091080E0 ADD R1,R0,R9 \ 0000054C 0800A0E1 MOV R0,R8 \ 00000550 ........ _BLF PrintField,??PrintField??rA 4548 PrintField(msg_d_x,msg_d_y+(4*paused_height), g_txt, align, fonto, spaco2); \ 00000554 00042DE9 PUSH {R10} \ 00000558 0100A0E3 MOV R0,#+1 \ 0000055C 01002DE9 PUSH {R0} \ 00000560 E43095E5 LDR R3,[R5, #+228] \ 00000564 3C209DE5 LDR R2,[SP, #+60] \ 00000568 EC0095E5 LDR R0,[R5, #+236] \ 0000056C 001189E0 ADD R1,R9,R0, LSL #+2 \ 00000570 310000EA B ??maincsm_onmessage_28 4549 } 4550 else 4551 { 4552 PrintField(msg_d_x,msg_d_y, a_txt, align, fonto, spaco2); \ ??maincsm_onmessage_27: \ 00000574 0B00A0E1 MOV R0,R11 \ 00000578 01002DE9 PUSH {R0} \ 0000057C 0910A0E1 MOV R1,R9 \ 00000580 0800A0E1 MOV R0,R8 \ 00000584 ........ _BLF PrintField,??PrintField??rA 4553 PrintField(msg_d_x,msg_d_y+GetFontYSIZE(paused_height)+1, s_txt, align, fonto, spaco2); \ 00000588 EC0095E5 LDR R0,[R5, #+236] \ 0000058C C50100EF SWI +453 \ 00000590 0A10A0E1 MOV R1,R10 \ 00000594 02002DE9 PUSH {R1} \ 00000598 090080E0 ADD R0,R0,R9 \ 0000059C 0B10A0E1 MOV R1,R11 \ 000005A0 02002DE9 PUSH {R1} \ 000005A4 E43095E5 LDR R3,[R5, #+228] \ 000005A8 18209DE5 LDR R2,[SP, #+24] \ 000005AC 011080E2 ADD R1,R0,#+1 \ 000005B0 0800A0E1 MOV R0,R8 \ 000005B4 ........ _BLF PrintField,??PrintField??rA 4554 PrintField(msg_d_x,msg_d_y+(2*GetFontYSIZE(paused_height))+2, d_txt, align, fonto, spaco2); \ 000005B8 EC0095E5 LDR R0,[R5, #+236] \ 000005BC C50100EF SWI +453 \ 000005C0 0A10A0E1 MOV R1,R10 \ 000005C4 02002DE9 PUSH {R1} \ 000005C8 800089E0 ADD R0,R9,R0, LSL #+1 \ 000005CC 0B10A0E1 MOV R1,R11 \ 000005D0 02002DE9 PUSH {R1} \ 000005D4 E43095E5 LDR R3,[R5, #+228] \ 000005D8 24209DE5 LDR R2,[SP, #+36] \ 000005DC 021080E2 ADD R1,R0,#+2 \ 000005E0 0800A0E1 MOV R0,R8 \ 000005E4 ........ _BLF PrintField,??PrintField??rA 4555 PrintField(msg_d_x,msg_d_y+(3*GetFontYSIZE(paused_height))+3, f_txt, align, fonto, spaco2); \ 000005E8 EC0095E5 LDR R0,[R5, #+236] \ 000005EC C50100EF SWI +453 \ 000005F0 0A10A0E1 MOV R1,R10 \ 000005F4 02002DE9 PUSH {R1} \ 000005F8 800080E0 ADD R0,R0,R0, LSL #+1 \ 000005FC 090080E0 ADD R0,R0,R9 \ 00000600 0B10A0E1 MOV R1,R11 \ 00000604 02002DE9 PUSH {R1} \ 00000608 E43095E5 LDR R3,[R5, #+228] \ 0000060C 30209DE5 LDR R2,[SP, #+48] \ 00000610 031080E2 ADD R1,R0,#+3 \ 00000614 0800A0E1 MOV R0,R8 \ 00000618 ........ _BLF PrintField,??PrintField??rA 4556 PrintField(msg_d_x,msg_d_y+(4*GetFontYSIZE(paused_height))+4, g_txt, align, fonto, spaco2); \ 0000061C EC0095E5 LDR R0,[R5, #+236] \ 00000620 C50100EF SWI +453 \ 00000624 00042DE9 PUSH {R10} \ 00000628 00082DE9 PUSH {R11} \ 0000062C E43095E5 LDR R3,[R5, #+228] \ 00000630 3C209DE5 LDR R2,[SP, #+60] \ 00000634 000189E0 ADD R0,R9,R0, LSL #+2 \ 00000638 041080E2 ADD R1,R0,#+4 \ ??maincsm_onmessage_28: \ 0000063C 0800A0E1 MOV R0,R8 \ 00000640 ........ _BLF PrintField,??PrintField??rA \ 00000644 28D08DE2 ADD SP,SP,#+40 4557 } 4558 #endif 4559 } 4560 main_d=0; \ ??maincsm_onmessage_26: \ 00000648 E06085E5 STR R6,[R5, #+224] 4561 } 4562 if(Is_UPTIME_On) \ ??maincsm_onmessage_25: \ 0000064C 440195E5 LDR R0,[R5, #+324] \ 00000650 000050E3 CMP R0,#+0 \ 00000654 0100000A BEQ ??maincsm_onmessage_29 4563 DrawOnlineTime(canvasdata); \ 00000658 E80095E5 LDR R0,[R5, #+232] \ 0000065C ........ BL DrawOnlineTime 4564 if(Is_PING_On) \ ??maincsm_onmessage_29: \ 00000660 F80095E5 LDR R0,[R5, #+248] \ 00000664 000050E3 CMP R0,#+0 \ 00000668 0100000A BEQ ??maincsm_onmessage_30 4565 DrawPing(canvasdata); \ 0000066C E80095E5 LDR R0,[R5, #+232] \ 00000670 ........ BL DrawPing 4566 4567 if(Auto_Status && showAwayIdle) \ ??maincsm_onmessage_30: \ 00000674 ........ LDR R0,??DataTable169 ;; Auto_Status \ 00000678 000090E5 LDR R0,[R0, #+0] \ 0000067C 000050E3 CMP R0,#+0 \ 00000680 0500000A BEQ ??maincsm_onmessage_31 \ 00000684 ........ LDR R0,??DataTable170 ;; showAwayIdle \ 00000688 000090E5 LDR R0,[R0, #+0] \ 0000068C 000050E3 CMP R0,#+0 \ 00000690 0100000A BEQ ??maincsm_onmessage_31 4568 DrawAutoMSG(canvasdata); \ 00000694 E80095E5 LDR R0,[R5, #+232] \ 00000698 ........ BL DrawAutoMSG 4569 if(Is_Unread_On) \ ??maincsm_onmessage_31: \ 0000069C C8049FE5 LDR R0,??maincsm_onmessage_5+0x30 ;; Is_Unread_On \ 000006A0 000090E5 LDR R0,[R0, #+0] \ 000006A4 000050E3 CMP R0,#+0 \ 000006A8 1300000A BEQ ??maincsm_onmessage_23 4570 { 4571 sprintf(unread_msg_info, "Unread: %d", total_unread2); \ 000006AC 102195E5 LDR R2,[R5, #+272] \ 000006B0 F78FA0E3 MOV R8,#+988 \ 000006B4 630F88E2 ADD R0,R8,#+396 \ 000006B8 071080E0 ADD R1,R0,R7 \ 000006BC 050088E0 ADD R0,R8,R5 \ 000006C0 160000EF SWI +22 4572 #ifdef EVILFOX 4573 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, space); 4574 #else 4575 PrintField(unread_X,unread_Y, unread_msg_info, align, fonto, spaco1); \ 000006C4 ........ LDR R0,??DataTable171 ;; spaco1 \ 000006C8 052088E0 ADD R2,R8,R5 \ 000006CC 000090E5 LDR R0,[R0, #+0] \ 000006D0 01002DE9 PUSH {R0} \ 000006D4 ........ LDR R0,??DataTable202 ;; fonto \ 000006D8 000090E5 LDR R0,[R0, #+0] \ 000006DC 01002DE9 PUSH {R0} \ 000006E0 E43095E5 LDR R3,[R5, #+228] \ 000006E4 84049FE5 LDR R0,??maincsm_onmessage_5+0x34 ;; unread_Y \ 000006E8 001090E5 LDR R1,[R0, #+0] \ 000006EC 80049FE5 LDR R0,??maincsm_onmessage_5+0x38 ;; unread_X \ 000006F0 000090E5 LDR R0,[R0, #+0] \ 000006F4 ........ _BLF PrintField,??PrintField??rA \ 000006F8 08D08DE2 ADD SP,SP,#+8 4576 #endif 4577 } 4578 } 4579 } 4580 } 4581 } 4582 } 4583 4584 //-----------------------------------------------------------// 4585 4586 if (msg->msg==MSG_RECONFIGURE_REQ) \ ??maincsm_onmessage_23: \ 000006FC 040094E5 LDR R0,[R4, #+4] \ 00000700 AF10A0E3 MOV R1,#+175 \ 00000704 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000708 010050E1 CMP R0,R1 \ 0000070C 3200001A BNE ??maincsm_onmessage_32 4587 { 4588 extern const char *successed_config_filename; 4589 if (strcmp_nocase(successed_config_filename,(char *)msg->data0)==0) \ 00000710 ........ LDR R0,??DataTable196 ;; successed_config_filename \ 00000714 0C1094E5 LDR R1,[R4, #+12] \ 00000718 000090E5 LDR R0,[R0, #+0] \ 0000071C ........ _BLF strcmp_nocase,??strcmp_nocase??rA \ 00000720 000050E3 CMP R0,#+0 \ 00000724 2C00001A BNE ??maincsm_onmessage_32 4590 { 4591 ShowMSG(1,(int)"NatICQ config updated!"); 4592 InitConfig(); 4593 #ifdef NEWSGOLD 4594 initTags(); 4595 #endif 4596 PrintLibInit(1); 4597 FontPathInit((char *)fontpath, 1); \ 00000728 ........ LDR R8,??DataTable198 ;; fontpath \ 0000072C 7C00A0E3 MOV R0,#+124 \ 00000730 500E80E3 ORR R0,R0,#0x500 \ 00000734 071080E0 ADD R1,R0,R7 \ 00000738 0100A0E3 MOV R0,#+1 \ 0000073C 480100EF SWI +328 \ 00000740 ........ _BLF InitConfig,??InitConfig??rA \ 00000744 ........ _BLF initTags,??initTags??rA \ 00000748 0100A0E3 MOV R0,#+1 \ 0000074C ........ _BLF PrintLibInit,??PrintLibInit??rA \ 00000750 0110A0E3 MOV R1,#+1 \ 00000754 0800A0E1 MOV R0,R8 \ 00000758 ........ _BLF FontPathInit,??FontPathInit??rA 4598 SetFontColor((char*)fontColor,(char*)bgrColor,1); \ 0000075C ........ LDR R1,??DataTable199 ;; bgrColor \ 00000760 ........ LDR R0,??DataTable200 ;; fontColor \ 00000764 0120A0E3 MOV R2,#+1 \ 00000768 ........ _BLF SetFontColor,??SetFontColor??rA 4599 //#ifdef ELKA 4600 if(fonto==1) \ 0000076C ........ LDR R0,??DataTable202 ;; fonto \ 00000770 00B090E5 LDR R11,[R0, #+0] \ 00000774 01005BE3 CMP R11,#+1 \ 00000778 0E00001A BNE ??maincsm_onmessage_33 4601 { 4602 char *heght=malloc(64); \ 0000077C 4000A0E3 MOV R0,#+64 \ 00000780 140000EF SWI +20 \ 00000784 0090A0E1 MOV R9,R0 4603 sprintf(heght, "%s2240.png", fontpath); \ 00000788 0820A0E1 MOV R2,R8 \ 0000078C 9400A0E3 MOV R0,#+148 \ 00000790 500E80E3 ORR R0,R0,#0x500 \ 00000794 071080E0 ADD R1,R0,R7 \ 00000798 0900A0E1 MOV R0,R9 \ 0000079C 160000EF SWI +22 4604 paused_height=GetImgHeight((int)heght); \ 000007A0 0900A0E1 MOV R0,R9 \ 000007A4 210000EF SWI +33 \ 000007A8 EC0085E5 STR R0,[R5, #+236] 4605 mfree(heght); \ 000007AC 0900A0E1 MOV R0,R9 \ 000007B0 150000EF SWI +21 \ 000007B4 010000EA B ??maincsm_onmessage_34 4606 } 4607 else 4608 paused_height=fonto-100; \ ??maincsm_onmessage_33: \ 000007B8 64004BE2 SUB R0,R11,#+100 \ 000007BC EC0085E5 STR R0,[R5, #+236] 4609 //#endif 4610 free_ICONS(); \ ??maincsm_onmessage_34: \ 000007C0 ........ BL free_ICONS 4611 setup_ICONS(); \ 000007C4 ........ BL setup_ICONS 4612 ResortCL(); \ 000007C8 ........ _BLF ResortCL,??ResortCL??rA 4613 RecountMenu(NULL,1); \ 000007CC 0110A0E3 MOV R1,#+1 \ 000007D0 0000A0E3 MOV R0,#+0 \ 000007D4 ........ BL RecountMenu 4614 init_time_zone(); \ 000007D8 ........ BL init_time_zone 4615 // InitSmiles(); 4616 } 4617 } 4618 4619 if (msg->msg==MSG_GUI_DESTROYED) \ ??maincsm_onmessage_32: \ 000007DC 040094E5 LDR R0,[R4, #+4] \ 000007E0 0E10A0E3 MOV R1,#+14 \ 000007E4 641C81E3 ORR R1,R1,#0x6400 \ 000007E8 010050E1 CMP R0,R1 \ 000007EC 0E00001A BNE ??maincsm_onmessage_35 4620 { 4621 if ((int)msg->data0==csm->gui_id) \ 000007F0 1C109DE5 LDR R1,[SP, #+28] \ 000007F4 0C0094E5 LDR R0,[R4, #+12] \ 000007F8 281091E5 LDR R1,[R1, #+40] \ 000007FC 010050E1 CMP R0,R1 4622 { 4623 csm->csm.state=-3; \ 00000800 1C009D05 LDREQ R0,[SP, #+28] \ 00000804 0210E003 MVNEQ R1,#+2 \ 00000808 10108005 STREQ R1,[R0, #+16] 4624 } 4625 if ((int)msg->data0==contactlist_menu_id) \ 0000080C 0C0094E5 LDR R0,[R4, #+12] \ 00000810 BC1195E5 LDR R1,[R5, #+444] \ 00000814 010050E1 CMP R0,R1 4626 { 4627 contactlist_menu_id=0; \ 00000818 BC618505 STREQ R6,[R5, #+444] 4628 prev_clmenu_itemcount=0; \ 0000081C C4618505 STREQ R6,[R5, #+452] 4629 } 4630 if ((int)msg->data0==edchat_id) \ 00000820 C01195E5 LDR R1,[R5, #+448] \ 00000824 010050E1 CMP R0,R1 4631 { 4632 edchat_id=0; \ 00000828 C0618505 STREQ R6,[R5, #+448] 4633 } 4634 } 4635 4636 if (msg->msg==MSG_HELPER_TRANSLATOR) \ ??maincsm_onmessage_35: \ 0000082C 040094E5 LDR R0,[R4, #+4] \ 00000830 AE10A0E3 MOV R1,#+174 \ 00000834 DE1C81E3 ORR R1,R1,#0xDE00 \ 00000838 010050E1 CMP R0,R1 \ 0000083C 0F00001A BNE ??maincsm_onmessage_24 4637 { 4638 switch((int)msg->data0) \ 00000840 0C0094E5 LDR R0,[R4, #+12] \ 00000844 101094E5 LDR R1,[R4, #+16] \ 00000848 ........ LDR R9,??DataTable178 ;; do_reconnect \ 0000084C 5420A0E3 MOV R2,#+84 \ 00000850 602D82E3 ORR R2,R2,#0x1800 \ 00000854 054082E0 ADD R4,R2,R5 \ 00000858 482F42E2 SUB R2,R2,#+288 \ 0000085C 058082E0 ADD R8,R2,R5 \ 00000860 802050E2 SUBS R2,R0,#+128 \ 00000864 0800000A BEQ ??maincsm_onmessage_36 \ 00000868 022052E2 SUBS R2,R2,#+2 \ 0000086C 0200000A BEQ ??maincsm_onmessage_37 \ 00000870 122052E2 SUBS R2,R2,#+18 \ 00000874 1400000A BEQ ??maincsm_onmessage_38 \ 00000878 1E0000EA B ??maincsm_onmessage_39 4639 { 4640 case LMAN_DISCONNECT_IND: 4641 is_gprs_online=0; \ ??maincsm_onmessage_37: \ 0000087C AC6185E5 STR R6,[R5, #+428] 4642 return(1); \ ??maincsm_onmessage_24: \ 00000880 0100A0E3 MOV R0,#+1 \ 00000884 20D08DE2 ADD SP,SP,#+32 \ 00000888 F08FBDE8 POP {R4-R11,PC} ;; return 4643 case LMAN_CONNECT_CNF: 4644 vibra_count=1; \ ??maincsm_onmessage_36: \ 0000088C 0100A0E3 MOV R0,#+1 \ 00000890 7C0185E5 STR R0,[R5, #+380] 4645 start_vibra(); \ 00000894 ........ BL start_vibra 4646 is_gprs_online=1; \ 00000898 0100A0E3 MOV R0,#+1 \ 0000089C AC0185E5 STR R0,[R5, #+428] 4647 strcpy(logmsg,LG_GRGPRSUP); \ 000008A0 5A1E87E2 ADD R1,R7,#+1440 \ 000008A4 0800A0E1 MOV R0,R8 \ 000008A8 1A0000EF SWI +26 4648 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 000008AC ........ LDR R0,??DataTable186 ;; RECONNECT_TIME \ 000008B0 0920A0E1 MOV R2,R9 \ 000008B4 000090E5 LDR R0,[R0, #+0] \ 000008B8 D830A0E3 MOV R3,#+216 \ 000008BC 930001E0 MUL R1,R3,R0 \ 000008C0 0400A0E1 MOV R0,R4 \ 000008C4 4D0000EF SWI +77 4649 return(1); \ 000008C8 070000EA B ??maincsm_onmessage_40 4650 case ENIP_DNR_HOST_BY_NAME: 4651 if ((int)msg->data1==DNR_ID) \ ??maincsm_onmessage_38: \ 000008CC D40195E5 LDR R0,[R5, #+468] \ 000008D0 000051E1 CMP R1,R0 \ 000008D4 E9FFFF1A BNE ??maincsm_onmessage_24 4652 { 4653 if (DNR_TRIES) SUBPROC((void *)create_connect); \ 000008D8 D80195E5 LDR R0,[R5, #+472] \ 000008DC 000050E3 CMP R0,#+0 \ 000008E0 E6FFFF0A BEQ ??maincsm_onmessage_24 \ 000008E4 ........ LDR R0,??DataTable212 ;; create_connect \ ??maincsm_onmessage_41: \ 000008E8 710100EF SWI +369 4654 } 4655 return(1); \ ??maincsm_onmessage_40: \ 000008EC 0100A0E3 MOV R0,#+1 \ ??maincsm_onmessage_42: \ 000008F0 20D08DE2 ADD SP,SP,#+32 \ 000008F4 F08FBDE8 POP {R4-R11,PC} 4656 } 4657 if ((int)msg->data1==sock) \ ??maincsm_onmessage_39: \ 000008F8 902195E5 LDR R2,[R5, #+400] \ 000008FC 020051E1 CMP R1,R2 \ 00000900 DEFFFF1A BNE ??maincsm_onmessage_24 4658 { 4659 //Если наш сокет 4660 if ((((unsigned int)msg->data0)>>28)==0xA) \ 00000904 201EA0E1 LSR R1,R0,#+28 \ 00000908 0A0051E3 CMP R1,#+10 \ 0000090C 0200001A BNE ??maincsm_onmessage_43 4661 { 4662 //Принят пакет 4663 ProcessPacket((TPKT *)msg->data0); \ 00000910 ........ BL ProcessPacket 4664 return(0); \ 00000914 0000A0E3 MOV R0,#+0 \ 00000918 F4FFFFEA B ??maincsm_onmessage_42 4665 } 4666 switch((int)msg->data0) \ ??maincsm_onmessage_43: \ 0000091C ........ LDR R2,??DataTable181 ;; VIBR_ON_CONNECT \ 00000920 8C1195E5 LDR R1,[R5, #+396] \ 00000924 00A092E5 LDR R10,[R2, #+0] \ 00000928 8A0040E2 SUB R0,R0,#+138 \ 0000092C 050050E3 CMP R0,#+5 \ 00000930 D2FFFF8A BHI ??maincsm_onmessage_24 \ 00000934 012F8FE2 ADR R2,??maincsm_onmessage_1 \ 00000938 D02092E1 LDRSB R2,[R2, R0] \ 0000093C 02F18FE0 ADD PC,PC,R2, LSL #+2 \ ??maincsm_onmessage_1: \ 00000940 4A4A4301 DC8 +74,+74,+67,+1 \ 00000944 534F0000 DC8 +83,+79,+0,+0 4667 { 4668 case ENIP_SOCK_CONNECTED: 4669 if (connect_state==1) \ ??maincsm_onmessage_44: \ 00000948 010051E3 CMP R1,#+1 \ 0000094C 3B00001A BNE ??maincsm_onmessage_45 4670 { 4671 if(VIBR_ON_CONNECT) \ 00000950 00005AE3 CMP R10,#+0 4672 vibra_count=2; \ 00000954 0200A013 MOVNE R0,#+2 4673 else 4674 vibra_count=1; \ 00000958 0100A003 MOVEQ R0,#+1 \ 0000095C 7C0185E5 STR R0,[R5, #+380] 4675 start_vibra(); \ 00000960 ........ BL start_vibra 4676 //Соединение установленно, посылаем пакет login 4677 strcpy(logmsg, LG_GRTRYLOGIN); \ 00000964 B800A0E3 MOV R0,#+184 \ 00000968 500E80E3 ORR R0,R0,#0x500 \ 0000096C 071080E0 ADD R1,R0,R7 \ 00000970 0800A0E1 MOV R0,R8 \ 00000974 1A0000EF SWI +26 4678 { 4679 int i=strlen(PASS); \ 00000978 C8019FE5 LDR R0,??maincsm_onmessage_5+0xC ;; PASS \ 0000097C 1B0000EF SWI +27 \ 00000980 0080A0E1 MOV R8,R0 4680 TPKT *p=malloc(sizeof(PKT)+i); \ 00000984 080088E2 ADD R0,R8,#+8 \ 00000988 140000EF SWI +20 4681 p->pkt.uin=UIN; 4682 p->pkt.type=T_REQLOGIN; 4683 p->pkt.data_len=i; 4684 memcpy(p->data,PASS,i); \ 0000098C B4119FE5 LDR R1,??maincsm_onmessage_5+0xC ;; PASS \ 00000990 0090A0E1 MOV R9,R0 \ 00000994 ........ LDR R0,??DataTable191 ;; UIN \ 00000998 0820A0E1 MOV R2,R8 \ 0000099C 004090E5 LDR R4,[R0, #+0] \ 000009A0 0100A0E3 MOV R0,#+1 \ 000009A4 004089E5 STR R4,[R9, #+0] \ 000009A8 B400C9E1 STRH R0,[R9, #+4] \ 000009AC B680C9E1 STRH R8,[R9, #+6] \ 000009B0 080089E2 ADD R0,R9,#+8 \ 000009B4 1E0100EF SWI +286 4685 SUBPROC((void *)send_login,0,p); \ 000009B8 B8019FE5 LDR R0,??maincsm_onmessage_5+0x3C ;; send_login \ 000009BC 0920A0E1 MOV R2,R9 \ 000009C0 0010A0E3 MOV R1,#+0 \ 000009C4 710100EF SWI +369 4686 } 4687 GROUP_CACHE=0; \ 000009C8 B86185E5 STR R6,[R5, #+440] 4688 SENDMSGCOUNT=0; //Начинаем отсчет \ 000009CC 1C6185E5 STR R6,[R5, #+284] 4689 if (!FindGroupByID(0)) AddGroup(0,LG_GROUPNOTINLIST); \ 000009D0 0600A0E1 MOV R0,R6 \ 000009D4 ........ _BLF FindGroupByID,??FindGroupByID??rA \ 000009D8 000050E3 CMP R0,#+0 \ 000009DC 0400001A BNE ??maincsm_onmessage_46 \ 000009E0 C800A0E3 MOV R0,#+200 \ 000009E4 500E80E3 ORR R0,R0,#0x500 \ 000009E8 071080E0 ADD R1,R0,R7 \ 000009EC 0000A0E3 MOV R0,#+0 \ 000009F0 ........ _BLF AddGroup,??AddGroup??rA 4690 if (!FindContactByUin(UIN) && (IsShowLoopback)) AddContact(UIN, LG_CLLOOPBACK,0,1); \ ??maincsm_onmessage_46: \ 000009F4 0400A0E1 MOV R0,R4 \ 000009F8 ........ _BLF FindContactByUin,??FindContactByUin??rA \ 000009FC 000050E3 CMP R0,#+0 \ 00000A00 0A00001A BNE ??maincsm_onmessage_47 \ 00000A04 70019FE5 LDR R0,??maincsm_onmessage_5+0x40 ;; IsShowLoopback \ 00000A08 000090E5 LDR R0,[R0, #+0] \ 00000A0C 000050E3 CMP R0,#+0 \ 00000A10 0600000A BEQ ??maincsm_onmessage_47 \ 00000A14 0130A0E3 MOV R3,#+1 \ 00000A18 0020A0E3 MOV R2,#+0 \ 00000A1C D400A0E3 MOV R0,#+212 \ 00000A20 500E80E3 ORR R0,R0,#0x500 \ 00000A24 071080E0 ADD R1,R0,R7 \ 00000A28 0400A0E1 MOV R0,R4 \ 00000A2C ........ _BLF AddContact,??AddContact??rA 4691 SUBPROC((void *)LoadLocalCL); \ ??maincsm_onmessage_47: \ 00000A30 48019FE5 LDR R0,??maincsm_onmessage_5+0x44 ;; LoadLocalCL \ 00000A34 710100EF SWI +369 4692 SMART_REDRAW(); \ 00000A38 ........ BL SMART_REDRAW \ 00000A3C AAFFFFEA B ??maincsm_onmessage_40 4693 } 4694 else 4695 { 4696 ShowMSG(1,(int)LG_MSGILLEGMSGCON); \ ??maincsm_onmessage_45: \ 00000A40 5E1E87E2 ADD R1,R7,#+1504 \ ??maincsm_onmessage_48: \ 00000A44 0100A0E3 MOV R0,#+1 \ 00000A48 480100EF SWI +328 \ 00000A4C A6FFFFEA B ??maincsm_onmessage_40 4697 } 4698 break; 4699 case ENIP_SOCK_DATA_READ: 4700 if (connect_state>=2) \ ??maincsm_onmessage_49: \ 00000A50 020051E3 CMP R1,#+2 4701 { 4702 //Если посылали send 4703 SUBPROC((void *)get_answer); \ 00000A54 28019FA5 LDRGE R0,??maincsm_onmessage_5+0x48 ;; get_answer \ 00000A58 A2FFFFAA BGE ??maincsm_onmessage_41 4704 //SMART_REDRAW(); 4705 } 4706 else 4707 { 4708 ShowMSG(1,(int)LG_MSGILLEGMSGREA); \ 00000A5C 0800A0E3 MOV R0,#+8 \ 00000A60 600E80E3 ORR R0,R0,#0x600 \ 00000A64 071080E0 ADD R1,R0,R7 \ 00000A68 F5FFFFEA B ??maincsm_onmessage_48 4709 } 4710 break; 4711 case ENIP_BUFFER_FREE: 4712 case ENIP_BUFFER_FREE1: 4713 SUBPROC((void *)SendAnswer,0,0); \ ??maincsm_onmessage_50: \ 00000A6C ........ LDR R0,??DataTable183 ;; SendAnswer \ 00000A70 0020A0E3 MOV R2,#+0 \ 00000A74 0210A0E1 MOV R1,R2 \ 00000A78 710100EF SWI +369 \ 00000A7C 9AFFFFEA B ??maincsm_onmessage_40 4714 break; 4715 case ENIP_SOCK_REMOTE_CLOSED: 4716 //Закрыт со стороны сервера 4717 if (connect_state) \ ??maincsm_onmessage_51: \ 00000A80 000051E3 CMP R1,#+0 \ 00000A84 7DFFFF0A BEQ ??maincsm_onmessage_24 4718 SUBPROC((void *)end_socket); \ 00000A88 ........ LDR R0,??DataTable210 ;; end_socket \ 00000A8C 95FFFFEA B ??maincsm_onmessage_41 4719 break; 4720 case ENIP_SOCK_CLOSED: 4721 //strcpy(logmsg, "No connection"); 4722 //Dump not received 4723 /* if (RXstate>(-(int)sizeof(PKT))) 4724 { 4725 unsigned int err; 4726 int f=fopen("4:\\NATICQ.dump",A_ReadWrite+A_Create+A_Truncate+A_BIN,P_READ+P_WRITE,&err); 4727 if (f!=-1) 4728 { 4729 fwrite(f,&RXbuf,RXstate+sizeof(PKT),&err); 4730 fclose(f,&err); 4731 } 4732 }*/ 4733 FillAllOffline(); \ ??maincsm_onmessage_52: \ 00000A90 ........ _BLF FillAllOffline,??FillAllOffline??rA 4734 RecountMenu(NULL,1); \ 00000A94 0110A0E3 MOV R1,#+1 \ 00000A98 0000A0E3 MOV R0,#+0 \ 00000A9C ........ BL RecountMenu 4735 connect_state=0; \ 00000AA0 8C6185E5 STR R6,[R5, #+396] 4736 sock=-1; \ 00000AA4 0600E0E1 MVN R0,R6 \ 00000AA8 900185E5 STR R0,[R5, #+400] 4737 if(VIBR_ON_CONNECT) \ 00000AAC 00005AE3 CMP R10,#+0 4738 vibra_count=4; \ 00000AB0 0400A013 MOVNE R0,#+4 4739 else 4740 vibra_count=1; \ 00000AB4 0100A003 MOVEQ R0,#+1 \ 00000AB8 7C0185E5 STR R0,[R5, #+380] 4741 4742 start_vibra(); \ 00000ABC ........ BL start_vibra 4743 if (sendq_p) \ 00000AC0 A80195E5 LDR R0,[R5, #+424] \ 00000AC4 000050E3 CMP R0,#+0 \ 00000AC8 0600000A BEQ ??maincsm_onmessage_53 4744 { 4745 snprintf(logmsg,255,"Disconnected, %d bytes not sended!",sendq_l); \ 00000ACC A43195E5 LDR R3,[R5, #+420] \ 00000AD0 2C00A0E3 MOV R0,#+44 \ 00000AD4 600E80E3 ORR R0,R0,#0x600 \ 00000AD8 072080E0 ADD R2,R0,R7 \ 00000ADC FF10A0E3 MOV R1,#+255 \ 00000AE0 0800A0E1 MOV R0,R8 \ 00000AE4 1B0100EF SWI +283 4746 } 4747 SMART_REDRAW(); \ ??maincsm_onmessage_53: \ 00000AE8 ........ BL SMART_REDRAW 4748 SUBPROC((void *)ClearSendQ); \ 00000AEC ........ LDR R0,??DataTable185 ;; ClearSendQ \ 00000AF0 710100EF SWI +369 4749 #ifdef EVILFOX 4750 if (!disautorecconect) GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*12,do_reconnect); 4751 #else 4752 if (!disautorecconect) \ 00000AF4 600195E5 LDR R0,[R5, #+352] \ 00000AF8 000050E3 CMP R0,#+0 \ 00000AFC 5FFFFF1A BNE ??maincsm_onmessage_24 4753 { 4754 GBS_StartTimerProc(&reconnect_tmr,TMR_SECOND*RECONNECT_TIME,do_reconnect); \ 00000B00 ........ LDR R0,??DataTable186 ;; RECONNECT_TIME \ 00000B04 0920A0E1 MOV R2,R9 \ 00000B08 005090E5 LDR R5,[R0, #+0] \ 00000B0C D800A0E3 MOV R0,#+216 \ 00000B10 900501E0 MUL R1,R0,R5 \ 00000B14 0400A0E1 MOV R0,R4 \ 00000B18 4D0000EF SWI +77 4755 snprintf(logmsg,255,"%s\nReconect after %d second...",logmsg, RECONNECT_TIME); //2058 \ 00000B1C 20002DE9 PUSH {R5} \ 00000B20 0830A0E1 MOV R3,R8 \ 00000B24 652E87E2 ADD R2,R7,#+1616 \ 00000B28 FF10A0E3 MOV R1,#+255 \ 00000B2C 0800A0E1 MOV R0,R8 \ 00000B30 1B0100EF SWI +283 \ 00000B34 04D08DE2 ADD SP,SP,#+4 \ 00000B38 6BFFFFEA B ??maincsm_onmessage_40 \ ??maincsm_onmessage_5: \ 00000B3C ........ DC32 CheckDoubleRun \ 00000B40 ........ DC32 ProcessNextSmile \ 00000B44 ........ DC32 ProcessNextXStatImg \ 00000B48 ........ DC32 PASS \ 00000B4C ........ DC32 IDLEICON_X \ 00000B50 ........ DC32 IDLEICON_Y \ 00000B54 ........ DC32 XStatusesIconArray \ 00000B58 ........ DC32 IDLEICON_XX \ 00000B5C ........ DC32 IDLEICON_YX \ 00000B60 ........ DC32 msg_d_x \ 00000B64 ........ DC32 msg_d_y \ 00000B68 ........ DC32 spaco2 \ 00000B6C ........ DC32 Is_Unread_On \ 00000B70 ........ DC32 unread_Y \ 00000B74 ........ DC32 unread_X \ 00000B78 ........ DC32 send_login \ 00000B7C ........ DC32 IsShowLoopback \ 00000B80 ........ DC32 LoadLocalCL \ 00000B84 ........ DC32 get_answer 4756 } 4757 4758 #endif 4759 break; 4760 } 4761 } 4762 } 4763 return(1); 4764 } 4765 4766 4767 //-------------------- ICON IN ICONBAR ------------// 4768 4769 //kluchnik 26.03.08 4770 4771 #pragma swi_number=0x27 4772 __swi __arm void AddIconToIconBar(int pic, short *num); 4773 4774 extern const unsigned int NumStatusToIconBar; 4775 extern const unsigned int NumXStatusToIconBar; 4776 //extern void SetIconBarHandler(); 4777 extern const int ShowStatusIcon; 4778 \ In segment CODE, align 4, keep-with-next 4779 void addIconBar(short* num) 4780 { \ addIconBar: \ 00000000 70402DE9 PUSH {R4-R6,LR} 4781 int icn; 4782 if(ShowStatusIcon==1 || ShowStatusIcon==3) \ 00000004 ........ LDR R6,??DataTable211 ;; S_ICONS \ 00000008 0040A0E1 MOV R4,R0 \ 0000000C C8009FE5 LDR R0,??addIconBar_0 ;; NumStatusToIconBar \ 00000010 005090E5 LDR R5,[R0, #+0] \ 00000014 ........ LDR R0,??DataTable188 ;; ShowStatusIcon \ 00000018 000090E5 LDR R0,[R0, #+0] \ 0000001C 010050E3 CMP R0,#+1 \ 00000020 03005013 CMPNE R0,#+3 \ 00000024 1B00001A BNE ??addIconBar_1 4783 { 4784 if(total_unread) \ 00000028 B00196E5 LDR R0,[R6, #+432] \ 0000002C 000050E3 CMP R0,#+0 \ 00000030 1100000A BEQ ??addIconBar_2 4785 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); \ ??addIconBar_3: \ 00000034 0410A0E1 MOV R1,R4 \ 00000038 0D0085E2 ADD R0,R5,#+13 \ ??addIconBar_4: \ 0000003C 270000EF SWI +39 4786 else 4787 { 4788 switch(connect_state) 4789 { 4790 case 0: 4791 icn=IS_OFFLINE; break; 4792 case 3: 4793 icn=CurrentStatus; //IS_ONLINE; 4794 break; 4795 default: 4796 icn=IS_UNKNOWN; break; 4797 } 4798 AddIconToIconBar(NumStatusToIconBar + icn, num); 4799 } 4800 } 4801 else 4802 { 4803 if(ShowStatusIcon==2)//Если показывать и иконбаре везде,кроме идле 4804 { 4805 if(!(IsIdleUiOnTop())) 4806 { 4807 if(total_unread) 4808 AddIconToIconBar(NumStatusToIconBar + IS_MSG, num); 4809 else 4810 { 4811 switch(connect_state) 4812 { 4813 case 0: 4814 icn=IS_OFFLINE; break; 4815 case 3: 4816 icn=CurrentStatus; //IS_ONLINE; 4817 break; 4818 default: 4819 icn=IS_UNKNOWN; break; 4820 } 4821 AddIconToIconBar(NumStatusToIconBar + icn, num); 4822 } 4823 } 4824 } 4825 } 4826 4827 if(show_xstatus==2 || show_xstatus==3) \ ??addIconBar_5: \ 00000040 ........ LDR R0,??DataTable189 ;; show_xstatus \ 00000044 000090E5 LDR R0,[R0, #+0] \ 00000048 020050E3 CMP R0,#+2 \ 0000004C 03005013 CMPNE R0,#+3 \ 00000050 7080BD18 POPNE {R4-R6,PC} 4828 if(CurrentXStatus!=0) \ 00000054 ........ LDR R0,??DataTable190 ;; CurrentXStatus \ 00000058 000090E5 LDR R0,[R0, #+0] \ 0000005C 000050E3 CMP R0,#+0 \ 00000060 7080BD08 POPEQ {R4-R6,PC} 4829 AddIconToIconBar(NumXStatusToIconBar+CurrentXStatus,num); \ 00000064 74209FE5 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 4830 4831 #ifdef kluchnik 4832 // if(solnce) 4833 //{ 4834 CLIST *t; 4835 t=FindContactByUin(438532198); 4836 if(t->state!=0xFFFF && (GetIconIndex(t)!=IS_UNKNOWN)) 4837 AddIconToIconBar(NumStatusToIconBar + GetIconIndex(t), num); 4838 // } 4839 #endif 4840 } \ 00000078 7080BDE8 POP {R4-R6,PC} ;; return \ ??addIconBar_2: \ 0000007C 8C0196E5 LDR R0,[R6, #+396] \ 00000080 000050E3 CMP R0,#+0 \ 00000084 1100000A BEQ ??addIconBar_6 \ 00000088 030050E2 SUBS R0,R0,#+3 \ 0000008C 0E00001A BNE ??addIconBar_7 \ ??addIconBar_8: \ 00000090 740196E5 LDR R0,[R6, #+372] \ 00000094 0D0000EA B ??addIconBar_6 \ ??addIconBar_1: \ 00000098 020050E3 CMP R0,#+2 \ 0000009C E7FFFF1A BNE ??addIconBar_5 \ 000000A0 C50000EF SWI +197 \ 000000A4 000050E3 CMP R0,#+0 \ 000000A8 E4FFFF1A BNE ??addIconBar_5 \ 000000AC B00196E5 LDR R0,[R6, #+432] \ 000000B0 000050E3 CMP R0,#+0 \ 000000B4 DEFFFF1A BNE ??addIconBar_3 \ 000000B8 8C0196E5 LDR R0,[R6, #+396] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0200000A BEQ ??addIconBar_6 \ 000000C4 030050E2 SUBS R0,R0,#+3 \ 000000C8 F0FFFF0A BEQ ??addIconBar_8 \ ??addIconBar_7: \ 000000CC 0E00A0E3 MOV R0,#+14 \ ??addIconBar_6: \ 000000D0 0410A0E1 MOV R1,R4 \ 000000D4 050080E0 ADD R0,R0,R5 \ 000000D8 D7FFFFEA B ??addIconBar_4 \ ??addIconBar_0: \ 000000DC ........ DC32 NumStatusToIconBar \ 000000E0 ........ DC32 NumXStatusToIconBar 4841 4842 typedef struct 4843 { 4844 char check_name[8]; 4845 int addr; 4846 }ICONBAR_H; 4847 4848 \ In segment DATA_C, align 4, align-sorted 4849 const int minus11=-11; \ minus11: \ 00000000 F5FFFFFF DC32 -11 4850 \ In segment DATA_Z, align 4, align-sorted 4851 unsigned short maincsm_name_body[140]; \ maincsm_name_body: \ 00000000 DS8 280 4852 4853 struct 4854 { 4855 CSM_DESC maincsm; 4856 WSHDR maincsm_name; 4857 ICONBAR_H iconbar_handler; 4858 }MAINCSM = 4859 { 4860 { 4861 maincsm_onmessage, 4862 maincsm_oncreate, 4863 #ifdef NEWSGOLD 4864 0, 4865 0, 4866 0, 4867 0, 4868 #endif 4869 maincsm_onclose, 4870 sizeof(MAIN_CSM), 4871 1, 4872 &minus11 4873 }, 4874 { 4875 maincsm_name_body, 4876 NAMECSM_MAGIC1, 4877 NAMECSM_MAGIC2, 4878 0x0, 4879 139 4880 }, 4881 { 4882 "IconBar" 4883 } 4884 }; 4885 \ In segment CODE, align 4, keep-with-next 4886 void UpdateCSMname(void) 4887 { 4888 wsprintf((WSHDR *)(&MAINCSM.maincsm_name), "NATICQ: %d",UIN); \ UpdateCSMname: \ 00000000 ........ LDR R0,??DataTable191 ;; 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 4889 } \ 00000018 0080BDE8 POP {PC} ;; return \ ??UpdateCSMname_0: \ 0000001C ........ DC32 `?` \ 00000020 ........ DC32 S_ICONS + 156 4890 \ In segment CODE, align 4, keep-with-next 4891 void SetIconBarHandler() 4892 { 4893 MAINCSM.iconbar_handler.addr = (int)addIconBar; \ SetIconBarHandler: \ 00000000 08009FE5 LDR R0,??SetIconBarHandler_0 ;; S_ICONS + 184 \ 00000004 ........ LDR R1,??DataTable201 ;; addIconBar \ 00000008 001080E5 STR R1,[R0, #+0] 4894 } \ 0000000C 1EFF2FE1 BX LR ;; return \ ??SetIconBarHandler_0: \ 00000010 ........ DC32 S_ICONS + 184 4895 \ In segment CODE, align 4, keep-with-next 4896 int main(char *filename) 4897 { \ main: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 4898 MAIN_CSM main_csm; 4899 char *s; 4900 int len; 4901 extern const char *successed_config_filename; 4902 WSHDR *ws; 4903 sprintf(PINGO, "Ping None"); \ 00000004 ........ LDR R4,??DataTable211 ;; S_ICONS \ 00000008 ........ LDR R5,??DataTable194 ;; `?wsbody; \ 00000004 005090E5 LDR R5,[R0, #+0] \ 00000008 0040A0E3 MOV R4,#+0 4966 int wslen=wsbody[0]; \ 0000000C B060D5E1 LDRH R6,[R5, #+0] \ 00000010 0070A0E3 MOV R7,#+0 4967 if (wslen) \ 00000014 000056E3 CMP R6,#+0 \ 00000018 3C00000A BEQ ??ExtractAnswer_0 4968 { 4969 for (int i=0; i=0xE100) 4973 { 4974 t=FindSmileByUni(c); 4975 if (t) 4976 { 4977 if (t->lines) 4978 { 4979 len+=strlen(t->lines->text); 4980 } 4981 } 4982 else len++; 4983 } 4984 else len++; 4985 } 4986 4987 msg=malloc(len+1); \ ??ExtractAnswer_2: \ 00000024 010084E2 ADD R0,R4,#+1 \ 00000028 140000EF SWI +20 \ 0000002C 0070A0E1 MOV R7,R0 4988 scur=0; \ 00000030 0090A0E3 MOV R9,#+0 4989 for (int wcur=0; wcur=0xE100) 4994 { 4995 t=FindSmileByUni(c); 4996 if (t) 4997 { 4998 int w; 4999 char *s; 5000 if (t->lines) 5001 { 5002 s=t->lines->text; 5003 while ((w=*s++) && scurnext)) \ FindNextActiveContact: \ ??FindNextActiveContact_0: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 000050E3 CMP R0,#+0 \ 00000008 0300000A BEQ ??FindNextActiveContact_1 5030 { 5031 if (t->isactive) return t; \ 0000000C 7C1090E5 LDR R1,[R0, #+124] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 F9FFFF0A BEQ ??FindNextActiveContact_0 \ 00000018 1EFF2FE1 BX LR 5032 } 5033 t=(CLIST *)(&cltop); \ ??FindNextActiveContact_1: \ 0000001C ........ LDR R0,??DataTable206 ;; S_ICONS + 436 \ 00000020 020000EA B ??FindNextActiveContact_2 5034 while(t=(CLIST *)(t->next)) 5035 { 5036 if (t->isactive) return t; \ ??FindNextActiveContact_3: \ 00000024 7C1090E5 LDR R1,[R0, #+124] \ 00000028 000051E3 CMP R1,#+0 \ 0000002C 1EFF2F11 BXNE LR 5037 } \ ??FindNextActiveContact_2: \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 000050E3 CMP R0,#+0 \ 00000038 F9FFFF1A BNE ??FindNextActiveContact_3 5038 return NULL; \ 0000003C 1EFF2FE1 BX LR ;; return 5039 } 5040 \ In segment CODE, align 4, keep-with-next 5041 CLIST *FindPrevActiveContact(CLIST *t) 5042 { 5043 CLIST *cl; 5044 CLIST *cl_active=NULL; 5045 cl=(CLIST *)(&cltop); \ FindPrevActiveContact: \ 00000000 ........ LDR R2,??DataTable206 ;; S_ICONS + 436 \ 00000004 0010A0E3 MOV R1,#+0 \ 00000008 020000EA B ??FindPrevActiveContact_0 5046 5047 5048 while(cl=cl->next) 5049 { 5050 if (cl==t) 5051 { 5052 if (cl_active==NULL) break; 5053 else return (cl_active); 5054 } 5055 else 5056 { 5057 if (cl->isactive) cl_active=cl; \ ??FindPrevActiveContact_1: \ 0000000C 7C3092E5 LDR R3,[R2, #+124] \ 00000010 000053E3 CMP R3,#+0 \ 00000014 0210A011 MOVNE R1,R2 5058 } \ ??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 5059 } 5060 while(t) \ ??FindPrevActiveContact_2: \ 0000003C 000050E3 CMP R0,#+0 \ 00000040 FBFFFF0A BEQ ??FindPrevActiveContact_3 5061 { 5062 if (t->isactive) cl_active=t; \ 00000044 7C2090E5 LDR R2,[R0, #+124] \ 00000048 000052E3 CMP R2,#+0 \ 0000004C 0010A011 MOVNE R1,R0 5063 t=t->next; \ 00000050 000090E5 LDR R0,[R0, #+0] \ 00000054 F8FFFFEA B ??FindPrevActiveContact_2 5064 } 5065 return cl_active; 5066 } 5067 5068 \ In segment CODE, align 4, keep-with-next 5069 void ed_options_handler(USR_MENU_ITEM *item) 5070 { \ ed_options_handler: \ 00000000 F0402DE9 PUSH {R4-R7,LR} 5071 EDCHAT_STRUCT *ed_struct=item->user_pointer; 5072 CLIST *t; 5073 int i=item->cur_item; 5074 if (item->type==0) \ 00000004 ........ LDR R5,??DataTable211 ;; 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 5075 { 5076 switch(i) \ 00000024 0C0097E5 LDR R0,[R7, #+12] \ 00000028 80119FE5 LDR R1,??ed_options_handler_1 ;; `?ws,LG_MNUEDNEXTACT); 5080 break; 5081 case 1: 5082 ascii2ws(item->ws,LG_MNUEDPREVACT); \ 00000038 10108102 ADDEQ R1,R1,#+16 \ 0000003C 0500000A BEQ ??ed_options_handler_2 5083 break; 5084 default: 5085 i-=2; 5086 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 841195E5 LDR R1,[R5, #+388] \ 00000054 061191E7 LDR R1,[R1, +R6, LSL #+2] \ ??ed_options_handler_2: \ 00000058 ........ _BLF ascii2ws,??ascii2ws??rA 5087 break; 5088 } 5089 } 5090 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 5091 { 5092 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 5093 { 5094 case 0: 5095 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 5096 if (t && t!=ed_struct->ed_contact) \ 0000008C 07005411 CMPNE R4,R7 \ 00000090 4400000A BEQ ??ed_options_handler_3 5097 { 5098 GeneralFunc_flag1(edchat_id,1); \ 00000094 C00195E5 LDR R0,[R5, #+448] \ 00000098 0110A0E3 MOV R1,#+1 \ 0000009C 3D0100EF SWI +317 5099 CreateEditChat(t); \ 000000A0 0400A0E1 MOV R0,R4 \ 000000A4 ........ BL CreateEditChat \ 000000A8 2CD08DE2 ADD SP,SP,#+44 \ 000000AC F080BDE8 POP {R4-R7,PC} 5100 } 5101 break; 5102 case 1: 5103 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 5104 if (t && t!=ed_struct->ed_contact) 5105 { 5106 GeneralFunc_flag1(edchat_id,1); 5107 CreateEditChat(t); 5108 } 5109 break; 5110 default: 5111 i-=2; 5112 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 5113 { 5114 EDITCONTROL ec; 5115 WSHDR *ed_ws; 5116 int c; 5117 char *p=templates_lines[i]; \ 000000CC 840195E5 LDR R0,[R5, #+388] 5118 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 5119 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 5120 wstrcpy(ed_ws,ec.pWS); \ 00000100 28109DE5 LDR R1,[SP, #+40] \ 00000104 0060A0E1 MOV R6,R0 \ 00000108 1F0100EF SWI +287 5121 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 5122 { 5123 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 5124 while(c=*p++) 5125 { 5126 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 5127 } \ ??ed_options_handler_9: \ 00000148 ........ LDRB R0,[R5], #+1 \ 0000014C 000050E3 CMP R0,#+0 \ 00000150 F6FFFF1A BNE ??ed_options_handler_10 5128 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 5129 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 5130 } 5131 else 5132 { 5133 while(c=*p++) 5134 { 5135 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 5136 } \ ??ed_options_handler_8: \ 00000184 ........ LDRB R0,[R5], #+1 \ 00000188 000050E3 CMP R0,#+0 \ 0000018C F8FFFF1A BNE ??ed_options_handler_12 5137 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 5138 } 5139 FreeWS(ed_ws); \ ??ed_options_handler_11: \ 000001A0 0600A0E1 MOV R0,R6 \ 000001A4 290100EF SWI +297 5140 } 5141 break; 5142 } 5143 } 5144 } \ ??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) 5153 { 5154 s = str; 5155 w = ws; 5156 l = len; 5157 for(; (char16to8(*w) == *s) && l; w++, s++, l--); 5158 if(!l) return ws; 5159 ws++; 5160 (*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} 5161 } 5162 return 0; \ ??wstrstr_2: \ 00000074 0000A0E3 MOV R0,#+0 \ 00000078 F087BDE8 POP {R4-R10,PC} ;; return 5163 5164 } 5165 \ In segment CODE, align 4, keep-with-next 5166 int IsUrl(WSHDR *ws, int pos, char *link) 5167 { \ IsUrl: \ 00000000 F14F2DE9 PUSH {R0,R4-R11,LR} \ 00000004 04D04DE2 SUB SP,SP,#+4 \ 00000008 0150A0E1 MOV R5,R1 5168 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 5169 5170 int len = wstrlen(ws); 5171 unsigned short *str = ws->wsbody+1, *tmp, *begin; 5172 tmp = str; 5173 5174 begin = str = wstrstr(str, "http://", &len, 7); \ 0000000C ........ LDR R7,??DataTable209 ;; `?` \ 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 5175 5176 while(str && (begin-tmp <= pos)) 5177 { 5178 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 5179 if(str-tmp >= pos-2) 5180 { 5181 for(;begin < str; begin++, link++) 5182 *link = char16to8(*begin); 5183 link[str-begin] = 0; 5184 return 1; 5185 } 5186 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 5187 } 5188 5189 len = wstrlen(ws); \ ??IsUrl_2: \ 00000080 04009DE5 LDR R0,[SP, #+4] \ 00000084 230100EF SWI +291 \ 00000088 00008DE5 STR R0,[SP, #+0] 5190 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} 5191 while(str && (begin-tmp <= pos)) 5192 { 5193 while(len && strchr(valid, char16to8(*str))) {str++; len--;} 5194 if(str-tmp >= pos-2) 5195 { 5196 for(;begin < str; begin++, link++) 5197 *link = char16to8(*begin); 5198 link[str-begin] = 0; 5199 return 1; 5200 } 5201 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 5202 } 5203 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 5204 } 5205 5206 #define UTF16_DIS_UNDERLINE (0xE002) 5207 #define UTF16_ENA_UNDERLINE (0xE001) 5208 \ In segment CODE, align 4, keep-with-next 5209 void ParseAnswer(WSHDR *ws, const char *s) 5210 { \ ParseAnswer: \ 00000000 F0472DE9 PUSH {R4-R10,LR} \ 00000004 0040A0E1 MOV R4,R0 5211 const char *valid = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789$-_.+!*'(),%;:@&=/?абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; 5212 S_SMILES *t; 5213 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 5214 STXT_SMILES *st; 5215 unsigned int wchar; 5216 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 5217 CutWSTR(ws,0); \ 00000034 0010A0E3 MOV R1,#+0 \ 00000038 0400A0E1 MOV R0,R4 \ 0000003C 260100EF SWI +294 \ 00000040 160000EA B ??ParseAnswer_1 5218 int i; 5219 while(wchar=*s) 5220 { 5221 if(s==strstr(s, "http://") || s == strstr(s, "www.")) 5222 { 5223 wsAppendChar(ws,UTF16_ENA_UNDERLINE); 5224 while(*s && strchr(valid, *s)) 5225 { 5226 wchar=char8to16(*s); \ ??ParseAnswer_2: \ 00000044 ........ LDRB R0,[R5], #+1 \ 00000048 ........ _BLF char8to16,??char8to16??rA 5227 wsAppendChar(ws,wchar); \ 0000004C 0010A0E1 MOV R1,R0 \ ??ParseAnswer_3: \ 00000050 0400A0E1 MOV R0,R4 \ 00000054 1C0000EF SWI +28 5228 s++; 5229 } \ 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 5230 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 5231 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 5232 continue; \ ??ParseAnswer_1: \ 000000A0 0070D5E5 LDRB R7,[R5, #+0] \ 000000A4 000057E3 CMP R7,#+0 \ 000000A8 4F00000A BEQ ??ParseAnswer_5 \ 000000AC ........ LDR R9,??DataTable209 ;; `?` \ 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 5233 } 5234 t=t_root; \ ??ParseAnswer_7: \ 000000E4 0690A0E1 MOV R9,R6 \ 000000E8 230000EA B ??ParseAnswer_8 5235 while(t) 5236 { 5237 st=t->lines; 5238 while(st) 5239 { 5240 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 5241 { 5242 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 5243 } 5244 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] 5245 } \ ??ParseAnswer_13: \ 00000170 00005AE3 CMP R10,#+0 \ 00000174 DCFFFF1A BNE ??ParseAnswer_9 5246 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 5247 } 5248 L1: 5249 if (t) 5250 { 5251 wchar=t->uni_smile; 5252 s+=strlen(st->text); 5253 ulb=s[0]+(s[1]<<8)+(s[2]<<16)+(s[3]<<24); 5254 } 5255 else 5256 { 5257 wchar=char8to16(wchar); \ 00000188 0700A0E1 MOV R0,R7 \ 0000018C ........ _BLF char8to16,??char8to16??rA \ 00000190 0070A0E1 MOV R7,R0 5258 s++; 5259 ulb>>=8; 5260 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 5261 } \ ??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 5262 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 5263 } 5264 i=ws->wsbody[0]; \ ??ParseAnswer_5: \ 000001EC 000094E5 LDR R0,[R4, #+0] \ 000001F0 B010D0E1 LDRH R1,[R0, #+0] \ 000001F4 000000EA B ??ParseAnswer_15 5265 while(i>1) 5266 { 5267 if (ws->wsbody[i--]!=13) break; 5268 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 5269 } 5270 } \ 0000021C F187BDE8 POP {R0,R4-R10,PC} ;; return \ ??ParseAnswer_0: \ 00000220 ........ DC32 s_top 5271 \ In segment CODE, align 4, keep-with-next 5272 void SaveAnswer(CLIST *cl, WSHDR *ws) 5273 { \ SaveAnswer: \ 00000000 30402DE9 PUSH {R4,R5,LR} \ 00000004 0040A0E1 MOV R4,R0 \ 00000008 0100A0E1 MOV R0,R1 5274 char *p=ExtractAnswer(ws); \ 0000000C ........ BL ExtractAnswer \ 00000010 0050A0E1 MOV R5,R0 5275 mfree(cl->answer); \ 00000014 740094E5 LDR R0,[R4, #+116] \ 00000018 150000EF SWI +21 5276 cl->answer=p; \ 0000001C 745084E5 STR R5,[R4, #+116] 5277 } \ 00000020 3080BDE8 POP {R4,R5,PC} ;; return 5278 5279 //links applicator 5280 5281 \ In segment CODE, align 4, keep-with-next 5282 int GetTempName(void) 5283 { \ GetTempName: \ 00000000 00402DE9 PUSH {LR} \ 00000004 10D04DE2 SUB SP,SP,#+16 5284 static const int DMonth[]={0,31,59,90,120,151,181,212,243,273,304,334,365}; 5285 unsigned long iday; 5286 TTime tt; 5287 TDate dd; 5288 GetDateTime(&dd,&tt); \ 00000008 08108DE2 ADD R1,SP,#+8 \ 0000000C 0D00A0E1 MOV R0,SP \ 00000010 B40000EF SWI +180 5289 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 5290 iday=365*dd.year+DMonth[dd.month-1]+(dd.day - 1); 5291 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] 5292 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 5293 iday++; \ ??GetTempName_1: \ 00000078 011081E2 ADD R1,R1,#+1 5294 iday=(tt.sec+60*(tt.min+60*(tt.hour+24* iday))); 5295 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 5296 } \ 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 5297 5298 \ In segment CODE, align 4, keep-with-next 5299 void recon() 5300 { 5301 SUBPROC((void*)end_socket); \ recon: \ 00000000 ........ LDR R0,??DataTable210 ;; end_socket \ 00000004 10402DE9 PUSH {R4,LR} 5302 GBS_DelTimer(&reconnect_tmr); \ 00000008 ........ LDR R4,??DataTable211 ;; S_ICONS \ 0000000C 710100EF SWI +369 \ 00000010 5400A0E3 MOV R0,#+84 \ 00000014 600D80E3 ORR R0,R0,#0x1800 \ 00000018 040080E0 ADD R0,R0,R4 \ 0000001C 8C0100EF SWI +396 5303 DNR_TRIES=3; \ 00000020 0300A0E3 MOV R0,#+3 \ 00000024 D80184E5 STR R0,[R4, #+472] 5304 SUBPROC((void *)create_connect); \ 00000028 ........ LDR R0,??DataTable212 ;; create_connect \ 0000002C 710100EF SWI +369 5305 } \ 00000030 1080BDE8 POP {R4,PC} ;; return 5306 \ In segment CODE, align 4, keep-with-next 5307 int edchat_onkey(GUI *data, GUI_MSG *msg) 5308 { \ edchat_onkey: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5309 //-1 - do redraw 5310 GBS_DelTimer(&tmr_illumination); \ 00000004 ........ LDR R5,??DataTable220 ;; S_ICONS \ 00000008 4CDF4DE2 SUB SP,SP,#+304 \ 0000000C 0040A0E1 MOV R4,R0 \ 00000010 0170A0E1 MOV R7,R1 \ 00000014 3400A0E3 MOV R0,#+52 \ 00000018 600D80E3 ORR R0,R0,#0x1800 \ 0000001C 050080E0 ADD R0,R0,R5 \ 00000020 8C0100EF SWI +396 5311 CLIST *t; 5312 TPKT *p; 5313 EDITCONTROL ec; 5314 int len, f;//2026rev 5315 unsigned err;//2026rev 5316 char *s; 5317 int l=msg->gbsmsg->submess; \ 00000024 040097E5 LDR R0,[R7, #+4] \ 00000028 088090E5 LDR R8,[R0, #+8] 5318 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); \ 0000002C 0400A0E1 MOV R0,R4 \ 00000030 DF0100EF SWI +479 \ 00000034 0060A0E1 MOV R6,R0 5319 char fn[256]; 5320 5321 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 5322 { 5323 void ec_menu(EDCHAT_STRUCT *); 5324 ec_menu(ed_struct); \ 0000004C 0600A0E1 MOV R0,R6 \ 00000050 ........ BL ec_menu 5325 return(-1); \ ??edchat_onkey_1: \ 00000054 320100EA B ??edchat_onkey_2 5326 } 5327 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 5328 #ifdef EVILFOX 5329 if (msg->gbsmsg->msg==LONG_PRESS) 5330 { 5331 if (l==VOL_DOWN_BUTTON) 5332 { 5333 WSHDR *ws; 5334 ExtractEditControl(data,ed_struct->ed_answer,&ec); 5335 if(wstrlen(ec.pWS)>0) 5336 { 5337 ws=AllocWS(1); 5338 CutWSTR(ws,0); 5339 5340 EDIT_SetFocus(data,ed_struct->ed_answer); 5341 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5342 5343 FreeWS(ws); 5344 RefreshGUI(); 5345 } 5346 } 5347 if (l==VOL_UP_BUTTON) 5348 { 5349 // WSHDR *ws=AllocWS(strlen(ed_struct->ed_contact->last_msg_buffer)+1); 5350 // ascii2ws(ws,ed_struct->ed_contact->last_msg_buffer); 5351 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); 5352 ascii2ws(ws,last_msg_buffer); 5353 EDIT_SetFocus(ed_struct->ed_chatgui,ed_struct->ed_answer); 5354 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5355 FreeWS(ws); 5356 RefreshGUI(); 5357 } 5358 } 5359 #else 5360 5361 void AddSmile(GUI *data); 5362 extern const int LongRightAction; 5363 extern const int LongLeftAction; 5364 if (msg->gbsmsg->msg==LONG_PRESS) 5365 { 5366 if (l==RIGHT_BUTTON) \ 00000080 3E0058E3 CMP R8,#+62 \ 00000084 2200001A BNE ??edchat_onkey_6 5367 { 5368 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 5369 CreateSmileSelectGUI(ed_struct); \ 00000098 0600A0E1 MOV R0,R6 \ 0000009C ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA \ 000000A0 610000EA B ??edchat_onkey_5 5370 else 5371 if(LongRightAction==1) \ ??edchat_onkey_8: \ 000000A4 010050E3 CMP R0,#+1 \ 000000A8 5F00001A BNE ??edchat_onkey_5 5372 { 5373 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 5374 { 5375 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C0 04208DE2 ADD R2,SP,#+4 \ 000000C4 0400A0E1 MOV R0,R4 \ 000000C8 690100EF SWI +361 5376 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 5377 { 5378 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 5379 if (t && t!=ed_struct->ed_contact) \ 000000FC 0A005911 CMPNE R9,R10 \ 00000100 4900000A BEQ ??edchat_onkey_5 5380 { 5381 CreateEditChat(t); \ ??edchat_onkey_9: \ 00000104 0900A0E1 MOV R0,R9 \ 00000108 ........ BL CreateEditChat 5382 return(1); \ 0000010C 0100A0E3 MOV R0,#+1 \ 00000110 040100EA B ??edchat_onkey_4 5383 } 5384 } 5385 } 5386 } 5387 } 5388 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 5389 { 5390 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 5391 { 5392 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 00000140 04208DE2 ADD R2,SP,#+4 \ 00000144 0400A0E1 MOV R0,R4 \ 00000148 690100EF SWI +361 5393 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 5394 { 5395 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 5396 if (t && t!=ed_struct->ed_contact) \ 0000017C 0A005911 CMPNE R9,R10 \ 00000180 2900000A BEQ ??edchat_onkey_5 \ 00000184 DEFFFFEA B ??edchat_onkey_9 5397 { 5398 CreateEditChat(t); 5399 return(1); 5400 } 5401 } 5402 } 5403 } 5404 #ifdef ELKA 5405 if (l==VOL_DOWN_BUTTON) \ ??edchat_onkey_10: \ 00000188 0E0058E3 CMP R8,#+14 \ 0000018C 0F00001A BNE ??edchat_onkey_11 5406 { 5407 WSHDR *ws; 5408 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 5409 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 5410 { 5411 ws=AllocWS(1); \ 000001B0 0100A0E3 MOV R0,#+1 \ 000001B4 250100EF SWI +293 \ 000001B8 0090A0E1 MOV R9,R0 5412 CutWSTR(ws,0); \ 000001BC 0010A0E3 MOV R1,#+0 \ 000001C0 260100EF SWI +294 5413 5414 EDIT_SetFocus(data,ed_struct->ed_answer); \ 000001C4 081096E5 LDR R1,[R6, #+8] \ 000001C8 0400A0E1 MOV R0,R4 \ 000001CC 0F0000EA B ??edchat_onkey_12 5415 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); 5416 5417 FreeWS(ws); 5418 RefreshGUI(); 5419 } 5420 } 5421 if (l==VOL_UP_BUTTON) \ ??edchat_onkey_11: \ 000001D0 0D0058E3 CMP R8,#+13 \ 000001D4 1400001A BNE ??edchat_onkey_5 5422 { 5423 WSHDR *ws=AllocWS(strlen(last_msg_buffer)+1); \ 000001D8 1C00A0E3 MOV R0,#+28 \ 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 5424 ascii2ws(ws,last_msg_buffer); \ 000001F4 1C00A0E3 MOV R0,#+28 \ 000001F8 400E80E3 ORR R0,R0,#0x400 \ 000001FC 051080E0 ADD R1,R0,R5 \ 00000200 0900A0E1 MOV R0,R9 \ 00000204 ........ _BLF ascii2ws,??ascii2ws??rA 5425 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 5426 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000214 040096E5 LDR R0,[R6, #+4] \ 00000218 0910A0E1 MOV R1,R9 \ 0000021C 810100EF SWI +385 5427 FreeWS(ws); \ 00000220 0900A0E1 MOV R0,R9 \ 00000224 290100EF SWI +297 5428 RefreshGUI(); \ 00000228 960100EF SWI +406 5429 } 5430 #endif 5431 } 5432 #endif 5433 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 5434 { 5435 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 5436 { 5437 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 5438 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000268 0400A0E1 MOV R0,R4 \ 0000026C 9B0100EF SWI +411 5439 } 5440 if (l==GREEN_BUTTON) 5441 { 5442 if (connect_state==3) 5443 { 5444 if ((t=ed_struct->ed_contact)) 5445 { 5446 ExtractEditControl(data,ed_struct->ed_answer,&ec); 5447 SaveAnswer(t,ec.pWS); 5448 if ((s=t->answer)) 5449 { 5450 if ((len=strlen(s))) 5451 { 5452 msg_away_timer=0; 5453 away_m=0; 5454 if(SHOW_ACTIVE) 5455 t->isactive=ACTIVE_TIME; 5456 p=malloc(sizeof(PKT)+len+1); 5457 p->pkt.uin=t->uin; 5458 p->pkt.type=T_SENDMSG; 5459 p->pkt.data_len=len; 5460 strcpy(p->data,s); 5461 /* 5462 #ifdef EVILFOX 5463 strcpy(t->last_msg_buffer, s); 5464 #else 5465 */ 5466 #ifdef ELKA 5467 strcpy(last_msg_buffer, s); 5468 #endif 5469 AddStringToLog(t,0x01,p->data,I_str,(++SENDMSGCOUNT)&0x7FFF,1); //Номер сообщения 5470 SUBPROC((void *)SendAnswer,0,p); 5471 main2_count++; 5472 mfree(t->answer); 5473 t->answer=NULL; 5474 // request_remake_edchat=1; 5475 EDIT_SetFocus(data,ed_struct->ed_answer); 5476 CutWSTR(ews,0); 5477 EDIT_SetTextToFocused(data,ews); 5478 AddMsgToChat(data); 5479 RecountMenu(t,1); 5480 return(-1); 5481 } 5482 } 5483 } 5484 } 5485 } 5486 //================2026rev-begin 5487 if (l==ENTER_BUTTON) 5488 { 5489 5490 if (!EDIT_IsMarkModeActive(data)) // ?????? ???? ?? ????????? 5491 { 5492 int pos, len; 5493 char *link; 5494 ExtractEditControl(ed_struct->ed_chatgui,EDIT_GetFocus(ed_struct->ed_chatgui),&ec); 5495 wstrcpy(ews,ec.pWS); 5496 pos = EDIT_GetCursorPos(data); 5497 len = wstrlen(ews); 5498 link = malloc(len+1); 5499 5500 if(IsUrl(ews, pos, link)) 5501 { 5502 //templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 5503 // templates_lines[i++]=pp; 5504 snprintf(fn, 255, "%s\\tmp%u.url", TEMPLATES_PATH, GetTempName); 5505 if ((f=fopen(fn,A_WriteOnly+A_BIN+A_Create+A_Truncate,P_WRITE,&err))!=-1) 5506 { 5507 fwrite(f,link,strlen(link),&err); 5508 fclose(f,&err); 5509 str_2ws(ews,fn,256); 5510 extern const int OpenBrowser; 5511 if(OpenBrowser) 5512 ExecuteFile(ews,0,0); 5513 else 5514 { 5515 extern const char BalleteMiniPath[]; //kluchnik 26.03.08 5516 ExecuteFile(ews,0,(void*)BalleteMiniPath); 5517 } 5518 5519 unlink(fn, &err); 5520 } 5521 // int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 5522 // templates_lines=realloc(templates_lines,(i+1)*sizeof(char *)); 5523 // templates_lines[i++]="Open Url"; 5524 // EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 5525 // LockSched(); 5526 // ShowMSG(1,(int)link); 5527 // UnlockSched(); 5528 mfree(link); 5529 return (-1); 5530 } 5531 else 5532 { 5533 int i=ed_struct->loaded_templates=LoadTemplates(ed_struct->ed_contact->uin); 5534 EDIT_OpenOptionMenuWithUserItems(data,ed_options_handler,ed_struct,i+2); 5535 mfree(link); 5536 return (-1); 5537 } 5538 5539 } 5540 5541 } 5542 //================ 2026rev-end =================// 5543 5544 if (l==VOL_UP_BUTTON) 5545 { 5546 int pos; 5547 5548 if ((pos=EDIT_GetFocus(data)-2)>=2) 5549 { 5550 EDIT_SetFocus(data, pos); 5551 EDIT_SetCursorPos(data, 1); 5552 } 5553 return (-1); 5554 } 5555 if (l==VOL_DOWN_BUTTON) 5556 { 5557 int pos; 5558 5559 if ((pos=EDIT_GetFocus(data)+2)<=ed_struct->ed_answer) 5560 { 5561 EDIT_SetFocus(data, pos); 5562 EDIT_SetCursorPos(data, 1); 5563 } 5564 return (-1); 5565 } 5566 } 5567 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 8C0195E5 LDR R0,[R5, #+396] \ 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 74A099E5 LDR R10,[R9, #+116] \ 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,??DataTable214 ;; SHOW_ACTIVE \ 000002D8 0070A0E3 MOV R7,#+0 \ 000002DC 000090E5 LDR R0,[R0, #+0] \ 000002E0 2C7185E5 STR R7,[R5, #+300] \ 000002E4 347185E5 STR R7,[R5, #+308] \ 000002E8 000050E3 CMP R0,#+0 \ 000002EC 5A0FA013 MOVNE R0,#+360 \ 000002F0 7C008915 STRNE R0,[R9, #+124] \ 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 1C00A0E3 MOV R0,#+28 \ 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,??DataTable242 ;; `?ed_contact)); 5588 ((HEADER_DESC *)&edchat_hdr)->rc.x2=ScreenW()-1-(width=GetImgWidth(icon)); 5589 DrawImg(ScreenW()-1-width,1,icon); 5590 #else 5591 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] 5592 width=GetImgWidth(icon); \ 00000044 0400A0E1 MOV R0,R4 \ 00000048 220000EF SWI +34 \ 0000004C 0050A0E1 MOV R5,R0 5593 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 5594 /* DrawRoundedFrame(ScreenW()-8,YDISP,ScreenW()-1,YDISP+7,0,0,0, 5595 GetPaletteAdrByColorIndex(0), 5596 GetPaletteAdrByColorIndex(EDIT_IsBusy(edchat_gui)?3:4));*/ 5597 #endif 5598 } 5599 } 5600 } \ 0000006C 3080BDE8 POP {R4,R5,PC} ;; return 5601 \ In segment CODE, align 4, keep-with-next 5602 void edchat_ghook(GUI *data, int cmd) 5603 { \ edchat_ghook: \ 00000000 F0432DE9 PUSH {R4-R9,LR} 5604 5605 static const SOFTKEY_DESC sk={0x0FFF,0x0000,(int)LG_MENU}; 5606 static const SOFTKEY_DESC sk_cancel={0x0FF0,0x0000,(int)LG_CLOSE}; 5607 // static SOFTKEY_DESC sk={0x0018,0x0000,(int)"Menu"}; 5608 int j; 5609 EDITCONTROL ec; 5610 EDCHAT_STRUCT *ed_struct=EDIT_GetUserPointer(data); 5611 PNGTOP_DESC *pltop=PNG_TOP(); 5612 if (cmd==9) \ 00000004 ........ LDR R4,??DataTable220 ;; 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 5613 { 5614 GBS_DelTimer(&tmr_illumination); //by BoBa 25.06.07 \ 00000030 3400A0E3 MOV R0,#+52 \ 00000034 600D80E3 ORR R0,R0,#0x1800 \ 00000038 040080E0 ADD R0,R0,R4 \ 0000003C 8C0100EF SWI +396 5615 pltop->dyn_pltop=NULL; \ 00000040 086088E5 STR R6,[R8, #+8] \ 00000044 170000EA B ??edchat_ghook_1 5616 } 5617 if (cmd==2) \ ??edchat_ghook_0: \ 00000048 081097E5 LDR R1,[R7, #+8] \ 0000004C 020059E3 CMP R9,#+2 \ 00000050 1600001A BNE ??edchat_ghook_2 5618 { 5619 ed_struct->ed_chatgui=data; \ 00000054 045087E5 STR R5,[R7, #+4] 5620 // edgui_data=data; 5621 EDIT_SetFocus(data,ed_struct->ed_answer); \ 00000058 0500A0E1 MOV R0,R5 \ 0000005C 9B0100EF SWI +411 5622 5623 static void *methods[16]; 5624 void **m=GetDataOfItemByID(data,2); \ 00000060 0210A0E3 MOV R1,#+2 \ 00000064 0500A0E1 MOV R0,R5 \ 00000068 4F0100EF SWI +335 \ 0000006C 0050B0E1 MOVS R5,R0 5625 if (m) 5626 { 5627 if (m[1]) \ 00000070 04009515 LDRNE R0,[R5, #+4] \ 00000074 00005013 CMPNE R0,#+0 \ 00000078 6700000A BEQ ??edchat_ghook_3 5628 { 5629 memcpy(methods,m[1],sizeof(methods)); \ 0000007C 7F6FA0E3 MOV R6,#+508 \ 00000080 4020A0E3 MOV R2,#+64 \ 00000084 0010A0E1 MOV R1,R0 \ 00000088 040086E0 ADD R0,R6,R4 \ 0000008C 1E0100EF SWI +286 5630 old_ed_redraw=(void (*)(void *))(methods[0]); \ 00000090 040096E7 LDR R0,[R6, +R4] \ 00000094 F80184E5 STR R0,[R4, #+504] 5631 methods[0]=(void *)my_ed_redraw; \ 00000098 84019FE5 LDR R0,??edchat_ghook_4 ;; my_ed_redraw \ 0000009C 040086E7 STR R0,[R6, +R4] 5632 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} 5633 } 5634 } 5635 } 5636 if (cmd==3) \ ??edchat_ghook_2: \ 000000B0 030059E3 CMP R9,#+3 \ 000000B4 0E00001A BNE ??edchat_ghook_5 5637 { 5638 // if (edgui_data==data) edgui_data=NULL; 5639 if (ed_struct->ed_contact) \ 000000B8 000097E5 LDR R0,[R7, #+0] \ 000000BC 000050E3 CMP R0,#+0 \ 000000C0 0500000A BEQ ??edchat_ghook_6 5640 { 5641 ExtractEditControl(data,ed_struct->ed_answer,&ec); \ 000000C4 0D20A0E1 MOV R2,SP \ 000000C8 0500A0E1 MOV R0,R5 \ 000000CC 690100EF SWI +361 5642 SaveAnswer(ed_struct->ed_contact,ec.pWS); \ 000000D0 28109DE5 LDR R1,[SP, #+40] \ 000000D4 000097E5 LDR R0,[R7, #+0] \ 000000D8 ........ BL SaveAnswer 5643 } 5644 RecountMenu(ed_struct->ed_contact,1); \ ??edchat_ghook_6: \ 000000DC 000097E5 LDR R0,[R7, #+0] \ 000000E0 0110A0E3 MOV R1,#+1 \ 000000E4 ........ BL RecountMenu 5645 mfree(ed_struct); \ 000000E8 0700A0E1 MOV R0,R7 \ 000000EC 150000EF SWI +21 \ 000000F0 ECFFFFEA B ??edchat_ghook_1 5646 } 5647 if (cmd==0x0A) \ ??edchat_ghook_5: \ 000000F4 0A0059E3 CMP R9,#+10 \ 000000F8 0D00001A BNE ??edchat_ghook_7 5648 { 5649 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] 5650 DisableIDLETMR(); \ 00000108 7F0100EF SWI +383 5651 total_unread-=ed_struct->requested_decrement_total_unread; \ 0000010C B00194E5 LDR R0,[R4, #+432] \ 00000110 0C1097E5 LDR R1,[R7, #+12] \ 00000114 010040E0 SUB R0,R0,R1 \ 00000118 B00184E5 STR R0,[R4, #+432] 5652 ed_struct->requested_decrement_total_unread=0; \ 0000011C 0C6087E5 STR R6,[R7, #+12] 5653 #ifdef ELKA 5654 if (!total_unread) \ 00000120 B00194E5 LDR R0,[R4, #+432] \ 00000124 000050E3 CMP R0,#+0 \ 00000128 3B00001A BNE ??edchat_ghook_3 5655 { 5656 SLI_Off(); \ 0000012C ........ BL SLI_Off \ 00000130 DCFFFFEA B ??edchat_ghook_1 5657 } 5658 #endif 5659 /* if (request_close_edchat) 5660 { 5661 request_close_edchat=0; 5662 GeneralFunc_flag1(edchat_id,1); 5663 return; 5664 }*/ 5665 } 5666 if (cmd==7) \ ??edchat_ghook_7: \ 00000134 070059E3 CMP R9,#+7 \ 00000138 2800001A BNE ??edchat_ghook_8 5667 { 5668 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 5669 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 5670 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 5671 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 5672 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 5673 { 5674 time_to_stop_t9=0; \ 00000194 E86184E5 STR R6,[R4, #+488] 5675 if (ed_struct->ed_contact->req_add) \ 00000198 000097E5 LDR R0,[R7, #+0] \ 0000019C 681090E5 LDR R1,[R0, #+104] \ 000001A0 000051E3 CMP R1,#+0 \ 000001A4 0500000A BEQ ??edchat_ghook_10 5676 { 5677 ed_struct->ed_contact->req_add=0; \ 000001A8 686080E5 STR R6,[R0, #+104] 5678 AddMsgToChat(data); \ 000001AC 0500A0E1 MOV R0,R5 \ 000001B0 ........ BL AddMsgToChat 5679 RecountMenu(ed_struct->ed_contact,1); \ 000001B4 000097E5 LDR R0,[R7, #+0] \ 000001B8 0110A0E3 MOV R1,#+1 \ 000001BC ........ BL RecountMenu 5680 } 5681 if (ed_struct->ed_contact->req_drawack) \ ??edchat_ghook_10: \ 000001C0 000097E5 LDR R0,[R7, #+0] \ 000001C4 6C1090E5 LDR R1,[R0, #+108] \ 000001C8 000051E3 CMP R1,#+0 \ 000001CC 1200000A BEQ ??edchat_ghook_3 5682 { 5683 ed_struct->ed_contact->req_drawack=0; \ 000001D0 6C6080E5 STR R6,[R0, #+108] 5684 DrawAck(data); \ 000001D4 0500A0E1 MOV R0,R5 \ 000001D8 ........ BL DrawAck \ 000001DC B1FFFFEA B ??edchat_ghook_1 5685 } 5686 } 5687 } 5688 if (cmd==0x0C) \ ??edchat_ghook_8: \ 000001E0 0C0059E3 CMP R9,#+12 \ 000001E4 0C00001A BNE ??edchat_ghook_3 5689 { 5690 j=EDIT_GetFocus(data); \ 000001E8 0500A0E1 MOV R0,R5 \ 000001EC 820100EF SWI +386 \ 000001F0 0040A0E1 MOV R4,R0 5691 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 5692 EDIT_SetCursorPos(data,1); \ 00000210 0110A0E3 MOV R1,#+1 \ 00000214 0500A0E1 MOV R0,R5 \ 00000218 D40100EF SWI +468 5693 } 5694 } \ ??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 5695 5696 5697 5698 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 `?` 5699 { 5700 1, 5701 edchat_onkey, 5702 edchat_ghook, 5703 (void *)edchat_locret, 5704 0, 5705 &menu_skt, 5706 {0,NULL,NULL,NULL}, 5707 FONT_SMALL, 5708 100, 5709 101, 5710 0, 5711 // 0x00000001 - Выровнять по правому краю 5712 // 0x00000002 - Выровнять по центру 5713 // 0x00000004 - Инверсия знакомест 5714 // 0x00000008 - UnderLine 5715 // 0x00000020 - Не переносить слова 5716 // 0x00000200 - bold 5717 0, 5718 // 0x00000002 - ReadOnly 5719 // 0x00000004 - Не двигается курсор 5720 // 0x40000000 - Поменять местами софт-кнопки 5721 0x40000000 5722 }; 5723 \ In segment CODE, align 4, keep-with-next 5724 void CreateEditChat(CLIST *t) 5725 { \ CreateEditChat: \ 00000000 F04F2DE9 PUSH {R4-R11,LR} 5726 extern const int FIRST_LETTER; 5727 void *ma=malloc_adr(); 5728 void *eq; 5729 EDITCONTROL ec; 5730 EDITC_OPTIONS ec_options; 5731 int color, font, type; 5732 int zc; 5733 5734 LOGQ *lp; 5735 int edchat_toitem; 5736 // edcontact=t; 5737 5738 *((int *)(&edchat_hdr.lgp_id))=(int)t->name; \ 00000004 8C649FE5 LDR R6,??CreateEditChat_0 ;; edchat_desc 5739 // *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+GetIconIndex(t); 5740 *((int **)(&edchat_hdr.icon))=(int *)S_ICONS+IS_NULLICON; \ 00000008 ........ LDR R7,??DataTable221 ;; 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] 5741 5742 eq=AllocEQueue(ma,mfree_adr()); \ 0000002C 158000EF SWI +32789 \ 00000030 0010A0E1 MOV R1,R0 \ 00000034 0500A0E1 MOV R0,R5 \ 00000038 630100EF SWI +355 5743 5744 /* hist = malloc(256); 5745 if(!GetHistory(hist, 256, t->uin)) 5746 { 5747 ascii2ws(ews,hist); 5748 PrepareEditControl(&ec); 5749 ConstructEditControl(&ec,ECT_NORMAL_TEXT,ECF_APPEND_EOL|ECF_DISABLE_T9,ews,ews->wsbody[0]); 5750 } 5751 mfree(hist); 5752 5753 AddEditControlToEditQend(eq,&ec,ma); */ 5754 lp=t->log; \ 0000003C 709094E5 LDR R9,[R4, #+112] \ 00000040 0080A0E1 MOV R8,R0 \ 00000044 000059E3 CMP R9,#+0 \ 00000048 9500000A BEQ ??CreateEditChat_1 5755 5756 while(lp) 5757 { 5758 font = ED_H_FONT_SIZE; 5759 if ((zc=lp->acked&3)) \ ??CreateEditChat_2: \ 0000004C ........ LDR R2,??DataTable222 ;; ED_X_FONT_SIZE \ 00000050 ........ LDR R0,??DataTable223 ;; 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,??DataTable224 ;; I_COLOR \ 00000064 1C208DE5 STR R2,[SP, #+28] \ 00000068 ........ LDR R2,??DataTable225 ;; X_COLOR \ 0000006C 030010E2 ANDS R0,R0,#0x3 \ 00000070 002092E5 LDR R2,[R2, #+0] \ 00000074 14208DE5 STR R2,[SP, #+20] \ 00000078 ........ LDR R2,??DataTable226 ;; O_ED_X_FONT_SIZE \ 0000007C 002092E5 LDR R2,[R2, #+0] \ 00000080 18208DE5 STR R2,[SP, #+24] \ 00000084 ........ LDR R2,??DataTable227 ;; 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 5760 { 5761 if (zc==1) \ 00000098 010050E3 CMP R0,#+1 \ 0000009C 1E00001A BNE ??CreateEditChat_4 5762 color=ACK_COLOR; //Зеленый \ 000000A0 ........ LDR R0,??DataTable228 ;; ACK_COLOR \ 000000A4 1B0000EA B ??CreateEditChat_5 5763 else 5764 color=I_COLOR; 5765 } 5766 else 5767 { 5768 if (lp->ID==0xFFFFFFFF) \ ??CreateEditChat_3: \ 000000A8 080099E5 LDR R0,[R9, #+8] \ 000000AC 010070E3 CMN R0,#+1 \ 000000B0 1700001A BNE ??CreateEditChat_6 5769 { 5770 type = lp->type&0x0F; \ 000000B4 0C0099E5 LDR R0,[R9, #+12] \ 000000B8 0F1000E2 AND R1,R0,#0xF 5771 if(lp->type&0x10) \ 000000BC 100010E3 TST R0,#0x10 \ 000000C0 0B00000A BEQ ??CreateEditChat_7 5772 { 5773 color = (type==1)?O_I_COLOR:((type==3)?O_X_COLOR:O_TO_COLOR); \ 000000C4 010051E3 CMP R1,#+1 \ 000000C8 ........ LDREQ R0,??DataTable229 ;; 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,??DataTable230 ;; O_TO_COLOR \ ??CreateEditChat_8: \ 000000E4 00B090E5 LDR R11,[R0, #+0] \ 000000E8 ........ LDR R0,??DataTable231 ;; O_ED_H_FONT_SIZE \ 000000EC 00A090E5 LDR R10,[R0, #+0] \ 000000F0 090000EA B ??CreateEditChat_4 5774 font = (type==3)?O_ED_X_FONT_SIZE:O_ED_H_FONT_SIZE; 5775 } 5776 else 5777 { 5778 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,??DataTable232 ;; TO_COLOR \ 00000110 000000EA B ??CreateEditChat_5 5779 font = (type==3)?ED_X_FONT_SIZE:ED_H_FONT_SIZE; 5780 } 5781 } 5782 else 5783 color=UNACK_COLOR; //????? \ ??CreateEditChat_6: \ 00000114 ........ LDR R0,??DataTable233 ;; UNACK_COLOR \ ??CreateEditChat_5: \ 00000118 00B090E5 LDR R11,[R0, #+0] 5784 } 5785 PrepareEditControl(&ec); \ ??CreateEditChat_4: \ 0000011C 20008DE2 ADD R0,SP,#+32 \ 00000120 640100EF SWI +356 5786 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 5787 { 5788 ascii2ws(ews,lp->hdr); \ 00000134 280197E5 LDR R0,[R7, #+296] \ 00000138 101089E2 ADD R1,R9,#+16 \ 0000013C ........ _BLF ascii2ws,??ascii2ws??rA 5789 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 00000140 283197E5 LDR R3,[R7, #+296] \ 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 5790 } 5791 else 5792 { 5793 ConstructEditControl(&ec,ECT_HEADER,ECF_DELSTR,ews,0); \ ??CreateEditChat_9: \ 00000158 0000A0E3 MOV R0,#+0 \ 0000015C 01002DE9 PUSH {R0} \ 00000160 283197E5 LDR R3,[R7, #+296] \ 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 5794 } 5795 PrepareEditCOptions(&ec_options); \ 00000178 0D00A0E1 MOV R0,SP \ 0000017C C80100EF SWI +456 5796 SetPenColorToEditCOptions(&ec_options,color); \ 00000180 0B10A0E1 MOV R1,R11 \ 00000184 0D00A0E1 MOV R0,SP \ 00000188 CC0100EF SWI +460 5797 SetFontToEditCOptions(&ec_options,font); \ 0000018C 0A10A0E1 MOV R1,R10 \ 00000190 0D00A0E1 MOV R0,SP \ 00000194 CA0100EF SWI +458 5798 CopyOptionsToEditControl(&ec,&ec_options); \ 00000198 0D10A0E1 MOV R1,SP \ 0000019C 20008DE2 ADD R0,SP,#+32 \ 000001A0 CE0100EF SWI +462 5799 AddEditControlToEditQend(eq,&ec,ma); \ 000001A4 0520A0E1 MOV R2,R5 \ 000001A8 20108DE2 ADD R1,SP,#+32 \ 000001AC 0800A0E1 MOV R0,R8 \ 000001B0 660100EF SWI +358 5800 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 5801 { 5802 ParseAnswer(ews,lp->text); \ 000001C4 280197E5 LDR R0,[R7, #+296] \ 000001C8 601089E2 ADD R1,R9,#+96 \ 000001CC ........ BL ParseAnswer \ 000001D0 050000EA B ??CreateEditChat_12 5803 } 5804 else 5805 { 5806 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 280197E5 LDR R0,[R7, #+296] \ 000001E0 14209D05 LDREQ R2,[SP, #+20] \ 000001E4 601089E2 ADD R1,R9,#+96 \ 000001E8 ........ BL ParseXStatusText 5807 } 5808 PrepareEditControl(&ec); \ ??CreateEditChat_12: \ 000001EC 20008DE2 ADD R0,SP,#+32 \ 000001F0 640100EF SWI +356 5809 ConstructEditControl(&ec, 5810 ECT_NORMAL_TEXT, 5811 ews->wsbody[0] ? ECF_APPEND_EOL|ECF_DISABLE_T9 : ECF_DELSTR, 5812 ews,ews->wsbody[0]); \ 000001F4 283197E5 LDR R3,[R7, #+296] \ 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 5813 PrepareEditCOptions(&ec_options); \ 00000220 04008DE2 ADD R0,SP,#+4 \ 00000224 C80100EF SWI +456 5814 //#ifdef M75 5815 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 5816 { 5817 SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); \ 0000023C 100010E3 TST R0,#0x10 \ 00000240 ........ LDRNE R0,??DataTable234 ;; O_ED_FONT_SIZE \ 00000244 ........ LDREQ R0,??DataTable236 ;; ED_FONT_SIZE \ 00000248 001090E5 LDR R1,[R0, #+0] \ 0000024C 080000EA B ??CreateEditChat_14 5818 } 5819 else 5820 { 5821 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 5822 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 5823 } 5824 //#else 5825 // SetFontToEditCOptions(&ec_options,(lp->type&0x10)?O_ED_FONT_SIZE:ED_FONT_SIZE); 5826 //#endif 5827 CopyOptionsToEditControl(&ec,&ec_options); \ 0000027C 0D10A0E1 MOV R1,SP \ 00000280 20008DE2 ADD R0,SP,#+32 \ 00000284 CE0100EF SWI +462 5828 AddEditControlToEditQend(eq,&ec,ma); \ 00000288 0520A0E1 MOV R2,R5 \ 0000028C 20108DE2 ADD R1,SP,#+32 \ 00000290 0800A0E1 MOV R0,R8 \ 00000294 660100EF SWI +358 5829 lp=lp->next; \ 00000298 009099E5 LDR R9,[R9, #+0] 5830 } \ 0000029C 000059E3 CMP R9,#+0 \ 000002A0 69FFFF1A BNE ??CreateEditChat_2 5831 if (t->isunread) total_unread--; \ ??CreateEditChat_1: \ 000002A4 600094E5 LDR R0,[R4, #+96] 5832 total_unread2=total_unread2-t->unread_msg; 5833 t->unread_msg=0; \ 000002A8 0090A0E3 MOV R9,#+0 \ 000002AC 000050E3 CMP R0,#+0 \ 000002B0 B0019715 LDRNE R0,[R7, #+432] \ 000002B4 01004012 SUBNE R0,R0,#+1 \ 000002B8 B0018715 STRNE R0,[R7, #+432] \ 000002BC 100197E5 LDR R0,[R7, #+272] \ 000002C0 641094E5 LDR R1,[R4, #+100] \ 000002C4 010040E0 SUB R0,R0,R1 \ 000002C8 100187E5 STR R0,[R7, #+272] \ 000002CC 649084E5 STR R9,[R4, #+100] 5834 t->isunread=0; \ 000002D0 609084E5 STR R9,[R4, #+96] 5835 ChangeContactPos(t); \ 000002D4 0400A0E1 MOV R0,R4 \ 000002D8 ........ _BLF ChangeContactPos,??ChangeContactPos??rA 5836 wsprintf(ews, "-------"); \ 000002DC 280197E5 LDR R0,[R7, #+296] \ 000002E0 4C1086E2 ADD R1,R6,#+76 \ 000002E4 240100EF SWI +292 5837 PrepareEditControl(&ec); \ 000002E8 20008DE2 ADD R0,SP,#+32 \ 000002EC 640100EF SWI +356 5838 ConstructEditControl(&ec,ECT_HEADER,ECF_APPEND_EOL,ews,ews->wsbody[0]); \ 000002F0 283197E5 LDR R3,[R7, #+296] \ 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 5839 PrepareEditCOptions(&ec_options); \ 00000310 04008DE2 ADD R0,SP,#+4 \ 00000314 C80100EF SWI +456 5840 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 00000318 ........ LDR R0,??DataTable236 ;; ED_FONT_SIZE \ 0000031C 00A090E5 LDR R10,[R0, #+0] \ 00000320 04008DE2 ADD R0,SP,#+4 \ 00000324 0A10A0E1 MOV R1,R10 \ 00000328 CA0100EF SWI +458 5841 CopyOptionsToEditControl(&ec,&ec_options); \ 0000032C 04108DE2 ADD R1,SP,#+4 \ 00000330 24008DE2 ADD R0,SP,#+36 \ 00000334 CE0100EF SWI +462 5842 AddEditControlToEditQend(eq,&ec,ma); \ 00000338 0520A0E1 MOV R2,R5 \ 0000033C 24108DE2 ADD R1,SP,#+36 \ 00000340 0800A0E1 MOV R0,R8 \ 00000344 660100EF SWI +358 5843 5844 if (t->answer) ParseAnswer(ews,t->answer); \ 00000348 741094E5 LDR R1,[R4, #+116] \ 0000034C 04D08DE2 ADD SP,SP,#+4 \ 00000350 000051E3 CMP R1,#+0 \ 00000354 0200000A BEQ ??CreateEditChat_15 \ 00000358 280197E5 LDR R0,[R7, #+296] \ 0000035C ........ BL ParseAnswer \ 00000360 020000EA B ??CreateEditChat_16 5845 else CutWSTR(ews,0); \ ??CreateEditChat_15: \ 00000364 280197E5 LDR R0,[R7, #+296] \ 00000368 0010A0E3 MOV R1,#+0 \ 0000036C 260100EF SWI +294 5846 PrepareEditControl(&ec); \ ??CreateEditChat_16: \ 00000370 20008DE2 ADD R0,SP,#+32 \ 00000374 640100EF SWI +356 5847 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 283197E5 LDR R3,[R7, #+296] \ 00000394 402DA013 MOVNE R2,#+4096 \ 00000398 0020A003 MOVEQ R2,#+0 \ 0000039C 24008DE2 ADD R0,SP,#+36 \ 000003A0 650100EF SWI +357 5848 5849 PrepareEditCOptions(&ec_options); \ 000003A4 04008DE2 ADD R0,SP,#+4 \ 000003A8 C80100EF SWI +456 5850 SetFontToEditCOptions(&ec_options,ED_FONT_SIZE); \ 000003AC 0A10A0E1 MOV R1,R10 \ 000003B0 04008DE2 ADD R0,SP,#+4 \ 000003B4 CA0100EF SWI +458 5851 CopyOptionsToEditControl(&ec,&ec_options); \ 000003B8 04108DE2 ADD R1,SP,#+4 \ 000003BC 24008DE2 ADD R0,SP,#+36 \ 000003C0 CE0100EF SWI +462 5852 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 5853 5854 if (t->req_xtext) \ 000003D8 8C0094E5 LDR R0,[R4, #+140] \ 000003DC 04D08DE2 ADD SP,SP,#+4 \ 000003E0 000050E3 CMP R0,#+0 \ 000003E4 0400000A BEQ ??CreateEditChat_17 5855 { 5856 FreeXText(t); \ 000003E8 0400A0E1 MOV R0,R4 \ 000003EC ........ _BLF FreeXText,??FreeXText??rA 5857 t->req_xtext=0; \ 000003F0 8C9084E5 STR R9,[R4, #+140] 5858 RequestXText(t->uin); \ 000003F4 0C0094E5 LDR R0,[R4, #+12] \ 000003F8 ........ BL RequestXText 5859 } 5860 5861 EDCHAT_STRUCT *ed_struct=malloc(sizeof(EDCHAT_STRUCT)); \ ??CreateEditChat_17: \ 000003FC 1400A0E3 MOV R0,#+20 \ 00000400 140000EF SWI +20 \ 00000404 0050A0E1 MOV R5,R0 5862 ed_struct->ed_contact=t; \ 00000408 004085E5 STR R4,[R5, #+0] 5863 ed_struct->ed_answer=edchat_toitem; \ 0000040C 08A085E5 STR R10,[R5, #+8] 5864 ed_struct->requested_decrement_total_unread=0; \ 00000410 0C9085E5 STR R9,[R5, #+12] 5865 t->req_add=0; \ 00000414 689084E5 STR R9,[R4, #+104] 5866 t->last_log=NULL; \ 00000418 789084E5 STR R9,[R4, #+120] 5867 5868 // int scr_w=ScreenW(); 5869 // int scr_h=ScreenH(); 5870 // int head_h=HeaderH(); 5871 5872 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] 5873 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] 5874 // edchat_desc.font=ED_FONT_SIZE; 5875 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 C00187E5 STR R0,[R7, #+448] 5876 } \ 00000490 50D08DE2 ADD SP,SP,#+80 \ 00000494 F08FBDE8 POP {R4-R11,PC} ;; return \ ??CreateEditChat_0: \ 00000498 ........ DC32 edchat_desc \ 0000049C ........ DC32 FIRST_LETTER 5877 5878 //----------------------------------------------------------------------------- 5879 #define EC_MNU_MAX 8 5880 \ In segment CODE, align 4, keep-with-next 5881 void Quote(GUI *data) 5882 { \ Quote: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 84D04DE2 SUB SP,SP,#+132 5883 int q_n; 5884 EDITCONTROL ec, ec_hdr; 5885 EDITCONTROL ec_ed; 5886 WSHDR *ed_ws; 5887 WSHDR *ws; 5888 5889 EDCHAT_STRUCT *ed_struct; 5890 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 5891 5892 q_n=EDIT_GetFocus(ed_struct->ed_chatgui); \ 00000010 040094E5 LDR R0,[R4, #+4] \ 00000014 820100EF SWI +386 \ 00000018 0050A0E1 MOV R5,R0 5893 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 5894 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 5895 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 5896 5897 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 5898 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 5899 { 5900 wstrcpy(ed_ws,ec_hdr.pWS); \ 00000070 80109DE5 LDR R1,[SP, #+128] \ 00000074 0500A0E1 MOV R0,R5 \ 00000078 1F0100EF SWI +287 5901 wsAppendChar(ed_ws,'\r'); \ 0000007C 0D10A0E3 MOV R1,#+13 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 1C0000EF SWI +28 \ 00000088 020000EA B ??Quote_1 5902 } 5903 else 5904 CutWSTR(ed_ws,0); \ ??Quote_0: \ 0000008C 0010A0E3 MOV R1,#+0 \ 00000090 0500A0E1 MOV R0,R5 \ 00000094 260100EF SWI +294 5905 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 5906 { 5907 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 5908 } 5909 else 5910 { 5911 wstrcat(ed_ws,ec.pWS); \ ??Quote_2: \ 000000B8 54109DE5 LDR R1,[SP, #+84] \ 000000BC 0500A0E1 MOV R0,R5 \ 000000C0 210100EF SWI +289 5912 } 5913 int ed_pos=0; \ ??Quote_3: \ 000000C4 0000A0E3 MOV R0,#+0 \ 000000C8 FF60A0E3 MOV R6,#+255 \ 000000CC FF6C86E3 ORR R6,R6,#0xFF00 5914 do 5915 { 5916 ed_pos++; \ ??Quote_4: \ 000000D0 017080E2 ADD R7,R0,#+1 5917 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 5918 wsInsertChar(ed_ws,' ',ed_pos); \ 000000E8 0720A0E1 MOV R2,R7 \ 000000EC 2010A0E3 MOV R1,#+32 \ 000000F0 0500A0E1 MOV R0,R5 \ 000000F4 1D0000EF SWI +29 5919 } 5920 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 5921 wsAppendChar(ed_ws,'\r'); \ 00000110 0D10A0E3 MOV R1,#+13 \ 00000114 0500A0E1 MOV R0,R5 \ 00000118 1C0000EF SWI +28 5922 wsAppendChar(ed_ws,'\r'); \ 0000011C 0D10A0E3 MOV R1,#+13 \ 00000120 0500A0E1 MOV R0,R5 \ 00000124 1C0000EF SWI +28 5923 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 5924 wstrcpy(ws,ec_ed.pWS); \ 00000144 28109DE5 LDR R1,[SP, #+40] \ 00000148 0060A0E1 MOV R6,R0 \ 0000014C 1F0100EF SWI +287 5925 wstrcat(ws,ed_ws); \ 00000150 0510A0E1 MOV R1,R5 \ 00000154 0600A0E1 MOV R0,R6 \ 00000158 210100EF SWI +289 5926 FreeWS(ed_ws); \ 0000015C 0500A0E1 MOV R0,R5 \ 00000160 290100EF SWI +297 5927 CutWSTR(ws,ec_ed.maxlen); \ 00000164 F811DDE1 LDRSH R1,[SP, #+24] \ 00000168 0600A0E1 MOV R0,R6 \ 0000016C 260100EF SWI +294 5928 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 5929 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 0000017C 040094E5 LDR R0,[R4, #+4] \ 00000180 0610A0E1 MOV R1,R6 \ 00000184 810100EF SWI +385 5930 FreeWS(ws); \ 00000188 0600A0E1 MOV R0,R6 \ 0000018C 290100EF SWI +297 5931 GeneralFuncF1(1); \ 00000190 0100A0E3 MOV R0,#+1 \ 00000194 3B0100EF SWI +315 5932 } \ 00000198 84D08DE2 ADD SP,SP,#+132 \ 0000019C F080BDE8 POP {R4-R7,PC} ;; return 5933 5934 \ In segment CODE, align 4, keep-with-next 5935 void GetShortInfo(GUI *data) 5936 { \ GetShortInfo: \ 00000000 70402DE9 PUSH {R4-R6,LR} 5937 EDCHAT_STRUCT *ed_struct; 5938 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 5939 5940 TPKT *p; 5941 CLIST *t; 5942 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,??DataTable245 ;; S_ICONS + 396 \ 0000001C 000090E5 LDR R0,[R0, #+0] \ 00000020 030050E3 CMP R0,#+3 \ 00000024 1C00001A BNE ??GetShortInfo_0 5943 { 5944 p=malloc(sizeof(PKT)); \ 00000028 0800A0E3 MOV R0,#+8 \ 0000002C 140000EF SWI +20 \ 00000030 0060A0E1 MOV R6,R0 5945 p->pkt.uin=t->uin; \ 00000034 0C0095E5 LDR R0,[R5, #+12] 5946 p->pkt.type=T_REQINFOSHORT; 5947 p->pkt.data_len=0; 5948 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,??DataTable244 ;; `?ed_chatgui); \ 00000074 040094E5 LDR R0,[R4, #+4] \ 00000078 ........ BL AddMsgToChat 5950 RecountMenu(t,1); \ 0000007C 0110A0E3 MOV R1,#+1 \ 00000080 0500A0E1 MOV R0,R5 \ 00000084 ........ BL RecountMenu 5951 SUBPROC((void *)SendAnswer,0,p); \ 00000088 ........ LDR R0,??DataTable246 ;; SendAnswer \ 0000008C 0620A0E1 MOV R2,R6 \ 00000090 0010A0E3 MOV R1,#+0 \ 00000094 710100EF SWI +369 \ 00000098 08D08DE2 ADD SP,SP,#+8 5952 } 5953 GeneralFuncF1(1); \ ??GetShortInfo_0: \ 0000009C 0100A0E3 MOV R0,#+1 \ 000000A0 3B0100EF SWI +315 5954 } \ 000000A4 7080BDE8 POP {R4-R6,PC} ;; return 5955 5956 void AskNickAndAddContact(EDCHAT_STRUCT *); \ In segment CODE, align 4, keep-with-next 5957 void AddCurContact(GUI *data) 5958 { \ AddCurContact: \ 00000000 00402DE9 PUSH {LR} 5959 EDCHAT_STRUCT *ed_struct; 5960 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 5961 5962 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,??DataTable245 ;; S_ICONS + 396 \ 00000018 001091E5 LDR R1,[R1, #+0] \ 0000001C 030051E3 CMP R1,#+3 \ 00000020 0000001A BNE ??AddCurContact_0 \ 00000024 ........ _BLF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA 5963 GeneralFuncF1(1); \ ??AddCurContact_0: \ 00000028 0100A0E3 MOV R0,#+1 \ 0000002C 3B0100EF SWI +315 5964 } \ 00000030 0080BDE8 POP {PC} ;; return 5965 \ In segment CODE, align 4, keep-with-next 5966 void SendAuthReq(GUI *data) 5967 { \ SendAuthReq: \ 00000000 F0402DE9 PUSH {R4-R7,LR} \ 00000004 14D04DE2 SUB SP,SP,#+20 5968 EDCHAT_STRUCT *ed_struct; 5969 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 5970 5971 TPKT *p; 5972 CLIST *t; 5973 int l; 5974 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,??DataTable245 ;; S_ICONS + 396 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthReq_1 5976 { 5977 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 5978 p->pkt.uin=t->uin; \ 00000054 0C0095E5 LDR R0,[R5, #+12] 5979 p->pkt.type=T_AUTHREQ; 5980 p->pkt.data_len=l; 5981 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 5982 AddStringToLog(t,0x01,p->data,I_str,0xFFFFFFFF,1); \ 00000074 ........ LDR R3,??DataTable242 ;; `?ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 5984 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0500A0E1 MOV R0,R5 \ 000000A8 ........ BL RecountMenu 5985 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable246 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 5986 } 5987 GeneralFuncF1(1); \ ??SendAuthReq_1: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 5988 } \ 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,??DataTable245 ;; S_ICONS + 396 \ 00000030 000090E5 LDR R0,[R0, #+0] \ 00000034 030050E3 CMP R0,#+3 \ 00000038 2000001A BNE ??SendAuthGrant_0 6000 { 6001 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 6002 p->pkt.uin=t->uin; \ 00000054 0C0096E5 LDR R0,[R6, #+12] 6003 p->pkt.type=T_AUTHGRANT; 6004 p->pkt.data_len=l; 6005 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 6006 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 6007 AddMsgToChat(ed_struct->ed_chatgui); \ 00000098 040094E5 LDR R0,[R4, #+4] \ 0000009C ........ BL AddMsgToChat 6008 RecountMenu(t,1); \ 000000A0 0110A0E3 MOV R1,#+1 \ 000000A4 0600A0E1 MOV R0,R6 \ 000000A8 ........ BL RecountMenu 6009 SUBPROC((void *)SendAnswer,0,p); \ 000000AC ........ LDR R0,??DataTable246 ;; SendAnswer \ 000000B0 0720A0E1 MOV R2,R7 \ 000000B4 0010A0E3 MOV R1,#+0 \ 000000B8 710100EF SWI +369 \ 000000BC 08D08DE2 ADD SP,SP,#+8 6010 } 6011 GeneralFuncF1(1); \ ??SendAuthGrant_0: \ 000000C0 0100A0E3 MOV R0,#+1 \ 000000C4 3B0100EF SWI +315 6012 } \ 000000C8 FF81BDE8 POP {R0-R8,PC} ;; return 6013 \ In segment CODE, align 4, keep-with-next 6014 void OpenLogfile(GUI *data) 6015 { \ OpenLogfile: \ 00000000 30402DE9 PUSH {R4,R5,LR} 6016 EDCHAT_STRUCT *ed_struct; 6017 ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 \ 00000008 0040A0E1 MOV R4,R0 6018 6019 extern const char HIST_PATH[64]; 6020 #ifdef EVILFOX 6021 #else 6022 extern const int HISTORY_TYPE; 6023 #endif 6024 CLIST *t; 6025 WSHDR *ws=AllocWS(256); \ 0000000C 400FA0E3 MOV R0,#+256 \ 00000010 250100EF SWI +293 \ 00000014 0050A0E1 MOV R5,R0 6026 if ((t=ed_struct->ed_contact)) \ 00000018 000094E5 LDR R0,[R4, #+0] \ 0000001C 000050E3 CMP R0,#+0 \ 00000020 1800000A BEQ ??OpenLogfile_0 6027 { 6028 #ifdef EVILFOX 6029 wsprintf(ws,"%s\\%u\\%s(%d).txt",HIST_PATH,UIN,t->name, t->uin); 6030 #else 6031 #ifdef UIN_WRITE 6032 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 6033 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,??DataTable247 ;; 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 6034 else 6035 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 6036 #else 6037 if (HISTORY_TYPE) 6038 wsprintf(ws,"%s\\%u\\%u.txt",HIST_PATH,UIN, t->uin); 6039 else 6040 wsprintf(ws,"%s\\%u.txt",HIST_PATH, t->uin); 6041 #endif 6042 #endif 6043 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 6044 } 6045 FreeWS(ws); \ ??OpenLogfile_0: \ 00000088 0500A0E1 MOV R0,R5 \ 0000008C 290100EF SWI +297 6046 GeneralFuncF1(1); \ 00000090 0100A0E3 MOV R0,#+1 \ 00000094 3B0100EF SWI +315 6047 } \ 00000098 3080BDE8 POP {R4,R5,PC} ;; return \ ??OpenLogfile_1: \ 0000009C ........ DC32 HISTORY_TYPE \ 000000A0 ........ DC32 `?` \ 000000A4 ........ DC32 HIST_PATH 6048 \ In segment CODE, align 4, keep-with-next 6049 void ClearLog(GUI *data/*,void *dummy*/) 6050 { \ ClearLog: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 2CD04DE2 SUB SP,SP,#+44 6051 EDITCONTROL ec; 6052 EDCHAT_STRUCT *ed_struct; 6053 WSHDR *ws; 6054 CLIST *t; 6055 6056 ed_struct=MenuGetUserPointer(data); \ 00000008 E00100EF SWI +480 \ 0000000C 0040A0E1 MOV R4,R0 6057 6058 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 6059 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 6060 { 6061 ws=AllocWS(1); \ 00000030 0100A0E3 MOV R0,#+1 \ 00000034 250100EF SWI +293 \ 00000038 0050A0E1 MOV R5,R0 6062 CutWSTR(ws,0); \ 0000003C 0010A0E3 MOV R1,#+0 \ 00000040 260100EF SWI +294 6063 6064 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 6065 EDIT_SetTextToFocused(ed_struct->ed_chatgui,ws); \ 00000050 040094E5 LDR R0,[R4, #+4] \ 00000054 0510A0E1 MOV R1,R5 \ 00000058 810100EF SWI +385 6066 6067 FreeWS(ws); \ 0000005C 0500A0E1 MOV R0,R5 \ 00000060 290100EF SWI +297 6068 GeneralFuncF1(1); \ 00000064 1D0000EA B ??ClearLog_1 6069 } 6070 else 6071 { 6072 6073 if ((t=ed_struct->ed_contact)) \ ??ClearLog_0: \ 00000068 005094E5 LDR R5,[R4, #+0] \ 0000006C 000055E3 CMP R5,#+0 \ 00000070 1C00000A BEQ ??ClearLog_2 6074 { 6075 if (t->log) \ 00000074 700095E5 LDR R0,[R5, #+112] \ 00000078 0060A0E3 MOV R6,#+0 \ 0000007C 000050E3 CMP R0,#+0 \ 00000080 1200000A BEQ ??ClearLog_3 6076 { 6077 FreeLOGQ(&t->log); \ 00000084 700085E2 ADD R0,R5,#+112 \ 00000088 ........ BL FreeLOGQ 6078 t->msg_count=0; \ 0000008C 806085E5 STR R6,[R5, #+128] 6079 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 6080 { 6081 while(ed_struct->ed_answer!=2) 6082 { 6083 EDIT_RemoveEditControl(ed_struct->ed_chatgui,1); \ ??ClearLog_5: \ 000000AC 040094E5 LDR R0,[R4, #+4] \ 000000B0 0110A0E3 MOV R1,#+1 \ 000000B4 D10100EF SWI +465 6084 ed_struct->ed_answer--; \ 000000B8 080094E5 LDR R0,[R4, #+8] \ 000000BC 010040E2 SUB R0,R0,#+1 \ 000000C0 080084E5 STR R0,[R4, #+8] 6085 } \ ??ClearLog_4: \ 000000C4 080094E5 LDR R0,[R4, #+8] \ 000000C8 020050E3 CMP R0,#+2 \ 000000CC F6FFFF1A BNE ??ClearLog_5 6086 } 6087 } 6088 t->isactive=0; //by BoBa 18.06.07 \ ??ClearLog_3: \ 000000D0 7C6085E5 STR R6,[R5, #+124] 6089 RecountMenu(t,1); \ 000000D4 0110A0E3 MOV R1,#+1 \ 000000D8 0500A0E1 MOV R0,R5 \ 000000DC ........ BL RecountMenu 6090 GeneralFuncF1(1); \ ??ClearLog_1: \ 000000E0 0100A0E3 MOV R0,#+1 \ 000000E4 3B0100EF SWI +315 6091 } 6092 } 6093 } \ ??ClearLog_2: \ 000000E8 2CD08DE2 ADD SP,SP,#+44 ;; stack cleaning \ 000000EC 7080BDE8 POP {R4-R6,PC} ;; return 6094 \ In segment CODE, align 4, keep-with-next 6095 void ecmenu_ghook(void *data, int cmd) 6096 { \ ecmenu_ghook: \ 00000000 00402DE9 PUSH {LR} 6097 if (cmd==0x0A) \ 00000004 0A0051E3 CMP R1,#+10 \ 00000008 0080BD18 POPNE {PC} 6098 { 6099 DisableIDLETMR(); \ 0000000C 7F0100EF SWI +383 6100 } 6101 } \ 00000010 0080BDE8 POP {PC} ;; return 6102 \ In segment DATA_C, align 4, align-sorted 6103 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 `?` \ IsActiveUp: \ 00000120 DS8 4 \ 00000124 REQUIRE `?` \ Is_Id3tag_Enabled: \ 00000124 DS8 4 \ 00000128 REQUIRE `?` \ ews: \ 00000128 DS8 4 \ 0000012C REQUIRE `?` \ msg_away_timer: \ 0000012C DS8 4 \ 00000130 REQUIRE `?` \ inp_away_msg2: \ 00000130 DS8 4 \ 00000134 REQUIRE `?` \ away_m: \ 00000134 DS8 4 \ 00000138 REQUIRE `?` \ status_rem: \ 00000138 DS8 4 \ 0000013C REQUIRE `?` \ change_back_status: \ 0000013C DS8 4 \ 00000140 REQUIRE `?` \ Show_XTX: \ 00000140 DS8 4 \ 00000144 REQUIRE `?` \ Is_UPTIME_On: \ 00000144 DS8 4 \ 00000148 REQUIRE `?` \ xstatus_old: \ 00000148 DS8 4 \ 0000014C REQUIRE `?` \ minimum_xstatus: \ 0000014C DS8 4 \ 00000150 REQUIRE `?` \ maximum: \ 00000150 DS8 4 \ 00000154 REQUIRE `?` \ tracktimer: \ 00000154 DS8 4 \ 00000158 REQUIRE `?` \ input_awaymsg_id: \ 00000158 DS8 4 \ 0000015C REQUIRE `?` \ silenthide: \ 0000015C DS8 4 \ 00000160 REQUIRE `?` \ disautorecconect: \ 00000160 DS8 4 \ 00000164 REQUIRE `?` \ Is_Vibra_Enabled: \ 00000164 DS8 4 \ 00000168 REQUIRE `?` \ Is_Sounds_Enabled: \ 00000168 DS8 4 \ 0000016C REQUIRE `?` \ Is_Show_Offline: \ 0000016C DS8 4 \ 00000170 REQUIRE `?` \ Is_Show_Groups: \ 00000170 DS8 4 \ 00000174 REQUIRE `?` \ CurrentStatus: \ 00000174 DS8 4 \ 00000178 REQUIRE `?` \ CurrentPrivateStatus: \ 00000178 DS8 4 \ 0000017C REQUIRE `?` \ vibra_count: \ 0000017C DS8 4 \ 00000180 REQUIRE `?` \ templates_chars: \ 00000180 DS8 4 \ 00000184 REQUIRE `?` \ templates_lines: \ 00000184 DS8 4 \ 00000188 REQUIRE `?` \ RXstate: \ 00000188 DS8 4 \ 0000018C REQUIRE `?` \ connect_state: \ 0000018C DS8 4 \ 00000190 REQUIRE `?` \ sock: \ 00000190 DS8 4 \ 00000194 REQUIRE `?` \ TOTALRECEIVED: \ 00000194 DS8 4 \ 00000198 REQUIRE `?` \ TOTALSENDED: \ 00000198 DS8 4 \ 0000019C REQUIRE `?` \ ALLTOTALRECEIVED: \ 0000019C DS8 4 \ 000001A0 REQUIRE `?` \ ALLTOTALSENDED: \ 000001A0 DS8 4 \ 000001A4 REQUIRE `?` \ sendq_l: \ 000001A4 DS8 4 \ 000001A8 REQUIRE `?` \ sendq_p: \ 000001A8 DS8 4 \ 000001AC REQUIRE `?` \ is_gprs_online: \ 000001AC DS8 4 \ 000001B0 REQUIRE `?` \ total_unread: \ 000001B0 DS8 4 \ 000001B4 REQUIRE `?` \ cltop: \ 000001B4 DS8 4 \ 000001B8 REQUIRE `?` \ GROUP_CACHE: \ 000001B8 DS8 4 \ 000001BC REQUIRE `?` \ contactlist_menu_id: \ 000001BC DS8 4 \ 000001C0 REQUIRE `?` \ edchat_id: \ 000001C0 DS8 4 \ 000001C4 REQUIRE `?` \ 000001C4 DS8 4 \ 000001C8 REQUIRE `?` \ tenseconds_to_ping: \ 000001C8 DS8 4 \ 000001CC REQUIRE `?` \ kopa_online: \ 000001CC DS8 4 \ 000001D0 REQUIRE `?` \ kopa_kontaktu: \ 000001D0 DS8 4 \ 000001D4 REQUIRE `?` \ DNR_ID: \ 000001D4 DS8 4 \ 000001D8 REQUIRE `?` \ DNR_TRIES: \ 000001D8 DS8 4 \ 000001DC REQUIRE `?` \ host_counter: \ 000001DC DS8 4 \ 000001E0 REQUIRE `?` \ ping_time: \ 000001E0 DS8 4 \ 000001E4 REQUIRE `?` \ NEW_MSG: \ 000001E4 DS8 4 \ 000001E8 REQUIRE `?` \ time_to_stop_t9: \ 000001E8 DS8 4 \ 000001EC REQUIRE `?` \ comanda: \ 000001EC DS8 4 \ 000001F0 REQUIRE `?` \ INC_show: \ 000001F0 DS8 4 \ 000001F4 REQUIRE `?` \ font: \ 000001F4 DS8 4 \ 000001F8 REQUIRE `?` \ old_ed_redraw: \ 000001F8 DS8 4 \ 000001FC REQUIRE `?` \ 000001FC DS8 64 \ 0000023C REQUIRE `?` \ elf_path: \ 0000023C DS8 256 \ 0000033C REQUIRE `?` \ ContactT9Key: \ 0000033C DS8 32 \ 0000035C REQUIRE `?` \ talk_sound: \ 0000035C DS8 128 \ 000003DC REQUIRE `?` \ unread_msg_info: \ 000003DC DS8 64 \ 0000041C REQUIRE `?` \ last_msg_buffer: \ 0000041C DS8 4048 \ 000013EC REQUIRE `?` \ mytmr3: \ 000013EC DS8 16 \ 000013FC REQUIRE `?` \ PINGO: \ 000013FC DS8 256 \ 000014FC REQUIRE `?` \ away_msg: \ 000014FC DS8 264 \ 00001604 REQUIRE `?` \ away_msg_time: \ 00001604 DS8 64 \ 00001644 REQUIRE `?` \ away_msg_time_dace: \ 00001644 DS8 16 \ 00001654 REQUIRE `?` \ tim_zone: \ 00001654 DS8 16 \ 00001664 REQUIRE `?` \ away_tmr: \ 00001664 DS8 16 \ 00001674 REQUIRE `?` \ mytmr: \ 00001674 DS8 16 \ 00001684 REQUIRE `?` \ mytmr2: \ 00001684 DS8 16 \ 00001694 REQUIRE `?` \ mytmr4: \ 00001694 DS8 16 \ 000016A4 REQUIRE `?` \ tracktmr: \ 000016A4 DS8 16 \ 000016B4 REQUIRE `?` \ onlineTime: \ 000016B4 DS8 128 \ 00001734 REQUIRE `?` \ logmsg: \ 00001734 DS8 256 \ 00001834 REQUIRE `?` \ tmr_illumination: \ 00001834 DS8 16 \ 00001844 REQUIRE `?` \ tmr_vibra: \ 00001844 DS8 16 \ 00001854 REQUIRE `?` \ reconnect_tmr: \ 00001854 DS8 16 \ 00001864 REQUIRE `?` \ tmr_active: \ 00001864 DS8 16 \ 00001874 REQUIRE `?` \ clm_hdr_text: \ 00001874 DS8 48 \ 000018A4 REQUIRE `?` \ clmenu_sk_r: \ 000018A4 DS8 16 \ 000018B4 REQUIRE `?` \ statusTmr: \ 000018B4 DS8 16 \ 000018C4 REQUIRE `?` \ status: \ 000018C4 DS8 64 \ 00001904 REQUIRE `?` \ hostbuf2: \ 00001904 DS8 128 \ 00001984 REQUIRE `?` \ hostname: \ 00001984 DS8 128 \ 00001A04 REQUIRE `?` \ I_UIN: \ 00001A04 DS8 12 \ 00001A10 REQUIRE `?` \ a_txt: \ 00001A10 DS8 48 \ 00001A40 REQUIRE `?` \ s_txt: \ 00001A40 DS8 48 \ 00001A70 REQUIRE `?` \ d_txt: \ 00001A70 DS8 48 \ 00001AA0 REQUIRE `?` \ f_txt: \ 00001AA0 DS8 48 \ 00001AD0 REQUIRE `?` \ g_txt: \ 00001AD0 DS8 48 \ 00001B00 REQUIRE `?` \ develop: \ 00001B00 DS8 16 \ 00001B10 REQUIRE `?` \ requests1: \ 00001B10 DS8 24 \ 00001B28 REQUIRE `?` \ requests2: \ 00001B28 DS8 20 \ 00001B3C REQUIRE `?` \ requests3: \ 00001B3C DS8 24 \ 00001B54 REQUIRE `?` \ requests4: \ 00001B54 DS8 20 \ 00001B68 REQUIRE `?` \ requests6: \ 00001B68 DS8 24 \ 00001B80 REQUIRE `?` \ mod_info: \ 00001B80 DS8 264 \ 00001C88 REQUIRE `?` \ show_nick: \ 00001C88 DS8 32 \ 00001CA8 REQUIRE `?` 6117 { 6118 Quote, 6119 AddSmile, 6120 GetShortInfo, 6121 AddCurContact, 6122 SendAuthReq, 6123 SendAuthGrant, 6124 OpenLogfile, 6125 ClearLog, 6126 }; 6127 6128 char ecm_contactname[64]; \ ecm_contactname: \ 00001CA8 DS8 64 \ 00001CE8 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 `?` 6129 \ In segment DATA_C, align 4, align-sorted 6130 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 6131 6132 static const MENU_DESC ecmenu_STRUCT= 6133 { 6134 8,NULL,ecmenu_ghook,NULL, 6135 menusoftkeys, 6136 &menu_skt, 6137 0, 6138 NULL, 6139 ecmenu_ITEMS, 6140 ecmenu_HNDLS, 6141 EC_MNU_MAX 6142 }; 6143 \ In segment CODE, align 4, keep-with-next 6144 void ec_menu(EDCHAT_STRUCT *ed_struct) 6145 { \ ec_menu: \ 00000000 70402DE9 PUSH {R4-R6,LR} \ 00000004 24D04DE2 SUB SP,SP,#+36 \ 00000008 0040A0E1 MOV R4,R0 6146 CLIST *t; 6147 int to_remove[EC_MNU_MAX+1]; 6148 int remove=0; 6149 if ((t=ed_struct->ed_contact)) \ 0000000C 001094E5 LDR R1,[R4, #+0] \ 00000010 000051E3 CMP R1,#+0 \ 00000014 4500000A BEQ ??ec_menu_0 6150 { 6151 if (t->name) \ 00000018 ........ LDR R5,??DataTable248 ;; S_ICONS \ 0000001C A800A0E3 MOV R0,#+168 \ 00000020 700D80E3 ORR R0,R0,#0x1C00 \ 00000024 050080E0 ADD R0,R0,R5 \ 00000028 142091E2 ADDS R2,R1,#+20 \ 0000002C 0300000A BEQ ??ec_menu_1 6152 { 6153 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 6154 } 6155 else 6156 { 6157 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 6158 } 6159 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 6160 { 6161 to_remove[++remove]=0; \ 00000064 04108D05 STREQ R1,[SP, #+4] 6162 } 6163 else 6164 { 6165 to_remove[++remove]=1; \ 00000068 0120A013 MOVNE R2,#+1 \ 0000006C 04208D15 STRNE R2,[SP, #+4] 6166 } 6167 6168 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] 6169 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 8C0195E5 LDR R0,[R5, #+396] \ 00000094 030050E3 CMP R0,#+3 \ 00000098 0D00000A BEQ ??ec_menu_5 6170 { 6171 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] 6172 to_remove[++remove]=3; \ 000000AC 010080E2 ADD R0,R0,#+1 \ 000000B0 0330A0E3 MOV R3,#+3 \ 000000B4 003182E7 STR R3,[R2, +R0, LSL #+2] 6173 to_remove[++remove]=4; \ 000000B8 010080E2 ADD R0,R0,#+1 \ 000000BC 0430A0E3 MOV R3,#+4 \ 000000C0 003182E7 STR R3,[R2, +R0, LSL #+2] 6174 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] 6175 } 6176 6177 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] 6178 to_remove[0]=remove; \ 000000FC 00608DE5 STR R6,[SP, #+0] 6179 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 6180 } 6181 } \ ??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 6182 6183 \ In segment CODE, align 4, keep-with-next 6184 void AskNickAndAddContact(EDCHAT_STRUCT *ed_struct) 6185 { 6186 CreateAddContactGrpDialog(ed_struct->ed_contact); \ AskNickAndAddContact: \ 00000000 000090E5 LDR R0,[R0, #+0] \ 00000004 ........ _BF CreateAddContactGrpDialog,??CreateAddContactGrpDialog??rA ;; tailcall 6187 } 6188 \ In segment CODE, align 4, keep-with-next 6189 void AddSmile(GUI *data) 6190 { \ AddSmile: \ 00000000 00402DE9 PUSH {LR} 6191 EDCHAT_STRUCT *ed_struct=MenuGetUserPointer(data); \ 00000004 E00100EF SWI +480 6192 CreateSmileSelectGUI(ed_struct); \ 00000008 ........ _BLF CreateSmileSelectGUI,??CreateSmileSelectGUI??rA 6193 GeneralFuncF1(1); \ 0000000C 0100A0E3 MOV R0,#+1 \ 00000010 3B0100EF SWI +315 6194 } \ 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 \ ??DataTable27: \ 00000000 ........ DC32 S_ICONS \ 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 \ ??DataTable52: \ 00000000 ........ DC32 TIME_OR_MSG \ In segment CODE, align 4, keep-with-next \ ??DataTable56: \ 00000000 ........ DC32 XStatusesImgList \ In segment CODE, align 4, keep-with-next \ ??DataTable57: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable58: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable59: \ 00000000 ........ DC32 HISTORY_BUFFER \ In segment CODE, align 4, keep-with-next \ ??DataTable62: \ 00000000 ........ DC32 AUTO_ENGADE \ In segment CODE, align 4, keep-with-next \ ??DataTable63: \ 00000000 ........ DC32 successed_config_filename \ In segment CODE, align 4, keep-with-next \ ??DataTable64: \ 00000000 ........ DC32 S_ICONS + 436 \ In segment CODE, align 4, keep-with-next \ ??DataTable65: \ 00000000 ........ DC32 `?` \ In segment CODE, align 4, keep-with-next \ ??DataTable210: \ 00000000 ........ DC32 end_socket \ In segment CODE, align 4, keep-with-next \ ??DataTable211: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable212: \ 00000000 ........ DC32 create_connect \ In segment CODE, align 4, keep-with-next \ ??DataTable214: \ 00000000 ........ DC32 SHOW_ACTIVE \ In segment CODE, align 4, keep-with-next \ ??DataTable217: \ 00000000 ........ DC32 main2_count \ In segment CODE, align 4, keep-with-next \ ??DataTable218: \ 00000000 ........ DC32 TEMPLATES_PATH \ In segment CODE, align 4, keep-with-next \ ??DataTable220: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable221: \ 00000000 ........ DC32 S_ICONS \ In segment CODE, align 4, keep-with-next \ ??DataTable222: \ 00000000 ........ DC32 ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable223: \ 00000000 ........ DC32 ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable224: \ 00000000 ........ DC32 I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable225: \ 00000000 ........ DC32 X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable226: \ 00000000 ........ DC32 O_ED_X_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable227: \ 00000000 ........ DC32 O_X_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable228: \ 00000000 ........ DC32 ACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable229: \ 00000000 ........ DC32 O_I_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable230: \ 00000000 ........ DC32 O_TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable231: \ 00000000 ........ DC32 O_ED_H_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable232: \ 00000000 ........ DC32 TO_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable233: \ 00000000 ........ DC32 UNACK_COLOR \ In segment CODE, align 4, keep-with-next \ ??DataTable234: \ 00000000 ........ DC32 O_ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable236: \ 00000000 ........ DC32 ED_FONT_SIZE \ In segment CODE, align 4, keep-with-next \ ??DataTable242: \ 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 DC32 0 \ `?`: \ 00000124 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000128 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000012C 00000000 DC32 0 \ `?`: \ 00000130 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000134 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000138 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000013C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000140 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000144 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000148 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000014C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000150 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000154 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000158 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000015C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000160 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000164 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000168 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000016C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000170 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000174 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000178 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000017C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000180 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000184 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000188 F6FFFFFF DC32 -10 \ `?`: \ 0000018C 00000000 DC32 0 \ `?`: \ 00000190 FFFFFFFF DC32 -1 \ `?`: \ 00000194 00000000 DC8 0, 0, 0, 0 \ `?`: \ 00000198 00000000 DC8 0, 0, 0, 0 \ `?`: \ 0000019C 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001A4 00000000 DC32 0 \ `?`: \ 000001A8 00000000 DC32 0H \ `?`: \ 000001AC 01000000 DC32 1 \ `?`: \ 000001B0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001B8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001BC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C4 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001C8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001CC 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D0 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001D4 00000000 DC32 0 \ `?`: \ 000001D8 03000000 DC32 3 \ `?`: \ 000001DC 00000000 DC32 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 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001F4 09000000 DC32 9 \ `?`: \ 000001F8 00000000 DC8 0, 0, 0, 0 \ `?`: \ 000001FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000020C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000021C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000022C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000023C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000024C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000025C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000026C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000027C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000028C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000029C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000002FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000030C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000031C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000032C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000033C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000034C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000035C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000036C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000037C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000038C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000039C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000003DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000003FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000040C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 0000041C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000042C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000043C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000044C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000045C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000046C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000047C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000048C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000049C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000004FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000050C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000051C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000052C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000053C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000054C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000055C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000056C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000057C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000058C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000059C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000005FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000060C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000061C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000062C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000063C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000064C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000065C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000066C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000067C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000068C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000069C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000006FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000070C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000071C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000072C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000073C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000074C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000075C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000076C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000077C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000078C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000079C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000007FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000080C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000081C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000082C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000083C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000084C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000085C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000086C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000087C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000088C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000089C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000008FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000090C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000091C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000092C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000093C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000094C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000095C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000096C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000097C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000098C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000099C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000009FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000A9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ABC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ACC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ADC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000AFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000B9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000BFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000C9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000CFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000D9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000DFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000E9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000ECC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000EFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F0C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F1C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F2C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F3C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F4C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F5C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F6C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F7C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F8C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000F9C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FAC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FBC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FCC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FDC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FEC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00000FFC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000100C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000101C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000102C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000103C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000104C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000105C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000106C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000107C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000108C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000109C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000010FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000110C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000111C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000112C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000113C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000114C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000115C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000116C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000117C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000118C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000119C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000011FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000120C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000121C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000122C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000123C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000124C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000125C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000126C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000127C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000128C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000129C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000012FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000130C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000131C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000132C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000133C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000134C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000135C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000136C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000137C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000138C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000139C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000013DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000013EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000013FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000140C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000141C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000142C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000143C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000144C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000145C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000146C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000147C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000148C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000149C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000014EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000014FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000150C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000151C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000152C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000153C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000154C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000155C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000156C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000157C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000158C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 0000159C 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015AC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015BC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015CC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015DC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015EC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000015FC 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001604 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001614 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001624 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001634 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001644 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001654 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001664 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001674 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001684 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001694 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000016A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000016B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000016F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001704 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001714 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001724 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001734 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001744 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001754 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001764 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001774 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001784 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001794 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000017F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001804 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001814 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001824 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001834 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001844 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001854 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001864 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001874 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001884 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001894 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 000018C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000018F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001904 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001914 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001924 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001934 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001944 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001954 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001964 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001974 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001984 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001994 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019A4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019B4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019C4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019D4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019E4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 000019F4 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A04 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ `?`: \ 00001A10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001A70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001A90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001AD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001AF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001B10 53656E64696E DC8 "Sending online time..." \ 67206F6E6C69 \ 6E652074696D \ 652E2E2E00 \ 00001B27 00 DC8 0 \ `?`: \ 00001B28 53656E64696E DC8 "Sending msg info..." \ 67206D736720 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001B3C 53656E64696E DC8 "Sending battery info..." \ 672062617474 \ 65727920696E \ 666F2E2E2E00 \ `?`: \ 00001B54 53656E64696E DC8 "Sending mod info..." \ 67206D6F6420 \ 696E666F2E2E \ 2E00 \ `?`: \ 00001B68 53656E64696E DC8 "Sending offline info..." \ 67206F66666C \ 696E6520696E \ 666F2E2E2E00 \ `?`: \ 00001B80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001B90 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BA0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BB0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BC0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BD0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BE0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001BF0 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C00 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C10 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C20 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C30 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C40 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C50 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C60 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C70 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C80 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0 \ 0000 \ `?`: \ 00001C88 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001C98 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ `?`: \ 00001CA8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CB8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CC8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ 00001CD8 000000000000 DC8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 \ 000000000000 \ 00000000 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 FF0F0000 DC16 4095, 0 \ 00000004 ........ DC32 `?`: \ 00000000 18000000 DC16 24, 0 \ 00000004 ........ DC32 `?` \ 00000008 01000000 DC16 1, 0 \ 0000000C ........ DC32 `?` \ 00000010 3D000000 DC16 61, 0 \ 00000014 FBC0FF7F DC32 2147467515 \ In segment DATA_ID, align 4, align-sorted \ `?`: \ 00000000 ........0000 DC32 input_awaymsg_sk, 0 \ 0000 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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" \ 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 +04:00" \ 343A303000 \ 000000D7 00 DC8 0 \ 000000D8 474D54202B30 DC8 "GMT +04:30" \ 343A333000 \ 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 474D54202B30 DC8 "GMT +03:30" \ 333A333000 \ 0000015B 00 DC8 0 \ 0000015C 474D54202B31 DC8 "GMT +10:00" \ 303A303000 \ 00000167 00 DC8 0 \ 00000168 474D54202B31 DC8 "GMT +11:00" \ 313A303000 \ 00000173 00 DC8 0 \ 00000174 474D54202B31 DC8 "GMT +12:00" \ 323A303000 \ 0000017F 00 DC8 0 \ 00000180 474D54202B31 DC8 "GMT +13:00" \ 333A303000 \ 0000018B 00 DC8 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 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 1, align-sorted \ 00000000 3A0A00 DC8 ":\012" \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 67726F75706F DC8 "groupon.png" \ 6E2E706E6700 \ 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 "groupoff.png" \ 66662E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6E756C6C2E70 DC8 "null.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 616464636F6E DC8 "addcont.png" \ 742E706E6700 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 686561642E70 DC8 "head.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 6C6F676F2E70 DC8 "logo.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 70696E672E70 DC8 "ping.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 73657474696E DC8 "settings.png" \ 67732E706E67 \ 00 \ 0000000D 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973312E70 DC8 "vis1.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973322E70 DC8 "vis2.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 \ In segment DATA_C, align 4, align-sorted \ `?`: \ 00000000 766973332E70 DC8 "vis3.png" \ 6E6700 \ 00000009 000000 DC8 0, 0, 0 Maximum stack usage in bytes: Function CSTACK -------- ------ AddContactT9Key 12 AddCurContact 4 AddLOGQ 0 AddMsgToChat 108 AddSmile 4 AddStringToLog 192 AddToMain 44 AskNickAndAddContact 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 48 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 76 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 60 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 68 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 228 init_time_zone 356 DrawPing 80 Remind_Timer2 68 Reminder_timer 32 xstatuse 96 x_zstatus 156 DrawOnlineTime 148 DrawAutoMSG 140 input_awaymsg_onkey 224 input_awaymsg_ghook 68 input_awaymsg_locret 4 InputAwayMsg 352 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 100 stop_vibra 88 start_vibra2 60 stop_vibra2 88 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 196 UpdateCLheader 640 ClearContactT9Key 24 AddContactT9Key 36 BackSpaceContactT9 36 create_contactlist_menu 108 contactlist_menu_ghook 68 RecountMenu 160 contactlist_menu_onkey 1816 GetOnTotalContact 92 contactlist_menu_iconhndl 660 GetHost 192 atoi 84 GetPort 276 GetHostsCount 120 create_connect 744 ClearSendQ 32 end_socket 40 SendAnswer 388 send_login 148 do_ping 52 SendMSGACK 52 RequestXText 52 get_answer 1448 AddToMain 564 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 CheckComand 1648 INC_Nick 32 show_pp_sender 340 Get_Online_total 92 ProcessPacket 2500 process_active_timer 148 method0 1028 method1 44 method2 36 method3 24 method4 20 method5 204 method8 8 method9 8 my_keyhook 164 ? 12 maincsm_oncreate 264 maincsm_onclose 288 do_reconnect 40 CheckDoubleRun 120 maincsm_onmessage 2952 addIconBar 228 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 7400 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 ??DataTable27 4 ??DataTable32 4 ??DataTable33 4 ??DataTable34 4 ??DataTable35 4 ??DataTable41 4 ??DataTable44 4 ??DataTable48 4 ??DataTable52 4 ??DataTable56 4 ??DataTable57 4 ??DataTable58 4 ??DataTable59 4 ??DataTable62 4 ??DataTable63 4 ??DataTable64 4 ??DataTable65 4 ??DataTable66 4 ??DataTable67 4 ??DataTable69 4 ??DataTable70 4 ??DataTable76 4 ??DataTable77 4 ??DataTable79 4 ??DataTable80 4 ??DataTable81 4 ??DataTable82 4 ??DataTable83 4 ??DataTable86 4 ??DataTable88 4 ??DataTable89 4 ??DataTable90 4 ??DataTable98 4 ??DataTable99 4 ??DataTable101 4 ??DataTable102 4 ??DataTable103 4 ??DataTable104 4 ??DataTable105 4 ??DataTable106 4 ??DataTable107 4 ??DataTable108 4 ??DataTable112 4 ??DataTable116 4 ??DataTable118 4 ??DataTable119 4 ??DataTable120 4 ??DataTable121 4 ??DataTable122 4 ??DataTable123 4 ??DataTable125 4 ??DataTable128 4 ??DataTable129 4 ??DataTable130 4 ??DataTable131 4 ??DataTable132 4 ??DataTable133 4 ??DataTable134 4 ??DataTable135 4 ??DataTable138 4 ??DataTable139 4 ??DataTable140 4 ??DataTable145 4 ??DataTable148 4 ??DataTable151 4 ??DataTable152 4 ??DataTable154 4 ??DataTable156 4 ??DataTable157 4 ??DataTable159 4 ??DataTable160 4 ??DataTable164 4 ??DataTable169 4 ??DataTable170 4 ??DataTable171 4 ??DataTable178 4 ??DataTable181 4 ??DataTable183 4 ??DataTable185 4 ??DataTable186 4 ??DataTable188 4 ??DataTable189 4 ??DataTable190 4 ??DataTable191 4 ??DataTable194 4 ??DataTable195 4 ??DataTable196 4 ??DataTable197 4 ??DataTable198 4 ??DataTable199 4 ??DataTable200 4 ??DataTable201 4 ??DataTable202 4 ??DataTable203 4 ??DataTable204 4 ??DataTable206 4 ??DataTable209 4 ??DataTable210 4 ??DataTable211 4 ??DataTable212 4 ??DataTable214 4 ??DataTable217 4 ??DataTable218 4 ??DataTable220 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 ??DataTable236 4 ??DataTable242 4 ??DataTable244 4 ??DataTable245 4 ??DataTable246 4 ??DataTable247 4 ??DataTable248 4 ??DataTable249 4 ? 7400 ? 8 ? 24 ? 8 ? 12 ? 12 ? 4 ? 8 ? 8 ? 8 ? 8 ? 52 ? 396 ? 32 ? 16 ? 3 ? 16 ? 4 ? 4 ? 4 ? 4 ? 4 ? 204 ? 2 ? 40 ? 12 ? 3 ? 8 ? 52 ? 3 ? 12 ? 12 ? 164 ? 8 ? 36 ? 3 ? 12 ? 16 ? 12 ? 8 ? 16 ? 8 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 8 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 ? 12 ? 12 ? 16 ? 12 ? 12 ? 12 Others 1064 35 932 bytes in segment CODE 4 622 bytes in segment DATA_C 7 440 bytes in segment DATA_I 7 440 bytes in segment DATA_ID 33 104 bytes in segment DATA_Z 24 bytes in segment INITTAB 34 892 bytes of CODE memory (+ 1 064 bytes shared) 12 062 bytes of CONST memory 40 544 bytes of DATA memory Errors: none Warnings: none